All functions:
  Elements:
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:24,1
    - Dst: butil::RandInt
      Src: /src/brpc/test/rand_util_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:25,1
    - Dst: butil::RandInt
      Src: /src/brpc/test/rand_util_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:26,1
    - Dst: butil::RandInt
      Src: /src/brpc/test/rand_util_unittest.cc:26,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:29,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:30,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:31,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:32,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/rand_util_unittest.cc:35,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:39,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:40,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:41,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:42,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:43,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/rand_util_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:49,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:49,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:50,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:51,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:52,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:52,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:52,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:53,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:55,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:55,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:55,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:56,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:58,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:58,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:58,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:59,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/rand_util_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:61,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/rand_util_unittest.cc:61,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:61,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:62,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:63,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 64
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::GetJsService::jquery_min
    - EXPECT_NE
    - butil::fast_rand_in
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::RandInt
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, Sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandDouble
      Src: /src/brpc/test/rand_util_unittest.cc:68,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/rand_util_unittest.cc:69,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/rand_util_unittest.cc:70,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/test/rand_util_unittest.cc:72,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/rand_util_unittest.cc:73,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/rand_util_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 75
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_GT
    - butil::RandDouble
    - butil::fast_rand_double
    - EXPECT_LE
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, RandDouble)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/rand_util_unittest.cc:80,1
    - Dst: butil::RandBytes
      Src: /src/brpc/test/rand_util_unittest.cc:81,1
    - Dst: std::sort
      Src: /src/brpc/test/rand_util_unittest.cc:82,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/rand_util_unittest.cc:85,1
    - Dst: std::unique
      Src: /src/brpc/test/rand_util_unittest.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 86
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::RandBytes
    - std::sort
    - memset
    - std::unique
    - EXPECT_GT
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, RandBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandBytesAsString
      Src: /src/brpc/test/rand_util_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:90,1
    - Dst: std::string::size
      Src: /src/brpc/test/rand_util_unittest.cc:90,1
    - Dst: butil::RandBytesAsString
      Src: /src/brpc/test/rand_util_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:92,1
    - Dst: std::string::size
      Src: /src/brpc/test/rand_util_unittest.cc:92,1
    - Dst: std::string::size
      Src: /src/brpc/test/rand_util_unittest.cc:94,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/rand_util_unittest.cc:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 100
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - EXPECT_EQ
    - std::string::size
    - butil::RandBytesAsString
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, RandBytesAsString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/rand_util_unittest.cc:105,1
    - Dst: butil::RandGenerator
      Src: /src/brpc/test/rand_util_unittest.cc:105,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/rand_util_unittest.cc:106,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:106,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 108
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - EXPECT_LE
    - butil::RandGenerator
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, RandGeneratorForRandomShuffle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/rand_util_unittest.cc:123,1
    - Dst: LOG
      Src: /src/brpc/test/rand_util_unittest.cc:130,1
    - Dst: butil::RandGenerator
      Src: /src/brpc/test/rand_util_unittest.cc:134,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/rand_util_unittest.cc:135,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/rand_util_unittest.cc:149,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 152
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::fast_rand_less_than
    - butil::RandGenerator
    - butil::BaseIteratorRangeToNumberTraits::max
    - ASSERT_LT
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, RandGeneratorIsUniform)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/rand_util_unittest.cc:161,1
    - Dst: butil::RandUint64
      Src: /src/brpc/test/rand_util_unittest.cc:166,1
    - Dst: butil::fast_rand
      Src: /src/brpc/test/rand_util_unittest.cc:166,1
    - Dst: FAIL
      Src: /src/brpc/test/rand_util_unittest.cc:176,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 179
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    - LOG
    - FAIL
    - butil::RandUint64
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, RandUint64ProducesBothValuesOfAllBits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: uint8_t::uint8_t
      Src: /src/brpc/test/rand_util_unittest.cc:190,1
    - Dst: butil::TimeTicks::HighResNow
      Src: /src/brpc/test/rand_util_unittest.cc:191,1
    - Dst: butil::RandBytes
      Src: /src/brpc/test/rand_util_unittest.cc:193,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/rand_util_unittest.cc:193,1
    - Dst: butil::TimeTicks::HighResNow
      Src: /src/brpc/test/rand_util_unittest.cc:195,1
    - Dst: LOG
      Src: /src/brpc/test/rand_util_unittest.cc:197,1
    - Dst: InMicroseconds
      Src: /src/brpc/test/rand_util_unittest.cc:198,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 199
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::RandBytes
    - InMicroseconds
    - scoped_ptr::get
    - uint8_t::uint8_t
    - LOG
    - butil::TimeTicks::HighResNow
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, DISABLED_RandBytesPerf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/rand_util_unittest.cc:205,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/rand_util_unittest.cc:206,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/rand_util_unittest.cc:208,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/rand_util_unittest.cc:210,1
    - Dst: LOG
      Src: /src/brpc/test/rand_util_unittest.cc:211,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/rand_util_unittest.cc:211,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 218
    functionName: TEST
    functionSourceFile: /src/brpc/test/rand_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::fast_rand_less_than
    - butil::Timer::n_elapsed
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(RandUtilTest, fast_rand_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 16
    functionName: CachedItem
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CachedItem()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: CachedItem
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CachedItem(int new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - CachedItem
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: CachedItem
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CachedItem(const CachedItem& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: ~CachedItem()
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CachedItem()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 16
    functionName: CachedItem
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CachedItem()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: CachedItem
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CachedItem(int new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - CachedItem
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: CachedItem
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CachedItem(const CachedItem& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: ~CachedItem()
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CachedItem()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:42,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:42,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:42,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:43,1
    - Dst: Cache::Peek
      Src: /src/brpc/test/mru_cache_unittest.cc:43,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:43,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:49,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:49,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:53,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:54,1
    - Dst: Cache::begin
      Src: /src/brpc/test/mru_cache_unittest.cc:54,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:55,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:55,1
    - Dst: Cache::Peek
      Src: /src/brpc/test/mru_cache_unittest.cc:57,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:58,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:61,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:67,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:67,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:71,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:72,1
    - Dst: Cache::rend
      Src: /src/brpc/test/mru_cache_unittest.cc:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:74,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:80,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:82,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:87,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:88,1
    - Dst: Cache::rend
      Src: /src/brpc/test/mru_cache_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:90,1
    - Dst: Cache::Erase
      Src: /src/brpc/test/mru_cache_unittest.cc:95,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:97,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:97,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:99,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:100,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:101,1
    - Dst: Cache::Erase
      Src: /src/brpc/test/mru_cache_unittest.cc:103,1
    - Dst: Cache::begin
      Src: /src/brpc/test/mru_cache_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:104,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:104,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:108,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:110,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:110,1
    - Dst: Cache::Clear
      Src: /src/brpc/test/mru_cache_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:112,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - Cache::Peek
    - Cache::begin
    - Cache::size
    - Cache::Clear
    - Cache::rend
    - Cache::Put
    - EXPECT_EQ
    - Cache::rbegin
    - Cache::end
    - Cache::Erase
    - Cache::Get
    linkageType: ''
    returnType: void
    signature: void TEST(MRUCacheTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:121,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:125,1
    - Dst: Cache::ShrinkToSize
      Src: /src/brpc/test/mru_cache_unittest.cc:128,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:132,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:133,1
    - Dst: Cache::rend
      Src: /src/brpc/test/mru_cache_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:135,1
    - Dst: Cache::Peek
      Src: /src/brpc/test/mru_cache_unittest.cc:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:141,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:141,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:144,1
    - Dst: Cache::rend
      Src: /src/brpc/test/mru_cache_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Cache::Peek
    - Cache::ShrinkToSize
    - Cache::Put
    - EXPECT_EQ
    - Cache::rbegin
    - Cache::end
    - Cache::rend
    linkageType: ''
    returnType: void
    signature: void TEST(MRUCacheTest, GetVsPeek)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:156,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:160,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:164,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:168,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:173,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:173,1
    - Dst: Cache::rbegin
      Src: /src/brpc/test/mru_cache_unittest.cc:175,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:176,1
    - Dst: Cache::rend
      Src: /src/brpc/test/mru_cache_unittest.cc:176,1
    - Dst: Cache::ShrinkToSize
      Src: /src/brpc/test/mru_cache_unittest.cc:180,1
    - Dst: Cache::begin
      Src: /src/brpc/test/mru_cache_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 185
    functionName: TEST
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Cache::begin
    - Cache::size
    - Cache::ShrinkToSize
    - Cache::Put
    - EXPECT_EQ
    - Cache::rbegin
    - Cache::rend
    linkageType: ''
    returnType: void
    signature: void TEST(MRUCacheTest, KeyReplacement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:196,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:196,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:197,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:197,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:201,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:202,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:203,1
    - Dst: Cache::Erase
      Src: /src/brpc/test/mru_cache_unittest.cc:206,1
    - Dst: Cache::begin
      Src: /src/brpc/test/mru_cache_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:207,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:213,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:213,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:214,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:214,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:218,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:223,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:223,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:224,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:225,1
    - Dst: Cache::Clear
      Src: /src/brpc/test/mru_cache_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 229
    functionName: TEST
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachedItem::CachedItem
    - Cache::begin
    - Cache::size
    - Cache::Clear
    - Cache::Put
    - EXPECT_EQ
    - Cache::end
    - Cache::Erase
    - Cache::Get
    linkageType: ''
    returnType: void
    signature: void TEST(MRUCacheTest, Owning)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:241,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:241,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:242,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:242,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:243,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:243,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:244,1
    - Dst: CachedItem::CachedItem
      Src: /src/brpc/test/mru_cache_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:248,1
    - Dst: Cache::size
      Src: /src/brpc/test/mru_cache_unittest.cc:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 253
    functionName: TEST
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Cache::size
    - Cache::Put
    - CachedItem::CachedItem
    linkageType: ''
    returnType: void
    signature: void TEST(MRUCacheTest, AutoEvict)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:261,1
    - Dst: Cache::Put
      Src: /src/brpc/test/mru_cache_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:266,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:266,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:267,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:267,1
    - Dst: Cache::ShrinkToSize
      Src: /src/brpc/test/mru_cache_unittest.cc:268,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/mru_cache_unittest.cc:269,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:269,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/mru_cache_unittest.cc:270,1
    - Dst: Cache::Get
      Src: /src/brpc/test/mru_cache_unittest.cc:270,1
    - Dst: Cache::end
      Src: /src/brpc/test/mru_cache_unittest.cc:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 271
    functionName: TEST
    functionSourceFile: /src/brpc/test/mru_cache_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Cache::ShrinkToSize
    - Cache::Put
    - EXPECT_EQ
    - Cache::end
    - Cache::Get
    linkageType: ''
    returnType: void
    signature: void TEST(MRUCacheTest, HashingMRUCache)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 24
    functionName: ErrnoTest::ErrnoTest
    functionSourceFile: /src/brpc/test/errno_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ErrnoTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: ~ErrnoTest()
    functionSourceFile: /src/brpc/test/errno_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ErrnoTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:46,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:46,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:47,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/errno_unittest.cpp
    functionUses: 0
    functionsReached:
    - berror
    - ASSERT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ErrnoTest, system_errno)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:51,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:51,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:52,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:52,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:53,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:53,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:54,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:54,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/errno_unittest.cpp:55,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:55,1
    - Dst: printf
      Src: /src/brpc/test/errno_unittest.cpp:58,1
    - Dst: printf
      Src: /src/brpc/test/errno_unittest.cpp:59,1
    - Dst: berror
      Src: /src/brpc/test/errno_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 60
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/errno_unittest.cpp
    functionUses: 0
    functionsReached:
    - berror
    - ASSERT_STREQ
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST_F(ErrnoTest, customized_errno)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>::vector<value_type>
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:33,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:34,1
    - Dst: bthread::WorkStealingQueue*::steal
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:39,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 52
    functionName: steal_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<value_type>::vector<value_type>
    - std::vector*::push_back
    - bthread::WorkStealingQueue*::steal
    - std::vector*::reserve
    linkageType: ''
    returnType: void
    signature: void * steal_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:60,1
    - Dst: bthread::WorkStealingQueue*::push
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:61,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:62,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 72
    functionName: push_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - bthread::WorkStealingQueue*::push
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void * push_thread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>::vector<value_type>
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:75,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:76,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:81,1
    - Dst: bthread::WorkStealingQueue*::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:82,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:83,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: pop_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector*::reserve
    - std::vector<value_type>::vector<value_type>
    - std::vector*::push_back
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bthread::WorkStealingQueue*::pop
    linkageType: ''
    returnType: void
    signature: void * pop_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::WorkStealingQueue::WorkStealingQueue
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:94,1
    - Dst: bthread::WorkStealingQueue::init
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:94,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:98,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:100,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:101,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:101,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:104,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:106,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:108,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:109,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:110,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:114,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:116,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:117,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:118,1
    - Dst: bthread::WorkStealingQueue::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:124,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:130,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:132,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 137
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - std::vector::push_back
    - bthread::WorkStealingQueue::WorkStealingQueue
    - pthread_join
    - std::vector::end
    - pthread_create
    - std::sort
    - std::vector*::size
    - std::vector::begin
    - std::unique
    - bthread::WorkStealingQueue::init
    - bthread::WorkStealingQueue::pop
    - std::vector::reserve
    - std::vector::size
    - std::vector::resize
    linkageType: ''
    returnType: void
    signature: void TEST(WSQTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>::vector<value_type>
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:33,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:34,1
    - Dst: bthread::WorkStealingQueue*::steal
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:39,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 52
    functionName: steal_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<value_type>::vector<value_type>
    - std::vector*::push_back
    - bthread::WorkStealingQueue*::steal
    - std::vector*::reserve
    linkageType: ''
    returnType: void
    signature: void * steal_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:60,1
    - Dst: bthread::WorkStealingQueue*::push
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:61,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:62,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 72
    functionName: push_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - bthread::WorkStealingQueue*::push
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void * push_thread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>::vector<value_type>
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:75,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:76,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:81,1
    - Dst: bthread::WorkStealingQueue*::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:82,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:83,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: pop_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector*::reserve
    - std::vector<value_type>::vector<value_type>
    - std::vector*::push_back
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bthread::WorkStealingQueue*::pop
    linkageType: ''
    returnType: void
    signature: void * pop_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::WorkStealingQueue::WorkStealingQueue
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:94,1
    - Dst: bthread::WorkStealingQueue::init
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:94,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:98,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:100,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:101,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:101,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:104,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:106,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:108,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:109,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:110,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:114,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:116,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:117,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:118,1
    - Dst: bthread::WorkStealingQueue::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:124,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:130,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:132,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 137
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - std::vector::push_back
    - bthread::WorkStealingQueue::WorkStealingQueue
    - pthread_join
    - std::vector::end
    - pthread_create
    - std::sort
    - std::vector*::size
    - std::vector::begin
    - std::unique
    - bthread::WorkStealingQueue::init
    - bthread::WorkStealingQueue::pop
    - std::vector::reserve
    - std::vector::size
    - std::vector::resize
    linkageType: ''
    returnType: void
    signature: void TEST(WSQTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:37,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:40,1
    - Dst: butil::UTF8ToUTF16AndAdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:42,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:67,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:70,1
    - Dst: butil::UTF16ToUTF8AndAdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 74
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - ARRAYSIZE_UNSAFE
    - butil::UTF16ToUTF8AndAdjustOffsets
    - EXPECT_EQ
    - butil::UTF8ToUTF16AndAdjustOffsets
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, AdjustOffset)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:81,1
    - Dst: std::for_each
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:82,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:82,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:82,1
    - Dst: LimitOffset
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:83,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:85,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:90,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:93,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:95,1
    - Dst: std::for_each
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:96,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:96,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:96,1
    - Dst: LimitOffset
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:97,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:99,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:104,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 105
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - LimitOffset
    - std::vector::push_back
    - std::vector::end
    - std::vector::begin
    - std::for_each
    - std::vector::clear
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, LimitOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:114,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:116,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:116,1
    - Dst: butil::OffsetAdjuster::AdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:119,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:119,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:119,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:121,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:128,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:130,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:130,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:131,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:131,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:132,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:132,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:133,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:133,1
    - Dst: butil::OffsetAdjuster::AdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:139,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:139,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:139,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:141,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:148,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:150,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:150,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:151,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:151,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:152,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:152,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:153,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:153,1
    - Dst: butil::OffsetAdjuster::AdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:154,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:159,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:159,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:159,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:161,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 163
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - OffsetAdjuster::Adjustments::push_back
    - OffsetAdjuster::Adjustment
    - butil::OffsetAdjuster::AdjustOffsets
    - arraysize
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, AdjustOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:172,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:174,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:174,1
    - Dst: butil::OffsetAdjuster::UnadjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:177,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:179,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:186,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:188,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:188,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:189,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:189,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:190,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:190,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:191,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:191,1
    - Dst: butil::OffsetAdjuster::UnadjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:196,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:198,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:205,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:207,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:207,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:208,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:208,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:209,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:209,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:210,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:210,1
    - Dst: butil::OffsetAdjuster::UnadjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:217,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:217,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:217,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:219,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 221
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - butil::OffsetAdjuster::UnadjustOffsets
    - OffsetAdjuster::Adjustments::push_back
    - OffsetAdjuster::Adjustment
    - arraysize
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, UnadjustOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:237,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:237,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:238,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:238,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:239,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:239,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:240,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:240,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:251,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:251,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:253,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:253,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:255,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:255,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:257,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:257,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:259,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:259,1
    - Dst: butil::OffsetAdjuster::MergeSequentialAdjustments
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:275,1
    - Dst: OffsetAdjuster::Adjustments::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:278,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 294
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - OffsetAdjuster::Adjustments::push_back
    - OffsetAdjuster::Adjustment
    - butil::OffsetAdjuster::MergeSequentialAdjustments
    - EXPECT_EQ
    - OffsetAdjuster::Adjustments::size
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, MergeSequentialAdjustments)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:37,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:40,1
    - Dst: butil::UTF8ToUTF16AndAdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:42,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:67,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:70,1
    - Dst: butil::UTF16ToUTF8AndAdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 74
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - ARRAYSIZE_UNSAFE
    - butil::UTF16ToUTF8AndAdjustOffsets
    - EXPECT_EQ
    - butil::UTF8ToUTF16AndAdjustOffsets
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, AdjustOffset)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:81,1
    - Dst: std::for_each
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:82,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:82,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:82,1
    - Dst: LimitOffset
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:83,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:85,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:90,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:93,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:95,1
    - Dst: std::for_each
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:96,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:96,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:96,1
    - Dst: LimitOffset
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:97,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:99,1
    - Dst: std::vector::end
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:104,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 105
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - LimitOffset
    - std::vector::push_back
    - std::vector::end
    - std::vector::begin
    - std::for_each
    - std::vector::clear
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, LimitOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:114,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:116,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:116,1
    - Dst: butil::OffsetAdjuster::AdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:119,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:119,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:119,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:121,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:128,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:130,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:130,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:131,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:131,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:132,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:132,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:133,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:133,1
    - Dst: butil::OffsetAdjuster::AdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:139,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:139,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:139,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:141,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:148,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:150,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:150,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:151,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:151,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:152,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:152,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:153,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:153,1
    - Dst: butil::OffsetAdjuster::AdjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:154,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:159,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:159,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:159,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:161,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 163
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - OffsetAdjuster::Adjustments::push_back
    - OffsetAdjuster::Adjustment
    - butil::OffsetAdjuster::AdjustOffsets
    - arraysize
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, AdjustOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:172,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:174,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:174,1
    - Dst: butil::OffsetAdjuster::UnadjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:177,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:179,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:186,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:188,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:188,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:189,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:189,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:190,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:190,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:191,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:191,1
    - Dst: butil::OffsetAdjuster::UnadjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:196,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:198,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:205,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:207,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:207,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:208,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:208,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:209,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:209,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:210,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:210,1
    - Dst: butil::OffsetAdjuster::UnadjustOffsets
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:217,1
    - Dst: std::vector::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:217,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:217,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:219,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 221
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - butil::OffsetAdjuster::UnadjustOffsets
    - OffsetAdjuster::Adjustments::push_back
    - OffsetAdjuster::Adjustment
    - arraysize
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, UnadjustOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:237,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:237,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:238,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:238,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:239,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:239,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:240,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:240,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:251,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:251,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:253,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:253,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:255,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:255,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:257,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:257,1
    - Dst: OffsetAdjuster::Adjustments::push_back
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:259,1
    - Dst: OffsetAdjuster::Adjustment
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:259,1
    - Dst: butil::OffsetAdjuster::MergeSequentialAdjustments
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:275,1
    - Dst: OffsetAdjuster::Adjustments::size
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:278,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_offset_string_conversions_unittest.cc:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 294
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_offset_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - OffsetAdjuster::Adjustments::push_back
    - OffsetAdjuster::Adjustment
    - butil::OffsetAdjuster::MergeSequentialAdjustments
    - EXPECT_EQ
    - OffsetAdjuster::Adjustments::size
    linkageType: ''
    returnType: void
    signature: void TEST(UTFOffsetStringConversionsTest, MergeSequentialAdjustments)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:39,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:40,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:41,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:42,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:43,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: butil::ConditionVariableTest::ConditionVariableTest
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void ConditionVariableTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:159,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:160,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:161,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:162,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:164,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:165,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:166,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:167,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 169
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - ConditionVariable::TimedWait
    - Lock::Release
    - Lock::Acquire
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, StartupShutdownTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:174,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:176,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:177,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:179,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:181,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:182,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:185,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 188
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - ConditionVariable::TimedWait
    - Lock::Acquire
    - Lock::Release
    - butil::TimeTicks::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, TimeoutTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:197,1
    - Dst: settimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 200
    functionName: butil::ALLOW_UNUSED::BackInTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - settimeofday
    - gettimeofday
    linkageType: ''
    returnType: void
    signature: void ALLOW_UNUSED BackInTime(Lock* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:221,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:222,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:223,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:228,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:242,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:243,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:244,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:245,1
    - Dst: butil::Time::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:247,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:250,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:252,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:254,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:258,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:259,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:260,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:269,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:270,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:271,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:272,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:274,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:276,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:278,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:290,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:291,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:292,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:293,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:295,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:297,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:299,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:311,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:312,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:313,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:314,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:316,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:318,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:320,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:330,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:331,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:332,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:333,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:335,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:337,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:339,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:348,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:350,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 80
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 354
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - butil::Time::Now
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, MAYBE_MultiThreadConsumerTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:365,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:366,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:367,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:371,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:384,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:385,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:386,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:387,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:389,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:392,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:393,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:394,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:398,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:411,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:412,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:413,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:414,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:416,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:420,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:421,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:422,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:426,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:438,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:440,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 445
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, LargeFastTaskTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadHandle::PlatformThreadHandle
      Src: /src/brpc/test/condition_variable_unittest.cc:458,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/condition_variable_unittest.cc:466,1
    - Dst: butil::WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:467,1
    - Dst: butil::WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:468,1
    - Dst: butil::WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 476
    functionName: butil::WorkQueue::WorkQueue
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::WorkQueue::ResetHistory
    - butil::TimeDelta::FromMilliseconds
    - PlatformThreadHandle::PlatformThreadHandle
    - butil::WorkQueue::SetTaskCount
    - butil::PlatformThread::Create
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkQueue(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:481,1
    - Dst: Broadcast
      Src: /src/brpc/test/condition_variable_unittest.cc:483,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/condition_variable_unittest.cc:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:488,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 489
    functionName: WorkQueue::~WorkQueue()
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - Broadcast
    - butil::PlatformThread::Join
    - EXPECT_EQ
    - SetShutdown
    linkageType: ''
    returnType: void
    signature: void WorkQueue::~WorkQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:492,1
    - Dst: DCHECK
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 491
    functionDepth: 1
    functionLinenumber: 491
    functionLinenumberEnd: 495
    functionName: butil::WorkQueue::GetThreadId
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - DCHECK
    - butil::WorkQueue::EveryIdWasAllocated
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetThreadId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 500
    functionName: butil::WorkQueue::EveryIdWasAllocated
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::EveryIdWasAllocated() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:503,1
    - Dst: DCHECK_LT
      Src: /src/brpc/test/condition_variable_unittest.cc:504,1
    - Dst: Signal
      Src: /src/brpc/test/condition_variable_unittest.cc:507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 510
    functionName: butil::WorkQueue::GetAnAssignment
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - Signal
    - DCHECK_LT
    linkageType: ''
    returnType: TimeDelta
    signature: TimeDelta WorkQueue::GetAnAssignment(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 515
    functionName: butil::WorkQueue::WorkIsCompleted
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkIsCompleted(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: butil::WorkQueue::task_count
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: int
    signature: int WorkQueue::task_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 525
    functionName: butil::WorkQueue::allow_help_requests
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::allow_help_requests() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:528,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 527
    functionDepth: 1
    functionLinenumber: 527
    functionLinenumberEnd: 531
    functionName: butil::WorkQueue::shutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::shutdown() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 545
    functionName: butil::WorkQueue::ThreadSafeCheckShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::ThreadSafeCheckShutdown(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:548,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 551
    functionName: butil::WorkQueue::thread_shutting_down
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::thread_shutting_down()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 553
    functionDepth: 0
    functionLinenumber: 553
    functionLinenumberEnd: 555
    functionName: butil::WorkQueue::lock
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Lock
    signature: Lock * WorkQueue::lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 559
    functionName: butil::WorkQueue::work_is_available
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::work_is_available()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: butil::WorkQueue::all_threads_have_ids
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::all_threads_have_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 567
    functionName: butil::WorkQueue::no_more_tasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::no_more_tasks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 574
    functionName: butil::WorkQueue::ResetHistory
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ResetHistory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/test/condition_variable_unittest.cc:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 581
    functionName: butil::WorkQueue::GetMinCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::min
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMinCompletionsByWorkerThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/test/condition_variable_unittest.cc:586,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 588
    functionName: butil::WorkQueue::GetMaxCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMaxCompletionsByWorkerThread() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 596
    functionName: butil::WorkQueue::GetNumThreadsTakingAssignments
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsTakingAssignments() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 604
    functionName: butil::WorkQueue::GetNumThreadsCompletingTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsCompletingTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 611
    functionName: butil::WorkQueue::GetNumberOfCompletedTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumberOfCompletedTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - delay
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 615
    functionName: butil::WorkQueue::SetWorkTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetWorkTime(TimeDelta delay)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: butil::WorkQueue::SetTaskCount
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetTaskCount(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - allow
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 623
    functionName: butil::WorkQueue::SetAllowHelp
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetAllowHelp(bool allow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: butil::WorkQueue::SetShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetShutdown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 630
    functionDepth: 1
    functionLinenumber: 630
    functionLinenumberEnd: 639
    functionName: butil::WorkQueue::SpinUntilAllThreadsAreWaiting
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilAllThreadsAreWaiting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - task_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 650
    functionName: butil::WorkQueue::SpinUntilTaskCountLessThan
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilTaskCountLessThan(int task_count)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::WorkQueue::GetThreadId
      Src: /src/brpc/test/condition_variable_unittest.cc:675,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:676,1
    - Dst: butil::WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:677,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:688,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:691,1
    - Dst: butil::WorkQueue::thread_shutting_down
      Src: /src/brpc/test/condition_variable_unittest.cc:693,1
    - Dst: butil::WorkQueue::GetAnAssignment
      Src: /src/brpc/test/condition_variable_unittest.cc:697,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::allow_help_requests
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:703,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:705,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:710,1
    - Dst: butil::WorkQueue::WorkIsCompleted
      Src: /src/brpc/test/condition_variable_unittest.cc:716,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 671
    functionDepth: 2
    functionLinenumber: 671
    functionLinenumberEnd: 719
    functionName: butil::WorkQueue::ThreadMain
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::WorkQueue::GetThreadId
    - butil::WorkQueue::allow_help_requests
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::shutdown
    - ConditionVariable::TimedWait
    - butil::WorkQueue::WorkIsCompleted
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::GetAnAssignment
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:39,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:40,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:41,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:42,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:43,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: butil::ConditionVariableTest::ConditionVariableTest
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void ConditionVariableTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:159,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:160,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:161,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:162,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:164,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:165,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:166,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:167,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 169
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - ConditionVariable::TimedWait
    - Lock::Release
    - Lock::Acquire
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, StartupShutdownTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:174,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:176,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:177,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:179,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:181,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:182,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:185,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 188
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - ConditionVariable::TimedWait
    - Lock::Acquire
    - Lock::Release
    - butil::TimeTicks::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, TimeoutTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:197,1
    - Dst: settimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 200
    functionName: butil::ALLOW_UNUSED::BackInTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - settimeofday
    - gettimeofday
    linkageType: ''
    returnType: void
    signature: void ALLOW_UNUSED BackInTime(Lock* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:221,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:222,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:223,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:228,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:242,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:243,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:244,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:245,1
    - Dst: butil::Time::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:247,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:250,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:252,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:254,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:258,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:259,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:260,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:269,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:270,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:271,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:272,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:274,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:276,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:278,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:290,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:291,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:292,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:293,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:295,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:297,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:299,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:311,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:312,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:313,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:314,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:316,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:318,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:320,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:330,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:331,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:332,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:333,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:335,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:337,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:339,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:348,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:350,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 80
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 354
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - butil::Time::Now
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, MAYBE_MultiThreadConsumerTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:365,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:366,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:367,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:371,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:384,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:385,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:386,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:387,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:389,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:392,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:393,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:394,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:398,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:411,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:412,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:413,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:414,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:416,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:420,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:421,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:422,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:426,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:438,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:440,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 445
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, LargeFastTaskTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadHandle::PlatformThreadHandle
      Src: /src/brpc/test/condition_variable_unittest.cc:458,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/condition_variable_unittest.cc:466,1
    - Dst: butil::WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:467,1
    - Dst: butil::WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:468,1
    - Dst: butil::WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 476
    functionName: butil::WorkQueue::WorkQueue
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::WorkQueue::ResetHistory
    - butil::TimeDelta::FromMilliseconds
    - PlatformThreadHandle::PlatformThreadHandle
    - butil::WorkQueue::SetTaskCount
    - butil::PlatformThread::Create
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkQueue(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:481,1
    - Dst: Broadcast
      Src: /src/brpc/test/condition_variable_unittest.cc:483,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/condition_variable_unittest.cc:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:488,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 489
    functionName: WorkQueue::~WorkQueue()
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - Broadcast
    - butil::PlatformThread::Join
    - EXPECT_EQ
    - SetShutdown
    linkageType: ''
    returnType: void
    signature: void WorkQueue::~WorkQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:492,1
    - Dst: DCHECK
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 491
    functionDepth: 2
    functionLinenumber: 491
    functionLinenumberEnd: 495
    functionName: butil::WorkQueue::GetThreadId
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - DCHECK
    - butil::WorkQueue::EveryIdWasAllocated
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetThreadId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 500
    functionName: butil::WorkQueue::EveryIdWasAllocated
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::EveryIdWasAllocated() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:503,1
    - Dst: DCHECK_LT
      Src: /src/brpc/test/condition_variable_unittest.cc:504,1
    - Dst: Signal
      Src: /src/brpc/test/condition_variable_unittest.cc:507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 510
    functionName: butil::WorkQueue::GetAnAssignment
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - Signal
    - DCHECK_LT
    linkageType: ''
    returnType: TimeDelta
    signature: TimeDelta WorkQueue::GetAnAssignment(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 515
    functionName: butil::WorkQueue::WorkIsCompleted
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkIsCompleted(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: butil::WorkQueue::task_count
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: int
    signature: int WorkQueue::task_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 525
    functionName: butil::WorkQueue::allow_help_requests
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::allow_help_requests() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:528,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 527
    functionDepth: 1
    functionLinenumber: 527
    functionLinenumberEnd: 531
    functionName: butil::WorkQueue::shutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::shutdown() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 545
    functionName: butil::WorkQueue::ThreadSafeCheckShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::ThreadSafeCheckShutdown(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:548,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 551
    functionName: butil::WorkQueue::thread_shutting_down
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::thread_shutting_down()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 553
    functionDepth: 0
    functionLinenumber: 553
    functionLinenumberEnd: 555
    functionName: butil::WorkQueue::lock
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Lock
    signature: Lock * WorkQueue::lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 559
    functionName: butil::WorkQueue::work_is_available
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::work_is_available()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: butil::WorkQueue::all_threads_have_ids
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::all_threads_have_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 567
    functionName: butil::WorkQueue::no_more_tasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::no_more_tasks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 574
    functionName: butil::WorkQueue::ResetHistory
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ResetHistory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/test/condition_variable_unittest.cc:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 581
    functionName: butil::WorkQueue::GetMinCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::min
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMinCompletionsByWorkerThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/test/condition_variable_unittest.cc:586,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 588
    functionName: butil::WorkQueue::GetMaxCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMaxCompletionsByWorkerThread() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 596
    functionName: butil::WorkQueue::GetNumThreadsTakingAssignments
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsTakingAssignments() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 604
    functionName: butil::WorkQueue::GetNumThreadsCompletingTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsCompletingTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 611
    functionName: butil::WorkQueue::GetNumberOfCompletedTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumberOfCompletedTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - delay
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 615
    functionName: butil::WorkQueue::SetWorkTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetWorkTime(TimeDelta delay)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: butil::WorkQueue::SetTaskCount
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetTaskCount(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - allow
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 623
    functionName: butil::WorkQueue::SetAllowHelp
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetAllowHelp(bool allow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: butil::WorkQueue::SetShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetShutdown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 630
    functionDepth: 1
    functionLinenumber: 630
    functionLinenumberEnd: 639
    functionName: butil::WorkQueue::SpinUntilAllThreadsAreWaiting
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilAllThreadsAreWaiting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - task_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 650
    functionName: butil::WorkQueue::SpinUntilTaskCountLessThan
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilTaskCountLessThan(int task_count)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::WorkQueue::GetThreadId
      Src: /src/brpc/test/condition_variable_unittest.cc:675,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:676,1
    - Dst: butil::WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:677,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:688,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:691,1
    - Dst: butil::WorkQueue::thread_shutting_down
      Src: /src/brpc/test/condition_variable_unittest.cc:693,1
    - Dst: butil::WorkQueue::GetAnAssignment
      Src: /src/brpc/test/condition_variable_unittest.cc:697,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::allow_help_requests
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:703,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:705,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:710,1
    - Dst: butil::WorkQueue::WorkIsCompleted
      Src: /src/brpc/test/condition_variable_unittest.cc:716,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 671
    functionDepth: 2
    functionLinenumber: 671
    functionLinenumberEnd: 719
    functionName: butil::WorkQueue::ThreadMain
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::WorkQueue::GetThreadId
    - butil::WorkQueue::allow_help_requests
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::shutdown
    - ConditionVariable::TimedWait
    - butil::WorkQueue::WorkIsCompleted
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::GetAnAssignment
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:39,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:40,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:41,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:42,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:43,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: butil::ConditionVariableTest::ConditionVariableTest
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void ConditionVariableTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:159,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:160,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:161,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:162,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:164,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:165,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:166,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:167,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 169
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - ConditionVariable::TimedWait
    - Lock::Release
    - Lock::Acquire
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, StartupShutdownTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:174,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:176,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:177,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:179,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:181,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:182,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:185,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 188
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - ConditionVariable::TimedWait
    - Lock::Acquire
    - Lock::Release
    - butil::TimeTicks::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, TimeoutTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:197,1
    - Dst: settimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 200
    functionName: butil::ALLOW_UNUSED::BackInTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - settimeofday
    - gettimeofday
    linkageType: ''
    returnType: void
    signature: void ALLOW_UNUSED BackInTime(Lock* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:221,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:222,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:223,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:228,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:242,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:243,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:244,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:245,1
    - Dst: butil::Time::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:247,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:250,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:252,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:254,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:258,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:259,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:260,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:269,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:270,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:271,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:272,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:274,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:276,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:278,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:290,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:291,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:292,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:293,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:295,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:297,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:299,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:311,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:312,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:313,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:314,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:316,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:318,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:320,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:330,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:331,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:332,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:333,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:335,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:337,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:339,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:348,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:350,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 80
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 354
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - butil::Time::Now
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, MAYBE_MultiThreadConsumerTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:365,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:366,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:367,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:371,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:384,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:385,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:386,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:387,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:389,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:392,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:393,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:394,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:398,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:411,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:412,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:413,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:414,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:416,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:420,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:421,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:422,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:426,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:438,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:440,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 445
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, LargeFastTaskTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadHandle::PlatformThreadHandle
      Src: /src/brpc/test/condition_variable_unittest.cc:458,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/condition_variable_unittest.cc:466,1
    - Dst: butil::WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:467,1
    - Dst: butil::WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:468,1
    - Dst: butil::WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 476
    functionName: butil::WorkQueue::WorkQueue
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::WorkQueue::ResetHistory
    - butil::TimeDelta::FromMilliseconds
    - PlatformThreadHandle::PlatformThreadHandle
    - butil::WorkQueue::SetTaskCount
    - butil::PlatformThread::Create
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkQueue(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:481,1
    - Dst: Broadcast
      Src: /src/brpc/test/condition_variable_unittest.cc:483,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/condition_variable_unittest.cc:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:488,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 489
    functionName: WorkQueue::~WorkQueue()
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - Broadcast
    - butil::PlatformThread::Join
    - EXPECT_EQ
    - SetShutdown
    linkageType: ''
    returnType: void
    signature: void WorkQueue::~WorkQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:492,1
    - Dst: DCHECK
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 491
    functionDepth: 2
    functionLinenumber: 491
    functionLinenumberEnd: 495
    functionName: butil::WorkQueue::GetThreadId
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - DCHECK
    - butil::WorkQueue::EveryIdWasAllocated
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetThreadId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 500
    functionName: butil::WorkQueue::EveryIdWasAllocated
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 5
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::EveryIdWasAllocated() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:503,1
    - Dst: DCHECK_LT
      Src: /src/brpc/test/condition_variable_unittest.cc:504,1
    - Dst: Signal
      Src: /src/brpc/test/condition_variable_unittest.cc:507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 510
    functionName: butil::WorkQueue::GetAnAssignment
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - Signal
    - DCHECK_LT
    linkageType: ''
    returnType: TimeDelta
    signature: TimeDelta WorkQueue::GetAnAssignment(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 515
    functionName: butil::WorkQueue::WorkIsCompleted
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkIsCompleted(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: butil::WorkQueue::task_count
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: int
    signature: int WorkQueue::task_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 525
    functionName: butil::WorkQueue::allow_help_requests
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::allow_help_requests() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:528,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 527
    functionDepth: 1
    functionLinenumber: 527
    functionLinenumberEnd: 531
    functionName: butil::WorkQueue::shutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::shutdown() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 545
    functionName: butil::WorkQueue::ThreadSafeCheckShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::ThreadSafeCheckShutdown(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:548,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 551
    functionName: butil::WorkQueue::thread_shutting_down
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::thread_shutting_down()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 553
    functionDepth: 0
    functionLinenumber: 553
    functionLinenumberEnd: 555
    functionName: butil::WorkQueue::lock
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Lock
    signature: Lock * WorkQueue::lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 559
    functionName: butil::WorkQueue::work_is_available
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::work_is_available()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: butil::WorkQueue::all_threads_have_ids
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::all_threads_have_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 567
    functionName: butil::WorkQueue::no_more_tasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::no_more_tasks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 574
    functionName: butil::WorkQueue::ResetHistory
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ResetHistory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/test/condition_variable_unittest.cc:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 581
    functionName: butil::WorkQueue::GetMinCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::min
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMinCompletionsByWorkerThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/test/condition_variable_unittest.cc:586,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 588
    functionName: butil::WorkQueue::GetMaxCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMaxCompletionsByWorkerThread() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 596
    functionName: butil::WorkQueue::GetNumThreadsTakingAssignments
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsTakingAssignments() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 604
    functionName: butil::WorkQueue::GetNumThreadsCompletingTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsCompletingTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 611
    functionName: butil::WorkQueue::GetNumberOfCompletedTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumberOfCompletedTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - delay
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 615
    functionName: butil::WorkQueue::SetWorkTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetWorkTime(TimeDelta delay)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: butil::WorkQueue::SetTaskCount
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetTaskCount(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - allow
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 623
    functionName: butil::WorkQueue::SetAllowHelp
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetAllowHelp(bool allow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: butil::WorkQueue::SetShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetShutdown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 630
    functionDepth: 1
    functionLinenumber: 630
    functionLinenumberEnd: 639
    functionName: butil::WorkQueue::SpinUntilAllThreadsAreWaiting
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilAllThreadsAreWaiting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - task_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 650
    functionName: butil::WorkQueue::SpinUntilTaskCountLessThan
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilTaskCountLessThan(int task_count)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::WorkQueue::GetThreadId
      Src: /src/brpc/test/condition_variable_unittest.cc:675,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:676,1
    - Dst: butil::WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:677,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:688,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:691,1
    - Dst: butil::WorkQueue::thread_shutting_down
      Src: /src/brpc/test/condition_variable_unittest.cc:693,1
    - Dst: butil::WorkQueue::GetAnAssignment
      Src: /src/brpc/test/condition_variable_unittest.cc:697,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::allow_help_requests
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:703,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:705,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:710,1
    - Dst: butil::WorkQueue::WorkIsCompleted
      Src: /src/brpc/test/condition_variable_unittest.cc:716,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 671
    functionDepth: 2
    functionLinenumber: 671
    functionLinenumberEnd: 719
    functionName: butil::WorkQueue::ThreadMain
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::WorkQueue::GetThreadId
    - butil::WorkQueue::allow_help_requests
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::shutdown
    - ConditionVariable::TimedWait
    - butil::WorkQueue::WorkIsCompleted
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::GetAnAssignment
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:39,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:40,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:41,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:42,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:43,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: butil::ConditionVariableTest::ConditionVariableTest
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void ConditionVariableTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:159,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:160,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:161,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:162,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:164,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:165,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:166,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:167,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 169
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - ConditionVariable::TimedWait
    - Lock::Release
    - Lock::Acquire
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, StartupShutdownTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock::Acquire
      Src: /src/brpc/test/condition_variable_unittest.cc:174,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:176,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:177,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:179,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:181,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:182,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:185,1
    - Dst: Lock::Release
      Src: /src/brpc/test/condition_variable_unittest.cc:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 188
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - ConditionVariable::TimedWait
    - Lock::Acquire
    - Lock::Release
    - butil::TimeTicks::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, TimeoutTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:197,1
    - Dst: settimeofday
      Src: /src/brpc/test/condition_variable_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 200
    functionName: butil::ALLOW_UNUSED::BackInTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - settimeofday
    - gettimeofday
    linkageType: ''
    returnType: void
    signature: void ALLOW_UNUSED BackInTime(Lock* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:221,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:222,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:223,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:228,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:238,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:242,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:243,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:244,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:245,1
    - Dst: butil::Time::Now
      Src: /src/brpc/test/condition_variable_unittest.cc:247,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:250,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:252,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:254,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:258,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:259,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:260,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:266,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:269,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:270,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:271,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:272,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:274,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:276,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:278,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:287,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:290,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:291,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:292,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:293,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:295,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:297,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:299,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:308,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:311,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:312,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:313,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:314,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:316,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:318,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:320,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:326,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:327,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:330,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:331,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:332,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:333,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:335,1
    - Dst: WorkQueue::SpinUntilTaskCountLessThan
      Src: /src/brpc/test/condition_variable_unittest.cc:337,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:339,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:346,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:348,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:350,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:352,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 80
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 354
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - butil::Time::Now
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, MAYBE_MultiThreadConsumerTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:365,1
    - Dst: WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:366,1
    - Dst: WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:367,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:371,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:378,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:379,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: WorkQueue::GetMinCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:380,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:381,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:384,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:385,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:386,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:387,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:389,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:392,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:393,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:394,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:398,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:404,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:405,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:406,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:408,1
    - Dst: WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:411,1
    - Dst: WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:412,1
    - Dst: WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:413,1
    - Dst: WorkQueue::SetAllowHelp
      Src: /src/brpc/test/condition_variable_unittest.cc:414,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:416,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:420,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:421,1
    - Dst: WorkQueue::no_more_tasks
      Src: /src/brpc/test/condition_variable_unittest.cc:422,1
    - Dst: WorkQueue::SpinUntilAllThreadsAreWaiting
      Src: /src/brpc/test/condition_variable_unittest.cc:426,1
    - Dst: WorkQueue::lock
      Src: /src/brpc/test/condition_variable_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: WorkQueue::GetNumThreadsTakingAssignments
      Src: /src/brpc/test/condition_variable_unittest.cc:432,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: WorkQueue::GetNumThreadsCompletingTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:434,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: WorkQueue::GetMaxCompletionsByWorkerThread
      Src: /src/brpc/test/condition_variable_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::GetNumberOfCompletedTasks
      Src: /src/brpc/test/condition_variable_unittest.cc:436,1
    - Dst: WorkQueue::SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:438,1
    - Dst: WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:440,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/condition_variable_unittest.cc:443,1
    - Dst: WorkQueue::ThreadSafeCheckShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 445
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - WorkQueue::lock
    - WorkQueue::no_more_tasks
    - WorkQueue::SetWorkTime
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::SetTaskCount
    - WorkQueue::all_threads_have_ids
    - WorkQueue::SetAllowHelp
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::EveryIdWasAllocated
    - EXPECT_EQ
    - WorkQueue::work_is_available
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::task_count
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::ResetHistory
    - WorkQueue::SetShutdown
    linkageType: ''
    returnType: void
    signature: void TEST_F(ConditionVariableTest, LargeFastTaskTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadHandle::PlatformThreadHandle
      Src: /src/brpc/test/condition_variable_unittest.cc:458,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/condition_variable_unittest.cc:466,1
    - Dst: butil::WorkQueue::ResetHistory
      Src: /src/brpc/test/condition_variable_unittest.cc:467,1
    - Dst: butil::WorkQueue::SetTaskCount
      Src: /src/brpc/test/condition_variable_unittest.cc:468,1
    - Dst: butil::WorkQueue::SetWorkTime
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/condition_variable_unittest.cc:473,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 476
    functionName: butil::WorkQueue::WorkQueue
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::WorkQueue::ResetHistory
    - butil::TimeDelta::FromMilliseconds
    - PlatformThreadHandle::PlatformThreadHandle
    - butil::WorkQueue::SetTaskCount
    - butil::PlatformThread::Create
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkQueue(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetShutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:481,1
    - Dst: Broadcast
      Src: /src/brpc/test/condition_variable_unittest.cc:483,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/condition_variable_unittest.cc:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/condition_variable_unittest.cc:488,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 489
    functionName: WorkQueue::~WorkQueue()
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - Broadcast
    - butil::PlatformThread::Join
    - EXPECT_EQ
    - SetShutdown
    linkageType: ''
    returnType: void
    signature: void WorkQueue::~WorkQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:492,1
    - Dst: DCHECK
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 491
    functionDepth: 2
    functionLinenumber: 491
    functionLinenumberEnd: 495
    functionName: butil::WorkQueue::GetThreadId
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - DCHECK
    - butil::WorkQueue::EveryIdWasAllocated
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetThreadId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 500
    functionName: butil::WorkQueue::EveryIdWasAllocated
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 7
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::EveryIdWasAllocated() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:503,1
    - Dst: DCHECK_LT
      Src: /src/brpc/test/condition_variable_unittest.cc:504,1
    - Dst: Signal
      Src: /src/brpc/test/condition_variable_unittest.cc:507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 510
    functionName: butil::WorkQueue::GetAnAssignment
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - Signal
    - DCHECK_LT
    linkageType: ''
    returnType: TimeDelta
    signature: TimeDelta WorkQueue::GetAnAssignment(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - thread_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 515
    functionName: butil::WorkQueue::WorkIsCompleted
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void WorkQueue::WorkIsCompleted(int thread_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: butil::WorkQueue::task_count
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: int
    signature: int WorkQueue::task_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 525
    functionName: butil::WorkQueue::allow_help_requests
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::allow_help_requests() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:528,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 527
    functionDepth: 1
    functionLinenumber: 527
    functionLinenumberEnd: 531
    functionName: butil::WorkQueue::shutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::shutdown() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - thread_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 545
    functionName: butil::WorkQueue::ThreadSafeCheckShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: bool
    signature: bool WorkQueue::ThreadSafeCheckShutdown(int thread_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:548,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/condition_variable_unittest.cc:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 551
    functionName: butil::WorkQueue::thread_shutting_down
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::thread_shutting_down()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 553
    functionDepth: 0
    functionLinenumber: 553
    functionLinenumberEnd: 555
    functionName: butil::WorkQueue::lock
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Lock
    signature: Lock * WorkQueue::lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 559
    functionName: butil::WorkQueue::work_is_available
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::work_is_available()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: butil::WorkQueue::all_threads_have_ids
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::all_threads_have_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 567
    functionName: butil::WorkQueue::no_more_tasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConditionVariable
    signature: ConditionVariable * WorkQueue::no_more_tasks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 574
    functionName: butil::WorkQueue::ResetHistory
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ResetHistory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/test/condition_variable_unittest.cc:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 581
    functionName: butil::WorkQueue::GetMinCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::min
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMinCompletionsByWorkerThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/test/condition_variable_unittest.cc:586,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 588
    functionName: butil::WorkQueue::GetMaxCompletionsByWorkerThread
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetMaxCompletionsByWorkerThread() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 596
    functionName: butil::WorkQueue::GetNumThreadsTakingAssignments
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsTakingAssignments() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 604
    functionName: butil::WorkQueue::GetNumThreadsCompletingTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumThreadsCompletingTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 611
    functionName: butil::WorkQueue::GetNumberOfCompletedTasks
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int WorkQueue::GetNumberOfCompletedTasks() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - delay
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 615
    functionName: butil::WorkQueue::SetWorkTime
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetWorkTime(TimeDelta delay)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: butil::WorkQueue::SetTaskCount
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetTaskCount(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - allow
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 623
    functionName: butil::WorkQueue::SetAllowHelp
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetAllowHelp(bool allow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertAcquired
      Src: /src/brpc/test/condition_variable_unittest.cc:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: butil::WorkQueue::SetShutdown
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertAcquired
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SetShutdown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:637,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 630
    functionDepth: 1
    functionLinenumber: 630
    functionLinenumberEnd: 639
    functionName: butil::WorkQueue::SpinUntilAllThreadsAreWaiting
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilAllThreadsAreWaiting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:648,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - task_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 650
    functionName: butil::WorkQueue::SpinUntilTaskCountLessThan
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void WorkQueue::SpinUntilTaskCountLessThan(int task_count)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::WorkQueue::GetThreadId
      Src: /src/brpc/test/condition_variable_unittest.cc:675,1
    - Dst: butil::WorkQueue::EveryIdWasAllocated
      Src: /src/brpc/test/condition_variable_unittest.cc:676,1
    - Dst: butil::WorkQueue::all_threads_have_ids
      Src: /src/brpc/test/condition_variable_unittest.cc:677,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:686,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:688,1
    - Dst: butil::WorkQueue::shutdown
      Src: /src/brpc/test/condition_variable_unittest.cc:691,1
    - Dst: butil::WorkQueue::thread_shutting_down
      Src: /src/brpc/test/condition_variable_unittest.cc:693,1
    - Dst: butil::WorkQueue::GetAnAssignment
      Src: /src/brpc/test/condition_variable_unittest.cc:697,1
    - Dst: butil::WorkQueue::task_count
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::allow_help_requests
      Src: /src/brpc/test/condition_variable_unittest.cc:698,1
    - Dst: butil::WorkQueue::work_is_available
      Src: /src/brpc/test/condition_variable_unittest.cc:703,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/condition_variable_unittest.cc:705,1
    - Dst: ConditionVariable::TimedWait
      Src: /src/brpc/test/condition_variable_unittest.cc:710,1
    - Dst: butil::WorkQueue::WorkIsCompleted
      Src: /src/brpc/test/condition_variable_unittest.cc:716,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 671
    functionDepth: 2
    functionLinenumber: 671
    functionLinenumberEnd: 719
    functionName: butil::WorkQueue::ThreadMain
    functionSourceFile: /src/brpc/test/condition_variable_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::WorkQueue::GetThreadId
    - butil::WorkQueue::allow_help_requests
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::shutdown
    - ConditionVariable::TimedWait
    - butil::WorkQueue::WorkIsCompleted
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::GetAnAssignment
    linkageType: ''
    returnType: void
    signature: void WorkQueue::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - tls_value_ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 34
    functionName: butil::ThreadLocalStorageRunner::ThreadLocalStorageRunner
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageRunner(int* tls_value_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~ThreadLocalStorageRunner()
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalStorageRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:40,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:44,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 52
    functionName: butil::ThreadLocalStorageRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Set
    - static_cast<int*>
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:61,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/thread_local_storage_unittest.cc:66,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:67,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: butil::ThreadLocalStorageCleanup
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<int*>
    - ASSERT_GE
    - ASSERT_NE
    - Set
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageCleanup(void *value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - tls_value_ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 34
    functionName: butil::ThreadLocalStorageRunner::ThreadLocalStorageRunner
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageRunner(int* tls_value_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~ThreadLocalStorageRunner()
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalStorageRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:40,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:44,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 52
    functionName: butil::ThreadLocalStorageRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Set
    - static_cast<int*>
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:61,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/thread_local_storage_unittest.cc:66,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:67,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: butil::ThreadLocalStorageCleanup
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<int*>
    - ASSERT_GE
    - ASSERT_NE
    - Set
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageCleanup(void *value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocalStorage::Slot::Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:77,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:77,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:78,1
    - Dst: ThreadLocalStorage::Slot::Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 80
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - reinterpret_cast<intptr_t>
    - ThreadLocalStorage::Slot::Get
    - ThreadLocalStorage::Slot::Set
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalStorageTest, Basics)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Initialize
      Src: /src/brpc/test/thread_local_storage_unittest.cc:101,1
    - Dst: ThreadLocalStorageRunner::ThreadLocalStorageRunner
      Src: /src/brpc/test/thread_local_storage_unittest.cc:106,1
    - Dst: DelegateSimpleThread::DelegateSimpleThread
      Src: /src/brpc/test/thread_local_storage_unittest.cc:107,1
    - Dst: Start
      Src: /src/brpc/test/thread_local_storage_unittest.cc:109,1
    - Dst: Join
      Src: /src/brpc/test/thread_local_storage_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:119,1
    - Dst: butil::Free
      Src: /src/brpc/test/thread_local_storage_unittest.cc:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 122
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - Join
    - Initialize
    - DelegateSimpleThread::DelegateSimpleThread
    - butil::Free
    - ThreadLocalStorageRunner::ThreadLocalStorageRunner
    - Start
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalStorageTest, MAYBE_TLSDestructors)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - tls_value_ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 34
    functionName: butil::ThreadLocalStorageRunner::ThreadLocalStorageRunner
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageRunner(int* tls_value_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~ThreadLocalStorageRunner()
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalStorageRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:40,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:44,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 52
    functionName: butil::ThreadLocalStorageRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Set
    - static_cast<int*>
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:61,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/thread_local_storage_unittest.cc:66,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:67,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: butil::ThreadLocalStorageCleanup
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<int*>
    - ASSERT_GE
    - ASSERT_NE
    - Set
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageCleanup(void *value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - tls_value_ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 34
    functionName: butil::ThreadLocalStorageRunner::ThreadLocalStorageRunner
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageRunner(int* tls_value_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~ThreadLocalStorageRunner()
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalStorageRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:40,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:44,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 52
    functionName: butil::ThreadLocalStorageRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Set
    - static_cast<int*>
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:61,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:63,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/thread_local_storage_unittest.cc:66,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/thread_local_storage_unittest.cc:67,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: butil::ThreadLocalStorageCleanup
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<int*>
    - ASSERT_GE
    - ASSERT_NE
    - Set
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorageCleanup(void *value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocalStorage::Slot::Set
      Src: /src/brpc/test/thread_local_storage_unittest.cc:77,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:77,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/test/thread_local_storage_unittest.cc:78,1
    - Dst: ThreadLocalStorage::Slot::Get
      Src: /src/brpc/test/thread_local_storage_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 80
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - reinterpret_cast<intptr_t>
    - ThreadLocalStorage::Slot::Get
    - ThreadLocalStorage::Slot::Set
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalStorageTest, Basics)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Initialize
      Src: /src/brpc/test/thread_local_storage_unittest.cc:101,1
    - Dst: ThreadLocalStorageRunner::ThreadLocalStorageRunner
      Src: /src/brpc/test/thread_local_storage_unittest.cc:106,1
    - Dst: DelegateSimpleThread::DelegateSimpleThread
      Src: /src/brpc/test/thread_local_storage_unittest.cc:107,1
    - Dst: Start
      Src: /src/brpc/test/thread_local_storage_unittest.cc:109,1
    - Dst: Join
      Src: /src/brpc/test/thread_local_storage_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_storage_unittest.cc:119,1
    - Dst: butil::Free
      Src: /src/brpc/test/thread_local_storage_unittest.cc:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 122
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_storage_unittest.cc
    functionUses: 0
    functionsReached:
    - Join
    - Initialize
    - DelegateSimpleThread::DelegateSimpleThread
    - butil::Free
    - ThreadLocalStorageRunner::ThreadLocalStorageRunner
    - Start
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalStorageTest, MAYBE_TLSDestructors)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - brpc::StreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: MyServiceWithStream::MyServiceWithStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyServiceWithStream(const brpc::StreamOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' options'
    - after_accept_stream
    argTypes:
    - brpc::StreamOptions
    - AfterAcceptStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: MyServiceWithStream::MyServiceWithStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MyServiceWithStream(const brpc::StreamOptions& options,\n                        AfterAcceptStream*
      after_accept_stream)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: MyServiceWithStream::MyServiceWithStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyServiceWithStream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:58,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:61,1
    - Dst: StreamAccept
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:62,1
    - Dst: action
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 66
    functionName: MyServiceWithStream::Echo
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - action
    - ::test::EchoRequest*::message
    - LOG
    - ::test::EchoResponse*::set_message
    - StreamAccept
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* controller,\n                       const
      ::test::EchoRequest* request,\n                       ::test::EchoResponse*
      response,\n                       ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: StreamingRpcTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_message
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: StreamingRpcTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:82,1
    - Dst: MyServiceWithStream::MyServiceWithStream
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:84,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:85,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:85,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:87,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:87,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:90,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:90,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:93,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:94,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:94,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:94,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:95,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:96,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:97,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - ASSERT_FALSE
    - MyServiceWithStream::MyServiceWithStream
    - StreamCreate
    - brpc::Server::Start
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - usleep
    - brpc::Server::Stop
    - test::EchoService_Stub::Echo
    - brpc::StreamClose
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: HandlerControl
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandlerControl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 116
    functionName: OrderedInputHandler::OrderedInputHandler
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OrderedInputHandler(HandlerControl *cntl = NULL)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:123,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:127,1
    - Dst: length
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:127,1
    - Dst: cutn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:130,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:130,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - messages
    - size
    argTypes:
    - butil::IOBuf*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 133
    functionName: OrderedInputHandler::on_received_messages
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - CHECK
    - cutn
    - usleep
    - length
    - EXPECT_EQ
    linkageType: ''
    returnType: int
    signature: "int on_received_messages(brpc::StreamId /*id*/,\n                             butil::IOBuf
      *const messages[],\n                             size_t size) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: OrderedInputHandler::on_idle_timeout
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void on_idle_timeout(brpc::StreamId /*id*/) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: OrderedInputHandler::on_closed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void on_closed(brpc::StreamId /*id*/) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:146,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - error_code
    argTypes:
    - brpc::StreamId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: OrderedInputHandler::on_failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: "void on_failed(brpc::StreamId id, int error_code,\n                   const
      std::string& /*error_text*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: OrderedInputHandler::failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool failed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: OrderedInputHandler::stopped
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: OrderedInputHandler::idle_times
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int idle_times() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OrderedInputHandler::OrderedInputHandler
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:163,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:169,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:170,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:170,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:172,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:172,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:177,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:177,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:180,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:181,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:181,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:181,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:184,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:185,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:187,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:189,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:189,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:190,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:191,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:192,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:193,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:195,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:196,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:197,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 198
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - OrderedInputHandler::failed
    - OrderedInputHandler::idle_times
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - brpc::StreamClose
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - usleep
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::OrderedInputHandler
    - brpc::Controller::ErrorText
    - StreamCreate
    - brpc::Server::Start
    - brpc::Channel::Init
    - htonl
    - brpc::Server::Stop
    - OrderedInputHandler::stopped
    - brpc::Server::Join
    - brpc::Controller::Controller
    - brpc::StreamWrite
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, received_in_order)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - arg
    - error_code
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 205
    functionName: on_writable
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void on_writable(brpc::StreamId, void* arg, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:217,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:218,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:218,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:220,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:220,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:226,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:226,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:228,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:229,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:229,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:229,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:232,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:233,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:235,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:235,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:239,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:241,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:241,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:251,1
    - Dst: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:251,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:255,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:255,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:257,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:259,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:259,1
    - Dst: std::make_pair
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:261,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:262,1
    - Dst: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:263,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:267,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:271,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:275,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:278,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:279,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:281,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:281,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:283,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:285,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:285,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:286,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:288,1
    - Dst: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:289,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:291,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:296,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:296,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:297,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:298,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:301,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:302,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:303,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 66
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 304
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - OrderedInputHandler::failed
    - OrderedInputHandler::idle_times
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::StreamClose
    - butil::IOBuf::clear
    - brpc::Server::AddService
    - brpc::StreamWait
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::microseconds_from_now
    - usleep
    - test::EchoService_Stub::Echo
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - StreamCreate
    - brpc::Server::Start
    - brpc::Channel::Init
    - htonl
    - std::make_pair
    - ASSERT_TRUE
    - OrderedInputHandler::stopped
    - brpc::Controller::Controller
    - brpc::StreamWrite
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:316,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:317,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:317,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:319,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:319,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:324,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:324,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:327,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:328,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:328,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:332,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:332,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:334,1
    - Dst: brpc::Stream*::_host_socket::SetFailed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:335,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:338,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:339,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:341,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:341,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:342,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:343,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:345,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:346,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:347,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 348
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - OrderedInputHandler::failed
    - OrderedInputHandler::idle_times
    - brpc::Controller::Failed
    - brpc::Stream*::_host_socket::SetFailed
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - usleep
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - StreamCreate
    - brpc::Server::Start
    - brpc::Channel::Init
    - ASSERT_TRUE
    - OrderedInputHandler::stopped
    - brpc::SocketUniquePtr::conn
    - brpc::Controller::Controller
    - brpc::StreamWrite
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, auto_close_if_host_socket_closed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OrderedInputHandler::OrderedInputHandler
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:351,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:357,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:358,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:358,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:360,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:360,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:365,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:365,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:368,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:369,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:369,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:369,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:372,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:373,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:375,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:375,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:381,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:381,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:382,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:383,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:384,1
    - Dst: brpc::Stream*::_remote_settings::stream_id
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:385,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:388,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:389,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:390,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:390,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:391,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:393,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:394,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:395,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 396
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - OrderedInputHandler::failed
    - OrderedInputHandler::idle_times
    - brpc::Controller::Failed
    - brpc::Stream*::_remote_settings::stream_id
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - usleep
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::OrderedInputHandler
    - brpc::Controller::ErrorText
    - StreamCreate
    - brpc::Server::Start
    - brpc::Channel::Init
    - htonl
    - brpc::Server::Stop
    - ASSERT_TRUE
    - brpc::policy::SendStreamRst
    - OrderedInputHandler::stopped
    - brpc::Server::Join
    - brpc::SocketUniquePtr::conn
    - brpc::Controller::Controller
    - brpc::StreamWrite
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, failed_when_rst)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:409,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:410,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:410,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:412,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:412,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:417,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:417,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:420,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:421,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:421,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:421,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:423,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:423,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:424,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:425,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:427,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:430,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 431
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - OrderedInputHandler::failed
    - brpc::Controller::ErrorText
    - OrderedInputHandler::stopped
    - ASSERT_FALSE
    - StreamCreate
    - brpc::Controller::Failed
    - brpc::Server::Start
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - usleep
    - test::EchoService_Stub::Echo
    - brpc::StreamClose
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, idle_timeout)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:439,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:444,1
    - Dst: length
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:444,1
    - Dst: cutn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:446,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:447,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:450,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:452,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:453,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:454,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:456,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 3
    argNames:
    - id
    - messages
    - size
    argTypes:
    - brpc::StreamId
    - butil::IOBuf*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 459
    functionName: PingPongHandler::on_received_messages
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - CHECK
    - htonl
    - cutn
    - butil::IOBuf::append
    - length
    - brpc::StreamWrite
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: "int on_received_messages(brpc::StreamId id,\n                             butil::IOBuf
      *const messages[],\n                             size_t size) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 461
    functionDepth: 0
    functionLinenumber: 461
    functionLinenumberEnd: 463
    functionName: PingPongHandler::on_idle_timeout
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void on_idle_timeout(brpc::StreamId /*id*/) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 468
    functionName: PingPongHandler::on_closed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void on_closed(brpc::StreamId /*id*/) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:473,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - error_code
    argTypes:
    - brpc::StreamId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 476
    functionName: PingPongHandler::on_failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: "void on_failed(brpc::StreamId id, int error_code,\n                   const
      std::string& /*error_text*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 478
    functionName: PingPongHandler::error
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 479
    functionName: PingPongHandler::failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool failed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 480
    functionName: PingPongHandler::stopped
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 481
    functionName: PingPongHandler::idle_times
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int idle_times() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:498,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:499,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:499,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:501,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:501,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:509,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:509,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:512,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:513,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:513,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:513,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:515,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:517,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:517,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:519,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:519,1
    - Dst: PingPongHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:520,1
    - Dst: PingPongHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:520,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:521,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:523,1
    - Dst: PingPongHandler::error
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:523,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:524,1
    - Dst: PingPongHandler::error
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:525,1
    - Dst: PingPongHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:526,1
    - Dst: PingPongHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:526,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 527
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - brpc::StreamClose
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - ASSERT_FALSE
    - PingPongHandler::stopped
    - brpc::Channel::Channel
    - usleep
    - test::EchoService_Stub::Echo
    - PingPongHandler::idle_times
    - brpc::Controller::ErrorText
    - PingPongHandler::error
    - StreamCreate
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::StreamWrite
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 532
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 532
    functionName: SendNAfterAcceptStream::SendNAfterAcceptStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SendNAfterAcceptStream(int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:535,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:536,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:538,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:538,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 540
    functionName: SendNAfterAcceptStream::action
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - htonl
    - butil::IOBuf::append
    - brpc::StreamWrite
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void action(brpc::StreamId s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:552,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:553,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:553,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:555,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:555,1
    - Dst: OrderedInputHandler::OrderedInputHandler
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:556,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:561,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:561,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:564,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:565,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:565,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:565,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:570,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:570,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:571,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:572,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:574,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:575,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:575,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 545
    functionDepth: 1
    functionLinenumber: 545
    functionLinenumberEnd: 576
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - OrderedInputHandler::failed
    - OrderedInputHandler::OrderedInputHandler
    - brpc::Controller::ErrorText
    - OrderedInputHandler::stopped
    - ASSERT_FALSE
    - OrderedInputHandler::idle_times
    - StreamCreate
    - brpc::Controller::Failed
    - brpc::Server::Start
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - usleep
    - test::EchoService_Stub::Echo
    - brpc::StreamClose
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, server_send_data_before_run_done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:579,1
    - Dst: OrderedInputHandler::OrderedInputHandler
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:580,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:586,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:587,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:587,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:589,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:589,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:593,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:593,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:596,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:597,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:597,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:597,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:600,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:601,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:603,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:609,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:609,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:611,1
    - Dst: brpc::Stream*::_host_socket::ReAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:615,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:615,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:616,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:617,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:618,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:619,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:621,1
    - Dst: brpc::SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:622,1
    - Dst: brpc::SocketUniquePtr::GetStat
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:624,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:625,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:626,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:627,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:627,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:628,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:629,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 630
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::SocketUniquePtr::UpdateStatsEverySecond
    - OrderedInputHandler::failed
    - OrderedInputHandler::idle_times
    - brpc::Controller::Failed
    - brpc::SocketUniquePtr::GetStat
    - brpc::Stream*::_host_socket::ReAddress
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::StreamClose
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - usleep
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::OrderedInputHandler
    - brpc::Controller::ErrorText
    - butil::cpuwide_time_ms
    - StreamCreate
    - brpc::Server::Start
    - brpc::Channel::Init
    - htonl
    - brpc::Server::Stop
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - OrderedInputHandler::stopped
    - brpc::Server::Join
    - brpc::SocketUniquePtr::conn
    - brpc::Controller::Controller
    - brpc::StreamWrite
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, segment_stream_data_automatically)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: logging::LogSink
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogSink(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: logging::LogStateSaver::LogStateSaver
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - GetMinLogLevel
    linkageType: ''
    returnType: void
    signature: void LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:41,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: ~LogStateSaver()
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::SetMinLogLevel
    - logging::SetLogAssertHandler
    linkageType: ''
    returnType: void
    signature: void ~LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: logging::LoggingTest::SetUp
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:63,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 65
    functionName: logging::LoggingTest::TearDown
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:78,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:105,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 106
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::SetMinLogLevel
    - EXPECT_TRUE
    - EXPECT_FALSE
    - LOG_IS_ON
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, LogIsOn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:114,1
    - Dst: DLOG_ASSERT
      Src: /src/brpc/test/logging_unittest.cc:115,1
    - Dst: DPLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:116,1
    - Dst: DVLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 118
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DVLOG_IF
    - DLOG_IF
    - DLOG_ASSERT
    - DPLOG_IF
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DebugLoggingReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:137,1
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:143,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:143,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 144
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - EXPECT_TRUE
    - DCHECK
    - DCHECK_EQ
    - DCHECK_IS_ON
    - EXPECT_FALSE
    - EXPECT_EQ
    - DLOG_IS_ON
    - logging::SetLogAssertHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, Dcheck)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:150,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:151,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - DCHECK_EQ
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DcheckReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:158,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:163,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:168,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:173,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:174,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:176,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:177,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:178,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:179,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:180,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:183,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:199,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 201
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:205,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:206,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 211
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_AT
    - ::logging::StringSink::find
    - logging::SetLogSink
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_at)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 214
    functionName: VLOG_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_NE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: VLOG2_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2_NE(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:267,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: VLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:297,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:298,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:299,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:300,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:301,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:302,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:303,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:304,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:305,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:306,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:307,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:309,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:310,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:317,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:317,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 73
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 318
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - VLOG_NE
    - VLOG_IF
    - EXPECT_FALSE
    - LOG_STREAM
    - EXPECT_EQ
    - VLOG2_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, vlog_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:323,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:324,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:327,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:329,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:330,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:332,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:333,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:334,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:336,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:337,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:338,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:340,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:341,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:342,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:344,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:345,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:346,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:348,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:349,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 351
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - CHECK_GE
    - CHECK_NE
    - CHECK_EQ
    - CHECK
    - CHECK_LE
    - CHECK_LT
    - CHECK_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, check)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_BACKTRACE_IF
      Src: /src/brpc/test/logging_unittest.cc:354,1
    - Dst: LOG_BACKTRACE_IF_ONCE
      Src: /src/brpc/test/logging_unittest.cc:355,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/test/logging_unittest.cc:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 357
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_BACKTRACE_IF
    - LOG_BACKTRACE_IF_ONCE
    - LOG_BACKTRACE_ONCE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_backtrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 361
    functionName: logging::foo
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int foo(int* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: DVLOG
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: DVLOG2
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 386
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - DVLOG
    - DLOG
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - logging::foo
    - DVLOG2
    - EXPECT_FALSE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, debug_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - s
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 390
    functionName: logging::need_ostream
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void need_ostream(std::ostream& os, const char* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:407,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:408,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:409,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:410,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 412
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_STREAM
    - ASSERT_EQ
    - logging::need_ostream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, as_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:416,1
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:417,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:418,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:419,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:420,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:421,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:422,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:423,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:426,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:427,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:428,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:429,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 432
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_ONCE
    - VLOG_ONCE
    - VLOG_EVERY_SECOND
    - LOG_EVERY_N
    - usleep
    - VLOG_EVERY_N
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, limited_logging)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:467,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:468,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:471,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: VLOG
      Src: /src/brpc/test/logging_unittest.cc:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:475,1
    - Dst: VLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 476
    functionName: logging::CheckFunctionName
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - LOG_AT
    - DCHECK
    - VLOG_STREAM
    - ::logging::StringSink::find
    - EXPECT_FALSE
    - LOG_STREAM
    - VLOG
    - logging::SetLogSink
    - PLOG
    - LOG
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void CheckFunctionName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CheckFunctionName
      Src: /src/brpc/test/logging_unittest.cc:483,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 487
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::CheckFunctionName
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_func)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:500,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:501,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 505
    functionName: logging::test_async_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * test_async_log(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/logging_unittest.cc:510,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:513,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:524,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:528,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:531,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/logging_unittest.cc:534,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: butil::read_command_output
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::strtol
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:538,1
    - Dst: load
      Src: /src/brpc/test/logging_unittest.cc:538,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 541
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - std::ostringstream::str
    - std::string::c_str
    - butil::TempFile::fname
    - pthread_join
    - pthread_create
    - std::strtol
    - logging::InitLogging
    - load
    - ASSERT_LE
    - butil::TempFile::TempFile
    - usleep
    - sleep
    - butil::read_command_output
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, async_log)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 551
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 550
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/logging_unittest.cc:556,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:563,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/logging_unittest.cc:565,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:568,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:569,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/logging_unittest.cc:573,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/logging_unittest.cc:574,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 553
    functionDepth: 1
    functionLinenumber: 553
    functionLinenumberEnd: 577
    functionName: logging::test_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - fetch_add
    - usleep
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * test_log(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:601,1
    - Dst: snprintf
      Src: /src/brpc/test/logging_unittest.cc:606,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/logging_unittest.cc:607,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:608,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/logging_unittest.cc:609,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:614,1
    - Dst: size
      Src: /src/brpc/test/logging_unittest.cc:620,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 3
    argNames:
    - thread_num
    - ' log'
    - async
    argTypes:
    - int
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 626
    functionName: logging::PerfTest
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - size
    - snprintf
    - usleep
    - sleep
    - ProfilerStart
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void PerfTest(int thread_num, const std::string& log, bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/logging_unittest.cc:631,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:637,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:639,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:640,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:641,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:642,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 646
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - logging::InitLogging
    - logging::PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: logging::LogSink
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogSink(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: logging::LogStateSaver::LogStateSaver
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - GetMinLogLevel
    linkageType: ''
    returnType: void
    signature: void LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:41,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: ~LogStateSaver()
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::SetMinLogLevel
    - logging::SetLogAssertHandler
    linkageType: ''
    returnType: void
    signature: void ~LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: logging::LoggingTest::SetUp
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:63,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 65
    functionName: logging::LoggingTest::TearDown
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:78,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:105,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 106
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::SetMinLogLevel
    - EXPECT_TRUE
    - EXPECT_FALSE
    - LOG_IS_ON
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, LogIsOn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:114,1
    - Dst: DLOG_ASSERT
      Src: /src/brpc/test/logging_unittest.cc:115,1
    - Dst: DPLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:116,1
    - Dst: DVLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 118
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DVLOG_IF
    - DLOG_IF
    - DLOG_ASSERT
    - DPLOG_IF
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DebugLoggingReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:137,1
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:143,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:143,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 144
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - EXPECT_TRUE
    - DCHECK
    - DCHECK_EQ
    - DCHECK_IS_ON
    - EXPECT_FALSE
    - EXPECT_EQ
    - DLOG_IS_ON
    - logging::SetLogAssertHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, Dcheck)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:150,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:151,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - DCHECK_EQ
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DcheckReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:158,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:163,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:168,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:173,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:174,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:176,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:177,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:178,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:179,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:180,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:183,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:199,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 201
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:205,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:206,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 211
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_AT
    - ::logging::StringSink::find
    - logging::SetLogSink
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_at)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 214
    functionName: VLOG_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_NE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: VLOG2_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2_NE(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:267,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: VLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:297,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:298,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:299,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:300,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:301,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:302,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:303,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:304,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:305,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:306,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:307,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:309,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:310,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:317,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:317,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 73
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 318
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - VLOG_NE
    - VLOG_IF
    - EXPECT_FALSE
    - LOG_STREAM
    - EXPECT_EQ
    - VLOG2_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, vlog_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:323,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:324,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:327,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:329,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:330,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:332,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:333,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:334,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:336,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:337,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:338,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:340,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:341,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:342,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:344,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:345,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:346,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:348,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:349,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 351
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - CHECK_GE
    - CHECK_NE
    - CHECK_EQ
    - CHECK
    - CHECK_LE
    - CHECK_LT
    - CHECK_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, check)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_BACKTRACE_IF
      Src: /src/brpc/test/logging_unittest.cc:354,1
    - Dst: LOG_BACKTRACE_IF_ONCE
      Src: /src/brpc/test/logging_unittest.cc:355,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/test/logging_unittest.cc:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 357
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_BACKTRACE_IF
    - LOG_BACKTRACE_IF_ONCE
    - LOG_BACKTRACE_ONCE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_backtrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 361
    functionName: logging::foo
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int foo(int* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: DVLOG
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: DVLOG2
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 386
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - DVLOG
    - DLOG
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - logging::foo
    - DVLOG2
    - EXPECT_FALSE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, debug_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - s
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 390
    functionName: logging::need_ostream
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void need_ostream(std::ostream& os, const char* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:407,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:408,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:409,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:410,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 412
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_STREAM
    - ASSERT_EQ
    - logging::need_ostream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, as_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:416,1
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:417,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:418,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:419,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:420,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:421,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:422,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:423,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:426,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:427,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:428,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:429,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 432
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_ONCE
    - VLOG_ONCE
    - VLOG_EVERY_SECOND
    - LOG_EVERY_N
    - usleep
    - VLOG_EVERY_N
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, limited_logging)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:467,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:468,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:471,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: VLOG
      Src: /src/brpc/test/logging_unittest.cc:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:475,1
    - Dst: VLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 476
    functionName: logging::CheckFunctionName
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - LOG_AT
    - DCHECK
    - VLOG_STREAM
    - ::logging::StringSink::find
    - EXPECT_FALSE
    - LOG_STREAM
    - VLOG
    - logging::SetLogSink
    - PLOG
    - LOG
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void CheckFunctionName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CheckFunctionName
      Src: /src/brpc/test/logging_unittest.cc:483,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 487
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::CheckFunctionName
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_func)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:500,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:501,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 505
    functionName: logging::test_async_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * test_async_log(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/logging_unittest.cc:510,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:513,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:524,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:528,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:531,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/logging_unittest.cc:534,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: butil::read_command_output
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::strtol
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:538,1
    - Dst: load
      Src: /src/brpc/test/logging_unittest.cc:538,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 541
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - std::ostringstream::str
    - std::string::c_str
    - butil::TempFile::fname
    - pthread_join
    - pthread_create
    - std::strtol
    - logging::InitLogging
    - load
    - ASSERT_LE
    - butil::TempFile::TempFile
    - usleep
    - sleep
    - butil::read_command_output
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, async_log)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 551
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 550
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/logging_unittest.cc:556,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:563,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/logging_unittest.cc:565,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:568,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:569,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/logging_unittest.cc:573,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/logging_unittest.cc:574,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 553
    functionDepth: 1
    functionLinenumber: 553
    functionLinenumberEnd: 577
    functionName: logging::test_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - fetch_add
    - usleep
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * test_log(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:601,1
    - Dst: snprintf
      Src: /src/brpc/test/logging_unittest.cc:606,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/logging_unittest.cc:607,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:608,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/logging_unittest.cc:609,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:614,1
    - Dst: size
      Src: /src/brpc/test/logging_unittest.cc:620,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 3
    argNames:
    - thread_num
    - ' log'
    - async
    argTypes:
    - int
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 626
    functionName: logging::PerfTest
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - size
    - snprintf
    - usleep
    - sleep
    - ProfilerStart
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void PerfTest(int thread_num, const std::string& log, bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/logging_unittest.cc:631,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:637,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:639,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:640,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:641,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:642,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 646
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - logging::InitLogging
    - logging::PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: logging::LogSink
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogSink(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: logging::LogStateSaver::LogStateSaver
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - GetMinLogLevel
    linkageType: ''
    returnType: void
    signature: void LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:41,1
    - Dst: SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: ~LogStateSaver()
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - SetLogAssertHandler
    - SetMinLogLevel
    linkageType: ''
    returnType: void
    signature: void ~LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: logging::LoggingTest::SetUp
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:63,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 65
    functionName: logging::LoggingTest::TearDown
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:78,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:105,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 106
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::SetMinLogLevel
    - EXPECT_TRUE
    - EXPECT_FALSE
    - LOG_IS_ON
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, LogIsOn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:114,1
    - Dst: DLOG_ASSERT
      Src: /src/brpc/test/logging_unittest.cc:115,1
    - Dst: DPLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:116,1
    - Dst: DVLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 118
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DVLOG_IF
    - DLOG_IF
    - DLOG_ASSERT
    - DPLOG_IF
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DebugLoggingReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:137,1
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:143,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:143,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 144
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - EXPECT_TRUE
    - DCHECK
    - DCHECK_EQ
    - DCHECK_IS_ON
    - EXPECT_FALSE
    - EXPECT_EQ
    - DLOG_IS_ON
    - logging::SetLogAssertHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, Dcheck)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:150,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:151,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - DCHECK_EQ
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DcheckReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:158,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:163,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:168,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:173,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:174,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:176,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:177,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:178,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:179,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:180,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:183,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:199,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 201
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:205,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:206,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 211
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_AT
    - ::logging::StringSink::find
    - logging::SetLogSink
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_at)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 214
    functionName: VLOG_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_NE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: VLOG2_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2_NE(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:267,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: VLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:297,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:298,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:299,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:300,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:301,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:302,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:303,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:304,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:305,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:306,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:307,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:309,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:310,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:317,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:317,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 73
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 318
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - VLOG_NE
    - VLOG_IF
    - EXPECT_FALSE
    - LOG_STREAM
    - EXPECT_EQ
    - VLOG2_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, vlog_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:323,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:324,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:327,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:329,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:330,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:332,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:333,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:334,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:336,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:337,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:338,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:340,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:341,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:342,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:344,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:345,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:346,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:348,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:349,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 351
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - CHECK_GE
    - CHECK_NE
    - CHECK_EQ
    - CHECK
    - CHECK_LE
    - CHECK_LT
    - CHECK_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, check)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_BACKTRACE_IF
      Src: /src/brpc/test/logging_unittest.cc:354,1
    - Dst: LOG_BACKTRACE_IF_ONCE
      Src: /src/brpc/test/logging_unittest.cc:355,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/test/logging_unittest.cc:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 357
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_BACKTRACE_IF
    - LOG_BACKTRACE_IF_ONCE
    - LOG_BACKTRACE_ONCE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_backtrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 361
    functionName: logging::foo
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int foo(int* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: DVLOG
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: DVLOG2
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 386
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - DVLOG
    - DLOG
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - logging::foo
    - DVLOG2
    - EXPECT_FALSE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, debug_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - s
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 390
    functionName: logging::need_ostream
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void need_ostream(std::ostream& os, const char* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:407,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:408,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:409,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:410,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 412
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_STREAM
    - ASSERT_EQ
    - logging::need_ostream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, as_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:416,1
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:417,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:418,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:419,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:420,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:421,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:422,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:423,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:426,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:427,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:428,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:429,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 432
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_ONCE
    - VLOG_ONCE
    - VLOG_EVERY_SECOND
    - LOG_EVERY_N
    - usleep
    - VLOG_EVERY_N
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, limited_logging)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:467,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:468,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:471,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: VLOG
      Src: /src/brpc/test/logging_unittest.cc:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:475,1
    - Dst: VLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 476
    functionName: logging::CheckFunctionName
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - LOG_AT
    - DCHECK
    - VLOG_STREAM
    - ::logging::StringSink::find
    - EXPECT_FALSE
    - LOG_STREAM
    - VLOG
    - logging::SetLogSink
    - PLOG
    - LOG
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void CheckFunctionName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CheckFunctionName
      Src: /src/brpc/test/logging_unittest.cc:483,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 487
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::CheckFunctionName
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_func)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:500,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:501,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 505
    functionName: logging::test_async_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * test_async_log(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/logging_unittest.cc:510,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:513,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:524,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:528,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:531,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/logging_unittest.cc:534,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: butil::read_command_output
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::strtol
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:538,1
    - Dst: load
      Src: /src/brpc/test/logging_unittest.cc:538,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 541
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - std::ostringstream::str
    - std::string::c_str
    - butil::TempFile::fname
    - pthread_join
    - pthread_create
    - std::strtol
    - logging::InitLogging
    - load
    - ASSERT_LE
    - butil::TempFile::TempFile
    - usleep
    - sleep
    - butil::read_command_output
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, async_log)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 551
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 550
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/logging_unittest.cc:556,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:563,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/logging_unittest.cc:565,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:568,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:569,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/logging_unittest.cc:573,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/logging_unittest.cc:574,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 553
    functionDepth: 1
    functionLinenumber: 553
    functionLinenumberEnd: 577
    functionName: logging::test_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - fetch_add
    - usleep
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * test_log(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:601,1
    - Dst: snprintf
      Src: /src/brpc/test/logging_unittest.cc:606,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/logging_unittest.cc:607,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:608,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/logging_unittest.cc:609,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:614,1
    - Dst: size
      Src: /src/brpc/test/logging_unittest.cc:620,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 3
    argNames:
    - thread_num
    - ' log'
    - async
    argTypes:
    - int
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 626
    functionName: logging::PerfTest
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - size
    - snprintf
    - usleep
    - sleep
    - ProfilerStart
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void PerfTest(int thread_num, const std::string& log, bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/logging_unittest.cc:631,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:637,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:639,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:640,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:641,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:642,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 646
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - logging::InitLogging
    - logging::PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: logging::LogSink
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogSink(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: logging::LogStateSaver::LogStateSaver
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - GetMinLogLevel
    linkageType: ''
    returnType: void
    signature: void LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:41,1
    - Dst: SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: ~LogStateSaver()
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - SetLogAssertHandler
    - SetMinLogLevel
    linkageType: ''
    returnType: void
    signature: void ~LogStateSaver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: logging::LoggingTest::SetUp
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:62,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:63,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 65
    functionName: logging::LoggingTest::TearDown
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:78,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:79,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:83,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:90,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:97,1
    - Dst: logging::SetMinLogLevel
      Src: /src/brpc/test/logging_unittest.cc:100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:105,1
    - Dst: LOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 106
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::SetMinLogLevel
    - EXPECT_TRUE
    - EXPECT_FALSE
    - LOG_IS_ON
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, LogIsOn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:114,1
    - Dst: DLOG_ASSERT
      Src: /src/brpc/test/logging_unittest.cc:115,1
    - Dst: DPLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:116,1
    - Dst: DVLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 118
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DVLOG_IF
    - DLOG_IF
    - DLOG_ASSERT
    - DPLOG_IF
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DebugLoggingReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:123,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:124,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:129,1
    - Dst: logging::SetLogAssertHandler
      Src: /src/brpc/test/logging_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: DLOG_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:137,1
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:139,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:141,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:143,1
    - Dst: DCHECK_IS_ON
      Src: /src/brpc/test/logging_unittest.cc:143,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 144
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - EXPECT_TRUE
    - DCHECK
    - DCHECK_EQ
    - DCHECK_IS_ON
    - EXPECT_FALSE
    - EXPECT_EQ
    - DLOG_IS_ON
    - logging::SetLogAssertHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, Dcheck)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:150,1
    - Dst: DPCHECK
      Src: /src/brpc/test/logging_unittest.cc:151,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - DPCHECK
    - DCHECK_EQ
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, DcheckReleaseBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:158,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:161,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:163,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:166,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:168,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:171,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:173,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:174,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:176,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:177,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:178,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:179,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:180,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:182,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:183,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:187,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:194,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:199,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 201
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:205,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:206,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:208,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 211
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_AT
    - ::logging::StringSink::find
    - logging::SetLogSink
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_at)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 214
    functionName: VLOG_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_NE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: VLOG2_NE
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2_NE(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:223,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:225,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:232,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:235,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:241,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:249,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:255,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:257,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:263,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:265,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:267,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:270,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:272,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:278,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:280,1
    - Dst: VLOG_NE
      Src: /src/brpc/test/logging_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:286,1
    - Dst: VLOG_IF
      Src: /src/brpc/test/logging_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:291,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:293,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:297,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:298,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:299,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:300,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:301,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:302,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:303,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:304,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:305,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:306,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:307,1
    - Dst: VLOG2_NE
      Src: /src/brpc/test/logging_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/logging_unittest.cc:309,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:310,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:313,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/logging_unittest.cc:317,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:317,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 73
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 318
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - VLOG_NE
    - VLOG_IF
    - EXPECT_FALSE
    - LOG_STREAM
    - EXPECT_EQ
    - VLOG2_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, vlog_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:323,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:324,1
    - Dst: CHECK
      Src: /src/brpc/test/logging_unittest.cc:327,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:329,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/logging_unittest.cc:330,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:332,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:333,1
    - Dst: CHECK_NE
      Src: /src/brpc/test/logging_unittest.cc:334,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:336,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:337,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/logging_unittest.cc:338,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:340,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:341,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/logging_unittest.cc:342,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:344,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:345,1
    - Dst: CHECK_GT
      Src: /src/brpc/test/logging_unittest.cc:346,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:348,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:349,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/logging_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 351
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - CHECK_GE
    - CHECK_NE
    - CHECK_EQ
    - CHECK
    - CHECK_LE
    - CHECK_LT
    - CHECK_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, check)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_BACKTRACE_IF
      Src: /src/brpc/test/logging_unittest.cc:354,1
    - Dst: LOG_BACKTRACE_IF_ONCE
      Src: /src/brpc/test/logging_unittest.cc:355,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/test/logging_unittest.cc:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 357
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_BACKTRACE_IF
    - LOG_BACKTRACE_IF_ONCE
    - LOG_BACKTRACE_ONCE
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_backtrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 361
    functionName: logging::foo
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int foo(int* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:367,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:368,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:370,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:371,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:372,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:373,1
    - Dst: DLOG
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:374,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:376,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:377,1
    - Dst: DVLOG
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:378,1
    - Dst: DVLOG2
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: logging::foo
      Src: /src/brpc/test/logging_unittest.cc:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 386
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - DVLOG
    - DLOG
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - logging::foo
    - DVLOG2
    - EXPECT_FALSE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, debug_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - s
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 390
    functionName: logging::need_ostream
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void need_ostream(std::ostream& os, const char* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:396,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:399,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:402,1
    - Dst: logging::need_ostream
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:405,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:407,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:408,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:409,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:410,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 412
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_STREAM
    - ASSERT_EQ
    - logging::need_ostream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, as_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:416,1
    - Dst: LOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:417,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:418,1
    - Dst: VLOG_ONCE
      Src: /src/brpc/test/logging_unittest.cc:419,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:420,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:421,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:422,1
    - Dst: VLOG_EVERY_N
      Src: /src/brpc/test/logging_unittest.cc:423,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:426,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:427,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:428,1
    - Dst: VLOG_EVERY_SECOND
      Src: /src/brpc/test/logging_unittest.cc:429,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 432
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG_ONCE
    - VLOG_ONCE
    - VLOG_EVERY_SECOND
    - LOG_EVERY_N
    - usleep
    - VLOG_EVERY_N
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, limited_logging)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/logging_unittest.cc:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:437,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:440,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:442,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:444,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:446,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:448,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: LOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:450,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:454,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:456,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:458,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:460,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:462,1
    - Dst: PLOG
      Src: /src/brpc/test/logging_unittest.cc:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: PLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:464,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:467,1
    - Dst: LOG_AT
      Src: /src/brpc/test/logging_unittest.cc:468,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: ::logging::StringSink::find
      Src: /src/brpc/test/logging_unittest.cc:470,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/logging_unittest.cc:471,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/logging_unittest.cc:473,1
    - Dst: VLOG
      Src: /src/brpc/test/logging_unittest.cc:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:475,1
    - Dst: VLOG_STREAM
      Src: /src/brpc/test/logging_unittest.cc:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 476
    functionName: logging::CheckFunctionName
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - PLOG_STREAM
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - LOG_AT
    - DCHECK
    - VLOG_STREAM
    - ::logging::StringSink::find
    - EXPECT_FALSE
    - LOG_STREAM
    - VLOG
    - logging::SetLogSink
    - PLOG
    - LOG
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void CheckFunctionName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CheckFunctionName
      Src: /src/brpc/test/logging_unittest.cc:483,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 487
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - logging::CheckFunctionName
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, log_func)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:500,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:501,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 505
    functionName: logging::test_async_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * test_async_log(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/logging_unittest.cc:510,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:513,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:521,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:524,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:528,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:531,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/logging_unittest.cc:534,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/logging_unittest.cc:535,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: butil::read_command_output
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/logging_unittest.cc:536,1
    - Dst: std::strtol
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/logging_unittest.cc:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:538,1
    - Dst: load
      Src: /src/brpc/test/logging_unittest.cc:538,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 541
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - std::ostringstream::str
    - std::string::c_str
    - butil::TempFile::fname
    - pthread_join
    - pthread_create
    - std::strtol
    - logging::InitLogging
    - load
    - ASSERT_LE
    - butil::TempFile::TempFile
    - usleep
    - sleep
    - butil::read_command_output
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, async_log)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 551
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 550
    functionName: logging::PerfArgs
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/logging_unittest.cc:556,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:563,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/logging_unittest.cc:565,1
    - Dst: LOG
      Src: /src/brpc/test/logging_unittest.cc:568,1
    - Dst: fetch_add
      Src: /src/brpc/test/logging_unittest.cc:569,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/logging_unittest.cc:573,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/logging_unittest.cc:574,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 553
    functionDepth: 1
    functionLinenumber: 553
    functionLinenumberEnd: 577
    functionName: logging::test_log
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - fetch_add
    - usleep
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * test_log(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: pthread_create
      Src: /src/brpc/test/logging_unittest.cc:588,1
    - Dst: usleep
      Src: /src/brpc/test/logging_unittest.cc:601,1
    - Dst: snprintf
      Src: /src/brpc/test/logging_unittest.cc:606,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/logging_unittest.cc:607,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:608,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/logging_unittest.cc:609,1
    - Dst: pthread_join
      Src: /src/brpc/test/logging_unittest.cc:614,1
    - Dst: size
      Src: /src/brpc/test/logging_unittest.cc:620,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 3
    argNames:
    - thread_num
    - ' log'
    - async
    argTypes:
    - int
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 626
    functionName: logging::PerfTest
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - size
    - snprintf
    - usleep
    - sleep
    - ProfilerStart
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void PerfTest(int thread_num, const std::string& log, bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/logging_unittest.cc:631,1
    - Dst: logging::InitLogging
      Src: /src/brpc/test/logging_unittest.cc:637,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:639,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:640,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:641,1
    - Dst: sleep
      Src: /src/brpc/test/logging_unittest.cc:642,1
    - Dst: logging::PerfTest
      Src: /src/brpc/test/logging_unittest.cc:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 646
    functionName: logging::TEST_F
    functionSourceFile: /src/brpc/test/logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - logging::InitLogging
    - logging::PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - ptr
    - ','
    - align
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 11
      start: 9
    functionDepth: 0
    functionLinenumber: 9
    functionLinenumberEnd: 11
    functionName: EXPECT_ALIGNED
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXPECT_ALIGNED(ptr, align)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:22,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:23,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:24,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:25,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:25,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:27,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:27,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:28,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:28,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:29,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:29,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:30,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 16
    functionDepth: 1
    functionLinenumber: 16
    functionLinenumberEnd: 31
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ALIGNOF
    - EXPECT_EQ
    - AlignedMemory::void_data
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, StaticAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:45,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:46,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:47,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:47,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:49,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:49,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:50,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:50,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:56,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:67,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:67,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:68,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:74,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:74,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:75,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:75,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 79
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ALIGNOF
    - EXPECT_EQ
    - AlignedMemory::void_data
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, StackAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:83,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:84,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:85,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:88,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:89,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:90,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:92,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:93,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:94,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:95,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:97,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:98,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:99,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 101
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AlignedFree
    - EXPECT_TRUE
    - butil::AlignedAlloc
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, DynamicAllocation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<float*>
      Src: /src/brpc/test/aligned_memory_unittest.cc:105,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/aligned_memory_unittest.cc:106,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:107,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/aligned_memory_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 108
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::AlignedAlloc
    - EXPECT_ALIGNED
    - scoped_ptr::get
    - static_cast<float*>
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, ScopedDynamicAllocation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:22,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:23,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:24,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:25,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:25,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:27,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:27,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:28,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:28,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:29,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:29,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:30,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 16
    functionDepth: 1
    functionLinenumber: 16
    functionLinenumberEnd: 31
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ALIGNOF
    - EXPECT_EQ
    - AlignedMemory::void_data
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, StaticAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:45,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:46,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:47,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:47,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:49,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:49,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:50,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:50,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:56,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:67,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:67,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:68,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/aligned_memory_unittest.cc:74,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/aligned_memory_unittest.cc:74,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:75,1
    - Dst: AlignedMemory::void_data
      Src: /src/brpc/test/aligned_memory_unittest.cc:75,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 79
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ALIGNOF
    - EXPECT_EQ
    - AlignedMemory::void_data
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, StackAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:83,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:84,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:85,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:88,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:89,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:90,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:92,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:93,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:94,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:95,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:97,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:98,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:99,1
    - Dst: butil::AlignedFree
      Src: /src/brpc/test/aligned_memory_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 101
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AlignedFree
    - EXPECT_TRUE
    - butil::AlignedAlloc
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, DynamicAllocation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<float*>
      Src: /src/brpc/test/aligned_memory_unittest.cc:105,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/test/aligned_memory_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/aligned_memory_unittest.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/aligned_memory_unittest.cc:106,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/aligned_memory_unittest.cc:107,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/aligned_memory_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 108
    functionName: TEST
    functionSourceFile: /src/brpc/test/aligned_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::AlignedAlloc
    - EXPECT_ALIGNED
    - scoped_ptr::get
    - static_cast<float*>
    linkageType: ''
    returnType: void
    signature: void TEST(AlignedMemoryTest, ScopedDynamicAllocation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:40,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:41,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:65,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:77,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:80,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:81,1
    - Dst: brpc::Controller*::auth_context
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:85,1
    - Dst: brpc::Controller*::auth_context
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:87,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:87,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:89,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:89,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:90,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:92,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 93
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - brpc::Controller*::auth_context
    - ::test::EchoRequest*::message
    - brpc::Controller*::request_attachment
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:99,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:105,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:110,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:111,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 112
    functionName: HuluTest::HuluTest
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void HuluTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: ~HuluTest()
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HuluTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:120,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:123,1
    - Dst: brpc::policy::VerifyHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 124
    functionName: HuluTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::VerifyHuluRequest
    - ReAddress
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:129,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:132,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:134,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 137
    functionName: HuluTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - SetEOF
    - get
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:144,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:144,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:149,1
    - Dst: test::EchoRequest::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::HuluRpcRequestMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 151
    functionName: HuluTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoRequest::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        const
      brpc::policy::HuluRpcRequestMeta& meta)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:156,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:158,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:158,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:161,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:163,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::HuluRpcResponseMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 165
    functionName: HuluTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeResponseMessage(\n        const
      brpc::policy::HuluRpcResponseMeta& meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:171,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:175,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:177,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:178,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:180,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:180,1
    - Dst: static_cast<brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:182,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:182,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:186,1
    - Dst: brpc::policy::HuluRpcResponseMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:187,1
    - Dst: brpc::policy::HuluRpcResponseMeta::error_code
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 188
    functionName: HuluTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::HuluRpcResponseMeta::error_code
    - brpc::policy::ParseHuluMessage
    - brpc::policy::HuluRpcResponseMeta::ParseFromZeroCopyStream
    - static_cast<brpc::policy::MostCommonMessage*>
    - ioctl
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:191,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:192,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:193,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:198,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:199,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:200,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:201,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:201,1
    - Dst: brpc::policy::PackHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:202,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:203,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:204,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:206,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:206,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:210,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:210,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:211,1
    - Dst: HuluTest::ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:212,1
    - Dst: HuluTest::CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - type
    argTypes:
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 190
    functionDepth: 2
    functionLinenumber: 190
    functionLinenumberEnd: 214
    functionName: HuluTest::TestHuluCompress
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::policy::ParseHuluMessage
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - HuluTest::CheckResponseCode
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - brpc::Controller::set_request_compress_type
    - HuluTest::ProcessMessage
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TestHuluCompress(brpc::CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:226,1
    - Dst: brpc::policy::HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:227,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:228,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:229,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:231,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:231,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 233
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - SetFailed
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:237,1
    - Dst: brpc::policy::HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:238,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:239,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:242,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:242,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:243,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 244
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:248,1
    - Dst: brpc::policy::HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:249,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:250,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:252,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:252,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:259,1
    - Dst: brpc::policy::HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:260,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:260,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:262,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:264,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:265,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 266
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:271,1
    - Dst: brpc::policy::HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:272,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:272,1
    - Dst: brpc::policy::HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:273,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:274,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:276,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::HuluRpcResponseMeta::set_error_code
    - ProcessMessage
    - MakeResponseMessage
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:280,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:281,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:282,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:288,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:289,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:290,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:290,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:291,1
    - Dst: brpc::policy::PackHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:292,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:293,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:294,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:295,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:295,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:300,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:300,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:301,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:302,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:303,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:306,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:307,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:310,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:310,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:311,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:312,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:314,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:315,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 316
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Failed
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - brpc::Controller::request_attachment
    - ASSERT_FALSE
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::call_id
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::ParseHuluMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:319,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:320,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:321,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:325,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:326,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:327,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:328,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:328,1
    - Dst: brpc::policy::PackHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:329,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:330,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:331,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:332,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:332,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:337,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:337,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:338,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:342,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 343
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - brpc::SerializeRequestDefault
    - brpc::policy::ParseHuluMessage
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestHuluCompress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:346,1
    - Dst: TestHuluCompress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:347,1
    - Dst: TestHuluCompress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 349
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestHuluCompress
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, hulu_compress)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:65,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:77,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:80,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:81,1
    - Dst: brpc::Controller*::auth_context
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:85,1
    - Dst: brpc::Controller*::auth_context
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:87,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:87,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:89,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:89,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:90,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:92,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 93
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - brpc::Controller*::auth_context
    - ::test::EchoRequest*::message
    - brpc::Controller*::request_attachment
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:99,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:105,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:110,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:111,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 112
    functionName: HuluTest::HuluTest
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void HuluTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: ~HuluTest()
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HuluTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:120,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:123,1
    - Dst: brpc::policy::VerifyHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 124
    functionName: HuluTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::VerifyHuluRequest
    - ReAddress
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:129,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:132,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:134,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 137
    functionName: HuluTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - PostponeEOF
    - SetEOF
    - get
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:144,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:144,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:149,1
    - Dst: test::EchoRequest::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::HuluRpcRequestMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 151
    functionName: HuluTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoRequest::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        const
      brpc::policy::HuluRpcRequestMeta& meta)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:156,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:158,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:158,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:161,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:163,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::HuluRpcResponseMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 165
    functionName: HuluTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeResponseMessage(\n        const
      brpc::policy::HuluRpcResponseMeta& meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:171,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:175,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:177,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:178,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:180,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:180,1
    - Dst: static_cast<brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:182,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:182,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:186,1
    - Dst: brpc::policy::HuluRpcResponseMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:187,1
    - Dst: brpc::policy::HuluRpcResponseMeta::error_code
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 188
    functionName: HuluTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::HuluRpcResponseMeta::error_code
    - brpc::policy::ParseHuluMessage
    - brpc::policy::HuluRpcResponseMeta::ParseFromZeroCopyStream
    - static_cast<brpc::policy::MostCommonMessage*>
    - ioctl
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:191,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:192,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:193,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:198,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:199,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:200,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:201,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:201,1
    - Dst: brpc::policy::PackHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:202,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:203,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:204,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:206,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:206,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:210,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:210,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:211,1
    - Dst: HuluTest::ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:212,1
    - Dst: HuluTest::CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - type
    argTypes:
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 190
    functionDepth: 2
    functionLinenumber: 190
    functionLinenumberEnd: 214
    functionName: HuluTest::TestHuluCompress
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::policy::ParseHuluMessage
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - HuluTest::CheckResponseCode
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - brpc::Controller::set_request_compress_type
    - HuluTest::ProcessMessage
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TestHuluCompress(brpc::CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:226,1
    - Dst: brpc::policy::HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:227,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:228,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:229,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:231,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:231,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 233
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - SetFailed
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:237,1
    - Dst: brpc::policy::HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:238,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:239,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:242,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:242,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:243,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 244
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:248,1
    - Dst: brpc::policy::HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:249,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:250,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:252,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:252,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:259,1
    - Dst: brpc::policy::HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:260,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:260,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:262,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:264,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:265,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 266
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:271,1
    - Dst: brpc::policy::HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:272,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:272,1
    - Dst: brpc::policy::HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:273,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:274,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:276,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::HuluRpcResponseMeta::set_error_code
    - ProcessMessage
    - MakeResponseMessage
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:280,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:281,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:282,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:288,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:289,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:290,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:290,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:291,1
    - Dst: brpc::policy::PackHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:292,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:293,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:294,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:295,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:295,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:300,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:300,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:301,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:302,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:303,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:306,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:307,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:310,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:310,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:311,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:312,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:314,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:315,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 316
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Failed
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - brpc::Controller::request_attachment
    - ASSERT_FALSE
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::call_id
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::ParseHuluMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:319,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:320,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:321,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:325,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:326,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:327,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:328,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:328,1
    - Dst: brpc::policy::PackHuluRequest
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:329,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:330,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:331,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:332,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:332,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:337,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:337,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:338,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:342,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 343
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - brpc::SerializeRequestDefault
    - brpc::policy::ParseHuluMessage
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestHuluCompress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:346,1
    - Dst: TestHuluCompress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:347,1
    - Dst: TestHuluCompress
      Src: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 349
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hulu_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestHuluCompress
    linkageType: ''
    returnType: void
    signature: void TEST_F(HuluTest, hulu_compress)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: ScopedLockTest::ScopedLockTest
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedLockTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~ScopedLockTest()
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedLockTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:38,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:40,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:40,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 42
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_trylock
    - ASSERT_EQ
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/test/scoped_lock_unittest.cpp:46,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:49,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:51,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:51,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:52,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/test/scoped_lock_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 54
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_spin_trylock
    - pthread_spin_destroy
    - pthread_spin_unlock
    - BAIDU_SCOPED_LOCK
    - pthread_spin_init
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, spinlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:60,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:60,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:64,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:66,1
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:67,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:67,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:69,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:69,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:71,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:71,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:75,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:77,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:80,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:83,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 84
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_mutex_trylock
    - ASSERT_FALSE
    - std::unique_lock::try_lock
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::owns_lock
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, unique_lock_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/test/scoped_lock_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:91,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:91,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:92,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:93,1
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:93,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:97,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:99,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:99,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:100,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/test/scoped_lock_unittest.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 102
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_spin_trylock
    - pthread_spin_destroy
    - std::unique_lock::try_lock
    - BAIDU_SCOPED_LOCK
    - pthread_spin_unlock
    - std::unique_lock::unlock
    - pthread_spin_init
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, unique_lock_spin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: ScopedLockTest::ScopedLockTest
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedLockTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~ScopedLockTest()
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedLockTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:38,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:40,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:40,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 42
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_trylock
    - ASSERT_EQ
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/test/scoped_lock_unittest.cpp:46,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:49,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:51,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:51,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:52,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/test/scoped_lock_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 54
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_spin_trylock
    - pthread_spin_destroy
    - pthread_spin_unlock
    - BAIDU_SCOPED_LOCK
    - pthread_spin_init
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, spinlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:60,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:60,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:64,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:66,1
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:67,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:67,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:69,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:69,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:71,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:71,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:75,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:77,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:80,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:83,1
    - Dst: std::unique_lock::owns_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 84
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_mutex_trylock
    - ASSERT_FALSE
    - std::unique_lock::try_lock
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::owns_lock
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, unique_lock_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/test/scoped_lock_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:91,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:91,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:92,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_lock_unittest.cpp:93,1
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:93,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/scoped_lock_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:97,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_lock_unittest.cpp:99,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:99,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/test/scoped_lock_unittest.cpp:100,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/test/scoped_lock_unittest.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 102
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/scoped_lock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_spin_trylock
    - pthread_spin_destroy
    - std::unique_lock::try_lock
    - BAIDU_SCOPED_LOCK
    - pthread_spin_unlock
    - std::unique_lock::unlock
    - pthread_spin_init
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void TEST_F(ScopedLockTest, unique_lock_spin)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:18,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:22,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:26,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:31,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:36,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:36,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/hash_unittest.cc:42,1
    - Dst: std::string::assign
      Src: /src/brpc/test/hash_unittest.cc:43,1
    - Dst: std::vector::front
      Src: /src/brpc/test/hash_unittest.cc:43,1
    - Dst: std::vector::size
      Src: /src/brpc/test/hash_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:44,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:54,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:57,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:60,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:63,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 64
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/hash_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - std::vector::front
    - EXPECT_EQ
    - butil::Hash
    - std::vector::size
    - std::string::assign
    linkageType: ''
    returnType: void
    signature: void TEST(HashTest, String)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:70,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:70,1
    - Dst: strlen
      Src: /src/brpc/test/hash_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:74,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:74,1
    - Dst: strlen
      Src: /src/brpc/test/hash_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:79,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:79,1
    - Dst: strlen
      Src: /src/brpc/test/hash_unittest.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 80
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/hash_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Hash
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HashTest, CString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:18,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:22,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:26,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:31,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:36,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:36,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/hash_unittest.cc:42,1
    - Dst: std::string::assign
      Src: /src/brpc/test/hash_unittest.cc:43,1
    - Dst: std::vector::front
      Src: /src/brpc/test/hash_unittest.cc:43,1
    - Dst: std::vector::size
      Src: /src/brpc/test/hash_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:44,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:54,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:57,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:60,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:63,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 64
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/hash_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - std::vector::front
    - EXPECT_EQ
    - butil::Hash
    - std::vector::size
    - std::string::assign
    linkageType: ''
    returnType: void
    signature: void TEST(HashTest, String)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:70,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:70,1
    - Dst: strlen
      Src: /src/brpc/test/hash_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:74,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:74,1
    - Dst: strlen
      Src: /src/brpc/test/hash_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/hash_unittest.cc:79,1
    - Dst: butil::Hash
      Src: /src/brpc/test/hash_unittest.cc:79,1
    - Dst: strlen
      Src: /src/brpc/test/hash_unittest.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 80
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/hash_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Hash
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HashTest, CString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandomDataToGUIDString
      Src: /src/brpc/test/guid_unittest.cc:14,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/guid_unittest.cc:15,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 12
    functionDepth: 1
    functionLinenumber: 12
    functionLinenumberEnd: 16
    functionName: TEST
    functionSourceFile: /src/brpc/test/guid_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::RandomDataToGUIDString
    linkageType: ''
    returnType: void
    signature: void TEST(GUIDTest, GUIDGeneratesAllZeroes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandomDataToGUIDString
      Src: /src/brpc/test/guid_unittest.cc:20,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/guid_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 22
    functionName: TEST
    functionSourceFile: /src/brpc/test/guid_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::RandomDataToGUIDString
    linkageType: ''
    returnType: void
    signature: void TEST(GUIDTest, GUIDGeneratesCorrectly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::GenerateGUID
      Src: /src/brpc/test/guid_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/guid_unittest.cc:29,1
    - Dst: butil::IsValidGUID
      Src: /src/brpc/test/guid_unittest.cc:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 31
    functionName: TEST
    functionSourceFile: /src/brpc/test/guid_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::IsValidGUID
    - EXPECT_TRUE
    - butil::GenerateGUID
    linkageType: ''
    returnType: void
    signature: void TEST(GUIDTest, GUIDCorrectlyFormatted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::GenerateGUID
      Src: /src/brpc/test/guid_unittest.cc:36,1
    - Dst: butil::GenerateGUID
      Src: /src/brpc/test/guid_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/guid_unittest.cc:38,1
    - Dst: std::string::length
      Src: /src/brpc/test/guid_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/guid_unittest.cc:39,1
    - Dst: std::string::length
      Src: /src/brpc/test/guid_unittest.cc:39,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/guid_unittest.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 42
    functionName: TEST
    functionSourceFile: /src/brpc/test/guid_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - EXPECT_EQ
    - std::string::length
    - butil::GenerateGUID
    linkageType: ''
    returnType: void
    signature: void TEST(GUIDTest, GUIDBasicUniqueness)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:46,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:46,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:48,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 53
    functionName: worker
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketMapInsert
    - EXPECT_EQ
    - brpc::SocketMapRemove
    linkageType: ''
    returnType: void
    signature: void * worker(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: SocketMapTest::SocketMapTest
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: ~SocketMapTest()
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:67,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:68,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:69,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:72,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:74,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:79,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:80,1
    - Dst: brpc::SocketUniquePtr::nref
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:80,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:83,1
    - Dst: brpc::SocketUniquePtr::nref
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:84,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 86
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SocketMapFind
    - brpc::SocketUniquePtr::nref
    - brpc::SocketMapRemove
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - Socket::SetFailed
    - brpc::SocketMapInsert
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketMapTest, disable_health_check)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:94,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:97,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:101,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:101,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:104,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:107,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:107,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:109,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:109,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:114,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:117,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:121,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:122,1
    - Dst: brpc::SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:123,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:123,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:124,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:125,1
    - Dst: brpc::SocketUniquePtr::ReturnToPool
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:126,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:127,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:132,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:133,1
    - Dst: brpc::SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:133,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:134,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:134,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:135,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:136,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:136,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:137,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 138
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SocketMapFind
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::reset
    - pthread_join
    - brpc::SocketUniquePtr::id
    - pthread_create
    - brpc::SocketUniquePtr::GetPooledSocket
    - brpc::SocketMapRemove
    - brpc::SocketUniquePtr::get
    - usleep
    - brpc::SocketMapInsert
    - brpc::SetTrackMeAddress
    - ASSERT_NE
    - brpc::SocketUniquePtr::ReturnToPool
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketMapTest, idle_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:146,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:151,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:152,1
    - Dst: brpc::SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:153,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:153,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:157,1
    - Dst: ReturnToPool
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:161,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:161,1
    - Dst: brpc::SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:163,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:163,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:166,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:166,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 168
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::reset
    - EXPECT_TRUE
    - EXPECT_EQ
    - brpc::SocketUniquePtr::GetPooledSocket
    - ReturnToPool
    - brpc::SocketUniquePtr::ListPooledSockets
    - brpc::SocketUniquePtr::get
    - brpc::SocketMapInsert
    - brpc::SetTrackMeAddress
    - Failed
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketMapTest, max_pool_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:46,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:46,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:48,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 53
    functionName: worker
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketMapInsert
    - EXPECT_EQ
    - brpc::SocketMapRemove
    linkageType: ''
    returnType: void
    signature: void * worker(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: SocketMapTest::SocketMapTest
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: ~SocketMapTest()
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:67,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:68,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:69,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:72,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:74,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:79,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:80,1
    - Dst: brpc::SocketUniquePtr::nref
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:80,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:83,1
    - Dst: brpc::SocketUniquePtr::nref
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:84,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 86
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SocketMapFind
    - brpc::SocketUniquePtr::nref
    - brpc::SocketMapRemove
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - Socket::SetFailed
    - brpc::SocketMapInsert
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketMapTest, disable_health_check)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:94,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:97,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:101,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:101,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:104,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:107,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:107,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:109,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:109,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:114,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:117,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:121,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:122,1
    - Dst: brpc::SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:123,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:123,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:124,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:125,1
    - Dst: brpc::SocketUniquePtr::ReturnToPool
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:126,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:127,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:132,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:133,1
    - Dst: brpc::SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:133,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:134,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:134,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:135,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:136,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:136,1
    - Dst: brpc::SocketMapRemove
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:137,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 138
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SocketMapFind
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::reset
    - pthread_join
    - brpc::SocketUniquePtr::id
    - pthread_create
    - brpc::SocketUniquePtr::GetPooledSocket
    - brpc::SocketMapRemove
    - brpc::SocketUniquePtr::get
    - usleep
    - brpc::SocketMapInsert
    - brpc::SetTrackMeAddress
    - ASSERT_NE
    - brpc::SocketUniquePtr::ReturnToPool
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketMapTest, idle_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:146,1
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:151,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:152,1
    - Dst: brpc::SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:153,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:153,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:157,1
    - Dst: ReturnToPool
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:161,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:161,1
    - Dst: brpc::SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:163,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:163,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:166,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:166,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 168
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::reset
    - EXPECT_TRUE
    - EXPECT_EQ
    - brpc::SocketUniquePtr::GetPooledSocket
    - ReturnToPool
    - brpc::SocketUniquePtr::ListPooledSockets
    - brpc::SocketUniquePtr::get
    - brpc::SocketMapInsert
    - brpc::SetTrackMeAddress
    - Failed
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketMapTest, max_pool_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:173,1
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:174,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_socket_map_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 176
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_socket_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::str2endpoint
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 20
    functionName: butil::Run
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run(internal::BindStateBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 20
    functionName: butil::Run
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run(internal::BindStateBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:61,1
    - Dst: FakeBindState2::FakeBindState2
      Src: /src/brpc/test/callback_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: butil::CallbackTest::CallbackTest
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FakeBindState1::FakeBindState1
    - FakeBindState2::FakeBindState2
    linkageType: ''
    returnType: void
    signature: void CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ~CallbackTest()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:91,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 92
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Callback::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, DefaultConstruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:97,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::is_null
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:106,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:113,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 114
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Equals
    - FakeBindState1::FakeBindState1
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Reset
      Src: /src/brpc/test/callback_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:124,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Reset
    - Equals
    - butil::is_null
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:130,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: butil::TestForReentrancy
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TestForReentrancy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:133,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::AssertCBIsNull
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::is_null
    linkageType: ''
    returnType: void
    signature: void AssertCBIsNull()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:143,1
    - Dst: ResetAndReturn
      Src: /src/brpc/test/callback_unittest.cc:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ResetAndReturn
    - ASSERT_TRUE
    - ASSERT_FALSE
    - TestForReentrancy::cb::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, ResetAndReturn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - deleted
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 154
    functionName: butil::CallbackOwner::CallbackOwner
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    linkageType: ''
    returnType: void
    signature: void CallbackOwner(bool* deleted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallbackOwner::Reset
      Src: /src/brpc/test/callback_unittest.cc:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: butil::CallbackOwner::Reset
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::CallbackOwner::Reset
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: ~CallbackOwner()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FAIL
      Src: /src/brpc/test/callback_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: butil::CallbackOwner::Unused
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FAIL
    linkageType: ''
    returnType: void
    signature: void Unused()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackOwner::CallbackOwner
      Src: /src/brpc/test/callback_unittest.cc:175,1
    - Dst: CallbackOwner*::Reset
      Src: /src/brpc/test/callback_unittest.cc:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - CallbackOwner::CallbackOwner
    - CallbackOwner*::Reset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:61,1
    - Dst: FakeBindState2::FakeBindState2
      Src: /src/brpc/test/callback_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: butil::CallbackTest::CallbackTest
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FakeBindState1::FakeBindState1
    - FakeBindState2::FakeBindState2
    linkageType: ''
    returnType: void
    signature: void CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ~CallbackTest()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:91,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 92
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Callback::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, DefaultConstruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:97,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::is_null
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:106,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:113,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 114
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Equals
    - FakeBindState1::FakeBindState1
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Reset
      Src: /src/brpc/test/callback_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:124,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Reset
    - Equals
    - butil::is_null
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:130,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: butil::TestForReentrancy
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TestForReentrancy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:133,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::AssertCBIsNull
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::is_null
    linkageType: ''
    returnType: void
    signature: void AssertCBIsNull()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:143,1
    - Dst: ResetAndReturn
      Src: /src/brpc/test/callback_unittest.cc:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ResetAndReturn
    - ASSERT_TRUE
    - ASSERT_FALSE
    - TestForReentrancy::cb::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, ResetAndReturn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - deleted
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 154
    functionName: butil::CallbackOwner::CallbackOwner
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    linkageType: ''
    returnType: void
    signature: void CallbackOwner(bool* deleted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallbackOwner::Reset
      Src: /src/brpc/test/callback_unittest.cc:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: butil::CallbackOwner::Reset
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::CallbackOwner::Reset
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: ~CallbackOwner()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FAIL
      Src: /src/brpc/test/callback_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: butil::CallbackOwner::Unused
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FAIL
    linkageType: ''
    returnType: void
    signature: void Unused()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackOwner::CallbackOwner
      Src: /src/brpc/test/callback_unittest.cc:175,1
    - Dst: CallbackOwner*::Reset
      Src: /src/brpc/test/callback_unittest.cc:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - CallbackOwner::CallbackOwner
    - CallbackOwner*::Reset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 20
    functionName: butil::Run
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run(internal::BindStateBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 20
    functionName: butil::Run
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run(internal::BindStateBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:61,1
    - Dst: FakeBindState2::FakeBindState2
      Src: /src/brpc/test/callback_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: butil::CallbackTest::CallbackTest
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FakeBindState1::FakeBindState1
    - FakeBindState2::FakeBindState2
    linkageType: ''
    returnType: void
    signature: void CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ~CallbackTest()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:91,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 92
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Callback::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, DefaultConstruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:97,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::is_null
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:106,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:113,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 114
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Equals
    - FakeBindState1::FakeBindState1
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Reset
      Src: /src/brpc/test/callback_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:124,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Reset
    - Equals
    - butil::is_null
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:130,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: butil::TestForReentrancy
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TestForReentrancy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:133,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::AssertCBIsNull
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::is_null
    linkageType: ''
    returnType: void
    signature: void AssertCBIsNull()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:143,1
    - Dst: ResetAndReturn
      Src: /src/brpc/test/callback_unittest.cc:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ResetAndReturn
    - ASSERT_TRUE
    - ASSERT_FALSE
    - TestForReentrancy::cb::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, ResetAndReturn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - deleted
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 154
    functionName: butil::CallbackOwner::CallbackOwner
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    linkageType: ''
    returnType: void
    signature: void CallbackOwner(bool* deleted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallbackOwner::Reset
      Src: /src/brpc/test/callback_unittest.cc:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: butil::CallbackOwner::Reset
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 3
    functionsReached:
    - butil::CallbackOwner::Reset
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: ~CallbackOwner()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FAIL
      Src: /src/brpc/test/callback_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: butil::CallbackOwner::Unused
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FAIL
    linkageType: ''
    returnType: void
    signature: void Unused()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackOwner::CallbackOwner
      Src: /src/brpc/test/callback_unittest.cc:175,1
    - Dst: CallbackOwner*::Reset
      Src: /src/brpc/test/callback_unittest.cc:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - CallbackOwner::CallbackOwner
    - CallbackOwner*::Reset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:61,1
    - Dst: FakeBindState2::FakeBindState2
      Src: /src/brpc/test/callback_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: butil::CallbackTest::CallbackTest
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FakeBindState1::FakeBindState1
    - FakeBindState2::FakeBindState2
    linkageType: ''
    returnType: void
    signature: void CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ~CallbackTest()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:91,1
    - Dst: Callback::is_null
      Src: /src/brpc/test/callback_unittest.cc:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 92
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Callback::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, DefaultConstruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:96,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:97,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::is_null
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:101,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:102,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:103,1
    - Dst: FakeBindState1::FakeBindState1
      Src: /src/brpc/test/callback_unittest.cc:106,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:113,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 114
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Equals
    - FakeBindState1::FakeBindState1
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:118,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:119,1
    - Dst: Reset
      Src: /src/brpc/test/callback_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:124,1
    - Dst: Equals
      Src: /src/brpc/test/callback_unittest.cc:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Reset
    - Equals
    - butil::is_null
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:130,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: butil::TestForReentrancy
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TestForReentrancy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:133,1
    - Dst: butil::is_null
      Src: /src/brpc/test/callback_unittest.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::AssertCBIsNull
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::is_null
    linkageType: ''
    returnType: void
    signature: void AssertCBIsNull()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/callback_unittest.cc:143,1
    - Dst: ResetAndReturn
      Src: /src/brpc/test/callback_unittest.cc:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: TestForReentrancy::cb::is_null
      Src: /src/brpc/test/callback_unittest.cc:145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ResetAndReturn
    - ASSERT_TRUE
    - ASSERT_FALSE
    - TestForReentrancy::cb::is_null
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, ResetAndReturn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Bind
      Src: /src/brpc/test/callback_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - deleted
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 154
    functionName: butil::CallbackOwner::CallbackOwner
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - Bind
    linkageType: ''
    returnType: void
    signature: void CallbackOwner(bool* deleted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallbackOwner::Reset
      Src: /src/brpc/test/callback_unittest.cc:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: butil::CallbackOwner::Reset
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 4
    functionsReached:
    - butil::CallbackOwner::Reset
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: ~CallbackOwner()
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallbackOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FAIL
      Src: /src/brpc/test/callback_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: butil::CallbackOwner::Unused
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - FAIL
    linkageType: ''
    returnType: void
    signature: void Unused()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackOwner::CallbackOwner
      Src: /src/brpc/test/callback_unittest.cc:175,1
    - Dst: CallbackOwner*::Reset
      Src: /src/brpc/test/callback_unittest.cc:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/callback_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/callback_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - CallbackOwner::CallbackOwner
    - CallbackOwner*::Reset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - bthread_mutex_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: get_butex
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned
    signature: unsigned * get_butex(bthread_mutex_t & m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:39,1
    - Dst: printf
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:40,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:41,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:41,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:42,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: locker
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_numeric_id
    - bthread_usleep
    - butil::cpuwide_time_ms
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - printf
    linkageType: ''
    returnType: void
    signature: void * locker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:49,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:50,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:51,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:52,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:54,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:54,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:56,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:56,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:57,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:58,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:59,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:60,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 61
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_mutex_destroy
    - bthread_join
    - bthread_mutex_init
    - bthread_mutex_lock
    - get_butex
    - bthread_mutex_unlock
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:65,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:65,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:68,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:68,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:70,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:73,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:74,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 75
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - pthread_create
    - bthread_mutex_destroy
    - bthread_mutex_init
    - get_butex
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, used_in_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:79,1
    - Dst: bthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: do_locks
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_mutex_timedlock
    linkageType: ''
    returnType: void
    signature: void * do_locks(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:87,1
    - Dst: bthread_cond_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:88,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:89,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:89,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:93,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:96,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:97,1
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:98,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:98,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:99,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:100,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:101,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_mutex_destroy
    - bthread_cond_timedwait
    - bthread_join
    - bthread_mutex_init
    - bthread_mutex_lock
    - bthread_cond_init
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, timedlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:107,1
    - Dst: bthread::Mutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:107,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:108,1
    - Dst: bthread::Mutex::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:109,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:112,1
    - Dst: bthread::Mutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:112,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:113,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:115,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:116,1
    - Dst: bthread::Mutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:116,1
    - Dst: std::unique_lock::unique_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:119,1
    - Dst: std::unique_lock::swap
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:121,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:122,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:125,1
    - Dst: bthread::Mutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:125,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:126,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:128,1
    - Dst: bthread::Mutex::native_handler
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:128,1
    - Dst: std::unique_lock::unique_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:131,1
    - Dst: bthread::Mutex::native_handler
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:132,1
    - Dst: std::unique_lock::swap
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:133,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:134,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:137,1
    - Dst: bthread::Mutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:137,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:139,1
    - Dst: bthread::Mutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:139,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 141
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::Mutex::unlock
    - bthread::Mutex::native_handler
    - std::unique_lock::swap
    - bthread::Mutex::try_lock
    - ASSERT_FALSE
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::unique_lock
    - std::unique_lock::lock
    - bthread::Mutex::timed_lock
    - std::unique_lock::unlock
    - bthread::Mutex::lock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, cpp_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 154
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:160,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:165,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:167,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:169,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:172,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:173,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 175
    functionName: add_with_mutex
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - BAIDU_SCOPED_LOCK
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * add_with_mutex(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: create_fn
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:192,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:205,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:209,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:210,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:211,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:212,1
    - Dst: join_fn
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:221,1
    - Dst: butil::class_name<Mutex>
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:221,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 4
    argNames:
    - mutex
    - thread_num
    - ' create_fn'
    - ' join_fn'
    argTypes:
    - Mutex*
    - int
    - ThreadCreateFn
    - ThreadJoinFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 226
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 4
    functionsReached:
    - join_fn
    - snprintf
    - butil::class_name<Mutex>
    - usleep
    - create_fn
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: "void PerfTest(Mutex* mutex,\n              ThreadId* /*dummy*/,\n
      \             int thread_num,\n              const ThreadCreateFn& create_fn,\n
      \             const ThreadJoinFn& join_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:231,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:232,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:235,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:236,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:239,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:247,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 251
    functionName: loop_until_stopped
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void * loop_until_stopped(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:266,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:270,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:270,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:272,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:275,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:278,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 280
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    - bthread_usleep
    - pthread_join
    - pthread_create
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:284,1
    - Dst: timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 287
    functionName: do_fast_pthread_timedlock
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - timed_lock
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void * do_fast_pthread_timedlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:291,1
    - Dst: bthread::FastPthreadMutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:291,1
    - Dst: bthread::FastPthreadMutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:292,1
    - Dst: bthread::FastPthreadMutex::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:293,1
    - Dst: bthread::FastPthreadMutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:294,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:296,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:298,1
    - Dst: bthread::FastPthreadMutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:301,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:302,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:302,1
    - Dst: std::unique_lock::unique_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:305,1
    - Dst: std::unique_lock::swap
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:307,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:308,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:309,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:311,1
    - Dst: bthread::FastPthreadMutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:311,1
    - Dst: bthread::FastPthreadMutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:317,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:317,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:320,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 325
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::unique_lock::swap
    - bthread::FastPthreadMutex::try_lock
    - bthread::FastPthreadMutex::timed_lock
    - pthread_join
    - bthread_usleep
    - pthread_create
    - ASSERT_FALSE
    - BAIDU_SCOPED_LOCK
    - bthread::FastPthreadMutex::lock
    - std::unique_lock::unique_lock
    - std::unique_lock::lock
    - bthread::FastPthreadMutex::unlock
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, fast_pthread_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:330,1
    - Dst: pthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:330,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 333
    functionName: do_pthread_timedlock
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - pthread_mutex_timedlock
    linkageType: ''
    returnType: void
    signature: void * do_pthread_timedlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:338,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:339,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:340,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:341,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:342,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:342,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:348,1
    - Dst: pthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:351,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:355,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:360,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:360,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:363,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:366,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 368
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_mutex_timedlock
    - pthread_join
    - pthread_mutex_trylock
    - bthread_usleep
    - pthread_create
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_init
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, pthread_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - bthread_mutex_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: get_butex
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: unsigned
    signature: unsigned * get_butex(bthread_mutex_t & m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:39,1
    - Dst: printf
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:40,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:41,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:41,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:42,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: locker
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_numeric_id
    - bthread_usleep
    - butil::cpuwide_time_ms
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - printf
    linkageType: ''
    returnType: void
    signature: void * locker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:49,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:50,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:51,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:52,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:54,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:54,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:56,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:56,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:57,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:58,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:59,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:60,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 61
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_mutex_destroy
    - bthread_join
    - bthread_mutex_init
    - bthread_mutex_lock
    - get_butex
    - bthread_mutex_unlock
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:65,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:65,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:68,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:68,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:70,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:73,1
    - Dst: get_butex
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:74,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 75
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - pthread_create
    - bthread_mutex_destroy
    - bthread_mutex_init
    - get_butex
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, used_in_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:79,1
    - Dst: bthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: do_locks
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_mutex_timedlock
    linkageType: ''
    returnType: void
    signature: void * do_locks(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:87,1
    - Dst: bthread_cond_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:88,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:89,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:89,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:93,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:96,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:97,1
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:98,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:98,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:99,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:100,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:101,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_mutex_destroy
    - bthread_cond_timedwait
    - bthread_join
    - bthread_mutex_init
    - bthread_mutex_lock
    - bthread_cond_init
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, timedlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:107,1
    - Dst: bthread::Mutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:107,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:108,1
    - Dst: bthread::Mutex::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:109,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:112,1
    - Dst: bthread::Mutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:112,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:113,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:115,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:116,1
    - Dst: bthread::Mutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:116,1
    - Dst: std::unique_lock::unique_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:119,1
    - Dst: std::unique_lock::swap
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:121,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:122,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:125,1
    - Dst: bthread::Mutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:125,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:126,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:128,1
    - Dst: bthread::Mutex::native_handler
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:128,1
    - Dst: std::unique_lock::unique_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:131,1
    - Dst: bthread::Mutex::native_handler
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:132,1
    - Dst: std::unique_lock::swap
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:133,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:134,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:137,1
    - Dst: bthread::Mutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:137,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:139,1
    - Dst: bthread::Mutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:139,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 141
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::Mutex::unlock
    - bthread::Mutex::native_handler
    - std::unique_lock::swap
    - bthread::Mutex::try_lock
    - ASSERT_FALSE
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::unique_lock
    - std::unique_lock::lock
    - bthread::Mutex::timed_lock
    - std::unique_lock::unlock
    - bthread::Mutex::lock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, cpp_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 154
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:160,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:165,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:167,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:169,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:172,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:173,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 175
    functionName: add_with_mutex
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - BAIDU_SCOPED_LOCK
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * add_with_mutex(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: create_fn
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:192,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:205,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:209,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:210,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:211,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:212,1
    - Dst: join_fn
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:221,1
    - Dst: butil::class_name<Mutex>
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:221,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 4
    argNames:
    - mutex
    - thread_num
    - ' create_fn'
    - ' join_fn'
    argTypes:
    - Mutex*
    - int
    - ThreadCreateFn
    - ThreadJoinFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 226
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 5
    functionsReached:
    - join_fn
    - snprintf
    - butil::class_name<Mutex>
    - usleep
    - create_fn
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: "void PerfTest(Mutex* mutex,\n              ThreadId* /*dummy*/,\n
      \             int thread_num,\n              const ThreadCreateFn& create_fn,\n
      \             const ThreadJoinFn& join_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:231,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:232,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:235,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:236,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:239,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:247,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 251
    functionName: loop_until_stopped
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void * loop_until_stopped(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:266,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:270,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:270,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:272,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:275,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:278,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 280
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    - bthread_usleep
    - pthread_join
    - pthread_create
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:284,1
    - Dst: timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 287
    functionName: do_fast_pthread_timedlock
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - timed_lock
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void * do_fast_pthread_timedlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:291,1
    - Dst: bthread::FastPthreadMutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:291,1
    - Dst: bthread::FastPthreadMutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:292,1
    - Dst: bthread::FastPthreadMutex::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:293,1
    - Dst: bthread::FastPthreadMutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:294,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:296,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:298,1
    - Dst: bthread::FastPthreadMutex::timed_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:301,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:302,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:302,1
    - Dst: std::unique_lock::unique_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:305,1
    - Dst: std::unique_lock::swap
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:307,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:308,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:309,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:311,1
    - Dst: bthread::FastPthreadMutex::try_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:311,1
    - Dst: bthread::FastPthreadMutex::unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:317,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:317,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:320,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 325
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::unique_lock::swap
    - bthread::FastPthreadMutex::try_lock
    - bthread::FastPthreadMutex::timed_lock
    - pthread_join
    - bthread_usleep
    - pthread_create
    - ASSERT_FALSE
    - BAIDU_SCOPED_LOCK
    - bthread::FastPthreadMutex::lock
    - std::unique_lock::unique_lock
    - std::unique_lock::lock
    - bthread::FastPthreadMutex::unlock
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, fast_pthread_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:330,1
    - Dst: pthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:330,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 333
    functionName: do_pthread_timedlock
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - pthread_mutex_timedlock
    linkageType: ''
    returnType: void
    signature: void * do_pthread_timedlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:338,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:339,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:340,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:341,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:342,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:342,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:348,1
    - Dst: pthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:351,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:355,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:360,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:360,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:363,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:366,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 368
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_mutex_timedlock
    - pthread_join
    - pthread_mutex_trylock
    - bthread_usleep
    - pthread_create
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_init
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, pthread_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashString
      Src: /src/brpc/test/sha1_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sha1_unittest.cc:24,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 12
    functionDepth: 1
    functionLinenumber: 12
    functionLinenumberEnd: 25
    functionName: TEST
    functionSourceFile: /src/brpc/test/sha1_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SHA1HashString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SHA1Test, Test1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashString
      Src: /src/brpc/test/sha1_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sha1_unittest.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 41
    functionName: TEST
    functionSourceFile: /src/brpc/test/sha1_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SHA1HashString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SHA1Test, Test2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashString
      Src: /src/brpc/test/sha1_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sha1_unittest.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 56
    functionName: TEST
    functionSourceFile: /src/brpc/test/sha1_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SHA1HashString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SHA1Test, Test3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/test/sha1_unittest.cc:69,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/sha1_unittest.cc:69,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/sha1_unittest.cc:69,1
    - Dst: std::string::length
      Src: /src/brpc/test/sha1_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sha1_unittest.cc:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 73
    functionName: TEST
    functionSourceFile: /src/brpc/test/sha1_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::SHA1HashBytes
    - reinterpret_cast<const unsigned char*>
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SHA1Test, Test1Bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/test/sha1_unittest.cc:87,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/sha1_unittest.cc:87,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/sha1_unittest.cc:87,1
    - Dst: std::string::length
      Src: /src/brpc/test/sha1_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sha1_unittest.cc:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 91
    functionName: TEST
    functionSourceFile: /src/brpc/test/sha1_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::SHA1HashBytes
    - reinterpret_cast<const unsigned char*>
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SHA1Test, Test2Bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/test/sha1_unittest.cc:104,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/sha1_unittest.cc:104,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/sha1_unittest.cc:104,1
    - Dst: std::string::length
      Src: /src/brpc/test/sha1_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sha1_unittest.cc:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 108
    functionName: TEST
    functionSourceFile: /src/brpc/test/sha1_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::SHA1HashBytes
    - reinterpret_cast<const unsigned char*>
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SHA1Test, Test3Bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:23,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:24,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:27,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:27,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:40,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:41,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:44,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:47,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 48
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::wstring::push_back
    - butil::SysWideToUTF8
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysWideToUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:51,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:52,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:54,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:54,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:65,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:66,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:69,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:72,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 73
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::wstring::push_back
    - butil::SysUTF8ToWide
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysUTF8ToWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:80,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:81,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:84,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:84,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:97,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:98,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:101,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:104,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 105
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SysWideToNativeMB
    - EXPECT_EQ
    - std::wstring::push_back
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysWideToNativeMB)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:110,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:111,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:113,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:113,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:124,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:125,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:128,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:131,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 132
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::wstring::push_back
    - std::string::push_back
    - butil::SysNativeMBToWide
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysNativeMBToWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:164,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:166,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:167,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:167,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:168,1
    - Dst: arraysize
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:172,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:174,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:175,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:175,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:176,1
    - Dst: arraysize
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:179,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:181,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:182,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:182,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:183,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 185
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::size
    - butil::UTF8ToWide
    - butil::WideToUTF8
    - arraysize
    - butil::SysWideToNativeMB
    - EXPECT_EQ
    - butil::SysNativeMBToWide
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysNativeMBAndWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:23,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:24,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:27,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:27,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:40,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:41,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:44,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:47,1
    - Dst: butil::SysWideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 48
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::wstring::push_back
    - butil::SysWideToUTF8
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysWideToUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:51,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:52,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:54,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:54,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:65,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:66,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:69,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:72,1
    - Dst: butil::SysUTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 73
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::wstring::push_back
    - butil::SysUTF8ToWide
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysUTF8ToWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:80,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:81,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:84,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:84,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:97,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:98,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:101,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:104,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 105
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SysWideToNativeMB
    - EXPECT_EQ
    - std::wstring::push_back
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysWideToNativeMB)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:110,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:111,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:113,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:113,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:124,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:125,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:128,1
    - Dst: std::wstring::push_back
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:131,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 132
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::wstring::push_back
    - std::string::push_back
    - butil::SysNativeMBToWide
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysNativeMBToWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:164,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:166,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:167,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:167,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:168,1
    - Dst: arraysize
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:172,1
    - Dst: butil::SysNativeMBToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:174,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:175,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:175,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:176,1
    - Dst: arraysize
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:179,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:181,1
    - Dst: butil::SysWideToNativeMB
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:182,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:182,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_string_conversions_unittest.cc:183,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 185
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/sys_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::size
    - butil::UTF8ToWide
    - butil::WideToUTF8
    - arraysize
    - butil::SysWideToNativeMB
    - EXPECT_EQ
    - butil::SysNativeMBToWide
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysNativeMBAndWide)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:92,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:94,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:95,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:95,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:96,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:96,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:99,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:101,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:102,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:106,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:106,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:107,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:107,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:109,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:109,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:110,1
    - Dst: ::test::EchoResponse*::add_code_list
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:111,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:111,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:113,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 114
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Controller*::request_attachment
    - Controller*::CloseConnection
    - bthread_usleep
    - ::test::EchoRequest*::sleep_us
    - ::test::EchoRequest*::close_fd
    - Controller*::response_attachment
    - ::test::EchoRequest*::server_fail
    - static_cast<Controller*>
    - ::test::EchoRequest*::message
    - usleep
    - LOG
    - Controller*::SetFailed
    - ::test::EchoResponse*::set_message
    - ::test::EchoRequest*::code
    - ::test::EchoResponse*::add_code_list
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:121,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:121,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:124,1
    - Dst: save
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:124,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:124,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:125,1
    - Dst: fname
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:125,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 127
    functionName: RdmaTest::RdmaTest
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - fname
    - std::string
    - butil::str2ip
    - save
    - butil::endpoint2str
    - c_str
    - AddService
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void RdmaTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: ~RdmaTest()
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RdmaTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: RdmaTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::DumpMemoryPoolInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: RdmaTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::DumpMemoryPoolInfo
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:143,1
    - Dst: Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: RdmaTest::StartServer
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Start
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void StartServer(bool use_rdma = true)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:147,1
    - Dst: Join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: RdmaTest::StopServer
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void StopServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _am::ListConnections
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:153,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:154,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:158,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:159,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: RdmaTest::GetSocketFromServer
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - std::vector::size
    - _am::ListConnections
    - SocketUniquePtr::get
    linkageType: ''
    returnType: Socket
    signature: Socket * GetSocketFromServer(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:172,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:175,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:177,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:179,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:181,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:181,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:182,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:184,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:185,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:187,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:187,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 190
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - connect
    - bzero
    - StopServer
    - usleep
    - close
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_close_before_hello_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:193,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:196,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:198,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:202,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:202,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:203,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:205,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:208,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:210,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:210,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:212,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 215
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - connect
    - memset
    - bzero
    - StopServer
    - usleep
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_hello_msg_invalid_magic_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:218,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:221,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:223,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:229,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:229,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:230,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:232,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:234,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:234,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:236,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:237,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:239,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:239,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:241,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:243,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:243,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:244,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:246,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:248,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:248,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:250,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:251,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:253,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:253,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:257,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:257,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:258,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:260,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:261,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:263,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:263,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:265,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:266,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:268,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:268,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 271
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - connect
    - memset
    - bzero
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_close_during_hello_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:274,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:277,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:279,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:285,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:285,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:286,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:288,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:289,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:291,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:291,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:293,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:293,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:297,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:297,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:298,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:300,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:301,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:302,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:303,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:305,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:305,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:307,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:307,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 310
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - connect
    - memset
    - bzero
    - StopServer
    - usleep
    - memcpy
    - StartServer
    - write
    - butil::HostToNet16
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_hello_msg_invalid_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:313,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:316,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:318,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:321,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:322,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:324,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:326,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:326,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:327,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:329,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:330,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:331,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:332,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:334,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:334,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:336,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:338,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:338,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:340,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:341,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:343,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:343,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:345,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:347,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:347,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:348,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:350,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:351,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:352,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:353,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:355,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:355,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:357,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:359,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:359,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:361,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:361,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 364
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - socket
    - htons
    - butil::HostToNet32
    - connect
    - memset
    - bzero
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    - butil::HostToNet16
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_hello_msg_invalid_version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:367,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:370,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:372,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:383,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:384,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:387,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:387,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:388,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:391,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:391,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:393,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:395,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:395,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:397,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:398,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:403,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:404,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:405,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:407,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:407,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:408,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:411,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:411,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:413,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:415,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:415,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:417,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:418,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:423,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:424,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:425,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:427,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:427,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:428,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:431,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:431,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:433,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:435,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:435,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:437,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 440
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - connect
    - memset
    - bzero
    - rdma::HelloMessage::Serialize
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_hello_msg_invalid_sq_rq_block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:443,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:446,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:448,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:459,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:460,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:461,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:463,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:465,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:465,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:466,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:469,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:469,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:471,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:472,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:474,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:474,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:476,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 477
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - connect
    - bzero
    - rdma::HelloMessage::Serialize
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_close_after_qp_build)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:480,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:483,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:485,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:496,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:497,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:498,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:500,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:502,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:502,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:503,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:506,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:506,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:508,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:510,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:510,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:512,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:513,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:515,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:515,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:517,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 479
    functionDepth: 1
    functionLinenumber: 479
    functionLinenumberEnd: 518
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - butil::HostToNet32
    - connect
    - bzero
    - rdma::HelloMessage::Serialize
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_close_during_ack_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:521,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:524,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:526,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:537,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:538,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:539,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:541,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:543,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:543,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:544,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:547,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:547,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:549,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:551,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:551,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:553,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:554,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:556,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:556,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:558,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:560,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:560,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:561,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:564,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:564,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:566,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:568,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:568,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:570,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:571,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:573,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:573,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:575,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 520
    functionDepth: 1
    functionLinenumber: 520
    functionLinenumberEnd: 576
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - butil::HostToNet32
    - connect
    - bzero
    - rdma::HelloMessage::Serialize
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_close_after_ack_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:579,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:582,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:584,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:595,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:596,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:597,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:599,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:601,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:601,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:602,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:605,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:605,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:607,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:609,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:609,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:612,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:612,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:614,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:615,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:617,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:617,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:619,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:621,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:621,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:622,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:625,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:625,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:627,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:629,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:629,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:630,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:632,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:632,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:634,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:634,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 48
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 637
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - ASSERT_TRUE
    - ASSERT_EQ
    - GetSocketFromServer
    - htons
    - socket
    - butil::HostToNet32
    - connect
    - bzero
    - rdma::HelloMessage::Serialize
    - StopServer
    - usleep
    - close
    - memcpy
    - StartServer
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_send_data_on_tcp_after_ack_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:649,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:649,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:654,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:655,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:656,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:660,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:660,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:661,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:664,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:665,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:667,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:667,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 639
    functionDepth: 1
    functionLinenumber: 639
    functionLinenumberEnd: 668
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_miss_before_hello_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:680,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:680,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:685,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:686,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:687,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:691,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:692,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:697,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:697,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:698,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:700,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:701,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:703,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 670
    functionDepth: 1
    functionLinenumber: 670
    functionLinenumberEnd: 704
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - close
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_close_before_hello_send)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:716,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:716,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:721,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:722,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:723,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:727,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:727,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:728,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:731,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:733,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:734,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:734,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:735,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:736,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:736,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:738,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:738,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 739
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_miss_during_magic_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:751,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:751,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:756,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:757,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:758,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:760,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:762,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:763,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:766,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:768,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:768,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:769,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:769,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:770,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:772,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:773,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:775,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:775,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 776
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - close
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_close_during_magic_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:788,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:788,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:793,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:794,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:795,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:799,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:799,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:800,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:803,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:805,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:806,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:806,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:808,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:809,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:809,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:811,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:811,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 778
    functionDepth: 1
    functionLinenumber: 778
    functionLinenumberEnd: 812
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_hello_invalid_magic_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:824,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:824,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:829,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:830,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:831,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:833,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:835,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:836,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:841,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:842,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:843,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:843,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:844,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:846,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:846,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 814
    functionDepth: 1
    functionLinenumber: 814
    functionLinenumberEnd: 847
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_miss_during_hello_msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:859,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:859,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:864,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:865,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:866,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:868,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:870,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:870,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:871,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:874,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:876,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:877,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:877,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:878,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:878,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:879,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:880,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:881,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:882,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:882,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:884,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:884,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 885
      start: 849
    functionDepth: 1
    functionLinenumber: 849
    functionLinenumberEnd: 885
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - close
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_close_during_hello_msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:889,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:897,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:897,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:902,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:903,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:904,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:906,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:908,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:908,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:909,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:912,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:914,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:914,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:915,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:916,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:917,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:918,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:919,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:919,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:920,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:921,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:922,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:922,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:924,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:924,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 925
      start: 887
    functionDepth: 1
    functionLinenumber: 887
    functionLinenumberEnd: 925
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - memcpy
    - DoNothing
    - bthread_id_join
    - read
    - memset
    - Controller::call_id
    - Controller::ErrorCode
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    - butil::HostToNet16
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_hello_invalid_msg_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:929,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:937,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:937,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:942,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:943,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:944,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:946,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:948,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:948,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:949,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:952,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:954,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:954,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:955,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:956,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:957,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:959,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:959,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:962,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:964,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:964,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:965,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:967,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:967,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 968
      start: 927
    functionDepth: 1
    functionLinenumber: 927
    functionLinenumberEnd: 968
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::NetToHost32
    - usleep
    - memcpy
    - DoNothing
    - bthread_id_join
    - read
    - memset
    - Controller::call_id
    - Controller::ErrorCode
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    - butil::HostToNet16
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_hello_invalid_version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:980,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:980,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:985,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:986,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:987,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:989,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:991,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:991,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:992,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:995,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:997,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:997,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1007,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1008,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1010,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1010,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1012,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1014,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1014,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1016,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1016,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1017,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1017,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1019,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1019,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1020
      start: 970
    functionDepth: 1
    functionLinenumber: 970
    functionLinenumberEnd: 1020
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::NetToHost32
    - usleep
    - memcpy
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Controller::ErrorCode
    - rdma::HelloMessage::Serialize
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_hello_invalid_sq_rq_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1024,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1032,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1032,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1037,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1038,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1039,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1041,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1043,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1044,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1047,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1049,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1059,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1060,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1062,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1062,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1065,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1066,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1068,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1068,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1069,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1071,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1071,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1022
    functionDepth: 1
    functionLinenumber: 1022
    functionLinenumberEnd: 1072
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::NetToHost32
    - usleep
    - memcpy
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Controller::ErrorCode
    - rdma::HelloMessage::Serialize
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_miss_after_ack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1076,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1084,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1084,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1089,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1090,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1091,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1095,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1095,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1096,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1101,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1101,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1111,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1112,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1114,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1114,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1118,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1120,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1120,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1121,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1122,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1124,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1125
      start: 1074
    functionDepth: 1
    functionLinenumber: 1074
    functionLinenumberEnd: 1125
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - ASSERT_EQ
    - DoNothing
    - read
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - Controller::call_id
    - bthread_id_join
    - usleep
    - memcpy
    - test::EchoRequest::set_message
    - EXPECT_TRUE
    - Controller::ErrorCode
    - ASSERT_TRUE
    - rdma::HelloMessage::Serialize
    - Channel::Init
    - butil::NetToHost32
    - close
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_close_after_ack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1137,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1137,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1142,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1143,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1144,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1148,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1154,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1154,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1164,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1165,1
    - Dst: rdma::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1167,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1167,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1171,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1171,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1172,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1174,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1175
      start: 1127
    functionDepth: 1
    functionLinenumber: 1127
    functionLinenumberEnd: 1175
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaGid
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - usleep
    - memcpy
    - DoNothing
    - bthread_id_join
    - read
    - Controller::call_id
    - Controller::ErrorCode
    - rdma::HelloMessage::Serialize
    - Channel::Init
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - test::EchoRequest::set_message
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_send_data_on_tcp_after_ack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1178,1
    - Dst: store
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1187,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1187,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1192,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1193,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1194,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1195,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1198,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1199,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1200,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1201,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1201,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1203,1
    - Dst: store
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1177
    functionDepth: 1
    functionLinenumber: 1177
    functionLinenumberEnd: 1205
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - test::EchoRequest::set_message
    - bthread_id_join
    - Controller::call_id
    - store
    - Channel::Init
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, try_global_disable_rdma)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1214,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1219,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1224,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1224,1
    - Dst: ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1229,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1230
      start: 1207
    functionDepth: 0
    functionLinenumber: 1207
    functionLinenumberEnd: 1230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Server::Start
    - ASSERT_EQ
    - ServerOptions::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_option_invalid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1239,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1242,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1246,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1248,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1252,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1256,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1260,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1264,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1268,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1272,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1276,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1280,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1284,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1288,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1288,1
    - Dst: ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1293,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1294
      start: 1232
    functionDepth: 0
    functionLinenumber: 1232
    functionLinenumberEnd: 1294
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ChannelOptions::mutable_ssl_options
    - Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, channel_option_invalid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1309,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1309,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1313,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1314,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1315,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1316,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1317,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1318,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1318,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1321
      start: 1296
    functionDepth: 1
    functionLinenumber: 1296
    functionLinenumberEnd: 1321
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - test::EchoRequest::set_message
    - bthread_id_join
    - Controller::call_id
    - Channel::Init
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, rdma_client_to_rdma_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1331,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1331,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1335,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1336,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1337,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1338,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1339,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1340,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1340,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1323
    functionDepth: 1
    functionLinenumber: 1323
    functionLinenumberEnd: 1343
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - test::EchoRequest::set_message
    - bthread_id_join
    - Controller::call_id
    - Channel::Init
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, tcp_client_to_tcp_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1353,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1353,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1357,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1358,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1359,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1360,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1361,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1362,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1362,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1365
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - test::EchoRequest::set_message
    - bthread_id_join
    - Controller::call_id
    - Channel::Init
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, tcp_client_to_rdma_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1376,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1376,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1380,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1381,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1382,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1383,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1384,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1385,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1385,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1388
      start: 1367
    functionDepth: 1
    functionLinenumber: 1367
    functionLinenumberEnd: 1388
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - test::EchoRequest::set_message
    - bthread_id_join
    - Controller::call_id
    - Channel::Init
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, rdma_client_to_tcp_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::_rdma_ep::DebugInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1394,1
    - Dst: Socket*::_rdma_ep::DebugInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - client
    - server
    argTypes:
    - Socket*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1397
      start: 1392
    functionDepth: 0
    functionLinenumber: 1392
    functionLinenumberEnd: 1397
    functionName: DumpRdmaEndpointInfo
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket*::_rdma_ep::DebugInfo
    linkageType: ''
    returnType: void
    signature: void DumpRdmaEndpointInfo(Socket* client, Socket* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1412,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1412,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1417,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1419,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1420,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1421,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1424,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1424,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1427,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1427,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1428,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1429,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1431,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1431,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1434,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1435,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1436,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1438,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1439,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1440,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1441,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1444,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1444,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1447,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1447,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1448,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1449,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1451,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1451,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1454,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1455,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1457,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1458,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1459,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1460,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1463,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1463,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1466,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1466,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1467,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1468,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1470,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1470,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1471,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1474,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1399
    functionDepth: 1
    functionLinenumber: 1399
    functionLinenumberEnd: 1475
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Reset
    - DoNothing
    - call_id
    - StopServer
    - butil::IOBuf::resize
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - StartServer
    - butil::IOBuf::IOBuf
    - ErrorCode
    - bthread_id_join
    - LOG
    - GetSocketFromServer
    - SocketUniquePtr::get
    - request_attachment
    - DumpRdmaEndpointInfo
    - ASSERT_TRUE
    - Channel::Init
    - set_message
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, send_rpcs_in_one_qp)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AddService
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1491,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1492,1
    - Dst: Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1496,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1497,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1509,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1513,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1513,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1514,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1515,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1516,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1517,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1520,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1520,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1523,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1523,1
    - Dst: _am::ListConnections
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1525,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1528,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1528,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1529,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1529,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1532,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1532,1
    - Dst: Stop
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1536,1
    - Dst: Join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1537,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1539
      start: 1477
    functionDepth: 1
    functionLinenumber: 1477
    functionLinenumberEnd: 1539
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Init
    - DoNothing
    - call_id
    - brpc::ThriftStub::ThriftStub
    - butil::IOBuf::resize
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - ErrorCode
    - bthread_id_join
    - _am::ListConnections
    - Start
    - EXPECT_EQ
    - Join
    - SocketUniquePtr::get
    - request_attachment
    - butil::str2ip
    - DumpRdmaEndpointInfo
    - AddService
    - Stop
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - c_str
    - set_message
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, send_rpc_in_many_qp)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1555,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1555,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1560,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1561,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1563,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1564,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1565,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1566,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1569,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1569,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1572,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1572,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1573,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1574,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1576,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1576,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1579,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1580
      start: 1541
    functionDepth: 1
    functionLinenumber: 1541
    functionLinenumberEnd: 1580
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - GetSocketFromServer
    - SocketUniquePtr::get
    - request_attachment
    - ErrorCode
    - DoNothing
    - bthread_id_join
    - DumpRdmaEndpointInfo
    - brpc::ThriftStub::ThriftStub
    - Channel::Init
    - call_id
    - butil::IOBuf::resize
    - set_message
    - brpc::SetTrackMeAddress
    - StartServer
    - StopServer
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, send_rpcs_as_pooled_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1596,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1596,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1601,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1602,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1604,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1605,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1606,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1607,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1610,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1610,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1613,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1613,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1614,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1615,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1617,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1617,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1620,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1621
      start: 1582
    functionDepth: 1
    functionLinenumber: 1582
    functionLinenumberEnd: 1621
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - GetSocketFromServer
    - SocketUniquePtr::get
    - request_attachment
    - ErrorCode
    - DoNothing
    - bthread_id_join
    - DumpRdmaEndpointInfo
    - brpc::ThriftStub::ThriftStub
    - Channel::Init
    - call_id
    - butil::IOBuf::resize
    - set_message
    - brpc::SetTrackMeAddress
    - StartServer
    - StopServer
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, send_rpcs_as_short_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1636,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1641,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1642,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1644,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1645,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1646,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1647,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1651,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1651,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1652,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1653,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1654,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1623
    functionDepth: 1
    functionLinenumber: 1623
    functionLinenumberEnd: 1659
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - request_attachment
    - ErrorCode
    - DoNothing
    - bthread_id_join
    - brpc::ThriftStub::ThriftStub
    - Channel::Init
    - call_id
    - butil::IOBuf::resize
    - set_message
    - StopServer
    - StartServer
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_stop_during_rpc)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1674,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1674,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1679,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1680,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1682,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1683,1
    - Dst: set_close_fd
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1685,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1687,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1688,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1692,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1692,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1693,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1694,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1700,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1701
      start: 1661
    functionDepth: 1
    functionLinenumber: 1661
    functionLinenumberEnd: 1701
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - request_attachment
    - ErrorCode
    - DoNothing
    - bthread_id_join
    - set_close_fd
    - brpc::ThriftStub::ThriftStub
    - Channel::Init
    - call_id
    - butil::IOBuf::resize
    - set_message
    - StopServer
    - StartServer
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_close_during_rpc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1716,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1716,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1721,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1722,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1724,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1725,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1726,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1727,1
    - Dst: CloseConnection
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1730,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1733,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1733,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1734,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1735,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1740,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1741
      start: 1703
    functionDepth: 1
    functionLinenumber: 1703
    functionLinenumberEnd: 1741
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - request_attachment
    - ErrorCode
    - DoNothing
    - bthread_id_join
    - brpc::ThriftStub::ThriftStub
    - Channel::Init
    - call_id
    - butil::IOBuf::resize
    - set_message
    - StopServer
    - StartServer
    - CloseConnection
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_close_during_rpc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1748,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1756,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1756,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1761,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1762,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1763,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1764,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1766,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1769,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1769,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1771,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1773,1
    - Dst: ibv_post_send
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1780,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1781,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1781,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1782,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1782,1
    - Dst: free
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1783,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1786
      start: 1743
    functionDepth: 1
    functionLinenumber: 1743
    functionLinenumberEnd: 1786
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ibv_post_send
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - free
    - usleep
    - Controller::ErrorCode
    - DoNothing
    - test::EchoRequest::set_message
    - bthread_id_join
    - memset
    - Controller::call_id
    - malloc
    - Channel::Init
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - brpc::SetTrackMeAddress
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, verbs_error_handling)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1793,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1801,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1801,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1801,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1802,1
    - Dst: ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1802,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1810,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1811,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1813,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1814,1
    - Dst: Controller::sub_count
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1814,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1816,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1817
      start: 1788
    functionDepth: 1
    functionLinenumber: 1788
    functionLinenumberEnd: 1817
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ParallelChannel::AddChannel
    - ASSERT_EQ
    - Controller::ErrorCode
    - Init
    - test::EchoRequest::set_message
    - c_str
    - Controller::sub_count
    - brpc::ThriftStub::ThriftStub
    - StopServer
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, rdma_use_parallel_channel)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1830,1
    - Dst: SelectiveChannel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1830,1
    - Dst: Channel::Channel
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1833,1
    - Dst: Channel*::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1833,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1833,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1834,1
    - Dst: SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1834,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1840,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1843,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1843,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1844,1
    - Dst: Controller::sub_count
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1844,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1846,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1847
      start: 1819
    functionDepth: 1
    functionLinenumber: 1819
    functionLinenumberEnd: 1847
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Channel*::Init
    - ASSERT_EQ
    - SelectiveChannel::AddChannel
    - Controller::ErrorCode
    - test::EchoRequest::set_message
    - Controller::ErrorText
    - Channel::Channel
    - SelectiveChannel::Init
    - c_str
    - Controller::sub_count
    - brpc::ThriftStub::ThriftStub
    - StopServer
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, rdma_use_selective_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1849
      start: 1849
    functionDepth: 0
    functionLinenumber: 1849
    functionLinenumberEnd: 1849
    functionName: MockFree
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MockFree(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1856,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1864,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1864,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1869,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1870,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1871,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1872,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1873,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1874,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1875,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1876,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1877,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1877,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1878,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1879,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1880,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1885,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1886,1
    - Dst: brpc::rdma::RegisterMemoryForRdma
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1888,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1889,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1890,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1891,1
    - Dst: brpc::rdma::RegisterMemoryForRdma
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1892,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1893,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1894,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1895,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1896,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1897,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1900,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1900,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1901,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1901,1
    - Dst: brpc::rdma::DeregisterMemoryForRdma
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1902,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1903,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1903,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1905,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1906,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1906,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1907,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1907,1
    - Dst: free
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1908,1
    - Dst: free
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1909,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1912,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1913
      start: 1851
    functionDepth: 1
    functionLinenumber: 1851
    functionLinenumberEnd: 1913
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - response_attachment
    - Reset
    - brpc::rdma::RegisterMemoryForRdma
    - DoNothing
    - call_id
    - StopServer
    - brpc::ThriftStub::ThriftStub
    - sleep
    - StartServer
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ErrorCode
    - bthread_id_join
    - butil::IOBuf::append_user_data
    - brpc::rdma::DeregisterMemoryForRdma
    - free
    - request_attachment
    - memset
    - malloc
    - ASSERT_TRUE
    - Channel::Init
    - set_message
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, send_rpcs_with_user_defined_iobuf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1920,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1928,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1928,1
    - Dst: resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1935,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1942,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1943,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1944,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1945,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1948,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1948,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1951,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1952
      start: 1915
    functionDepth: 1
    functionLinenumber: 1915
    functionLinenumberEnd: 1952
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - request_attachment
    - DoNothing
    - bthread_id_join
    - resize
    - Channel::Init
    - call_id
    - brpc::ThriftStub::ThriftStub
    - set_message
    - StopServer
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, try_memory_pool_empty)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1957,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1958,1
    - Dst: store
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1965,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1969,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1970
      start: 1956
    functionDepth: 0
    functionLinenumber: 1956
    functionLinenumberEnd: 1970
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - store
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::length
      Src: /src/brpc/test/string_util_unittest.cc:59,1
    - Dst: butil::TruncateUTF8ToByteSize
      Src: /src/brpc/test/string_util_unittest.cc:60,1
    - Dst: std::string*::length
      Src: /src/brpc/test/string_util_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' input'
    - byte_size
    - output
    argTypes:
    - std::string
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: butil::Truncated
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TruncateUTF8ToByteSize
    - std::string*::length
    - butil::length
    linkageType: ''
    returnType: bool
    signature: "bool Truncated(const std::string& input, const size_t byte_size,\n
      \              std::string* output)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::length
      Src: /src/brpc/test/string_util_unittest.cc:59,1
    - Dst: butil::TruncateUTF8ToByteSize
      Src: /src/brpc/test/string_util_unittest.cc:60,1
    - Dst: std::string*::length
      Src: /src/brpc/test/string_util_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' input'
    - byte_size
    - output
    argTypes:
    - std::string
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: butil::Truncated
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TruncateUTF8ToByteSize
    - std::string*::length
    - butil::length
    linkageType: ''
    returnType: bool
    signature: "bool Truncated(const std::string& input, const size_t byte_size,\n
      \              std::string* output)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:70,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:70,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:72,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:73,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:74,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:74,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:75,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:75,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:78,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:79,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:80,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:81,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:82,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:83,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:83,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:84,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:85,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:90,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:91,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:91,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:91,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:97,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:98,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:98,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:102,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:103,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:104,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:104,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:105,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:106,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:107,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:107,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:110,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:111,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:111,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:112,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:113,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:113,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:114,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:116,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:117,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:119,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:119,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:120,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:121,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:124,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:125,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:126,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:127,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:128,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:129,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:129,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:130,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:131,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:132,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:133,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:134,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:135,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:136,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:137,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:137,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:138,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:139,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:140,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:141,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:142,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:143,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:144,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:145,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:148,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:149,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:150,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:151,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:152,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:153,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:156,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:157,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:158,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:159,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:164,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:165,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:165,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:165,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:172,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:173,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:173,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:173,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:178,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:179,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:179,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:183,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:184,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:184,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:185,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:186,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:187,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:188,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:188,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:189,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:189,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:190,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:191,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:192,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:196,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:196,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:197,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:197,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:198,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:199,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:200,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:201,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:202,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:204,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:204,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:207,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:208,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:209,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:210,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:213,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:214,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:214,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:217,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:217,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:218,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:218,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:221,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:222,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 106
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 223
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Truncated
    - std::string
    - EXPECT_FALSE
    - EXPECT_EQ
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TruncateUTF8ToByteSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:229,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:230,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:232,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:232,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:237,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:238,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:238,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:242,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:243,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:243,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:248,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 252
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - arraysize
    - butil::TrimWhitespace
    - butil::WideToUTF16
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TrimWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:283,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:283,1
    - Dst: butil::CollapseWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:284,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 286
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::WideToUTF16
    - EXPECT_EQ
    - arraysize
    - butil::CollapseWhitespace
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, CollapseWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:315,1
    - Dst: butil::CollapseWhitespaceASCII
      Src: /src/brpc/test/string_util_unittest.cc:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 317
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::CollapseWhitespaceASCII
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, CollapseWhitespaceASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:320,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:320,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:321,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:321,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:322,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:322,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:323,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:323,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:324,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:324,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:325,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:328,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:329,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:329,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:330,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:330,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:333,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:333,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:334,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:334,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:335,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:335,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:336,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:337,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:337,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:338,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:338,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:339,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:340,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:340,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:341,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:341,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:342,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:342,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:343,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:346,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:346,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:347,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:347,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:348,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:348,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:351,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:351,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:352,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:352,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:353,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:353,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:353,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:354,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:354,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:357,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:357,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:358,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:358,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:359,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:359,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:360,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:360,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:361,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:361,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:365,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:365,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:366,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:366,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:367,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:367,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:369,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:369,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:371,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:371,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:373,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:380,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:380,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:381,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:382,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:382,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 383
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string
    - butil::IsStringUTF8
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, IsStringUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:398,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:399,1
    - Dst: butil::IsStringASCII
      Src: /src/brpc/test/string_util_unittest.cc:399,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:400,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:401,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:401,1
    - Dst: butil::UTF16ToASCII
      Src: /src/brpc/test/string_util_unittest.cc:403,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:404,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:407,1
    - Dst: butil::IsStringASCII
      Src: /src/brpc/test/string_util_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:412,1
    - Dst: butil::UTF16ToASCII
      Src: /src/brpc/test/string_util_unittest.cc:412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:413,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:413,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:417,1
    - Dst: butil::ASCIIToWide
      Src: /src/brpc/test/string_util_unittest.cc:419,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:420,1
    - Dst: static_cast<std::wstring::size_type>
      Src: /src/brpc/test/string_util_unittest.cc:420,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/string_util_unittest.cc:421,1
    - Dst: butil::UTF16ToASCII
      Src: /src/brpc/test/string_util_unittest.cc:422,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:423,1
    - Dst: static_cast<std::string::size_type>
      Src: /src/brpc/test/string_util_unittest.cc:423,1
    - Dst: std::string::length
      Src: /src/brpc/test/string_util_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:425,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:425,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 426
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::IsStringASCII
    - butil::UTF16ToASCII
    - std::wstring::length
    - static_cast<std::wstring::size_type>
    - arraysize
    - static_cast<std::string::size_type>
    - butil::WideToUTF16
    - butil::ASCIIToWide
    - butil::ASCIIToUTF16
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_EQ
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ConvertASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:429,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:429,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:430,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:430,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:431,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:433,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:434,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:434,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:435,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:435,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:438,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:439,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:442,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:443,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:446,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:447,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:450,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 452
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ToUpperASCII
    - StringToUpperASCII
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ToUpperASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:464,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:465,1
    - Dst: LowerCaseEqualsASCII
      Src: /src/brpc/test/string_util_unittest.cc:465,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:465,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:467,1
    - Dst: LowerCaseEqualsASCII
      Src: /src/brpc/test/string_util_unittest.cc:467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 454
    functionDepth: 1
    functionLinenumber: 454
    functionLinenumberEnd: 470
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LowerCaseEqualsASCII
    - ARRAYSIZE_UNSAFE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, LowerCaseEqualsASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:501,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:502,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:502,1
    - Dst: FormatBytesUnlocalized
      Src: /src/brpc/test/string_util_unittest.cc:503,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 472
    functionDepth: 1
    functionLinenumber: 472
    functionLinenumberEnd: 505
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FormatBytesUnlocalized
    - ARRAYSIZE_UNSAFE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, FormatBytesUnlocalized)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:528,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:529,1
    - Dst: ReplaceSubstringsAfterOffset
      Src: /src/brpc/test/string_util_unittest.cc:530,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:531,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:532,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:533,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:533,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 506
    functionDepth: 1
    functionLinenumber: 506
    functionLinenumberEnd: 535
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - ReplaceSubstringsAfterOffset
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceSubstringsAfterOffset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:558,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:559,1
    - Dst: ReplaceFirstSubstringAfterOffset
      Src: /src/brpc/test/string_util_unittest.cc:560,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:561,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:562,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:563,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:563,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 537
    functionDepth: 1
    functionLinenumber: 537
    functionLinenumberEnd: 565
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ReplaceFirstSubstringAfterOffset
    - ARRAYSIZE_UNSAFE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceFirstSubstringAfterOffset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:568,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:568,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:569,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:569,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:570,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:570,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:571,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:572,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:572,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:573,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:574,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:575,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:576,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:577,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:578,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:578,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:579,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:579,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:580,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:581,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:582,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:582,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:583,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:583,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:586,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:587,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:587,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:588,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:589,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:589,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:590,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:590,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:591,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 567
    functionDepth: 1
    functionLinenumber: 567
    functionLinenumberEnd: 592
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - HexDigitToInt
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, HexDigitToInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/test/string_util_unittest.cc:600,1
    - Dst: GG_VA_COPY
      Src: /src/brpc/test/string_util_unittest.cc:603,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:604,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:605,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:606,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:607,1
    - Dst: va_end
      Src: /src/brpc/test/string_util_unittest.cc:608,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:610,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:611,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:612,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:613,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:615,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:616,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/string_util_unittest.cc:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:618,1
    - Dst: va_end
      Src: /src/brpc/test/string_util_unittest.cc:620,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 621
      start: 598
    functionDepth: 1
    functionLinenumber: 598
    functionLinenumberEnd: 621
    functionName: butil::VariableArgsFunc
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - va_arg
    - GG_VA_COPY
    - EXPECT_EQ
    - va_start
    - va_end
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void VariableArgsFunc(const char* format, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::VariableArgsFunc
      Src: /src/brpc/test/string_util_unittest.cc:624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 623
    functionDepth: 2
    functionLinenumber: 623
    functionLinenumberEnd: 625
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::VariableArgsFunc
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, VAList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:633,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:633,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:633,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:635,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:635,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:636,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:637,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:637,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:638,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:638,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:639,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:639,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:640,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:642,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:642,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:642,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:644,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:644,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:645,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:646,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:646,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:647,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:647,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:648,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:650,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:650,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:652,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:652,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:653,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:653,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:654,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:654,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:655,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:655,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:656,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:658,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:658,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:658,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:660,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:660,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:661,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:662,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:662,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:663,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:663,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:664,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:664,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:665,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:667,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:667,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:667,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:669,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:670,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:671,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:672,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:672,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:673,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:675,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:675,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:675,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:677,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:677,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:678,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:678,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:679,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:679,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:680,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:680,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:681,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:681,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:682,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:684,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:684,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:684,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:686,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:686,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:687,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:688,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:688,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:689,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:689,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:690,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:692,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:692,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:692,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:694,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:694,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:695,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:697,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:697,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:697,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:699,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:699,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:700,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:702,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:702,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:702,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:704,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:704,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:705,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:707,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:707,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:707,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:709,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:710,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:710,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:711,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:713,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:713,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:715,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:715,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:716,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:716,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:717,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:717,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:718,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 76
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 629
    functionDepth: 1
    functionLinenumber: 629
    functionLinenumberEnd: 719
    functionName: butil::TokenizeTest
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - STR
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    - Tokenize
    linkageType: ''
    returnType: void
    signature: void TokenizeTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TokenizeTest
      Src: /src/brpc/test/string_util_unittest.cc:722,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 723
      start: 721
    functionDepth: 2
    functionLinenumber: 721
    functionLinenumberEnd: 723
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TokenizeTest
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TokenizeStdString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TokenizeTest
      Src: /src/brpc/test/string_util_unittest.cc:726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 725
    functionDepth: 2
    functionLinenumber: 725
    functionLinenumberEnd: 727
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TokenizeTest
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TokenizeStringPiece)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:732,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:732,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:734,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:735,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:735,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:737,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:738,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:739,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:739,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:741,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:741,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:742,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:742,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:743,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:744,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 730
    functionDepth: 1
    functionLinenumber: 730
    functionLinenumberEnd: 745
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, JoinString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:751,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:751,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:751,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:753,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:754,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:754,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:756,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:758,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:758,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:760,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:760,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:761,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:761,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:762,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:763,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:763,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 748
    functionDepth: 1
    functionLinenumber: 748
    functionLinenumberEnd: 764
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, JoinStringWithString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:768,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:770,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:770,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:770,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:772,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:773,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:773,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:773,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:775,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:775,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:776,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:776,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:777,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:777,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:777,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:779,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:779,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:780,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:780,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:780,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:781,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:781,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 783
      start: 767
    functionDepth: 1
    functionLinenumber: 767
    functionLinenumberEnd: 783
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - std::vector::push_back
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    - JoinString
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, JoinStringWithString16)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:786,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:786,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:787,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:787,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:788,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:789,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:789,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:790,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:790,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:791,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:791,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:792,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:792,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:792,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:793,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:793,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:793,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:794,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:794,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:794,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:795,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:795,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:795,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:797,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:797,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:797,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:798,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:799,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:799,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:799,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:800,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:801,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:801,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:801,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:802,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:803,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:803,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:803,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:804,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:805,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:805,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:805,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:806,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:807,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:807,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:807,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:808,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 785
    functionDepth: 1
    functionLinenumber: 785
    functionLinenumberEnd: 813
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - std::string
    - EXPECT_FALSE
    - butil::ASCIIToUTF16
    - StartsWith
    - StartsWithASCII
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, StartsWith)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:816,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:816,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:816,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:817,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:818,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:818,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:818,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:819,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:820,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:820,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:820,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:821,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:822,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:822,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:822,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:823,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:826,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:826,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:826,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:827,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:828,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:828,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:828,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:829,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:834,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:834,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:834,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 839
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - butil::ASCIIToUTF16
    - EXPECT_FALSE
    - EndsWith
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, EndsWith)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:843,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:843,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:844,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:844,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:847,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:847,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:850,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:850,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:851,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:852,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:853,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:855,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:855,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:858,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:858,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:859,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:860,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:861,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 862
      start: 841
    functionDepth: 1
    functionLinenumber: 841
    functionLinenumberEnd: 862
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, GetStringFWithOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:868,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:868,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:869,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:869,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:870,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:870,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:873,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:874,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:876,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:876,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 877
      start: 864
    functionDepth: 1
    functionLinenumber: 864
    functionLinenumberEnd: 877
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholdersTooFew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:881,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:881,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:882,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:882,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:883,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:883,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:884,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:884,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:885,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:885,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:886,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:886,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:887,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:887,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:888,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:888,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:889,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:889,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:892,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:893,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:895,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:895,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 879
    functionDepth: 1
    functionLinenumber: 879
    functionLinenumberEnd: 896
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholders)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:900,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:900,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:901,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:901,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:902,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:902,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:903,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:903,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:904,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:904,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:905,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:905,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:906,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:906,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:907,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:907,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:908,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:908,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:909,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:909,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:910,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:910,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:911,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:911,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:912,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:912,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:913,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:913,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:916,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:920,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:920,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 922
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholdersMoreThan9Replacements)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:926,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:927,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:928,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:929,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:930,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:931,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:932,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:933,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:934,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:937,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 924
    functionDepth: 1
    functionLinenumber: 924
    functionLinenumberEnd: 941
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, StdStringReplaceStringPlaceholders)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:945,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:946,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:947,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:948,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:948,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 950
      start: 943
    functionDepth: 1
    functionLinenumber: 943
    functionLinenumberEnd: 950
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholdersConsecutiveDollarSigns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:953,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:953,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:954,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:954,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:955,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:955,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:956,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:956,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:957,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:957,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:958,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:958,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:959,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:959,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:960,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:960,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:961,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:961,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:962,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:962,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:963,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:963,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:964,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:964,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:965,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:965,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:967,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:967,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:970,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:970,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:971,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:972,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:972,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:974,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:974,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:976,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:976,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:979,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:979,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:979,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:980,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:981,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:981,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:981,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:982,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:987,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:987,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:987,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:988,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 989
      start: 952
    functionDepth: 1
    functionLinenumber: 952
    functionLinenumberEnd: 989
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - MatchPattern
    - EXPECT_TRUE
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, MatchPatternTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:996,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:996,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:996,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:997,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:997,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:998,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:998,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:998,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:999,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:999,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1007,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1007,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1008,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1009,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1010,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1010,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1011,1
    - Dst: static_cast<wchar_t>
      Src: /src/brpc/test/string_util_unittest.cc:1011,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1012,1
    - Dst: static_cast<wchar_t>
      Src: /src/brpc/test/string_util_unittest.cc:1012,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1019,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1019,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1019,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1020,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1020,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1021,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1021,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1021,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1022,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1022,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1029,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1029,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1029,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1030,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1030,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1031,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1031,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1031,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1032,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1032,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1039,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1039,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1039,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1040,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1040,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1041,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1041,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1041,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1042,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1042,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 991
    functionDepth: 1
    functionLinenumber: 991
    functionLinenumberEnd: 1044
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - static_cast<wchar_t>
    - butil::strlcpy
    - arraysize
    - butil::wcslcpy
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, LcpyTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:1073,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1074,1
    - Dst: butil::IsWprintfFormatPortable
      Src: /src/brpc/test/string_util_unittest.cc:1074,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1075
      start: 1046
    functionDepth: 1
    functionLinenumber: 1046
    functionLinenumberEnd: 1075
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::IsWprintfFormatPortable
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, WprintfFormatPortabilityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1080,1
    - Dst: butil::RemoveChars
      Src: /src/brpc/test/string_util_unittest.cc:1080,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1081,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1084,1
    - Dst: butil::RemoveChars
      Src: /src/brpc/test/string_util_unittest.cc:1084,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1085,1
    - Dst: std::string::clear
      Src: /src/brpc/test/string_util_unittest.cc:1088,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1089,1
    - Dst: butil::RemoveChars
      Src: /src/brpc/test/string_util_unittest.cc:1089,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1090,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1090,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1091
      start: 1077
    functionDepth: 1
    functionLinenumber: 1077
    functionLinenumberEnd: 1091
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string
    - std::string::clear
    - butil::RemoveChars
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, RemoveChars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:1116,1
    - Dst: butil::ReplaceChars
      Src: /src/brpc/test/string_util_unittest.cc:1118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1125
      start: 1093
    functionDepth: 1
    functionLinenumber: 1093
    functionLinenumberEnd: 1125
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::ReplaceChars
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceChars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1131,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1131,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1133,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1133,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1134,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1134,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1135,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1136,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1136,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1137,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1137,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1139,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1139,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1140,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1140,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1141,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1142,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1142,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1143,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1143,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1144,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1146,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1146,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:1146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1147,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1147,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1148,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1148,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1149,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1149,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1149,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1150,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1150,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1151,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1151,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1127
    functionDepth: 1
    functionLinenumber: 1127
    functionLinenumberEnd: 1153
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - std::string
    - EXPECT_FALSE
    - butil::ASCIIToUTF16
    - butil::ContainsOnlyChars
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ContainsOnlyChars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strncpy
      Src: /src/brpc/test/string_util_unittest.cc:1160,1
    - Dst: WriteInto
      Src: /src/brpc/test/string_util_unittest.cc:1160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1163,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1163,1
    - Dst: std::min
      Src: /src/brpc/test/string_util_unittest.cc:1164,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1164,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1165,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/string_util_unittest.cc:1165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1166,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_util_unittest.cc:1166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - num_chars
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1157
    functionDepth: 1
    functionLinenumber: 1157
    functionLinenumberEnd: 1167
    functionName: butil::WriteIntoTest::WritesCorrectly
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - WriteInto
    - std::string::c_str
    - std::min
    - strncpy
    - arraysize
    - EXPECT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void WritesCorrectly(size_t num_chars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WritesCorrectly
      Src: /src/brpc/test/string_util_unittest.cc:1173,1
    - Dst: WritesCorrectly
      Src: /src/brpc/test/string_util_unittest.cc:1174,1
    - Dst: WritesCorrectly
      Src: /src/brpc/test/string_util_unittest.cc:1175,1
    - Dst: strncpy
      Src: /src/brpc/test/string_util_unittest.cc:1183,1
    - Dst: WriteInto
      Src: /src/brpc/test/string_util_unittest.cc:1183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1185,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_util_unittest.cc:1185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1187,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_util_unittest.cc:1187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1188
      start: 1170
    functionDepth: 1
    functionLinenumber: 1170
    functionLinenumberEnd: 1188
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - WritesCorrectly
    - WriteInto
    - strncpy
    - EXPECT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(WriteIntoTest, WriteInto)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::length
      Src: /src/brpc/test/string_util_unittest.cc:59,1
    - Dst: butil::TruncateUTF8ToByteSize
      Src: /src/brpc/test/string_util_unittest.cc:60,1
    - Dst: std::string*::length
      Src: /src/brpc/test/string_util_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' input'
    - byte_size
    - output
    argTypes:
    - std::string
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: butil::Truncated
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::TruncateUTF8ToByteSize
    - std::string*::length
    - butil::length
    linkageType: ''
    returnType: bool
    signature: "bool Truncated(const std::string& input, const size_t byte_size,\n
      \              std::string* output)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::length
      Src: /src/brpc/test/string_util_unittest.cc:59,1
    - Dst: butil::TruncateUTF8ToByteSize
      Src: /src/brpc/test/string_util_unittest.cc:60,1
    - Dst: std::string*::length
      Src: /src/brpc/test/string_util_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' input'
    - byte_size
    - output
    argTypes:
    - std::string
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: butil::Truncated
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::TruncateUTF8ToByteSize
    - std::string*::length
    - butil::length
    linkageType: ''
    returnType: bool
    signature: "bool Truncated(const std::string& input, const size_t byte_size,\n
      \              std::string* output)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:70,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:70,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:72,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:73,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:74,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:74,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:75,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:75,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:78,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:79,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:80,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:81,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:82,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:83,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:83,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:84,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:85,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:90,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:91,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:91,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:91,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:97,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:98,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:98,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:102,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:103,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:104,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:104,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:105,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:106,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:107,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:107,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:110,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:111,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:111,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:112,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:113,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:113,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:114,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:116,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:117,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:119,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:119,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:120,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:121,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:124,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:125,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:126,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:127,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:128,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:129,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:129,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:130,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:131,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:132,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:133,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:134,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:135,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:136,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:137,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:137,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:138,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:139,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:140,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:141,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:142,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:143,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:144,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:145,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:148,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:149,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:150,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:151,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:152,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:153,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:156,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:157,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:158,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:159,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:164,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:165,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:165,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:165,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:172,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:173,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:173,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:173,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:178,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:179,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:179,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:183,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:184,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:184,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:185,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:186,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:187,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:188,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:188,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:189,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:189,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:190,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:191,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:192,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:196,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:196,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:197,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:197,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:198,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:199,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:200,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:201,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:202,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:204,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:204,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:207,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:208,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:209,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:210,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:213,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:214,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:214,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:217,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:217,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:218,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:218,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:221,1
    - Dst: butil::Truncated
      Src: /src/brpc/test/string_util_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:222,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 106
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 223
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Truncated
    - std::string
    - EXPECT_FALSE
    - EXPECT_EQ
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TruncateUTF8ToByteSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:229,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:230,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:232,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:232,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:237,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:238,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:238,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:242,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:243,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:243,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:248,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 252
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - arraysize
    - butil::TrimWhitespace
    - butil::WideToUTF16
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TrimWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:283,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:283,1
    - Dst: butil::CollapseWhitespace
      Src: /src/brpc/test/string_util_unittest.cc:284,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 286
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::WideToUTF16
    - EXPECT_EQ
    - arraysize
    - butil::CollapseWhitespace
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, CollapseWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:315,1
    - Dst: butil::CollapseWhitespaceASCII
      Src: /src/brpc/test/string_util_unittest.cc:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 317
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::CollapseWhitespaceASCII
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, CollapseWhitespaceASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:320,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:320,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:321,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:321,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:322,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:322,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:323,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:323,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:324,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:324,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:325,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:328,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:329,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:329,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:330,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:330,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:333,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:333,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:334,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:334,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:335,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:335,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:336,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:337,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:337,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:338,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:338,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:339,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:340,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:340,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:341,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:341,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:342,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:342,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:343,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:346,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:346,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:347,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:347,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:348,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:348,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:351,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:351,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:352,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:352,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:353,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:353,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:353,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:354,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:354,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:357,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:357,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:358,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:358,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:359,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:359,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:360,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:360,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:361,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:361,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:365,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:365,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:366,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:366,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:367,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:367,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:369,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:369,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:371,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:371,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:373,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:380,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:380,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:381,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:382,1
    - Dst: butil::IsStringUTF8
      Src: /src/brpc/test/string_util_unittest.cc:382,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 383
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string
    - butil::IsStringUTF8
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, IsStringUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:398,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:399,1
    - Dst: butil::IsStringASCII
      Src: /src/brpc/test/string_util_unittest.cc:399,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:400,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:401,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:401,1
    - Dst: butil::UTF16ToASCII
      Src: /src/brpc/test/string_util_unittest.cc:403,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:404,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:407,1
    - Dst: butil::IsStringASCII
      Src: /src/brpc/test/string_util_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:412,1
    - Dst: butil::UTF16ToASCII
      Src: /src/brpc/test/string_util_unittest.cc:412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:413,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:413,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:417,1
    - Dst: butil::ASCIIToWide
      Src: /src/brpc/test/string_util_unittest.cc:419,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:420,1
    - Dst: static_cast<std::wstring::size_type>
      Src: /src/brpc/test/string_util_unittest.cc:420,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/string_util_unittest.cc:421,1
    - Dst: butil::UTF16ToASCII
      Src: /src/brpc/test/string_util_unittest.cc:422,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:423,1
    - Dst: static_cast<std::string::size_type>
      Src: /src/brpc/test/string_util_unittest.cc:423,1
    - Dst: std::string::length
      Src: /src/brpc/test/string_util_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:425,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_util_unittest.cc:425,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 426
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::IsStringASCII
    - butil::UTF16ToASCII
    - std::wstring::length
    - static_cast<std::wstring::size_type>
    - arraysize
    - static_cast<std::string::size_type>
    - butil::WideToUTF16
    - butil::ASCIIToWide
    - butil::ASCIIToUTF16
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_EQ
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ConvertASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:429,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:429,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:430,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:430,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:431,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:433,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:434,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:434,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:435,1
    - Dst: butil::ToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:435,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:438,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:439,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:442,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:443,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:446,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:447,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/test/string_util_unittest.cc:450,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 452
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ToUpperASCII
    - StringToUpperASCII
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ToUpperASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:464,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:465,1
    - Dst: LowerCaseEqualsASCII
      Src: /src/brpc/test/string_util_unittest.cc:465,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:465,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:467,1
    - Dst: LowerCaseEqualsASCII
      Src: /src/brpc/test/string_util_unittest.cc:467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 454
    functionDepth: 1
    functionLinenumber: 454
    functionLinenumberEnd: 470
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LowerCaseEqualsASCII
    - ARRAYSIZE_UNSAFE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, LowerCaseEqualsASCII)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:501,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:502,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:502,1
    - Dst: FormatBytesUnlocalized
      Src: /src/brpc/test/string_util_unittest.cc:503,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 472
    functionDepth: 1
    functionLinenumber: 472
    functionLinenumberEnd: 505
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FormatBytesUnlocalized
    - ARRAYSIZE_UNSAFE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, FormatBytesUnlocalized)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:528,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:529,1
    - Dst: ReplaceSubstringsAfterOffset
      Src: /src/brpc/test/string_util_unittest.cc:530,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:531,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:532,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:533,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:533,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 506
    functionDepth: 1
    functionLinenumber: 506
    functionLinenumberEnd: 535
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - ReplaceSubstringsAfterOffset
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceSubstringsAfterOffset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:558,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:559,1
    - Dst: ReplaceFirstSubstringAfterOffset
      Src: /src/brpc/test/string_util_unittest.cc:560,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:561,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:562,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:563,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:563,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 537
    functionDepth: 1
    functionLinenumber: 537
    functionLinenumberEnd: 565
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ReplaceFirstSubstringAfterOffset
    - ARRAYSIZE_UNSAFE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceFirstSubstringAfterOffset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:568,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:568,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:569,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:569,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:570,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:570,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:571,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:572,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:572,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:573,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:574,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:575,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:576,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:577,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:578,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:578,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:579,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:579,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:580,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:581,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:582,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:582,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:583,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:583,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:586,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:587,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:587,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:588,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:589,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:589,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:590,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:590,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:591,1
    - Dst: HexDigitToInt
      Src: /src/brpc/test/string_util_unittest.cc:591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 567
    functionDepth: 1
    functionLinenumber: 567
    functionLinenumberEnd: 592
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - HexDigitToInt
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, HexDigitToInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/test/string_util_unittest.cc:600,1
    - Dst: GG_VA_COPY
      Src: /src/brpc/test/string_util_unittest.cc:603,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:604,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:605,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:606,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:607,1
    - Dst: va_end
      Src: /src/brpc/test/string_util_unittest.cc:608,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:610,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:611,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:612,1
    - Dst: va_arg
      Src: /src/brpc/test/string_util_unittest.cc:613,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:615,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:616,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/string_util_unittest.cc:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:618,1
    - Dst: va_end
      Src: /src/brpc/test/string_util_unittest.cc:620,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 621
      start: 598
    functionDepth: 1
    functionLinenumber: 598
    functionLinenumberEnd: 621
    functionName: butil::VariableArgsFunc
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 1
    functionsReached:
    - va_arg
    - GG_VA_COPY
    - EXPECT_EQ
    - va_start
    - va_end
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void VariableArgsFunc(const char* format, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::VariableArgsFunc
      Src: /src/brpc/test/string_util_unittest.cc:624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 623
    functionDepth: 2
    functionLinenumber: 623
    functionLinenumberEnd: 625
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::VariableArgsFunc
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, VAList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:633,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:633,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:633,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:635,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:635,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:636,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:637,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:637,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:638,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:638,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:639,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:639,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:640,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:642,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:642,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:642,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:644,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:644,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:645,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:646,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:646,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:647,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:647,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:648,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:650,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:650,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:652,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:652,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:653,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:653,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:654,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:654,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:655,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:655,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:656,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:658,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:658,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:658,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:660,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:660,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:661,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:662,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:662,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:663,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:663,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:664,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:664,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:665,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:667,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:667,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:667,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:669,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:670,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:671,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:672,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:672,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:673,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:675,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:675,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:675,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:677,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:677,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:678,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:678,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:679,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:679,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:680,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:680,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:681,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:681,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:682,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:684,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:684,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:684,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:686,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:686,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:687,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:688,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:688,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:689,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:689,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:690,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:692,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:692,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:692,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:694,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:694,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:695,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:697,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:697,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:697,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:699,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:699,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:700,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:702,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:702,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:702,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:704,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:704,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:705,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:707,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:707,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:707,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:709,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:710,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:710,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:711,1
    - Dst: Tokenize
      Src: /src/brpc/test/string_util_unittest.cc:713,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:713,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:715,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:715,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:716,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:716,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:717,1
    - Dst: STR
      Src: /src/brpc/test/string_util_unittest.cc:717,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:718,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 76
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 629
    functionDepth: 1
    functionLinenumber: 629
    functionLinenumberEnd: 719
    functionName: butil::TokenizeTest
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - STR
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    - Tokenize
    linkageType: ''
    returnType: void
    signature: void TokenizeTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TokenizeTest
      Src: /src/brpc/test/string_util_unittest.cc:722,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 723
      start: 721
    functionDepth: 2
    functionLinenumber: 721
    functionLinenumberEnd: 723
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TokenizeTest
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TokenizeStdString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TokenizeTest
      Src: /src/brpc/test/string_util_unittest.cc:726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 725
    functionDepth: 2
    functionLinenumber: 725
    functionLinenumberEnd: 727
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TokenizeTest
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, TokenizeStringPiece)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:732,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:732,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:734,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:735,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:735,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:737,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:738,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:739,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:739,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:741,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:741,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:742,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:742,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:743,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:744,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 730
    functionDepth: 1
    functionLinenumber: 730
    functionLinenumberEnd: 745
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, JoinString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:751,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:751,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:751,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:753,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:754,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:754,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:756,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:758,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:758,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:760,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:760,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:761,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:761,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:762,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:763,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:763,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 748
    functionDepth: 1
    functionLinenumber: 748
    functionLinenumberEnd: 764
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, JoinStringWithString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:768,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:770,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:770,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:770,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:772,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:773,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:773,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:773,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:775,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:775,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:776,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:776,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:777,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:777,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:777,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:779,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:779,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:780,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:780,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:780,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:781,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:781,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    - Dst: JoinString
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:782,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 783
      start: 767
    functionDepth: 1
    functionLinenumber: 767
    functionLinenumberEnd: 783
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - std::vector::push_back
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    - JoinString
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, JoinStringWithString16)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:786,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:786,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:787,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:787,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:788,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:789,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:789,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:790,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:790,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:791,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:791,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:792,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:792,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:792,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:793,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:793,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:793,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:794,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:794,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:794,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:795,1
    - Dst: StartsWithASCII
      Src: /src/brpc/test/string_util_unittest.cc:795,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:795,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:797,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:797,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:797,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:798,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:799,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:799,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:799,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:800,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:801,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:801,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:801,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:802,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:803,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:803,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:803,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:804,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:805,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:805,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:805,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:806,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:807,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:807,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:807,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:808,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:809,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:810,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:811,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    - Dst: StartsWith
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 785
    functionDepth: 1
    functionLinenumber: 785
    functionLinenumberEnd: 813
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - std::string
    - EXPECT_FALSE
    - butil::ASCIIToUTF16
    - StartsWith
    - StartsWithASCII
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, StartsWith)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:816,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:816,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:816,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:817,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:818,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:818,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:818,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:819,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:820,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:820,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:820,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:821,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:822,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:822,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:822,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:823,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:824,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:825,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:826,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:826,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:826,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:827,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:828,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:828,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:828,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:829,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:830,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:831,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:832,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:833,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:834,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:834,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:834,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:836,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:837,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    - Dst: EndsWith
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:838,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 839
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - butil::ASCIIToUTF16
    - EXPECT_FALSE
    - EndsWith
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, EndsWith)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:843,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:843,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:844,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:844,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:847,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:847,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:850,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:850,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:851,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:852,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:853,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:855,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:855,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:858,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_util_unittest.cc:858,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:859,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:860,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_util_unittest.cc:861,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 862
      start: 841
    functionDepth: 1
    functionLinenumber: 841
    functionLinenumberEnd: 862
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, GetStringFWithOffsets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:868,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:868,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:869,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:869,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:870,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:870,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:873,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:874,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:876,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:876,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 877
      start: 864
    functionDepth: 1
    functionLinenumber: 864
    functionLinenumberEnd: 877
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholdersTooFew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:881,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:881,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:882,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:882,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:883,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:883,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:884,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:884,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:885,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:885,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:886,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:886,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:887,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:887,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:888,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:888,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:889,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:889,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:892,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:893,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:895,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:895,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 879
    functionDepth: 1
    functionLinenumber: 879
    functionLinenumberEnd: 896
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholders)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:900,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:900,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:901,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:901,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:902,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:902,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:903,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:903,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:904,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:904,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:905,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:905,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:906,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:906,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:907,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:907,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:908,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:908,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:909,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:909,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:910,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:910,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:911,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:911,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:912,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:912,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:913,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:913,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:916,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:920,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:920,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 922
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholdersMoreThan9Replacements)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:926,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:927,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:928,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:929,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:930,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:931,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:932,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:933,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:934,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:937,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 924
    functionDepth: 1
    functionLinenumber: 924
    functionLinenumberEnd: 941
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, StdStringReplaceStringPlaceholders)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:945,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:946,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_util_unittest.cc:947,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:948,1
    - Dst: ReplaceStringPlaceholders
      Src: /src/brpc/test/string_util_unittest.cc:948,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 950
      start: 943
    functionDepth: 1
    functionLinenumber: 943
    functionLinenumberEnd: 950
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - ReplaceStringPlaceholders
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceStringPlaceholdersConsecutiveDollarSigns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:953,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:953,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:954,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:954,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:955,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:955,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:956,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:956,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:957,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:957,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:958,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:958,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:959,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:959,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:960,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:960,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:961,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:961,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:962,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:962,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:963,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:963,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:964,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:964,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:965,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:965,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:967,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:967,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:970,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:970,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:971,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:972,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:972,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:974,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:974,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:976,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:976,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:979,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:979,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:979,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:980,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:981,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:981,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:981,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:982,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:987,1
    - Dst: MatchPattern
      Src: /src/brpc/test/string_util_unittest.cc:987,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:987,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:988,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 989
      start: 952
    functionDepth: 1
    functionLinenumber: 952
    functionLinenumberEnd: 989
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - MatchPattern
    - EXPECT_TRUE
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, MatchPatternTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:996,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:996,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:996,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:997,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:997,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:998,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:998,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:998,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:999,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:999,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1007,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1007,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1008,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1009,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1010,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1010,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1011,1
    - Dst: static_cast<wchar_t>
      Src: /src/brpc/test/string_util_unittest.cc:1011,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1012,1
    - Dst: static_cast<wchar_t>
      Src: /src/brpc/test/string_util_unittest.cc:1012,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1019,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1019,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1019,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1020,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1020,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1021,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1021,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1021,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1022,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1022,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1029,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1029,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1029,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1030,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1030,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1031,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1031,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1031,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1032,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1032,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1039,1
    - Dst: butil::strlcpy
      Src: /src/brpc/test/string_util_unittest.cc:1039,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1039,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1040,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1040,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1041,1
    - Dst: butil::wcslcpy
      Src: /src/brpc/test/string_util_unittest.cc:1041,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1041,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1042,1
    - Dst: memcmp
      Src: /src/brpc/test/string_util_unittest.cc:1042,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 991
    functionDepth: 1
    functionLinenumber: 991
    functionLinenumberEnd: 1044
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - static_cast<wchar_t>
    - butil::strlcpy
    - arraysize
    - butil::wcslcpy
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, LcpyTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:1073,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1074,1
    - Dst: butil::IsWprintfFormatPortable
      Src: /src/brpc/test/string_util_unittest.cc:1074,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1075
      start: 1046
    functionDepth: 1
    functionLinenumber: 1046
    functionLinenumberEnd: 1075
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::IsWprintfFormatPortable
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, WprintfFormatPortabilityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1080,1
    - Dst: butil::RemoveChars
      Src: /src/brpc/test/string_util_unittest.cc:1080,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1081,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1084,1
    - Dst: butil::RemoveChars
      Src: /src/brpc/test/string_util_unittest.cc:1084,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1085,1
    - Dst: std::string::clear
      Src: /src/brpc/test/string_util_unittest.cc:1088,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1089,1
    - Dst: butil::RemoveChars
      Src: /src/brpc/test/string_util_unittest.cc:1089,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1090,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1090,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1091
      start: 1077
    functionDepth: 1
    functionLinenumber: 1077
    functionLinenumberEnd: 1091
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string
    - std::string::clear
    - butil::RemoveChars
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, RemoveChars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_util_unittest.cc:1116,1
    - Dst: butil::ReplaceChars
      Src: /src/brpc/test/string_util_unittest.cc:1118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1125
      start: 1093
    functionDepth: 1
    functionLinenumber: 1093
    functionLinenumberEnd: 1125
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::ReplaceChars
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ReplaceChars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1130,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1131,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1131,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1133,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1133,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1134,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1134,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1135,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1136,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1136,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1137,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1137,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1139,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1139,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1140,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1140,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1141,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1142,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1142,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1143,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1143,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1144,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1146,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1146,1
    - Dst: string16
      Src: /src/brpc/test/string_util_unittest.cc:1146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1147,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1147,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1148,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1148,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_util_unittest.cc:1149,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1149,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1149,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1150,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1150,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_util_unittest.cc:1151,1
    - Dst: butil::ContainsOnlyChars
      Src: /src/brpc/test/string_util_unittest.cc:1151,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_util_unittest.cc:1151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1127
    functionDepth: 1
    functionLinenumber: 1127
    functionLinenumberEnd: 1153
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - std::string
    - EXPECT_FALSE
    - butil::ASCIIToUTF16
    - butil::ContainsOnlyChars
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, ContainsOnlyChars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strncpy
      Src: /src/brpc/test/string_util_unittest.cc:1160,1
    - Dst: WriteInto
      Src: /src/brpc/test/string_util_unittest.cc:1160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1163,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1163,1
    - Dst: std::min
      Src: /src/brpc/test/string_util_unittest.cc:1164,1
    - Dst: arraysize
      Src: /src/brpc/test/string_util_unittest.cc:1164,1
    - Dst: std::string
      Src: /src/brpc/test/string_util_unittest.cc:1165,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/string_util_unittest.cc:1165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1166,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_util_unittest.cc:1166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - num_chars
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1157
    functionDepth: 1
    functionLinenumber: 1157
    functionLinenumberEnd: 1167
    functionName: butil::WriteIntoTest::WritesCorrectly
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - WriteInto
    - std::string::c_str
    - std::min
    - strncpy
    - arraysize
    - EXPECT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void WritesCorrectly(size_t num_chars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WritesCorrectly
      Src: /src/brpc/test/string_util_unittest.cc:1173,1
    - Dst: WritesCorrectly
      Src: /src/brpc/test/string_util_unittest.cc:1174,1
    - Dst: WritesCorrectly
      Src: /src/brpc/test/string_util_unittest.cc:1175,1
    - Dst: strncpy
      Src: /src/brpc/test/string_util_unittest.cc:1183,1
    - Dst: WriteInto
      Src: /src/brpc/test/string_util_unittest.cc:1183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1185,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_util_unittest.cc:1185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_util_unittest.cc:1187,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_util_unittest.cc:1187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1188
      start: 1170
    functionDepth: 1
    functionLinenumber: 1170
    functionLinenumberEnd: 1188
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_util_unittest.cc
    functionUses: 0
    functionsReached:
    - WritesCorrectly
    - WriteInto
    - strncpy
    - EXPECT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(WriteIntoTest, WriteInto)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: butil::Listener::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Listener::IncrementByMultipleOfScaler
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementByMultipleOfScaler(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::Listener::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::Remover::Remover
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Remover()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/callback_list_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::Remover::IncrementTotalAndRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void IncrementTotalAndRemove()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub
    argTypes:
    - scoped_ptr<CallbackList<void(void)>::Subscription>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Remover::SetSubscriptionToRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
    linkageType: ''
    returnType: void
    signature: "void SetSubscriptionToRemove(\n      scoped_ptr<CallbackList<void(void)>::Subscription>
      sub)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: butil::Remover::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cb_reg
    argTypes:
    - CallbackList<void(void)>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(CallbackList<void(void)>* cb_reg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Add
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 64
    functionName: butil::Adder::AddCallback
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Add
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void AddCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: butil::Adder::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::Adder::added
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: butil::Adder::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: butil::Summer::Summer
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Summer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::Summer::AddOneParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddOneParam(int a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::Summer::AddTwoParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddTwoParam(int a, int b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - a
    - b
    - c
    argTypes:
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: butil::Summer::AddThreeParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddThreeParam(int a, int b, int c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - a
    - b
    - c
    - d
    argTypes:
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: butil::Summer::AddFourParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFourParam(int a, int b, int c, int d)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - a
    - b
    - c
    - d
    - e
    argTypes:
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::Summer::AddFiveParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFiveParam(int a, int b, int c, int d, int e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - a
    - b
    - c
    - d
    - e
    - f
    argTypes:
    - int
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::Summer::AddSixParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddSixParam(int a, int b, int c, int d, int e , int f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: butil::Summer::value
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Summer::value
    - CallbackList::Add
    - CallbackList::Notify
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, ArityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:167,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:178,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:179,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:202,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:213,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:214,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTestWithParams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:227,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:230,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Remover::SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 257
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - CallbackList::Notify
    - Remover::total
    - Listener::total
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    - scoped_ptr::Pass
    - EXPECT_EQ
    - total
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, RemoveCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: Adder::added
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 281
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - Adder::added
    - Adder::total
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, AddCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 288
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Notify
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, EmptyList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: butil::Listener::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Listener::IncrementByMultipleOfScaler
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementByMultipleOfScaler(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::Listener::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::Remover::Remover
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Remover()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/callback_list_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::Remover::IncrementTotalAndRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void IncrementTotalAndRemove()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub
    argTypes:
    - scoped_ptr<CallbackList<void(void)>::Subscription>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Remover::SetSubscriptionToRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
    linkageType: ''
    returnType: void
    signature: "void SetSubscriptionToRemove(\n      scoped_ptr<CallbackList<void(void)>::Subscription>
      sub)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: butil::Remover::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cb_reg
    argTypes:
    - CallbackList<void(void)>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(CallbackList<void(void)>* cb_reg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Add
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 64
    functionName: butil::Adder::AddCallback
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Add
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void AddCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: butil::Adder::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::Adder::added
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: butil::Adder::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: butil::Summer::Summer
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Summer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::Summer::AddOneParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddOneParam(int a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::Summer::AddTwoParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddTwoParam(int a, int b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - a
    - b
    - c
    argTypes:
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: butil::Summer::AddThreeParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddThreeParam(int a, int b, int c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - a
    - b
    - c
    - d
    argTypes:
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: butil::Summer::AddFourParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFourParam(int a, int b, int c, int d)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - a
    - b
    - c
    - d
    - e
    argTypes:
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::Summer::AddFiveParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFiveParam(int a, int b, int c, int d, int e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - a
    - b
    - c
    - d
    - e
    - f
    argTypes:
    - int
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::Summer::AddSixParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddSixParam(int a, int b, int c, int d, int e , int f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: butil::Summer::value
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Summer::value
    - CallbackList::Add
    - CallbackList::Notify
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, ArityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:167,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:178,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:179,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:202,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:213,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:214,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTestWithParams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:227,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:230,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Remover::SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 257
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - CallbackList::Notify
    - Remover::total
    - Listener::total
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    - scoped_ptr::Pass
    - EXPECT_EQ
    - total
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, RemoveCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: Adder::added
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 281
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - Adder::added
    - Adder::total
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, AddCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 288
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Notify
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, EmptyList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: butil::Listener::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Listener::IncrementByMultipleOfScaler
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementByMultipleOfScaler(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::Listener::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::Remover::Remover
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Remover()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/callback_list_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::Remover::IncrementTotalAndRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void IncrementTotalAndRemove()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub
    argTypes:
    - scoped_ptr<CallbackList<void(void)>::Subscription>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Remover::SetSubscriptionToRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
    linkageType: ''
    returnType: void
    signature: "void SetSubscriptionToRemove(\n      scoped_ptr<CallbackList<void(void)>::Subscription>
      sub)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: butil::Remover::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cb_reg
    argTypes:
    - CallbackList<void(void)>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(CallbackList<void(void)>* cb_reg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Add
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 64
    functionName: butil::Adder::AddCallback
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Add
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void AddCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: butil::Adder::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::Adder::added
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: butil::Adder::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: butil::Summer::Summer
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Summer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::Summer::AddOneParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddOneParam(int a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::Summer::AddTwoParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddTwoParam(int a, int b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - a
    - b
    - c
    argTypes:
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: butil::Summer::AddThreeParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddThreeParam(int a, int b, int c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - a
    - b
    - c
    - d
    argTypes:
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: butil::Summer::AddFourParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFourParam(int a, int b, int c, int d)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - a
    - b
    - c
    - d
    - e
    argTypes:
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::Summer::AddFiveParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFiveParam(int a, int b, int c, int d, int e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - a
    - b
    - c
    - d
    - e
    - f
    argTypes:
    - int
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::Summer::AddSixParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddSixParam(int a, int b, int c, int d, int e , int f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: butil::Summer::value
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Summer::value
    - CallbackList::Add
    - CallbackList::Notify
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, ArityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:167,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:178,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:179,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:202,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:213,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:214,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTestWithParams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:227,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:230,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Remover::SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 257
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - CallbackList::Notify
    - Remover::total
    - Listener::total
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    - scoped_ptr::Pass
    - EXPECT_EQ
    - total
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, RemoveCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: Adder::added
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 281
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - Adder::added
    - Adder::total
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, AddCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 288
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Notify
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, EmptyList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: butil::Listener::Listener
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Listener(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: butil::Listener::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Listener::IncrementByMultipleOfScaler
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementByMultipleOfScaler(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::Listener::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::Remover::Remover
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Remover()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/callback_list_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::Remover::IncrementTotalAndRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void IncrementTotalAndRemove()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub
    argTypes:
    - scoped_ptr<CallbackList<void(void)>::Subscription>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Remover::SetSubscriptionToRemove
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<CallbackList<void(void)>::Subscription>::Pass
    linkageType: ''
    returnType: void
    signature: "void SetSubscriptionToRemove(\n      scoped_ptr<CallbackList<void(void)>::Subscription>
      sub)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: butil::Remover::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cb_reg
    argTypes:
    - CallbackList<void(void)>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(CallbackList<void(void)>* cb_reg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Add
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 64
    functionName: butil::Adder::AddCallback
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Add
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void AddCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: butil::Adder::IncrementTotal
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTotal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::Adder::added
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: butil::Adder::total
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int total() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: butil::Summer::Summer
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Summer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::Summer::AddOneParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddOneParam(int a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::Summer::AddTwoParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddTwoParam(int a, int b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - a
    - b
    - c
    argTypes:
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: butil::Summer::AddThreeParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddThreeParam(int a, int b, int c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - a
    - b
    - c
    - d
    argTypes:
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: butil::Summer::AddFourParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFourParam(int a, int b, int c, int d)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - a
    - b
    - c
    - d
    - e
    argTypes:
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::Summer::AddFiveParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddFiveParam(int a, int b, int c, int d, int e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - a
    - b
    - c
    - d
    - e
    - f
    argTypes:
    - int
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::Summer::AddSixParam
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddSixParam(int a, int b, int c, int d, int e , int f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: butil::Summer::value
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:107,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:110,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:114,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:117,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:121,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:124,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:128,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:131,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:135,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:138,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:142,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    - Dst: Summer::value
      Src: /src/brpc/test/callback_list_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Summer::value
    - CallbackList::Add
    - CallbackList::Notify
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, ArityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:155,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:160,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:165,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:167,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:170,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:176,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:178,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:179,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:190,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:194,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/callback_list_unittest.cc:195,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:200,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:202,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:205,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:211,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:213,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:214,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/callback_list_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - scoped_ptr::get
    - EXPECT_EQ
    - total
    - Bind
    - scoped_ptr::reset
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, BasicTestWithParams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:226,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:227,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:229,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:230,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:232,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:234,1
    - Dst: Remover::SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:237,1
    - Dst: SetSubscriptionToRemove
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/callback_list_unittest.cc:239,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:248,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: Remover::total
      Src: /src/brpc/test/callback_list_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    - Dst: total
      Src: /src/brpc/test/callback_list_unittest.cc:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 257
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - CallbackList::Notify
    - Remover::total
    - Listener::total
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    - scoped_ptr::Pass
    - EXPECT_EQ
    - total
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, RemoveCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:267,1
    - Dst: CallbackList::Add
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Bind
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: Unretained
      Src: /src/brpc/test/callback_list_unittest.cc:269,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:274,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: Adder::added
      Src: /src/brpc/test/callback_list_unittest.cc:275,1
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: Adder::total
      Src: /src/brpc/test/callback_list_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    - Dst: Listener::total
      Src: /src/brpc/test/callback_list_unittest.cc:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 281
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CallbackList::Add
    - CallbackList::Notify
    - Listener::total
    - Adder::added
    - Adder::total
    - EXPECT_EQ
    - Bind
    - Unretained
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, AddCallbacksDuringIteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackList::Notify
      Src: /src/brpc/test/callback_list_unittest.cc:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 288
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Notify
    linkageType: ''
    returnType: void
    signature: void TEST(CallbackListTest, EmptyList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: EventDispatcherTest::EventDispatcherTest
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EventDispatcherTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: ~EventDispatcherTest() override
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventDispatcherTest() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: EventDispatcherTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: EventDispatcherTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(EventDispatcherTest, has_epollrdhup)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::fetch_add
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:51,1
    - Dst: brpc::MakeVRef
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:53,1
    - Dst: brpc::MakeVRef
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 54
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::fetch_add
    - ASSERT_EQ
    - brpc::MakeVRef
    linkageType: ''
    returnType: void
    signature: void TEST_F(EventDispatcherTest, versioned_ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - f
    argTypes:
    - Forbidden
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: UserData
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UserData(Forbidden f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 71
    functionName: OnCreated
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: int
    signature: int OnCreated()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: BeforeRecycled
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void BeforeRecycled()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: BeforeAdditionalRefReleased
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeAdditionalRefReleased()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: OnFailed
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void OnFailed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: AfterRevived
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void AfterRevived()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:110,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:110,1
    - Dst: UserDataUniquePtr::count::fetch_add
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:111,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - id
    argTypes:
    - UserDataId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 113
    functionName: TestVRef
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - UserDataUniquePtr::count::fetch_add
    - ASSERT_EQ
    - fetch_add
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void TestVRef(UserDataId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestVRef
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 121
    functionName: VRefThread
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestVRef
    linkageType: ''
    returnType: void
    signature: void * VRefThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:125,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:125,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:128,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:129,1
    - Dst: UserDataUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:129,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:130,1
    - Dst: UserDataUniquePtr::Failed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:132,1
    - Dst: UserDataUniquePtr::get
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:135,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:137,1
    - Dst: UserDataUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:143,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:143,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:146,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:153,1
    - Dst: UserDataUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:155,1
    - Dst: UserDataUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:156,1
    - Dst: UserDataUniquePtr::Failed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:157,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:160,1
    - Dst: UserDataUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:163,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:165,1
    - Dst: UserDataUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:165,1
    - Dst: UserDataUniquePtr::Revive
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:168,1
    - Dst: UserDataUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:169,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:171,1
    - Dst: brpc::VersionedRefWithId<T>::SetFailedById
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:172,1
    - Dst: UserDataUniquePtr::reset
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:175,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Stream::Create
    - UserDataUniquePtr::nref
    - ASSERT_TRUE
    - pthread_join
    - UserDataUniquePtr::Revive
    - pthread_create
    - sleep
    - ASSERT_FALSE
    - UserDataUniquePtr::reset
    - brpc::VersionedRefWithId<T>::SetFailedById
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - ASSERT_NE
    - brpc::SetTrackMeAddress
    - UserDataUniquePtr::SetFailed
    - UserDataUniquePtr::get
    - UserDataUniquePtr::Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(EventDispatcherTest, versioned_ref_with_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: ClientMeta
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ClientMeta
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:200,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:206,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:207,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:207,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:208,1
    - Dst: static_cast<SocketExtra*>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:213,1
    - Dst: brpc::user
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:213,1
    - Dst: read
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:216,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:216,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:222,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:223,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:223,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:225,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:225,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:241,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:241,1
    - Dst: OnEdgeTriggeredEventOnce
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:252,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:253,1
    - Dst: MoreReadEvents
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:256,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 258
    functionName: brpc::SocketUser
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - MoreReadEvents
    - read
    - static_cast<SocketExtra*>
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - push_back
    - malloc
    - brpc::fd
    - OnEdgeTriggeredEventOnce
    - brpc::user
    - SetFailed
    - PLOG
    - LOG
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT brpc::SocketUser
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 203
    functionName: SocketExtra
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void SocketExtra()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:206,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:207,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:207,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 205
    functionDepth: 1
    functionLinenumber: 205
    functionLinenumberEnd: 210
    functionName: BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - push_back
    - brpc::Socket*::fd
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* m) override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SocketExtra*>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:213,1
    - Dst: brpc::Socket*::user
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:213,1
    - Dst: read
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:216,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:216,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:222,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:223,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:223,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:225,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:225,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:241,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:241,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 1
    argNames:
    - m
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 247
    functionName: OnEdgeTriggeredEventOnce
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 1
    functionsReached:
    - read
    - static_cast<SocketExtra*>
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - push_back
    - brpc::Socket*::user
    - brpc::Socket*::fd
    - PLOG
    - LOG
    linkageType: ''
    returnType: int
    signature: int OnEdgeTriggeredEventOnce(brpc::Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OnEdgeTriggeredEventOnce
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:252,1
    - Dst: brpc::Socket*::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:253,1
    - Dst: brpc::Socket*::MoreReadEvents
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:256,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - m
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 249
    functionDepth: 2
    functionLinenumber: 249
    functionLinenumberEnd: 257
    functionName: OnEdgeTriggeredEvents
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Socket*::SetFailed
    - brpc::Socket*::MoreReadEvents
    - OnEdgeTriggeredEventOnce
    linkageType: ''
    returnType: void
    signature: void OnEdgeTriggeredEvents(brpc::Socket* m)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:266,1
    - Dst: write
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:273,1
    - Dst: writev
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:280,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:296,1
    - Dst: close
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 298
    functionName: client_thread
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - writev
    - malloc
    - close
    - EXPECT_EQ
    - PLOG
    - write
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 307
    functionName: fmix32
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t fmix32 ( uint32_t h )
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::describe_resources<brpc::Socket>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:325,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:325,1
    - Dst: SocketExtra::SocketExtra
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:326,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:336,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:336,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:341,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:341,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:344,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:345,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:346,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:347,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:348,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:349,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:351,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:359,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:359,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:360,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:365,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:367,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:370,1
    - Dst: std::vector::swap
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:371,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:372,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:373,1
    - Dst: swap
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:374,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:375,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:377,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:377,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:377,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:378,1
    - Dst: begin
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:378,1
    - Dst: end
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:379,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:379,1
    - Dst: size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:379,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:383,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:383,1
    - Dst: butil::describe_resources<brpc::Socket>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:385,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 48
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 390
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - pthread_mutex_lock
    - std::vector::begin
    - sleep
    - swap
    - std::vector::swap
    - butil::Timer::start
    - size
    - LOG
    - butil::Timer::Timer
    - socketpair
    - Socket::Create
    - butil::Timer::u_elapsed
    - SocketExtra::SocketExtra
    - butil::describe_resources<brpc::Socket>
    - std::sort
    - pthread_mutex_unlock
    - begin
    - ProfilerStart
    - ProfilerStop
    - end
    - butil::Timer::stop
    - ClientMeta::ClientMeta
    - pthread_join
    - std::vector::end
    - butil::make_non_blocking
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(EventDispatcherTest, dispatch_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - f
    argTypes:
    - Forbidden
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 410
    functionName: EventPipe::EventPipe
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EventPipe(Forbidden f)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:414,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 412
    functionDepth: 1
    functionLinenumber: 412
    functionLinenumberEnd: 419
    functionName: EventPipe::Notify
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - write
    linkageType: ''
    returnType: int
    signature: int Notify()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:426,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:427,1
    - Dst: Init
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:430,1
    - Dst: id
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:430,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:431,1
    - Dst: set_bthread_tag
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:434,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:434,1
    - Dst: AddConsumer
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:435,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:436,1
    - Dst: id
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:436,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 444
    functionName: EventPipe::OnCreated
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_bthread_tag
    - pipe
    - bthread_self_tag
    - Init
    - AddConsumer
    - id
    - PLOG
    - LOG
    linkageType: ''
    returnType: int
    signature: int OnCreated()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetGlobalEventDispatcher
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:447,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:447,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:449,1
    - Dst: close
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:451,1
    - Dst: close
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:454,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 456
    functionName: EventPipe::BeforeRecycled
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - Reset
    - brpc::GetGlobalEventDispatcher
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void BeforeRecycled()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<EventPipeId>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:460,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:463,1
    - Dst: read
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:468,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:468,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:473,1
    - Dst: EventPipeUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:474,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 458
    functionDepth: 1
    functionLinenumber: 458
    functionLinenumberEnd: 481
    functionName: EventPipe::OnInputEvent
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - arraysize
    - read
    - EventPipeUniquePtr::SetFailed
    - reinterpret_cast<EventPipeId>
    - brpc::SetTrackMeAddress
    - PLOG
    - LOG
    linkageType: ''
    returnType: int
    signature: "int OnInputEvent(void* user_data, uint32_t,\n                            const
      bthread_attr_t&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:485,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 487
    functionName: EventPipe::OnOutputEvent
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    linkageType: ''
    returnType: int
    signature: "int OnOutputEvent(void*, uint32_t,\n                             const
      bthread_attr_t&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:497,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:497,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:500,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:501,1
    - Dst: EventPipeUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:501,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:502,1
    - Dst: EventPipeUniquePtr::Failed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:507,1
    - Dst: EventPipeUniquePtr::Notify
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:507,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:512,1
    - Dst: EventPipeUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:512,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:513,1
    - Dst: EventPipeUniquePtr::Failed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:513,1
    - Dst: EventPipeUniquePtr::reset
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:515,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:516,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:516,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 495
    functionDepth: 1
    functionLinenumber: 495
    functionLinenumberEnd: 517
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - EventPipeUniquePtr::Notify
    - ASSERT_EQ
    - brpc::Stream::Create
    - ASSERT_TRUE
    - EventPipeUniquePtr::nref
    - ASSERT_FALSE
    - EventPipeUniquePtr::Failed
    - EventPipeUniquePtr::reset
    - EventPipeUniquePtr::SetFailed
    - usleep
    - ASSERT_NE
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(EventDispatcherTest, customize_dispatch_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - test_main
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: MULTIPROCESS_TEST_MAIN
    functionSourceFile: /src/brpc/test/multiprocess_func_list.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MULTIPROCESS_TEST_MAIN(test_main)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - test_main
    - ','
    - test_setup
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: MULTIPROCESS_TEST_MAIN_WITH_SETUP
    functionSourceFile: /src/brpc/test/multiprocess_func_list.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MULTIPROCESS_TEST_MAIN_WITH_SETUP(test_main, test_setup)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - test_main
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: MULTIPROCESS_TEST_MAIN
    functionSourceFile: /src/brpc/test/multiprocess_func_list.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MULTIPROCESS_TEST_MAIN(test_main)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - test_main
    - ','
    - test_setup
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: MULTIPROCESS_TEST_MAIN_WITH_SETUP
    functionSourceFile: /src/brpc/test/multiprocess_func_list.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MULTIPROCESS_TEST_MAIN_WITH_SETUP(test_main, test_setup)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/test/string_piece_unittest.cc:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - input
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: butil::CommonStringPieceTest::as_string
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - T
    linkageType: ''
    returnType: T
    signature: T as_string(const char* input)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: '& as_string(const T& input)'
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & as_string(const T& input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASCIIToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - input
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::CommonStringPieceTest<string16>::as_string
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASCIIToUTF16
    linkageType: ''
    returnType: string16
    signature: string16 as_string(const char* input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASCIIToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: butil::CommonStringPieceTest<string16>::as_string
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASCIIToUTF16
    linkageType: ''
    returnType: string16
    signature: string16 as_string(const std::string& input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:61,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:62,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:63,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:64,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:65,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:66,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:67,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:68,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:70,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:71,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:72,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:73,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:74,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:75,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:76,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:77,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:79,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:80,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:81,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:82,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:83,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:84,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:85,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:86,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:87,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:99,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:100,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:101,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:102,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:103,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:104,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:105,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:106,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:107,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:109,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:110,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:111,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:112,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:113,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:114,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:115,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:116,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:117,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:123,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 133
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - CMP_Y
    - CMP_N
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckComparisonOperators)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - op
    - ','
    - x
    - ','
    - y
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 50
    functionName: CMP_Y
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CMP_Y(op, x, y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - op
    - ','
    - x
    - ','
    - y
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: CMP_N
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CMP_N(op, x, y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:136,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:137,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:138,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:139,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:146,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:147,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:151,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:152,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:153,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:154,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:155,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:157,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:157,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:158,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:158,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:159,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:161,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:161,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:162,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:162,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:163,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:163,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:165,1
    - Dst: BasicStringPiece::rbegin
      Src: /src/brpc/test/string_piece_unittest.cc:165,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:166,1
    - Dst: BasicStringPiece::rbegin
      Src: /src/brpc/test/string_piece_unittest.cc:166,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:168,1
    - Dst: BasicStringPiece::rend
      Src: /src/brpc/test/string_piece_unittest.cc:168,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:168,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:169,1
    - Dst: BasicStringPiece::rbegin
      Src: /src/brpc/test/string_piece_unittest.cc:169,1
    - Dst: BasicStringPiece::rend
      Src: /src/brpc/test/string_piece_unittest.cc:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:171,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:172,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:173,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:174,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:175,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:176,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:178,1
    - Dst: BasicStringPiece::empty
      Src: /src/brpc/test/string_piece_unittest.cc:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:179,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:179,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:179,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:180,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:180,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:182,1
    - Dst: BasicStringPiece::empty
      Src: /src/brpc/test/string_piece_unittest.cc:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:183,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:183,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:183,1
    - Dst: BasicStringPiece::clear
      Src: /src/brpc/test/string_piece_unittest.cc:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:186,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:187,1
    - Dst: BasicStringPiece::empty
      Src: /src/brpc/test/string_piece_unittest.cc:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:188,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:188,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:189,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:189,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:189,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/string_piece_unittest.cc:191,1
    - Dst: BasicStringPiece::max_size
      Src: /src/brpc/test/string_piece_unittest.cc:191,1
    - Dst: BasicStringPiece::capacity
      Src: /src/brpc/test/string_piece_unittest.cc:191,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/string_piece_unittest.cc:192,1
    - Dst: BasicStringPiece::capacity
      Src: /src/brpc/test/string_piece_unittest.cc:192,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 135
    functionDepth: 2
    functionLinenumber: 135
    functionLinenumberEnd: 193
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - BasicStringPiece::size
    - BasicStringPiece::rend
    - BasicStringPiece::clear
    - ASSERT_GE
    - BasicStringPiece::begin
    - static_cast<typename TypeParam::value_type>
    - BasicStringPiece::capacity
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece::end
    - BasicStringPiece::empty
    - BasicStringPiece::rbegin
    - BasicStringPiece::data
    - BasicStringPiece::max_size
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckSTL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:198,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:199,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:200,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:201,1
    - Dst: BasicStringPiece::clear
      Src: /src/brpc/test/string_piece_unittest.cc:208,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:210,1
    - Dst: TypeParam::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:211,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:216,1
    - Dst: BasicStringPiece::copy
      Src: /src/brpc/test/string_piece_unittest.cc:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:221,1
    - Dst: BasicStringPiece::copy
      Src: /src/brpc/test/string_piece_unittest.cc:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:226,1
    - Dst: BasicStringPiece::copy
      Src: /src/brpc/test/string_piece_unittest.cc:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:234,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:235,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:236,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:237,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:238,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:239,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:240,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:241,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:242,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:243,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:244,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:244,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:247,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:249,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:250,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:251,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:252,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:252,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:254,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:255,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:256,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:257,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:258,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:264,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:265,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:266,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:267,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:268,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:269,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:270,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:271,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:272,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:273,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:274,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:275,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:277,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:278,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:279,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:280,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:281,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:282,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:283,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:284,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:286,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:287,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:288,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:289,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:290,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:291,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:292,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:293,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:296,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:297,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:298,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:299,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:300,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:301,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:302,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:313,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:314,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:315,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:316,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:317,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:318,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:319,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:320,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:321,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:323,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:324,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:325,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:326,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:326,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:328,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:330,1
    - Dst: Piece
      Src: /src/brpc/test/string_piece_unittest.cc:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:331,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:332,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:333,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:334,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:335,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:336,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:337,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:338,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:339,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:340,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:341,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:342,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:343,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:344,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:346,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:347,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:348,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:349,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:350,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:351,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:352,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:353,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:355,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:356,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:357,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:358,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:359,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:360,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:361,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:362,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:364,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:365,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:366,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:367,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:368,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:369,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:369,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:373,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:374,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:375,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:376,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:377,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:378,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:379,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:381,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:382,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:383,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:384,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:384,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:389,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:390,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:390,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:391,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:392,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:392,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:393,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:394,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:395,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:396,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:397,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:398,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:399,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:400,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:401,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:402,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:403,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:404,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:406,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:407,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:408,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:409,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:410,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:411,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:412,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:413,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:414,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:415,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:416,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:417,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:418,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:419,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:420,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:421,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:423,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:423,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:424,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:425,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:426,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:427,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:428,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:429,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:430,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:432,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:432,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:433,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:433,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:434,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:435,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:436,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:437,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:438,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:439,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:440,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:441,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:442,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:443,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:444,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:445,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:446,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:447,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:449,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:449,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:450,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:451,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:452,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:453,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:454,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:456,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:457,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:458,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:459,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:461,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:462,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:463,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:464,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:465,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:466,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:466,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:468,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:469,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:470,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:471,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 226
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 195
    functionDepth: 2
    functionLinenumber: 195
    functionLinenumberEnd: 472
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Piece::size
    - BasicStringPiece::copy
    - static_cast<size_t>
    - BasicStringPiece::substr
    - TypeParam::push_back
    - std::string
    - Piece::find_last_not_of
    - butil::CommonStringPieceTest::as_string
    - Piece::find_first_of
    - BasicStringPiece::find_last_not_of
    - BasicStringPiece::as_string
    - BasicStringPiece::rfind
    - Piece
    - Piece::find
    - BasicStringPiece::find
    - BasicStringPiece::find_last_of
    - BasicStringPiece::find_first_of
    - BasicStringPiece::size
    - BasicStringPiece::clear
    - Piece::rfind
    - BasicStringPiece::find_first_not_of
    - Piece::find_last_of
    - TypeParam
    - Piece::find_first_not_of
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckFind)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:475,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:477,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:478,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:479,1
    - Dst: BasicStringPiece::remove_prefix
      Src: /src/brpc/test/string_piece_unittest.cc:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:487,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:487,1
    - Dst: BasicStringPiece::remove_prefix
      Src: /src/brpc/test/string_piece_unittest.cc:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:490,1
    - Dst: BasicStringPiece::remove_prefix
      Src: /src/brpc/test/string_piece_unittest.cc:491,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:492,1
    - Dst: BasicStringPiece::remove_suffix
      Src: /src/brpc/test/string_piece_unittest.cc:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:497,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:497,1
    - Dst: BasicStringPiece::remove_suffix
      Src: /src/brpc/test/string_piece_unittest.cc:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:500,1
    - Dst: BasicStringPiece::remove_suffix
      Src: /src/brpc/test/string_piece_unittest.cc:501,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:502,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:505,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:506,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:507,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:508,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:509,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:510,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:511,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:511,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/string_piece_unittest.cc:512,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:515,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:516,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:518,1
    - Dst: TypeParam::empty
      Src: /src/brpc/test/string_piece_unittest.cc:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 474
    functionDepth: 2
    functionLinenumber: 474
    functionLinenumberEnd: 519
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - BasicStringPiece::size
    - BasicStringPiece::as_string
    - TypeParam::empty
    - BasicStringPiece::set
    - static_cast<typename TypeParam::value_type>
    - TypeParam::c_str
    - BasicStringPiece::remove_prefix
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece::remove_suffix
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckCustom)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::CopyToString
      Src: /src/brpc/test/string_piece_unittest.cc:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:532,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:533,1
    - Dst: StringPiece::CopyToString
      Src: /src/brpc/test/string_piece_unittest.cc:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:535,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:536,1
    - Dst: StringPiece::CopyToString
      Src: /src/brpc/test/string_piece_unittest.cc:537,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:538,1
    - Dst: std::string::empty
      Src: /src/brpc/test/string_piece_unittest.cc:538,1
    - Dst: std::string::erase
      Src: /src/brpc/test/string_piece_unittest.cc:541,1
    - Dst: StringPiece::AppendToString
      Src: /src/brpc/test/string_piece_unittest.cc:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:543,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:544,1
    - Dst: StringPiece::AppendToString
      Src: /src/brpc/test/string_piece_unittest.cc:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:546,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:547,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:550,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:551,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:551,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:552,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:553,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:553,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:554,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:554,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:555,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:555,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:556,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:556,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:557,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:557,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:558,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:558,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:559,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:559,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:562,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:562,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:563,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:563,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:564,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:564,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:565,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:566,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:566,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:567,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:568,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:568,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:569,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:569,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:570,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:570,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:571,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:571,1
    - Dst: StringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:575,1
    - Dst: StringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:577,1
    - Dst: StringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:578,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/string_piece_unittest.cc:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 580
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - StringPiece::ends_with
    - std::string::empty
    - StringPiece::AppendToString
    - std::string::erase
    - ASSERT_NE
    - StringPiece::set
    - StringPiece::starts_with
    - std::string::size
    - StringPiece::CopyToString
    linkageType: ''
    returnType: void
    signature: void TEST(StringPieceTest, CheckCustom)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:585,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:586,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:586,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:589,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:590,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:590,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:593,1
    - Dst: TypeParam::length
      Src: /src/brpc/test/string_piece_unittest.cc:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:594,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 595
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - BasicStringPiece::size
    - BasicStringPiece::as_string
    - BasicStringPiece::set
    - TypeParam::length
    - TypeParam
    - BasicStringPiece::data
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckNULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:598,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:599,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:600,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:604,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:604,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:605,1
    - Dst: BasicStringPiece::compare
      Src: /src/brpc/test/string_piece_unittest.cc:605,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:605,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:607,1
    - Dst: abc < BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:607,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:608,1
    - Dst: BasicStringPiece::compare
      Src: /src/brpc/test/string_piece_unittest.cc:608,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:608,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:610,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:611,1
    - Dst: BasicStringPiece::compare
      Src: /src/brpc/test/string_piece_unittest.cc:611,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 597
    functionDepth: 2
    functionLinenumber: 597
    functionLinenumberEnd: 612
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - BasicStringPiece<TypeParam>
    - BasicStringPiece::compare
    - butil::CommonStringPieceTest::as_string
    - abc < BasicStringPiece<TypeParam>
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckComparisons2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:619,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:619,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:620,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:620,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:621,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:624,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:625,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:626,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 627
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - StringPiece::ends_with
    - StringPiece::starts_with
    linkageType: ''
    returnType: void
    signature: void TEST(StringPieceTest, CheckComparisons2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:630,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:630,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:631,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:632,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:632,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:633,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 629
    functionDepth: 2
    functionLinenumber: 629
    functionLinenumberEnd: 634
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::CommonStringPieceTest::as_string
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, StringCompareNotAmbiguous)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:637,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:639,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:640,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:640,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 636
    functionDepth: 2
    functionLinenumber: 636
    functionLinenumberEnd: 641
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - TypeParam::c_str
    - ASSERT_TRUE
    - BasicStringPiece<TypeParam>
    - butil::CommonStringPieceTest::as_string
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, HeterogenousStringPieceEquals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:646,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:647,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:648,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:652,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:653,1
    - Dst: static_cast<char16>
      Src: /src/brpc/test/string_piece_unittest.cc:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:655,1
    - Dst: StringPiece16::size
      Src: /src/brpc/test/string_piece_unittest.cc:655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 656
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - static_cast<char16>
    - butil::ASCIIToUTF16
    - string16::push_back
    - StringPiece16::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringPiece16Test, CheckSTL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:663,1
    - Dst: butil::UTF16ToUTF8
      Src: /src/brpc/test/string_piece_unittest.cc:664,1
    - Dst: StringPiece16
      Src: /src/brpc/test/string_piece_unittest.cc:665,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:665,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 660
    functionDepth: 1
    functionLinenumber: 660
    functionLinenumberEnd: 667
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::UTF16ToUTF8
    - ASSERT_EQ
    - butil::UTF8ToUTF16
    - StringPiece16
    linkageType: ''
    returnType: void
    signature: void TEST(StringPiece16Test, CheckConversion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:670,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:673,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:673,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:674,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:674,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:674,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:675,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:675,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:676,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:676,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:677,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:677,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:677,1
    - Dst: static_cast<typename BasicStringPiece<TypeParam>::size_type>
      Src: /src/brpc/test/string_piece_unittest.cc:678,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:679,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:679,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:680,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:680,1
    - Dst: static_cast<typename BasicStringPiece<TypeParam>::size_type>
      Src: /src/brpc/test/string_piece_unittest.cc:681,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:682,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:682,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: TypeParam::end
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:685,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:685,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    - Dst: TypeParam::end
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 669
    functionDepth: 2
    functionLinenumber: 669
    functionLinenumberEnd: 687
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - BasicStringPiece<TypeParam>
    - TypeParam::end
    - TypeParam::begin
    - TypeParam::c_str
    - butil::CommonStringPieceTest::as_string
    - static_cast<typename BasicStringPiece<TypeParam>::size_type>
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckConstructors)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/test/string_piece_unittest.cc:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - input
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: butil::CommonStringPieceTest::as_string
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 7
    functionsReached:
    - T
    linkageType: ''
    returnType: T
    signature: T as_string(const char* input)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: '& as_string(const T& input)'
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & as_string(const T& input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASCIIToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - input
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::CommonStringPieceTest<string16>::as_string
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASCIIToUTF16
    linkageType: ''
    returnType: string16
    signature: string16 as_string(const char* input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASCIIToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: butil::CommonStringPieceTest<string16>::as_string
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASCIIToUTF16
    linkageType: ''
    returnType: string16
    signature: string16 as_string(const std::string& input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:61,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:62,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:63,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:64,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:65,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:66,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:67,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:68,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:70,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:71,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:72,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:73,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:74,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:75,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:76,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:77,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:79,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:80,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:81,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:82,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:83,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:84,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:85,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:86,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:87,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:99,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:100,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:101,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:102,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:103,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:104,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:105,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:106,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:107,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:109,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:110,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:111,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:112,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:113,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:114,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:115,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:116,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:117,1
    - Dst: CMP_Y
      Src: /src/brpc/test/string_piece_unittest.cc:123,1
    - Dst: CMP_N
      Src: /src/brpc/test/string_piece_unittest.cc:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 133
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - CMP_Y
    - CMP_N
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckComparisonOperators)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - op
    - ','
    - x
    - ','
    - y
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 50
    functionName: CMP_Y
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CMP_Y(op, x, y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - op
    - ','
    - x
    - ','
    - y
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: CMP_N
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CMP_N(op, x, y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:136,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:137,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:138,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:139,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:146,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:147,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:151,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:152,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:153,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:154,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:155,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:157,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:157,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:158,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:158,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:159,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:161,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:161,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:162,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:162,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:163,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:163,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:165,1
    - Dst: BasicStringPiece::rbegin
      Src: /src/brpc/test/string_piece_unittest.cc:165,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:166,1
    - Dst: BasicStringPiece::rbegin
      Src: /src/brpc/test/string_piece_unittest.cc:166,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:168,1
    - Dst: BasicStringPiece::rend
      Src: /src/brpc/test/string_piece_unittest.cc:168,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:168,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:169,1
    - Dst: BasicStringPiece::rbegin
      Src: /src/brpc/test/string_piece_unittest.cc:169,1
    - Dst: BasicStringPiece::rend
      Src: /src/brpc/test/string_piece_unittest.cc:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:171,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:172,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:173,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:174,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:175,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:176,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:178,1
    - Dst: BasicStringPiece::empty
      Src: /src/brpc/test/string_piece_unittest.cc:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:179,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:179,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:179,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:180,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:180,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:182,1
    - Dst: BasicStringPiece::empty
      Src: /src/brpc/test/string_piece_unittest.cc:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:183,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:183,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:183,1
    - Dst: BasicStringPiece::clear
      Src: /src/brpc/test/string_piece_unittest.cc:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:186,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:187,1
    - Dst: BasicStringPiece::empty
      Src: /src/brpc/test/string_piece_unittest.cc:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:188,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:188,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:189,1
    - Dst: BasicStringPiece::begin
      Src: /src/brpc/test/string_piece_unittest.cc:189,1
    - Dst: BasicStringPiece::end
      Src: /src/brpc/test/string_piece_unittest.cc:189,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/string_piece_unittest.cc:191,1
    - Dst: BasicStringPiece::max_size
      Src: /src/brpc/test/string_piece_unittest.cc:191,1
    - Dst: BasicStringPiece::capacity
      Src: /src/brpc/test/string_piece_unittest.cc:191,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/string_piece_unittest.cc:192,1
    - Dst: BasicStringPiece::capacity
      Src: /src/brpc/test/string_piece_unittest.cc:192,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 135
    functionDepth: 2
    functionLinenumber: 135
    functionLinenumberEnd: 193
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - BasicStringPiece::size
    - BasicStringPiece::rend
    - BasicStringPiece::clear
    - ASSERT_GE
    - BasicStringPiece::begin
    - static_cast<typename TypeParam::value_type>
    - BasicStringPiece::capacity
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece::end
    - BasicStringPiece::empty
    - BasicStringPiece::rbegin
    - BasicStringPiece::data
    - BasicStringPiece::max_size
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckSTL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:198,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:199,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:200,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:201,1
    - Dst: BasicStringPiece::clear
      Src: /src/brpc/test/string_piece_unittest.cc:208,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:210,1
    - Dst: TypeParam::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:211,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:216,1
    - Dst: BasicStringPiece::copy
      Src: /src/brpc/test/string_piece_unittest.cc:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:221,1
    - Dst: BasicStringPiece::copy
      Src: /src/brpc/test/string_piece_unittest.cc:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:226,1
    - Dst: BasicStringPiece::copy
      Src: /src/brpc/test/string_piece_unittest.cc:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:234,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:235,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:236,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:237,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:238,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:239,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:240,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:241,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:242,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:243,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:244,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:244,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:247,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:249,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:250,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:251,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:252,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:252,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:254,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:255,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:256,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:257,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:258,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:264,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:265,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:266,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:267,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:268,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:269,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:270,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:271,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:272,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:273,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:274,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:275,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:277,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:278,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:279,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:280,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:281,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:282,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:283,1
    - Dst: BasicStringPiece::find
      Src: /src/brpc/test/string_piece_unittest.cc:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:284,1
    - Dst: Piece::find
      Src: /src/brpc/test/string_piece_unittest.cc:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:286,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:287,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:288,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:289,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:290,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:291,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:292,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:293,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:296,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:297,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:298,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:299,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:300,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:301,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:302,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/string_piece_unittest.cc:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:313,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:314,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:315,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:316,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:317,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:318,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:319,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:320,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:321,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:323,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:324,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:325,1
    - Dst: BasicStringPiece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:326,1
    - Dst: Piece::rfind
      Src: /src/brpc/test/string_piece_unittest.cc:326,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:328,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:330,1
    - Dst: Piece
      Src: /src/brpc/test/string_piece_unittest.cc:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:331,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:332,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:333,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:334,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:335,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:336,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:337,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:338,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:339,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:340,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:341,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:342,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:343,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:344,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:346,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:347,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:348,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:349,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:350,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:351,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:352,1
    - Dst: BasicStringPiece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:353,1
    - Dst: Piece::find_first_of
      Src: /src/brpc/test/string_piece_unittest.cc:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:355,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:356,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:357,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:358,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:359,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:360,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:361,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:362,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:364,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:365,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:366,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:367,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:368,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:369,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:369,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:373,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:374,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:375,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:376,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:377,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:378,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:379,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:381,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:382,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:383,1
    - Dst: BasicStringPiece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:384,1
    - Dst: Piece::find_first_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:384,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:389,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:390,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:390,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:391,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:392,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:392,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:393,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:394,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:395,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:396,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:397,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:398,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:399,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:400,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:401,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:402,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:403,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:404,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:406,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:407,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:408,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:409,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:410,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:411,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:412,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:413,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:414,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:415,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:416,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:417,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:418,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:419,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:420,1
    - Dst: BasicStringPiece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:421,1
    - Dst: Piece::find_last_of
      Src: /src/brpc/test/string_piece_unittest.cc:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:423,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:423,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:424,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:425,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:426,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:427,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:428,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:429,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:430,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:432,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:432,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:433,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:433,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:434,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:435,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:436,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:437,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:438,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:439,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:440,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:441,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:442,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:443,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:444,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:445,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:446,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:447,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:449,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:449,1
    - Dst: Piece::size
      Src: /src/brpc/test/string_piece_unittest.cc:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:450,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:451,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:452,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:453,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:454,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:456,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:457,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:458,1
    - Dst: BasicStringPiece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:459,1
    - Dst: Piece::find_last_not_of
      Src: /src/brpc/test/string_piece_unittest.cc:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:461,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:462,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:463,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:464,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:465,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:466,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:466,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:468,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:469,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:470,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:471,1
    - Dst: BasicStringPiece::substr
      Src: /src/brpc/test/string_piece_unittest.cc:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 226
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 195
    functionDepth: 2
    functionLinenumber: 195
    functionLinenumberEnd: 472
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Piece::size
    - BasicStringPiece::copy
    - static_cast<size_t>
    - BasicStringPiece::substr
    - TypeParam::push_back
    - std::string
    - Piece::find_last_not_of
    - butil::CommonStringPieceTest::as_string
    - Piece::find_first_of
    - BasicStringPiece::find_last_not_of
    - BasicStringPiece::as_string
    - BasicStringPiece::rfind
    - Piece
    - Piece::find
    - BasicStringPiece::find
    - BasicStringPiece::find_last_of
    - BasicStringPiece::find_first_of
    - BasicStringPiece::size
    - BasicStringPiece::clear
    - Piece::rfind
    - BasicStringPiece::find_first_not_of
    - Piece::find_last_of
    - TypeParam
    - Piece::find_first_not_of
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckFind)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:475,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:477,1
    - Dst: static_cast<typename TypeParam::value_type>
      Src: /src/brpc/test/string_piece_unittest.cc:478,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:479,1
    - Dst: BasicStringPiece::remove_prefix
      Src: /src/brpc/test/string_piece_unittest.cc:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:487,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:487,1
    - Dst: BasicStringPiece::remove_prefix
      Src: /src/brpc/test/string_piece_unittest.cc:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:490,1
    - Dst: BasicStringPiece::remove_prefix
      Src: /src/brpc/test/string_piece_unittest.cc:491,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:492,1
    - Dst: BasicStringPiece::remove_suffix
      Src: /src/brpc/test/string_piece_unittest.cc:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:497,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:497,1
    - Dst: BasicStringPiece::remove_suffix
      Src: /src/brpc/test/string_piece_unittest.cc:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:500,1
    - Dst: BasicStringPiece::remove_suffix
      Src: /src/brpc/test/string_piece_unittest.cc:501,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:502,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:505,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:506,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:507,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:508,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:509,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:510,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:511,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:511,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/string_piece_unittest.cc:512,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:515,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:516,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:518,1
    - Dst: TypeParam::empty
      Src: /src/brpc/test/string_piece_unittest.cc:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 474
    functionDepth: 2
    functionLinenumber: 474
    functionLinenumberEnd: 519
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - BasicStringPiece::size
    - BasicStringPiece::as_string
    - TypeParam::empty
    - BasicStringPiece::set
    - static_cast<typename TypeParam::value_type>
    - TypeParam::c_str
    - BasicStringPiece::remove_prefix
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece::remove_suffix
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckCustom)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::CopyToString
      Src: /src/brpc/test/string_piece_unittest.cc:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:532,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:533,1
    - Dst: StringPiece::CopyToString
      Src: /src/brpc/test/string_piece_unittest.cc:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:535,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:536,1
    - Dst: StringPiece::CopyToString
      Src: /src/brpc/test/string_piece_unittest.cc:537,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:538,1
    - Dst: std::string::empty
      Src: /src/brpc/test/string_piece_unittest.cc:538,1
    - Dst: std::string::erase
      Src: /src/brpc/test/string_piece_unittest.cc:541,1
    - Dst: StringPiece::AppendToString
      Src: /src/brpc/test/string_piece_unittest.cc:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:543,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:544,1
    - Dst: StringPiece::AppendToString
      Src: /src/brpc/test/string_piece_unittest.cc:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:546,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_piece_unittest.cc:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:547,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:550,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:551,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:551,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:552,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:553,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:553,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:554,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:554,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:555,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:555,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:556,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:556,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:557,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:557,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:558,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:558,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:559,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:559,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:562,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:562,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:563,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:563,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:564,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:564,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:565,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:566,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:566,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:567,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:568,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:568,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:569,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:569,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:570,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:570,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:571,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:571,1
    - Dst: StringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:575,1
    - Dst: StringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:577,1
    - Dst: StringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:578,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/string_piece_unittest.cc:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 580
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - StringPiece::ends_with
    - std::string::empty
    - StringPiece::AppendToString
    - std::string::erase
    - ASSERT_NE
    - StringPiece::set
    - StringPiece::starts_with
    - std::string::size
    - StringPiece::CopyToString
    linkageType: ''
    returnType: void
    signature: void TEST(StringPieceTest, CheckCustom)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:585,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:586,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:586,1
    - Dst: BasicStringPiece::set
      Src: /src/brpc/test/string_piece_unittest.cc:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:589,1
    - Dst: BasicStringPiece::data
      Src: /src/brpc/test/string_piece_unittest.cc:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:590,1
    - Dst: BasicStringPiece::size
      Src: /src/brpc/test/string_piece_unittest.cc:590,1
    - Dst: BasicStringPiece::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:593,1
    - Dst: TypeParam::length
      Src: /src/brpc/test/string_piece_unittest.cc:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:594,1
    - Dst: TypeParam
      Src: /src/brpc/test/string_piece_unittest.cc:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 595
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - BasicStringPiece::size
    - BasicStringPiece::as_string
    - BasicStringPiece::set
    - TypeParam::length
    - TypeParam
    - BasicStringPiece::data
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckNULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:598,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:599,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:600,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:604,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:604,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:605,1
    - Dst: BasicStringPiece::compare
      Src: /src/brpc/test/string_piece_unittest.cc:605,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:605,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:607,1
    - Dst: abc < BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:607,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:608,1
    - Dst: BasicStringPiece::compare
      Src: /src/brpc/test/string_piece_unittest.cc:608,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:608,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:610,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:611,1
    - Dst: BasicStringPiece::compare
      Src: /src/brpc/test/string_piece_unittest.cc:611,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 597
    functionDepth: 2
    functionLinenumber: 597
    functionLinenumberEnd: 612
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - BasicStringPiece<TypeParam>
    - BasicStringPiece::compare
    - butil::CommonStringPieceTest::as_string
    - abc < BasicStringPiece<TypeParam>
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckComparisons2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:619,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:619,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:620,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:620,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:621,1
    - Dst: StringPiece::starts_with
      Src: /src/brpc/test/string_piece_unittest.cc:621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:624,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:625,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:626,1
    - Dst: StringPiece::ends_with
      Src: /src/brpc/test/string_piece_unittest.cc:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 627
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - StringPiece::ends_with
    - StringPiece::starts_with
    linkageType: ''
    returnType: void
    signature: void TEST(StringPieceTest, CheckComparisons2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:630,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:630,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:631,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:632,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:632,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:633,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 629
    functionDepth: 2
    functionLinenumber: 629
    functionLinenumberEnd: 634
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::CommonStringPieceTest::as_string
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, StringCompareNotAmbiguous)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:637,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:639,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:640,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:640,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 636
    functionDepth: 2
    functionLinenumber: 636
    functionLinenumberEnd: 641
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - TypeParam::c_str
    - ASSERT_TRUE
    - BasicStringPiece<TypeParam>
    - butil::CommonStringPieceTest::as_string
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, HeterogenousStringPieceEquals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:646,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:647,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:648,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string_piece_unittest.cc:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:652,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:653,1
    - Dst: static_cast<char16>
      Src: /src/brpc/test/string_piece_unittest.cc:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:655,1
    - Dst: StringPiece16::size
      Src: /src/brpc/test/string_piece_unittest.cc:655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 656
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - static_cast<char16>
    - butil::ASCIIToUTF16
    - string16::push_back
    - StringPiece16::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringPiece16Test, CheckSTL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_piece_unittest.cc:663,1
    - Dst: butil::UTF16ToUTF8
      Src: /src/brpc/test/string_piece_unittest.cc:664,1
    - Dst: StringPiece16
      Src: /src/brpc/test/string_piece_unittest.cc:665,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_piece_unittest.cc:665,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 660
    functionDepth: 1
    functionLinenumber: 660
    functionLinenumberEnd: 667
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::UTF16ToUTF8
    - ASSERT_EQ
    - butil::UTF8ToUTF16
    - StringPiece16
    linkageType: ''
    returnType: void
    signature: void TEST(StringPiece16Test, CheckConversion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:670,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:673,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:673,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:674,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:674,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:674,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:675,1
    - Dst: butil::CommonStringPieceTest::as_string
      Src: /src/brpc/test/string_piece_unittest.cc:675,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:676,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:676,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:677,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:677,1
    - Dst: TypeParam::c_str
      Src: /src/brpc/test/string_piece_unittest.cc:677,1
    - Dst: static_cast<typename BasicStringPiece<TypeParam>::size_type>
      Src: /src/brpc/test/string_piece_unittest.cc:678,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:679,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:679,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:680,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:680,1
    - Dst: static_cast<typename BasicStringPiece<TypeParam>::size_type>
      Src: /src/brpc/test/string_piece_unittest.cc:681,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:682,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:682,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: TypeParam::end
      Src: /src/brpc/test/string_piece_unittest.cc:683,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:685,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:685,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    - Dst: BasicStringPiece<TypeParam>
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    - Dst: TypeParam::begin
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    - Dst: TypeParam::end
      Src: /src/brpc/test/string_piece_unittest.cc:686,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 669
    functionDepth: 2
    functionLinenumber: 669
    functionLinenumberEnd: 687
    functionName: butil::TYPED_TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - BasicStringPiece<TypeParam>
    - TypeParam::end
    - TypeParam::begin
    - TypeParam::c_str
    - butil::CommonStringPieceTest::as_string
    - static_cast<typename BasicStringPiece<TypeParam>::size_type>
    linkageType: ''
    returnType: void
    signature: void TYPED_TEST(CommonStringPieceTest, CheckConstructors)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::DirReaderUnix::IsFallback
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:25,1
    - Dst: mkdtemp
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:29,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:30,1
    - Dst: open
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:32,1
    - Dst: DCHECK_GE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:33,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:35,1
    - Dst: chdir
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:35,1
    - Dst: butil::snprintf
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:39,1
    - Dst: open
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:40,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:41,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:42,1
    - Dst: close
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:42,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:48,1
    - Dst: DirReaderPosix::IsValid
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:48,1
    - Dst: DirReaderPosix::IsValid
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:50,1
    - Dst: DirReaderPosix::Next
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:55,1
    - Dst: strcmp
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:56,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:56,1
    - Dst: strcmp
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:60,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:60,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:65,1
    - Dst: HuluTest::VerifyMessage
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:65,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:65,1
    - Dst: strtoul
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:68,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:68,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:70,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:72,1
    - Dst: std::set::count
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:72,1
    - Dst: std::set::insert
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:73,1
    - Dst: butil::snprintf
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:78,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:79,1
    - Dst: unlink
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:79,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:82,1
    - Dst: rmdir
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:82,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:84,1
    - Dst: fchdir
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:84,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:85,1
    - Dst: close
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:89,1
    - Dst: std::set::size
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:89,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 22
    functionDepth: 2
    functionLinenumber: 22
    functionLinenumberEnd: 90
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/dir_reader_posix_unittest.cc
    functionUses: 0
    functionsReached:
    - std::set::size
    - open
    - std::set::count
    - HuluTest::VerifyMessage
    - SCOPED_TRACE
    - PCHECK
    - fchdir
    - chdir
    - EXPECT_FALSE
    - EXPECT_EQ
    - unlink
    - DCHECK_GE
    - EXPECT_TRUE
    - strtoul
    - DirReaderPosix::IsValid
    - EXPECT_LT
    - ASSERT_TRUE
    - std::set::insert
    - strcmp
    - butil::snprintf
    - butil::DirReaderUnix::IsFallback
    - rmdir
    - DirReaderPosix::name
    - DirReaderPosix::Next
    - close
    - mkdtemp
    linkageType: ''
    returnType: void
    signature: void TEST(DirReaderPosixUnittest, Read)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::DirReaderUnix::IsFallback
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:25,1
    - Dst: mkdtemp
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:29,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:30,1
    - Dst: open
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:32,1
    - Dst: DCHECK_GE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:33,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:35,1
    - Dst: chdir
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:35,1
    - Dst: butil::snprintf
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:39,1
    - Dst: open
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:40,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:41,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:42,1
    - Dst: close
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:42,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:48,1
    - Dst: DirReaderPosix::IsValid
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:48,1
    - Dst: DirReaderPosix::IsValid
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:50,1
    - Dst: DirReaderPosix::Next
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:55,1
    - Dst: strcmp
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:56,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:56,1
    - Dst: strcmp
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:60,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:60,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:65,1
    - Dst: HuluTest::VerifyMessage
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:65,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:65,1
    - Dst: strtoul
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:68,1
    - Dst: DirReaderPosix::name
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:68,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:70,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:72,1
    - Dst: std::set::count
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:72,1
    - Dst: std::set::insert
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:73,1
    - Dst: butil::snprintf
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:78,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:79,1
    - Dst: unlink
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:79,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:82,1
    - Dst: rmdir
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:82,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:84,1
    - Dst: fchdir
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:84,1
    - Dst: PCHECK
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:85,1
    - Dst: close
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:89,1
    - Dst: std::set::size
      Src: /src/brpc/test/dir_reader_posix_unittest.cc:89,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 22
    functionDepth: 2
    functionLinenumber: 22
    functionLinenumberEnd: 90
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/dir_reader_posix_unittest.cc
    functionUses: 0
    functionsReached:
    - std::set::size
    - open
    - std::set::count
    - HuluTest::VerifyMessage
    - SCOPED_TRACE
    - PCHECK
    - fchdir
    - chdir
    - EXPECT_FALSE
    - EXPECT_EQ
    - unlink
    - DCHECK_GE
    - EXPECT_TRUE
    - strtoul
    - DirReaderPosix::IsValid
    - EXPECT_LT
    - ASSERT_TRUE
    - std::set::insert
    - strcmp
    - butil::snprintf
    - butil::DirReaderUnix::IsFallback
    - rmdir
    - DirReaderPosix::name
    - DirReaderPosix::Next
    - close
    - mkdtemp
    linkageType: ''
    returnType: void
    signature: void TEST(DirReaderPosixUnittest, Read)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: butil::MultipleThreadMain::MultipleThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleThreadMain(int16_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~MultipleThreadMain()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::MultipleThreadMain::CleanUp
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void CleanUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:65,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:66,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:67,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:69,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:74,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 80
    functionName: butil::MultipleThreadMain::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_EQ
    - static_cast<int*>
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: butil::MultipleLockThread::MultipleLockThread
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleLockThread(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: ~MultipleLockThread()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleLockThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: GetCurrentProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::LockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:125,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:129,1
    - Dst: SharedMemory::UnlockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:130,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 134
    functionName: butil::MultipleLockThread::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::Map
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::ShareToProcess
    - static_cast<int*>
    - SharedMemory::LockDeprecated
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: butil::MultipleThreadMain::MultipleThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleThreadMain(int16_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~MultipleThreadMain()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::MultipleThreadMain::CleanUp
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void CleanUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:65,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:66,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:67,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:69,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:74,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 80
    functionName: butil::MultipleThreadMain::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_EQ
    - static_cast<int*>
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: butil::MultipleLockThread::MultipleLockThread
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleLockThread(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: ~MultipleLockThread()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleLockThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: GetCurrentProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::LockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:125,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:129,1
    - Dst: SharedMemory::UnlockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:130,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 134
    functionName: butil::MultipleLockThread::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::Map
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::ShareToProcess
    - static_cast<int*>
    - SharedMemory::LockDeprecated
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:155,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:156,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:158,1
    - Dst: SharedMemory::Open
      Src: /src/brpc/test/shared_memory_unittest.cc:159,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:160,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:161,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:162,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:163,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:164,1
    - Dst: SharedMemory::Open
      Src: /src/brpc/test/shared_memory_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:167,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:168,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:169,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:170,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:170,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:170,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:173,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:173,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:173,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:174,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:174,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:174,1
    - Dst: memset
      Src: /src/brpc/test/shared_memory_unittest.cc:177,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: memcmp
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:181,1
    - Dst: static_cast<char *>
      Src: /src/brpc/test/shared_memory_unittest.cc:182,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:185,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:188,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:191,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 194
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - static_cast<char *>
    - SharedMemory::Close
    - static_cast<void*>
    - SharedMemory::CreateNamedDeprecated
    - memset
    - SharedMemory::Open
    - EXPECT_NE
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_FALSE
    - ASSERT_NE
    - EXPECT_EQ
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, OpenClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Now
      Src: /src/brpc/test/shared_memory_unittest.cc:201,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/shared_memory_unittest.cc:202,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:211,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:211,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:213,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:214,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/shared_memory_unittest.cc:217,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:217,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/shared_memory_unittest.cc:220,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:220,1
    - Dst: butil::SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:221,1
    - Dst: memset
      Src: /src/brpc/test/shared_memory_unittest.cc:223,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:223,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:228,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:235,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:235,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:238,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:239,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/shared_memory_unittest.cc:242,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:242,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/shared_memory_unittest.cc:245,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:245,1
    - Dst: butil::SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:246,1
    - Dst: static_cast<char *>
      Src: /src/brpc/test/shared_memory_unittest.cc:249,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:252,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:255,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:256,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:258,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 260
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::ostringstream::str
    - butil::SysInfo::VMAllocationGranularity
    - static_cast<char *>
    - SharedMemory::Close
    - SharedMemory::mapped_size
    - SharedMemory::requested_size
    - SharedMemory::CreateNamedDeprecated
    - memset
    - SharedMemory::memory
    - SharedMemory::Delete
    - SharedMemory::Map
    - EXPECT_LT
    - EXPECT_FALSE
    - EXPECT_EQ
    - EXPECT_GE
    - butil::Time::Now
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, OpenExclusive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MultipleThreadMain::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:266,1
    - Dst: arraysize
      Src: /src/brpc/test/shared_memory_unittest.cc:275,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/shared_memory_unittest.cc:277,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/shared_memory_unittest.cc:278,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/shared_memory_unittest.cc:280,1
    - Dst: PlatformThreadHandle::PlatformThreadHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:280,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/shared_memory_unittest.cc:281,1
    - Dst: MultipleThreadMain::MultipleThreadMain
      Src: /src/brpc/test/shared_memory_unittest.cc:281,1
    - Dst: MultipleThreadMain::MultipleThreadMain
      Src: /src/brpc/test/shared_memory_unittest.cc:286,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:287,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:287,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/shared_memory_unittest.cc:293,1
    - Dst: butil::MultipleThreadMain::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:297,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 298
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::MultipleThreadMain::CleanUp
    - arraysize
    - PlatformThreadHandle::PlatformThreadHandle
    - butil::PlatformThread::Join
    - MultipleThreadMain::MultipleThreadMain
    - butil::PlatformThread::Create
    - scoped_ptr::scoped_ptr
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MultipleThreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultipleLockThread::MultipleLockThread
      Src: /src/brpc/test/shared_memory_unittest.cc:315,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:316,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:316,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/shared_memory_unittest.cc:322,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 325
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Join
    - MultipleLockThread::MultipleLockThread
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, Lock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::SharedMemory
      Src: /src/brpc/test/shared_memory_unittest.cc:337,1
    - Dst: int::int
      Src: /src/brpc/test/shared_memory_unittest.cc:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:339,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/shared_memory_unittest.cc:339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:340,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/shared_memory_unittest.cc:340,1
    - Dst: CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:343,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:344,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:345,1
    - Dst: memory
      Src: /src/brpc/test/shared_memory_unittest.cc:345,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:346,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:361,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:363,1
    - Dst: Close
      Src: /src/brpc/test/shared_memory_unittest.cc:368,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 370
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SharedMemory::SharedMemory
    - CreateAndMapAnonymous
    - Close
    - memory
    - scoped_ptr::get
    - EXPECT_EQ
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, AnonymousPrivate)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:377,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:379,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:380,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:380,1
    - Dst: memcpy
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: StringPiece::data
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:382,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:382,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:385,1
    - Dst: SharedMemory::ShareReadOnlyToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:385,1
    - Dst: GetCurrentProcessHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:389,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:389,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:390,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:391,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:391,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:391,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:392,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:393,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:396,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:396,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:396,1
    - Dst: memcpy
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: StringPiece::data
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:399,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:400,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:400,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:400,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:401,1
    - Dst: SharedMemory::handle
      Src: /src/brpc/test/shared_memory_unittest.cc:410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:417,1
    - Dst: fcntl
      Src: /src/brpc/test/shared_memory_unittest.cc:417,1
    - Dst: mmap
      Src: /src/brpc/test/shared_memory_unittest.cc:421,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:426,1
    - Dst: strerror
      Src: /src/brpc/test/shared_memory_unittest.cc:426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:428,1
    - Dst: munmap
      Src: /src/brpc/test/shared_memory_unittest.cc:428,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:428,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:431,1
    - Dst: MapViewOfFile
      Src: /src/brpc/test/shared_memory_unittest.cc:431,1
    - Dst: ::DuplicateHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:435,1
    - Dst: GetCurrentProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:442,1
    - Dst: writable_handle
      Src: /src/brpc/test/shared_memory_unittest.cc:445,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 449
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - MapViewOfFile
    - writable_handle
    - SharedMemory::handle
    - SharedMemory::Create
    - SharedMemory::Unmap
    - fcntl
    - GetCurrentProcessHandle
    - strerror
    - GetCurrentProcess
    - EXPECT_EQ
    - memcpy
    - EXPECT_TRUE
    - StringPiece
    - SharedMemory::mapped_size
    - SharedMemory::ShareReadOnlyToProcess
    - mmap
    - ASSERT_TRUE
    - munmap
    - StringPiece::size
    - static_cast<const char*>
    - SharedMemory::memory
    - SharedMemory::Map
    - StringPiece::data
    - ::DuplicateHandle
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, ShareReadOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:455,1
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:455,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:455,1
    - Dst: memcpy
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: StringPiece::data
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:457,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:457,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:460,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:460,1
    - Dst: GetCurrentProcessHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:460,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:463,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:463,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:463,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:464,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:468,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:468,1
    - Dst: GetCurrentProcessHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:471,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:471,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:471,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:472,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:473,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:473,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:473,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 475
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - StringPiece
    - SharedMemory::Unmap
    - StringPiece::size
    - EXPECT_EQ
    - static_cast<const char*>
    - GetCurrentProcessHandle
    - SharedMemory::memory
    - SharedMemory::Map
    - StringPiece::data
    - memcpy
    - SharedMemory::ShareToProcess
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, ShareToSelf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:478,1
    - Dst: SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:478,1
    - Dst: SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:479,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:483,1
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:483,1
    - Dst: static_cast<uint32_t*>
      Src: /src/brpc/test/shared_memory_unittest.cc:484,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:484,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:485,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:485,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:491,1
    - Dst: SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:493,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:494,1
    - Dst: SharedMemory::MapAt
      Src: /src/brpc/test/shared_memory_unittest.cc:494,1
    - Dst: static_cast<uint32_t*>
      Src: /src/brpc/test/shared_memory_unittest.cc:496,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:496,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:497,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:497,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:499,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 501
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - static_cast<uint32_t*>
    - SharedMemory::Unmap
    - static_cast<void*>
    - SharedMemory::memory
    - SharedMemory::MapAt
    - ASSERT_NE
    - EXPECT_EQ
    - SysInfo::VMAllocationGranularity
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MapAt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:506,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:507,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:509,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:511,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:512,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:513,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 514
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MapTwice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:526,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:526,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:527,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:527,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    - Dst: mprotect
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 518
    functionDepth: 0
    functionLinenumber: 518
    functionLinenumberEnd: 531
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - mprotect
    - SharedMemory::Create
    - SharedMemory::requested_size
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, AnonymousExecutable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: umask
      Src: /src/brpc/test/shared_memory_unittest.cc:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - target_mask
    argTypes:
    - mode_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 543
    functionName: butil::ScopedUmaskSetter::ScopedUmaskSetter
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - umask
    linkageType: ''
    returnType: void
    signature: void ScopedUmaskSetter(mode_t target_mask)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: umask
      Src: /src/brpc/test/shared_memory_unittest.cc:544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 544
    functionName: ~ScopedUmaskSetter()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - umask
    linkageType: ''
    returnType: void
    signature: void ~ScopedUmaskSetter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:560,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:560,1
    - Dst: SharedMemory::handle
      Src: /src/brpc/test/shared_memory_unittest.cc:562,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:564,1
    - Dst: fstat
      Src: /src/brpc/test/shared_memory_unittest.cc:564,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:567,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:568,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 569
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - fstat
    - EXPECT_TRUE
    - SharedMemory::handle
    - SharedMemory::Create
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, FilePermissionsAnonymous)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IntToString
      Src: /src/brpc/test/shared_memory_unittest.cc:578,1
    - Dst: getpid
      Src: /src/brpc/test/shared_memory_unittest.cc:578,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/shared_memory_unittest.cc:579,1
    - Dst: butil::RandUint64
      Src: /src/brpc/test/shared_memory_unittest.cc:579,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:584,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:584,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:586,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:586,1
    - Dst: SharedMemory::handle
      Src: /src/brpc/test/shared_memory_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:590,1
    - Dst: fstat
      Src: /src/brpc/test/shared_memory_unittest.cc:590,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:593,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 595
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - fstat
    - EXPECT_TRUE
    - butil::IntToString
    - SharedMemory::handle
    - butil::RandUint64
    - SharedMemory::Create
    - getpid
    - butil::Uint64ToString
    - EXPECT_FALSE
    - EXPECT_EQ
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, FilePermissionsNamed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:607,1
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:607,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:608,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/shared_memory_unittest.cc:608,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:609,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 611
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - SharedMemory::Close
    - SharedMemory::memory
    - EXPECT_EQ
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MapMinimumAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 623
    functionName: butil::SharedMemoryProcessTest::CleanUp
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void CleanUp()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:632,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:633,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:636,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:637,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:640,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:640,1
    - Dst: SharedMemory::LockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:643,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:646,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:646,1
    - Dst: SharedMemory::UnlockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:649,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:652,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 625
    functionDepth: 1
    functionLinenumber: 625
    functionLinenumberEnd: 654
    functionName: butil::SharedMemoryProcessTest::TaskTestMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::Map
    - static_cast<int*>
    - SharedMemory::LockDeprecated
    linkageType: ''
    returnType: int
    signature: int TaskTestMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SharedMemoryProcessTest::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:663,1
    - Dst: SpawnChild
      Src: /src/brpc/test/shared_memory_unittest.cc:667,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:668,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:673,1
    - Dst: WaitForExitCode
      Src: /src/brpc/test/shared_memory_unittest.cc:673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:674,1
    - Dst: butil::SharedMemoryProcessTest::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:677,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 678
      start: 662
    functionDepth: 1
    functionLinenumber: 662
    functionLinenumberEnd: 678
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SpawnChild
    - butil::SharedMemoryProcessTest::CleanUp
    - WaitForExitCode
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(SharedMemoryProcessTest, Tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SharedMemoryProcessTest::TaskTestMain
      Src: /src/brpc/test/shared_memory_unittest.cc:681,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 680
    functionDepth: 2
    functionLinenumber: 680
    functionLinenumberEnd: 682
    functionName: butil::MULTIPROCESS_TEST_MAIN
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SharedMemoryProcessTest::TaskTestMain
    linkageType: ''
    returnType: void
    signature: void MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: butil::MultipleThreadMain::MultipleThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleThreadMain(int16_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~MultipleThreadMain()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::MultipleThreadMain::CleanUp
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 1
    functionsReached:
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void CleanUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:65,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:66,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:67,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:69,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:74,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 80
    functionName: butil::MultipleThreadMain::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_EQ
    - static_cast<int*>
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: butil::MultipleLockThread::MultipleLockThread
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleLockThread(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: ~MultipleLockThread()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleLockThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: GetCurrentProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::LockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:125,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:129,1
    - Dst: SharedMemory::UnlockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:130,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 134
    functionName: butil::MultipleLockThread::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::Map
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::ShareToProcess
    - static_cast<int*>
    - SharedMemory::LockDeprecated
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: butil::MultipleThreadMain::MultipleThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleThreadMain(int16_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~MultipleThreadMain()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::MultipleThreadMain::CleanUp
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 1
    functionsReached:
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void CleanUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:65,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:66,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:67,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:69,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:74,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 80
    functionName: butil::MultipleThreadMain::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_EQ
    - static_cast<int*>
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: butil::MultipleLockThread::MultipleLockThread
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleLockThread(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: ~MultipleLockThread()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MultipleLockThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:112,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: GetCurrentProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:114,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:121,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:122,1
    - Dst: SharedMemory::LockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:125,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:129,1
    - Dst: SharedMemory::UnlockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:130,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 134
    functionName: butil::MultipleLockThread::ThreadMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::Map
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::ShareToProcess
    - static_cast<int*>
    - SharedMemory::LockDeprecated
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:155,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:156,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:157,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:158,1
    - Dst: SharedMemory::Open
      Src: /src/brpc/test/shared_memory_unittest.cc:159,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:160,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:161,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:162,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:163,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:164,1
    - Dst: SharedMemory::Open
      Src: /src/brpc/test/shared_memory_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:167,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:168,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:169,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:170,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:170,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:170,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:173,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:173,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:173,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:174,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:174,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:174,1
    - Dst: memset
      Src: /src/brpc/test/shared_memory_unittest.cc:177,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: memcmp
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:178,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:181,1
    - Dst: static_cast<char *>
      Src: /src/brpc/test/shared_memory_unittest.cc:182,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:185,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:188,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:191,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 194
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - static_cast<char *>
    - SharedMemory::Close
    - static_cast<void*>
    - SharedMemory::CreateNamedDeprecated
    - memset
    - SharedMemory::Open
    - EXPECT_NE
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_FALSE
    - ASSERT_NE
    - EXPECT_EQ
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, OpenClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Now
      Src: /src/brpc/test/shared_memory_unittest.cc:201,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/shared_memory_unittest.cc:202,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:211,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:211,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:213,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:214,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/shared_memory_unittest.cc:217,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:217,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/shared_memory_unittest.cc:220,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:220,1
    - Dst: butil::SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:221,1
    - Dst: memset
      Src: /src/brpc/test/shared_memory_unittest.cc:223,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:223,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:228,1
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:235,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:235,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:238,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:239,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/shared_memory_unittest.cc:242,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:242,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/shared_memory_unittest.cc:245,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:245,1
    - Dst: butil::SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:246,1
    - Dst: static_cast<char *>
      Src: /src/brpc/test/shared_memory_unittest.cc:249,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:252,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:255,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:256,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:258,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 260
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::ostringstream::str
    - butil::SysInfo::VMAllocationGranularity
    - static_cast<char *>
    - SharedMemory::Close
    - SharedMemory::mapped_size
    - SharedMemory::requested_size
    - SharedMemory::CreateNamedDeprecated
    - memset
    - SharedMemory::memory
    - SharedMemory::Delete
    - SharedMemory::Map
    - EXPECT_LT
    - EXPECT_FALSE
    - EXPECT_EQ
    - EXPECT_GE
    - butil::Time::Now
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, OpenExclusive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MultipleThreadMain::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:266,1
    - Dst: arraysize
      Src: /src/brpc/test/shared_memory_unittest.cc:275,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/shared_memory_unittest.cc:277,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/shared_memory_unittest.cc:278,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/shared_memory_unittest.cc:280,1
    - Dst: PlatformThreadHandle::PlatformThreadHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:280,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/shared_memory_unittest.cc:281,1
    - Dst: MultipleThreadMain::MultipleThreadMain
      Src: /src/brpc/test/shared_memory_unittest.cc:281,1
    - Dst: MultipleThreadMain::MultipleThreadMain
      Src: /src/brpc/test/shared_memory_unittest.cc:286,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:287,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:287,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/shared_memory_unittest.cc:293,1
    - Dst: butil::MultipleThreadMain::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:297,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 298
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::MultipleThreadMain::CleanUp
    - arraysize
    - PlatformThreadHandle::PlatformThreadHandle
    - butil::PlatformThread::Join
    - MultipleThreadMain::MultipleThreadMain
    - butil::PlatformThread::Create
    - scoped_ptr::scoped_ptr
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MultipleThreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultipleLockThread::MultipleLockThread
      Src: /src/brpc/test/shared_memory_unittest.cc:315,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:316,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:316,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/shared_memory_unittest.cc:322,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 325
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Join
    - MultipleLockThread::MultipleLockThread
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, Lock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::SharedMemory
      Src: /src/brpc/test/shared_memory_unittest.cc:337,1
    - Dst: int::int
      Src: /src/brpc/test/shared_memory_unittest.cc:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:339,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/shared_memory_unittest.cc:339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:340,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/shared_memory_unittest.cc:340,1
    - Dst: CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:343,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:344,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:345,1
    - Dst: memory
      Src: /src/brpc/test/shared_memory_unittest.cc:345,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:346,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:361,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:363,1
    - Dst: Close
      Src: /src/brpc/test/shared_memory_unittest.cc:368,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 370
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SharedMemory::SharedMemory
    - CreateAndMapAnonymous
    - Close
    - memory
    - scoped_ptr::get
    - EXPECT_EQ
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, AnonymousPrivate)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:377,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:379,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:380,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:380,1
    - Dst: memcpy
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: StringPiece::data
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:381,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:382,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:382,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:385,1
    - Dst: SharedMemory::ShareReadOnlyToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:385,1
    - Dst: GetCurrentProcessHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:389,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:389,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:390,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:391,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:391,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:391,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:392,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:393,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:396,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:396,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:396,1
    - Dst: memcpy
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: StringPiece::data
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:398,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:399,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:400,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:400,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:400,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:401,1
    - Dst: SharedMemory::handle
      Src: /src/brpc/test/shared_memory_unittest.cc:410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:417,1
    - Dst: fcntl
      Src: /src/brpc/test/shared_memory_unittest.cc:417,1
    - Dst: mmap
      Src: /src/brpc/test/shared_memory_unittest.cc:421,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:426,1
    - Dst: strerror
      Src: /src/brpc/test/shared_memory_unittest.cc:426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:428,1
    - Dst: munmap
      Src: /src/brpc/test/shared_memory_unittest.cc:428,1
    - Dst: SharedMemory::mapped_size
      Src: /src/brpc/test/shared_memory_unittest.cc:428,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:431,1
    - Dst: MapViewOfFile
      Src: /src/brpc/test/shared_memory_unittest.cc:431,1
    - Dst: ::DuplicateHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:435,1
    - Dst: GetCurrentProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:442,1
    - Dst: writable_handle
      Src: /src/brpc/test/shared_memory_unittest.cc:445,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 449
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - MapViewOfFile
    - writable_handle
    - SharedMemory::handle
    - SharedMemory::Create
    - SharedMemory::Unmap
    - fcntl
    - GetCurrentProcessHandle
    - strerror
    - GetCurrentProcess
    - EXPECT_EQ
    - memcpy
    - EXPECT_TRUE
    - StringPiece
    - SharedMemory::mapped_size
    - SharedMemory::ShareReadOnlyToProcess
    - mmap
    - ASSERT_TRUE
    - munmap
    - StringPiece::size
    - static_cast<const char*>
    - SharedMemory::memory
    - SharedMemory::Map
    - StringPiece::data
    - ::DuplicateHandle
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, ShareReadOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:455,1
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:455,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:455,1
    - Dst: memcpy
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: StringPiece::data
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:456,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:457,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:457,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:460,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:460,1
    - Dst: GetCurrentProcessHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:460,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:463,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:463,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:463,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:464,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:466,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:468,1
    - Dst: SharedMemory::ShareToProcess
      Src: /src/brpc/test/shared_memory_unittest.cc:468,1
    - Dst: GetCurrentProcessHandle
      Src: /src/brpc/test/shared_memory_unittest.cc:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:471,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:471,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:471,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:472,1
    - Dst: StringPiece
      Src: /src/brpc/test/shared_memory_unittest.cc:473,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/shared_memory_unittest.cc:473,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:473,1
    - Dst: StringPiece::size
      Src: /src/brpc/test/shared_memory_unittest.cc:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 475
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - StringPiece
    - SharedMemory::Unmap
    - StringPiece::size
    - EXPECT_EQ
    - static_cast<const char*>
    - GetCurrentProcessHandle
    - SharedMemory::memory
    - SharedMemory::Map
    - StringPiece::data
    - memcpy
    - SharedMemory::ShareToProcess
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, ShareToSelf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:478,1
    - Dst: SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:478,1
    - Dst: SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:479,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:483,1
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:483,1
    - Dst: static_cast<uint32_t*>
      Src: /src/brpc/test/shared_memory_unittest.cc:484,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:484,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:485,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:485,1
    - Dst: SharedMemory::Unmap
      Src: /src/brpc/test/shared_memory_unittest.cc:491,1
    - Dst: SysInfo::VMAllocationGranularity
      Src: /src/brpc/test/shared_memory_unittest.cc:493,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:494,1
    - Dst: SharedMemory::MapAt
      Src: /src/brpc/test/shared_memory_unittest.cc:494,1
    - Dst: static_cast<uint32_t*>
      Src: /src/brpc/test/shared_memory_unittest.cc:496,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:496,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/shared_memory_unittest.cc:497,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/shared_memory_unittest.cc:497,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:499,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 501
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - static_cast<uint32_t*>
    - SharedMemory::Unmap
    - static_cast<void*>
    - SharedMemory::memory
    - SharedMemory::MapAt
    - ASSERT_NE
    - EXPECT_EQ
    - SysInfo::VMAllocationGranularity
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MapAt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:506,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:507,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:509,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:511,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:512,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:513,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 514
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MapTwice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:526,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:526,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:527,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:527,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    - Dst: mprotect
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    - Dst: SharedMemory::requested_size
      Src: /src/brpc/test/shared_memory_unittest.cc:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 518
    functionDepth: 0
    functionLinenumber: 518
    functionLinenumberEnd: 531
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - mprotect
    - SharedMemory::Create
    - SharedMemory::requested_size
    - SharedMemory::memory
    - SharedMemory::Map
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, AnonymousExecutable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: umask
      Src: /src/brpc/test/shared_memory_unittest.cc:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - target_mask
    argTypes:
    - mode_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 543
    functionName: butil::ScopedUmaskSetter::ScopedUmaskSetter
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - umask
    linkageType: ''
    returnType: void
    signature: void ScopedUmaskSetter(mode_t target_mask)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: umask
      Src: /src/brpc/test/shared_memory_unittest.cc:544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 544
    functionName: ~ScopedUmaskSetter()
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - umask
    linkageType: ''
    returnType: void
    signature: void ~ScopedUmaskSetter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:560,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:560,1
    - Dst: SharedMemory::handle
      Src: /src/brpc/test/shared_memory_unittest.cc:562,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:564,1
    - Dst: fstat
      Src: /src/brpc/test/shared_memory_unittest.cc:564,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:567,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:568,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 569
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - fstat
    - EXPECT_TRUE
    - SharedMemory::handle
    - SharedMemory::Create
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, FilePermissionsAnonymous)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IntToString
      Src: /src/brpc/test/shared_memory_unittest.cc:578,1
    - Dst: getpid
      Src: /src/brpc/test/shared_memory_unittest.cc:578,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/shared_memory_unittest.cc:579,1
    - Dst: butil::RandUint64
      Src: /src/brpc/test/shared_memory_unittest.cc:579,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:584,1
    - Dst: SharedMemory::Create
      Src: /src/brpc/test/shared_memory_unittest.cc:584,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:586,1
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:586,1
    - Dst: SharedMemory::handle
      Src: /src/brpc/test/shared_memory_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:590,1
    - Dst: fstat
      Src: /src/brpc/test/shared_memory_unittest.cc:590,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:593,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/shared_memory_unittest.cc:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 595
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - fstat
    - EXPECT_TRUE
    - butil::IntToString
    - SharedMemory::handle
    - butil::RandUint64
    - SharedMemory::Create
    - getpid
    - butil::Uint64ToString
    - EXPECT_FALSE
    - EXPECT_EQ
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, FilePermissionsNamed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:607,1
    - Dst: SharedMemory::CreateAndMapAnonymous
      Src: /src/brpc/test/shared_memory_unittest.cc:607,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:608,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/shared_memory_unittest.cc:608,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:609,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 611
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - SharedMemory::CreateAndMapAnonymous
    - SharedMemory::Close
    - SharedMemory::memory
    - EXPECT_EQ
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void TEST(SharedMemoryTest, MapMinimumAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::Delete
      Src: /src/brpc/test/shared_memory_unittest.cc:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 623
    functionName: butil::SharedMemoryProcessTest::CleanUp
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 1
    functionsReached:
    - SharedMemory::Delete
    linkageType: ''
    returnType: void
    signature: void CleanUp()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SharedMemory::CreateNamedDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:632,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:633,1
    - Dst: SharedMemory::Map
      Src: /src/brpc/test/shared_memory_unittest.cc:636,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:637,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/shared_memory_unittest.cc:640,1
    - Dst: SharedMemory::memory
      Src: /src/brpc/test/shared_memory_unittest.cc:640,1
    - Dst: SharedMemory::LockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:643,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/shared_memory_unittest.cc:646,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/shared_memory_unittest.cc:646,1
    - Dst: SharedMemory::UnlockDeprecated
      Src: /src/brpc/test/shared_memory_unittest.cc:649,1
    - Dst: SharedMemory::Close
      Src: /src/brpc/test/shared_memory_unittest.cc:652,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 625
    functionDepth: 1
    functionLinenumber: 625
    functionLinenumberEnd: 654
    functionName: butil::SharedMemoryProcessTest::TaskTestMain
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - SharedMemory::Close
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::Map
    - static_cast<int*>
    - SharedMemory::LockDeprecated
    linkageType: ''
    returnType: int
    signature: int TaskTestMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SharedMemoryProcessTest::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:663,1
    - Dst: SpawnChild
      Src: /src/brpc/test/shared_memory_unittest.cc:667,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:668,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/shared_memory_unittest.cc:673,1
    - Dst: WaitForExitCode
      Src: /src/brpc/test/shared_memory_unittest.cc:673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/shared_memory_unittest.cc:674,1
    - Dst: butil::SharedMemoryProcessTest::CleanUp
      Src: /src/brpc/test/shared_memory_unittest.cc:677,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 678
      start: 662
    functionDepth: 1
    functionLinenumber: 662
    functionLinenumberEnd: 678
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SpawnChild
    - butil::SharedMemoryProcessTest::CleanUp
    - WaitForExitCode
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(SharedMemoryProcessTest, Tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SharedMemoryProcessTest::TaskTestMain
      Src: /src/brpc/test/shared_memory_unittest.cc:681,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 680
    functionDepth: 2
    functionLinenumber: 680
    functionLinenumberEnd: 682
    functionName: butil::MULTIPROCESS_TEST_MAIN
    functionSourceFile: /src/brpc/test/shared_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SharedMemoryProcessTest::TaskTestMain
    linkageType: ''
    returnType: void
    signature: void MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:27,1
    - Dst: butil::LinkNode::InsertBeforeAsList
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:28,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:29,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:29,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:30,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:30,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:31,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:31,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:32,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:32,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:34,1
    - Dst: butil::LinkNode::InsertBeforeAsList
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:35,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:36,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:37,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:38,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:39,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:39,1
    - Dst: butil::LinkNode::InsertBeforeAsList
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:42,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:43,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:44,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:45,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:46,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:47,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:48,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:49,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 50
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::InsertBeforeAsList
    - ASSERT_EQ
    - butil::LinkNode::next
    - butil::LinkNode::LinkNode
    - previous
    - butil::LinkNode::previous
    - next
    linkageType: ''
    returnType: void
    signature: void TEST(SamplerTest, linked_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: DebugSampler::DebugSampler
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DebugSampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: ~DebugSampler()
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DebugSampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: DebugSampler::take_sample
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void take_sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: DebugSampler::called_count
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int called_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:71,1
    - Dst: DebugSampler::DebugSampler
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:76,1
    - Dst: schedule
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:77,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:79,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:82,1
    - Dst: called_count
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:84,1
    - Dst: destroy
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:86,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:91,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:91,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:92,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:93,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:93,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:94,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:94,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - logging::StringSink::find
    - called_count
    - ASSERT_LE
    - schedule
    - usleep
    - ASSERT_NE
    - EXPECT_EQ
    - logging::SetLogSink
    - DebugSampler::DebugSampler
    - destroy
    linkageType: ''
    returnType: void
    signature: void TEST(SamplerTest, single_threaded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DebugSampler::DebugSampler
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:103,1
    - Dst: schedule
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:104,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:106,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:108,1
    - Dst: called_count
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:108,1
    - Dst: destroy
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:111,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 114
    functionName: check
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - called_count
    - EXPECT_LE
    - schedule
    - usleep
    - DebugSampler::DebugSampler
    - destroy
    linkageType: ''
    returnType: void
    signature: void * check(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:119,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:124,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:124,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:127,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:127,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:130,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:132,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:132,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:133,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:134,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:134,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:135,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:135,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 138
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - EXPECT_EQ
    - logging::StringSink::find
    - arraysize
    - ASSERT_NE
    - sleep
    - logging::SetLogSink
    linkageType: ''
    returnType: void
    signature: void TEST(SamplerTest, multi_threaded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:27,1
    - Dst: butil::LinkNode::InsertBeforeAsList
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:28,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:29,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:29,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:30,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:30,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:31,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:31,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:32,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:32,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:34,1
    - Dst: butil::LinkNode::InsertBeforeAsList
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:35,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:36,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:37,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:38,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:39,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:39,1
    - Dst: butil::LinkNode::InsertBeforeAsList
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:42,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:43,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:44,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:45,1
    - Dst: next
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:46,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:47,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:48,1
    - Dst: previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:49,1
    - Dst: butil::LinkNode::previous
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 50
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::InsertBeforeAsList
    - ASSERT_EQ
    - butil::LinkNode::next
    - butil::LinkNode::LinkNode
    - previous
    - butil::LinkNode::previous
    - next
    linkageType: ''
    returnType: void
    signature: void TEST(SamplerTest, linked_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: DebugSampler::DebugSampler
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DebugSampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: ~DebugSampler()
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DebugSampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: DebugSampler::take_sample
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void take_sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: DebugSampler::called_count
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int called_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:71,1
    - Dst: DebugSampler::DebugSampler
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:76,1
    - Dst: schedule
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:77,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:79,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:82,1
    - Dst: called_count
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:84,1
    - Dst: destroy
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:86,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:91,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:91,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:92,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:93,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:93,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:94,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:94,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - logging::StringSink::find
    - called_count
    - ASSERT_LE
    - schedule
    - usleep
    - ASSERT_NE
    - EXPECT_EQ
    - logging::SetLogSink
    - DebugSampler::DebugSampler
    - destroy
    linkageType: ''
    returnType: void
    signature: void TEST(SamplerTest, single_threaded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DebugSampler::DebugSampler
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:103,1
    - Dst: schedule
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:104,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:106,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:108,1
    - Dst: called_count
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:108,1
    - Dst: destroy
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:111,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 114
    functionName: check
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - called_count
    - EXPECT_LE
    - schedule
    - usleep
    - DebugSampler::DebugSampler
    - destroy
    linkageType: ''
    returnType: void
    signature: void * check(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:119,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:124,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:124,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:127,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:127,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:130,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:132,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:132,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:133,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:134,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:134,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:135,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_sampler_unittest.cpp:135,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 138
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_sampler_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - EXPECT_EQ
    - logging::StringSink::find
    - arraysize
    - ASSERT_NE
    - sleep
    - logging::SetLogSink
    linkageType: ''
    returnType: void
    signature: void TEST(SamplerTest, multi_threaded)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 17
    functionName: ComparableValue::ComparableValue
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComparableValue(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - ComparableValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: operator==(const ComparableValue& rhs) const
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ComparableValue& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - ComparableValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: operator<(const ComparableValue& rhs) const
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ComparableValue& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 17
    functionName: ComparableValue::ComparableValue
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComparableValue(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - ComparableValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: operator==(const ComparableValue& rhs) const
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ComparableValue& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - ComparableValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: operator<(const ComparableValue& rhs) const
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ComparableValue& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:39,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:40,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:41,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:55,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:56,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:57,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:58,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: std::vector::back
      Src: /src/brpc/test/stl_util_unittest.cc:61,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 64
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::vector::push_back
    - std::set::insert
    - std::vector::back
    - EXPECT_FALSE
    - butil::STLIsSorted
    - ComparableValue
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIsSorted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:68,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:69,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:70,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:71,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:74,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:75,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:76,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:77,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:78,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:82,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:89,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:90,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:104,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:105,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 109
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    - std::vector::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetDifference)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:113,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:114,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:115,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:116,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:119,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:120,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:121,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:122,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:123,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:127,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:128,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:129,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:130,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:131,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:132,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:139,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:140,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:141,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:142,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:143,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:144,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:151,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:152,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:153,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:154,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:155,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:156,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:163,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:164,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:165,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:166,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:167,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:168,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 172
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    - butil::STLSetUnion
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetUnion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:176,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:177,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:178,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:179,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:182,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:183,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:184,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:185,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:186,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:190,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:197,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:204,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:211,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 215
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLSetIntersection
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetIntersection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:219,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:220,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:221,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:222,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:225,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:226,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:229,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:230,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 239
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLIncludes
    - EXPECT_TRUE
    - std::set::insert
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIncludes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:39,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:40,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:41,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:55,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:56,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:57,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:58,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: std::vector::back
      Src: /src/brpc/test/stl_util_unittest.cc:61,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 64
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::vector::push_back
    - std::set::insert
    - std::vector::back
    - EXPECT_FALSE
    - butil::STLIsSorted
    - ComparableValue
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIsSorted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:68,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:69,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:70,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:71,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:74,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:75,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:76,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:77,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:78,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:82,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:89,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:90,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:104,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:105,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 109
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    - std::vector::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetDifference)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:113,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:114,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:115,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:116,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:119,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:120,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:121,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:122,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:123,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:127,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:128,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:129,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:130,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:131,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:132,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:139,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:140,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:141,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:142,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:143,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:144,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:151,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:152,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:153,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:154,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:155,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:156,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:163,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:164,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:165,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:166,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:167,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:168,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 172
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    - butil::STLSetUnion
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetUnion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:176,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:177,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:178,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:179,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:182,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:183,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:184,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:185,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:186,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:190,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:197,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:204,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:211,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 215
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLSetIntersection
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetIntersection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:219,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:220,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:221,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:222,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:225,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:226,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:229,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:230,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 239
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLIncludes
    - EXPECT_TRUE
    - std::set::insert
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIncludes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:39,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:40,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:41,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:55,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:56,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:57,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:58,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: std::vector::back
      Src: /src/brpc/test/stl_util_unittest.cc:61,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 64
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::vector::push_back
    - std::set::insert
    - std::vector::back
    - EXPECT_FALSE
    - butil::STLIsSorted
    - ComparableValue
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIsSorted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:68,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:69,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:70,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:71,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:74,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:75,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:76,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:77,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:78,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:82,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:89,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:90,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:104,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:105,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 109
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    - std::vector::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetDifference)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:113,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:114,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:115,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:116,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:119,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:120,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:121,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:122,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:123,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:127,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:128,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:129,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:130,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:131,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:132,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:139,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:140,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:141,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:142,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:143,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:144,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:151,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:152,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:153,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:154,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:155,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:156,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:163,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:164,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:165,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:166,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:167,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:168,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 172
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    - butil::STLSetUnion
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetUnion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:176,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:177,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:178,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:179,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:182,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:183,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:184,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:185,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:186,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:190,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:197,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:204,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:211,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 215
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLSetIntersection
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetIntersection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:219,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:220,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:221,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:222,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:225,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:226,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:229,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:230,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 239
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLIncludes
    - EXPECT_TRUE
    - std::set::insert
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIncludes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:39,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:40,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:41,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:42,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:47,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:48,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: ComparableValue
      Src: /src/brpc/test/stl_util_unittest.cc:49,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:50,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:55,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:56,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:57,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:58,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:60,1
    - Dst: std::vector::back
      Src: /src/brpc/test/stl_util_unittest.cc:61,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/test/stl_util_unittest.cc:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 64
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::vector::push_back
    - std::set::insert
    - std::vector::back
    - EXPECT_FALSE
    - butil::STLIsSorted
    - ComparableValue
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIsSorted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:68,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:69,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:70,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:71,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:74,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:75,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:76,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:77,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:78,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:82,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:84,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:89,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:90,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:92,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:99,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:104,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:105,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    - Dst: butil::STLSetDifference
      Src: /src/brpc/test/stl_util_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 109
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    - std::vector::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetDifference)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:113,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:114,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:115,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:116,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:119,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:120,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:121,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:122,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:123,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:127,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:128,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:129,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:130,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:131,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:132,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:134,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:139,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:140,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:141,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:142,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:143,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:144,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:146,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:151,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:152,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:153,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:154,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:155,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:156,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:158,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:163,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:164,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:165,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:166,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:167,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:168,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    - Dst: butil::STLSetUnion
      Src: /src/brpc/test/stl_util_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 172
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    - butil::STLSetUnion
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetUnion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:176,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:177,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:178,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:179,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:182,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:183,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:184,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:185,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:186,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:190,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:192,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:197,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:199,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:204,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:206,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:211,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/stl_util_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    - Dst: butil::STLSetIntersection
      Src: /src/brpc/test/stl_util_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 215
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLSetIntersection
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLSetIntersection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:219,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:220,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:221,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:222,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:225,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:226,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:229,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:230,1
    - Dst: std::set::insert
      Src: /src/brpc/test/stl_util_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:233,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:234,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:235,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:236,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:237,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    - Dst: butil::STLIncludes
      Src: /src/brpc/test/stl_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 239
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stl_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::STLIncludes
    - EXPECT_TRUE
    - std::set::insert
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(STLUtilTest, STLIncludes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:28,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:29,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:29,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:30,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:31,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:32,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 35
    functionName: rdlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - bthread_rwlock_rdlock
    - pthread_numeric_id
    - bthread_usleep
    - butil::cpuwide_time_ms
    - bthread_rwlock_unlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void * rdlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:40,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:40,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:41,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:42,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:43,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 46
    functionName: wrlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - bthread_rwlock_wrlock
    - pthread_numeric_id
    - bthread_usleep
    - butil::cpuwide_time_ms
    - bthread_rwlock_unlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void * wrlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:50,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:51,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:52,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:53,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:54,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:58,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:59,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:61,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:62,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:63,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 64
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_join
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:68,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:68,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:72,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:72,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:75,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:75,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:78,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:79,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:81,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:84,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:84,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 85
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - ARRAY_SIZE
    - bthread_rwlock_destroy
    - pthread_join
    - pthread_create
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, used_in_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:89,1
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: do_timedrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_rwlock_timedrdlock
    linkageType: ''
    returnType: void
    signature: void * do_timedrdlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:95,1
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 98
    functionName: do_timedwrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_rwlock_timedwrlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void * do_timedwrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:102,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:104,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:106,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:107,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:108,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:110,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:111,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:112,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:113,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:114,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:115,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:116,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_join
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, timedlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:126,1
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:130,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: do_tryrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_tryrdlock
    - EXPECT_EQ
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void * do_tryrdlock(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:136,1
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:140,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 142
    functionName: do_trywrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_trywrlock
    - EXPECT_EQ
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void * do_trywrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:146,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:148,1
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:149,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:150,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:153,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:156,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:157,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:158,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:160,1
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:161,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:162,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:163,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:164,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:165,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:166,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:167,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:169,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 170
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_rwlock_tryrdlock
    - bthread_join
    - bthread_rwlock_trywrlock
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, trylock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RWLock::RWLock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:174,1
    - Dst: bthread::RWLock::try_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:174,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:175,1
    - Dst: bthread::RWLock::rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:176,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:178,1
    - Dst: bthread::RWLock::try_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:178,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:179,1
    - Dst: bthread::RWLock::wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:180,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:184,1
    - Dst: bthread::RWLock::timed_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:184,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:185,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:186,1
    - Dst: bthread::RWLock::timed_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:186,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:187,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:202,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 207
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::RWLock::try_wrlock
    - bthread::RWLock::unlock
    - bthread::RWLock::timed_wrlock
    - bthread::RWLock::rdlock
    - bthread::RWLock::native_handler
    - bthread::RWLock::try_rdlock
    - bthread::RWLock::wrlock
    - bthread::RWLock::timed_rdlock
    - bthread::RWLock::RWLock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, cpp_wrapper)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:213,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:213,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:217,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:217,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 218
    functionName: read_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void read_op(bthread_rwlock_t* rw, int64_t sleep_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:221,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:221,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:225,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 226
    functionName: write_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    - ASSERT_EQ
    - bthread_rwlock_wrlock
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void write_op(bthread_rwlock_t* rw, int64_t sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::op
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 241
    functionName: loop_until_stopped
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::op
    linkageType: ''
    returnType: void
    signature: void * loop_until_stopped(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:246,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:246,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:256,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:258,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:261,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:265,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:265,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:265,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:270,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:275,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:275,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:275,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:277,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:280,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:286,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:286,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 287
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_setconcurrency
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_usleep
    - std::vector::back
    - pthread_join
    - pthread_create
    - bthread_join
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 296
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 295
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:302,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:307,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:309,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:312,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:314,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:317,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:319,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:320,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 322
    functionName: add_with_mutex
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread_rwlock_unlock
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * add_with_mutex(void* void_arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:329,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:333,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:343,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:345,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:345,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:359,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:363,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:364,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:365,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:374,1
    - Dst: join_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:383,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 43
    argCount: 4
    argNames:
    - writer_ratio
    - thread_num
    - ' create_fn'
    - ' join_fn'
    argTypes:
    - uint32_t
    - int
    - ThreadCreateFn
    - ThreadJoinFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 393
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 6
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_setconcurrency
    - join_fn
    - snprintf
    - ASSERT_LE
    - usleep
    - create_fn
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: "void PerfTest(uint32_t writer_ratio, ThreadId* /*dummy*/, int thread_num,\n
      \             const ThreadCreateFn& create_fn, const ThreadJoinFn& join_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:397,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:398,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:399,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:400,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:401,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 403
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:413,1
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:416,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:417,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:419,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:420,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:423,1
    - Dst: long::long
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:424,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 425
    functionName: read_thread
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::cpuwide_time_ns
    - long::long
    - pthread_rwlock_unlock
    - pthread_rwlock_rdlock
    linkageType: ''
    returnType: void
    signature: void * read_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 429
    functionName: write_thread
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * write_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:434,1
    - Dst: pthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:437,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:437,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:442,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:446,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:448,1
    - Dst: printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:449,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:452,1
    - Dst: pthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:454,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:456,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 458
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_rwlock_destroy
    - pthread_join
    - pthread_mutex_destroy
    - pthread_create
    - printf
    - pthread_mutex_init
    - pthread_rwlock_init
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, pthread_rdlock_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:28,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:29,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:29,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:30,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:31,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:32,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 35
    functionName: rdlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - bthread_rwlock_rdlock
    - pthread_numeric_id
    - bthread_usleep
    - butil::cpuwide_time_ms
    - bthread_rwlock_unlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void * rdlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:40,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:40,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:41,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:42,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:43,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 46
    functionName: wrlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - bthread_rwlock_wrlock
    - pthread_numeric_id
    - bthread_usleep
    - butil::cpuwide_time_ms
    - bthread_rwlock_unlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void * wrlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:50,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:51,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:52,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:53,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:54,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:58,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:59,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:61,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:62,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:63,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 64
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_join
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:68,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:68,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:72,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:72,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:75,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:75,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:78,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:79,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:81,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:84,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:84,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 85
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - ARRAY_SIZE
    - bthread_rwlock_destroy
    - pthread_join
    - pthread_create
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, used_in_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:89,1
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: do_timedrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_rwlock_timedrdlock
    linkageType: ''
    returnType: void
    signature: void * do_timedrdlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:95,1
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 98
    functionName: do_timedwrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_rwlock_timedwrlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void * do_timedwrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:102,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:104,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:106,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:107,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:108,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:110,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:111,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:112,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:113,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:114,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:115,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:116,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_join
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, timedlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:126,1
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:130,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: do_tryrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_tryrdlock
    - EXPECT_EQ
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void * do_tryrdlock(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:136,1
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:140,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 142
    functionName: do_trywrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_trywrlock
    - EXPECT_EQ
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void * do_trywrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:146,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:148,1
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:149,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:150,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:153,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:156,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:157,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:158,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:160,1
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:161,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:162,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:163,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:164,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:165,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:166,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:167,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:169,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 170
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_rwlock_tryrdlock
    - bthread_join
    - bthread_rwlock_trywrlock
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, trylock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RWLock::RWLock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:174,1
    - Dst: bthread::RWLock::try_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:174,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:175,1
    - Dst: bthread::RWLock::rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:176,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:178,1
    - Dst: bthread::RWLock::try_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:178,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:179,1
    - Dst: bthread::RWLock::wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:180,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:184,1
    - Dst: bthread::RWLock::timed_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:184,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:185,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:186,1
    - Dst: bthread::RWLock::timed_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:186,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:187,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:202,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 207
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::RWLock::try_wrlock
    - bthread::RWLock::unlock
    - bthread::RWLock::timed_wrlock
    - bthread::RWLock::rdlock
    - bthread::RWLock::native_handler
    - bthread::RWLock::try_rdlock
    - bthread::RWLock::wrlock
    - bthread::RWLock::timed_rdlock
    - bthread::RWLock::RWLock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, cpp_wrapper)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:213,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:213,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:217,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:217,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 218
    functionName: read_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    - ASSERT_EQ
    - bthread_rwlock_rdlock
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void read_op(bthread_rwlock_t* rw, int64_t sleep_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:221,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:221,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:225,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 226
    functionName: write_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    - ASSERT_EQ
    - bthread_rwlock_wrlock
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void write_op(bthread_rwlock_t* rw, int64_t sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::op
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 241
    functionName: loop_until_stopped
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::op
    linkageType: ''
    returnType: void
    signature: void * loop_until_stopped(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:246,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:246,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:256,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:258,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:261,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:265,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:265,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:265,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:270,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:275,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:275,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:275,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:277,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:280,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:286,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:286,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 287
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_setconcurrency
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - bthread_usleep
    - std::vector::back
    - pthread_join
    - pthread_create
    - bthread_join
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 296
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 295
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:302,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:307,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:309,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:312,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:314,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:317,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:319,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:320,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 322
    functionName: add_with_mutex
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_rwlock_wrlock
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread_rwlock_unlock
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * add_with_mutex(void* void_arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:329,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:333,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:343,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:345,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:345,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:359,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:363,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:364,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:365,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:374,1
    - Dst: join_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:383,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 43
    argCount: 4
    argNames:
    - writer_ratio
    - thread_num
    - ' create_fn'
    - ' join_fn'
    argTypes:
    - uint32_t
    - int
    - ThreadCreateFn
    - ThreadJoinFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 393
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 7
    functionsReached:
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_setconcurrency
    - join_fn
    - snprintf
    - ASSERT_LE
    - usleep
    - create_fn
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: "void PerfTest(uint32_t writer_ratio, ThreadId* /*dummy*/, int thread_num,\n
      \             const ThreadCreateFn& create_fn, const ThreadJoinFn& join_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:397,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:398,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:399,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:400,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:401,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 403
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:413,1
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:416,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:417,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:419,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:420,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:423,1
    - Dst: long::long
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:424,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 425
    functionName: read_thread
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::cpuwide_time_ns
    - long::long
    - pthread_rwlock_unlock
    - pthread_rwlock_rdlock
    linkageType: ''
    returnType: void
    signature: void * read_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 429
    functionName: write_thread
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * write_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:434,1
    - Dst: pthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:437,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:437,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:442,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:446,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:448,1
    - Dst: printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:449,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:452,1
    - Dst: pthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:454,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:456,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 458
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_rwlock_destroy
    - pthread_join
    - pthread_mutex_destroy
    - pthread_create
    - printf
    - pthread_mutex_init
    - pthread_rwlock_init
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, pthread_rdlock_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: butil::BasicLockTestThread::BasicLockTestThread
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BasicLockTestThread(Lock* lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Acquire
      Src: /src/brpc/test/lock_unittest.cc:23,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:25,1
    - Dst: Acquire
      Src: /src/brpc/test/lock_unittest.cc:28,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:30,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:30,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:30,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:31,1
    - Dst: Try
      Src: /src/brpc/test/lock_unittest.cc:34,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:36,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:36,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:36,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:37,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 21
    functionDepth: 1
    functionLinenumber: 21
    functionLinenumberEnd: 40
    functionName: butil::BasicLockTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - Acquire
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - Try
    - Release
    - rand
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::BasicLockTestThread::acquired
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int acquired() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:56,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:56,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/lock_unittest.cc:60,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:62,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/lock_unittest.cc:65,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:67,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:67,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:67,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:68,1
    - Dst: Lock::Try
      Src: /src/brpc/test/lock_unittest.cc:71,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:73,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:73,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:73,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:74,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/lock_unittest.cc:78,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:80,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:80,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:80,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:81,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:84,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/lock_unittest.cc:86,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/lock_unittest.cc:87,1
    - Dst: BasicLockTestThread::acquired
      Src: /src/brpc/test/lock_unittest.cc:87,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 88
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - Lock::Acquire
    - rand
    - Lock::Release
    - BasicLockTestThread::acquired
    - Lock::Try
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: butil::TryLockTestThread::TryLockTestThread
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TryLockTestThread(Lock* lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Try
      Src: /src/brpc/test/lock_unittest.cc:97,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 100
    functionName: butil::TryLockTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - Try
    - Release
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::TryLockTestThread::got_lock
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool got_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:114,1
    - Dst: Lock::Try
      Src: /src/brpc/test/lock_unittest.cc:114,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:122,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:122,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/lock_unittest.cc:126,1
    - Dst: TryLockTestThread::got_lock
      Src: /src/brpc/test/lock_unittest.cc:126,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:136,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:136,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:140,1
    - Dst: TryLockTestThread::got_lock
      Src: /src/brpc/test/lock_unittest.cc:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:142,1
    - Dst: Lock::Try
      Src: /src/brpc/test/lock_unittest.cc:142,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - TryLockTestThread::got_lock
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - Lock::Release
    - Lock::Try
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, TryLock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - lock
    - value
    argTypes:
    - Lock*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: butil::MutexLockTestThread::MutexLockTestThread
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexLockTestThread(Lock* lock, int* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock*::Acquire
      Src: /src/brpc/test/lock_unittest.cc:157,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:159,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:159,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:159,1
    - Dst: Lock*::Release
      Src: /src/brpc/test/lock_unittest.cc:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - lock
    - value
    argTypes:
    - Lock*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 163
    functionName: butil::MutexLockTestThread::DoStuff
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - Lock*::Acquire
    - Lock*::Release
    - rand
    linkageType: ''
    returnType: void
    signature: void DoStuff(Lock* lock, int* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MutexLockTestThread::DoStuff
      Src: /src/brpc/test/lock_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: butil::MutexLockTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MutexLockTestThread::DoStuff
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:183,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:183,1
    - Dst: butil::MutexLockTestThread::DoStuff
      Src: /src/brpc/test/lock_unittest.cc:185,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lock_unittest.cc:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 190
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, MutexTwoThreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:203,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:204,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:205,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:205,1
    - Dst: butil::MutexLockTestThread::DoStuff
      Src: /src/brpc/test/lock_unittest.cc:207,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:209,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:210,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lock_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 214
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, MutexFourThreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: butil::BasicLockTestThread::BasicLockTestThread
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BasicLockTestThread(Lock* lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Acquire
      Src: /src/brpc/test/lock_unittest.cc:23,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:25,1
    - Dst: Acquire
      Src: /src/brpc/test/lock_unittest.cc:28,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:30,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:30,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:30,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:31,1
    - Dst: Try
      Src: /src/brpc/test/lock_unittest.cc:34,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:36,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:36,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:36,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:37,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 21
    functionDepth: 1
    functionLinenumber: 21
    functionLinenumberEnd: 40
    functionName: butil::BasicLockTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - Acquire
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - Try
    - Release
    - rand
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::BasicLockTestThread::acquired
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int acquired() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:56,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:56,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/lock_unittest.cc:60,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:62,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/lock_unittest.cc:65,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:67,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:67,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:67,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:68,1
    - Dst: Lock::Try
      Src: /src/brpc/test/lock_unittest.cc:71,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:73,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:73,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:73,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:74,1
    - Dst: Lock::Acquire
      Src: /src/brpc/test/lock_unittest.cc:78,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:80,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:80,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:80,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:81,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:84,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/lock_unittest.cc:86,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/lock_unittest.cc:87,1
    - Dst: BasicLockTestThread::acquired
      Src: /src/brpc/test/lock_unittest.cc:87,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 88
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - Lock::Acquire
    - rand
    - Lock::Release
    - BasicLockTestThread::acquired
    - Lock::Try
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - lock
    argTypes:
    - Lock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: butil::TryLockTestThread::TryLockTestThread
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TryLockTestThread(Lock* lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Try
      Src: /src/brpc/test/lock_unittest.cc:97,1
    - Dst: Release
      Src: /src/brpc/test/lock_unittest.cc:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 100
    functionName: butil::TryLockTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - Try
    - Release
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::TryLockTestThread::got_lock
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool got_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:114,1
    - Dst: Lock::Try
      Src: /src/brpc/test/lock_unittest.cc:114,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:122,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:122,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/lock_unittest.cc:126,1
    - Dst: TryLockTestThread::got_lock
      Src: /src/brpc/test/lock_unittest.cc:126,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:136,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:136,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:140,1
    - Dst: TryLockTestThread::got_lock
      Src: /src/brpc/test/lock_unittest.cc:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:142,1
    - Dst: Lock::Try
      Src: /src/brpc/test/lock_unittest.cc:142,1
    - Dst: Lock::Release
      Src: /src/brpc/test/lock_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - TryLockTestThread::got_lock
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - Lock::Release
    - Lock::Try
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, TryLock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - lock
    - value
    argTypes:
    - Lock*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: butil::MutexLockTestThread::MutexLockTestThread
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexLockTestThread(Lock* lock, int* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Lock*::Acquire
      Src: /src/brpc/test/lock_unittest.cc:157,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lock_unittest.cc:159,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/lock_unittest.cc:159,1
    - Dst: rand
      Src: /src/brpc/test/lock_unittest.cc:159,1
    - Dst: Lock*::Release
      Src: /src/brpc/test/lock_unittest.cc:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - lock
    - value
    argTypes:
    - Lock*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 163
    functionName: butil::MutexLockTestThread::DoStuff
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 3
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - Lock*::Acquire
    - Lock*::Release
    - rand
    linkageType: ''
    returnType: void
    signature: void DoStuff(Lock* lock, int* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MutexLockTestThread::DoStuff
      Src: /src/brpc/test/lock_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: butil::MutexLockTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MutexLockTestThread::DoStuff
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:183,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:183,1
    - Dst: butil::MutexLockTestThread::DoStuff
      Src: /src/brpc/test/lock_unittest.cc:185,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lock_unittest.cc:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 190
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, MutexTwoThreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:203,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:204,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/lock_unittest.cc:205,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/lock_unittest.cc:205,1
    - Dst: butil::MutexLockTestThread::DoStuff
      Src: /src/brpc/test/lock_unittest.cc:207,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:209,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:210,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/lock_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lock_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 214
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/lock_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LockTest, MutexFourThreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 13
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 13
    functionName: FPL
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FPL(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 16
    functionName: FPS
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FPS(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_path_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: FilePathTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - StreamingRpcTest::SetUp
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::TearDown
      Src: /src/brpc/test/file_path_unittest.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: FilePathTest::TearDown
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - StreamingRpcTest::TearDown
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:63,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:63,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:64,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:64,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:65,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:65,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:66,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:66,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:67,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:67,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:68,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:68,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:69,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:69,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:70,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:70,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:71,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:71,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:72,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:72,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:73,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:73,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:74,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:74,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:75,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:75,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:76,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:76,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:77,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:77,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:78,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:78,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:79,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:79,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:80,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:80,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:81,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:81,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:82,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:82,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:83,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:83,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:84,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:84,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:85,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:85,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:86,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:86,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:87,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:87,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:88,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:88,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:89,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:89,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:90,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:90,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:92,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:92,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:95,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:95,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:96,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:96,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:97,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:97,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:98,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:98,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:99,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:99,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:100,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:100,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:101,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:101,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:102,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:102,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:103,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:103,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:104,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:104,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:105,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:105,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:106,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:106,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:107,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:107,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:108,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:108,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:111,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:111,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:112,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:112,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:113,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:113,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:114,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:114,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:115,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:115,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:116,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:116,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:117,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:117,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:118,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:118,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:119,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:119,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:120,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:120,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:121,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:121,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:122,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:122,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:123,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:123,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:124,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:124,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:125,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:125,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:126,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:126,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:127,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:127,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:128,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:128,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:129,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:129,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:131,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:131,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:132,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:132,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:133,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:133,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:134,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:134,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:135,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:135,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:136,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:136,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:137,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:137,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:142,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_path_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:145,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:145,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:145,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 148
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - FilePath::DirName
    - arraysize
    - EXPECT_EQ
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, DirName)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:152,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:152,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:153,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:153,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:154,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:154,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:155,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:155,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:156,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:156,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:157,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:157,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:158,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:158,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:159,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:159,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:160,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:160,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:161,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:161,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:162,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:162,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:163,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:163,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:164,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:164,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:165,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:165,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:166,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:166,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:167,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:167,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:168,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:168,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:169,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:169,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:170,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:170,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:171,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:171,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:172,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:172,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:173,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:173,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:174,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:174,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:175,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:175,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:176,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:176,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:177,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:177,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:178,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:178,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:180,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:180,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:183,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:183,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:184,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:184,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:185,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:185,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:186,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:186,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:187,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:187,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:188,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:188,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:189,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:189,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:190,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:190,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:191,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:191,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:192,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:192,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:193,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:193,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:194,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:194,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:195,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:195,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:196,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:196,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:199,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:199,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:200,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:200,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:201,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:201,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:202,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:202,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:203,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:203,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:204,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:204,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:205,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:205,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:206,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:206,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:207,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:207,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:208,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:208,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:209,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:209,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:210,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:210,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:211,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:211,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:212,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:212,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:213,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:213,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:214,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:214,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:215,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:215,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:216,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:216,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:218,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:218,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:219,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:219,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:220,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:220,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:221,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:221,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:222,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:222,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:223,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:223,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:224,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:224,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:229,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_path_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:232,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:232,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:232,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:233,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 235
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - arraysize
    - EXPECT_EQ
    - FilePath::StringType
    - FilePath::BaseName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, BaseName)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:239,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:239,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:239,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:240,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:240,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:240,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:241,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:241,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:241,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:242,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:242,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:242,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:243,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:243,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:243,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:244,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:244,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:244,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:248,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:248,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:248,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:249,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:249,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:249,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:250,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:250,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:250,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:251,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:251,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:251,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:252,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:252,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:252,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:258,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:258,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:258,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:259,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:259,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:259,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:260,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:260,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:260,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:261,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:261,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:261,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:262,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:262,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:262,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:263,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:263,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:263,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:264,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:264,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:264,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:265,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:265,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:265,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:266,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:266,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:266,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:267,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:267,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:267,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:268,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:268,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:268,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:269,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:269,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:269,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:270,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:270,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:270,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:271,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:271,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:271,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:272,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:272,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:272,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:273,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:273,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:273,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:274,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:274,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:274,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:275,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:275,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:275,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:276,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:276,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:276,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:277,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:277,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:277,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:279,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:279,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:279,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:281,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:281,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:281,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:282,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:282,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:282,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:283,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:283,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:283,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:285,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:285,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:285,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:286,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:286,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:286,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:289,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:289,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:289,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:290,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:290,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:290,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:291,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:291,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:291,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:292,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:292,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:292,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:294,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:294,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:294,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:295,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:295,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:295,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:298,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:298,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:298,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:299,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:299,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:299,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:300,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:300,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:300,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:301,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:301,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:301,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:306,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_path_unittest.cc:309,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:310,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:310,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:310,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:311,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_path_unittest.cc:312,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:313,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:313,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:313,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:314,1
    - Dst: WideToUTF8
      Src: /src/brpc/test/file_path_unittest.cc:319,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_path_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:324,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:324,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:324,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 327
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - WideToUTF8
    - FilePath::value
    - FPL
    - arraysize
    - FilePath
    - FilePath::AppendASCII
    - FilePath::Append
    - EXPECT_EQ
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, Append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:331,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:331,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:332,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:332,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:333,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:333,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:334,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:334,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:335,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:335,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:336,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:336,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:337,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:337,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:338,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:338,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:339,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:339,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:340,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:340,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:341,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:341,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:342,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:342,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:343,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:343,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:344,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:344,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:346,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:346,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:347,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:347,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:348,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:348,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:349,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:349,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:350,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:350,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:351,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:351,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:352,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:352,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:353,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:353,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:354,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:354,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:355,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:355,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:358,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:358,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:359,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:359,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:360,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:360,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:361,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:361,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:362,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:362,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:363,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:363,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:364,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:364,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:365,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:365,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:366,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:366,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:367,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:367,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:368,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:368,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:369,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:369,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:370,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:370,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:372,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:372,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:373,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:373,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:374,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:374,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:375,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:375,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:376,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:376,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:377,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:377,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:378,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:378,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:379,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:379,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:380,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:380,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:385,1
    - Dst: FilePath::StripTrailingSeparators
      Src: /src/brpc/test/file_path_unittest.cc:387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:388,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:388,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:388,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:389,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 391
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - arraysize
    - FilePath::StripTrailingSeparators
    - EXPECT_EQ
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, StripTrailingSeparators)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:395,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:396,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:397,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:398,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:399,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:400,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:401,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:402,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:403,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:405,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:406,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:407,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:408,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:409,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:410,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:411,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:412,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:413,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:414,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:416,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:417,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:418,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:419,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:420,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:423,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:424,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:425,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:426,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:427,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:428,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:429,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:432,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:433,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:434,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:435,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:436,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:437,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:438,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:439,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:440,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:441,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:442,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:444,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:445,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:446,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:447,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:448,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:453,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_path_unittest.cc:455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:456,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:457,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 459
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::IsAbsolute
    - FilePath::value
    - FPL
    - arraysize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, IsAbsolute)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:463,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:463,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:464,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:464,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:465,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:465,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:466,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:466,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:467,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:467,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:468,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:468,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:469,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:469,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:470,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:470,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:471,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:471,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:472,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:472,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:473,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:473,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:474,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:474,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:476,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:476,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:477,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:477,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:478,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:478,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:481,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:481,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:482,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:482,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:483,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:483,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:484,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:484,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:485,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:485,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:486,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:486,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:487,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:487,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:488,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:488,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:489,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:489,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:490,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:490,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:491,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:491,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:492,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:492,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:493,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:493,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:494,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:494,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:495,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:495,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:499,1
    - Dst: FilePath::GetComponents
      Src: /src/brpc/test/file_path_unittest.cc:502,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_path_unittest.cc:505,1
    - Dst: FilePath::StringType::append
      Src: /src/brpc/test/file_path_unittest.cc:506,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:506,1
    - Dst: FilePath::StringType::append
      Src: /src/brpc/test/file_path_unittest.cc:507,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:509,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:509,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:510,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 461
    functionDepth: 1
    functionLinenumber: 461
    functionLinenumberEnd: 512
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FilePath::StringType::append
    - FPL
    - FILE_PATH_LITERAL
    - arraysize
    - FilePath::GetComponents
    - EXPECT_EQ
    - FilePath::StringType
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, PathComponentsTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:516,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:516,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:517,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:517,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:518,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:518,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:519,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:519,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:520,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:520,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:521,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:521,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:522,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:522,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:523,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:523,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:524,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:524,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:525,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:525,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:526,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:526,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:527,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:527,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:528,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:528,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:530,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:530,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:531,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:531,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:532,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:532,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:533,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:533,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:534,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:534,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:535,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:535,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:536,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:536,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:537,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:537,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:538,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:538,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:539,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:539,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:540,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:540,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:541,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:541,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:542,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:542,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:543,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:543,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:546,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:546,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:547,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:547,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:548,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:548,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:549,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:549,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:550,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:550,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:551,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:551,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:552,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:552,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:556,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:560,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/file_path_unittest.cc:560,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:561,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 564
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::IsParent
    - FilePath::value
    - FPL
    - arraysize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, IsParentTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:648,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:648,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:649,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:649,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:650,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:650,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:651,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:651,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:652,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:652,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:653,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:653,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:654,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:654,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:655,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:655,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:656,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:656,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:658,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:658,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:659,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:659,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:660,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:660,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:661,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:661,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:662,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:662,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:663,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:663,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:664,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:664,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:665,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:665,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:666,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:666,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:667,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:667,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:668,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:668,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:671,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:671,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:672,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:672,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:673,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:673,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:674,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:674,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:675,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:675,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:676,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:676,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:677,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:677,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:678,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:678,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:680,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:680,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:681,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:681,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:682,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:682,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:691,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:692,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:693,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:696,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:700,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:701,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:702,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 646
    functionDepth: 1
    functionLinenumber: 646
    functionLinenumberEnd: 704
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FPL
    - arraysize
    - FilePath::value
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, EqualityTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:707,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_path_unittest.cc:709,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:710,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:710,1
    - Dst: FilePath::Extension
      Src: /src/brpc/test/file_path_unittest.cc:710,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:711,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:711,1
    - Dst: FilePath::FinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:711,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_path_unittest.cc:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:714,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:714,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:714,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_path_unittest.cc:716,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:717,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:717,1
    - Dst: FilePath::RemoveExtension
      Src: /src/brpc/test/file_path_unittest.cc:717,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:719,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:719,1
    - Dst: FilePath::RemoveExtension
      Src: /src/brpc/test/file_path_unittest.cc:719,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:720,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:720,1
    - Dst: FilePath::Extension
      Src: /src/brpc/test/file_path_unittest.cc:720,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:721,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_path_unittest.cc:721,1
    - Dst: FilePath::FinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:721,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 722
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 722
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::FinalExtension
    - FilePath::Extension
    - FilePath::RemoveExtension
    - FilePath::value
    - FILE_PATH_LITERAL
    - FilePath::Append
    - EXPECT_EQ
    - FilePath::BaseName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, Extension)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:727,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:727,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:728,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:728,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:729,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:729,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:730,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:730,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:731,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:731,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:732,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:732,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:733,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:733,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:734,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:734,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:735,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:735,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:737,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:737,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:738,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:738,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:739,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:739,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:740,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:740,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:741,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:741,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:742,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:742,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:743,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:743,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:744,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:744,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:745,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:745,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:746,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:746,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:747,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:747,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:748,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:748,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:749,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:749,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:750,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:750,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:751,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:751,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:752,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:752,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:753,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:753,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:754,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:754,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:755,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:755,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:756,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:756,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:759,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:759,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:760,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:760,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:761,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:761,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:762,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:762,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:763,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:763,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:764,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:764,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:765,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:765,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:766,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:766,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:767,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:767,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:769,1
    - Dst: FilePath::Extension
      Src: /src/brpc/test/file_path_unittest.cc:771,1
    - Dst: FilePath::FinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:772,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_path_unittest.cc:773,1
    - Dst: FilePath::StringType::c_str
      Src: /src/brpc/test/file_path_unittest.cc:773,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:774,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_path_unittest.cc:775,1
    - Dst: FilePath::StringType::c_str
      Src: /src/brpc/test/file_path_unittest.cc:775,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:776,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:778,1
    - Dst: FilePath::Extension
      Src: /src/brpc/test/file_path_unittest.cc:780,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_path_unittest.cc:781,1
    - Dst: FilePath::StringType::c_str
      Src: /src/brpc/test/file_path_unittest.cc:781,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:782,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:788,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:788,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:788,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:789,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:789,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:789,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:790,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:790,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:790,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:791,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:791,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:791,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:792,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:792,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:792,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:793,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:793,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:793,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:794,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:794,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:794,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:795,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:795,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:795,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:796,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:796,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:796,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:797,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:797,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:797,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:798,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:798,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:798,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:799,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:799,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:799,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:800,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:800,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:800,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:801,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:801,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:801,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:802,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:802,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:802,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:803,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:803,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:803,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:804,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:804,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:804,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:806,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:806,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:806,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:807,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:807,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:807,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:808,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:808,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:808,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:809,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:809,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:809,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:810,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:810,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:810,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:811,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:811,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:812,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:813,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:813,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:814,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:816,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:817,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:817,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:818,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:819,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:819,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:820,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:821,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:821,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:822,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:823,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:823,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:824,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:825,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:825,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:826,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:827,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:827,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:827,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:828,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:828,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:828,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:830,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:830,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:830,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:831,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:831,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:831,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:832,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:832,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:832,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:833,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:833,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:833,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:834,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:834,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:834,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:835,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:835,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:835,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:836,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:836,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:836,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:837,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:837,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:837,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:838,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:838,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:839,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:840,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:840,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:840,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:841,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:841,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:841,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:842,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:842,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:842,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:843,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:843,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:843,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:844,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:844,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:844,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:846,1
    - Dst: FilePath::InsertBeforeExtension
      Src: /src/brpc/test/file_path_unittest.cc:848,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:849,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:849,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:850,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:856,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:856,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:857,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:857,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:858,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:858,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:859,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:859,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:860,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:860,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:861,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:861,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:862,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:862,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:863,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:863,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:864,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:864,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:865,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:865,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:867,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:867,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:870,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:870,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:871,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:871,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:873,1
    - Dst: FilePath::RemoveExtension
      Src: /src/brpc/test/file_path_unittest.cc:875,1
    - Dst: FilePath::RemoveFinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:876,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:877,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:877,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:878,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:879,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:879,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:880,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:883,1
    - Dst: FilePath::RemoveExtension
      Src: /src/brpc/test/file_path_unittest.cc:884,1
    - Dst: FilePath::RemoveFinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:885,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:887,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:887,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:887,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:888,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:894,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:894,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:894,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:896,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:896,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:896,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:897,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:897,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:897,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:898,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:898,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:898,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:899,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:899,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:899,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:900,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:900,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:900,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:902,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:902,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:902,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:903,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:903,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:903,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:904,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:904,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:904,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:905,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:905,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:905,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:906,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:906,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:906,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:907,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:907,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:907,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:908,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:908,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:908,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:909,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:909,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:909,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:910,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:910,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:910,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:911,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:911,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:911,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:912,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:912,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:912,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:913,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:913,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:913,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:914,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:914,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:914,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:917,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:917,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:917,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:919,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:919,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:919,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:920,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:922,1
    - Dst: FilePath::ReplaceExtension
      Src: /src/brpc/test/file_path_unittest.cc:924,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:925,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:925,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:926,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:932,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:932,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:932,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:933,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:933,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:933,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:934,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:934,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:934,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:935,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:935,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:935,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:936,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:936,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:936,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:937,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:937,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:937,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:938,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:938,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:938,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:939,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:939,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:939,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:940,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:940,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:940,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:941,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:941,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:941,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:942,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:942,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:942,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:943,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:943,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:943,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:944,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:944,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:944,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:945,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:945,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:945,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:947,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:947,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:947,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:948,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:948,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:948,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:949,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:949,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:949,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:951,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:951,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:951,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:952,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:952,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:952,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:955,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:955,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:955,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:957,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:957,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:957,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:958,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:960,1
    - Dst: FilePath::AddExtension
      Src: /src/brpc/test/file_path_unittest.cc:962,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:963,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:963,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:964,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:970,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:970,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:971,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:971,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:972,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:972,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:973,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:973,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:974,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:974,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:975,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:975,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:976,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:976,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:977,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:977,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:978,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:978,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:979,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:979,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:980,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:980,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:981,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:981,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:982,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:982,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:983,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:983,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:985,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:985,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:986,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:986,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:989,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:989,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:990,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:990,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:992,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:992,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:993,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:993,1
    - Dst: defined
      Src: /src/brpc/test/file_path_unittest.cc:994,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:996,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:996,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:997,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:997,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:999,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:999,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1000,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1000,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1004,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1008,1
    - Dst: FilePath::MatchesExtension
      Src: /src/brpc/test/file_path_unittest.cc:1008,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1009,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1015,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1015,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1016,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1016,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1017,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1017,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1018,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1018,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1019,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1019,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1020,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1020,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1021,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1021,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1022,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1022,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1023,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1023,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1024,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1024,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1025,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1025,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1026,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1026,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1027,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1027,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1028,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1028,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1029,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1029,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1030,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1030,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1031,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1031,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1036,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1036,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1037,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1037,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1038,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1038,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1039,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1039,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1040,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1040,1
    - Dst: defined
      Src: /src/brpc/test/file_path_unittest.cc:1041,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1043,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1043,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1044,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1044,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1046,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1046,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1047,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1047,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1049,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1049,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1050,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1050,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1052,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1052,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1053,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1053,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1056,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1056,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1057,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1057,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1058,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1058,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1059,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1059,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1060,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1060,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1061,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1061,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1066,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1066,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1067,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1067,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1069,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1069,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1070,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1070,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1071,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1071,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1072,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1072,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1073,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1073,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1074,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1074,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1075,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1075,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1076,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1076,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1077,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1077,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1081,1
    - Dst: butil::FilePath::CompareIgnoreCase
      Src: /src/brpc/test/file_path_unittest.cc:1084,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1085,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1092,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1093,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1094,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1095,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1096,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1097,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1098,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1099,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1100,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1101,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1102,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1103,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1104,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1105,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1106,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1107,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1108,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1109,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1110,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1111,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1112,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1113,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1116,1
    - Dst: FilePath::ReferencesParent
      Src: /src/brpc/test/file_path_unittest.cc:1118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1119,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1153,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1153,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1157,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1158,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1158,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1163,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1163,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1166,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_path_unittest.cc:1167,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1168,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1168,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1170,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1170,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1172,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1172,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1178,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1178,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1181,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_path_unittest.cc:1182,1
    - Dst: FilePath::ReferencesParent
      Src: /src/brpc/test/file_path_unittest.cc:1182,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1188,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1188,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1189,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1189,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1190,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1190,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1191,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1191,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1192,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1192,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1195,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1195,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1196,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1196,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1197,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1197,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1198,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1198,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1199,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1199,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1200,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1200,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1201,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1201,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1202,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1202,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1203,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1203,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1204,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1204,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1205,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1205,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1206,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1206,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1207,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1207,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1208,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1208,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1209,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1209,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1211,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1211,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1212,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1212,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1213,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1213,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1214,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1214,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1215,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1215,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1216,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1216,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1217,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1217,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1218,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1218,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1220,1
    - Dst: FilePath::NormalizePathSeparators
      Src: /src/brpc/test/file_path_unittest.cc:1222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1223,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:1223,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1223,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1224,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1231,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1232,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1233,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1234,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1235,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1237,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:1238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1239,1
    - Dst: FilePath::EndsWithSeparator
      Src: /src/brpc/test/file_path_unittest.cc:1239,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1247,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1247,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1248,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1248,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1250,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:1251,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:1252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1253,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1253,1
    - Dst: FilePath::AsEndingWithSeparator
      Src: /src/brpc/test/file_path_unittest.cc:1253,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1260,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1261,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1262,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1263,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1264,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1265,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1266,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1267,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1268,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1269,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1270,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1271,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1272,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1273,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1274,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1277,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_path_unittest.cc:1279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1280,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1281,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 71
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 724
    functionDepth: 1
    functionLinenumber: 724
    functionLinenumberEnd: 1286
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FilePath::CompareIgnoreCase
    - FilePath::InsertBeforeExtension
    - FilePath::ReferencesParent
    - arraysize
    - FPS
    - defined
    - FilePath
    - FilePath::Append
    - FilePath::StringType::c_str
    - FilePath::RemoveExtension
    - FilePath::NormalizePathSeparators
    - EXPECT_EQ
    - EXPECT_STREQ
    - FilePath::AsEndingWithSeparator
    - EXPECT_TRUE
    - FilePath::FinalExtension
    - FilePath::value
    - FPL
    - FilePath::IsContentUri
    - FilePath::MatchesExtension
    - FilePath::Extension
    - FilePath::AddExtension
    - FilePath::ReplaceExtension
    - FilePath::RemoveFinalExtension
    - FilePath::StringType
    - FilePath::EndsWithSeparator
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, Extension2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:788,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:788,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:788,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:789,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:789,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:789,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:790,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:790,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:790,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:791,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:791,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:791,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:792,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:792,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:792,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:793,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:793,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:793,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:794,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:794,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:794,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:795,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:795,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:795,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:796,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:796,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:796,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:797,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:797,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:797,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:798,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:798,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:798,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:799,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:799,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:799,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:800,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:800,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:800,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:801,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:801,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:801,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:802,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:802,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:802,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:803,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:803,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:803,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:804,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:804,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:804,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:806,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:806,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:806,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:807,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:807,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:807,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:808,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:808,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:808,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:809,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:809,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:809,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:810,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:810,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:810,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:811,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:811,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:812,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:813,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:813,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:814,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:816,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:817,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:817,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:818,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:819,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:819,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:820,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:821,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:821,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:822,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:823,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:823,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:824,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:825,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:825,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:826,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:827,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:827,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:827,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:828,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:828,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:828,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:830,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:830,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:830,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:831,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:831,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:831,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:832,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:832,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:832,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:833,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:833,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:833,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:834,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:834,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:834,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:835,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:835,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:835,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:836,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:836,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:836,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:837,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:837,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:837,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:838,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:838,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:839,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:840,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:840,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:840,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:841,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:841,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:841,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:842,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:842,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:842,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:843,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:843,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:843,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:844,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:844,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:844,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:846,1
    - Dst: FilePath::InsertBeforeExtension
      Src: /src/brpc/test/file_path_unittest.cc:848,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:849,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:849,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:850,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 786
    functionDepth: 1
    functionLinenumber: 786
    functionLinenumberEnd: 852
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::InsertBeforeExtension
    - FilePath::value
    - FPL
    - arraysize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, InsertBeforeExtension)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:856,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:856,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:857,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:857,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:858,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:858,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:859,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:859,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:860,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:860,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:861,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:861,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:862,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:862,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:863,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:863,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:864,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:864,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:865,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:865,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:867,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:867,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:870,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:870,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:871,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:871,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:873,1
    - Dst: FilePath::RemoveExtension
      Src: /src/brpc/test/file_path_unittest.cc:875,1
    - Dst: FilePath::RemoveFinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:876,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:877,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:877,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:878,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:879,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:879,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:880,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:883,1
    - Dst: FilePath::RemoveExtension
      Src: /src/brpc/test/file_path_unittest.cc:884,1
    - Dst: FilePath::RemoveFinalExtension
      Src: /src/brpc/test/file_path_unittest.cc:885,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:886,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:887,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:887,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:887,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:888,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 890
      start: 854
    functionDepth: 1
    functionLinenumber: 854
    functionLinenumberEnd: 890
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::RemoveExtension
    - FilePath::value
    - FPL
    - arraysize
    - FilePath::RemoveFinalExtension
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, RemoveExtension)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:894,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:894,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:894,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:896,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:896,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:896,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:897,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:897,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:897,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:898,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:898,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:898,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:899,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:899,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:899,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:900,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:900,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:900,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:902,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:902,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:902,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:903,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:903,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:903,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:904,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:904,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:904,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:905,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:905,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:905,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:906,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:906,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:906,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:907,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:907,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:907,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:908,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:908,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:908,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:909,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:909,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:909,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:910,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:910,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:910,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:911,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:911,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:911,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:912,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:912,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:912,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:913,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:913,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:913,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:914,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:914,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:914,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:917,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:917,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:917,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:919,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:919,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:919,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:920,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:922,1
    - Dst: FilePath::ReplaceExtension
      Src: /src/brpc/test/file_path_unittest.cc:924,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:925,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:925,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:926,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 892
    functionDepth: 1
    functionLinenumber: 892
    functionLinenumberEnd: 928
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - FilePath::ReplaceExtension
    - arraysize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, ReplaceExtension)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:932,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:932,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:932,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:933,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:933,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:933,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:934,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:934,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:934,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:935,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:935,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:935,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:936,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:936,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:936,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:937,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:937,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:937,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:938,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:938,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:938,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:939,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:939,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:939,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:940,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:940,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:940,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:941,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:941,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:941,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:942,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:942,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:942,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:943,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:943,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:943,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:944,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:944,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:944,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:945,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:945,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:945,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:947,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:947,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:947,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:948,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:948,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:948,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:949,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:949,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:949,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:951,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:951,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:951,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:952,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:952,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:952,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:955,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:955,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:955,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:957,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:957,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:957,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:958,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:960,1
    - Dst: FilePath::AddExtension
      Src: /src/brpc/test/file_path_unittest.cc:962,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:963,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:963,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:964,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 966
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 966
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FilePath::AddExtension
    - FPL
    - arraysize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, AddExtension)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:970,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:970,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:971,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:971,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:972,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:972,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:973,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:973,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:974,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:974,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:975,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:975,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:976,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:976,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:977,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:977,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:978,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:978,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:979,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:979,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:980,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:980,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:981,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:981,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:982,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:982,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:983,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:983,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:985,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:985,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:986,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:986,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:989,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:989,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:990,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:990,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:992,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:992,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:993,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:993,1
    - Dst: defined
      Src: /src/brpc/test/file_path_unittest.cc:994,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:996,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:996,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:997,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:997,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:999,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:999,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1000,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1000,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1004,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1008,1
    - Dst: FilePath::MatchesExtension
      Src: /src/brpc/test/file_path_unittest.cc:1008,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1009,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 968
    functionDepth: 1
    functionLinenumber: 968
    functionLinenumberEnd: 1011
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - arraysize
    - defined
    - EXPECT_EQ
    - FilePath::MatchesExtension
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, MatchesExtension)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1015,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1015,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1016,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1016,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1017,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1017,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1018,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1018,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1019,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1019,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1020,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1020,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1021,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1021,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1022,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1022,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1023,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1023,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1024,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1024,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1025,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1025,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1026,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1026,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1027,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1027,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1028,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1028,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1029,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1029,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1030,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1030,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1031,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1031,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1036,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1036,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1037,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1037,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1038,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1038,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1039,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1039,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1040,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1040,1
    - Dst: defined
      Src: /src/brpc/test/file_path_unittest.cc:1041,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1043,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1043,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1044,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1044,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1046,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1046,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1047,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1047,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1049,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1049,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1050,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1050,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1052,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1052,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1053,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1053,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1056,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1056,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1057,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1057,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1058,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1058,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1059,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1059,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1060,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1060,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1061,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1061,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1066,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1066,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1067,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1067,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1069,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1069,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1070,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1070,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1071,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1071,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1072,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1072,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1073,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1073,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1074,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1074,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1075,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1075,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1076,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1076,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1077,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1077,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1081,1
    - Dst: butil::FilePath::CompareIgnoreCase
      Src: /src/brpc/test/file_path_unittest.cc:1084,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1085,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1088
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1088
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath::CompareIgnoreCase
    - FPL
    - arraysize
    - defined
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, CompareIgnoreCase)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1092,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1093,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1094,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1095,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1096,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1097,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1098,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1099,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1100,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1101,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1102,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1103,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1104,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1105,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1106,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1107,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1108,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1109,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1110,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1111,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1112,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1113,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1116,1
    - Dst: FilePath::ReferencesParent
      Src: /src/brpc/test/file_path_unittest.cc:1118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1119,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1122
      start: 1090
    functionDepth: 1
    functionLinenumber: 1090
    functionLinenumberEnd: 1122
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FilePath::ReferencesParent
    - FPL
    - arraysize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, ReferencesParent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1153,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1153,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1157,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1158,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1158,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1159
      start: 1151
    functionDepth: 1
    functionLinenumber: 1151
    functionLinenumberEnd: 1159
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - FilePath::value
    - FPL
    - FPS
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, ConstructWithNUL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1163,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1163,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1166,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_path_unittest.cc:1167,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1168,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1168,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1170,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1170,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1172,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1172,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1174
      start: 1161
    functionDepth: 1
    functionLinenumber: 1161
    functionLinenumberEnd: 1174
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - FilePath::value
    - FPL
    - FPS
    - FilePath::Append
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, AppendWithNUL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1178,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1178,1
    - Dst: FPS
      Src: /src/brpc/test/file_path_unittest.cc:1181,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_path_unittest.cc:1182,1
    - Dst: FilePath::ReferencesParent
      Src: /src/brpc/test/file_path_unittest.cc:1182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1176
    functionDepth: 1
    functionLinenumber: 1176
    functionLinenumberEnd: 1183
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FPS
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::ReferencesParent
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, ReferencesParentWithNUL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1188,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1188,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1189,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1189,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1190,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1190,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1191,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1191,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1192,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1192,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1195,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1195,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1196,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1196,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1197,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1197,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1198,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1198,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1199,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1199,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1200,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1200,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1201,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1201,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1202,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1202,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1203,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1203,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1204,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1204,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1205,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1205,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1206,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1206,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1207,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1207,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1208,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1208,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1209,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1209,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1211,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1211,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1212,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1212,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1213,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1213,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1214,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1214,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1215,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1215,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1216,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1216,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1217,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1217,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1218,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1218,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1220,1
    - Dst: FilePath::NormalizePathSeparators
      Src: /src/brpc/test/file_path_unittest.cc:1222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1223,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_path_unittest.cc:1223,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1223,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1224,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1226
      start: 1186
    functionDepth: 1
    functionLinenumber: 1186
    functionLinenumberEnd: 1226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - arraysize
    - FilePath::NormalizePathSeparators
    - EXPECT_EQ
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, NormalizePathSeparators)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1231,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1232,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1233,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1234,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1235,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1237,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:1238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1239,1
    - Dst: FilePath::EndsWithSeparator
      Src: /src/brpc/test/file_path_unittest.cc:1239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1241
      start: 1229
    functionDepth: 1
    functionLinenumber: 1229
    functionLinenumberEnd: 1241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FPL
    - arraysize
    - FilePath
    - EXPECT_EQ
    - FilePath::EndsWithSeparator
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, EndsWithSeparator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1245,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1246,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1247,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1247,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1248,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1248,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1250,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:1251,1
    - Dst: FilePath
      Src: /src/brpc/test/file_path_unittest.cc:1252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1253,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1253,1
    - Dst: FilePath::AsEndingWithSeparator
      Src: /src/brpc/test/file_path_unittest.cc:1253,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1255
      start: 1243
    functionDepth: 1
    functionLinenumber: 1243
    functionLinenumberEnd: 1255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::AsEndingWithSeparator
    - FilePath::value
    - FPL
    - arraysize
    - FilePath
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, AsEndingWithSeparator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1260,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1261,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1262,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1263,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1264,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1265,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1266,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1267,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1268,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1269,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1270,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1271,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1272,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1273,1
    - Dst: FPL
      Src: /src/brpc/test/file_path_unittest.cc:1274,1
    - Dst: arraysize
      Src: /src/brpc/test/file_path_unittest.cc:1277,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_path_unittest.cc:1279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_path_unittest.cc:1280,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_path_unittest.cc:1281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1258
    functionDepth: 1
    functionLinenumber: 1258
    functionLinenumberEnd: 1283
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_path_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::value
    - FPL
    - arraysize
    - FilePath::IsContentUri
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, ContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:63,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:63,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 65
    functionName: check_tls_block
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::iobuf::get_tls_block_head
    - printf
    linkageType: ''
    returnType: void
    signature: void check_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: operator
      Src: /src/brpc/test/iobuf_unittest.cpp:71,1
    - Dst: insert
      Src: /src/brpc/test/iobuf_unittest.cpp:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 74
    functionName: debug_block_allocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - operator
    - insert
    linkageType: ''
    returnType: void
    signature: void * debug_block_allocate(size_t block_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/iobuf_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - b
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: debug_block_deallocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - erase
    linkageType: ''
    returnType: void
    signature: void debug_block_deallocate(void* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: is_debug_allocator_enabled
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_debug_allocator_enabled()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_debug_allocator_enabled
      Src: /src/brpc/test/iobuf_unittest.cpp:89,1
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:90,1
    - Dst: init
      Src: /src/brpc/test/iobuf_unittest.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 96
    functionName: install_debug_allocator
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_debug_allocator_enabled
    - butil::iobuf::remove_tls_block_chain
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void install_debug_allocator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:101,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:105,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - bin_name
    - filename
    - topn
    argTypes:
    - char*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: show_prof_and_rm
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - snprintf
    - system
    linkageType: ''
    returnType: void
    signature: void show_prof_and_rm(const char* bin_name, const char* filename, size_t
      topn)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_debug_allocator_enabled
      Src: /src/brpc/test/iobuf_unittest.cpp:109,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:113,1
    - Dst: seek
      Src: /src/brpc/test/iobuf_unittest.cpp:113,1
    - Dst: butil::iobuf::get_portal_next
      Src: /src/brpc/test/iobuf_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:118,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:118,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 120
    functionName: check_memory_leak
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_debug_allocator_enabled
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::iobuf::get_portal_next
    - butil::iobuf::get_tls_block_head
    - size
    - butil::iobuf::get_tls_block_count
    - seek
    linkageType: ''
    returnType: void
    signature: void check_memory_leak()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: IOBufTest::IOBufTest
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: ~IOBufTest()
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_memory_leak
      Src: /src/brpc/test/iobuf_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 2
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: IOBufTest::TearDown
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - check_memory_leak
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: to_str
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - to_string
    linkageType: ''
    returnType: std::string
    signature: std::string to_str(const butil::IOBuf& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:139,1
    - Dst: pipe
      Src: /src/brpc/test/iobuf_unittest.cpp:139,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:141,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:142,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:143,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - butil::IOPortal::IOPortal
    - close
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:147,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:150,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:150,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:155,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:156,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:160,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:161,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:161,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:161,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:162,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:167,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:167,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:171,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:174,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:174,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:176,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:183,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 146
    functionDepth: 2
    functionLinenumber: 146
    functionLinenumberEnd: 185
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - install_debug_allocator
    - butil::IOBuf::length
    - ASSERT_FALSE
    - std::string::clear
    - to_str
    - butil::IOBuf::append
    - std::string::erase
    - std::string::length
    - butil::IOBuf::pop_front
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, pop_front)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:188,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:191,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:191,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:196,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:197,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:200,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:201,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:202,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:202,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:202,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:203,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:208,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:208,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:212,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:215,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:215,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:216,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:217,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:224,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - install_debug_allocator
    - butil::IOBuf::length
    - ASSERT_FALSE
    - std::string::clear
    - to_str
    - butil::IOBuf::pop_back
    - std::string::resize
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::size
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, pop_back)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:229,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:232,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:232,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:233,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:234,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:235,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:237,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:238,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:239,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:241,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:242,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:249,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 250
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string
    - install_debug_allocator
    - butil::IOBuf::length
    - ASSERT_FALSE
    - to_str
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:261,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:261,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:262,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:263,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:269,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:269,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:270,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:271,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:276,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:280,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:281,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:283,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:292,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:292,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:293,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:294,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:294,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:294,1
    - Dst: free
      Src: /src/brpc/test/iobuf_unittest.cpp:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 252
    functionDepth: 2
    functionLinenumber: 252
    functionLinenumberEnd: 296
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - ASSERT_TRUE
    - free
    - butil::IOBuf::appendv
    - install_debug_allocator
    - butil::IOBuf::size
    - ASSERT_GT
    - arraysize
    - malloc
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appendv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:300,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:300,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:306,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:307,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:308,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:314,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:322,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:322,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/iobuf_unittest.cpp:324,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:324,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:325,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:338,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:338,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:338,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:343,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:345,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:346,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 348
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::reserve
    - ASSERT_GE
    - butil::IOBuf::size
    - std::string::data
    - butil::IOBuf::to_string
    - butil::IOBuf::pop_back
    - butil::IOBuf::unsafe_assign
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, reserve)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 354
    functionName: FakeBlock
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FakeBlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:358,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:365,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:369,1
    - Dst: FakeBlock::FakeBlock
      Src: /src/brpc/test/iobuf_unittest.cpp:369,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:378,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:379,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:380,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:380,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:384,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:385,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:386,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:387,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:388,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:394,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:395,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:396,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:397,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:404,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:406,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:407,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:413,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:414,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:414,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:420,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:421,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:421,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:422,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:423,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:423,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:431,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:432,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:434,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:435,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:436,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:436,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:436,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:438,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:439,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:439,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:441,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:446,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:448,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:449,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 357
    functionDepth: 2
    functionLinenumber: 357
    functionLinenumberEnd: 457
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::_back_ref
    - ARRAY_SIZE
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::max
    - butil::IOBuf::_push_back_ref
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::IOBuf::_ref_at
    - butil::IOBuf::length
    - FakeBlock::FakeBlock
    - butil::iobuf::block_shared_count
    - butil::IOBuf::_front_ref
    - butil::IOBuf::IOBuf
    - butil::IOBuf::_pop_front_ref
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, iobuf_as_queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:461,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:463,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:466,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:474,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:474,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:476,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:477,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:482,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:483,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:488,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:489,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:492,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:493,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:495,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:500,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:501,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:508,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:508,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:511,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:512,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:514,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:514,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:515,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:515,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:522,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:522,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:527,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:528,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:529,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 460
    functionDepth: 2
    functionLinenumber: 460
    functionLinenumberEnd: 531
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string::c_str
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - to_str
    - butil::IOBuf::pop_front
    - std::string::erase
    - std::string::length
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - LOG
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, iobuf_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:537,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:539,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:543,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:544,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:546,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:547,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:548,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:552,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:557,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:560,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:561,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 533
    functionDepth: 2
    functionLinenumber: 533
    functionLinenumberEnd: 565
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - ASSERT_NE
    - butil::IOBuf::resize
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, copy_and_assign)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:568,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:571,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:572,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:574,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:576,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:577,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:579,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:583,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:587,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:589,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:591,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:593,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 567
    functionDepth: 2
    functionLinenumber: 567
    functionLinenumberEnd: 594
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - install_debug_allocator
    - butil::IOBuf::clear
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:600,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:602,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:602,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:603,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:604,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:605,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:606,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:606,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 596
    functionDepth: 1
    functionLinenumber: 596
    functionLinenumberEnd: 607
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_and_cut_it_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:610,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:614,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:616,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:617,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:619,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:619,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:619,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:623,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:624,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:624,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:627,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:631,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:632,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:635,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:635,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:636,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:639,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:640,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:640,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:640,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:643,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:646,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 648
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - butil::IOBuf::size
    - ASSERT_GT
    - butil::IOBuf::copy_to
    - butil::IOBuf::append_to
    - butil::IOBuf::to_string
    - std::string::append
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, copy_to)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:651,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:653,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:657,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:660,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:661,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:665,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:666,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:667,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:668,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:672,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:673,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:674,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:674,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 650
    functionDepth: 2
    functionLinenumber: 650
    functionLinenumberEnd: 675
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - ASSERT_EQ
    - std::vector::push_back
    - install_debug_allocator
    - butil::IOBuf::length
    - to_str
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::vector::size
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_by_single_text_delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:678,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:680,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:684,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:684,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:687,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:688,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:692,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:692,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:693,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:694,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:695,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:699,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:700,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:701,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:701,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 702
      start: 677
    functionDepth: 2
    functionLinenumber: 677
    functionLinenumberEnd: 702
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - ASSERT_EQ
    - std::vector::push_back
    - install_debug_allocator
    - butil::IOBuf::length
    - to_str
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::vector::size
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_by_multiple_text_delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:705,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:707,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:708,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:714,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:714,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:714,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:716,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:717,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:720,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:722,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:722,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:722,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 723
      start: 704
    functionDepth: 2
    functionLinenumber: 704
    functionLinenumberEnd: 723
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - install_debug_allocator
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - to_str
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_a_lot_and_cut_them_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:728,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:733,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:736,1
    - Dst: butil::IOPortal::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:736,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:737,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:738,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:738,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:739,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:744,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:745,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:747,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:747,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:747,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:748,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:748,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:750,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:752,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:753,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:757,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:757,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:760,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 725
    functionDepth: 2
    functionLinenumber: 725
    functionLinenumberEnd: 761
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - append_from_file_descriptor
    - butil::IOPortal::cut_into_file_descriptor
    - printf
    - butil::IOPortal::append
    - butil::IOPortal::empty
    - install_debug_allocator
    - std::string::length
    - butil::IOPortal::IOPortal
    - LOG
    - std::string::push_back
    - socketpair
    - butil::IOPortal::pop_front
    - butil::IOPortal::length
    - to_str
    - close
    - std::string::erase
    - length
    - butil::make_non_blocking
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_into_fd_tiny)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:764,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:767,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:771,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:774,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:776,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:777,1
    - Dst: butil::IOPortal*::append
      Src: /src/brpc/test/iobuf_unittest.cpp:778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:782,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:782,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:783,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: butil::IOBuf::cut_multiple_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:787,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:788,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:789,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:795,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:796,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:796,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:798,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:799,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 763
    functionDepth: 2
    functionLinenumber: 763
    functionLinenumberEnd: 800
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - socketpair
    - butil::IOBuf::cut_multiple_into_file_descriptor
    - ASSERT_TRUE
    - install_debug_allocator
    - to_str
    - butil::IOPortal*::append
    - butil::IOPortal::append_from_file_descriptor
    - std::string::append
    - empty
    - std::string::length
    - butil::IOPortal::IOPortal
    - close
    - butil::make_non_blocking
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_multiple_into_fd_tiny)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:803,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:805,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:809,1
    - Dst: push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:810,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:811,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:813,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:814,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:815,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:816,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:817,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:817,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:823,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:823,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:824,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:824,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:825,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:829,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:834,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:834,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:837,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:837,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:837,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:840,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:840,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:843,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:843,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:848,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 802
    functionDepth: 2
    functionLinenumber: 802
    functionLinenumberEnd: 849
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - ASSERT_EQ
    - cut_into_file_descriptor
    - append_from_file_descriptor
    - printf
    - butil::IOPortal::append
    - butil::IOPortal::empty
    - install_debug_allocator
    - std::string::length
    - butil::IOPortal::IOPortal
    - size
    - rand
    - LOG
    - std::string::push_back
    - socketpair
    - std::string::clear
    - push_back
    - setsockopt
    - ASSERT_TRUE
    - butil::IOPortal::cutn
    - butil::IOPortal::length
    - to_str
    - close
    - empty
    - length
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_into_fd_a_lot_of_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:852,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:854,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:855,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:860,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:860,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:862,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:862,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:862,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:864,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:867,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:868,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:871,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:872,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:873,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:873,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:874,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 875
      start: 851
    functionDepth: 1
    functionLinenumber: 851
    functionLinenumberEnd: 875
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - ASSERT_EQ
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBuf::length
    - show_prof_and_rm
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_by_delim_perf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:879,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:881,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:882,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:885,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:891,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:893,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:894,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:895,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:898,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:900,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:900,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:901,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:901,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:902,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:905,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:907,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:911,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:912,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:913,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:916,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:916,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:921,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:925,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:926,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:927,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:928,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:930,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:934,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:935,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:936,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:938,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:938,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:940,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:941,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:943,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:944,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:944,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:945,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:947,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:951,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:952,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 953
      start: 878
    functionDepth: 1
    functionLinenumber: 878
    functionLinenumberEnd: 953
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - ASSERT_LT
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - show_prof_and_rm
    - butil::IOBuf::cutn
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - std::string::length
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    - butil::IOBuf::clear
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_perf)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:956,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:959,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:959,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:960,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:964,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:968,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/iobuf_unittest.cpp:976,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:979,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:980,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:980,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:983,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:983,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:984,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:986,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:988,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:989,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:989,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:991,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:992,1
    - Dst: strerror
      Src: /src/brpc/test/iobuf_unittest.cpp:992,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:993,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:996,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:999,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1001,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1002,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1003,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1004,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1005,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1008,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:1009,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:1010,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1011,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1014,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1015,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1017,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1018,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1019,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1022,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1022,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1023,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1023,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:1025,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1028,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1028,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1031,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:1031,1
    - Dst: remove
      Src: /src/brpc/test/iobuf_unittest.cpp:1034,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1038,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1039,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:1040,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 955
    functionDepth: 1
    functionLinenumber: 955
    functionLinenumberEnd: 1042
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - ASSERT_EQ
    - cut_into_file_descriptor
    - open
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - ARRAY_SIZE
    - butil::IOPortal::empty
    - butil::Timer::start
    - show_prof_and_rm
    - std::string::data
    - strerror
    - std::string::resize
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::TempFile::TempFile
    - butil::IOPortal::IOPortal
    - std::string::length
    - rand
    - remove
    - LOG
    - butil::Timer::Timer
    - butil::TempFile::fname
    - butil::Timer::n_elapsed
    - snprintf
    - system
    - std::vector::clear
    - std::vector::size
    - std::vector::reserve
    - butil::IOPortal::append_from_file_descriptor
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::Timer::stop
    - butil::IOPortal::cutn
    - butil::IOPortal::length
    - butil::TempFile::save_bin
    - close
    - empty
    - length
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_store_append_cut)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: proto::Misc::set_required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1047,1
    - Dst: proto::Misc::set_required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1048,1
    - Dst: proto::Misc::set_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1049,1
    - Dst: proto::Misc::set_required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1050,1
    - Dst: proto::Misc::set_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1051,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1054,1
    - Dst: proto::Misc::add_repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1055,1
    - Dst: proto::Misc::set_required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1057,1
    - Dst: proto::Misc::set_required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1058,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1060,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1062,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1064,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1064,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1065,1
    - Dst: proto::Misc::SerializeToZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1065,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1067,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1067,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1076,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1076,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1077,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1078,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1078,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1081,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1082,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1084,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1084,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1086,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1086,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1089,1
    - Dst: proto::Misc::ParseFromZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1091,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1091,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: proto::Misc::has_optional_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1096,1
    - Dst: proto::Misc::has_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: proto::Misc::has_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: proto::Misc::repeated_string_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1106,1
    - Dst: proto::Misc::has_optional_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1108,1
    - Dst: proto::Misc::has_optional_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1109
      start: 1044
    functionDepth: 1
    functionLinenumber: 1044
    functionLinenumberEnd: 1109
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - proto::Misc::set_required_uint64
    - proto::Misc::ParseFromZeroCopyStream
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - proto::Misc::set_required_enum
    - proto::Misc::required_enum
    - proto::Misc::set_required_bool
    - proto::Misc::required_uint64
    - proto::Misc::has_optional_bool
    - proto::Misc::required_bool
    - butil::IOBuf::append
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::IOBuf::IOBuf
    - proto::Misc::has_optional_uint64
    - proto::Misc::optional_string
    - proto::Misc::has_optional_enum
    - proto::Misc::optional_uint64
    - proto::Misc::repeated_string_size
    - ASSERT_FALSE
    - proto::Misc::set_optional_uint64
    - proto::Misc::set_required_string
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - proto::Misc::ByteSize
    - proto::Misc::required_string
    - proto::Misc::set_optional_string
    - proto::Misc::has_optional_int32
    - proto::Misc::repeated_string
    - butil::IOBuf::length
    - snprintf
    - proto::Misc::SerializeToZeroCopyStream
    - butil::IOBuf::pop_front
    - butil::IOBufAsZeroCopyInputStream::BackUp
    - ASSERT_TRUE
    - proto::Misc::required_int32
    - proto::Misc::set_required_int32
    - proto::Misc::has_optional_string
    - proto::Misc::add_repeated_string
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, conversion_with_protobuf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1115,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1125,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1127,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1130,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1132,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1132,1
    - Dst: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1135,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1138,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1141,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1141,1
    - Dst: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1145,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1148,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1150,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1156,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1158,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1160,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1163
      start: 1111
    functionDepth: 1
    functionLinenumber: 1111
    functionLinenumberEnd: 1163
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - ASSERT_TRUE
    - butil::iobuf::remove_tls_block_chain
    - Next
    - ASSERT_EQ
    - ByteCount
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, extended_backup)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1173,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1175,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1178,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1179,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1179,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1182,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1183,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1184,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1189,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1190,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1195,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1196,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1196,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1201,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1202,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1202,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1203,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1207,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1207,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1208,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1210,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1211,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1212
      start: 1165
    functionDepth: 1
    functionLinenumber: 1165
    functionLinenumberEnd: 1212
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block_num
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufAsZeroCopyOutputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - butil::IOBuf::size
    - butil::IOBuf::resize
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, backup_iobuf_never_called_next)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyOutputStream*::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1219
      start: 1214
    functionDepth: 0
    functionLinenumber: 1214
    functionLinenumberEnd: 1219
    functionName: backup_thread
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyOutputStream*::BackUp
    linkageType: ''
    returnType: void
    signature: void *backup_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1222,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1228,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1231,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1231,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1238,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1241,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1241,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1242
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufAsZeroCopyOutputStream::Next
    - pthread_join
    - pthread_create
    - butil::IOBuf::length
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, backup_in_another_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1245,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1253,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1253,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1261,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1262,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1262,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1244
    functionDepth: 1
    functionLinenumber: 1244
    functionLinenumberEnd: 1263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufAsZeroCopyOutputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::iobuf::get_tls_block_head
    - static_cast<size_t>
    - butil::IOBuf::length
    - butil::IOBuf::_front_ref
    - butil::iobuf::block_cap
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, own_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - x2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1266
      start: 1266
    functionDepth: 0
    functionLinenumber: 1266
    functionLinenumberEnd: 1266
    functionName: Foo1
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo1(int x2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' foo1'
    argTypes:
    - std::ostream
    - Foo1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1274
    functionDepth: 0
    functionLinenumber: 1274
    functionLinenumberEnd: 1276
    functionName: '& operator<<(std::ostream& os, const Foo1& foo1)'
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo1& foo1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: foo1::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' foo2'
    argTypes:
    - std::ostream
    - Foo2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1278
    functionDepth: 0
    functionLinenumber: 1278
    functionLinenumberEnd: 1283
    functionName: '& operator<<(std::ostream& os, const Foo2& foo2)'
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - foo1::size
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo2& foo2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:1286,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/test/iobuf_unittest.cpp:1288,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1298,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1301,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1301,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1305,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1305,1
    - Dst: Foo2::foo1::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: Foo1
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1317,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1318,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1320,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1320,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1325
      start: 1285
    functionDepth: 1
    functionLinenumber: 1285
    functionLinenumberEnd: 1325
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - butil::IOBufBuilder::buf
    - butil::IOBufBuilder::move_to
    - ASSERT_TRUE
    - Foo1
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::to_string
    - Foo2::foo1::push_back
    - butil::IOBuf::IOBuf
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/iobuf_unittest.cpp:1329,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1330,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1330,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1331,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1331,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1331,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1332,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: butil::IOPortal::fetch
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1327
    functionDepth: 1
    functionLinenumber: 1327
    functionLinenumberEnd: 1343
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::TempFile::fname
    - open
    - butil::IOPortal::pappend_from_file_descriptor
    - butil::IOPortal::fetch
    - butil::IOPortal::length
    - butil::TempFile::save
    - butil::IOPortal::cut_into_file_descriptor
    - butil::TempFile::TempFile
    - butil::IOPortal::IOPortal
    - berror
    - butil::IOPortal::append
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_from_fd_with_offset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/iobuf_unittest.cpp:1351,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1355,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1356,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1357,1
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1357,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1361
      start: 1348
    functionDepth: 1
    functionLinenumber: 1348
    functionLinenumberEnd: 1361
    functionName: cut_into_fd
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::pcut_into_file_descriptor
    - fetch_add
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void * cut_into_fd(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/test/iobuf_unittest.cpp:1364,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1368,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1368,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1370,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1370,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1372,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1373,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1375,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1378,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1380,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1381,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1383
      start: 1363
    functionDepth: 1
    functionLinenumber: 1363
    functionLinenumberEnd: 1383
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ARRAY_SIZE
    - ASSERT_EQ
    - pthread_join
    - open
    - pthread_create
    - butil::IOPortal::pappend_from_file_descriptor
    - butil::IOPortal::cutn
    - store
    - butil::IOPortal::IOPortal
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_into_fd_with_offset_multithreaded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1388,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1389,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1391,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1392,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1394,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1396,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1396,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1398,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1399,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1399,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1403
      start: 1385
    functionDepth: 1
    functionLinenumber: 1385
    functionLinenumberEnd: 1403
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block_num
    - ASSERT_TRUE
    - butil::IOBuf::backing_block
    - std::string::reserve
    - ASSERT_FALSE
    - std::string::append
    - butil::StringPiece::data
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - std::string::size
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, slice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1406,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1407,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1408,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1409,1
    - Dst: std::swap
      Src: /src/brpc/test/iobuf_unittest.cpp:1410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1411,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1412,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1413
      start: 1405
    functionDepth: 1
    functionLinenumber: 1405
    functionLinenumberEnd: 1413
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::equals
    - std::swap
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, swap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1416,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1417,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1419,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1420,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1421,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1424,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1425,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1425,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1426,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1427,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1428
      start: 1415
    functionDepth: 1
    functionLinenumber: 1415
    functionLinenumberEnd: 1428
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::equals
    - butil::IOBuf::length
    - std::string::resize
    - butil::IOBuf::resize
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, resize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1431,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1432,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1439,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1440,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1443,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1444,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1448,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1455,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1455,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1456,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1457
      start: 1430
    functionDepth: 1
    functionLinenumber: 1430
    functionLinenumberEnd: 1457
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, iterate_bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1461,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1462,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1463,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1464,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1466,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1469,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1473,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1474,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1477,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1477,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1478,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1480,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1481,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1482
      start: 1459
    functionDepth: 1
    functionLinenumber: 1459
    functionLinenumberEnd: 1482
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBufAppender::move_to
    - butil::IOBufAppender::buf
    - butil::IOBufAppender::IOBufAppender
    - snprintf
    - std::string::append
    - butil::IOBufAppender::append
    - butil::IOBuf::IOBuf
    - butil::IOBufAppender::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appender)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1486,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1487,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1488,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1490,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1492,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1494,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1495,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1496,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1498,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1500,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1502,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1502,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1503,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1509,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1510,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1512,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1514,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1516,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1517,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1519,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1521,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1523,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1524,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1526,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1528,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1530,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1530,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1531,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1532,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1533,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1484
    functionDepth: 1
    functionLinenumber: 1484
    functionLinenumberEnd: 1534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::push_back
    - std::string::append
    - butil::IOBufAppender::append
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    - std::string::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appender_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1537,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1540,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1541,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1558,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1559,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1559,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1560,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1561,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1562,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1563
      start: 1536
    functionDepth: 1
    functionLinenumber: 1536
    functionLinenumberEnd: 1563
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - ASSERT_STREQ
    - butil::ToPrintable::ToPrintable
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, printed_as_binary)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1566,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1568,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1568,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1573,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1574,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1575,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1576,1
    - Dst: butil::IOBufBytesIterator::copy_and_forward
      Src: /src/brpc/test/iobuf_unittest.cpp:1578,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:1579,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1580,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1583,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1583,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1584
      start: 1565
    functionDepth: 1
    functionLinenumber: 1565
    functionLinenumberEnd: 1584
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBuf::equals
    - butil::IOBuf::length
    - ASSERT_GT
    - butil::IOBuf::cutn
    - butil::IOBufBytesIterator::copy_and_forward
    - butil::fast_rand_in
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, copy_to_string_from_iterator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/test/iobuf_unittest.cpp:1588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1590
      start: 1587
    functionDepth: 0
    functionLinenumber: 1587
    functionLinenumberEnd: 1590
    functionName: my_free
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void my_free(void* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1593,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1603,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1604,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1604,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1606,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1609,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1617,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1620
      start: 1592
    functionDepth: 1
    functionLinenumber: 1592
    functionLinenumberEnd: 1620
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - butil::iobuf::block_shared_count
    - butil::IOBuf::cutn
    - butil::IOBuf::_front_ref
    - malloc
    - butil::IOBuf::append_user_data
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_user_data_and_consume)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1623,1
    - Dst: char::char
      Src: /src/brpc/test/iobuf_unittest.cpp:1626,1
    - Dst: std::default_delete<char[]>
      Src: /src/brpc/test/iobuf_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1628,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1628,1
    - Dst: std::shared_ptr::get
      Src: /src/brpc/test/iobuf_unittest.cpp:1629,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1639,1
    - Dst: std::abort
      Src: /src/brpc/test/iobuf_unittest.cpp:1643,1
    - Dst: reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1656,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1656,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1658,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1659,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1659,1
    - Dst: std::shared_ptr::reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1665,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1665,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: std::weak_ptr::expired
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1674,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1677
      start: 1622
    functionDepth: 1
    functionLinenumber: 1622
    functionLinenumberEnd: 1677
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::shared_ptr::get
    - butil::IOBuf::IOBuf
    - std::shared_ptr::reset
    - reset
    - butil::IOBuf::_front_ref
    - butil::IOBuf::append_user_data
    - butil::IOBuf::empty
    - std::move
    - std::default_delete<char[]>
    - butil::iobuf::block_shared_count
    - butil::IOBuf::size
    - char::char
    - std::abort
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::cutn
    - std::weak_ptr::expired
    - std::shared_ptr::use_count
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_stateful_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1639,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - partial
    - ' incr'
    argTypes:
    - std::shared_ptr<char>
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1639
      start: 1639
    functionDepth: 1
    functionLinenumber: 1639
    functionLinenumberEnd: 1639
    functionName: Deleter
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void Deleter(std::shared_ptr<char> partial, int& incr)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1640
    functionDepth: 0
    functionLinenumber: 1640
    functionLinenumberEnd: 1642
    functionName: ~Deleter()
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::abort
      Src: /src/brpc/test/iobuf_unittest.cpp:1643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1643
    functionDepth: 0
    functionLinenumber: 1643
    functionLinenumberEnd: 1643
    functionName: Deleter
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::abort
    linkageType: ''
    returnType: void
    signature: void Deleter(const Deleter&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1644
      start: 1644
    functionDepth: 0
    functionLinenumber: 1644
    functionLinenumberEnd: 1644
    functionName: Deleter
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Deleter(Deleter&&) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1646,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1648
      start: 1645
    functionDepth: 0
    functionLinenumber: 1645
    functionLinenumberEnd: 1648
    functionName: operator()(void*)
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void operator()(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1680,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1690,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1690,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1691,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1691,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1692,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1693,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1699,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1700,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1702,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1702,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1704,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1706,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1706,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1707,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1710,1
    - Dst: to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1713,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1719,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1720
      start: 1679
    functionDepth: 1
    functionLinenumber: 1679
    functionLinenumberEnd: 1720
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - butil::iobuf::block_shared_count
    - butil::IOBuf::cutn
    - butil::IOBuf::_front_ref
    - malloc
    - butil::IOBuf::append_user_data
    - to_string
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_user_data_and_share)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1723,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1728,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1729,1
    - Dst: butil::IOBuf::append_user_data_with_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1729,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1732,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1732,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1734,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1734,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1735,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1722
    functionDepth: 1
    functionLinenumber: 1722
    functionLinenumberEnd: 1738
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::append_user_data_with_meta
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::get_first_data_meta
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_user_data_with_meta)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1741,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1743,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1743,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1745,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1746,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1747,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1748,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1751,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1752,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1753,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1753,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1755,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1756,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1760,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1760,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1761,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1762,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1763
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1763
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::block_size
    - butil::iobuf::release_tls_block_chain
    - butil::iobuf::acquire_tls_block
    - butil::iobuf::share_tls_block
    - butil::iobuf::block_cap
    - butil::IOBuf::push_back
    - ASSERT_NE
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, share_tls_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1766,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1767,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1768,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1769,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1773,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1773,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1776,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1777,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1777,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1781,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1781,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1785,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1785,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1765
    functionDepth: 1
    functionLinenumber: 1765
    functionLinenumberEnd: 1787
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::get_tls_block_head
    - butil::iobuf::block_size
    - butil::iobuf::release_tls_block_chain
    - butil::iobuf::get_tls_block_count
    - butil::iobuf::acquire_tls_block
    - butil::iobuf::block_cap
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, acquire_tls_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1792,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1793,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1798,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1799,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1799,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1803,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1807,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1808,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1814,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1814,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1818,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1822,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1823,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1828,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1829,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1833,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1837,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1838,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1844,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1848,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1853,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1857,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1858,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1864,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1865,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1868,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1872,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1873,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1880,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1881,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1882,1
    - Dst: std::memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: const_cast<void*>
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1888,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    - Dst: butil::IOReserveAlignedBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1891
      start: 1789
    functionDepth: 1
    functionLinenumber: 1789
    functionLinenumberEnd: 1891
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string::size
    - const_cast<void*>
    - std::memcpy
    - butil::IOBufAsZeroCopyInputStream::Next
    - std::string::data
    - ASSERT_NE
    - butil::IOReserveAlignedBuf::to_string
    - std::stringstream::str
    - butil::IOReserveAlignedBuf::reserve
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, reserve_aligned)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:63,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:63,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 65
    functionName: check_tls_block
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::iobuf::get_tls_block_head
    - printf
    linkageType: ''
    returnType: void
    signature: void check_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: operator
      Src: /src/brpc/test/iobuf_unittest.cpp:71,1
    - Dst: insert
      Src: /src/brpc/test/iobuf_unittest.cpp:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 74
    functionName: debug_block_allocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - operator
    - insert
    linkageType: ''
    returnType: void
    signature: void * debug_block_allocate(size_t block_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/iobuf_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - b
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: debug_block_deallocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - erase
    linkageType: ''
    returnType: void
    signature: void debug_block_deallocate(void* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: is_debug_allocator_enabled
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_debug_allocator_enabled()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_debug_allocator_enabled
      Src: /src/brpc/test/iobuf_unittest.cpp:89,1
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:90,1
    - Dst: init
      Src: /src/brpc/test/iobuf_unittest.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 96
    functionName: install_debug_allocator
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 14
    functionsReached:
    - is_debug_allocator_enabled
    - butil::iobuf::remove_tls_block_chain
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void install_debug_allocator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:101,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:105,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - bin_name
    - filename
    - topn
    argTypes:
    - char*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: show_prof_and_rm
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - snprintf
    - system
    linkageType: ''
    returnType: void
    signature: void show_prof_and_rm(const char* bin_name, const char* filename, size_t
      topn)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_debug_allocator_enabled
      Src: /src/brpc/test/iobuf_unittest.cpp:109,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:113,1
    - Dst: seek
      Src: /src/brpc/test/iobuf_unittest.cpp:113,1
    - Dst: butil::iobuf::get_portal_next
      Src: /src/brpc/test/iobuf_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:118,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:118,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 120
    functionName: check_memory_leak
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 1
    functionsReached:
    - is_debug_allocator_enabled
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::iobuf::get_portal_next
    - butil::iobuf::get_tls_block_head
    - size
    - butil::iobuf::get_tls_block_count
    - seek
    linkageType: ''
    returnType: void
    signature: void check_memory_leak()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: IOBufTest::IOBufTest
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: ~IOBufTest()
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_memory_leak
      Src: /src/brpc/test/iobuf_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 2
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: IOBufTest::TearDown
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - check_memory_leak
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: to_str
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 10
    functionsReached:
    - to_string
    linkageType: ''
    returnType: std::string
    signature: std::string to_str(const butil::IOBuf& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:139,1
    - Dst: pipe
      Src: /src/brpc/test/iobuf_unittest.cpp:139,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:141,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:142,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:143,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - butil::IOPortal::IOPortal
    - close
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:147,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:150,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:150,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:155,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:156,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:160,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:161,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:161,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:161,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:162,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:167,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:167,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:171,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:174,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:174,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:176,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:183,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 146
    functionDepth: 2
    functionLinenumber: 146
    functionLinenumberEnd: 185
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - install_debug_allocator
    - butil::IOBuf::length
    - ASSERT_FALSE
    - std::string::clear
    - to_str
    - butil::IOBuf::append
    - std::string::erase
    - std::string::length
    - butil::IOBuf::pop_front
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, pop_front)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:188,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:191,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:191,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:196,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:197,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:200,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:201,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:202,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:202,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:202,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:203,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:208,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:208,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:212,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:215,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:215,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:216,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:217,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:224,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - install_debug_allocator
    - butil::IOBuf::length
    - ASSERT_FALSE
    - std::string::clear
    - to_str
    - butil::IOBuf::pop_back
    - std::string::resize
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::size
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, pop_back)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:229,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:232,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:232,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:233,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:234,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:235,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:237,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:238,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:239,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:241,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:242,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:249,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 250
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string
    - install_debug_allocator
    - butil::IOBuf::length
    - ASSERT_FALSE
    - to_str
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:261,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:261,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:262,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:263,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:269,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:269,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:270,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:271,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:276,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:280,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:281,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:283,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:292,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:292,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:293,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:294,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:294,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:294,1
    - Dst: free
      Src: /src/brpc/test/iobuf_unittest.cpp:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 252
    functionDepth: 2
    functionLinenumber: 252
    functionLinenumberEnd: 296
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - ASSERT_TRUE
    - free
    - butil::IOBuf::appendv
    - install_debug_allocator
    - butil::IOBuf::size
    - ASSERT_GT
    - arraysize
    - malloc
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appendv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:300,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:300,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:306,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:307,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:308,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:314,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:322,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:322,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/iobuf_unittest.cpp:324,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:324,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:325,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:338,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:338,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:338,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:343,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:345,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:346,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 348
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::reserve
    - ASSERT_GE
    - butil::IOBuf::size
    - std::string::data
    - butil::IOBuf::to_string
    - butil::IOBuf::pop_back
    - butil::IOBuf::unsafe_assign
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, reserve)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 354
    functionName: FakeBlock
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FakeBlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:358,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:365,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:369,1
    - Dst: FakeBlock::FakeBlock
      Src: /src/brpc/test/iobuf_unittest.cpp:369,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:378,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:379,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:380,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:380,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:384,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:385,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:386,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:387,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:388,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:394,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:395,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:396,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:397,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:404,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:406,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:407,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:413,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:414,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:414,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:420,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:421,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:421,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:422,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:423,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:423,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:431,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:432,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:434,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:435,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:436,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:436,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:436,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:438,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:439,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:439,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:441,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:446,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:448,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:449,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 357
    functionDepth: 2
    functionLinenumber: 357
    functionLinenumberEnd: 457
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::_back_ref
    - ARRAY_SIZE
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::max
    - butil::IOBuf::_push_back_ref
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::IOBuf::_ref_at
    - butil::IOBuf::length
    - FakeBlock::FakeBlock
    - butil::iobuf::block_shared_count
    - butil::IOBuf::_front_ref
    - butil::IOBuf::IOBuf
    - butil::IOBuf::_pop_front_ref
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, iobuf_as_queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:461,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:463,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:466,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:474,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:474,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:476,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:477,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:482,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:483,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:488,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:489,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:492,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:493,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:495,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:500,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:501,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:508,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:508,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:511,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:512,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:514,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:514,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:515,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:515,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:522,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:522,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:527,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:528,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:529,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 460
    functionDepth: 2
    functionLinenumber: 460
    functionLinenumberEnd: 531
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string::c_str
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - to_str
    - butil::IOBuf::pop_front
    - std::string::erase
    - std::string::length
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - LOG
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, iobuf_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:537,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:539,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:543,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:544,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:546,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:547,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:548,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:552,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:557,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:560,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:561,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 533
    functionDepth: 2
    functionLinenumber: 533
    functionLinenumberEnd: 565
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - ASSERT_NE
    - butil::IOBuf::resize
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, copy_and_assign)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:568,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:571,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:572,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:574,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:576,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:577,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:579,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:583,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:587,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:589,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:591,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:593,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 567
    functionDepth: 2
    functionLinenumber: 567
    functionLinenumberEnd: 594
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - install_debug_allocator
    - butil::IOBuf::clear
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:600,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:602,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:602,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:603,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:604,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:605,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:606,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:606,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 596
    functionDepth: 1
    functionLinenumber: 596
    functionLinenumberEnd: 607
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_and_cut_it_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:610,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:614,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:616,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:617,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:619,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:619,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:619,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:623,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:624,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:624,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:627,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:631,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:632,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:635,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:635,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:636,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:639,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:640,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:640,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:640,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:643,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:646,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 648
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - butil::IOBuf::size
    - ASSERT_GT
    - butil::IOBuf::copy_to
    - butil::IOBuf::append_to
    - butil::IOBuf::to_string
    - std::string::append
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, copy_to)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:651,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:653,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:657,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:660,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:661,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:665,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:666,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:667,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:668,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:672,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:673,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:674,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:674,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 650
    functionDepth: 2
    functionLinenumber: 650
    functionLinenumberEnd: 675
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - ASSERT_EQ
    - std::vector::push_back
    - install_debug_allocator
    - butil::IOBuf::length
    - to_str
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::vector::size
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_by_single_text_delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:678,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:680,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:684,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:684,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:687,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:688,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:692,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:692,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:693,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:694,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:695,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:699,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:700,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:701,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:701,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 702
      start: 677
    functionDepth: 2
    functionLinenumber: 677
    functionLinenumberEnd: 702
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - ASSERT_EQ
    - std::vector::push_back
    - install_debug_allocator
    - butil::IOBuf::length
    - to_str
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::vector::size
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_by_multiple_text_delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:705,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:707,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:708,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:714,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:714,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:714,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:716,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:717,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:720,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:722,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:722,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:722,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 723
      start: 704
    functionDepth: 2
    functionLinenumber: 704
    functionLinenumberEnd: 723
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - install_debug_allocator
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - to_str
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_a_lot_and_cut_them_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:728,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:733,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:736,1
    - Dst: butil::IOPortal::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:736,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:737,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:738,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:738,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:739,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:744,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:745,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:747,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:747,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:747,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:748,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:748,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:750,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:752,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:753,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:757,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:757,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:760,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 725
    functionDepth: 2
    functionLinenumber: 725
    functionLinenumberEnd: 761
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - append_from_file_descriptor
    - butil::IOPortal::cut_into_file_descriptor
    - printf
    - butil::IOPortal::append
    - butil::IOPortal::empty
    - install_debug_allocator
    - std::string::length
    - butil::IOPortal::IOPortal
    - LOG
    - std::string::push_back
    - socketpair
    - butil::IOPortal::pop_front
    - butil::IOPortal::length
    - to_str
    - close
    - std::string::erase
    - length
    - butil::make_non_blocking
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_into_fd_tiny)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:764,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:767,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:771,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:774,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:776,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:777,1
    - Dst: butil::IOPortal*::append
      Src: /src/brpc/test/iobuf_unittest.cpp:778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:782,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:782,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:783,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: butil::IOBuf::cut_multiple_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:787,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:788,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:789,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:795,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:796,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:796,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:798,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:799,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 763
    functionDepth: 2
    functionLinenumber: 763
    functionLinenumberEnd: 800
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - socketpair
    - butil::IOBuf::cut_multiple_into_file_descriptor
    - ASSERT_TRUE
    - install_debug_allocator
    - to_str
    - butil::IOPortal*::append
    - butil::IOPortal::append_from_file_descriptor
    - std::string::append
    - empty
    - std::string::length
    - butil::IOPortal::IOPortal
    - close
    - butil::make_non_blocking
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_multiple_into_fd_tiny)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:803,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:805,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:809,1
    - Dst: push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:810,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:811,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:813,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:814,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:815,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:816,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:817,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:817,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:823,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:823,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:824,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:824,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:825,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:829,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:834,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:834,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:837,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:837,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:837,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:840,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:840,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:843,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:843,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:848,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 802
    functionDepth: 2
    functionLinenumber: 802
    functionLinenumberEnd: 849
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - ASSERT_EQ
    - cut_into_file_descriptor
    - append_from_file_descriptor
    - printf
    - butil::IOPortal::append
    - butil::IOPortal::empty
    - install_debug_allocator
    - std::string::length
    - butil::IOPortal::IOPortal
    - size
    - rand
    - LOG
    - std::string::push_back
    - socketpair
    - std::string::clear
    - push_back
    - setsockopt
    - ASSERT_TRUE
    - butil::IOPortal::cutn
    - butil::IOPortal::length
    - to_str
    - close
    - empty
    - length
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_into_fd_a_lot_of_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:852,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:854,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:855,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:860,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:860,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:862,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:862,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:862,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:864,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:867,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:868,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:871,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:872,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:873,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:873,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:874,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 875
      start: 851
    functionDepth: 1
    functionLinenumber: 851
    functionLinenumberEnd: 875
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - ASSERT_EQ
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBuf::length
    - show_prof_and_rm
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - std::string::length
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_by_delim_perf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:879,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:881,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:882,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:885,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:891,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:893,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:894,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:895,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:898,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:900,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:900,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:901,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:901,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:902,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:905,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:907,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:911,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:912,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:913,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:916,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:916,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:921,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:925,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:926,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:927,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:928,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:930,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:934,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:935,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:936,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:938,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:938,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:940,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:941,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:943,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:944,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:944,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:945,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:947,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:951,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:952,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 953
      start: 878
    functionDepth: 1
    functionLinenumber: 878
    functionLinenumberEnd: 953
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - ASSERT_LT
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - show_prof_and_rm
    - butil::IOBuf::cutn
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - std::string::length
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    - butil::IOBuf::clear
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_perf)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:956,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:959,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:959,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:960,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:964,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:968,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/iobuf_unittest.cpp:976,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:977,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:979,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:980,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:980,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:983,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:983,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:984,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:986,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:988,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:989,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:989,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:991,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:992,1
    - Dst: strerror
      Src: /src/brpc/test/iobuf_unittest.cpp:992,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:993,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:996,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:999,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1001,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1002,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1003,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1004,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1005,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1008,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:1009,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:1010,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1011,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1014,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1015,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1017,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1018,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1019,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1022,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1022,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1023,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1023,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:1025,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1028,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1028,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1031,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:1031,1
    - Dst: remove
      Src: /src/brpc/test/iobuf_unittest.cpp:1034,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1038,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1039,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:1040,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 955
    functionDepth: 1
    functionLinenumber: 955
    functionLinenumberEnd: 1042
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - ASSERT_EQ
    - cut_into_file_descriptor
    - open
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - ARRAY_SIZE
    - butil::IOPortal::empty
    - butil::Timer::start
    - show_prof_and_rm
    - std::string::data
    - strerror
    - std::string::resize
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::TempFile::TempFile
    - butil::IOPortal::IOPortal
    - std::string::length
    - rand
    - remove
    - LOG
    - butil::Timer::Timer
    - butil::TempFile::fname
    - butil::Timer::n_elapsed
    - snprintf
    - system
    - std::vector::clear
    - std::vector::size
    - std::vector::reserve
    - butil::IOPortal::append_from_file_descriptor
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::Timer::stop
    - butil::IOPortal::cutn
    - butil::IOPortal::length
    - butil::TempFile::save_bin
    - close
    - empty
    - length
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_store_append_cut)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: proto::Misc::set_required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1047,1
    - Dst: proto::Misc::set_required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1048,1
    - Dst: proto::Misc::set_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1049,1
    - Dst: proto::Misc::set_required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1050,1
    - Dst: proto::Misc::set_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1051,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1054,1
    - Dst: proto::Misc::add_repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1055,1
    - Dst: proto::Misc::set_required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1057,1
    - Dst: proto::Misc::set_required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1058,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1060,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1062,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1064,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1064,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1065,1
    - Dst: proto::Misc::SerializeToZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1065,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1067,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1067,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1076,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1076,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1077,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1078,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1078,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1081,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1082,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1084,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1084,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1086,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1086,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1089,1
    - Dst: proto::Misc::ParseFromZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1091,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1091,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: proto::Misc::has_optional_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1096,1
    - Dst: proto::Misc::has_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: proto::Misc::has_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: proto::Misc::repeated_string_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1106,1
    - Dst: proto::Misc::has_optional_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1108,1
    - Dst: proto::Misc::has_optional_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1109
      start: 1044
    functionDepth: 1
    functionLinenumber: 1044
    functionLinenumberEnd: 1109
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - proto::Misc::set_required_uint64
    - proto::Misc::ParseFromZeroCopyStream
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - proto::Misc::set_required_enum
    - proto::Misc::required_enum
    - proto::Misc::set_required_bool
    - proto::Misc::required_uint64
    - proto::Misc::has_optional_bool
    - proto::Misc::required_bool
    - butil::IOBuf::append
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::IOBuf::IOBuf
    - proto::Misc::has_optional_uint64
    - proto::Misc::optional_string
    - proto::Misc::has_optional_enum
    - proto::Misc::optional_uint64
    - proto::Misc::repeated_string_size
    - ASSERT_FALSE
    - proto::Misc::set_optional_uint64
    - proto::Misc::set_required_string
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - proto::Misc::ByteSize
    - proto::Misc::required_string
    - proto::Misc::set_optional_string
    - proto::Misc::has_optional_int32
    - proto::Misc::repeated_string
    - butil::IOBuf::length
    - snprintf
    - proto::Misc::SerializeToZeroCopyStream
    - butil::IOBuf::pop_front
    - butil::IOBufAsZeroCopyInputStream::BackUp
    - ASSERT_TRUE
    - proto::Misc::required_int32
    - proto::Misc::set_required_int32
    - proto::Misc::has_optional_string
    - proto::Misc::add_repeated_string
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, conversion_with_protobuf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1115,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1125,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1127,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1130,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1132,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1132,1
    - Dst: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1135,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1138,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1141,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1141,1
    - Dst: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1145,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1148,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1150,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1156,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1158,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1160,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1163
      start: 1111
    functionDepth: 1
    functionLinenumber: 1111
    functionLinenumberEnd: 1163
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - ASSERT_TRUE
    - butil::iobuf::remove_tls_block_chain
    - Next
    - ASSERT_EQ
    - ByteCount
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, extended_backup)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1173,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1175,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1178,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1179,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1179,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1182,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1183,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1184,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1189,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1190,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1195,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1196,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1196,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1201,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1202,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1202,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1203,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1207,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1207,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1208,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1210,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1211,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1212
      start: 1165
    functionDepth: 1
    functionLinenumber: 1165
    functionLinenumberEnd: 1212
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block_num
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufAsZeroCopyOutputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - butil::IOBuf::size
    - butil::IOBuf::resize
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, backup_iobuf_never_called_next)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyOutputStream*::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1219
      start: 1214
    functionDepth: 0
    functionLinenumber: 1214
    functionLinenumberEnd: 1219
    functionName: backup_thread
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyOutputStream*::BackUp
    linkageType: ''
    returnType: void
    signature: void *backup_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1222,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1228,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1231,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1231,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1238,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1241,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1241,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1242
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufAsZeroCopyOutputStream::Next
    - pthread_join
    - pthread_create
    - butil::IOBuf::length
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, backup_in_another_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1245,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1253,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1253,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1261,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1262,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1262,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1244
    functionDepth: 1
    functionLinenumber: 1244
    functionLinenumberEnd: 1263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufAsZeroCopyOutputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::iobuf::get_tls_block_head
    - static_cast<size_t>
    - butil::IOBuf::length
    - butil::IOBuf::_front_ref
    - butil::iobuf::block_cap
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, own_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - x2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1266
      start: 1266
    functionDepth: 0
    functionLinenumber: 1266
    functionLinenumberEnd: 1266
    functionName: Foo1
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo1(int x2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' foo1'
    argTypes:
    - std::ostream
    - Foo1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1274
    functionDepth: 0
    functionLinenumber: 1274
    functionLinenumberEnd: 1276
    functionName: '& operator<<(std::ostream& os, const Foo1& foo1)'
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo1& foo1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: foo1::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' foo2'
    argTypes:
    - std::ostream
    - Foo2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1278
    functionDepth: 0
    functionLinenumber: 1278
    functionLinenumberEnd: 1283
    functionName: '& operator<<(std::ostream& os, const Foo2& foo2)'
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - foo1::size
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo2& foo2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::reset_blockmem_allocate_and_deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:1286,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/test/iobuf_unittest.cpp:1288,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1298,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1301,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1301,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1305,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1305,1
    - Dst: Foo2::foo1::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: Foo1
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1317,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1318,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1320,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1320,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1325
      start: 1285
    functionDepth: 1
    functionLinenumber: 1285
    functionLinenumberEnd: 1325
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - butil::IOBufBuilder::buf
    - butil::IOBufBuilder::move_to
    - ASSERT_TRUE
    - Foo1
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::to_string
    - Foo2::foo1::push_back
    - butil::IOBuf::IOBuf
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/iobuf_unittest.cpp:1329,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1330,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1330,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1331,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1331,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1331,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1332,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: butil::IOPortal::fetch
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1327
    functionDepth: 1
    functionLinenumber: 1327
    functionLinenumberEnd: 1343
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::TempFile::fname
    - open
    - butil::IOPortal::pappend_from_file_descriptor
    - butil::IOPortal::fetch
    - butil::IOPortal::length
    - butil::TempFile::save
    - butil::IOPortal::cut_into_file_descriptor
    - butil::TempFile::TempFile
    - butil::IOPortal::IOPortal
    - berror
    - butil::IOPortal::append
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_from_fd_with_offset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/iobuf_unittest.cpp:1351,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1355,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1356,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1357,1
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1357,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1361
      start: 1348
    functionDepth: 1
    functionLinenumber: 1348
    functionLinenumberEnd: 1361
    functionName: cut_into_fd
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::pcut_into_file_descriptor
    - fetch_add
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void * cut_into_fd(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/test/iobuf_unittest.cpp:1364,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1368,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1368,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1370,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1370,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1372,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1373,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1375,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1378,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1380,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1381,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1383
      start: 1363
    functionDepth: 1
    functionLinenumber: 1363
    functionLinenumberEnd: 1383
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ARRAY_SIZE
    - ASSERT_EQ
    - pthread_join
    - open
    - pthread_create
    - butil::IOPortal::pappend_from_file_descriptor
    - butil::IOPortal::cutn
    - store
    - butil::IOPortal::IOPortal
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, cut_into_fd_with_offset_multithreaded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1388,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1389,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1391,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1392,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1394,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1396,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1396,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1398,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1399,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1399,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1403
      start: 1385
    functionDepth: 1
    functionLinenumber: 1385
    functionLinenumberEnd: 1403
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block_num
    - ASSERT_TRUE
    - butil::IOBuf::backing_block
    - std::string::reserve
    - ASSERT_FALSE
    - std::string::append
    - butil::StringPiece::data
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - std::string::size
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, slice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1406,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1407,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1408,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1409,1
    - Dst: std::swap
      Src: /src/brpc/test/iobuf_unittest.cpp:1410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1411,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1412,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1413
      start: 1405
    functionDepth: 1
    functionLinenumber: 1405
    functionLinenumberEnd: 1413
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::equals
    - std::swap
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, swap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1416,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1417,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1419,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1420,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1421,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1424,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1425,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1425,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1426,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1427,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1428
      start: 1415
    functionDepth: 1
    functionLinenumber: 1415
    functionLinenumberEnd: 1428
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::equals
    - butil::IOBuf::length
    - std::string::resize
    - butil::IOBuf::resize
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, resize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1431,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1432,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1439,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1440,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1443,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1444,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1448,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1455,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1455,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1456,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1457
      start: 1430
    functionDepth: 1
    functionLinenumber: 1430
    functionLinenumberEnd: 1457
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, iterate_bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1461,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1462,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1463,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1464,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1466,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1469,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1473,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1474,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1477,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1477,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1478,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1480,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1481,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1482
      start: 1459
    functionDepth: 1
    functionLinenumber: 1459
    functionLinenumberEnd: 1482
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBufAppender::move_to
    - butil::IOBufAppender::buf
    - butil::IOBufAppender::IOBufAppender
    - snprintf
    - std::string::append
    - butil::IOBufAppender::append
    - butil::IOBuf::IOBuf
    - butil::IOBufAppender::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appender)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1486,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1487,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1488,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1490,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1492,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1494,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1495,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1496,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1498,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1500,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1502,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1502,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1503,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1509,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1510,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1512,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1514,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1516,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1517,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1519,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1521,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1523,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1524,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1526,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1528,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1530,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1530,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1531,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1532,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1533,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1484
    functionDepth: 1
    functionLinenumber: 1484
    functionLinenumberEnd: 1534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::push_back
    - std::string::append
    - butil::IOBufAppender::append
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    - std::string::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appender_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1537,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1540,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1541,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1558,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1559,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1559,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1560,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1561,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1562,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1563
      start: 1536
    functionDepth: 1
    functionLinenumber: 1536
    functionLinenumberEnd: 1563
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - ASSERT_STREQ
    - butil::ToPrintable::ToPrintable
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, printed_as_binary)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1566,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1568,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1568,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1573,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1574,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1575,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1576,1
    - Dst: butil::IOBufBytesIterator::copy_and_forward
      Src: /src/brpc/test/iobuf_unittest.cpp:1578,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:1579,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1580,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1583,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1583,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1584
      start: 1565
    functionDepth: 1
    functionLinenumber: 1565
    functionLinenumberEnd: 1584
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBuf::equals
    - butil::IOBuf::length
    - ASSERT_GT
    - butil::IOBuf::cutn
    - butil::IOBufBytesIterator::copy_and_forward
    - butil::fast_rand_in
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, copy_to_string_from_iterator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/test/iobuf_unittest.cpp:1588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1590
      start: 1587
    functionDepth: 0
    functionLinenumber: 1587
    functionLinenumberEnd: 1590
    functionName: my_free
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void my_free(void* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1593,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1603,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1604,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1604,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1606,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1609,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1617,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1620
      start: 1592
    functionDepth: 1
    functionLinenumber: 1592
    functionLinenumberEnd: 1620
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - butil::iobuf::block_shared_count
    - butil::IOBuf::cutn
    - butil::IOBuf::_front_ref
    - malloc
    - butil::IOBuf::append_user_data
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_user_data_and_consume)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1623,1
    - Dst: char::char
      Src: /src/brpc/test/iobuf_unittest.cpp:1626,1
    - Dst: std::default_delete<char[]>
      Src: /src/brpc/test/iobuf_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1628,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1628,1
    - Dst: std::shared_ptr::get
      Src: /src/brpc/test/iobuf_unittest.cpp:1629,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1639,1
    - Dst: std::abort
      Src: /src/brpc/test/iobuf_unittest.cpp:1643,1
    - Dst: reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1656,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1656,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1658,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1659,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1659,1
    - Dst: std::shared_ptr::reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1665,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1665,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: std::weak_ptr::expired
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1674,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1677
      start: 1622
    functionDepth: 1
    functionLinenumber: 1622
    functionLinenumberEnd: 1677
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::shared_ptr::get
    - butil::IOBuf::IOBuf
    - std::shared_ptr::reset
    - reset
    - butil::IOBuf::_front_ref
    - butil::IOBuf::append_user_data
    - butil::IOBuf::empty
    - std::move
    - std::default_delete<char[]>
    - butil::iobuf::block_shared_count
    - butil::IOBuf::size
    - char::char
    - std::abort
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::cutn
    - std::weak_ptr::expired
    - std::shared_ptr::use_count
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_stateful_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1639,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - partial
    - ' incr'
    argTypes:
    - std::shared_ptr<char>
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1639
      start: 1639
    functionDepth: 1
    functionLinenumber: 1639
    functionLinenumberEnd: 1639
    functionName: Deleter
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void Deleter(std::shared_ptr<char> partial, int& incr)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1640
    functionDepth: 0
    functionLinenumber: 1640
    functionLinenumberEnd: 1642
    functionName: ~Deleter()
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::abort
      Src: /src/brpc/test/iobuf_unittest.cpp:1643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1643
    functionDepth: 0
    functionLinenumber: 1643
    functionLinenumberEnd: 1643
    functionName: Deleter
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::abort
    linkageType: ''
    returnType: void
    signature: void Deleter(const Deleter&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1644
      start: 1644
    functionDepth: 0
    functionLinenumber: 1644
    functionLinenumberEnd: 1644
    functionName: Deleter
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Deleter(Deleter&&) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1646,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1648
      start: 1645
    functionDepth: 0
    functionLinenumber: 1645
    functionLinenumberEnd: 1648
    functionName: operator()(void*)
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void operator()(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1680,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1690,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1690,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1691,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1691,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1692,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1693,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1699,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1700,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1702,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1702,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1704,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1706,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1706,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1707,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1710,1
    - Dst: to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1713,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1719,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1720
      start: 1679
    functionDepth: 1
    functionLinenumber: 1679
    functionLinenumberEnd: 1720
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - butil::iobuf::block_shared_count
    - butil::IOBuf::cutn
    - butil::IOBuf::_front_ref
    - malloc
    - butil::IOBuf::append_user_data
    - to_string
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_user_data_and_share)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1723,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1728,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1729,1
    - Dst: butil::IOBuf::append_user_data_with_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1729,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1732,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1732,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1734,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1734,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1735,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1722
    functionDepth: 1
    functionLinenumber: 1722
    functionLinenumberEnd: 1738
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::append_user_data_with_meta
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::get_first_data_meta
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append_user_data_with_meta)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1741,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1743,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1743,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1745,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1746,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1747,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1748,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1751,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1752,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1753,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1753,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1755,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1756,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1760,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1760,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1761,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1762,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1763
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1763
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::block_size
    - butil::iobuf::release_tls_block_chain
    - butil::iobuf::acquire_tls_block
    - butil::iobuf::share_tls_block
    - butil::iobuf::block_cap
    - butil::IOBuf::push_back
    - ASSERT_NE
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, share_tls_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1766,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1767,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1768,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1769,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1773,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1773,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1776,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1777,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1777,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1781,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1781,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1785,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1785,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1765
    functionDepth: 1
    functionLinenumber: 1765
    functionLinenumberEnd: 1787
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::get_tls_block_head
    - butil::iobuf::block_size
    - butil::iobuf::release_tls_block_chain
    - butil::iobuf::get_tls_block_count
    - butil::iobuf::acquire_tls_block
    - butil::iobuf::block_cap
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, acquire_tls_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1792,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1793,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1798,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1799,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1799,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1803,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1807,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1808,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1814,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1814,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1818,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1822,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1823,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1828,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1829,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1833,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1837,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1838,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1844,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1848,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1853,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1857,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1858,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1864,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1865,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1868,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1872,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1873,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1880,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1881,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1882,1
    - Dst: std::memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: const_cast<void*>
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1888,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    - Dst: butil::IOReserveAlignedBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1891
      start: 1789
    functionDepth: 1
    functionLinenumber: 1789
    functionLinenumberEnd: 1891
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string::size
    - const_cast<void*>
    - std::memcpy
    - butil::IOBufAsZeroCopyInputStream::Next
    - std::string::data
    - ASSERT_NE
    - butil::IOReserveAlignedBuf::to_string
    - std::stringstream::str
    - butil::IOReserveAlignedBuf::reserve
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, reserve_aligned)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 18
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 32
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoSpaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 46
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Spaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::ParseProcMaps
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoNewline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Heap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 97
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack32)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 138
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Multiple)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:169,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:170,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 180
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SCOPED_TRACE
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    - std::vector::empty
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Permissions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: butil::debug::ReadProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    - Dst: std::string::find
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::debug::ReadProcMaps
    - EXPECT_EQ
    - std::string::find
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ReadProcMapsNonEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:257,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 262
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, MissingFields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:274,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 279
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, InvalidInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:309,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 311
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 18
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 32
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoSpaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 46
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Spaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::ParseProcMaps
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoNewline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Heap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 97
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack32)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 138
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Multiple)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:169,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:170,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 180
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SCOPED_TRACE
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    - std::vector::empty
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Permissions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: butil::debug::ReadProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    - Dst: std::string::find
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::debug::ReadProcMaps
    - EXPECT_EQ
    - std::string::find
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ReadProcMapsNonEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:257,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 262
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, MissingFields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:274,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 279
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, InvalidInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:309,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 311
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 18
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 32
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoSpaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 46
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Spaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::ParseProcMaps
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoNewline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Heap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 97
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack32)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 138
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Multiple)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:169,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:170,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 180
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SCOPED_TRACE
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    - std::vector::empty
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Permissions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: butil::debug::ReadProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    - Dst: std::string::find
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::debug::ReadProcMaps
    - EXPECT_EQ
    - std::string::find
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ReadProcMapsNonEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:257,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 262
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, MissingFields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:274,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 279
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, InvalidInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:309,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 311
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:17,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 18
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 32
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoSpaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 46
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Spaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::ParseProcMaps
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoNewline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, NoPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Heap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 97
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack32)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Stack64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 138
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Multiple)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:169,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:170,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:175,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 180
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SCOPED_TRACE
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    - std::vector::empty
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, Permissions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: butil::debug::ReadProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    - Dst: std::string::find
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::debug::ReadProcMaps
    - EXPECT_EQ
    - std::string::find
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ReadProcMapsNonEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:257,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:258,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 262
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, MissingFields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:274,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:275,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:277,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 279
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - arraysize
    - EXPECT_FALSE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, InvalidInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: butil::debug::ParseProcMaps
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: std::vector::size
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:309,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/proc_maps_linux_unittest.cc:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 311
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/proc_maps_linux_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::debug::ParseProcMaps
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - Type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: HideValueFromCompiler
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Type
    signature: Type HideValueFromCompiler(volatile Type value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: TCMALLOC_TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TCMALLOC_TEST(function)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 57
    functionName: TCMALLOC_TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TCMALLOC_TEST(function)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/test/security_unittest.cc:67,1
    - Dst: strcmp
      Src: /src/brpc/test/security_unittest.cc:68,1
    - Dst: getenv
      Src: /src/brpc/test/security_unittest.cc:73,1
    - Dst: strcmp
      Src: /src/brpc/test/security_unittest.cc:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 78
    functionName: IsTcMallocBypassed
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - getenv
    - strcmp
    linkageType: ''
    returnType: bool
    signature: bool IsTcMallocBypassed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 92
    functionName: CallocDiesOnOOM
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CallocDiesOnOOM()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/security_unittest.cc:96,1
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 98
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(IsTCMallocDynamicallyBypassed))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsMalloc))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:114,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:115,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:116,1
    - Dst: calloc
      Src: /src/brpc/test/security_unittest.cc:116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - HideValueFromCompiler
    - static_cast<char*>
    - calloc
    - IsTcMallocBypassed
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsCalloc))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:122,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:123,1
    - Dst: malloc
      Src: /src/brpc/test/security_unittest.cc:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:124,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:127,1
    - Dst: free
      Src: /src/brpc/test/security_unittest.cc:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - free
    - static_cast<char*>
    - malloc
    - IsTcMallocBypassed
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsRealloc))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:138,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:140,1
    - Dst: VeryLargeStruct::VeryLargeStruct
      Src: /src/brpc/test/security_unittest.cc:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 143
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - HideValueFromCompiler
    - ASSERT_TRUE
    - VeryLargeStruct::VeryLargeStruct
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsNew))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:146,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:148,1
    - Dst: char::char
      Src: /src/brpc/test/security_unittest.cc:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - HideValueFromCompiler
    - char::char
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsNewArray))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: DISABLE_ON_IOS_AND_WIN_AND_TSAN
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISABLE_ON_IOS_AND_WIN_AND_TSAN(function)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 159
    functionName: DISABLE_ON_IOS_AND_WIN_AND_TSAN
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISABLE_ON_IOS_AND_WIN_AND_TSAN(function)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/security_unittest.cc:174,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/security_unittest.cc:179,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - overflow_detected
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 182
    functionName: OverflowTestsSoftExpectTrue
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - printf
    linkageType: ''
    returnType: void
    signature: void OverflowTestsSoftExpectTrue(bool overflow_detected)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:191,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/security_unittest.cc:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/security_unittest.cc:195,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/security_unittest.cc:195,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:197,1
    - Dst: char::char
      Src: /src/brpc/test/security_unittest.cc:199,1
    - Dst: OverflowTestsSoftExpectTrue
      Src: /src/brpc/test/security_unittest.cc:201,1
    - Dst: char::char
      Src: /src/brpc/test/security_unittest.cc:207,1
    - Dst: OverflowTestsSoftExpectTrue
      Src: /src/brpc/test/security_unittest.cc:209,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 212
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - OverflowTestsSoftExpectTrue
    - ASSERT_EQ
    - HideValueFromCompiler
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    - char::char
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, DISABLE_ON_IOS_AND_WIN_AND_TSAN(NewOverflow))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:223,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - nmemb
    - size
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 224
    functionName: CallocReturnsNull
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr::get
    - HideValueFromCompiler
    linkageType: ''
    returnType: bool
    signature: bool CallocReturnsNull(size_t nmemb, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/security_unittest.cc:229,1
    - Dst: CallocDiesOnOOM
      Src: /src/brpc/test/security_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/security_unittest.cc:232,1
    - Dst: CallocReturnsNull
      Src: /src/brpc/test/security_unittest.cc:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/security_unittest.cc:233,1
    - Dst: CallocReturnsNull
      Src: /src/brpc/test/security_unittest.cc:233,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 243
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_TRUE
    - CallocDiesOnOOM
    - CallocReturnsNull
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, CallocOverflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:248,1
    - Dst: std::max
      Src: /src/brpc/test/security_unittest.cc:248,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:249,1
    - Dst: std::min
      Src: /src/brpc/test/security_unittest.cc:249,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/security_unittest.cc:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr1
    - ptr2
    - size
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 251
    functionName: ArePointersToSameArea
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - std::max
    - std::min
    - static_cast<size_t>
    linkageType: ''
    returnType: bool
    signature: bool ArePointersToSameArea(void* ptr1, void* ptr2, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:255,1
    - Dst: mmap
      Src: /src/brpc/test/security_unittest.cc:264,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/security_unittest.cc:266,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/security_unittest.cc:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/security_unittest.cc:268,1
    - Dst: munmap
      Src: /src/brpc/test/security_unittest.cc:268,1
    - Dst: sbrk
      Src: /src/brpc/test/security_unittest.cc:269,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/security_unittest.cc:270,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/security_unittest.cc:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:277,1
    - Dst: ArePointersToSameArea
      Src: /src/brpc/test/security_unittest.cc:285,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:286,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/security_unittest.cc:287,1
    - Dst: ArePointersToSameArea
      Src: /src/brpc/test/security_unittest.cc:289,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:290,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/security_unittest.cc:291,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/security_unittest.cc:297,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:297,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/security_unittest.cc:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 299
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - ASSERT_EQ
    - ASSERT_TRUE
    - munmap
    - static_cast<void*>
    - scoped_ptr::get
    - IsTcMallocBypassed
    - ArePointersToSameArea
    - sbrk
    - EXPECT_FALSE
    - mmap
    - ASSERT_NE
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(RandomMemoryAllocations))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - Type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: HideValueFromCompiler
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: Type
    signature: Type HideValueFromCompiler(volatile Type value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: TCMALLOC_TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TCMALLOC_TEST(function)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 57
    functionName: TCMALLOC_TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TCMALLOC_TEST(function)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/test/security_unittest.cc:67,1
    - Dst: strcmp
      Src: /src/brpc/test/security_unittest.cc:68,1
    - Dst: getenv
      Src: /src/brpc/test/security_unittest.cc:73,1
    - Dst: strcmp
      Src: /src/brpc/test/security_unittest.cc:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 78
    functionName: IsTcMallocBypassed
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 7
    functionsReached:
    - getenv
    - strcmp
    linkageType: ''
    returnType: bool
    signature: bool IsTcMallocBypassed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 92
    functionName: CallocDiesOnOOM
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CallocDiesOnOOM()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/security_unittest.cc:96,1
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 98
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(IsTCMallocDynamicallyBypassed))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsMalloc))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:114,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:115,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:116,1
    - Dst: calloc
      Src: /src/brpc/test/security_unittest.cc:116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - HideValueFromCompiler
    - static_cast<char*>
    - calloc
    - IsTcMallocBypassed
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsCalloc))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:122,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:123,1
    - Dst: malloc
      Src: /src/brpc/test/security_unittest.cc:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:124,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:127,1
    - Dst: free
      Src: /src/brpc/test/security_unittest.cc:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - free
    - static_cast<char*>
    - malloc
    - IsTcMallocBypassed
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsRealloc))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:138,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:140,1
    - Dst: VeryLargeStruct::VeryLargeStruct
      Src: /src/brpc/test/security_unittest.cc:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 143
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - HideValueFromCompiler
    - ASSERT_TRUE
    - VeryLargeStruct::VeryLargeStruct
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsNew))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:146,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:148,1
    - Dst: char::char
      Src: /src/brpc/test/security_unittest.cc:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - IsTcMallocBypassed
    - HideValueFromCompiler
    - char::char
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(MemoryAllocationRestrictionsNewArray))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: DISABLE_ON_IOS_AND_WIN_AND_TSAN
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISABLE_ON_IOS_AND_WIN_AND_TSAN(function)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 159
    functionName: DISABLE_ON_IOS_AND_WIN_AND_TSAN
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISABLE_ON_IOS_AND_WIN_AND_TSAN(function)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/security_unittest.cc:174,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/security_unittest.cc:179,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - overflow_detected
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 182
    functionName: OverflowTestsSoftExpectTrue
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - printf
    linkageType: ''
    returnType: void
    signature: void OverflowTestsSoftExpectTrue(bool overflow_detected)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:191,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/security_unittest.cc:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/security_unittest.cc:195,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/security_unittest.cc:195,1
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:197,1
    - Dst: char::char
      Src: /src/brpc/test/security_unittest.cc:199,1
    - Dst: OverflowTestsSoftExpectTrue
      Src: /src/brpc/test/security_unittest.cc:201,1
    - Dst: char::char
      Src: /src/brpc/test/security_unittest.cc:207,1
    - Dst: OverflowTestsSoftExpectTrue
      Src: /src/brpc/test/security_unittest.cc:209,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 212
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - OverflowTestsSoftExpectTrue
    - ASSERT_EQ
    - HideValueFromCompiler
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    - char::char
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, DISABLE_ON_IOS_AND_WIN_AND_TSAN(NewOverflow))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HideValueFromCompiler
      Src: /src/brpc/test/security_unittest.cc:223,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - nmemb
    - size
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 224
    functionName: CallocReturnsNull
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 1
    functionsReached:
    - scoped_ptr::get
    - HideValueFromCompiler
    linkageType: ''
    returnType: bool
    signature: bool CallocReturnsNull(size_t nmemb, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/security_unittest.cc:229,1
    - Dst: CallocDiesOnOOM
      Src: /src/brpc/test/security_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/security_unittest.cc:232,1
    - Dst: CallocReturnsNull
      Src: /src/brpc/test/security_unittest.cc:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/security_unittest.cc:233,1
    - Dst: CallocReturnsNull
      Src: /src/brpc/test/security_unittest.cc:233,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 243
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_TRUE
    - CallocDiesOnOOM
    - CallocReturnsNull
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, CallocOverflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:248,1
    - Dst: std::max
      Src: /src/brpc/test/security_unittest.cc:248,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/security_unittest.cc:249,1
    - Dst: std::min
      Src: /src/brpc/test/security_unittest.cc:249,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/security_unittest.cc:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr1
    - ptr2
    - size
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 251
    functionName: ArePointersToSameArea
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 1
    functionsReached:
    - reinterpret_cast<char*>
    - std::max
    - std::min
    - static_cast<size_t>
    linkageType: ''
    returnType: bool
    signature: bool ArePointersToSameArea(void* ptr1, void* ptr2, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsTcMallocBypassed
      Src: /src/brpc/test/security_unittest.cc:255,1
    - Dst: mmap
      Src: /src/brpc/test/security_unittest.cc:264,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/security_unittest.cc:266,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/security_unittest.cc:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/security_unittest.cc:268,1
    - Dst: munmap
      Src: /src/brpc/test/security_unittest.cc:268,1
    - Dst: sbrk
      Src: /src/brpc/test/security_unittest.cc:269,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/security_unittest.cc:270,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/security_unittest.cc:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/security_unittest.cc:277,1
    - Dst: ArePointersToSameArea
      Src: /src/brpc/test/security_unittest.cc:285,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:286,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/security_unittest.cc:287,1
    - Dst: ArePointersToSameArea
      Src: /src/brpc/test/security_unittest.cc:289,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:290,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/security_unittest.cc:291,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/security_unittest.cc:297,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/security_unittest.cc:297,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/security_unittest.cc:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 299
    functionName: TEST
    functionSourceFile: /src/brpc/test/security_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - ASSERT_EQ
    - ASSERT_TRUE
    - munmap
    - static_cast<void*>
    - scoped_ptr::get
    - IsTcMallocBypassed
    - ArePointersToSameArea
    - sbrk
    - EXPECT_FALSE
    - mmap
    - ASSERT_NE
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void TEST(SecurityTest, TCMALLOC_TEST(RandomMemoryAllocations))
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::fetch_sub
      Src: /src/brpc/test/bthread_futex_unittest.cpp:44,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:46,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:47,1
    - Dst: int::int
      Src: /src/brpc/test/bthread_futex_unittest.cpp:50,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:53,1
    - Dst: cpu_relax
      Src: /src/brpc/test/bthread_futex_unittest.cpp:55,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:60,1
    - Dst: int::int
      Src: /src/brpc/test/bthread_futex_unittest.cpp:63,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 64
    functionName: read_thread
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - cpu_relax
    - butil::atomic*::fetch_add
    - bthread::futex_wait_private
    - butil::cpuwide_time_ns
    - butil::atomic*::fetch_sub
    - int::int
    linkageType: ''
    returnType: void
    signature: void * read_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:71,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:71,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:74,1
    - Dst: butil::atomic::fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:77,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:78,1
    - Dst: butil::atomic::fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:80,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:82,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:86,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:88,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:91,1
    - Dst: sched_yield
      Src: /src/brpc/test/bthread_futex_unittest.cpp:92,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:97,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_futex_unittest.cpp:98,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:102,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bthread_futex_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:104,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bthread_futex_unittest.cpp:104,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 105
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - sched_yield
    - bthread_usleep
    - pthread_join
    - pthread_create
    - printf
    - butil::atomic::load
    - butil::cpuwide_time_ns
    - butil::atomic::fetch_add
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, rdlock_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:110,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:111,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::futex_wait_private
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, futex_wake_before_wait)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - lock
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: dummy_waiter
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    linkageType: ''
    returnType: void
    signature: void * dummy_waiter(void* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:125,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:127,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_futex_unittest.cpp:129,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:130,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:132,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:134,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:135,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:136,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:138,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:141,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:143,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:146,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:147,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:147,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - pthread_create
    - printf
    - bthread::futex_wake_private
    - sleep
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, futex_wake_many_waiters_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:153,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_futex_unittest.cpp:156,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:157,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:159,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:162,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:163,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - lock
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 165
    functionName: waker
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - printf
    - bthread::futex_wake_private
    - EXPECT_EQ
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * waker(void* lock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:168,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_futex_unittest.cpp:171,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:172,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:174,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:175,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/test/bthread_futex_unittest.cpp:179,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:182,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:187,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:188,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:188,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - lock
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 190
    functionName: batch_waker
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - printf
    - fetch_add
    - compare_exchange_strong
    - bthread::futex_wake_private
    - EXPECT_EQ
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * batch_waker(void* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:197,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:200,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_futex_unittest.cpp:200,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:204,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:207,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_futex_unittest.cpp:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 209
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, many_futex_wake_nop_perf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::fetch_sub
      Src: /src/brpc/test/bthread_futex_unittest.cpp:44,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:46,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:47,1
    - Dst: int::int
      Src: /src/brpc/test/bthread_futex_unittest.cpp:50,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:53,1
    - Dst: cpu_relax
      Src: /src/brpc/test/bthread_futex_unittest.cpp:55,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:60,1
    - Dst: int::int
      Src: /src/brpc/test/bthread_futex_unittest.cpp:63,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 64
    functionName: read_thread
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - cpu_relax
    - butil::atomic*::fetch_add
    - bthread::futex_wait_private
    - butil::cpuwide_time_ns
    - butil::atomic*::fetch_sub
    - int::int
    linkageType: ''
    returnType: void
    signature: void * read_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:71,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:71,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:74,1
    - Dst: butil::atomic::fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:77,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:78,1
    - Dst: butil::atomic::fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:80,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:82,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_futex_unittest.cpp:86,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:88,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:91,1
    - Dst: sched_yield
      Src: /src/brpc/test/bthread_futex_unittest.cpp:92,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:97,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_futex_unittest.cpp:98,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:102,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bthread_futex_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:104,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bthread_futex_unittest.cpp:104,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 105
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - sched_yield
    - bthread_usleep
    - pthread_join
    - pthread_create
    - printf
    - butil::atomic::load
    - butil::cpuwide_time_ns
    - butil::atomic::fetch_add
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, rdlock_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:110,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:111,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::futex_wait_private
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, futex_wake_before_wait)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - lock
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: dummy_waiter
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    linkageType: ''
    returnType: void
    signature: void * dummy_waiter(void* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:125,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:127,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_futex_unittest.cpp:129,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:130,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:132,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:134,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:135,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:136,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:138,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:141,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:143,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:146,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:147,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:147,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - pthread_create
    - printf
    - bthread::futex_wake_private
    - sleep
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, futex_wake_many_waiters_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:153,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_futex_unittest.cpp:156,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:157,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:159,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:162,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:163,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - lock
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 165
    functionName: waker
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - printf
    - bthread::futex_wake_private
    - EXPECT_EQ
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * waker(void* lock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_futex_unittest.cpp:168,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_futex_unittest.cpp:171,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_futex_unittest.cpp:172,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_futex_unittest.cpp:174,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:175,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/test/bthread_futex_unittest.cpp:179,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_futex_unittest.cpp:182,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_futex_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:187,1
    - Dst: printf
      Src: /src/brpc/test/bthread_futex_unittest.cpp:188,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_futex_unittest.cpp:188,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - lock
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 190
    functionName: batch_waker
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - printf
    - fetch_add
    - compare_exchange_strong
    - bthread::futex_wake_private
    - EXPECT_EQ
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * batch_waker(void* lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:197,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:200,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_futex_unittest.cpp:200,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:204,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_futex_unittest.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_futex_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_futex_unittest.cpp:207,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_futex_unittest.cpp:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 209
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_futex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(FutexTest, many_futex_wake_nop_perf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:29,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:30,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:31,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:35,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 40
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:60,1
    - Dst: ::test::GrpcRequest*::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:60,1
    - Dst: ::test::GrpcRequest*::gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:61,1
    - Dst: brpc::Controller*::set_response_compress_type
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:62,1
    - Dst: ::test::GrpcResponse*::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:64,1
    - Dst: ::test::GrpcRequest*::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:64,1
    - Dst: ::test::GrpcRequest*::return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:66,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:67,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:67,1
    - Dst: ::test::GrpcRequest*::has_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:70,1
    - Dst: ::test::GrpcRequest*::timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:72,1
    - Dst: brpc::Controller*::deadline_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:72,1
    - Dst: EXPECT_NEAR
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:74,1
    - Dst: brpc::Controller*::deadline_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:74,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:75,1
    - Dst: ::test::GrpcRequest*::timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:75,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::GrpcRequest*
    - ::test::GrpcResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 78
    functionName: MyGrpcService::Method
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::GrpcRequest*::timeout_us
    - butil::gettimeofday_us
    - brpc::Controller*::SetFailed
    - brpc::Controller*::deadline_us
    - brpc::Controller*::set_response_compress_type
    - ::test::GrpcRequest*::has_timeout_us
    - EXPECT_NEAR
    - c_str
    - ::test::GrpcRequest*::gzip
    - ::test::GrpcResponse*::set_message
    - ::test::GrpcRequest*::message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    - ::test::GrpcRequest*::return_error
    linkageType: ''
    returnType: void
    signature: "void Method(::google::protobuf::RpcController* cntl_base,\n                const
      ::test::GrpcRequest* req,\n                ::test::GrpcResponse* res,\n                ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:85,1
    - Dst: ::test::GrpcResponse*::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:86,1
    - Dst: ::test::GrpcRequest*::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::GrpcRequest*
    - ::test::GrpcResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 88
    functionName: MyGrpcService::MethodTimeOut
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::GrpcRequest*::message
    - ::test::GrpcResponse*::set_message
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: "void MethodTimeOut(::google::protobuf::RpcController* cntl_base,\n
      \             const ::test::GrpcRequest* req,\n              ::test::GrpcResponse*
      res,\n              ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:94,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:95,1
    - Dst: Start
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:95,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:95,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:99,1
    - Dst: Init
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:99,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 100
    functionName: GrpcTest::GrpcTest
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Init
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    - AddService
    - Start
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void GrpcTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: ~GrpcTest()
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~GrpcTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:109,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:111,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:113,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:114,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:115,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:118,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:120,1
    - Dst: test::GrpcResponse::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - req_gzip
    - res_gzip
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 121
    functionName: GrpcTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - test::GrpcRequest::set_gzip
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - brpc::Controller::ErrorCode
    - brpc::Controller::set_request_compress_type
    - EXPECT_FALSE
    - EXPECT_EQ
    - test::GrpcResponse::message
    linkageType: ''
    returnType: void
    signature: void CallMethod(bool req_gzip, bool res_gzip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PercentEncode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:133,1
    - Dst: brpc::PercentEncode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:138,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::PercentEncode
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, percent_encode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PercentDecode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:147,1
    - Dst: brpc::PercentDecode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:152,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::PercentDecode
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, percent_decode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:159,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 162
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:167,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:168,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:169,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:170,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:174,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:174,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - EXPECT_TRUE
    - butil::string_printf
    - test::GrpcRequest::set_gzip
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - test::GrpcService_Stub::Method
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - c_str
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, return_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:179,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:183,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:183,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:183,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:187,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:188,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:189,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:190,1
    - Dst: test::GrpcService_Stub::MethodTimeOut
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:193,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:194,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 195
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - EXPECT_TRUE
    - test::GrpcRequest::set_gzip
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - c_str
    - brpc::Controller::Controller
    - test::GrpcService_Stub::MethodTimeOut
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, RpcTimedOut)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:200,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:201,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:202,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:203,1
    - Dst: test::GrpcService_Stub::MethodNotExist
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:206,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:207,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:208,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:208,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 209
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - EXPECT_TRUE
    - ASSERT_TRUE
    - test::GrpcRequest::set_gzip
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::GrpcService_Stub::MethodNotExist
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, MethodNotExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:230,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:233,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:234,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:235,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:236,1
    - Dst: test::GrpcRequest::set_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:237,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:237,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:238,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:239,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:241,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:242,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:242,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:249,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:250,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:251,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:252,1
    - Dst: test::GrpcRequest::set_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:253,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:254,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:256,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:257,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:257,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:264,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:265,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:266,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:267,1
    - Dst: test::GrpcRequest::set_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:268,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:270,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:271,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 273
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - test::GrpcRequest::set_gzip
    - test::GrpcRequest::set_timeout_us
    - test::GrpcRequest::set_message
    - arraysize
    - strtol
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - brpc::Controller::set_timeout_ms
    - EXPECT_FALSE
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, GrpcTimeOut)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:60,1
    - Dst: ::test::GrpcRequest*::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:60,1
    - Dst: ::test::GrpcRequest*::gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:61,1
    - Dst: brpc::Controller*::set_response_compress_type
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:62,1
    - Dst: ::test::GrpcResponse*::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:64,1
    - Dst: ::test::GrpcRequest*::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:64,1
    - Dst: ::test::GrpcRequest*::return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:66,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:67,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:67,1
    - Dst: ::test::GrpcRequest*::has_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:70,1
    - Dst: ::test::GrpcRequest*::timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:72,1
    - Dst: brpc::Controller*::deadline_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:72,1
    - Dst: EXPECT_NEAR
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:74,1
    - Dst: brpc::Controller*::deadline_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:74,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:75,1
    - Dst: ::test::GrpcRequest*::timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:75,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::GrpcRequest*
    - ::test::GrpcResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 78
    functionName: MyGrpcService::Method
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::GrpcRequest*::timeout_us
    - butil::gettimeofday_us
    - brpc::Controller*::SetFailed
    - brpc::Controller*::deadline_us
    - brpc::Controller*::set_response_compress_type
    - ::test::GrpcRequest*::has_timeout_us
    - EXPECT_NEAR
    - c_str
    - ::test::GrpcRequest*::gzip
    - ::test::GrpcResponse*::set_message
    - ::test::GrpcRequest*::message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    - ::test::GrpcRequest*::return_error
    linkageType: ''
    returnType: void
    signature: "void Method(::google::protobuf::RpcController* cntl_base,\n                const
      ::test::GrpcRequest* req,\n                ::test::GrpcResponse* res,\n                ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:85,1
    - Dst: ::test::GrpcResponse*::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:86,1
    - Dst: ::test::GrpcRequest*::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::GrpcRequest*
    - ::test::GrpcResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 88
    functionName: MyGrpcService::MethodTimeOut
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::GrpcRequest*::message
    - ::test::GrpcResponse*::set_message
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: "void MethodTimeOut(::google::protobuf::RpcController* cntl_base,\n
      \             const ::test::GrpcRequest* req,\n              ::test::GrpcResponse*
      res,\n              ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:94,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:95,1
    - Dst: Start
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:95,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:95,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:99,1
    - Dst: Init
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:99,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 100
    functionName: GrpcTest::GrpcTest
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Init
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    - AddService
    - Start
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void GrpcTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: ~GrpcTest()
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~GrpcTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:109,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:111,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:113,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:114,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:115,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:118,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:120,1
    - Dst: test::GrpcResponse::message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - req_gzip
    - res_gzip
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 121
    functionName: GrpcTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - test::GrpcRequest::set_gzip
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - brpc::Controller::ErrorCode
    - brpc::Controller::set_request_compress_type
    - EXPECT_FALSE
    - EXPECT_EQ
    - test::GrpcResponse::message
    linkageType: ''
    returnType: void
    signature: void CallMethod(bool req_gzip, bool res_gzip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PercentEncode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:133,1
    - Dst: brpc::PercentEncode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:138,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::PercentEncode
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, percent_encode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PercentDecode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:147,1
    - Dst: brpc::PercentDecode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:152,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::PercentDecode
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, percent_decode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:159,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 162
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:167,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:168,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:169,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:170,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:174,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:174,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - EXPECT_TRUE
    - butil::string_printf
    - test::GrpcRequest::set_gzip
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - test::GrpcService_Stub::Method
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - c_str
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, return_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:179,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:183,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:183,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:183,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:187,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:188,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:189,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:190,1
    - Dst: test::GrpcService_Stub::MethodTimeOut
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:193,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:194,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 195
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - EXPECT_TRUE
    - test::GrpcRequest::set_gzip
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - c_str
    - brpc::Controller::Controller
    - test::GrpcService_Stub::MethodTimeOut
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, RpcTimedOut)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:200,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:201,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:202,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:203,1
    - Dst: test::GrpcService_Stub::MethodNotExist
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:206,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:207,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:208,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:208,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 209
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - EXPECT_TRUE
    - ASSERT_TRUE
    - test::GrpcRequest::set_gzip
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::GrpcService_Stub::MethodNotExist
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, MethodNotExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:230,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:233,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:234,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:235,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:236,1
    - Dst: test::GrpcRequest::set_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:237,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:237,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:238,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:239,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:241,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:242,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:242,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:249,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:250,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:251,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:252,1
    - Dst: test::GrpcRequest::set_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:253,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:254,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:256,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:257,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:257,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:264,1
    - Dst: test::GrpcRequest::set_message
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:265,1
    - Dst: test::GrpcRequest::set_gzip
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:266,1
    - Dst: test::GrpcRequest::set_return_error
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:267,1
    - Dst: test::GrpcRequest::set_timeout_us
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:268,1
    - Dst: test::GrpcService_Stub::Method
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:270,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:271,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_grpc_protocol_unittest.cpp:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 273
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_grpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::GrpcRequest::set_return_error
    - test::GrpcRequest::set_gzip
    - test::GrpcRequest::set_timeout_us
    - test::GrpcRequest::set_message
    - arraysize
    - strtol
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - brpc::Controller::set_timeout_ms
    - EXPECT_FALSE
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(GrpcTest, GrpcTimeOut)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: RepeatedFieldTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_repeated_field_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: RepeatedFieldTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_repeated_field_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:32,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:32,1
    - Dst: RepeatedMessage::add_strings
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:35,1
    - Dst: RepeatedMessage::add_ints
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:36,1
    - Dst: RepeatedMessage::add_msgs
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:37,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:39,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_repeated_field_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 41
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_repeated_field_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - RepeatedMessage::add_msgs
    - RepeatedMessage::add_ints
    - std::string::clear
    - RepeatedMessage::add_strings
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(RepeatedFieldTest, empty_array)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_clear_errno_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_clear_errno_unittest.cc:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 19
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_clear_errno_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedClearErrno, TestNoError)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_clear_errno_unittest.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 28
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_clear_errno_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedClearErrno, TestError)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_clear_errno_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_clear_errno_unittest.cc:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 19
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_clear_errno_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedClearErrno, TestNoError)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_clear_errno_unittest.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 28
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_clear_errno_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedClearErrno, TestError)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:21,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 23
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, SimpleSingleThreadedTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:28,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:30,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, DoubleSetTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:21,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 23
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, SimpleSingleThreadedTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:28,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:30,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, DoubleSetTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:21,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 23
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, SimpleSingleThreadedTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:28,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:30,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, DoubleSetTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:20,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:21,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 23
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, SimpleSingleThreadedTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:27,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:28,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:29,1
    - Dst: CancellationFlag::Set
      Src: /src/brpc/test/cancellation_flag_unittest.cc:30,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    - Dst: CancellationFlag::IsSet
      Src: /src/brpc/test/cancellation_flag_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancellation_flag_unittest.cc
    functionUses: 0
    functionsReached:
    - CancellationFlag::Set
    - ASSERT_TRUE
    - ASSERT_FALSE
    - CancellationFlag::IsSet
    linkageType: ''
    returnType: void
    signature: void TEST(CancellationFlagTest, DoubleSetTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedStaticMemory::RefCountedStaticMemory
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:12,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:15,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:15,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    - Dst: std::string
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    - Dst: scoped_refptr::front_as
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 17
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_refptr::front_as
    - std::string
    - RefCountedStaticMemory::RefCountedStaticMemory
    - EXPECT_EQ
    - scoped_refptr::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedStaticMemory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:21,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:22,1
    - Dst: butil::RefCountedBytes::TakeVector
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:25,1
    - Dst: std::vector::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:27,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:27,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:28,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:29,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:29,1
    - Dst: scoped_refptr::scoped_refptr
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:31,1
    - Dst: RefCountedBytes::RefCountedBytes
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:36,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:37,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:38,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:39,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 40
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - scoped_refptr::front
    - scoped_refptr::scoped_refptr
    - butil::RefCountedBytes::TakeVector
    - RefCountedBytes::RefCountedBytes
    - EXPECT_EQ
    - scoped_refptr::size
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:46,1
    - Dst: std::string::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:48,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:49,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:49,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:50,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 51
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_refptr::front
    - EXPECT_EQ
    - scoped_refptr::size
    - butil::RefCountedString::TakeString
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:54,1
    - Dst: memcpy
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:55,1
    - Dst: RefCountedMallocedMemory::RefCountedMallocedMemory
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:59,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:60,1
    - Dst: memcmp
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:60,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - scoped_refptr::front
    - EXPECT_EQ
    - malloc
    - memcpy
    - RefCountedMallocedMemory::RefCountedMallocedMemory
    - scoped_refptr::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedMallocedMemory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:65,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:68,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:69,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:70,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:71,1
    - Dst: butil::RefCountedBytes::TakeVector
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:74,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:74,1
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:77,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:79,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:79,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:80,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 81
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::vector::push_back
    - scoped_refptr::Equals
    - butil::RefCountedBytes::TakeVector
    - EXPECT_FALSE
    - butil::RefCountedString::TakeString
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:86,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::RefCountedString::TakeString
    - scoped_refptr::Equals
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, EqualsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedStaticMemory::RefCountedStaticMemory
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:12,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:15,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:15,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    - Dst: std::string
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    - Dst: scoped_refptr::front_as
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:16,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 17
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_refptr::front_as
    - std::string
    - RefCountedStaticMemory::RefCountedStaticMemory
    - EXPECT_EQ
    - scoped_refptr::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedStaticMemory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:21,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:22,1
    - Dst: butil::RefCountedBytes::TakeVector
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:25,1
    - Dst: std::vector::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:27,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:27,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:28,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:29,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:29,1
    - Dst: scoped_refptr::scoped_refptr
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:31,1
    - Dst: RefCountedBytes::RefCountedBytes
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:36,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:37,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:38,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:39,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 40
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - scoped_refptr::front
    - scoped_refptr::scoped_refptr
    - butil::RefCountedBytes::TakeVector
    - RefCountedBytes::RefCountedBytes
    - EXPECT_EQ
    - scoped_refptr::size
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:46,1
    - Dst: std::string::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:48,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:49,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:49,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:50,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 51
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_refptr::front
    - EXPECT_EQ
    - scoped_refptr::size
    - butil::RefCountedString::TakeString
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:54,1
    - Dst: memcpy
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:55,1
    - Dst: RefCountedMallocedMemory::RefCountedMallocedMemory
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:59,1
    - Dst: scoped_refptr::size
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:60,1
    - Dst: memcmp
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:60,1
    - Dst: scoped_refptr::front
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - scoped_refptr::front
    - EXPECT_EQ
    - malloc
    - memcpy
    - RefCountedMallocedMemory::RefCountedMallocedMemory
    - scoped_refptr::size
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, RefCountedMallocedMemory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:65,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:68,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:69,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:70,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:71,1
    - Dst: butil::RefCountedBytes::TakeVector
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:74,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:74,1
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:77,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:79,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:79,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:80,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 81
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::vector::push_back
    - scoped_refptr::Equals
    - butil::RefCountedBytes::TakeVector
    - EXPECT_FALSE
    - butil::RefCountedString::TakeString
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::TakeString
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:86,1
    - Dst: scoped_refptr::Equals
      Src: /src/brpc/test/ref_counted_memory_unittest.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/ref_counted_memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::RefCountedString::TakeString
    - scoped_refptr::Equals
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedMemoryUnitTest, EqualsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: HttpStatusTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_http_status_code_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: HttpStatusTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_http_status_code_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:32,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:32,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:34,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:34,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:36,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:36,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:38,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_status_code_unittest.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 39
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_status_code_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - brpc::HttpReasonPhrase
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpStatusTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:15,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:16,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:16,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:17,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:22,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:23,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:23,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:26,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:27,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:27,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:33,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:34,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:34,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:40,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:41,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:42,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:42,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:48,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:48,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:49,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:49,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:50,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:50,1
    - Dst: File::Close
      Src: /src/brpc/test/file_unittest.cc:53,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:54,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:54,1
    - Dst: File::Initialize
      Src: /src/brpc/test/file_unittest.cc:60,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:61,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:61,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:62,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:63,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:63,1
    - Dst: File::Close
      Src: /src/brpc/test/file_unittest.cc:66,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:67,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:67,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:73,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:73,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:74,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:75,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:75,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:82,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:82,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:83,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:84,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:84,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:93,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:94,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:95,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:98,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_unittest.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 99
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::created
    - File::Close
    - butil::ScopedTempDir::path
    - File::IsValid
    - File::error_details
    - EXPECT_FALSE
    - butil::PathExists
    - EXPECT_EQ
    - File::Initialize
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, Create)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:103,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:103,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:108,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:108,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:109,1
    - Dst: File::async
      Src: /src/brpc/test/file_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:114,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:114,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:115,1
    - Dst: File::async
      Src: /src/brpc/test/file_unittest.cc:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - EXPECT_TRUE
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::async
    - butil::ScopedTempDir::path
    - File::IsValid
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, Async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:121,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:121,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:122,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:128,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:128,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:129,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:130,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:130,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:136,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:136,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:137,1
    - Dst: File::created
      Src: /src/brpc/test/file_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:138,1
    - Dst: File::error_details
      Src: /src/brpc/test/file_unittest.cc:138,1
    - Dst: File::Close
      Src: /src/brpc/test/file_unittest.cc:141,1
    - Dst: File::Close
      Src: /src/brpc/test/file_unittest.cc:142,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:143,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_unittest.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 144
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - EXPECT_TRUE
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::created
    - File::Close
    - butil::ScopedTempDir::path
    - File::IsValid
    - File::error_details
    - EXPECT_FALSE
    - butil::PathExists
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, DeleteOpenFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:148,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:148,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:153,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:153,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:159,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:160,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:164,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:168,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:169,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:176,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:180,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:186,1
    - Dst: File::ReadNoBestEffort
      Src: /src/brpc/test/file_unittest.cc:189,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/file_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:192,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:199,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:203,1
    - Dst: GetFileSize
      Src: /src/brpc/test/file_unittest.cc:203,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:204,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:208,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:215,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - ASSERT_TRUE
    - File::ReadNoBestEffort
    - EXPECT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - GetFileSize
    - File::Write
    - EXPECT_LE
    - butil::ScopedTempDir::path
    - File::Read
    - File::IsValid
    - static_cast<int>
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, ReadWrite)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:219,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:220,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:220,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:223,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:223,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:230,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:234,1
    - Dst: File::Close
      Src: /src/brpc/test/file_unittest.cc:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:240,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:240,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_unittest.cc:243,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:244,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:244,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:245,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:245,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:252,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 263
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::Write
    - File::Pass
    - File::Close
    - butil::ScopedTempDir::path
    - File::Read
    - File::IsValid
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, Append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:268,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:268,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:273,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:274,1
    - Dst: File::GetLength
      Src: /src/brpc/test/file_unittest.cc:274,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:280,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:285,1
    - Dst: File::SetLength
      Src: /src/brpc/test/file_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:286,1
    - Dst: File::GetLength
      Src: /src/brpc/test/file_unittest.cc:286,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:287,1
    - Dst: GetFileSize
      Src: /src/brpc/test/file_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:288,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:292,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:297,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:301,1
    - Dst: File::SetLength
      Src: /src/brpc/test/file_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:302,1
    - Dst: File::GetLength
      Src: /src/brpc/test/file_unittest.cc:302,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:303,1
    - Dst: GetFileSize
      Src: /src/brpc/test/file_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:304,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:310,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 311
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - ASSERT_TRUE
    - EXPECT_TRUE
    - GetFileSize
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::Write
    - File::SetLength
    - butil::ScopedTempDir::path
    - File::Read
    - File::IsValid
    - static_cast<int>
    - EXPECT_EQ
    - File::GetLength
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, Length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:319,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:320,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:320,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:324,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:324,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:328,1
    - Dst: File::GetInfo
      Src: /src/brpc/test/file_unittest.cc:328,1
    - Dst: butil::Time::Now
      Src: /src/brpc/test/file_unittest.cc:332,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/file_unittest.cc:332,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:333,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:334,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:335,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/file_unittest.cc:336,1
    - Dst: butil::File::Info::last_accessed::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:336,1
    - Dst: butil::Time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:336,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/file_unittest.cc:337,1
    - Dst: butil::File::Info::last_modified::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:337,1
    - Dst: butil::Time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:337,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/file_unittest.cc:338,1
    - Dst: butil::File::Info::creation_time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:338,1
    - Dst: butil::Time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:338,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:345,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/file_unittest.cc:352,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/file_unittest.cc:354,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:356,1
    - Dst: File::SetTimes
      Src: /src/brpc/test/file_unittest.cc:356,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:359,1
    - Dst: File::GetInfo
      Src: /src/brpc/test/file_unittest.cc:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:360,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:361,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:362,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:366,1
    - Dst: butil::File::Info::last_accessed::ToTimeVal
      Src: /src/brpc/test/file_unittest.cc:366,1
    - Dst: butil::Time::ToTimeVal
      Src: /src/brpc/test/file_unittest.cc:367,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:368,1
    - Dst: butil::File::Info::last_modified::ToTimeVal
      Src: /src/brpc/test/file_unittest.cc:368,1
    - Dst: butil::Time::ToTimeVal
      Src: /src/brpc/test/file_unittest.cc:369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:371,1
    - Dst: butil::File::Info::last_accessed::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:371,1
    - Dst: butil::Time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:373,1
    - Dst: butil::File::Info::last_modified::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:373,1
    - Dst: butil::Time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:377,1
    - Dst: butil::File::Info::creation_time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:377,1
    - Dst: butil::Time::ToInternalValue
      Src: /src/brpc/test/file_unittest.cc:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 379
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::File::Info::last_modified::ToTimeVal
    - butil::ScopedTempDir::path
    - butil::File::Info::creation_time::ToInternalValue
    - File::Write
    - butil::Time::ToInternalValue
    - butil::Time::ToTimeVal
    - EXPECT_FALSE
    - EXPECT_EQ
    - File::SetTimes
    - EXPECT_TRUE
    - butil::File::Info::last_accessed::ToInternalValue
    - butil::TimeDelta::FromMinutes
    - EXPECT_LE
    - File::IsValid
    - butil::TimeDelta::FromSeconds
    - butil::Time::Now
    - ASSERT_TRUE
    - butil::File::Info::last_modified::ToInternalValue
    - butil::File::Info::last_accessed::ToTimeVal
    - File::GetInfo
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, DISABLED_TouchGetInfo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:382,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:383,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:383,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:384,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:388,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:388,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:392,1
    - Dst: File::Write
      Src: /src/brpc/test/file_unittest.cc:392,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:394,1
    - Dst: File::Seek
      Src: /src/brpc/test/file_unittest.cc:394,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:398,1
    - Dst: File::ReadAtCurrentPos
      Src: /src/brpc/test/file_unittest.cc:398,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:399,1
    - Dst: File::ReadAtCurrentPos
      Src: /src/brpc/test/file_unittest.cc:400,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:402,1
    - Dst: std::string
      Src: /src/brpc/test/file_unittest.cc:402,1
    - Dst: std::string
      Src: /src/brpc/test/file_unittest.cc:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 403
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - EXPECT_TRUE
    - ASSERT_TRUE
    - File::Seek
    - butil::ScopedTempDir::CreateUniqueTempDir
    - std::string
    - File::ReadAtCurrentPos
    - File::Write
    - butil::ScopedTempDir::path
    - File::IsValid
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, ReadAtCurrentPosition)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:406,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:407,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:407,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:408,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:412,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:418,1
    - Dst: File::WriteAtCurrentPos
      Src: /src/brpc/test/file_unittest.cc:418,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:419,1
    - Dst: File::WriteAtCurrentPos
      Src: /src/brpc/test/file_unittest.cc:420,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:424,1
    - Dst: File::Read
      Src: /src/brpc/test/file_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:425,1
    - Dst: std::string
      Src: /src/brpc/test/file_unittest.cc:425,1
    - Dst: std::string
      Src: /src/brpc/test/file_unittest.cc:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 426
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - File::WriteAtCurrentPos
    - butil::ScopedTempDir::ScopedTempDir
    - EXPECT_TRUE
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - std::string
    - butil::ScopedTempDir::path
    - File::Read
    - File::IsValid
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, WriteAtCurrentPosition)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:429,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:430,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:430,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:431,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:435,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:438,1
    - Dst: File::Seek
      Src: /src/brpc/test/file_unittest.cc:438,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:439,1
    - Dst: File::Seek
      Src: /src/brpc/test/file_unittest.cc:439,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:440,1
    - Dst: File::Seek
      Src: /src/brpc/test/file_unittest.cc:440,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:441,1
    - Dst: File::SetLength
      Src: /src/brpc/test/file_unittest.cc:441,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:442,1
    - Dst: File::Seek
      Src: /src/brpc/test/file_unittest.cc:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 443
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - ASSERT_TRUE
    - File::Seek
    - EXPECT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::SetLength
    - butil::ScopedTempDir::path
    - File::IsValid
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, Seek)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedTempDir::ScopedTempDir
      Src: /src/brpc/test/file_unittest.cc:447,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:448,1
    - Dst: butil::ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/file_unittest.cc:448,1
    - Dst: butil::ScopedTempDir::path
      Src: /src/brpc/test/file_unittest.cc:449,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_unittest.cc:449,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:450,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_unittest.cc:450,1
    - Dst: ::CreateFile
      Src: /src/brpc/test/file_unittest.cc:453,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_unittest.cc:453,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_unittest.cc:460,1
    - Dst: butil::File::IsValid
      Src: /src/brpc/test/file_unittest.cc:460,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:463,1
    - Dst: butil::File::GetInfo
      Src: /src/brpc/test/file_unittest.cc:463,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_unittest.cc:464,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_unittest.cc:465,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_unittest.cc:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 467
    functionName: TEST
    functionSourceFile: /src/brpc/test/file_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedTempDir::ScopedTempDir
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - FilePath::value
    - FILE_PATH_LITERAL
    - butil::ScopedTempDir::path
    - CreateDirectory
    - EXPECT_FALSE
    - ::CreateFile
    - EXPECT_EQ
    - butil::File::GetInfo
    - butil::File::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(FileTest, GetInfoForDirectory)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: ClientMeta
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ClientMeta
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: SocketMeta
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT SocketMeta
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:75,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:88,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:92,1
    - Dst: SocketMeta*::req::exchange
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:97,1
    - Dst: SocketMeta*::req::fetch_add
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:101,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 33
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 107
    functionName: process_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketMeta*::req::exchange
    - read
    - SocketMeta*::req::fetch_add
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:121,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:121,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:133,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:135,1
    - Dst: SocketMeta*::req::fetch_add
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:146,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:148,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 157
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - epoll_wait
    - bthread_start_urgent
    - kevent
    - SocketMeta*::req::fetch_add
    - PLOG
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:165,1
    - Dst: write
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:172,1
    - Dst: writev
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:179,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:183,1
    - Dst: free
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:195,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 197
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - writev
    - free
    - malloc
    - PLOG
    - write
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 206
    functionName: fmix32
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t fmix32 ( uint32_t h )
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:225,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:227,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:233,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:233,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:234,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:236,1
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:247,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:247,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:258,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:258,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:261,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:262,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:263,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:270,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:272,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:272,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:276,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:278,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:279,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:292,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:292,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:293,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:304,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:304,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:308,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:308,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:311,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:313,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:316,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:317,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 318
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - pthread_create
    - bthread_start_background
    - bthread_join
    - sleep
    - epoll_create
    - butil::Timer::start
    - kqueue
    - stop_and_join_epoll_threads
    - kevent
    - LOG
    - fmix32
    - epoll_ctl
    - butil::Timer::Timer
    - socketpair
    - butil::Timer::u_elapsed
    - SocketMeta::SocketMeta
    - malloc
    - EV_SET
    - EpollMeta::EpollMeta
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::stop
    - ClientMeta::ClientMeta
    - pthread_join
    - ASSERT_GT
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(DispatcherTest, dispatch_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: ClientMeta
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ClientMeta
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: SocketMeta
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::atomic::atomic
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT SocketMeta
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:75,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:88,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:92,1
    - Dst: SocketMeta*::req::exchange
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:97,1
    - Dst: SocketMeta*::req::fetch_add
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:101,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 33
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 107
    functionName: process_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketMeta*::req::exchange
    - read
    - SocketMeta*::req::fetch_add
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:121,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:121,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:133,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:135,1
    - Dst: SocketMeta*::req::fetch_add
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:146,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:148,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 157
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - epoll_wait
    - bthread_start_urgent
    - kevent
    - SocketMeta*::req::fetch_add
    - PLOG
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:165,1
    - Dst: write
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:172,1
    - Dst: writev
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:179,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:183,1
    - Dst: free
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:195,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 197
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - writev
    - free
    - malloc
    - PLOG
    - write
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 206
    functionName: fmix32
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t fmix32 ( uint32_t h )
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:225,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:227,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:233,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:233,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:234,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:236,1
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:247,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:247,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:258,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:258,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:261,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:262,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:263,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:270,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:272,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:272,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:276,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:278,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:279,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:292,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:292,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:293,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:304,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:304,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:308,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:308,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:311,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:313,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:316,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:317,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 318
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - pthread_create
    - bthread_start_background
    - bthread_join
    - sleep
    - epoll_create
    - butil::Timer::start
    - kqueue
    - stop_and_join_epoll_threads
    - kevent
    - LOG
    - fmix32
    - epoll_ctl
    - butil::Timer::Timer
    - socketpair
    - butil::Timer::u_elapsed
    - SocketMeta::SocketMeta
    - malloc
    - EV_SET
    - EpollMeta::EpollMeta
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::stop
    - ClientMeta::ClientMeta
    - pthread_join
    - ASSERT_GT
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(DispatcherTest, dispatch_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    functionName: ExtensionTest::ExtensionTest
    functionSourceFile: /src/brpc/test/brpc_extension_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExtensionTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: ~ExtensionTest()
    functionSourceFile: /src/brpc/test/brpc_extension_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ExtensionTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/test/brpc_extension_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: ConstIntExtension
    functionSourceFile: /src/brpc/test/brpc_extension_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: brpc::Extension<const int>
    signature: brpc::Extension<const int> * ConstIntExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/test/brpc_extension_unittest.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: IntExtension
    functionSourceFile: /src/brpc/test/brpc_extension_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: brpc::Extension<int>
    signature: brpc::Extension<int> * IntExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConstIntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:54,1
    - Dst: ConstIntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:55,1
    - Dst: ConstIntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:56,1
    - Dst: int::int
      Src: /src/brpc/test/brpc_extension_unittest.cpp:58,1
    - Dst: int::int
      Src: /src/brpc/test/brpc_extension_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_extension_unittest.cpp:60,1
    - Dst: IntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_extension_unittest.cpp:61,1
    - Dst: IntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:61,1
    - Dst: IntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_extension_unittest.cpp:63,1
    - Dst: IntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_extension_unittest.cpp:64,1
    - Dst: IntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:64,1
    - Dst: IntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_extension_unittest.cpp:67,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_extension_unittest.cpp:67,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_extension_unittest.cpp:69,1
    - Dst: ConstIntExtension
      Src: /src/brpc/test/brpc_extension_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_extension_unittest.cpp:71,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_extension_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 53
    functionDepth: 2
    functionLinenumber: 53
    functionLinenumberEnd: 72
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_extension_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - IntExtension
    - ConstIntExtension
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExtensionTest, basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/baidu_time_unittest.cpp:33,1
    - Dst: clock_gettime
      Src: /src/brpc/test/baidu_time_unittest.cpp:35,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/test/baidu_time_unittest.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/test/baidu_time_unittest.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - clock_gettime
    - butil::timespec_to_microseconds
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, diff_between_gettimeofday_and_REALTIME)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:56,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/baidu_time_unittest.cpp:58,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:61,1
    - Dst: stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:63,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:65,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:66,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:66,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:68,1
    - Dst: clock
      Src: /src/brpc/test/baidu_time_unittest.cpp:70,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:72,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:73,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:73,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:76,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/baidu_time_unittest.cpp:78,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:80,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:81,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:81,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/baidu_time_unittest.cpp:85,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:87,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:88,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:88,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:90,1
    - Dst: time
      Src: /src/brpc/test/baidu_time_unittest.cpp:92,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:94,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:95,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:95,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:97,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/test/baidu_time_unittest.cpp:99,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:101,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:102,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:102,1
    - Dst: arraysize
      Src: /src/brpc/test/baidu_time_unittest.cpp:104,1
    - Dst: syscall
      Src: /src/brpc/test/baidu_time_unittest.cpp:106,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:107,1
    - Dst: syscall
      Src: /src/brpc/test/baidu_time_unittest.cpp:109,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:111,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:112,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:113,1
    - Dst: clock_gettime
      Src: /src/brpc/test/baidu_time_unittest.cpp:116,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:117,1
    - Dst: clock_gettime
      Src: /src/brpc/test/baidu_time_unittest.cpp:119,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:121,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:122,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:123,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 126
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - stop
    - butil::Timer::stop
    - syscall
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - clock
    - arraysize
    - butil::monotonic_time_ns
    - clock_gettime
    - butil::cpuwide_time_ns
    - printf
    - time
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, cost_of_timer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/test/baidu_time_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:132,1
    - Dst: butil::timespec_normalize
      Src: /src/brpc/test/baidu_time_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:137,1
    - Dst: butil::timespec_normalize
      Src: /src/brpc/test/baidu_time_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:142,1
    - Dst: butil::timespec_add
      Src: /src/brpc/test/baidu_time_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:147,1
    - Dst: butil::timespec_minus
      Src: /src/brpc/test/baidu_time_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:152,1
    - Dst: butil::timespec_minus
      Src: /src/brpc/test/baidu_time_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:157,1
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:161,1
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:165,1
    - Dst: butil::microseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:169,1
    - Dst: butil::microseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:173,1
    - Dst: butil::milliseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:177,1
    - Dst: butil::milliseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:181,1
    - Dst: butil::seconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:185,1
    - Dst: butil::seconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 190
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::milliseconds_from
    - ASSERT_EQ
    - butil::seconds_from
    - butil::timespec_minus
    - butil::microseconds_from
    - butil::nanoseconds_from
    - butil::timespec_add
    - butil::timespec_normalize
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, timespec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/baidu_time_unittest.cpp:195,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:198,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/baidu_time_unittest.cpp:199,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 205
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, every_many_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/baidu_time_unittest.cpp:209,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:210,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:211,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 212
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - printf
    - butil::Timer::stop
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, timer_auto_start)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/baidu_time_unittest.cpp:33,1
    - Dst: clock_gettime
      Src: /src/brpc/test/baidu_time_unittest.cpp:35,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/test/baidu_time_unittest.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/test/baidu_time_unittest.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - clock_gettime
    - butil::timespec_to_microseconds
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, diff_between_gettimeofday_and_REALTIME)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:56,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/baidu_time_unittest.cpp:58,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:61,1
    - Dst: stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:63,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:65,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:66,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:66,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:68,1
    - Dst: clock
      Src: /src/brpc/test/baidu_time_unittest.cpp:70,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:72,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:73,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:73,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:76,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/baidu_time_unittest.cpp:78,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:80,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:81,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:81,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/baidu_time_unittest.cpp:85,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:87,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:88,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:88,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:90,1
    - Dst: time
      Src: /src/brpc/test/baidu_time_unittest.cpp:92,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:94,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:95,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:95,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:97,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/test/baidu_time_unittest.cpp:99,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:101,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:102,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:102,1
    - Dst: arraysize
      Src: /src/brpc/test/baidu_time_unittest.cpp:104,1
    - Dst: syscall
      Src: /src/brpc/test/baidu_time_unittest.cpp:106,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:107,1
    - Dst: syscall
      Src: /src/brpc/test/baidu_time_unittest.cpp:109,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:111,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:112,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:113,1
    - Dst: clock_gettime
      Src: /src/brpc/test/baidu_time_unittest.cpp:116,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/baidu_time_unittest.cpp:117,1
    - Dst: clock_gettime
      Src: /src/brpc/test/baidu_time_unittest.cpp:119,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:121,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:122,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:123,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 126
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - stop
    - butil::Timer::stop
    - syscall
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - clock
    - arraysize
    - butil::monotonic_time_ns
    - clock_gettime
    - butil::cpuwide_time_ns
    - printf
    - time
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, cost_of_timer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/test/baidu_time_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:132,1
    - Dst: butil::timespec_normalize
      Src: /src/brpc/test/baidu_time_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:137,1
    - Dst: butil::timespec_normalize
      Src: /src/brpc/test/baidu_time_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:142,1
    - Dst: butil::timespec_add
      Src: /src/brpc/test/baidu_time_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:147,1
    - Dst: butil::timespec_minus
      Src: /src/brpc/test/baidu_time_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:152,1
    - Dst: butil::timespec_minus
      Src: /src/brpc/test/baidu_time_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:157,1
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:161,1
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:165,1
    - Dst: butil::microseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:169,1
    - Dst: butil::microseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:173,1
    - Dst: butil::milliseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:177,1
    - Dst: butil::milliseconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:181,1
    - Dst: butil::seconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:185,1
    - Dst: butil::seconds_from
      Src: /src/brpc/test/baidu_time_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_time_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 190
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::milliseconds_from
    - ASSERT_EQ
    - butil::seconds_from
    - butil::timespec_minus
    - butil::microseconds_from
    - butil::nanoseconds_from
    - butil::timespec_add
    - butil::timespec_normalize
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, timespec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/baidu_time_unittest.cpp:195,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:198,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/baidu_time_unittest.cpp:199,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 205
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, every_many_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/baidu_time_unittest.cpp:209,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/baidu_time_unittest.cpp:210,1
    - Dst: printf
      Src: /src/brpc/test/baidu_time_unittest.cpp:211,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/baidu_time_unittest.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 212
    functionName: TEST
    functionSourceFile: /src/brpc/test/baidu_time_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - printf
    - butil::Timer::stop
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST(BaiduTimeTest, timer_auto_start)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:27,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 13
    functionDepth: 1
    functionLinenumber: 13
    functionLinenumberEnd: 28
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Floor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:44,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 45
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Ceiling
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Ceiling)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:27,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 13
    functionDepth: 1
    functionLinenumber: 13
    functionLinenumberEnd: 28
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Floor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:44,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 45
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Ceiling
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Ceiling)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:27,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 13
    functionDepth: 1
    functionLinenumber: 13
    functionLinenumberEnd: 28
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Floor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:44,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 45
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Ceiling
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Ceiling)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:14,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:15,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:16,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:17,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:27,1
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/test/bits_unittest.cc:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 13
    functionDepth: 1
    functionLinenumber: 13
    functionLinenumberEnd: 28
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Floor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bits_unittest.cc:44,1
    - Dst: butil::bits::Log2Ceiling
      Src: /src/brpc/test/bits_unittest.cc:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 45
    functionName: butil::bits::TEST
    functionSourceFile: /src/brpc/test/bits_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::bits::Log2Ceiling
    linkageType: ''
    returnType: void
    signature: void TEST(BitsTest, Log2Ceiling)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/class_name_unittest.cpp:32,1
    - Dst: time
      Src: /src/brpc/test/class_name_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: ClassNameTest::SetUp
    functionSourceFile: /src/brpc/test/class_name_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:37,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:38,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:40,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:42,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 43
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/class_name_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::demangle
    linkageType: ''
    returnType: void
    signature: void TEST_F(ClassNameTest, demangle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:46,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:46,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:47,1
    - Dst: butil::class_name<short>
      Src: /src/brpc/test/class_name_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:48,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:49,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:50,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:51,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:51,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:52,1
    - Dst: butil::class_name<char*>
      Src: /src/brpc/test/class_name_unittest.cpp:52,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:53,1
    - Dst: butil::class_name<const char*>
      Src: /src/brpc/test/class_name_unittest.cpp:53,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:54,1
    - Dst: butil::class_name<butil::foobar::MyClass>
      Src: /src/brpc/test/class_name_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:57,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/test/class_name_unittest.cpp:59,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:59,1
    - Dst: LOG
      Src: /src/brpc/test/class_name_unittest.cpp:60,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 61
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/class_name_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::class_name<butil::foobar::MyClass>
    - ASSERT_STREQ
    - butil::class_name_str
    - butil::class_name<short>
    - butil::class_name<const char*>
    - butil::class_name<char*>
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ClassNameTest, class_name_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/class_name_unittest.cpp:32,1
    - Dst: time
      Src: /src/brpc/test/class_name_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: ClassNameTest::SetUp
    functionSourceFile: /src/brpc/test/class_name_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:37,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:38,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:40,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:42,1
    - Dst: butil::demangle
      Src: /src/brpc/test/class_name_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 43
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/class_name_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::demangle
    linkageType: ''
    returnType: void
    signature: void TEST_F(ClassNameTest, demangle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:46,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:46,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:47,1
    - Dst: butil::class_name<short>
      Src: /src/brpc/test/class_name_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:48,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:49,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:50,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:51,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:51,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:52,1
    - Dst: butil::class_name<char*>
      Src: /src/brpc/test/class_name_unittest.cpp:52,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:53,1
    - Dst: butil::class_name<const char*>
      Src: /src/brpc/test/class_name_unittest.cpp:53,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/class_name_unittest.cpp:54,1
    - Dst: butil::class_name<butil::foobar::MyClass>
      Src: /src/brpc/test/class_name_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/class_name_unittest.cpp:57,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/test/class_name_unittest.cpp:59,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:59,1
    - Dst: LOG
      Src: /src/brpc/test/class_name_unittest.cpp:60,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/class_name_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 61
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/class_name_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::class_name<butil::foobar::MyClass>
    - ASSERT_STREQ
    - butil::class_name_str
    - butil::class_name<short>
    - butil::class_name<const char*>
    - butil::class_name<char*>
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ClassNameTest, class_name_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::NonThreadSafeClass::NonThreadSafeClass
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::NonThreadSafeClass::DoStuff
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::NonThreadSafeClass::DetachFromThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(NonThreadSafeClass* non_thread_safe_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/non_thread_safe_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteNonThreadSafeClassOnThread::DeleteNonThreadSafeClassOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteNonThreadSafeClassOnThread(\n      NonThreadSafeClass*
      non_thread_safe_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/non_thread_safe_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteNonThreadSafeClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::NonThreadSafeClass::NonThreadSafeClass
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::NonThreadSafeClass::DoStuff
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::NonThreadSafeClass::DetachFromThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(NonThreadSafeClass* non_thread_safe_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/non_thread_safe_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteNonThreadSafeClassOnThread::DeleteNonThreadSafeClassOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteNonThreadSafeClassOnThread(\n      NonThreadSafeClass*
      non_thread_safe_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/non_thread_safe_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteNonThreadSafeClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:88,1
    - Dst: scoped_ptr::DoStuff
      Src: /src/brpc/test/non_thread_safe_unittest.cc:91,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/non_thread_safe_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - NonThreadSafeClass::NonThreadSafeClass
    - scoped_ptr::DoStuff
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, CallsAllowedOnSameThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:99,1
    - Dst: scoped_ptr::DetachFromThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:103,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/non_thread_safe_unittest.cc:105,1
    - Dst: DeleteNonThreadSafeClassOnThread::Start
      Src: /src/brpc/test/non_thread_safe_unittest.cc:107,1
    - Dst: DeleteNonThreadSafeClassOnThread::Join
      Src: /src/brpc/test/non_thread_safe_unittest.cc:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 109
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - DeleteNonThreadSafeClassOnThread::Start
    - scoped_ptr::release
    - scoped_ptr::DetachFromThread
    - NonThreadSafeClass::NonThreadSafeClass
    - DeleteNonThreadSafeClassOnThread::Join
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, DetachThenDestructOnDifferentThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:115,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/non_thread_safe_unittest.cc:119,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/non_thread_safe_unittest.cc:121,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/non_thread_safe_unittest.cc:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr::get
    - NonThreadSafeClass::NonThreadSafeClass
    - CallDoStuffOnThread::Join
    - CallDoStuffOnThread::Start
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass::MethodOnDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/non_thread_safe_unittest.cc:127,1
    - Dst: butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeDeathTest, MethodNotAllowedOnDifferentThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, MethodAllowedOnDifferentThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:139,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/non_thread_safe_unittest.cc:144,1
    - Dst: DeleteNonThreadSafeClassOnThread::Start
      Src: /src/brpc/test/non_thread_safe_unittest.cc:146,1
    - Dst: DeleteNonThreadSafeClassOnThread::Join
      Src: /src/brpc/test/non_thread_safe_unittest.cc:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 148
    functionName: butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - NonThreadSafeClass::NonThreadSafeClass
    - DeleteNonThreadSafeClassOnThread::Join
    - DeleteNonThreadSafeClassOnThread::Start
    - scoped_ptr::release
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass::DestructorOnDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/non_thread_safe_unittest.cc:152,1
    - Dst: butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 155
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeDeathTest, DestructorNotAllowedOnDifferentThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, DestructorAllowedOnDifferentThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::NonThreadSafeClass::NonThreadSafeClass
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::NonThreadSafeClass::DoStuff
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::NonThreadSafeClass::DetachFromThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 3
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(NonThreadSafeClass* non_thread_safe_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/non_thread_safe_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteNonThreadSafeClassOnThread::DeleteNonThreadSafeClassOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteNonThreadSafeClassOnThread(\n      NonThreadSafeClass*
      non_thread_safe_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/non_thread_safe_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteNonThreadSafeClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::NonThreadSafeClass::NonThreadSafeClass
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::NonThreadSafeClass::DoStuff
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::NonThreadSafeClass::DetachFromThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 4
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(NonThreadSafeClass* non_thread_safe_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/non_thread_safe_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - non_thread_safe_class
    argTypes:
    - NonThreadSafeClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteNonThreadSafeClassOnThread::DeleteNonThreadSafeClassOnThread
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteNonThreadSafeClassOnThread(\n      NonThreadSafeClass*
      non_thread_safe_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/non_thread_safe_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteNonThreadSafeClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:88,1
    - Dst: scoped_ptr::DoStuff
      Src: /src/brpc/test/non_thread_safe_unittest.cc:91,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/non_thread_safe_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - NonThreadSafeClass::NonThreadSafeClass
    - scoped_ptr::DoStuff
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, CallsAllowedOnSameThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:99,1
    - Dst: scoped_ptr::DetachFromThread
      Src: /src/brpc/test/non_thread_safe_unittest.cc:103,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/non_thread_safe_unittest.cc:105,1
    - Dst: DeleteNonThreadSafeClassOnThread::Start
      Src: /src/brpc/test/non_thread_safe_unittest.cc:107,1
    - Dst: DeleteNonThreadSafeClassOnThread::Join
      Src: /src/brpc/test/non_thread_safe_unittest.cc:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 109
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - DeleteNonThreadSafeClassOnThread::Start
    - scoped_ptr::release
    - scoped_ptr::DetachFromThread
    - NonThreadSafeClass::NonThreadSafeClass
    - DeleteNonThreadSafeClassOnThread::Join
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, DetachThenDestructOnDifferentThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:115,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/non_thread_safe_unittest.cc:119,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/non_thread_safe_unittest.cc:121,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/non_thread_safe_unittest.cc:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 2
    functionsReached:
    - scoped_ptr::get
    - NonThreadSafeClass::NonThreadSafeClass
    - CallDoStuffOnThread::Join
    - CallDoStuffOnThread::Start
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass::MethodOnDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/non_thread_safe_unittest.cc:127,1
    - Dst: butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeDeathTest, MethodNotAllowedOnDifferentThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, MethodAllowedOnDifferentThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NonThreadSafeClass::NonThreadSafeClass
      Src: /src/brpc/test/non_thread_safe_unittest.cc:139,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/non_thread_safe_unittest.cc:144,1
    - Dst: DeleteNonThreadSafeClassOnThread::Start
      Src: /src/brpc/test/non_thread_safe_unittest.cc:146,1
    - Dst: DeleteNonThreadSafeClassOnThread::Join
      Src: /src/brpc/test/non_thread_safe_unittest.cc:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 148
    functionName: butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 2
    functionsReached:
    - NonThreadSafeClass::NonThreadSafeClass
    - DeleteNonThreadSafeClassOnThread::Join
    - DeleteNonThreadSafeClassOnThread::Start
    - scoped_ptr::release
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeClass::DestructorOnDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/non_thread_safe_unittest.cc:152,1
    - Dst: butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 155
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeDeathTest, DestructorNotAllowedOnDifferentThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
      Src: /src/brpc/test/non_thread_safe_unittest.cc:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(NonThreadSafeTest, DestructorAllowedOnDifferentThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/bthread_unittest.cpp:29,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bthread_unittest.cpp:30,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bthread_unittest.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 33
    functionName: main
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sysconf
      Src: /src/brpc/test/bthread_unittest.cpp:46,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_unittest.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 50
    functionName: BthreadTest::BthreadTest
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - sysconf
    linkageType: ''
    returnType: void
    signature: void BthreadTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: ~BthreadTest()
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BthreadTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, sizeof_task_meta)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: unrelated_pthread
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * unrelated_pthread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:70,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:72,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 74
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, unrelated_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:78,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:79,1
    - Dst: bthread_attr_destroy
      Src: /src/brpc/test/bthread_unittest.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_attr_init
    - bthread_attr_destroy
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, attr_init_and_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:87,1
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - param
    argTypes:
    - intptr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: f
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 182
    functionsReached:
    - bthread_jump_fcontext
    linkageType: ''
    returnType: void
    signature: void f(intptr_t param)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/bthread_unittest.cpp:94,1
    - Dst: std::make_pair
      Src: /src/brpc/test/bthread_unittest.cpp:96,1
    - Dst: bthread_make_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:97,1
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:99,1
    - Dst: std::make_pair
      Src: /src/brpc/test/bthread_unittest.cpp:102,1
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - bthread_jump_fcontext
    - std::make_pair
    - bthread_make_fcontext
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, context_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:108,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:109,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:110,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 111
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_self
    - bthread_join
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, call_bthread_functions_before_tls_created)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:117,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:118,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 121
    functionName: sleep_for_awhile
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleep_for_awhile(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:124,1
    - Dst: bthread_exit
      Src: /src/brpc/test/bthread_unittest.cpp:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 128
    functionName: just_exit
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void * just_exit(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:133,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 137
    functionName: repeated_sleep
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * repeated_sleep(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 150
    functionName: spin_and_log
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * spin_and_log(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: do_nothing
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * do_nothing(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:158,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:161,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 165
    functionName: launcher
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_start_urgent
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * launcher(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:171,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 175
    functionName: stopper
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * stopper(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:180,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:181,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:182,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:183,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:184,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:185,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:186,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:187,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:187,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:189,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 192
    functionName: misc
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - bthread_start_urgent
    - bthread_join
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: void * misc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:195,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:197,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:198,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:199,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 200
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - pthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: backtrace
      Src: /src/brpc/test/bthread_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 209
    functionName: do_bt
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - backtrace
    linkageType: ''
    returnType: int
    signature: int do_bt (void)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_bt
      Src: /src/brpc/test/bthread_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: call_do_bt
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - do_bt
    linkageType: ''
    returnType: int
    signature: int call_do_bt (void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: call_do_bt
      Src: /src/brpc/test/bthread_unittest.cpp:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 220
    functionName: tf
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 69
    functionsReached:
    - call_do_bt
    linkageType: ''
    returnType: void
    signature: void * tf (void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:224,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:225,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:225,1
    - Dst: backtrace_symbols
      Src: /src/brpc/test/bthread_unittest.cpp:227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:228,1
    - Dst: puts
      Src: /src/brpc/test/bthread_unittest.cpp:230,1
    - Dst: free
      Src: /src/brpc/test/bthread_unittest.cpp:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 233
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - free
    - bthread_start_urgent
    - bthread_join
    - backtrace_symbols
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, backtrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:236,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:237,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 239
    functionName: show_self
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - bthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void * show_self(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:242,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:244,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:245,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 246
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_self
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_self)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:249,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:249,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 251
    functionName: join_self
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_self
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void * join_self(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:255,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:258,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:262,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_join)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 268
    functionName: change_errno
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * change_errno(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 275
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, errno_not_changed)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bthread_unittest.cpp:283,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bthread_unittest.cpp:284,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:286,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:288,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bthread_unittest.cpp:288,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bthread_unittest.cpp:291,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 294
    functionName: adding_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic*::fetch_add
    - LOG
    - butil::cpuwide_time_us
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * adding_func(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/bthread_unittest.cpp:301,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_unittest.cpp:303,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_unittest.cpp:309,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:310,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/bthread_unittest.cpp:312,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_unittest.cpp:314,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:319,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:319,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_unittest.cpp:321,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_unittest.cpp:323,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_unittest.cpp:325,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:330,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:332,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_unittest.cpp:335,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_unittest.cpp:335,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 339
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - std::vector::end
    - std::sort
    - bthread_join
    - snprintf
    - std::vector::reserve
    - std::vector::begin
    - std::unique
    - std::vector::clear
    - ProfilerStart
    - LOG
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, small_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/test/bthread_unittest.cpp:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:345,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:345,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_unittest.cpp:346,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_unittest.cpp:348,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:349,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:349,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - void_counter
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 352
    functionName: bthread_starter
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - bthread_start_urgent
    - load
    - bthread_join
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * bthread_starter(void* void_counter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/test/bthread_unittest.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 357
    functionName: AlignedCounter
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT AlignedCounter
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: AlignedCounter
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AlignedCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/bthread_unittest.cpp:362,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_unittest.cpp:363,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_unittest.cpp:364,1
    - Dst: AlignedCounter::AlignedCounter
      Src: /src/brpc/test/bthread_unittest.cpp:365,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:374,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:374,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:377,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:378,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:379,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:382,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_unittest.cpp:384,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:387,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_unittest.cpp:392,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 359
    functionDepth: 2
    functionLinenumber: 359
    functionLinenumberEnd: 394
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - ASSERT_GT
    - bthread_join
    - snprintf
    - AlignedCounter::AlignedCounter
    - bthread_getconcurrency
    - butil::Timer::m_elapsed
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, start_bthreads_frequently)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<butil::Timer*>
      Src: /src/brpc/test/bthread_unittest.cpp:397,1
    - Dst: butil::Timer*::stop
      Src: /src/brpc/test/bthread_unittest.cpp:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 400
    functionName: log_start_latency
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<butil::Timer*>
    - butil::Timer*::stop
    linkageType: ''
    returnType: void
    signature: void * log_start_latency(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:408,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:409,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:411,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:412,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:414,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:415,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:416,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:417,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:420,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:426,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 428
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread_start_background
    - bthread_join
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, start_latency_when_high_idle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 433
    functionName: sleep_for_awhile_with_sleep
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleep_for_awhile_with_sleep(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:437,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:437,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:439,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:440,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:442,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:443,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:443,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_unittest.cpp:444,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_unittest.cpp:445,1
    - Dst: labs
      Src: /src/brpc/test/bthread_unittest.cpp:445,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 446
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread_join
    - ASSERT_LE
    - butil::Timer::m_elapsed
    - labs
    - bthread_stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, stop_sleep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:456,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:457,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:458,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_unittest.cpp:458,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:459,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:460,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:462,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:463,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:464,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:465,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:466,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 467
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_start_background
    - bthread_join
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_exit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:471,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:473,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:474,1
    - Dst: bthread_equal
      Src: /src/brpc/test/bthread_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:476,1
    - Dst: bthread_equal
      Src: /src/brpc/test/bthread_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:477,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:478,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:478,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 479
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_equal
    - ASSERT_EQ
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_equal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<pthread_t*>
      Src: /src/brpc/test/bthread_unittest.cpp:482,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - run
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 484
    functionName: mark_run
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<pthread_t*>
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void * mark_run(void* run)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:487,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:487,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:494,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:494,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:496,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:501,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:501,1
    - Dst: bthread_flush
      Src: /src/brpc/test/bthread_unittest.cpp:503,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:507,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:509,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:509,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:511,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:511,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:512,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - pthread_task
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 486
    functionDepth: 1
    functionLinenumber: 486
    functionLinenumberEnd: 515
    functionName: check_sleep
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_flush
    - bthread_start_urgent
    - bthread_usleep
    - bthread_join
    - EXPECT_NE
    - bthread_self
    - EXPECT_EQ
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void * check_sleep(void* pthread_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:523,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:523,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:525,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:528,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:530,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 531
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_start_urgent
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_usleep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:539,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 541
    functionName: test_parent_span
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 543
    functionDepth: 1
    functionLinenumber: 543
    functionLinenumberEnd: 548
    functionName: test_grandson_parent_span
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_grandson_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:553,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:556,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:557,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 559
    functionName: test_son_parent_span
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void * test_son_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic::fetch_add
      Src: /src/brpc/test/bthread_unittest.cpp:564,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 562
    functionDepth: 1
    functionLinenumber: 562
    functionLinenumberEnd: 567
    functionName: create_span_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - std::atomic::fetch_add
    linkageType: ''
    returnType: void
    signature: void * create_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:578,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:579,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:582,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:583,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:585,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:586,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:588,1
    - Dst: bthread_set_create_span_func
      Src: /src/brpc/test/bthread_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:596,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:598,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:600,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:601,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:601,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:602,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:604,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:604,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 605
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::find
    - bthread_start_urgent
    - bthread_start_background
    - bthread_join
    - ASSERT_NE
    - bthread_set_create_span_func
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, test_span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 609
    functionName: dummy_thread
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * dummy_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:615,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:615,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 611
    functionDepth: 1
    functionLinenumber: 611
    functionLinenumberEnd: 617
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, too_many_nosignal_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_yield
      Src: /src/brpc/test/bthread_unittest.cpp:620,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 619
    functionDepth: 1
    functionLinenumber: 619
    functionLinenumberEnd: 622
    functionName: yield_thread
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_yield
    linkageType: ''
    returnType: void
    signature: void * yield_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:626,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:627,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 624
    functionDepth: 1
    functionLinenumber: 624
    functionLinenumberEnd: 628
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_background
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, yield_single_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:637,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:637,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:639,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:642,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:643,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:647,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:647,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:649,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:650,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:651,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:651,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:657,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 658
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 658
    functionName: spin_and_log_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_start_urgent
    - std::string::find
    - bthread_join
    - usleep
    - ASSERT_NE
    - bthread::stack_trace
    - LOG
    linkageType: ''
    returnType: void
    signature: void spin_and_log_trace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:666,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:666,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:668,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:672,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:676,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:676,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:678,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:679,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:680,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:680,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:686,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 660
    functionDepth: 1
    functionLinenumber: 660
    functionLinenumberEnd: 687
    functionName: repeated_sleep_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_start_urgent
    - std::string::find
    - bthread_join
    - usleep
    - ASSERT_NE
    - bthread::stack_trace
    - LOG
    linkageType: ''
    returnType: void
    signature: void repeated_sleep_trace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: spin_and_log_trace
      Src: /src/brpc/test/bthread_unittest.cpp:690,1
    - Dst: repeated_sleep_trace
      Src: /src/brpc/test/bthread_unittest.cpp:691,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 689
    functionDepth: 2
    functionLinenumber: 689
    functionLinenumberEnd: 692
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - repeated_sleep_trace
    - spin_and_log_trace
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, trace)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sysconf
      Src: /src/brpc/test/bthread_unittest.cpp:46,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_unittest.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 50
    functionName: BthreadTest::BthreadTest
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - sysconf
    linkageType: ''
    returnType: void
    signature: void BthreadTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: ~BthreadTest()
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BthreadTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, sizeof_task_meta)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: unrelated_pthread
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * unrelated_pthread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:70,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:72,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 74
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, unrelated_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:78,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:79,1
    - Dst: bthread_attr_destroy
      Src: /src/brpc/test/bthread_unittest.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_attr_init
    - bthread_attr_destroy
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, attr_init_and_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:87,1
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - param
    argTypes:
    - intptr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: f
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 192
    functionsReached:
    - bthread_jump_fcontext
    linkageType: ''
    returnType: void
    signature: void f(intptr_t param)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/bthread_unittest.cpp:94,1
    - Dst: std::make_pair
      Src: /src/brpc/test/bthread_unittest.cpp:96,1
    - Dst: bthread_make_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:97,1
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:99,1
    - Dst: std::make_pair
      Src: /src/brpc/test/bthread_unittest.cpp:102,1
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/test/bthread_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - bthread_jump_fcontext
    - std::make_pair
    - bthread_make_fcontext
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, context_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:108,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:109,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:110,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 111
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_self
    - bthread_join
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, call_bthread_functions_before_tls_created)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:117,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:118,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 121
    functionName: sleep_for_awhile
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleep_for_awhile(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:124,1
    - Dst: bthread_exit
      Src: /src/brpc/test/bthread_unittest.cpp:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 128
    functionName: just_exit
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void * just_exit(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:133,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 137
    functionName: repeated_sleep
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * repeated_sleep(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 150
    functionName: spin_and_log
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * spin_and_log(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: do_nothing
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * do_nothing(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:158,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:161,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 165
    functionName: launcher
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_start_urgent
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * launcher(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:171,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 175
    functionName: stopper
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * stopper(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:180,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:181,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:182,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:183,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:184,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:185,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:186,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:187,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:187,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:189,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 192
    functionName: misc
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - bthread_start_urgent
    - bthread_join
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: void * misc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:195,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:197,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:198,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:199,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 200
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - pthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: backtrace
      Src: /src/brpc/test/bthread_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 209
    functionName: do_bt
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 2
    functionsReached:
    - backtrace
    linkageType: ''
    returnType: int
    signature: int do_bt (void)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_bt
      Src: /src/brpc/test/bthread_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: call_do_bt
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - do_bt
    linkageType: ''
    returnType: int
    signature: int call_do_bt (void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: call_do_bt
      Src: /src/brpc/test/bthread_unittest.cpp:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 220
    functionName: tf
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 71
    functionsReached:
    - call_do_bt
    linkageType: ''
    returnType: void
    signature: void * tf (void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:224,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:225,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:225,1
    - Dst: backtrace_symbols
      Src: /src/brpc/test/bthread_unittest.cpp:227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:228,1
    - Dst: puts
      Src: /src/brpc/test/bthread_unittest.cpp:230,1
    - Dst: free
      Src: /src/brpc/test/bthread_unittest.cpp:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 233
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - free
    - bthread_start_urgent
    - bthread_join
    - backtrace_symbols
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, backtrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:236,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:237,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 239
    functionName: show_self
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - bthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void * show_self(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:242,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:244,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:245,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 246
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_self
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_self)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:249,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:249,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 251
    functionName: join_self
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_self
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void * join_self(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:255,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:258,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:262,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_join)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 268
    functionName: change_errno
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * change_errno(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 275
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, errno_not_changed)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bthread_unittest.cpp:283,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bthread_unittest.cpp:284,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:286,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:288,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bthread_unittest.cpp:288,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bthread_unittest.cpp:291,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 294
    functionName: adding_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic*::fetch_add
    - LOG
    - butil::cpuwide_time_us
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * adding_func(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/bthread_unittest.cpp:301,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_unittest.cpp:303,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_unittest.cpp:309,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:310,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/bthread_unittest.cpp:312,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_unittest.cpp:314,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:319,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:319,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_unittest.cpp:321,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_unittest.cpp:323,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_unittest.cpp:325,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:330,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:332,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_unittest.cpp:335,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_unittest.cpp:335,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_unittest.cpp:336,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 339
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - std::vector::end
    - std::sort
    - bthread_join
    - snprintf
    - std::vector::reserve
    - std::vector::begin
    - std::unique
    - std::vector::clear
    - ProfilerStart
    - LOG
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, small_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/test/bthread_unittest.cpp:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:345,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:345,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_unittest.cpp:346,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_unittest.cpp:348,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:349,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:349,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - void_counter
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 352
    functionName: bthread_starter
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - bthread_start_urgent
    - load
    - bthread_join
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * bthread_starter(void* void_counter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/test/bthread_unittest.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 357
    functionName: AlignedCounter
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::atomic::atomic
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT AlignedCounter
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: AlignedCounter
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AlignedCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/bthread_unittest.cpp:362,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_unittest.cpp:363,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_unittest.cpp:364,1
    - Dst: AlignedCounter::AlignedCounter
      Src: /src/brpc/test/bthread_unittest.cpp:365,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:374,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:374,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:377,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:378,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:379,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:382,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_unittest.cpp:384,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:387,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_unittest.cpp:392,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 359
    functionDepth: 2
    functionLinenumber: 359
    functionLinenumberEnd: 394
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - ASSERT_GT
    - bthread_join
    - snprintf
    - AlignedCounter::AlignedCounter
    - bthread_getconcurrency
    - butil::Timer::m_elapsed
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, start_bthreads_frequently)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<butil::Timer*>
      Src: /src/brpc/test/bthread_unittest.cpp:397,1
    - Dst: butil::Timer*::stop
      Src: /src/brpc/test/bthread_unittest.cpp:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 400
    functionName: log_start_latency
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<butil::Timer*>
    - butil::Timer*::stop
    linkageType: ''
    returnType: void
    signature: void * log_start_latency(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:408,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:409,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:411,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:412,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:414,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:415,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:416,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:417,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:420,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:426,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 428
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread_start_background
    - bthread_join
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, start_latency_when_high_idle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 433
    functionName: sleep_for_awhile_with_sleep
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleep_for_awhile_with_sleep(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:437,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:437,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_unittest.cpp:439,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_unittest.cpp:440,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:442,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:443,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:443,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_unittest.cpp:444,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_unittest.cpp:445,1
    - Dst: labs
      Src: /src/brpc/test/bthread_unittest.cpp:445,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_unittest.cpp:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 446
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread_join
    - ASSERT_LE
    - butil::Timer::m_elapsed
    - labs
    - bthread_stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, stop_sleep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:456,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:457,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:458,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_unittest.cpp:458,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:459,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:460,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:462,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:463,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:464,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:465,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:466,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 467
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_start_background
    - bthread_join
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_exit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:471,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:473,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:474,1
    - Dst: bthread_equal
      Src: /src/brpc/test/bthread_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:476,1
    - Dst: bthread_equal
      Src: /src/brpc/test/bthread_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:477,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:478,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:478,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 479
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_equal
    - ASSERT_EQ
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_equal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<pthread_t*>
      Src: /src/brpc/test/bthread_unittest.cpp:482,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - run
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 484
    functionName: mark_run
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<pthread_t*>
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void * mark_run(void* run)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:487,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:487,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:494,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:494,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_unittest.cpp:496,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:501,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:501,1
    - Dst: bthread_flush
      Src: /src/brpc/test/bthread_unittest.cpp:503,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:507,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:509,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:509,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:511,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_unittest.cpp:511,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:512,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - pthread_task
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 486
    functionDepth: 1
    functionLinenumber: 486
    functionLinenumberEnd: 515
    functionName: check_sleep
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_flush
    - bthread_start_urgent
    - bthread_usleep
    - bthread_join
    - EXPECT_NE
    - bthread_self
    - EXPECT_EQ
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void * check_sleep(void* pthread_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:523,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:523,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:525,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:528,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:530,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 531
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_start_urgent
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_usleep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:539,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 541
    functionName: test_parent_span
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 543
    functionDepth: 1
    functionLinenumber: 543
    functionLinenumberEnd: 548
    functionName: test_grandson_parent_span
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_grandson_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:553,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:556,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:557,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 559
    functionName: test_son_parent_span
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void * test_son_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic::fetch_add
      Src: /src/brpc/test/bthread_unittest.cpp:564,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 562
    functionDepth: 1
    functionLinenumber: 562
    functionLinenumberEnd: 567
    functionName: create_span_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - std::atomic::fetch_add
    linkageType: ''
    returnType: void
    signature: void * create_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:578,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:579,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:582,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:583,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:585,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:586,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:588,1
    - Dst: bthread_set_create_span_func
      Src: /src/brpc/test/bthread_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:596,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:598,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:600,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:601,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:601,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:602,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:604,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:604,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 605
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::find
    - bthread_start_urgent
    - bthread_start_background
    - bthread_join
    - ASSERT_NE
    - bthread_set_create_span_func
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, test_span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 609
    functionName: dummy_thread
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * dummy_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:615,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:615,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 611
    functionDepth: 1
    functionLinenumber: 611
    functionLinenumberEnd: 617
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, too_many_nosignal_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_yield
      Src: /src/brpc/test/bthread_unittest.cpp:620,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 619
    functionDepth: 1
    functionLinenumber: 619
    functionLinenumberEnd: 622
    functionName: yield_thread
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_yield
    linkageType: ''
    returnType: void
    signature: void * yield_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:626,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:627,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 624
    functionDepth: 1
    functionLinenumber: 624
    functionLinenumberEnd: 628
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_background
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, yield_single_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:637,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:637,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:639,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:642,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:643,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:647,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:647,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:649,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:650,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:651,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:651,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:657,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 658
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 658
    functionName: spin_and_log_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_start_urgent
    - std::string::find
    - bthread_join
    - usleep
    - ASSERT_NE
    - bthread::stack_trace
    - LOG
    linkageType: ''
    returnType: void
    signature: void spin_and_log_trace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:666,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:666,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:668,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:672,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:676,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:676,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:678,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:679,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:680,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:680,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:686,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 660
    functionDepth: 1
    functionLinenumber: 660
    functionLinenumberEnd: 687
    functionName: repeated_sleep_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_start_urgent
    - std::string::find
    - bthread_join
    - usleep
    - ASSERT_NE
    - bthread::stack_trace
    - LOG
    linkageType: ''
    returnType: void
    signature: void repeated_sleep_trace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: spin_and_log_trace
      Src: /src/brpc/test/bthread_unittest.cpp:690,1
    - Dst: repeated_sleep_trace
      Src: /src/brpc/test/bthread_unittest.cpp:691,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 689
    functionDepth: 2
    functionLinenumber: 689
    functionLinenumberEnd: 692
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - repeated_sleep_trace
    - spin_and_log_trace
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, trace)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: SynchronousEventTest::SynchronousEventTest
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SynchronousEventTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~SynchronousEventTest()
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SynchronousEventTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/synchronous_event_unittest.cpp:28,1
    - Dst: time
      Src: /src/brpc/test/synchronous_event_unittest.cpp:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: SynchronousEventTest::SetUp
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: FooObserver::FooObserver
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FooObserver()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/synchronous_event_unittest.cpp:47,1
    - Dst: std::make_pair
      Src: /src/brpc/test/synchronous_event_unittest.cpp:47,1
    - Dst: subscribe
      Src: /src/brpc/test/synchronous_event_unittest.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - x
    - p
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: FooObserver::on_event
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - subscribe
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void on_event(int x, int* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FooObserver::FooObserver
      Src: /src/brpc/test/synchronous_event_unittest.cpp:58,1
    - Dst: FooObserver::FooObserver
      Src: /src/brpc/test/synchronous_event_unittest.cpp:59,1
    - Dst: subscribe
      Src: /src/brpc/test/synchronous_event_unittest.cpp:61,1
    - Dst: clear
      Src: /src/brpc/test/synchronous_event_unittest.cpp:63,1
    - Dst: notify
      Src: /src/brpc/test/synchronous_event_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/synchronous_event_unittest.cpp:67,1
    - Dst: size
      Src: /src/brpc/test/synchronous_event_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/synchronous_event_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/synchronous_event_unittest.cpp:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 72
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - subscribe
    - notify
    - clear
    - size
    - FooObserver::FooObserver
    linkageType: ''
    returnType: void
    signature: void TEST_F(SynchronousEventTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: SynchronousEventTest::SynchronousEventTest
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SynchronousEventTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~SynchronousEventTest()
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SynchronousEventTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/synchronous_event_unittest.cpp:28,1
    - Dst: time
      Src: /src/brpc/test/synchronous_event_unittest.cpp:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: SynchronousEventTest::SetUp
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: FooObserver::FooObserver
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FooObserver()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/synchronous_event_unittest.cpp:47,1
    - Dst: std::make_pair
      Src: /src/brpc/test/synchronous_event_unittest.cpp:47,1
    - Dst: subscribe
      Src: /src/brpc/test/synchronous_event_unittest.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - x
    - p
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: FooObserver::on_event
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - subscribe
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void on_event(int x, int* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FooObserver::FooObserver
      Src: /src/brpc/test/synchronous_event_unittest.cpp:58,1
    - Dst: FooObserver::FooObserver
      Src: /src/brpc/test/synchronous_event_unittest.cpp:59,1
    - Dst: subscribe
      Src: /src/brpc/test/synchronous_event_unittest.cpp:61,1
    - Dst: clear
      Src: /src/brpc/test/synchronous_event_unittest.cpp:63,1
    - Dst: notify
      Src: /src/brpc/test/synchronous_event_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/synchronous_event_unittest.cpp:67,1
    - Dst: size
      Src: /src/brpc/test/synchronous_event_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/synchronous_event_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/synchronous_event_unittest.cpp:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 72
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/synchronous_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - subscribe
    - notify
    - clear
    - size
    - FooObserver::FooObserver
    linkageType: ''
    returnType: void
    signature: void TEST_F(SynchronousEventTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: FileWatcherTest::FileWatcherTest
    functionSourceFile: /src/brpc/test/file_watcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileWatcherTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~FileWatcherTest()
    functionSourceFile: /src/brpc/test/file_watcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FileWatcherTest()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/file_watcher_unittest.cpp:35,1
    - Dst: time
      Src: /src/brpc/test/file_watcher_unittest.cpp:35,1
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/test/file_watcher_unittest.cpp:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:38,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/test/file_watcher_unittest.cpp:38,1
    - Dst: rand
      Src: /src/brpc/test/file_watcher_unittest.cpp:41,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/test/file_watcher_unittest.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:45,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:48,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:48,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:51,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:51,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:54,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:54,1
    - Dst: rand
      Src: /src/brpc/test/file_watcher_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:61,1
    - Dst: system
      Src: /src/brpc/test/file_watcher_unittest.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:65,1
    - Dst: system
      Src: /src/brpc/test/file_watcher_unittest.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:69,1
    - Dst: usleep
      Src: /src/brpc/test/file_watcher_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:75,1
    - Dst: system
      Src: /src/brpc/test/file_watcher_unittest.cpp:75,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 76
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_watcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FileWatcher::FileWatcher
    - butil::FileWatcher::check_and_consume
    - butil::FileWatcher::filepath
    - system
    - usleep
    - EXPECT_EQ
    - time
    - rand
    - LOG
    - butil::FileWatcher::init
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileWatcherTest, random_op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: FileWatcherTest::FileWatcherTest
    functionSourceFile: /src/brpc/test/file_watcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileWatcherTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~FileWatcherTest()
    functionSourceFile: /src/brpc/test/file_watcher_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FileWatcherTest()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/file_watcher_unittest.cpp:35,1
    - Dst: time
      Src: /src/brpc/test/file_watcher_unittest.cpp:35,1
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/test/file_watcher_unittest.cpp:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:38,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/test/file_watcher_unittest.cpp:38,1
    - Dst: rand
      Src: /src/brpc/test/file_watcher_unittest.cpp:41,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/test/file_watcher_unittest.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:45,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:48,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:48,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:51,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:51,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:54,1
    - Dst: butil::FileWatcher::filepath
      Src: /src/brpc/test/file_watcher_unittest.cpp:54,1
    - Dst: rand
      Src: /src/brpc/test/file_watcher_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:61,1
    - Dst: system
      Src: /src/brpc/test/file_watcher_unittest.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:65,1
    - Dst: system
      Src: /src/brpc/test/file_watcher_unittest.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/test/file_watcher_unittest.cpp:69,1
    - Dst: usleep
      Src: /src/brpc/test/file_watcher_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_watcher_unittest.cpp:75,1
    - Dst: system
      Src: /src/brpc/test/file_watcher_unittest.cpp:75,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 76
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/file_watcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FileWatcher::FileWatcher
    - butil::FileWatcher::check_and_consume
    - butil::FileWatcher::filepath
    - system
    - usleep
    - EXPECT_EQ
    - time
    - rand
    - LOG
    - butil::FileWatcher::init
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileWatcherTest, random_op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    - Dst: butil::c_str
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' result'
    - expected_data
    - data_size
    argTypes:
    - std::vector<std::string>
    - char*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 21
    functionName: butil::AssertElements
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - size
    - ASSERT_STREQ
    - butil::c_str
    linkageType: ''
    returnType: void
    signature: "void AssertElements(std::vector<std::string>& result,\n                    const
      char* const expected_data[],\n                    size_t data_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:31,1
    - Dst: std::vector<std::wstring>*::push_back
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    - Dst: butil::UTF16ToWide
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' str'
    - c
    - result
    argTypes:
    - std::wstring
    - wchar_t
    - std::vector<std::wstring>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 33
    functionName: butil::SplitString
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::WideToUTF16
    - butil::UTF16ToWide
    - butil::SplitString
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SplitString(const std::wstring& str,\n                 wchar_t
      c,\n                 std::vector<std::wstring>* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    - Dst: butil::c_str
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' result'
    - expected_data
    - data_size
    argTypes:
    - std::vector<std::string>
    - char*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 21
    functionName: butil::AssertElements
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - size
    - ASSERT_STREQ
    - butil::c_str
    linkageType: ''
    returnType: void
    signature: "void AssertElements(std::vector<std::string>& result,\n                    const
      char* const expected_data[],\n                    size_t data_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:31,1
    - Dst: std::vector<std::wstring>*::push_back
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    - Dst: butil::UTF16ToWide
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' str'
    - c
    - result
    argTypes:
    - std::wstring
    - wchar_t
    - std::vector<std::wstring>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 33
    functionName: butil::SplitString
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::WideToUTF16
    - butil::UTF16ToWide
    - butil::SplitString
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SplitString(const std::wstring& str,\n                 wchar_t
      c,\n                 std::vector<std::wstring>* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:44,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:44,1
    - Dst: std::string
      Src: /src/brpc/test/string_split_unittest.cc:44,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:48,1
    - Dst: butil::empty
      Src: /src/brpc/test/string_split_unittest.cc:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::empty
    - std::string
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_split_unittest.cc:52,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:56,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:56,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:57,1
    - Dst: first::empty
      Src: /src/brpc/test/string_split_unittest.cc:57,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:58,1
    - Dst: second::empty
      Src: /src/brpc/test/string_split_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - first::empty
    - EXPECT_EQ
    - second::empty
    - EXPECT_FALSE
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, MissingKeyValueDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:64,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:68,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:69,1
    - Dst: first::empty
      Src: /src/brpc/test/string_split_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 73
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - first::empty
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyKeyWithKeyValueDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:76,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:80,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 85
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, TrailingAndLeadingPairDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:88,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:92,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 97
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyPair)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_split_unittest.cc:100,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:104,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:104,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 109
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_EQ
    - EXPECT_FALSE
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:112,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:116,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 119
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, UntrimmedWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:122,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:126,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, TrimmedWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:134,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:138,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 143
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, MultipleKeyValueDelimiters)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:147,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:151,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:154,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 156
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, OnlySplitAtGivenSeparator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:160,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:164,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 169
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, DelimiterInValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:173,1
    - Dst: std::string
      Src: /src/brpc/test/string_split_unittest.cc:173,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:175,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 171
    functionDepth: 2
    functionLinenumber: 171
    functionLinenumberEnd: 176
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, EmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:181,1
    - Dst: std::wstring
      Src: /src/brpc/test/string_split_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:182,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:182,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:183,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:186,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:189,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:190,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:193,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:194,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:196,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:197,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:200,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:203,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:204,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:207,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:207,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:208,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:211,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:212,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:213,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:216,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:217,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:218,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:219,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:222,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:224,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:225,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:228,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:232,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:233,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:236,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:238,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 240
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::wstring
    - butil::SplitString
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, SplitString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:245,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:246,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:246,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:247,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:249,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:250,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:253,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:254,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:256,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:257,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:259,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:260,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:261,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:263,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:264,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:266,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:267,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:268,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:270,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:271,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:271,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:272,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:274,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:275,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:276,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:277,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:279,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:280,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:282,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:283,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:285,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:286,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:288,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:289,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:291,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:292,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:296,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:297,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:299,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:300,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:302,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 304
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::SplitString
    - std::vector::clear
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, SplitStringStringPiece)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:308,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:310,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 306
    functionDepth: 2
    functionLinenumber: 306
    functionLinenumberEnd: 311
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, StringWithNoDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:315,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:320,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 313
    functionDepth: 2
    functionLinenumber: 313
    functionLinenumberEnd: 321
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, LeadingDelimitersSkipped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:325,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:330,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 323
    functionDepth: 2
    functionLinenumber: 323
    functionLinenumberEnd: 332
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, ConsecutiveDelimitersSkipped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:336,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:341,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 334
    functionDepth: 2
    functionLinenumber: 334
    functionLinenumberEnd: 342
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, TrailingDelimitersSkipped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringDontTrim
      Src: /src/brpc/test/string_split_unittest.cc:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:348,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:348,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:349,1
    - Dst: butil::SplitStringDontTrim
      Src: /src/brpc/test/string_split_unittest.cc:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:352,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:352,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:353,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:354,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:356,1
    - Dst: butil::SplitStringDontTrim
      Src: /src/brpc/test/string_split_unittest.cc:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:359,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 362
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_EQ
    - butil::SplitStringDontTrim
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringSplitTest, StringSplitDontTrim)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_split_unittest.cc:385,1
    - Dst: butil::SplitStringAlongWhitespace
      Src: /src/brpc/test/string_split_unittest.cc:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:388,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:393,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 396
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::SplitStringAlongWhitespace
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringSplitTest, SplitStringAlongWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    - Dst: butil::c_str
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' result'
    - expected_data
    - data_size
    argTypes:
    - std::vector<std::string>
    - char*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 21
    functionName: butil::AssertElements
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 5
    functionsReached:
    - ASSERT_EQ
    - size
    - ASSERT_STREQ
    - butil::c_str
    linkageType: ''
    returnType: void
    signature: "void AssertElements(std::vector<std::string>& result,\n                    const
      char* const expected_data[],\n                    size_t data_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:31,1
    - Dst: std::vector<std::wstring>*::push_back
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    - Dst: butil::UTF16ToWide
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' str'
    - c
    - result
    argTypes:
    - std::wstring
    - wchar_t
    - std::vector<std::wstring>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 33
    functionName: butil::SplitString
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 5
    functionsReached:
    - butil::WideToUTF16
    - butil::UTF16ToWide
    - butil::SplitString
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SplitString(const std::wstring& str,\n                 wchar_t
      c,\n                 std::vector<std::wstring>* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:17,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    - Dst: butil::c_str
      Src: /src/brpc/test/string_split_unittest.cc:19,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' result'
    - expected_data
    - data_size
    argTypes:
    - std::vector<std::string>
    - char*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 21
    functionName: butil::AssertElements
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 5
    functionsReached:
    - ASSERT_EQ
    - size
    - ASSERT_STREQ
    - butil::c_str
    linkageType: ''
    returnType: void
    signature: "void AssertElements(std::vector<std::string>& result,\n                    const
      char* const expected_data[],\n                    size_t data_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: butil::WideToUTF16
      Src: /src/brpc/test/string_split_unittest.cc:30,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:31,1
    - Dst: std::vector<std::wstring>*::push_back
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    - Dst: butil::UTF16ToWide
      Src: /src/brpc/test/string_split_unittest.cc:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' str'
    - c
    - result
    argTypes:
    - std::wstring
    - wchar_t
    - std::vector<std::wstring>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 33
    functionName: butil::SplitString
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 6
    functionsReached:
    - butil::WideToUTF16
    - butil::UTF16ToWide
    - butil::SplitString
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SplitString(const std::wstring& str,\n                 wchar_t
      c,\n                 std::vector<std::wstring>* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:44,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:44,1
    - Dst: std::string
      Src: /src/brpc/test/string_split_unittest.cc:44,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:48,1
    - Dst: butil::empty
      Src: /src/brpc/test/string_split_unittest.cc:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::empty
    - std::string
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_split_unittest.cc:52,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:56,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:56,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:57,1
    - Dst: first::empty
      Src: /src/brpc/test/string_split_unittest.cc:57,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:58,1
    - Dst: second::empty
      Src: /src/brpc/test/string_split_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - first::empty
    - EXPECT_EQ
    - second::empty
    - EXPECT_FALSE
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, MissingKeyValueDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:64,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:68,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:69,1
    - Dst: first::empty
      Src: /src/brpc/test/string_split_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 73
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - first::empty
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyKeyWithKeyValueDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:76,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:80,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 85
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, TrailingAndLeadingPairDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:88,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:92,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 97
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyPair)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_split_unittest.cc:100,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:104,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:104,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 109
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_EQ
    - EXPECT_FALSE
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, EmptyValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:112,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:116,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 119
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, UntrimmedWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:122,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:126,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, TrimmedWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:134,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:138,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 143
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, MultipleKeyValueDelimiters)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:147,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:151,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:154,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 156
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, OnlySplitAtGivenSeparator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_split_unittest.cc:160,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/string_split_unittest.cc:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:164,1
    - Dst: size
      Src: /src/brpc/test/string_split_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 169
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - EXPECT_EQ
    - size
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: void TEST_F(SplitStringIntoKeyValuePairsTest, DelimiterInValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:173,1
    - Dst: std::string
      Src: /src/brpc/test/string_split_unittest.cc:173,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:175,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 171
    functionDepth: 2
    functionLinenumber: 171
    functionLinenumberEnd: 176
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, EmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:181,1
    - Dst: std::wstring
      Src: /src/brpc/test/string_split_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:182,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:182,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:183,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:186,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:189,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:190,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:193,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:194,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:196,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:197,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:200,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:203,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:204,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:207,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:207,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:208,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:211,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:212,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:213,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:216,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:217,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:218,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:219,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:222,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:224,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:225,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:228,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:232,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:233,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:236,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:238,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 240
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::wstring
    - butil::SplitString
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, SplitString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:245,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:246,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:246,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:247,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:249,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:250,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:253,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:254,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:256,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:257,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:259,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:260,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:261,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:263,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:264,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:266,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:267,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:268,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:270,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:271,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:271,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:272,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:274,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:275,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:276,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:277,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:279,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:280,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:282,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:283,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:285,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:286,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:288,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:289,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:291,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:292,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:296,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:297,1
    - Dst: butil::SplitString
      Src: /src/brpc/test/string_split_unittest.cc:299,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/string_split_unittest.cc:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:300,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:302,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/string_split_unittest.cc:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 304
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::SplitString
    - std::vector::clear
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringUtilTest, SplitStringStringPiece)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:308,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:310,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 306
    functionDepth: 2
    functionLinenumber: 306
    functionLinenumberEnd: 311
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, StringWithNoDelimiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:315,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:320,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 313
    functionDepth: 2
    functionLinenumber: 313
    functionLinenumberEnd: 321
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, LeadingDelimitersSkipped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:325,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:330,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 323
    functionDepth: 2
    functionLinenumber: 323
    functionLinenumberEnd: 332
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, ConsecutiveDelimitersSkipped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringUsingSubstr
      Src: /src/brpc/test/string_split_unittest.cc:336,1
    - Dst: butil::AssertElements
      Src: /src/brpc/test/string_split_unittest.cc:341,1
    - Dst: arraysize
      Src: /src/brpc/test/string_split_unittest.cc:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 334
    functionDepth: 2
    functionLinenumber: 334
    functionLinenumberEnd: 342
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AssertElements
    - butil::SplitStringUsingSubstr
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SplitStringUsingSubstrTest, TrailingDelimitersSkipped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitStringDontTrim
      Src: /src/brpc/test/string_split_unittest.cc:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:348,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:348,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:349,1
    - Dst: butil::SplitStringDontTrim
      Src: /src/brpc/test/string_split_unittest.cc:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:352,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:352,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:353,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:354,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:356,1
    - Dst: butil::SplitStringDontTrim
      Src: /src/brpc/test/string_split_unittest.cc:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:359,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 362
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_EQ
    - butil::SplitStringDontTrim
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringSplitTest, StringSplitDontTrim)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_split_unittest.cc:385,1
    - Dst: butil::SplitStringAlongWhitespace
      Src: /src/brpc/test/string_split_unittest.cc:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:388,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_split_unittest.cc:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_split_unittest.cc:393,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 396
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_split_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::SplitStringAlongWhitespace
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringSplitTest, SplitStringAlongWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - alive
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: butil::Dummy::Dummy
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Dummy(int* alive)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: ~Dummy()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Dummy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - alive
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: butil::Dummy::Dummy
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Dummy(int* alive)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: ~Dummy()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Dummy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:41,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/stack_container_unittest.cc:41,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:41,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:44,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:44,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_container_unittest.cc:45,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:45,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:50,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/stack_container_unittest.cc:51,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:51,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_container_unittest.cc:52,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:57,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:57,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:63,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:64,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_container_unittest.cc:65,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:65,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:71,1
    - Dst: std::vector::front
      Src: /src/brpc/test/stack_container_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_container_unittest.cc:72,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 75
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - static_cast<size_t>
    - StackVector::container
    - EXPECT_NE
    - StackVector::stack_data
    - EXPECT_FALSE
    - EXPECT_EQ
    - std::vector::front
    linkageType: ''
    returnType: void
    signature: void TEST(StackContainer, Vector)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Dummy::Dummy
      Src: /src/brpc/test/stack_container_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:85,1
    - Dst: Vector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:88,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/stack_container_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:92,1
    - Dst: butil::find
      Src: /src/brpc/test/stack_container_unittest.cc:94,1
    - Dst: Vector::begin
      Src: /src/brpc/test/stack_container_unittest.cc:94,1
    - Dst: Vector::end
      Src: /src/brpc/test/stack_container_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:95,1
    - Dst: Container::iterator::get
      Src: /src/brpc/test/stack_container_unittest.cc:95,1
    - Dst: Vector::erase
      Src: /src/brpc/test/stack_container_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 100
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - Vector::begin
    - Vector::erase
    - Vector::end
    - Vector::push_back
    - Container::iterator::get
    - scoped_refptr::get
    - Dummy::Dummy
    - butil::find
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StackContainer, VectorDoubleDelete)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    - Dst: void_data
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: butil::AlignedData::AlignedData
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - void_data
    - memset
    linkageType: ''
    returnType: void
    signature: void AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: ~AlignedData()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    - Dst: void_data
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: butil::AlignedData::AlignedData
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - void_data
    - memset
    linkageType: ''
    returnType: void
    signature: void AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: ~AlignedData()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - ptr
    - ','
    - align
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: EXPECT_ALIGNED
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXPECT_ALIGNED(ptr, align)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:126,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:127,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/stack_container_unittest.cc:127,1
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:130,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:131,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/stack_container_unittest.cc:131,1
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:134,1
    - Dst: AlignedData<16>
      Src: /src/brpc/test/stack_container_unittest.cc:134,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:135,1
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:143,1
    - Dst: AlignedData<256>
      Src: /src/brpc/test/stack_container_unittest.cc:143,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - ALIGNOF
    - EXPECT_ALIGNED
    - StackVector::push_back
    - AlignedData<16>
    - AlignedData<256>
    linkageType: ''
    returnType: void
    signature: void TEST(StackContainer, BufferAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - alive
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: butil::Dummy::Dummy
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Dummy(int* alive)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: ~Dummy()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Dummy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - alive
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: butil::Dummy::Dummy
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Dummy(int* alive)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: ~Dummy()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Dummy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:41,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/stack_container_unittest.cc:41,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:41,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:44,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:44,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_container_unittest.cc:45,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:45,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:50,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/stack_container_unittest.cc:51,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:51,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_container_unittest.cc:52,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:57,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:57,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:63,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:64,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_container_unittest.cc:65,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:65,1
    - Dst: StackVector::container
      Src: /src/brpc/test/stack_container_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:71,1
    - Dst: std::vector::front
      Src: /src/brpc/test/stack_container_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_container_unittest.cc:72,1
    - Dst: StackVector::stack_data
      Src: /src/brpc/test/stack_container_unittest.cc:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 75
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - static_cast<size_t>
    - StackVector::container
    - EXPECT_NE
    - StackVector::stack_data
    - EXPECT_FALSE
    - EXPECT_EQ
    - std::vector::front
    linkageType: ''
    returnType: void
    signature: void TEST(StackContainer, Vector)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Dummy::Dummy
      Src: /src/brpc/test/stack_container_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:85,1
    - Dst: Vector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:88,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/stack_container_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:92,1
    - Dst: butil::find
      Src: /src/brpc/test/stack_container_unittest.cc:94,1
    - Dst: Vector::begin
      Src: /src/brpc/test/stack_container_unittest.cc:94,1
    - Dst: Vector::end
      Src: /src/brpc/test/stack_container_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:95,1
    - Dst: Container::iterator::get
      Src: /src/brpc/test/stack_container_unittest.cc:95,1
    - Dst: Vector::erase
      Src: /src/brpc/test/stack_container_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_container_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 100
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - Vector::begin
    - Vector::erase
    - Vector::end
    - Vector::push_back
    - Container::iterator::get
    - scoped_refptr::get
    - Dummy::Dummy
    - butil::find
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StackContainer, VectorDoubleDelete)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    - Dst: void_data
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: butil::AlignedData::AlignedData
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - void_data
    - memset
    linkageType: ''
    returnType: void
    signature: void AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: ~AlignedData()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    - Dst: void_data
      Src: /src/brpc/test/stack_container_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: butil::AlignedData::AlignedData
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - void_data
    - memset
    linkageType: ''
    returnType: void
    signature: void AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: ~AlignedData()
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - ptr
    - ','
    - align
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: EXPECT_ALIGNED
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXPECT_ALIGNED(ptr, align)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:126,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:127,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/stack_container_unittest.cc:127,1
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:130,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:131,1
    - Dst: ALIGNOF
      Src: /src/brpc/test/stack_container_unittest.cc:131,1
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:134,1
    - Dst: AlignedData<16>
      Src: /src/brpc/test/stack_container_unittest.cc:134,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:135,1
    - Dst: StackVector::push_back
      Src: /src/brpc/test/stack_container_unittest.cc:143,1
    - Dst: AlignedData<256>
      Src: /src/brpc/test/stack_container_unittest.cc:143,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/stack_container_unittest.cc:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stack_container_unittest.cc
    functionUses: 0
    functionsReached:
    - ALIGNOF
    - EXPECT_ALIGNED
    - StackVector::push_back
    - AlignedData<16>
    - AlignedData<256>
    linkageType: ''
    returnType: void
    signature: void TEST(StackContainer, BufferAlignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: operator()(const uint64_t lhs, const uint64_t rhs) const
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t operator()(const uint64_t lhs, const uint64_t rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: AgentGroupTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: AgentGroupTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:51,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:53,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:56,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:57,1
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:59,1
    - Dst: agent_type*::load
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:60,1
    - Dst: __builtin_expect
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:64,1
    - Dst: agent_type*::compare_exchange_weak
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:64,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:71,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:72,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 73
    functionName: AgentGroupTest::thread_counter
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - agent_type*::compare_exchange_weak
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - __builtin_expect
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - agent_type*::load
    linkageType: ''
    returnType: void
    signature: void *thread_counter(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:78,1
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:80,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::AgentGroup::create_new_agent
    - ASSERT_TRUE
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - bvar::detail::AgentGroup::destroy_agent
    linkageType: ''
    returnType: void
    signature: void TEST_F(AgentGroupTest, test_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:87,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:88,1
    - Dst: fetch_add
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:90,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:92,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: global_add
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *global_add(void *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:102,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:104,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:105,1
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:109,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:110,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:114,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:114,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:117,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 120
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::Timer::stop
    - bvar::detail::AgentGroup::create_new_agent
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bvar::detail::AgentGroup::destroy_agent
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(AgentGroupTest, test_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:124,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:126,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:127,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:130,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:135,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:136,1
    - Dst: store
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:139,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:140,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:142,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:147,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:148,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ARRAY_SIZE
    - pthread_join
    - bvar::detail::AgentGroup::create_new_agent
    - pthread_create
    - store
    - bvar::detail::AgentGroup::destroy_agent
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(AgentGroupTest, test_all_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: operator()(const uint64_t lhs, const uint64_t rhs) const
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t operator()(const uint64_t lhs, const uint64_t rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: AgentGroupTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: AgentGroupTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:51,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:53,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:56,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:57,1
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:59,1
    - Dst: agent_type*::load
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:60,1
    - Dst: __builtin_expect
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:64,1
    - Dst: agent_type*::compare_exchange_weak
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:64,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:71,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:72,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 73
    functionName: AgentGroupTest::thread_counter
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - agent_type*::compare_exchange_weak
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - __builtin_expect
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - agent_type*::load
    linkageType: ''
    returnType: void
    signature: void *thread_counter(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:78,1
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:80,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::AgentGroup::create_new_agent
    - ASSERT_TRUE
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - bvar::detail::AgentGroup::destroy_agent
    linkageType: ''
    returnType: void
    signature: void TEST_F(AgentGroupTest, test_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:87,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:88,1
    - Dst: fetch_add
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:90,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:92,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: global_add
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *global_add(void *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:102,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:104,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:105,1
    - Dst: bvar::detail::AgentCombiner::get_or_create_tls_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:109,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:110,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:114,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:114,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:117,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 120
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::Timer::stop
    - bvar::detail::AgentGroup::create_new_agent
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bvar::detail::AgentGroup::destroy_agent
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(AgentGroupTest, test_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:124,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:126,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:127,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:130,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:135,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:136,1
    - Dst: store
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:139,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:140,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:142,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:147,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:148,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/test/bvar_agent_group_unittest.cpp:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_agent_group_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ARRAY_SIZE
    - pthread_join
    - bvar::detail::AgentGroup::create_new_agent
    - pthread_create
    - store
    - bvar::detail::AgentGroup::destroy_agent
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(AgentGroupTest, test_all_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:39,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:40,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 52
    functionName: TestRtmpClientStream::TestRtmpClientStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TestRtmpClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:54,1
    - Dst: assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: ~TestRtmpClientStream()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - assertions_on_stop
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~TestRtmpClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: TestRtmpClientStream::assertions_on_stop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void assertions_on_stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:61,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:62,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: TestRtmpClientStream::assertions_on_successful_play
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void assertions_on_successful_play()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:68,1
    - Dst: TestRtmpClientStream::assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: TestRtmpClientStream::assertions_on_failure
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - TestRtmpClientStream::assertions_on_stop
    linkageType: ''
    returnType: void
    signature: void assertions_on_failure()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: TestRtmpClientStream::OnFirstMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnFirstMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: TestRtmpClientStream::OnStop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:80,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:80,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 82
    functionName: TestRtmpClientStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: void
    signature: void OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:86,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:86,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 88
    functionName: TestRtmpClientStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: void
    signature: void OnAudioMessage(brpc::RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 104
    functionName: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TestRtmpRetryingClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:106,1
    - Dst: assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 108
    functionName: ~TestRtmpRetryingClientStream()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - assertions_on_stop
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~TestRtmpRetryingClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: TestRtmpRetryingClientStream::assertions_on_stop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void assertions_on_stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: TestRtmpRetryingClientStream::OnStop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 117
    functionName: TestRtmpRetryingClientStream::OnFirstMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnFirstMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: TestRtmpRetryingClientStream::OnPlayable
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnPlayable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:124,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:124,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 126
    functionName: TestRtmpRetryingClientStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: void
    signature: void OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:129,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:129,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 131
    functionName: TestRtmpRetryingClientStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: void
    signature: void OnAudioMessage(brpc::RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sleep_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 150
    functionName: PlayingDummyStream::PlayingDummyStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void PlayingDummyStream(int64_t sleep_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: ~PlayingDummyStream()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~PlayingDummyStream()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:158,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:158,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:158,1
    - Dst: butil::Status*::set_error
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:168,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:170,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:172,1
    - Dst: butil::Status*::set_error
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:175,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:179,1
    - Dst: bthread_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:181,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:182,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:184,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 3
    argNames:
    - ' opt'
    - status
    - done
    argTypes:
    - brpc::RtmpPlayOptions
    - butil::Status*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 187
    functionName: PlayingDummyStream::OnPlay
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - bthread_usleep
    - bthread_start_background
    - bthread_join
    - compare_exchange_strong
    - butil::Status*::set_error
    - CHECK
    - stream_id
    - LOG
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: "void OnPlay(const brpc::RtmpPlayOptions& opt,\n                butil::Status*
      status,\n                google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:190,1
    - Dst: exchange
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:191,1
    - Dst: bthread_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:192,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 195
    functionName: PlayingDummyStream::OnStop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - exchange
    - LOG
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void OnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyStream::SendData
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 203
    functionName: PlayingDummyStream::RunSendData
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - PlayingDummyStream::SendData
    linkageType: ''
    returnType: void
    signature: void * RunSendData(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:211,1
    - Dst: bthread_stopped
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:218,1
    - Dst: bthread_self
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:218,1
    - Dst: brpc::RtmpVideoMessage::data::clear
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:224,1
    - Dst: brpc::RtmpVideoMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:225,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:225,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:226,1
    - Dst: SendVideoMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:228,1
    - Dst: brpc::RtmpAudioMessage::data::clear
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:234,1
    - Dst: brpc::RtmpAudioMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:235,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:235,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:236,1
    - Dst: SendAudioMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:237,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 243
    functionName: PlayingDummyStream::SendData
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    - brpc::RtmpAudioMessage::data::append
    - brpc::RtmpVideoMessage::data::append
    - bthread_stopped
    - bthread_usleep
    - SendVideoMessage
    - SendAudioMessage
    - bthread_self
    - stream_id
    - brpc::RtmpVideoMessage::data::clear
    - brpc::RtmpAudioMessage::data::clear
    - LOG
    linkageType: ''
    returnType: void
    signature: void PlayingDummyStream::SendData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: PlayingDummyService::PlayingDummyService
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlayingDummyService(int64_t sleep_ms = 0)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyStream::PlayingDummyStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 2
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: PlayingDummyService::NewStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - PlayingDummyStream::PlayingDummyStream
    linkageType: ''
    returnType: brpc::RtmpServerStream
    signature: "brpc::RtmpServerStream * NewStream(\n        const brpc::RtmpConnectRequest&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sleep_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 267
    functionName: PublishStream::PublishStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void PublishStream(int64_t sleep_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:269,1
    - Dst: assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: ~PublishStream()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - assertions_on_stop
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~PublishStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 274
    functionName: PublishStream::assertions_on_stop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void assertions_on_stop()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:280,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:280,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:280,1
    - Dst: brpc::RtmpPublishType2Str
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:282,1
    - Dst: butil::Status*::set_error
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:289,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:291,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - ' stream_name'
    - publish_type
    - status
    - done
    argTypes:
    - std::string
    - brpc::RtmpPublishType
    - butil::Status*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 293
    functionName: PublishStream::OnPublish
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - brpc::RtmpPublishType2Str
    - bthread_usleep
    - butil::Status*::set_error
    - stream_id
    - LOG
    linkageType: ''
    returnType: void
    signature: "void OnPublish(const std::string& stream_name,\n                   brpc::RtmpPublishType
      publish_type,\n                   butil::Status* status,\n                   google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 296
    functionName: PublishStream::OnFirstMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnFirstMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 300
    functionName: PublishStream::OnStop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:304,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:304,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 306
    functionName: PublishStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: void
    signature: void OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:310,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:310,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 312
    functionName: PublishStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: void
    signature: void OnAudioMessage(brpc::RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 323
    functionDepth: 1
    functionLinenumber: 323
    functionLinenumberEnd: 325
    functionName: PublishService::PublishService
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void PublishService(int64_t sleep_ms = 0)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 328
    functionName: ~PublishService()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~PublishService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::intrusive_ptr<PublishStream> >*::clear
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:331,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:332,1
    - Dst: std::vector<butil::intrusive_ptr<PublishStream> >*::swap
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:333,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::vector<butil::intrusive_ptr<PublishStream> >*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 334
    functionName: PublishService::move_created_streams
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<butil::intrusive_ptr<PublishStream> >*::swap
    - std::vector<butil::intrusive_ptr<PublishStream> >*::clear
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: "void move_created_streams(\n        std::vector<butil::intrusive_ptr<PublishStream>
      >* out)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PublishStream::PublishStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:340,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:342,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 338
    functionDepth: 2
    functionLinenumber: 338
    functionLinenumberEnd: 346
    functionName: PublishService::NewStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - PublishStream::PublishStream
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: brpc::RtmpServerStream
    signature: "brpc::RtmpServerStream * NewStream(\n        const brpc::RtmpConnectRequest&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - mh
    argTypes:
    - brpc::RtmpMessageHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 355
    functionName: RtmpSubStream::RtmpSubStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream(brpc::RtmpMessageHandler* mh)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnPlayable
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 369
    functionName: RtmpSubStream::OnFirstMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnPlayable
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream::OnFirstMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpSubStream::OnMetaData
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - obj
    - ' name'
    argTypes:
    - brpc::RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 371
    functionDepth: 1
    functionLinenumber: 371
    functionLinenumberEnd: 373
    functionName: RtmpSubStream::OnMetaData
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - RtmpSubStream::OnMetaData
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream::OnMetaData(brpc::RtmpMetaData* obj, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpSubStream::OnSharedObjectMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 375
    functionDepth: 1
    functionLinenumber: 375
    functionLinenumberEnd: 377
    functionName: RtmpSubStream::OnSharedObjectMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - RtmpSubStream::OnSharedObjectMessage
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream::OnSharedObjectMessage(brpc::RtmpSharedObjectMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpSubStream::OnAudioMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 381
    functionName: RtmpSubStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - RtmpSubStream::OnAudioMessage
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream::OnAudioMessage(brpc::RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpSubStream::OnVideoMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 385
    functionName: RtmpSubStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - RtmpSubStream::OnVideoMessage
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream::OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnSubStreamStop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: RtmpSubStream::OnStop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnSubStreamStop
    linkageType: ''
    returnType: void
    signature: void RtmpSubStream::OnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - client
    argTypes:
    - brpc::RtmpClient*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 409
    functionName: RtmpSubStreamCreator::RtmpSubStreamCreator
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpSubStreamCreator::RtmpSubStreamCreator(const brpc::RtmpClient*
      client)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 411
    functionName: RtmpSubStreamCreator::~RtmpSubStreamCreator()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpSubStreamCreator::~RtmpSubStreamCreator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:416,1
    - Dst: RtmpSubStream::RtmpSubStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:416,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - message_handler
    - sub_stream
    argTypes:
    - brpc::RtmpMessageHandler*
    - butil::intrusive_ptr<brpc::RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 419
    functionName: RtmpSubStreamCreator::NewSubStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - RtmpSubStream::RtmpSubStream
    - reset
    linkageType: ''
    returnType: void
    signature: "void RtmpSubStreamCreator::NewSubStream(brpc::RtmpMessageHandler*
      message_handler,\n                                        butil::intrusive_ptr<brpc::RtmpStreamBase>*
      sub_stream)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<RtmpSubStream*>
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sub_stream
    - options
    argTypes:
    - brpc::RtmpStreamBase*
    - brpc::RtmpRetryingClientStreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 426
    functionName: RtmpSubStreamCreator::LaunchSubStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - dynamic_cast<RtmpSubStream*>
    linkageType: ''
    returnType: void
    signature: "void RtmpSubStreamCreator::LaunchSubStream(\n    brpc::RtmpStreamBase*
      sub_stream, \n    brpc::RtmpRetryingClientStreamOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:437,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:438,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:441,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:445,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:446,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:449,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:457,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:465,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:473,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:480,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:481,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 482
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::ParseRtmpURL
    - butil::StringPiece::empty
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, parse_rtmp_url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::WriteAMFString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:492,1
    - Dst: brpc::WriteAMFUint32
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:493,1
    - Dst: brpc::RtmpInfo::set_code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:494,1
    - Dst: brpc::RtmpInfo::set_level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:495,1
    - Dst: brpc::RtmpInfo::set_description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:496,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:497,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:498,1
    - Dst: brpc::AMFOutputStream::good
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:498,1
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:499,1
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:500,1
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:501,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:503,1
    - Dst: brpc::AMFOutputStream::good
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:503,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:506,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:506,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:509,1
    - Dst: brpc::ReadAMFString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:510,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:512,1
    - Dst: brpc::ReadAMFUint32
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:513,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:515,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:516,1
    - Dst: brpc::RtmpInfo::code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:516,1
    - Dst: brpc::RtmpInfo::code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:517,1
    - Dst: brpc::RtmpInfo::level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:517,1
    - Dst: brpc::RtmpInfo::level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:518,1
    - Dst: brpc::RtmpInfo::description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:518,1
    - Dst: brpc::RtmpInfo::description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:518,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:520,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:521,1
    - Dst: brpc::RtmpInfo::code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:522,1
    - Dst: brpc::RtmpInfo::level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:523,1
    - Dst: brpc::RtmpInfo::description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 524
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::WriteAMFUint32
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::AMFObject::SetString
    - brpc::WriteAMFObject
    - std::string::data
    - brpc::RtmpInfo::set_description
    - brpc::RtmpInfo::set_code
    - brpc::RtmpInfo::code
    - brpc::ReadAMFUint32
    - brpc::ReadAMFObject
    - brpc::RtmpInfo::level
    - brpc::RtmpInfo::description
    - brpc::WriteAMFString
    - brpc::ReadAMFString
    - brpc::AMFOutputStream::good
    - brpc::RtmpInfo::set_level
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyService::PlayingDummyService
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:527,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:528,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:531,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:531,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:533,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:538,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:538,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:544,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:544,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:545,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:546,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:549,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:551,1
    - Dst: assertions_on_successful_play
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:555,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 526
    functionDepth: 2
    functionLinenumber: 526
    functionLinenumberEnd: 556
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - PlayingDummyService::PlayingDummyService
    - ASSERT_EQ
    - reset
    - butil::string_printf
    - brpc::RtmpClient::RtmpClient
    - sleep
    - brpc::RtmpClient::Init
    - Init
    - assertions_on_successful_play
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, successfully_play_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyService::PlayingDummyService
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:559,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:560,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:563,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:563,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:565,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:570,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:570,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:576,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:576,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:577,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:580,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:582,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:584,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:586,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 558
    functionDepth: 2
    functionLinenumber: 558
    functionLinenumberEnd: 587
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - PlayingDummyService::PlayingDummyService
    - ASSERT_EQ
    - reset
    - brpc::RtmpClient::RtmpClient
    - assertions_on_failure
    - sleep
    - brpc::RtmpClient::Init
    - Init
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, fail_to_play_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PublishService::PublishService
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:590,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:591,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:594,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:594,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:596,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:601,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:601,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:607,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:607,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:608,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:609,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:611,1
    - Dst: brpc::RtmpVideoMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:619,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:619,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:621,1
    - Dst: SendVideoMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:621,1
    - Dst: brpc::RtmpAudioMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:630,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:630,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:632,1
    - Dst: SendAudioMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:632,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:635,1
    - Dst: PublishService::move_created_streams
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:639,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:639,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:647,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:649,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 589
    functionDepth: 2
    functionLinenumber: 589
    functionLinenumberEnd: 650
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - brpc::RtmpClient::RtmpClient
    - brpc::RtmpClient::Init
    - Init
    - PublishService::move_created_streams
    - reset
    - PublishService::PublishService
    - SendVideoMessage
    - brpc::ServerOptions::ServerOptions
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - EXPECT_EQ
    - LOG
    - butil::string_printf
    - brpc::RtmpVideoMessage::data::append
    - brpc::Server::Start
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpAudioMessage::data::append
    - SendAudioMessage
    - TestRtmpClientStream::TestRtmpClientStream
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, successfully_publish_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PublishService::PublishService
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:653,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:654,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:657,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:657,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:659,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:664,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:664,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:670,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:670,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:671,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:674,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:676,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:678,1
    - Dst: PublishService::move_created_streams
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:682,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:684,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:686,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:688,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 652
    functionDepth: 2
    functionLinenumber: 652
    functionLinenumberEnd: 689
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - PublishService::PublishService
    - reset
    - brpc::RtmpClient::RtmpClient
    - assertions_on_failure
    - sleep
    - brpc::RtmpClient::Init
    - Init
    - PublishService::move_created_streams
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    - LOG
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, failed_to_publish_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:692,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:697,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:697,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:703,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:703,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:704,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:705,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:707,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:708,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:710,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 691
    functionDepth: 2
    functionLinenumber: 691
    functionLinenumberEnd: 711
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - reset
    - brpc::RtmpClient::RtmpClient
    - assertions_on_failure
    - brpc::RtmpClient::Init
    - Init
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, failed_to_connect_client_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:714,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:719,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:719,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:725,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:725,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:726,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:727,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:728,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:729,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:730,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:732,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:733,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:735,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 713
    functionDepth: 2
    functionLinenumber: 713
    functionLinenumberEnd: 736
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - reset
    - brpc::RtmpClient::RtmpClient
    - assertions_on_failure
    - brpc::RtmpClient::Init
    - Init
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    - LOG
    - Destroy
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, destroy_client_streams_before_init)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:739,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:744,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:744,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:750,1
    - Dst: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:750,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:751,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:752,1
    - Dst: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:753,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:754,1
    - Dst: RtmpSubStreamCreator::RtmpSubStreamCreator
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:755,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:757,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:759,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 738
    functionDepth: 2
    functionLinenumber: 738
    functionLinenumberEnd: 760
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - reset
    - TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    - brpc::RtmpClient::RtmpClient
    - brpc::RtmpClient::Init
    - Init
    - brpc::RtmpClientOptions::RtmpClientOptions
    - LOG
    - brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    - RtmpSubStreamCreator::RtmpSubStreamCreator
    - Destroy
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, destroy_retrying_client_streams_before_init)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:764,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:765,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:767,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:767,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:769,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:774,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:774,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:780,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:780,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:781,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:782,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:784,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:786,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:787,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:789,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:791,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 792
      start: 762
    functionDepth: 2
    functionLinenumber: 762
    functionLinenumberEnd: 792
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - reset
    - butil::string_printf
    - brpc::RtmpClient::RtmpClient
    - brpc::RtmpClient::Init
    - Init
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    - brpc::RtmpClientOptions::RtmpClientOptions
    - usleep
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    - LOG
    - Destroy
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, destroy_client_streams_during_creation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:796,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:799,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:799,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:801,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:806,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:806,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:812,1
    - Dst: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:812,1
    - Dst: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:813,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:814,1
    - Dst: RtmpSubStreamCreator::RtmpSubStreamCreator
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:815,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:817,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:819,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:820,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:821,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:822,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 825
      start: 794
    functionDepth: 2
    functionLinenumber: 794
    functionLinenumberEnd: 825
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - reset
    - TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    - butil::string_printf
    - brpc::RtmpClient::RtmpClient
    - brpc::RtmpClient::Init
    - Init
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    - brpc::RtmpClientOptions::RtmpClientOptions
    - usleep
    - LOG
    - brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    - RtmpSubStreamCreator::RtmpSubStreamCreator
    - Destroy
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, destroy_retrying_client_streams_during_creation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyService::PlayingDummyService
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:828,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:829,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:832,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:832,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:834,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:839,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:839,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:845,1
    - Dst: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:845,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:846,1
    - Dst: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:847,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:848,1
    - Dst: RtmpSubStreamCreator::RtmpSubStreamCreator
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:849,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:850,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:852,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:853,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:854,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:855,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:856,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:857,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:858,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:858,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:861,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:862,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:864,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 865
      start: 827
    functionDepth: 2
    functionLinenumber: 827
    functionLinenumberEnd: 865
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::RtmpClient::RtmpClient
    - brpc::RtmpClient::Init
    - Init
    - sleep
    - reset
    - brpc::ServerOptions::ServerOptions
    - LOG
    - butil::string_printf
    - PlayingDummyService::PlayingDummyService
    - TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    - brpc::Server::Start
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::Server::Stop
    - brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    - RtmpSubStreamCreator::RtmpSubStreamCreator
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, retrying_stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:34,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:35,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 38
    functionName: brpc::main
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:34,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:35,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 38
    functionName: brpc::main
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:52,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:52,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:53,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:53,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:54,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:54,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:55,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:55,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:58,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:59,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:60,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:62,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:64,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:65,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:68,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:69,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:70,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:71,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:74,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:74,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:75,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:75,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:76,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 77
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpMethod2Str
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::Str2HttpMethod
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, http_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:80,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:105,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:106,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:108,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:108,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:109,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:109,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:110,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 111
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::size
    - brpc::HttpMessage::ParseFromArray
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:130,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:130,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:131,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:131,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:134,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:134,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:135,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:136,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:136,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:137,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:138,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:139,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:140,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:141,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:142,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:142,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:143,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:144,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:146,1
    - Dst: major_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:147,1
    - Dst: minor_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:148,1
    - Dst: method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:149,1
    - Dst: status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:149,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:150,1
    - Dst: reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:150,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:152,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:153,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:154,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:155,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 156
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - minor_version
    - method
    - ASSERT_STREQ
    - brpc::HttpMessage::ParseFromArray
    - content_type
    - reason_phrase
    - status_code
    - brpc::HttpMessage::header
    - major_version
    - GetHeader
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, request_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:174,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:174,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:175,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:175,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:178,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:179,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:180,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:181,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:182,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:183,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:184,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:185,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:186,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:187,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:188,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:190,1
    - Dst: major_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:191,1
    - Dst: minor_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:193,1
    - Dst: method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:194,1
    - Dst: status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:194,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:195,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:195,1
    - Dst: status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:195,1
    - Dst: reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:196,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:198,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:199,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:200,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:201,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 202
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - minor_version
    - method
    - ASSERT_STREQ
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpReasonPhrase
    - content_type
    - reason_phrase
    - status_code
    - brpc::HttpMessage::header
    - major_version
    - GetHeader
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, response_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:208,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:208,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 209
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, bad_format)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:213,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:214,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:214,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:214,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:215,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::ParseFromArray
    - ASSERT_FALSE
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, incompleted_request_line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:221,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:227,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:229,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:231,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:232,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:233,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:236,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:237,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:238,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:239,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:240,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:240,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 241
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::body
    - brpc::HttpMessage::ParseFromIOBuf
    - snprintf
    - brpc::HttpMessage::header
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_from_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:249,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:250,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:253,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:253,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:254,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:254,1
    - Dst: brpc::HttpMessage::stage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:255,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:255,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:256,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:258,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:265,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:266,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:268,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:269,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:269,1
    - Dst: brpc::HttpMessage::stage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:270,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:270,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:271,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 274
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::stage
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_http_head_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:284,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:285,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:287,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:287,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:287,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:288,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:288,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:291,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 294
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::size
    - ASSERT_NE
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_http_cookie)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:303,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:304,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:306,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:307,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:307,1
    - Dst: brpc::HttpMessage::stage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:307,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:309,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:311,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:313,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:319,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:321,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:326,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:327,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:338,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 339
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::stage
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_http_set_cookie)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:353,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:354,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:361,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:362,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:372,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:373,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:380,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:381,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:386,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:386,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:391,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:391,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:396,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:396,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:401,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:401,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:408,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:408,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:408,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:413,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:413,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:418,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:418,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:418,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:423,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 426
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::size
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, cl_and_te)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:430,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:430,1
    - Dst: test::EchoService::EchoService
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:432,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:432,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:436,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:438,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:438,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:442,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:442,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:444,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:446,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:446,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:448,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:450,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:450,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:452,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:454,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:455,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:457,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:459,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:460,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:462,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:465,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:466,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:470,1
    - Dst: brpc::Server::MethodProperty*::method::full_name
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:470,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:475,1
    - Dst: brpc::Server::MethodProperty*::method::full_name
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:475,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:477,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:480,1
    - Dst: brpc::Server::MethodProperty*::method::full_name
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:480,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:482,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 485
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - ASSERT_TRUE
    - brpc::Server::MethodProperty*::method::service
    - test::EchoService::EchoService
    - ASSERT_FALSE
    - brpc::Server::Start
    - brpc::Server::MethodProperty*::method::full_name
    - FindMethodPropertyByURI
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, find_method_property_by_uri)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:488,1
    - Dst: brpc::HttpHeader::set_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:491,1
    - Dst: brpc::HttpHeader::major_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:492,1
    - Dst: brpc::HttpHeader::minor_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:494,1
    - Dst: brpc::HttpHeader::content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:494,1
    - Dst: brpc::HttpHeader::set_content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:496,1
    - Dst: brpc::HttpHeader::content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:496,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:497,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:497,1
    - Dst: brpc::HttpHeader::set_content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:499,1
    - Dst: brpc::HttpHeader::content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:499,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:500,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:500,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:502,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:502,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:503,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:504,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:505,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:506,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:507,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:508,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:509,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:510,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:511,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:512,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:513,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:513,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:515,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:515,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:516,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:518,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:519,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:521,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:522,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:523,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:524,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:525,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:526,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:526,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:531,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:531,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:532,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:533,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:534,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:535,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:536,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:537,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:538,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:539,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:540,1
    - Dst: brpc::HttpHeader::GetAllSetCookieHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:543,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:545,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:546,1
    - Dst: brpc::HttpHeader::HeaderBegin
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:550,1
    - Dst: brpc::HttpHeader::HeaderEnd
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:550,1
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:561,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:562,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:563,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:566,1
    - Dst: brpc::HttpHeader::method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:566,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:568,1
    - Dst: brpc::HttpHeader::method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:570,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:570,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:571,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:571,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:571,1
    - Dst: brpc::HttpHeader::reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:572,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:574,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:574,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:575,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:575,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:575,1
    - Dst: brpc::HttpHeader::reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:576,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:579,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:579,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:580,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:580,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:580,1
    - Dst: brpc::HttpHeader::reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:581,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 487
    functionDepth: 1
    functionLinenumber: 487
    functionLinenumberEnd: 582
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::status_code
    - brpc::HttpHeader::major_version
    - brpc::HttpHeader::set_content_type
    - brpc::HttpHeader::HeaderEnd
    - brpc::HttpHeader::HeaderBegin
    - brpc::HttpHeader::set_status_code
    - brpc::HttpHeader::set_version
    - brpc::HttpHeader::content_type
    - ASSERT_STREQ
    - brpc::HttpReasonPhrase
    - ASSERT_FALSE
    - brpc::HttpHeader::IsSetCookie
    - brpc::HttpHeader::GetAllSetCookieHeader
    - brpc::HttpHeader::method
    - brpc::HttpHeader::minor_version
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::RemoveHeader
    - brpc::HttpHeader::GetHeader
    - ASSERT_TRUE
    - brpc::HttpHeader::reason_phrase
    - brpc::HttpHeader::HttpHeader
    - brpc::HttpHeader::AppendHeader
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, http_header)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:585,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:586,1
    - Dst: ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 584
    functionDepth: 1
    functionLinenumber: 584
    functionLinenumberEnd: 587
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ParseHttpServerAddress
    - ASSERT_FALSE
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, empty_url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:591,1
    - Dst: brpc::HttpHeader::HeaderCount
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:591,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:593,1
    - Dst: brpc::HttpHeader::HeaderCount
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:593,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:594,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:596,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:596,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:597,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:598,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:599,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:601,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:604,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:606,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:609,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:611,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:614,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:616,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:619,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:621,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:624,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:626,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:628,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:630,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:633,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:634,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 589
    functionDepth: 1
    functionLinenumber: 589
    functionLinenumberEnd: 637
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - brpc::HttpHeader::HeaderCount
    - MakeRawHttpRequest
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, serialize_http_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:640,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:641,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:642,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:643,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:644,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:645,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:647,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:648,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:650,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:650,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:653,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:655,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:656,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:658,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:660,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:661,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:662,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:665,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:667,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:668,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:670,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:671,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:673,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:674,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:675,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:679,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:680,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:681,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:683,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:685,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:686,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:687,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:689,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:690,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:694,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:695,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:695,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:697,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:698,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:700,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:702,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 639
    functionDepth: 1
    functionLinenumber: 639
    functionLinenumberEnd: 704
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::SetHeader
    - ASSERT_EQ
    - brpc::HttpHeader::RemoveHeader
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    - MakeRawHttpResponse
    - butil::ToPrintable::ToPrintable
    - CHECK
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - brpc::HttpHeader::set_status_code
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, serialize_http_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:709,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:710,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:713,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:714,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:714,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:717,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:718,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:721,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:722,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:722,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:723,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:724,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:724,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:727,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:728,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:732,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:733,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:733,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:734,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:734,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:735,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:736,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:736,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 739
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - ASSERT_GE
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, http_1_1_request_without_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:52,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:52,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:53,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:53,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:54,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:54,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:55,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:55,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:58,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:59,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:60,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:62,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:64,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:65,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:68,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:69,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:70,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:71,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:74,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:74,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:75,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:75,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:76,1
    - Dst: brpc::Str2HttpMethod
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 77
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpMethod2Str
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::Str2HttpMethod
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, http_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:80,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:105,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:106,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:108,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:108,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:109,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:109,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:110,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 111
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::size
    - brpc::HttpMessage::ParseFromArray
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:130,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:130,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:131,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:131,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:134,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:134,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:135,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:136,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:136,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:137,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:138,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:139,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:140,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:141,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:142,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:142,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:143,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:144,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:146,1
    - Dst: major_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:147,1
    - Dst: minor_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:148,1
    - Dst: method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:149,1
    - Dst: status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:149,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:150,1
    - Dst: reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:150,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:152,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:153,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:154,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:155,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 156
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - minor_version
    - method
    - ASSERT_STREQ
    - brpc::HttpMessage::ParseFromArray
    - content_type
    - reason_phrase
    - status_code
    - brpc::HttpMessage::header
    - major_version
    - GetHeader
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, request_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:174,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:174,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:175,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:175,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:178,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:179,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:180,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:181,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:182,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:183,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:184,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:185,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:186,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:187,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:188,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:190,1
    - Dst: major_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:191,1
    - Dst: minor_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:193,1
    - Dst: method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:194,1
    - Dst: status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:194,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:195,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:195,1
    - Dst: status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:195,1
    - Dst: reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:196,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:198,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:199,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:200,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:201,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 202
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - minor_version
    - method
    - ASSERT_STREQ
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpReasonPhrase
    - content_type
    - reason_phrase
    - status_code
    - brpc::HttpMessage::header
    - major_version
    - GetHeader
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, response_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:208,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:208,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 209
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, bad_format)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:213,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:214,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:214,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:214,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:215,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::ParseFromArray
    - ASSERT_FALSE
    - brpc::HttpMessage::HttpMessage
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, incompleted_request_line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:221,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:227,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:229,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:231,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:232,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:233,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:236,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:237,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:238,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:239,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:240,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:240,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 241
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::body
    - brpc::HttpMessage::ParseFromIOBuf
    - snprintf
    - brpc::HttpMessage::header
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_from_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:249,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:250,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:253,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:253,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:254,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:254,1
    - Dst: brpc::HttpMessage::stage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:255,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:255,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:256,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:258,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:265,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:266,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:268,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:269,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:269,1
    - Dst: brpc::HttpMessage::stage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:270,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:270,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:271,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 274
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::stage
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_http_head_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:284,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:285,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:287,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:287,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:287,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:288,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:288,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:291,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 294
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::size
    - ASSERT_NE
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_http_cookie)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:303,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:304,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:306,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:307,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:307,1
    - Dst: brpc::HttpMessage::stage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:307,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:309,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:311,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:313,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:319,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:321,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:326,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:327,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:338,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 339
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::stage
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, parse_http_set_cookie)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:353,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:354,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:361,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:362,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:372,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:373,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:380,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:381,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:386,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:386,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:391,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:391,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:396,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:396,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:401,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:401,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:408,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:408,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:408,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:413,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:413,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:418,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:418,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:418,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:423,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 426
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::size
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, cl_and_te)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:430,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:430,1
    - Dst: test::EchoService::EchoService
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:432,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:432,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:436,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:438,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:438,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:442,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:442,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:444,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:446,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:446,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:448,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:450,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:450,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:452,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:454,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:455,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:457,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:459,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:460,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:462,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:465,1
    - Dst: brpc::Server::MethodProperty*::method::service
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:466,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:470,1
    - Dst: brpc::Server::MethodProperty*::method::full_name
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:470,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:475,1
    - Dst: brpc::Server::MethodProperty*::method::full_name
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:475,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:477,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:480,1
    - Dst: brpc::Server::MethodProperty*::method::full_name
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:480,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:482,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 485
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - ASSERT_TRUE
    - brpc::Server::MethodProperty*::method::service
    - test::EchoService::EchoService
    - ASSERT_FALSE
    - brpc::Server::Start
    - brpc::Server::MethodProperty*::method::full_name
    - FindMethodPropertyByURI
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, find_method_property_by_uri)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:488,1
    - Dst: brpc::HttpHeader::set_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:491,1
    - Dst: brpc::HttpHeader::major_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:492,1
    - Dst: brpc::HttpHeader::minor_version
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:494,1
    - Dst: brpc::HttpHeader::content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:494,1
    - Dst: brpc::HttpHeader::set_content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:496,1
    - Dst: brpc::HttpHeader::content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:496,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:497,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:497,1
    - Dst: brpc::HttpHeader::set_content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:499,1
    - Dst: brpc::HttpHeader::content_type
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:499,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:500,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:500,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:502,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:502,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:503,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:504,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:505,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:506,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:507,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:508,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:509,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:510,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:511,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:512,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:513,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:513,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:515,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:515,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:516,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:518,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:519,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:521,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:522,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:523,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:524,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:525,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:526,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:526,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:531,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:531,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:532,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:533,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:534,1
    - Dst: brpc::HttpHeader::AppendHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:535,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:536,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:537,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:538,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:539,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:540,1
    - Dst: brpc::HttpHeader::GetAllSetCookieHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:543,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:545,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:546,1
    - Dst: brpc::HttpHeader::HeaderBegin
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:550,1
    - Dst: brpc::HttpHeader::HeaderEnd
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:550,1
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:561,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:562,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:563,1
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:566,1
    - Dst: brpc::HttpHeader::method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:566,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:568,1
    - Dst: brpc::HttpHeader::method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:570,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:570,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:571,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:571,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:571,1
    - Dst: brpc::HttpHeader::reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:572,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:574,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:574,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:575,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:575,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:575,1
    - Dst: brpc::HttpHeader::reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:576,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:579,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:579,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:580,1
    - Dst: brpc::HttpReasonPhrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:580,1
    - Dst: brpc::HttpHeader::status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:580,1
    - Dst: brpc::HttpHeader::reason_phrase
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:581,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 487
    functionDepth: 1
    functionLinenumber: 487
    functionLinenumberEnd: 582
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::status_code
    - brpc::HttpHeader::major_version
    - brpc::HttpHeader::set_content_type
    - brpc::HttpHeader::HeaderEnd
    - brpc::HttpHeader::HeaderBegin
    - brpc::HttpHeader::set_status_code
    - brpc::HttpHeader::set_version
    - brpc::HttpHeader::content_type
    - ASSERT_STREQ
    - brpc::HttpReasonPhrase
    - ASSERT_FALSE
    - brpc::HttpHeader::IsSetCookie
    - brpc::HttpHeader::GetAllSetCookieHeader
    - brpc::HttpHeader::method
    - brpc::HttpHeader::minor_version
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::RemoveHeader
    - brpc::HttpHeader::GetHeader
    - ASSERT_TRUE
    - brpc::HttpHeader::reason_phrase
    - brpc::HttpHeader::HttpHeader
    - brpc::HttpHeader::AppendHeader
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, http_header)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:585,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:586,1
    - Dst: ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 584
    functionDepth: 1
    functionLinenumber: 584
    functionLinenumberEnd: 587
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ParseHttpServerAddress
    - ASSERT_FALSE
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, empty_url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:591,1
    - Dst: brpc::HttpHeader::HeaderCount
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:591,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:593,1
    - Dst: brpc::HttpHeader::HeaderCount
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:593,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:594,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:596,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:596,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:597,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:598,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:599,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:601,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:604,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:606,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:609,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:611,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:614,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:616,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:619,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:621,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:624,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:626,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:628,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:630,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:633,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:634,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 589
    functionDepth: 1
    functionLinenumber: 589
    functionLinenumberEnd: 637
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - brpc::HttpHeader::HeaderCount
    - MakeRawHttpRequest
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, serialize_http_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:640,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:641,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:642,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:643,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:644,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:645,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:647,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:648,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:650,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:650,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:653,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:655,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:656,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:658,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:660,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:661,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:662,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:665,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:667,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:668,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:670,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:671,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:673,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:674,1
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:675,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:679,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:680,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:681,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:683,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:685,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:686,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:687,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:689,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:690,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:694,1
    - Dst: brpc::HttpHeader::set_status_code
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:695,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:695,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:697,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:698,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:700,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:702,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 639
    functionDepth: 1
    functionLinenumber: 639
    functionLinenumberEnd: 704
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::SetHeader
    - ASSERT_EQ
    - brpc::HttpHeader::RemoveHeader
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    - MakeRawHttpResponse
    - butil::ToPrintable::ToPrintable
    - CHECK
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - brpc::HttpHeader::set_status_code
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, serialize_http_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:709,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:710,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:713,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:714,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:714,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:717,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:718,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:721,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:722,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:722,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:723,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:724,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:724,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:727,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:728,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:732,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:733,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:733,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:734,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:734,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:735,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:736,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_message_unittest.cpp:736,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 739
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_http_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - ASSERT_GE
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpMessage::header
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST(HttpMessageTest, http_1_1_request_without_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 12
    functionName: Increment
    functionSourceFile: /src/brpc/test/barrier_closure_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/barrier_closure_unittest.cc:16,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/barrier_closure_unittest.cc:16,1
    - Dst: butil::BarrierClosure
      Src: /src/brpc/test/barrier_closure_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 20
    functionName: TEST
    functionSourceFile: /src/brpc/test/barrier_closure_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Unretained
    - EXPECT_EQ
    - butil::BarrierClosure
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(BarrierClosureTest, RunImmediatelyForZeroClosures)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/barrier_closure_unittest.cc:24,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/barrier_closure_unittest.cc:24,1
    - Dst: butil::BarrierClosure
      Src: /src/brpc/test/barrier_closure_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:27,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/barrier_closure_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:30,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/barrier_closure_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 34
    functionName: TEST
    functionSourceFile: /src/brpc/test/barrier_closure_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - EXPECT_EQ
    - butil::BarrierClosure
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(BarrierClosureTest, RunAfterNumClosures)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 12
    functionName: Increment
    functionSourceFile: /src/brpc/test/barrier_closure_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/barrier_closure_unittest.cc:16,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/barrier_closure_unittest.cc:16,1
    - Dst: butil::BarrierClosure
      Src: /src/brpc/test/barrier_closure_unittest.cc:18,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 20
    functionName: TEST
    functionSourceFile: /src/brpc/test/barrier_closure_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Unretained
    - EXPECT_EQ
    - butil::BarrierClosure
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(BarrierClosureTest, RunImmediatelyForZeroClosures)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/barrier_closure_unittest.cc:24,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/barrier_closure_unittest.cc:24,1
    - Dst: butil::BarrierClosure
      Src: /src/brpc/test/barrier_closure_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:27,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/barrier_closure_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:30,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/barrier_closure_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/barrier_closure_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 34
    functionName: TEST
    functionSourceFile: /src/brpc/test/barrier_closure_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - EXPECT_EQ
    - butil::BarrierClosure
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(BarrierClosureTest, RunAfterNumClosures)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/test/bthread_butex_unittest.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: bthread::get_task_control
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_task_control()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/test/bthread_butex_unittest.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: bthread::get_task_control
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_task_control()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:39,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:42,1
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_butex_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:44,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_butex_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 46
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bthread::butex_create_checked<uint32_t>
    - bthread::butex_wait
    - clock_gettime
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, wait_on_already_timedout_butex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: sleeper
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleeper(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:54,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:57,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:59,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:60,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:62,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_butex_unittest.cpp:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:66,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 69
    functionName: joiner
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread_join
    - EXPECT_LE
    - bthread_self
    - labs
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: void * joiner(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, with_or_without_array_zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:94,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:100,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:103,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:107,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:107,1
    - Dst: berror
      Src: /src/brpc/test/bthread_butex_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:111,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:111,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_join
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, join)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:125,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_butex_unittest.cpp:126,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:130,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_butex_unittest.cpp:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:132,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_butex_unittest.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 136
    functionName: waiter
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread::butex_wait
    - bthread_self
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: void * waiter(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_butex_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:144,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:145,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_butex_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:149,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:149,1
    - Dst: WaiterArg::WaiterArg
      Src: /src/brpc/test/bthread_butex_unittest.cpp:151,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:158,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:158,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_butex_unittest.cpp:160,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:174,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:174,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:180,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:182,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:182,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:183,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 185
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - bthread_start_urgent
    - butil::seconds_from_now
    - bthread::butex_wake
    - pthread_create
    - bthread::butex_destroy
    - WaiterArg::WaiterArg
    - sleep
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexWaitArg*>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:196,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_butex_unittest.cpp:197,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_butex_unittest.cpp:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 207
    functionName: wait_butex
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ButexWaitArg*>
    - EXPECT_EQ
    - bthread::butex_wait
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void * wait_butex(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:210,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:212,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:221,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:222,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:222,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:223,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:225,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:225,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:225,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 228
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - labs
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, wait_without_stop)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:231,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:233,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:243,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:244,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:245,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:246,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:246,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:247,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:249,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:249,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:252,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:252,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:254,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 255
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - labs
    - bthread_stop
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_after_running)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:258,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:260,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:270,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:271,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:271,1
    - Dst: bthread_flush
      Src: /src/brpc/test/bthread_butex_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:273,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:273,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:274,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:276,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:279,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:279,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 282
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_start_background
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - bthread_stop
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_before_running)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:285,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 287
    functionName: join_the_waiter
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void * join_the_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:291,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:293,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:301,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:302,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:303,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:304,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:304,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:305,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_butex_unittest.cpp:305,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:306,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_butex_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:307,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:308,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:309,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:310,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:310,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:311,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:312,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:313,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:314,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:314,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 317
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread::TaskGroup::exists
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - bthread_stop
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, join_cant_be_wakeup)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:320,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:329,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:331,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:332,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:333,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:333,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:334,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:336,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:336,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:336,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:338,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:338,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:342,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:342,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 344
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread_join
    - butil::Timer::m_elapsed
    - labs
    - bthread_stop
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_after_slept)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:347,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:355,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:357,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:358,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:358,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:359,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:361,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:361,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:361,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:363,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:367,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:367,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 369
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - labs
    - ASSERT_LT
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_just_when_sleeping)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:372,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:381,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:383,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:383,1
    - Dst: bthread_flush
      Src: /src/brpc/test/bthread_butex_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:385,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:385,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:386,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:389,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:389,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:389,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:391,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:395,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:395,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 371
    functionDepth: 1
    functionLinenumber: 371
    functionLinenumberEnd: 397
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_start_background
    - bthread_join
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - labs
    - ASSERT_LT
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_before_sleeping)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:401,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:403,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_butex_unittest.cpp:404,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:405,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:409,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:410,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 412
    functionName: trigger_signal
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::interrupt_pthread
    - butil::gettimeofday_us
    - LOG
    - usleep
    linkageType: ''
    returnType: void
    signature: void * trigger_signal(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:415,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_butex_unittest.cpp:421,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:424,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:424,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_butex_unittest.cpp:426,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:431,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:432,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:435,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:435,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:436,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:438,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:440,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:442,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:442,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:443,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 444
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - butil::Timer::stop
    - pthread_join
    - butil::Timer::start
    - bthread::butex_wake
    - pthread_create
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - labs
    - ASSERT_LT
    - LOG
    - butil::milliseconds_from_now
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, wait_with_signal_triggered)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:39,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:42,1
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_butex_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:44,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_butex_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 46
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bthread::butex_create_checked<uint32_t>
    - bthread::butex_wait
    - clock_gettime
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, wait_on_already_timedout_butex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: sleeper
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleeper(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:54,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:57,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:59,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:60,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:62,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_butex_unittest.cpp:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:66,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 69
    functionName: joiner
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread_join
    - EXPECT_LE
    - bthread_self
    - labs
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: void * joiner(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, with_or_without_array_zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:94,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:100,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:103,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:107,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:107,1
    - Dst: berror
      Src: /src/brpc/test/bthread_butex_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:111,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:111,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_join
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, join)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:125,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_butex_unittest.cpp:126,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:130,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_butex_unittest.cpp:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:132,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_butex_unittest.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 136
    functionName: waiter
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread::butex_wait
    - bthread_self
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: void * waiter(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_butex_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:144,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:145,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_butex_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:149,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:149,1
    - Dst: WaiterArg::WaiterArg
      Src: /src/brpc/test/bthread_butex_unittest.cpp:151,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:158,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:158,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_butex_unittest.cpp:160,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:174,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:174,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:180,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:182,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:182,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:183,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 185
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - bthread_start_urgent
    - butil::seconds_from_now
    - bthread::butex_wake
    - pthread_create
    - bthread::butex_destroy
    - WaiterArg::WaiterArg
    - sleep
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexWaitArg*>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:196,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_butex_unittest.cpp:197,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_butex_unittest.cpp:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 207
    functionName: wait_butex
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ButexWaitArg*>
    - EXPECT_EQ
    - bthread::butex_wait
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void * wait_butex(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:210,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:212,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:221,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:222,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:222,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:223,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:225,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:225,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:225,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 228
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - labs
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, wait_without_stop)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:231,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:233,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:243,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:244,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:245,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:246,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:246,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:247,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:249,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:249,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:252,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:252,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:254,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 255
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - labs
    - bthread_stop
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_after_running)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:258,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:260,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:270,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:271,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:271,1
    - Dst: bthread_flush
      Src: /src/brpc/test/bthread_butex_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:273,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:273,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:274,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:276,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:279,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:279,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 282
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_start_background
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - bthread_stop
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_before_running)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:285,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 287
    functionName: join_the_waiter
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void * join_the_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_butex_unittest.cpp:291,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:293,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:301,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:302,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:303,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:304,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:304,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:305,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_butex_unittest.cpp:305,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:306,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_butex_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:307,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:308,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:309,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:310,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:310,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:311,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:312,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:313,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:314,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:314,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 317
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread::TaskGroup::exists
    - bthread_join
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - bthread_stop
    - bthread::butex_create_checked<int>
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, join_cant_be_wakeup)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:320,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:329,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:331,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:332,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:333,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:333,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:334,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:336,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:336,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:336,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:338,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:338,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:342,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:342,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 344
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::stop
    - bthread_join
    - butil::Timer::m_elapsed
    - labs
    - bthread_stop
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_after_slept)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:347,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:355,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:357,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:358,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:358,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:359,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:361,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:361,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:361,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:363,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:367,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:367,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 369
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - labs
    - ASSERT_LT
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_just_when_sleeping)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:372,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:381,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:383,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:383,1
    - Dst: bthread_flush
      Src: /src/brpc/test/bthread_butex_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:385,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:385,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:386,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:389,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:389,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:389,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:391,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:395,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:395,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 371
    functionDepth: 1
    functionLinenumber: 371
    functionLinenumberEnd: 397
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_start_background
    - bthread_join
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - labs
    - ASSERT_LT
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, stop_before_sleeping)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:401,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_butex_unittest.cpp:403,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_butex_unittest.cpp:404,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:405,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_butex_unittest.cpp:409,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:410,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 412
    functionName: trigger_signal
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::interrupt_pthread
    - butil::gettimeofday_us
    - LOG
    - usleep
    linkageType: ''
    returnType: void
    signature: void * trigger_signal(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_butex_unittest.cpp:415,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_butex_unittest.cpp:421,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_butex_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:424,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_butex_unittest.cpp:424,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_butex_unittest.cpp:426,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_butex_unittest.cpp:431,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:432,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_butex_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:435,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:435,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_butex_unittest.cpp:436,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_butex_unittest.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_butex_unittest.cpp:438,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_butex_unittest.cpp:440,1
    - Dst: labs
      Src: /src/brpc/test/bthread_butex_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_unittest.cpp:442,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_butex_unittest.cpp:442,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/test/bthread_butex_unittest.cpp:443,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 444
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - butil::Timer::stop
    - pthread_join
    - butil::Timer::start
    - bthread::butex_wake
    - pthread_create
    - bthread::butex_destroy
    - butil::Timer::m_elapsed
    - labs
    - ASSERT_LT
    - LOG
    - butil::milliseconds_from_now
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(ButexTest, wait_with_signal_triggered)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:61,1
    - Dst: size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:61,1
    - Dst: begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:64,1
    - Dst: begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:64,1
    - Dst: end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:64,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - std::set<butil::ip_t>
    - std::set<butil::ip_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: IsIPListEqual
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - end
    - begin
    linkageType: ''
    returnType: bool
    signature: bool IsIPListEqual(const std::set<butil::ip_t>& s1, const std::set<butil::ip_t>&
      s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:77,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:77,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:81,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:82,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:87,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:88,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:88,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:90,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:94,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:95,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:95,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:101,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:102,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:106,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:115,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:117,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:117,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:119,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:119,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:125,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:125,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:125,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:129,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:129,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:137,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:137,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:142,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 144
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - fopen
    - ARRAY_SIZE
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::DomainNamingService::DomainNamingService
    - butil::TempFile::fname
    - std::ostringstream::str
    - brpc::policy::ListNamingService::GetServers
    - std::string::c_str
    - brpc::policy::FileNamingService::GetServers
    - brpc::policy::BaiduNamingService::GetServers
    - fprintf
    - IsIPListEqual
    - butil::TempFile::TempFile
    - fclose
    - butil::string_appendf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:155,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:156,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:157,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 158
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::DomainNamingService::DomainNamingService
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::BaiduNamingService::GetServers
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, invalid_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:178,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:180,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:180,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:182,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:182,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:188,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:188,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:188,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:192,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:195,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:195,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 197
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - ARRAY_SIZE
    - ASSERT_TRUE
    - std::string::c_str
    - brpc::policy::ListNamingService::GetServers
    - butil::TempFile::fname
    - brpc::policy::FileNamingService::GetServers
    - brpc::policy::BaiduNamingService::GetServers
    - fprintf
    - butil::TempFile::TempFile
    - fclose
    - butil::string_appendf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, wrong_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: UserNamingServiceImpl::UserNamingServiceImpl
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UserNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 202
    functionName: ~UserNamingServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~UserNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:209,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:210,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 214
    functionName: UserNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - fetch_add
    - brpc::Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void ListNames(google::protobuf::RpcController* cntl_base,\n                   const
      test::HttpRequest*,\n                   test::HttpResponse*,\n                   google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 221
    functionName: UserNamingServiceImpl::Touch
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: "void Touch(google::protobuf::RpcController*,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:228,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:230,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:231,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:231,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:232,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:234,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:235,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:235,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:238,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:238,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:240,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:240,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:242,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:242,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:245,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:245,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:250,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:257,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:258,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:258,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:258,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 263
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - std::vector::push_back
    - UserNamingServiceImpl::UserNamingServiceImpl
    - std::vector::end
    - brpc::policy::RemoteFileNamingService::GetServers
    - butil::str2endpoint
    - brpc::ServerNode
    - butil::EndPoint::EndPoint
    - std::sort
    - brpc::Server::Start
    - std::vector::begin
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, remotefile)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 268
    functionName: ConsulNamingServiceImpl::ConsulNamingServiceImpl
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsulNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 269
    functionName: ~ConsulNamingServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConsulNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:276,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:277,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 391
    functionName: ConsulNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - fetch_add
    - brpc::Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void ListNames(google::protobuf::RpcController* cntl_base,\n                   const
      test::HttpRequest*,\n                   test::HttpResponse*,\n                   google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 398
    functionName: ConsulNamingServiceImpl::Touch
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: "void Touch(google::protobuf::RpcController*,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:413,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:414,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:416,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:416,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:417,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:418,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:418,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:420,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:426,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:431,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:431,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:434,1
    - Dst: ConsulNamingServiceImpl::ConsulNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:435,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:437,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:438,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:443,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:443,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:445,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:448,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:448,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:450,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:450,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:453,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:453,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:457,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:461,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 404
    functionDepth: 1
    functionLinenumber: 404
    functionLinenumberEnd: 464
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - brpc::ServerNode
    - butil::EndPoint::EndPoint
    - fprintf
    - std::vector::begin
    - ARRAY_SIZE
    - brpc::Server::AddService
    - std::string::c_str
    - std::string::append
    - butil::TempFile::TempFile
    - brpc::policy::ConsulNamingService::GetServers
    - std::ostringstream::str
    - butil::TempFile::fname
    - std::sort
    - brpc::Server::Start
    - ConsulNamingServiceImpl::ConsulNamingServiceImpl
    - std::vector::clear
    - fopen
    - ASSERT_TRUE
    - std::vector::push_back
    - std::vector::end
    - butil::str2endpoint
    - fclose
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, consul_with_backup_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 561
    functionName: DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 562
    functionName: ~DiscoveryNamingServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DiscoveryNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:569,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 571
    functionName: DiscoveryNamingServiceImpl::Nodes
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Nodes(google::protobuf::RpcController* cntl_base,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:578,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 580
    functionName: DiscoveryNamingServiceImpl::Fetchs
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Fetchs(google::protobuf::RpcController* cntl_base,\n                const
      test::HttpRequest*,\n                test::HttpResponse*,\n                google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:587,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:588,1
    - Dst: brpc::QuerySplitter::key
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:590,1
    - Dst: insert
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:591,1
    - Dst: brpc::QuerySplitter::value
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:591,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:594,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 599
    functionName: DiscoveryNamingServiceImpl::Register
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::QuerySplitter::value
    - brpc::QuerySplitter::key
    - brpc::Controller*::request_attachment
    - insert
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Register(google::protobuf::RpcController* cntl_base,\n                 const
      test::HttpRequest*,\n                 test::HttpResponse*,\n                 google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:606,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:607,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 613
    functionName: DiscoveryNamingServiceImpl::Renew
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Renew(google::protobuf::RpcController* cntl_base,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:620,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:621,1
    - Dst: clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 615
    functionDepth: 1
    functionLinenumber: 615
    functionLinenumberEnd: 628
    functionName: DiscoveryNamingServiceImpl::Cancel
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - clear
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Cancel(google::protobuf::RpcController* cntl_base,\n                const
      test::HttpRequest*,\n                test::HttpResponse*,\n                google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 630
    functionName: DiscoveryNamingServiceImpl::RenewCount
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int RenewCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 631
    functionDepth: 0
    functionLinenumber: 631
    functionLinenumberEnd: 631
    functionName: DiscoveryNamingServiceImpl::CancelCount
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int CancelCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:634,1
    - Dst: end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:634,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' addr'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 635
    functionName: DiscoveryNamingServiceImpl::HasAddr
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - find
    - end
    linkageType: ''
    returnType: bool
    signature: bool HasAddr(const std::string& addr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 636
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 636
    functionName: DiscoveryNamingServiceImpl::AddrCount
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: int
    signature: int AddrCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:648,1
    - Dst: DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:656,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:656,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:658,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:662,1
    - Dst: brpc::policy::DiscoveryNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:663,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:663,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:677,1
    - Dst: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:677,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:679,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:682,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:683,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:683,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:685,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:685,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:688,1
    - Dst: DiscoveryNamingServiceImpl::RenewCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:689,1
    - Dst: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:689,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:698,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:698,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:699,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:699,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:700,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:700,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:701,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:701,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:702,1
    - Dst: DiscoveryNamingServiceImpl::AddrCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:702,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 704
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
    - brpc::policy::DiscoveryNamingService::GetServers
    - std::string::c_str
    - brpc::policy::DiscoveryClient::DiscoveryClient
    - DiscoveryNamingServiceImpl::CancelCount
    - brpc::policy::DiscoveryClient::Register
    - bthread_usleep
    - ASSERT_TRUE
    - std::string
    - ASSERT_FALSE
    - DiscoveryNamingServiceImpl::AddrCount
    - brpc::Server::Start
    - DiscoveryNamingServiceImpl::RenewCount
    - DiscoveryNamingServiceImpl::HasAddr
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, discovery_sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:712,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:715,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:716,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:722,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:723,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:731,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:732,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 734
    functionName: NacosNamingServiceImpl::Login
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_response
    - brpc::Controller*::request_attachment
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: "void Login(google::protobuf::RpcController* cntl_base,\n               const
      test::HttpRequest*, test::HttpResponse*,\n               google::protobuf::Closure*
      done) override"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:742,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:748,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:749,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:759,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:760,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:761,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:762,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:767,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:771,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:772,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 803
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 803
    functionName: NacosNamingServiceImpl::List
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - brpc::Controller*::http_response
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void List(google::protobuf::RpcController* cntl_base,\n              const
      test::HttpRequest*, test::HttpResponse*,\n              google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:809,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:809,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:812,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:812,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:814,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:817,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:817,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:818,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:827,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:829,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:830,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:831,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:835,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:837,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 806
    functionDepth: 1
    functionLinenumber: 806
    functionLinenumberEnd: 839
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - bthread_usleep
    - butil::str2endpoint
    - brpc::ServerNode
    - butil::EndPoint::EndPoint
    - brpc::policy::NacosNamingService::NacosNamingService
    - brpc::Server::Start
    - brpc::policy::NacosNamingService::GetServers
    - ASSERT_NE
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, nacos)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:61,1
    - Dst: size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:61,1
    - Dst: begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:64,1
    - Dst: begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:64,1
    - Dst: end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:64,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - std::set<butil::ip_t>
    - std::set<butil::ip_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: IsIPListEqual
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached:
    - size
    - end
    - begin
    linkageType: ''
    returnType: bool
    signature: bool IsIPListEqual(const std::set<butil::ip_t>& s1, const std::set<butil::ip_t>&
      s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:77,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:77,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:81,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:82,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:87,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:88,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:88,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:90,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:94,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:95,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:95,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:101,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:102,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:106,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:115,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:117,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:117,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:119,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:119,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:125,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:125,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:125,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:129,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:129,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:137,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:137,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:142,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 144
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - fopen
    - ARRAY_SIZE
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::DomainNamingService::DomainNamingService
    - butil::TempFile::fname
    - std::ostringstream::str
    - brpc::policy::ListNamingService::GetServers
    - std::string::c_str
    - brpc::policy::FileNamingService::GetServers
    - brpc::policy::BaiduNamingService::GetServers
    - fprintf
    - IsIPListEqual
    - butil::TempFile::TempFile
    - fclose
    - butil::string_appendf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:155,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:156,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:157,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 158
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::DomainNamingService::DomainNamingService
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::BaiduNamingService::GetServers
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, invalid_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:178,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:180,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:180,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:182,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:182,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:188,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:188,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:188,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:192,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:195,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:195,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 197
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - ARRAY_SIZE
    - ASSERT_TRUE
    - std::string::c_str
    - brpc::policy::ListNamingService::GetServers
    - butil::TempFile::fname
    - brpc::policy::FileNamingService::GetServers
    - brpc::policy::BaiduNamingService::GetServers
    - fprintf
    - butil::TempFile::TempFile
    - fclose
    - butil::string_appendf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, wrong_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: UserNamingServiceImpl::UserNamingServiceImpl
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UserNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 202
    functionName: ~UserNamingServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~UserNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:209,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:210,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 214
    functionName: UserNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - fetch_add
    - brpc::Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void ListNames(google::protobuf::RpcController* cntl_base,\n                   const
      test::HttpRequest*,\n                   test::HttpResponse*,\n                   google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 221
    functionName: UserNamingServiceImpl::Touch
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: "void Touch(google::protobuf::RpcController*,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:228,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:230,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:231,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:231,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:232,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:234,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:235,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:235,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:238,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:238,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:240,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:240,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:242,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:242,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:245,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:245,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:250,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:257,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:258,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:258,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:258,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 263
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - std::vector::push_back
    - UserNamingServiceImpl::UserNamingServiceImpl
    - std::vector::end
    - brpc::policy::RemoteFileNamingService::GetServers
    - butil::str2endpoint
    - brpc::ServerNode
    - butil::EndPoint::EndPoint
    - std::sort
    - brpc::Server::Start
    - std::vector::begin
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, remotefile)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 268
    functionName: ConsulNamingServiceImpl::ConsulNamingServiceImpl
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsulNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 269
    functionName: ~ConsulNamingServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConsulNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:276,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:277,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 391
    functionName: ConsulNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - fetch_add
    - brpc::Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void ListNames(google::protobuf::RpcController* cntl_base,\n                   const
      test::HttpRequest*,\n                   test::HttpResponse*,\n                   google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 398
    functionName: ConsulNamingServiceImpl::Touch
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: "void Touch(google::protobuf::RpcController*,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:413,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:414,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:416,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:416,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:417,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:418,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:418,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:420,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:426,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:431,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:431,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:434,1
    - Dst: ConsulNamingServiceImpl::ConsulNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:435,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:437,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:438,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:443,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:443,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:445,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:448,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:448,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:450,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:450,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:453,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:453,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:457,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:461,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 404
    functionDepth: 1
    functionLinenumber: 404
    functionLinenumberEnd: 464
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - brpc::ServerNode
    - butil::EndPoint::EndPoint
    - fprintf
    - std::vector::begin
    - ARRAY_SIZE
    - brpc::Server::AddService
    - std::string::c_str
    - std::string::append
    - butil::TempFile::TempFile
    - brpc::policy::ConsulNamingService::GetServers
    - std::ostringstream::str
    - butil::TempFile::fname
    - std::sort
    - brpc::Server::Start
    - ConsulNamingServiceImpl::ConsulNamingServiceImpl
    - std::vector::clear
    - fopen
    - ASSERT_TRUE
    - std::vector::push_back
    - std::vector::end
    - butil::str2endpoint
    - fclose
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, consul_with_backup_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 561
    functionName: DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 562
    functionName: ~DiscoveryNamingServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DiscoveryNamingServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:569,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 571
    functionName: DiscoveryNamingServiceImpl::Nodes
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Nodes(google::protobuf::RpcController* cntl_base,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:578,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 580
    functionName: DiscoveryNamingServiceImpl::Fetchs
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Fetchs(google::protobuf::RpcController* cntl_base,\n                const
      test::HttpRequest*,\n                test::HttpResponse*,\n                google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:587,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:588,1
    - Dst: brpc::QuerySplitter::key
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:590,1
    - Dst: insert
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:591,1
    - Dst: brpc::QuerySplitter::value
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:591,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:594,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 599
    functionName: DiscoveryNamingServiceImpl::Register
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::QuerySplitter::value
    - brpc::QuerySplitter::key
    - brpc::Controller*::request_attachment
    - insert
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Register(google::protobuf::RpcController* cntl_base,\n                 const
      test::HttpRequest*,\n                 test::HttpResponse*,\n                 google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:606,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:607,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 613
    functionName: DiscoveryNamingServiceImpl::Renew
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Renew(google::protobuf::RpcController* cntl_base,\n               const
      test::HttpRequest*,\n               test::HttpResponse*,\n               google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:620,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:621,1
    - Dst: clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 615
    functionDepth: 1
    functionLinenumber: 615
    functionLinenumberEnd: 628
    functionName: DiscoveryNamingServiceImpl::Cancel
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - clear
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Cancel(google::protobuf::RpcController* cntl_base,\n                const
      test::HttpRequest*,\n                test::HttpResponse*,\n                google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 630
    functionName: DiscoveryNamingServiceImpl::RenewCount
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int RenewCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 631
    functionDepth: 0
    functionLinenumber: 631
    functionLinenumberEnd: 631
    functionName: DiscoveryNamingServiceImpl::CancelCount
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int CancelCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:634,1
    - Dst: end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:634,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' addr'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 635
    functionName: DiscoveryNamingServiceImpl::HasAddr
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached:
    - find
    - end
    linkageType: ''
    returnType: bool
    signature: bool HasAddr(const std::string& addr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 636
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 636
    functionName: DiscoveryNamingServiceImpl::AddrCount
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 1
    functionsReached:
    - size
    linkageType: ''
    returnType: int
    signature: int AddrCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:648,1
    - Dst: DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:656,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:656,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:658,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:662,1
    - Dst: brpc::policy::DiscoveryNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:663,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:663,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:677,1
    - Dst: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:677,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:679,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:682,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:683,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:683,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:685,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:685,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:688,1
    - Dst: DiscoveryNamingServiceImpl::RenewCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:689,1
    - Dst: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:689,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:698,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:698,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:699,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:699,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:700,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:700,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:701,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:701,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:702,1
    - Dst: DiscoveryNamingServiceImpl::AddrCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:702,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 704
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
    - brpc::policy::DiscoveryNamingService::GetServers
    - std::string::c_str
    - brpc::policy::DiscoveryClient::DiscoveryClient
    - DiscoveryNamingServiceImpl::CancelCount
    - brpc::policy::DiscoveryClient::Register
    - bthread_usleep
    - ASSERT_TRUE
    - std::string
    - ASSERT_FALSE
    - DiscoveryNamingServiceImpl::AddrCount
    - brpc::Server::Start
    - DiscoveryNamingServiceImpl::RenewCount
    - DiscoveryNamingServiceImpl::HasAddr
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, discovery_sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:712,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:715,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:716,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:722,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:723,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:731,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:732,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 734
    functionName: NacosNamingServiceImpl::Login
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_response
    - brpc::Controller*::request_attachment
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - butil::SplitStringIntoKeyValuePairs
    linkageType: ''
    returnType: void
    signature: "void Login(google::protobuf::RpcController* cntl_base,\n               const
      test::HttpRequest*, test::HttpResponse*,\n               google::protobuf::Closure*
      done) override"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:742,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:748,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:749,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:759,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:760,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:761,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:762,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:767,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:771,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:772,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 803
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 803
    functionName: NacosNamingServiceImpl::List
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - brpc::Controller*::http_response
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void List(google::protobuf::RpcController* cntl_base,\n              const
      test::HttpRequest*, test::HttpResponse*,\n              google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:809,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:809,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:812,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:812,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:814,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:817,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:817,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:818,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:827,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:829,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:830,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:831,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:835,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:837,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 806
    functionDepth: 1
    functionLinenumber: 806
    functionLinenumberEnd: 839
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - bthread_usleep
    - butil::str2endpoint
    - brpc::ServerNode
    - butil::EndPoint::EndPoint
    - brpc::policy::NacosNamingService::NacosNamingService
    - brpc::Server::Start
    - brpc::policy::NacosNamingService::GetServers
    - ASSERT_NE
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, nacos)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: PercentileTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: PercentileTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::Percentile::Percentile
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:32,1
    - Dst: bvar::detail::Percentile::reset
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:37,1
    - Dst: bvar::detail::GlobalPercentileSamples::get_number
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:40,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:41,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:43,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:44,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:46,1
    - Dst: bvar::detail::GlobalPercentileSamples::get_number
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:46,1
    - Dst: bvar::detail::GlobalPercentileSamples::get_number
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:47,1
    - Dst: bvar::detail::GlobalPercentileSamples::get_number
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:48,1
    - Dst: bvar::detail::GlobalPercentileSamples::describe
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 53
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::Percentile::reset
    - bvar::detail::GlobalPercentileSamples::get_number
    - bvar::detail::GlobalPercentileSamples::describe
    - bvar::detail::Percentile::Percentile
    - EXPECT_LT
    - EXPECT_GT
    - EXPECT_GE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(PercentileTest, add)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE>::full
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:68,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:69,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:70,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:72,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:72,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:74,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::full
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:77,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:78,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:81,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:81,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:83,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:92,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:92,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 95
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::detail::PercentileInterval<SAMPLE_SIZE>::add32
    - bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::clear
    - fabs
    - bvar::detail::PercentileInterval<SAMPLE_SIZE>::clear
    - bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::add32
    - bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
    - bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::full
    - EXPECT_LT
    - bvar::detail::PercentileInterval<SAMPLE_SIZE>::full
    linkageType: ''
    returnType: void
    signature: void TEST_F(PercentileTest, merge1)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::PercentileInterval<64>::full
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:111,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:112,1
    - Dst: bvar::detail::PercentileInterval<64>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:113,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:115,1
    - Dst: bvar::detail::PercentileInterval<64>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:115,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:117,1
    - Dst: bvar::detail::PercentileInterval<64>::full
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:120,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:121,1
    - Dst: bvar::detail::PercentileInterval<64>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:124,1
    - Dst: bvar::detail::PercentileInterval<64>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:124,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:126,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:135,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:135,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 138
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::detail::PercentileInterval<64>::clear
    - bvar::detail::PercentileInterval<64>::merge
    - bvar::detail::PercentileInterval<64>::full
    - fabs
    - bvar::detail::PercentileInterval<64>::add32
    - EXPECT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(PercentileTest, merge2)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:157,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:159,1
    - Dst: get_value
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:159,1
    - Dst: bvar::detail::PercentileSamples<510>::combine_of
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:162,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:162,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:162,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:183,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:183,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 188
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::PercentileSamples<510>::combine_of
    - std::vector::push_back
    - get_value
    - std::vector::end
    - fabs
    - std::vector::begin
    - EXPECT_LT
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: void TEST_F(PercentileTest, combine_of)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string16
      Src: /src/brpc/test/string16_unittest.cc:22,1
    - Dst: string16
      Src: /src/brpc/test/string16_unittest.cc:23,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string16_unittest.cc:23,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/string16_unittest.cc:24,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/string16_unittest.cc:25,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:32,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:34,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:38,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:39,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:40,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:44,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:45,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/string16_unittest.cc:51,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/string16_unittest.cc:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 54
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string16_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - std::ostringstream::str
    - butil::ASCIIToUTF16
    - EXPECT_STREQ
    - string16::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(String16Test, OutputStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string16
      Src: /src/brpc/test/string16_unittest.cc:22,1
    - Dst: string16
      Src: /src/brpc/test/string16_unittest.cc:23,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/string16_unittest.cc:23,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/string16_unittest.cc:24,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/string16_unittest.cc:25,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:32,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:34,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:38,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:39,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:40,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:44,1
    - Dst: string16::push_back
      Src: /src/brpc/test/string16_unittest.cc:45,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/string16_unittest.cc:51,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/string16_unittest.cc:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 54
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string16_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - std::ostringstream::str
    - butil::ASCIIToUTF16
    - EXPECT_STREQ
    - string16::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(String16Test, OutputStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/atomicops_unittest.cc:28,1
    - Dst: memset
      Src: /src/brpc/test/atomicops_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:35,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:40,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:45,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:50,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:55,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:60,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:65,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:70,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:75,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:75,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:77,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 79
    functionName: TestAtomicIncrement
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    - memset
    linkageType: ''
    returnType: void
    signature: void TestAtomicIncrement()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - T
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 83
    functionName: NUM_BITS
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NUM_BITS(T)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/atomicops_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:90,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/atomicops_unittest.cc:94,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/atomicops_unittest.cc:95,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/atomicops_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:99,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/atomicops_unittest.cc:102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 105
    functionName: TestCompareAndSwap
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_CompareAndSwap
    - static_cast<uint64_t>
    - NUM_BITS
    linkageType: ''
    returnType: void
    signature: void TestCompareAndSwap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/atomicops_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:113,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/atomicops_unittest.cc:117,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/atomicops_unittest.cc:118,1
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/atomicops_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:122,1
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/atomicops_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 128
    functionName: TestAtomicExchange
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - static_cast<uint64_t>
    - NUM_BITS
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void TestAtomicExchange()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/atomicops_unittest.cc:134,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/atomicops_unittest.cc:135,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:139,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:142,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/atomicops_unittest.cc:145,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/atomicops_unittest.cc:145,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:149,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 153
    functionName: TestAtomicIncrementBounds
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<uint64_t>
    - NUM_BITS
    linkageType: ''
    returnType: void
    signature: void TestAtomicIncrementBounds()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/atomicops_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 161
    functionName: TestFillValue
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - memset
    linkageType: ''
    returnType: AtomicType
    signature: AtomicType TestFillValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestFillValue
      Src: /src/brpc/test/atomicops_unittest.cc:167,1
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/atomicops_unittest.cc:168,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/test/atomicops_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:173,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/test/atomicops_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:175,1
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/test/atomicops_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:178,1
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/test/atomicops_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:180,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/test/atomicops_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:183,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/test/atomicops_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 186
    functionName: TestStore
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Store
    - TestFillValue
    - butil::subtle::NoBarrier_Store
    - EXPECT_EQ
    - butil::subtle::Acquire_Store
    - static_cast<AtomicType>
    linkageType: ''
    returnType: void
    signature: void TestStore()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestFillValue
      Src: /src/brpc/test/atomicops_unittest.cc:192,1
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/atomicops_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:198,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/test/atomicops_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:200,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/test/atomicops_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:203,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/test/atomicops_unittest.cc:203,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:205,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/test/atomicops_unittest.cc:205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:208,1
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/test/atomicops_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/atomicops_unittest.cc:210,1
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/test/atomicops_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 211
    functionName: TestLoad
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Load
    - TestFillValue
    - butil::subtle::Acquire_Load
    - butil::subtle::NoBarrier_Load
    - EXPECT_EQ
    - static_cast<AtomicType>
    linkageType: ''
    returnType: void
    signature: void TestLoad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:214,1
    - Dst: TestAtomicIncrement
      Src: /src/brpc/test/atomicops_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - TestAtomicIncrement
    linkageType: ''
    returnType: void
    signature: void TEST(AtomicOpsTest, Inc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCompareAndSwap
      Src: /src/brpc/test/atomicops_unittest.cc:219,1
    - Dst: TestCompareAndSwap
      Src: /src/brpc/test/atomicops_unittest.cc:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 221
    functionName: TEST
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - TestCompareAndSwap
    linkageType: ''
    returnType: void
    signature: void TEST(AtomicOpsTest, CompareAndSwap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicExchange
      Src: /src/brpc/test/atomicops_unittest.cc:224,1
    - Dst: TestAtomicExchange
      Src: /src/brpc/test/atomicops_unittest.cc:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 226
    functionName: TEST
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - TestAtomicExchange
    linkageType: ''
    returnType: void
    signature: void TEST(AtomicOpsTest, Exchange)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicIncrementBounds
      Src: /src/brpc/test/atomicops_unittest.cc:229,1
    - Dst: TestAtomicIncrementBounds
      Src: /src/brpc/test/atomicops_unittest.cc:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 231
    functionName: TEST
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - TestAtomicIncrementBounds
    linkageType: ''
    returnType: void
    signature: void TEST(AtomicOpsTest, IncrementBounds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestStore
      Src: /src/brpc/test/atomicops_unittest.cc:234,1
    - Dst: TestStore
      Src: /src/brpc/test/atomicops_unittest.cc:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 236
    functionName: TEST
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - TestStore
    linkageType: ''
    returnType: void
    signature: void TEST(AtomicOpsTest, Store)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestLoad
      Src: /src/brpc/test/atomicops_unittest.cc:239,1
    - Dst: TestLoad
      Src: /src/brpc/test/atomicops_unittest.cc:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 241
    functionName: TEST
    functionSourceFile: /src/brpc/test/atomicops_unittest.cc
    functionUses: 0
    functionsReached:
    - TestLoad
    linkageType: ''
    returnType: void
    signature: void TEST(AtomicOpsTest, Load)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:13,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:17,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:20,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:21,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 25
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Base64UrlEncode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, EncodeIncludePaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:32,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:36,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 40
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Base64UrlEncode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, EncodeOmitPaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:44,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:47,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:49,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:53,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:55,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:57,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 60
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_EQ
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeRequirePaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:64,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:70,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 74
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_EQ
    - butil::Base64UrlDecode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeIgnorePaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:78,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:82,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 86
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64UrlDecode
    - EXPECT_EQ
    - ASSERT_FALSE
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeDisallowPaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:93,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64UrlDecode
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeDisallowsBase64Alphabet)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:100,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:100,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:102,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:102,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:104,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:106,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64UrlDecode
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeDisallowsPaddingOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:13,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:17,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:20,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:21,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 25
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Base64UrlEncode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, EncodeIncludePaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:32,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:36,1
    - Dst: butil::Base64UrlEncode
      Src: /src/brpc/test/base64url_unittest.cc:38,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 40
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Base64UrlEncode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, EncodeOmitPaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:44,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:47,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:49,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:53,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:55,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:57,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 60
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_EQ
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeRequirePaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:64,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:70,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 74
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_EQ
    - butil::Base64UrlDecode
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeIgnorePaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:78,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/base64url_unittest.cc:82,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64url_unittest.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 86
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64UrlDecode
    - EXPECT_EQ
    - ASSERT_FALSE
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeDisallowPaddingPolicy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:93,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64UrlDecode
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeDisallowsBase64Alphabet)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:100,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:100,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:102,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:102,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:104,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/base64url_unittest.cc:106,1
    - Dst: butil::Base64UrlDecode
      Src: /src/brpc/test/base64url_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64url_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64UrlDecode
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64UrlTest, DecodeDisallowsPaddingOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 12
    functionName: PREPROCESSOR_UTIL_UNITTEST_B
    functionSourceFile: /src/brpc/test/stringize_macros_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PREPROCESSOR_UTIL_UNITTEST_B(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringize_macros_unittest.cc:15,1
    - Dst: STRINGIZE_NO_EXPANSION
      Src: /src/brpc/test/stringize_macros_unittest.cc:17,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringize_macros_unittest.cc:18,1
    - Dst: STRINGIZE_NO_EXPANSION
      Src: /src/brpc/test/stringize_macros_unittest.cc:20,1
    - Dst: PREPROCESSOR_UTIL_UNITTEST_B
      Src: /src/brpc/test/stringize_macros_unittest.cc:20,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringize_macros_unittest.cc:21,1
    - Dst: STRINGIZE_NO_EXPANSION
      Src: /src/brpc/test/stringize_macros_unittest.cc:23,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringize_macros_unittest.cc:25,1
    - Dst: STRINGIZE
      Src: /src/brpc/test/stringize_macros_unittest.cc:25,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringize_macros_unittest.cc:26,1
    - Dst: STRINGIZE
      Src: /src/brpc/test/stringize_macros_unittest.cc:27,1
    - Dst: PREPROCESSOR_UTIL_UNITTEST_B
      Src: /src/brpc/test/stringize_macros_unittest.cc:27,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringize_macros_unittest.cc:28,1
    - Dst: STRINGIZE
      Src: /src/brpc/test/stringize_macros_unittest.cc:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 29
    functionName: TEST
    functionSourceFile: /src/brpc/test/stringize_macros_unittest.cc
    functionUses: 0
    functionsReached:
    - PREPROCESSOR_UTIL_UNITTEST_B
    - STRINGIZE
    - EXPECT_STREQ
    - STRINGIZE_NO_EXPANSION
    linkageType: ''
    returnType: void
    signature: void TEST(StringizeTest, Ansi)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:49,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:50,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:54,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 56
    functionName: thread_adder
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_adder(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:59,1
    - Dst: bvar::Adder<uint64_t>*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:59,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:62,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:71,1
    - Dst: bvar::Adder<uint64_t>*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:71,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - num_thread
    - adder
    argTypes:
    - size_t
    - bvar::Adder<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 73
    functionName: start_perf_test_with_madder
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bvar::Adder<uint64_t>*::get_value
    - pthread_join
    - pthread_create
    - bvar::Adder<uint64_t>*::valid
    - EXPECT_EQ
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_madder(size_t num_thread, bvar::Adder<uint64_t>*
      adder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:77,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:78,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:82,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 84
    functionName: thread_maxer
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_maxer(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:87,1
    - Dst: bvar::Maxer<uint64_t>*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:87,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:90,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:99,1
    - Dst: bvar::Maxer<uint64_t>*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - num_thread
    - maxer
    argTypes:
    - size_t
    - bvar::Maxer<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 101
    functionName: start_perf_test_with_mmaxer
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - pthread_join
    - pthread_create
    - bvar::Maxer<uint64_t>*::get_value
    - EXPECT_EQ
    - bvar::Maxer<uint64_t>*::valid
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_mmaxer(size_t num_thread, bvar::Maxer<uint64_t>*
      maxer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:105,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:106,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:110,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 112
    functionName: thread_miner
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_miner(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:115,1
    - Dst: bvar::Miner<uint64_t>*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:115,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:118,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:127,1
    - Dst: bvar::Miner<uint64_t>*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - num_thread
    - miner
    argTypes:
    - size_t
    - bvar::Miner<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 129
    functionName: start_perf_test_with_mminer
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - pthread_join
    - pthread_create
    - bvar::Miner<uint64_t>*::valid
    - bvar::Miner<uint64_t>*::get_value
    - EXPECT_EQ
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_mminer(size_t num_thread, bvar::Miner<uint64_t>*
      miner)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:133,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:134,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:138,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 140
    functionName: thread_intrecorder
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_intrecorder(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:143,1
    - Dst: bvar::IntRecorder*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:143,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:146,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:155,1
    - Dst: bvar::IntRecorder*::average
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - num_thread
    - intrecorder
    argTypes:
    - size_t
    - bvar::IntRecorder*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 157
    functionName: start_perf_test_with_mintrecorder
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder*::average
    - EXPECT_TRUE
    - pthread_join
    - pthread_create
    - EXPECT_EQ
    - bvar::IntRecorder*::valid
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_mintrecorder(size_t num_thread, bvar::IntRecorder*
      intrecorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    functionName: MultiDimensionTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 163
    functionName: MultiDimensionTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:171,1
    - Dst: bvar::Adder*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:173,1
    - Dst: bvar::Adder*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:173,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:178,1
    - Dst: bvar::Adder*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:180,1
    - Dst: bvar::Adder*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:180,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:185,1
    - Dst: bvar::Adder*::valid
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:187,1
    - Dst: bvar::Adder*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:187,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:191,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:194,1
    - Dst: bvar::Adder*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 195
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_STREQ
    - bvar::Adder*::get_value
    - bvar::Adder*::valid
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, madder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:201,1
    - Dst: bvar::Adder*::reset
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:205,1
    - Dst: start_perf_test_with_madder
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:206,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:208,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 209
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - std::ostringstream::str
    - bvar::Adder*::reset
    - LOG
    - start_perf_test_with_madder
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mmadder_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:217,1
    - Dst: bvar::Maxer*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 218
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_EQ
    - bvar::Maxer*::get_value
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mmaxer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:223,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:224,1
    - Dst: bvar::Maxer*::reset
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:228,1
    - Dst: start_perf_test_with_mmaxer
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:229,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:231,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 232
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - std::ostringstream::str
    - start_perf_test_with_mmaxer
    - LOG
    - bvar::Maxer*::reset
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mmaxer_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:237,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:240,1
    - Dst: bvar::Miner*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_EQ
    - bvar::Miner*::get_value
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mminer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:247,1
    - Dst: bvar::Miner*::reset
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:251,1
    - Dst: start_perf_test_with_mminer
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:254,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:254,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - std::ostringstream::str
    - bvar::Miner*::reset
    - start_perf_test_with_mminer
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mminer_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:264,1
    - Dst: bvar::IntRecorder*::average
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 1
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder*::average
    - bvar::MultiDimension::get_stats
    - ASSERT_EQ
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mintrecoder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:271,1
    - Dst: bvar::IntRecorder*::reset
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:275,1
    - Dst: start_perf_test_with_mintrecorder
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:276,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:278,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:278,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 279
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - std::ostringstream::str
    - bvar::IntRecorder*::reset
    - LOG
    - start_perf_test_with_mintrecorder
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mintrecorder_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:285,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:285,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:287,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:287,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:288,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:289,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:291,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:292,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:292,1
    - Dst: bvar::MultiDimension::list_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:296,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:296,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:299,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:299,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:302,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:302,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:303,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:304,1
    - Dst: bvar::MultiDimension::list_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:305,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:306,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:306,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:306,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:307,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:307,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:309,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:312,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:312,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:313,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:315,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:315,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:316,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:317,1
    - Dst: bvar::MultiDimension::list_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:318,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:319,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:319,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:319,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:320,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:320,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:322,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:322,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:325,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:325,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:326,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:327,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:328,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:329,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:329,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:330,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:331,1
    - Dst: bvar::MultiDimension::list_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:332,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:333,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:333,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:333,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:334,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:334,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:336,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:336,1
    - Dst: bvar::MultiDimension::delete_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:338,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:339,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:340,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:340,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:341,1
    - Dst: bvar::MultiDimension::list_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:342,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:343,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:343,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:343,1
    - Dst: sort
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:344,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:344,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:345,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:347,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:347,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:348,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:349,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:349,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:350,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:350,1
    - Dst: bvar::MultiDimension::clear_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:353,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:353,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:354,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:354,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:355,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:355,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:356,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:356,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:357,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:357,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:358,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:359,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 360
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - sort
    - std::vector::pop_back
    - bvar::MultiDimension::has_stats
    - std::vector::end
    - ASSERT_FALSE
    - std::vector::begin
    - bvar::MultiDimension::delete_stats
    - bvar::MultiDimension::clear_stats
    - bvar::MultiDimension::list_stats
    - bvar::MultiDimension::count_stats
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, stats)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:365,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:366,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:370,1
    - Dst: bvar::MultiDimension::get_description
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:373,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:374,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:376,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:376,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:377,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:377,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:378,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:378,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:379,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:380,1
    - Dst: IsString
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:380,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:381,1
    - Dst: GetString
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:381,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:383,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:384,1
    - Dst: IsInt
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:385,1
    - Dst: GetInt
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:387,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:388,1
    - Dst: IsArray
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:391,1
    - Dst: Size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:391,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:392,1
    - Dst: GetString
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:392,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:393,1
    - Dst: GetString
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:393,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:394,1
    - Dst: GetString
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 395
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - IsString
    - ASSERT_EQ
    - std::string::c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - GetString
    - IsInt
    - ASSERT_STREQ
    - GetInt
    - bvar::MultiDimension::get_description
    - ASSERT_FALSE
    - IsArray
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - Size
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, get_description)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:404,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:405,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:406,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:407,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:408,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:410,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:411,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:412,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:413,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:414,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:418,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:419,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:422,1
    - Dst: bvar::LatencyRecorder*::latency
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:423,1
    - Dst: bvar::LatencyRecorder*::max_latency
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:423,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:424,1
    - Dst: bvar::LatencyRecorder*::qps
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:425,1
    - Dst: bvar::LatencyRecorder*::count
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:425,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:427,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:427,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:428,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:428,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:429,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:429,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:430,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:430,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:431,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 432
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::string::c_str
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_LE
    - bvar::LatencyRecorder*::qps
    - sleep
    - bvar::LatencyRecorder*::max_latency
    - bvar::LatencyRecorder*::count
    - bvar::LatencyRecorder*::latency
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mlatencyrecorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:437,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:438,1
    - Dst: bvar::Status*::set_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:440,1
    - Dst: bvar::Status*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 441
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - ASSERT_EQ
    - ASSERT_TRUE
    - bvar::Status*::get_value
    - bvar::Status*::set_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, mstatus)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:456,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:456,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:456,1
    - Dst: fn
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:458,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:459,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:460,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:461,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - fn
    argTypes:
    - hash_fun
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 466
    functionName: perf_hash
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - butil::Timer::stop
    - butil::Timer::n_elapsed
    - fn
    - EXPECT_NE
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t perf_hash(hash_fun fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::hash<std::string>
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:471,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - std::list<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 474
    functionName: hash_fun1
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::hash<std::string>
    linkageType: ''
    returnType: size_t
    signature: size_t hash_fun1(const std::list<std::string>& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::append
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:479,1
    - Dst: std::hash<std::string>
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:481,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - std::list<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 482
    functionName: hash_fun2
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - std::hash<std::string>
    linkageType: ''
    returnType: size_t
    signature: size_t hash_fun2(const std::list<std::string>& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::hash<std::string>
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:489,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:489,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - std::list<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 490
    functionName: hash_fun3
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - std::hash<std::string>
    linkageType: ''
    returnType: size_t
    signature: size_t hash_fun3(const std::list<std::string>& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_hash
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:494,1
    - Dst: perf_hash
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:495,1
    - Dst: perf_hash
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:496,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:497,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 492
    functionDepth: 2
    functionLinenumber: 492
    functionLinenumberEnd: 498
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - LOG
    - perf_hash
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, test_hash)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 15
    functionName: ~ConDecLoggerParent()
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConDecLoggerParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: ConDecLogger::ConDecLogger
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConDecLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: ConDecLogger::ConDecLogger
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - ConDecLogger::SetPtr
    linkageType: ''
    returnType: void
    signature: void ConDecLogger(int* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~ConDecLogger()
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConDecLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ConDecLogger::SetPtr
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetPtr(int* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ConDecLogger::SomeMeth
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int SomeMeth(int x) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: CountingDeleter
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountingDeleter(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: operator()(double* ptr) const
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(double* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: CountingDeleterChild
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountingDeleterChild(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/scoped_ptr_unittest.cc:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: '* operator new(size_t size)'
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * operator new(size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/test/scoped_ptr_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: operator delete(void* ptr)
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void operator delete(void* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: OverloadedNewAndDelete::ResetCounters
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResetCounters()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: OverloadedNewAndDelete::new_count
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int new_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: OverloadedNewAndDelete::delete_count
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int delete_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<ConDecLogger>::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - logger
    argTypes:
    - scoped_ptr<ConDecLogger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: PassThru
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<ConDecLogger>::Pass
    linkageType: ''
    returnType: scoped_ptr<ConDecLogger>
    signature: scoped_ptr<ConDecLogger> PassThru(scoped_ptr<ConDecLogger> logger)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - logger
    argTypes:
    - scoped_ptr<ConDecLogger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 84
    functionName: GrabAndDrop
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GrabAndDrop(scoped_ptr<ConDecLogger> logger)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<ConDecLogger>
      Src: /src/brpc/test/scoped_ptr_unittest.cc:89,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - constructed
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: TestReturnOfType
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<ConDecLogger>
    - ConDecLogger::ConDecLogger
    linkageType: ''
    returnType: scoped_ptr<ConDecLogger>
    signature: scoped_ptr<ConDecLogger> TestReturnOfType(int* constructed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<ConDecLogger>::PassAs
      Src: /src/brpc/test/scoped_ptr_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - object
    argTypes:
    - scoped_ptr<ConDecLogger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: UpcastUsingPassAs
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<ConDecLogger>::PassAs
    linkageType: ''
    returnType: scoped_ptr<ConDecLoggerParent>
    signature: "scoped_ptr<ConDecLoggerParent> UpcastUsingPassAs(\n    scoped_ptr<ConDecLogger>
      object)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 15
    functionName: ~ConDecLoggerParent()
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConDecLoggerParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: ConDecLogger::ConDecLogger
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConDecLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: ConDecLogger::ConDecLogger
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 1
    functionsReached:
    - ConDecLogger::SetPtr
    linkageType: ''
    returnType: void
    signature: void ConDecLogger(int* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~ConDecLogger()
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConDecLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ConDecLogger::SetPtr
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetPtr(int* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ConDecLogger::SomeMeth
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int SomeMeth(int x) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: CountingDeleter
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountingDeleter(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: operator()(double* ptr) const
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(double* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: CountingDeleterChild
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountingDeleterChild(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/scoped_ptr_unittest.cc:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: '* operator new(size_t size)'
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * operator new(size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/test/scoped_ptr_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: operator delete(void* ptr)
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void operator delete(void* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: OverloadedNewAndDelete::ResetCounters
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResetCounters()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: OverloadedNewAndDelete::new_count
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int new_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: OverloadedNewAndDelete::delete_count
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int delete_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<ConDecLogger>::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - logger
    argTypes:
    - scoped_ptr<ConDecLogger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: PassThru
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<ConDecLogger>::Pass
    linkageType: ''
    returnType: scoped_ptr<ConDecLogger>
    signature: scoped_ptr<ConDecLogger> PassThru(scoped_ptr<ConDecLogger> logger)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - logger
    argTypes:
    - scoped_ptr<ConDecLogger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 84
    functionName: GrabAndDrop
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GrabAndDrop(scoped_ptr<ConDecLogger> logger)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<ConDecLogger>
      Src: /src/brpc/test/scoped_ptr_unittest.cc:89,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - constructed
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: TestReturnOfType
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<ConDecLogger>
    - ConDecLogger::ConDecLogger
    linkageType: ''
    returnType: scoped_ptr<ConDecLogger>
    signature: scoped_ptr<ConDecLogger> TestReturnOfType(int* constructed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<ConDecLogger>::PassAs
      Src: /src/brpc/test/scoped_ptr_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - object
    argTypes:
    - scoped_ptr<ConDecLogger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: UpcastUsingPassAs
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr<ConDecLogger>::PassAs
    linkageType: ''
    returnType: scoped_ptr<ConDecLoggerParent>
    signature: "scoped_ptr<ConDecLoggerParent> UpcastUsingPassAs(\n    scoped_ptr<ConDecLogger>
      object)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/scoped_ptr_unittest.cc:103,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:108,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:109,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:111,1
    - Dst: scoped_ptr::SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:112,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:113,1
    - Dst: SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:115,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:120,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:121,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:121,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:123,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:124,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:125,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:125,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:129,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:129,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:131,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:133,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:133,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/scoped_ptr_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:136,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:137,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:139,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:141,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:143,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:145,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:149,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:151,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:151,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:152,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:152,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:154,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:155,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:156,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:156,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:157,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:157,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:158,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:159,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:159,1
    - Dst: scoped_ptr::swap
      Src: /src/brpc/test/scoped_ptr_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:162,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:162,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:163,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:163,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:164,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:164,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:165,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 168
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - COMPILE_ASSERT
    - ConDecLogger::ConDecLogger
    - scoped_ptr::release
    - scoped_ptr::swap
    - SomeMeth
    - EXPECT_FALSE
    - scoped_ptr::get
    - EXPECT_EQ
    - scoped_ptr::scoped_ptr
    - scoped_ptr::SomeMeth
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, ScopedPtr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:177,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:177,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:180,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:181,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:181,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:184,1
    - Dst: scoped_ptr::SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:185,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:186,1
    - Dst: SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:188,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:193,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:194,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:194,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:196,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:198,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:199,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:200,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:202,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:208,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:208,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:211,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:212,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:212,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:213,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:215,1
    - Dst: scoped_ptr::SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:216,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:217,1
    - Dst: SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:217,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:219,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:224,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:225,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:225,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:227,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:229,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:230,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:230,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:231,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:233,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:242,1
    - Dst: CountingDeleterChild
      Src: /src/brpc/test/scoped_ptr_unittest.cc:244,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:249,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:253,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:256,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:258,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:259,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:262,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:264,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:265,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:266,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:267,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:268,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:269,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:272,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 278
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ConDecLogger::ConDecLogger
    - CountingDeleterChild
    - scoped_ptr::Pass
    - CountingDeleter
    - EXPECT_FALSE
    - SomeMeth
    - scoped_ptr::get
    - EXPECT_EQ
    - scoped_ptr::scoped_ptr
    - scoped_ptr::SomeMeth
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, ScopedPtrDepthSubtyping)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:286,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:288,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:288,1
    - Dst: SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:294,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:295,1
    - Dst: SomeMeth
      Src: /src/brpc/test/scoped_ptr_unittest.cc:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:297,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:301,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:302,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:302,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:303,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/scoped_ptr_unittest.cc:303,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:304,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:304,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:305,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:306,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:306,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:308,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:308,1
    - Dst: SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:310,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:312,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:314,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:316,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:316,1
    - Dst: SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:318,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:320,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/scoped_ptr_unittest.cc:321,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:322,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:326,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:330,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:331,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:332,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:332,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:333,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:333,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:335,1
    - Dst: SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:337,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:339,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:340,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:341,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:341,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:342,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:343,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:344,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:344,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:345,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:345,1
    - Dst: scoped_ptr::swap
      Src: /src/brpc/test/scoped_ptr_unittest.cc:347,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:348,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:348,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:349,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:349,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:350,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:350,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:351,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:351,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:353,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:356,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:358,1
    - Dst: SetPtr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:362,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:365,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:366,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:369,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:370,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:371,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:372,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:376,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 377
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ConDecLogger::ConDecLogger
    - scoped_ptr::release
    - scoped_ptr::swap
    - scoped_ptr::Pass
    - SomeMeth
    - SetPtr
    - scoped_ptr::get
    - EXPECT_EQ
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, ScopedPtrWithArray)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:382,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:384,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:388,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:391,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:392,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:394,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:394,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:395,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:395,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:396,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:396,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:401,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:403,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:406,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:407,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:409,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:413,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:415,1
    - Dst: GrabAndDrop
      Src: /src/brpc/test/scoped_ptr_unittest.cc:418,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:418,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:419,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:419,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:421,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 422
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ConDecLogger::ConDecLogger
    - GrabAndDrop
    - scoped_ptr::Pass
    - EXPECT_FALSE
    - scoped_ptr::scoped_ptr
    - scoped_ptr::get
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, PassBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:429,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:431,1
    - Dst: PassThru
      Src: /src/brpc/test/scoped_ptr_unittest.cc:433,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:433,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:434,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:434,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:436,1
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:440,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:442,1
    - Dst: PassThru
      Src: /src/brpc/test/scoped_ptr_unittest.cc:445,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:445,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:446,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:446,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:448,1
    - Dst: TestReturnOfType
      Src: /src/brpc/test/scoped_ptr_unittest.cc:453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:455,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 424
    functionDepth: 2
    functionLinenumber: 424
    functionLinenumberEnd: 456
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - PassThru
    - ConDecLogger::ConDecLogger
    - TestReturnOfType
    - scoped_ptr::Pass
    - EXPECT_FALSE
    - scoped_ptr::get
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, ReturnTypeBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConDecLogger::ConDecLogger
      Src: /src/brpc/test/scoped_ptr_unittest.cc:461,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:462,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:463,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:463,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/scoped_ptr_unittest.cc:465,1
    - Dst: UpcastUsingPassAs
      Src: /src/brpc/test/scoped_ptr_unittest.cc:466,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:466,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:467,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:468,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:468,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:469,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:469,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 458
    functionDepth: 1
    functionLinenumber: 458
    functionLinenumberEnd: 472
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - UpcastUsingPassAs
    - ConDecLogger::ConDecLogger
    - scoped_ptr::Pass
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - scoped_ptr::get
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, PassAs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:483,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:484,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:485,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:485,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:487,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:493,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:494,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:494,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:495,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/scoped_ptr_unittest.cc:495,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:496,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:496,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:497,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:498,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:498,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:499,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:501,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:502,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:503,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:506,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/scoped_ptr_unittest.cc:506,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:508,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:517,1
    - Dst: scoped_ptr::get_deleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:519,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:522,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:523,1
    - Dst: scoped_ptr::get_deleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:524,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:525,1
    - Dst: scoped_ptr::get_deleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:528,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:528,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:529,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:533,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:534,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:542,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:545,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:546,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:547,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:552,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:553,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:554,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:556,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:557,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:562,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:567,1
    - Dst: CountingDeleter
      Src: /src/brpc/test/scoped_ptr_unittest.cc:569,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:570,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:570,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:571,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:571,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/scoped_ptr_unittest.cc:573,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:575,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:575,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:576,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:577,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:577,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:578,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:578,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:579,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:579,1
    - Dst: scoped_ptr::swap
      Src: /src/brpc/test/scoped_ptr_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:582,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:582,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:583,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:583,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:584,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:584,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:585,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:585,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 587
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::release
    - scoped_ptr::swap
    - CountingDeleter
    - scoped_ptr::Pass
    - EXPECT_FALSE
    - scoped_ptr::get_deleter
    - scoped_ptr::get
    - EXPECT_EQ
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, CustomDeleter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OverloadedNewAndDelete::ResetCounters
      Src: /src/brpc/test/scoped_ptr_unittest.cc:594,1
    - Dst: OverloadedNewAndDelete::OverloadedNewAndDelete
      Src: /src/brpc/test/scoped_ptr_unittest.cc:595,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_ptr_unittest.cc:596,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/scoped_ptr_unittest.cc:596,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/test/scoped_ptr_unittest.cc:598,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:600,1
    - Dst: OverloadedNewAndDelete::delete_count
      Src: /src/brpc/test/scoped_ptr_unittest.cc:600,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_ptr_unittest.cc:601,1
    - Dst: OverloadedNewAndDelete::new_count
      Src: /src/brpc/test/scoped_ptr_unittest.cc:601,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 602
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - OverloadedNewAndDelete::new_count
    - OverloadedNewAndDelete::OverloadedNewAndDelete
    - scoped_ptr::Pass
    - OverloadedNewAndDelete::ResetCounters
    - OverloadedNewAndDelete::delete_count
    - scoped_ptr::get
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedPtrTest, OverloadedNewAndDelete)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::Adder::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~Adder()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Adder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - list
    - doomed
    argTypes:
    - ObserverList<Foo>*
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Disrupter::Disrupter
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Disrupter(ObserverList<Foo>* list, Foo* doomed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~Disrupter()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Disrupter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::Disrupter::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - RemoveObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - observer_list
    argTypes:
    - ObserverListType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: butil::AddInObserve::AddInObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInObserve(ObserverListType* observer_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: butil::AddInObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:74,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:78,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:79,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:83,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:84,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:85,1
    - Dst: ObserverList::RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:88,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 97
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::RemoveObserver
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:104,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:105,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:112,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 117
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, Existing)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 122
    functionName: butil::AddInClearObserve::AddInClearObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInClearObserve(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/test/observer_list_unittest.cc:125,1
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: butil::AddInClearObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    - Clear
    linkageType: ''
    returnType: void
    signature: void Observe(int /* x */)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: butil::AddInClearObserve::added
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: '& adder() const'
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Adder
    signature: Adder & adder() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:141,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:144,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ObserverList::ObserverList
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyAll)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:156,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 162
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyExistingOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: butil::ListDestructor::ListDestructor
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListDestructor(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 167
    functionName: ~ListDestructor()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ListDestructor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: butil::ListDestructor::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList<Foo>::ObserverList<Foo>
      Src: /src/brpc/test/observer_list_unittest.cc:179,1
    - Dst: ObserverList*::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:181,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 186
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList*::AddObserver
    - ObserverList<Foo>::ObserverList<Foo>
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, IteratorOutlivesList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::Adder::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~Adder()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Adder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - list
    - doomed
    argTypes:
    - ObserverList<Foo>*
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Disrupter::Disrupter
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Disrupter(ObserverList<Foo>* list, Foo* doomed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~Disrupter()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Disrupter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::Disrupter::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - RemoveObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - observer_list
    argTypes:
    - ObserverListType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: butil::AddInObserve::AddInObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInObserve(ObserverListType* observer_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: butil::AddInObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:74,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:78,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:79,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:83,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:84,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:85,1
    - Dst: ObserverList::RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:88,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 97
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::RemoveObserver
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:104,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:105,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:112,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 117
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, Existing)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 122
    functionName: butil::AddInClearObserve::AddInClearObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInClearObserve(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/test/observer_list_unittest.cc:125,1
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: butil::AddInClearObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    - Clear
    linkageType: ''
    returnType: void
    signature: void Observe(int /* x */)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: butil::AddInClearObserve::added
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: '& adder() const'
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Adder
    signature: Adder & adder() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:141,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:144,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ObserverList::ObserverList
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyAll)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:156,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 162
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyExistingOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: butil::ListDestructor::ListDestructor
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListDestructor(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 167
    functionName: ~ListDestructor()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ListDestructor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: butil::ListDestructor::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList<Foo>::ObserverList<Foo>
      Src: /src/brpc/test/observer_list_unittest.cc:179,1
    - Dst: ObserverList*::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:181,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 186
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList*::AddObserver
    - ObserverList<Foo>::ObserverList<Foo>
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, IteratorOutlivesList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::Adder::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~Adder()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Adder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - list
    - doomed
    argTypes:
    - ObserverList<Foo>*
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Disrupter::Disrupter
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Disrupter(ObserverList<Foo>* list, Foo* doomed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~Disrupter()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Disrupter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::Disrupter::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - RemoveObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - observer_list
    argTypes:
    - ObserverListType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: butil::AddInObserve::AddInObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInObserve(ObserverListType* observer_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: butil::AddInObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:74,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:78,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:79,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:83,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:84,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:85,1
    - Dst: ObserverList::RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:88,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 97
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::RemoveObserver
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:104,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:105,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:112,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 117
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, Existing)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 122
    functionName: butil::AddInClearObserve::AddInClearObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInClearObserve(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/test/observer_list_unittest.cc:125,1
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: butil::AddInClearObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    - Clear
    linkageType: ''
    returnType: void
    signature: void Observe(int /* x */)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: butil::AddInClearObserve::added
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: '& adder() const'
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Adder
    signature: Adder & adder() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:141,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:144,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ObserverList::ObserverList
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyAll)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:156,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 162
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyExistingOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: butil::ListDestructor::ListDestructor
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListDestructor(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 167
    functionName: ~ListDestructor()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ListDestructor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: butil::ListDestructor::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList<Foo>::ObserverList<Foo>
      Src: /src/brpc/test/observer_list_unittest.cc:179,1
    - Dst: ObserverList*::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:181,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 186
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList*::AddObserver
    - ObserverList<Foo>::ObserverList<Foo>
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, IteratorOutlivesList)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - scaler
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: butil::Adder::Adder
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder(int scaler)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::Adder::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~Adder()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Adder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - list
    - doomed
    argTypes:
    - ObserverList<Foo>*
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::Disrupter::Disrupter
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Disrupter(ObserverList<Foo>* list, Foo* doomed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~Disrupter()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Disrupter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::Disrupter::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - RemoveObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - observer_list
    argTypes:
    - ObserverListType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: butil::AddInObserve::AddInObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInObserve(ObserverListType* observer_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: butil::AddInObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:74,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:78,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:79,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:81,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:83,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:84,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:85,1
    - Dst: ObserverList::RemoveObserver
      Src: /src/brpc/test/observer_list_unittest.cc:88,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 97
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::RemoveObserver
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, BasicTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:104,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:105,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:112,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 117
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - ObserverList::AddObserver
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, Existing)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 122
    functionName: butil::AddInClearObserve::AddInClearObserve
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddInClearObserve(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/test/observer_list_unittest.cc:125,1
    - Dst: AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: butil::AddInClearObserve::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - AddObserver
    - Clear
    linkageType: ''
    returnType: void
    signature: void Observe(int /* x */)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: butil::AddInClearObserve::added
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool added() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: '& adder() const'
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Adder
    signature: Adder & adder() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::ObserverList
      Src: /src/brpc/test/observer_list_unittest.cc:141,1
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:144,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ObserverList::ObserverList
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyAll)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:156,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: AddInClearObserve::added
      Src: /src/brpc/test/observer_list_unittest.cc:159,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    - Dst: AddInClearObserve::adder
      Src: /src/brpc/test/observer_list_unittest.cc:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 162
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - AddInClearObserve::added
    - ObserverList::AddObserver
    - AddInClearObserve::adder
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, ClearNotifyExistingOnly)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - list
    argTypes:
    - ObserverList<Foo>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: butil::ListDestructor::ListDestructor
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListDestructor(ObserverList<Foo>* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 167
    functionName: ~ListDestructor()
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ListDestructor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: butil::ListDestructor::Observe
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Observe(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverList<Foo>::ObserverList<Foo>
      Src: /src/brpc/test/observer_list_unittest.cc:179,1
    - Dst: ObserverList*::AddObserver
      Src: /src/brpc/test/observer_list_unittest.cc:181,1
    - Dst: FOR_EACH_OBSERVER
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    - Dst: Observe
      Src: /src/brpc/test/observer_list_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 186
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/observer_list_unittest.cc
    functionUses: 0
    functionsReached:
    - ObserverList*::AddObserver
    - ObserverList<Foo>::ObserverList<Foo>
    - Observe
    - FOR_EACH_OBSERVER
    linkageType: ''
    returnType: void
    signature: void TEST(ObserverListTest, IteratorOutlivesList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:37,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:38,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:38,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:39,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:39,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:40,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:40,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:41,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:41,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:42,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:43,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:45,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:47,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:47,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:48,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:48,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:49,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:49,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:50,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:50,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:51,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:51,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:52,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:53,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:56,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:58,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:58,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:59,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:59,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:60,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:60,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:61,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:61,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:62,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:62,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:63,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:63,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:64,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:64,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:65,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:65,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:66,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:66,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:67,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:70,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:72,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:72,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:73,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:73,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:74,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:74,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:75,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:75,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:76,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:76,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:77,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:79,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:81,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:81,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:82,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:82,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:83,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:84,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:84,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:85,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:85,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:86,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:86,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:87,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 53
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 91
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - ASSERT_EQ
    - bthread_usleep
    - brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    - brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    linkageType: ''
    returnType: void
    signature: void TEST(TimeoutConcurrencyLimiterTest, AddSample)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:97,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:98,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:99,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:100,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:101,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 105
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    - brpc::policy::TimeoutConcurrencyLimiter::OnResponded
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void TEST(TimeoutConcurrencyLimiterTest, OnResponded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:111,1
    - Dst: brpc::AdaptiveMaxConcurrency::type
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:112,1
    - Dst: brpc::AdaptiveMaxConcurrency::value
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:112,1
    - Dst: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:117,1
    - Dst: brpc::AdaptiveMaxConcurrency::type
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:118,1
    - Dst: brpc::AdaptiveMaxConcurrency::value
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:118,1
    - Dst: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:123,1
    - Dst: brpc::AdaptiveMaxConcurrency::type
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:124,1
    - Dst: brpc::AdaptiveMaxConcurrency::value
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:124,1
    - Dst: static_cast<brpc::TimeoutConcurrencyConf>
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 129
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_timeout_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AdaptiveMaxConcurrency::type
    - ASSERT_EQ
    - brpc::AdaptiveMaxConcurrency::value
    - brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    - static_cast<brpc::TimeoutConcurrencyConf>
    linkageType: ''
    returnType: void
    signature: void TEST(TimeoutConcurrencyLimiterTest, AdaptiveMaxConcurrencyTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:26,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 32
    functionName: sem_waiter
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_sem_wait
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sem_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:35,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 41
    functionName: sem_poster
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_sem_post
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sem_poster(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:45,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:46,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:47,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:48,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:52,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:53,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:54,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:55,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:57,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 58
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_wait
    - bthread_sem_init
    - bthread_sem_post
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:64,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:69,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:72,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:72,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:75,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:81,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:81,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - bthread_sem_destroy
    - bthread_sem_init
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, used_in_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:86,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: do_timedwait
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_sem_timedwait
    linkageType: ''
    returnType: void
    signature: void * do_timedwait(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:92,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:94,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:95,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:96,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_init
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, timedwait)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:107,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: do_trywait
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_sem_trywait
    linkageType: ''
    returnType: void
    signature: void * do_trywait(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:113,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:115,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:116,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:117,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:118,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:120,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:123,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:124,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:126,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:127,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:129,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 130
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_sem_trywait
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_init
    - bthread_sem_post
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, trywait)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:135,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:135,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - sem
    - sleep_us
    argTypes:
    - bthread_sem_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: wait_op
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_sem_wait
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void wait_op(bthread_sem_t* sem, int64_t sleep_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:142,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:142,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_sem_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: post_op
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_sem_post
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void post_op(bthread_sem_t* rw, int64_t sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::op
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 161
    functionName: loop_until_stopped
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::op
    linkageType: ''
    returnType: void
    signature: void * loop_until_stopped(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:166,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:166,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:176,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:178,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:181,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:185,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:185,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:185,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:190,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:195,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:195,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:195,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:198,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:204,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:204,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 205
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_setconcurrency
    - bthread_start_urgent
    - pthread_join
    - std::vector::back
    - pthread_create
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_init
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:26,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 32
    functionName: sem_waiter
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_sem_wait
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sem_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:35,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 41
    functionName: sem_poster
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_sem_post
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sem_poster(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:45,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:46,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:47,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:48,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:52,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:53,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:54,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:55,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:57,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 58
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_wait
    - bthread_sem_init
    - bthread_sem_post
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:64,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:69,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:72,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:72,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:75,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:81,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:81,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - bthread_sem_destroy
    - bthread_sem_init
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, used_in_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:86,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: do_timedwait
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_sem_timedwait
    linkageType: ''
    returnType: void
    signature: void * do_timedwait(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:92,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:94,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:95,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:96,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_init
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, timedwait)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:107,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: do_trywait
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_sem_trywait
    linkageType: ''
    returnType: void
    signature: void * do_trywait(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:113,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:115,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:116,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:117,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:118,1
    - Dst: bthread_sem_trywait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:120,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:123,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:124,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:126,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:127,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:129,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 130
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_sem_trywait
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_init
    - bthread_sem_post
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, trywait)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:135,1
    - Dst: bthread_sem_wait
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:135,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - sem
    - sleep_us
    argTypes:
    - bthread_sem_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: wait_op
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_sem_wait
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void wait_op(bthread_sem_t* sem, int64_t sleep_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:142,1
    - Dst: bthread_sem_post
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:142,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_sem_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: post_op
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_sem_post
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void post_op(bthread_sem_t* rw, int64_t sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::op
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 161
    functionName: loop_until_stopped
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::op
    linkageType: ''
    returnType: void
    signature: void * loop_until_stopped(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:166,1
    - Dst: bthread_sem_init
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:166,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:176,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:178,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:181,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:185,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:185,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:185,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:190,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:195,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:195,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:195,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:198,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:204,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/test/bthread_semaphore_unittest.cpp:204,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 205
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_semaphore_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_setconcurrency
    - bthread_start_urgent
    - pthread_join
    - std::vector::back
    - pthread_create
    - bthread_join
    - bthread_sem_destroy
    - bthread_sem_init
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: void TEST(SemaphoreTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Arg*::num_sig::fetch_sub
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:33,1
    - Dst: Arg*::event::signal
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 36
    functionName: signaler
    functionSourceFile: /src/brpc/test/bthread_countdown_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - Arg*::event::signal
    - Arg*::num_sig::fetch_sub
    linkageType: ''
    returnType: void
    signature: void *signaler(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Arg::event::reset
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:46,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:46,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:47,1
    - Dst: Arg::event::wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:50,1
    - Dst: Arg::num_sig::load
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:50,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:52,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:53,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 55
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_countdown_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - Arg::num_sig::load
    - bthread_start_urgent
    - Arg::event::reset
    - Arg::event::wait
    - bthread_join
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(CountdonwEventTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::CountdownEvent::CountdownEvent
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:58,1
    - Dst: bthread::CountdownEvent::timed_wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:59,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:60,1
    - Dst: bthread::CountdownEvent::signal
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:61,1
    - Dst: bthread::CountdownEvent::timed_wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:62,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:63,1
    - Dst: bthread::CountdownEvent::CountdownEvent
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:64,1
    - Dst: bthread::CountdownEvent::signal
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:65,1
    - Dst: bthread::CountdownEvent::timed_wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:66,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 68
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_countdown_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::CountdownEvent::timed_wait
    - bthread::CountdownEvent::CountdownEvent
    - bthread::CountdownEvent::signal
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TEST(CountdonwEventTest, timed_wait)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Arg*::num_sig::fetch_sub
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:33,1
    - Dst: Arg*::event::signal
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 36
    functionName: signaler
    functionSourceFile: /src/brpc/test/bthread_countdown_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - Arg*::event::signal
    - Arg*::num_sig::fetch_sub
    linkageType: ''
    returnType: void
    signature: void *signaler(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Arg::event::reset
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:46,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:46,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:47,1
    - Dst: Arg::event::wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:50,1
    - Dst: Arg::num_sig::load
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:50,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:52,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:53,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 55
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_countdown_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - Arg::num_sig::load
    - bthread_start_urgent
    - Arg::event::reset
    - Arg::event::wait
    - bthread_join
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(CountdonwEventTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::CountdownEvent::CountdownEvent
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:58,1
    - Dst: bthread::CountdownEvent::timed_wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:59,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:60,1
    - Dst: bthread::CountdownEvent::signal
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:61,1
    - Dst: bthread::CountdownEvent::timed_wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:62,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:63,1
    - Dst: bthread::CountdownEvent::CountdownEvent
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:64,1
    - Dst: bthread::CountdownEvent::signal
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:65,1
    - Dst: bthread::CountdownEvent::timed_wait
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:66,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_countdown_event_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 68
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_countdown_event_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::CountdownEvent::timed_wait
    - bthread::CountdownEvent::CountdownEvent
    - bthread::CountdownEvent::signal
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TEST(CountdonwEventTest, timed_wait)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: HttpParserTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: HttpParserTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:38,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:39,1
    - Dst: http_parser_init
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:42,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:44,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 48
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - http_parser_init
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpParserTest, init_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: on_message_begin
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int on_message_begin(http_parser *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:56,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: on_url
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - std::string
    linkageType: ''
    returnType: int
    signature: int on_url(http_parser *, const char *at, const size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: on_headers_complete
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int on_headers_complete(http_parser *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: on_message_complete
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int on_message_complete(http_parser *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:71,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: on_header_field
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - std::string
    linkageType: ''
    returnType: int
    signature: int on_header_field(http_parser *, const char *at, const size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:76,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: on_header_value
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - std::string
    linkageType: ''
    returnType: int
    signature: int on_header_value(http_parser *, const char *at, const size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: on_body
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - std::string
    linkageType: ''
    returnType: int
    signature: int on_body(http_parser *, const char *at, const size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: http_parser_init
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:100,1
    - Dst: memset
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:110,1
    - Dst: http_parser_execute
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:110,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 111
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - http_parser_init
    - http_parser_execute
    - memset
    - LOG
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpParserTest, http_example)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:118,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:122,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:126,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:130,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:134,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:138,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:142,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:146,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:150,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:154,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:158,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:162,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:166,1
    - Dst: brpc::AppendFileName
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_parser_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 171
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_parser_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AppendFileName
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpParserTest, append_filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: WindowTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_window_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: WindowTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_window_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_window_unittest.cpp:40,1
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_window_unittest.cpp:47,1
    - Dst: bvar::WindowEx::WindowEx
      Src: /src/brpc/test/bvar_window_unittest.cpp:49,1
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_window_unittest.cpp:52,1
    - Dst: bvar::WindowEx::WindowEx
      Src: /src/brpc/test/bvar_window_unittest.cpp:54,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_window_unittest.cpp:57,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_window_unittest.cpp:73,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_window_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_window_unittest.cpp:87,1
    - Dst: bvar::Window::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:87,1
    - Dst: bvar::WindowEx::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_window_unittest.cpp:88,1
    - Dst: bvar::PerSecond::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:88,1
    - Dst: bvar::PerSecondEx::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_window_unittest.cpp:90,1
    - Dst: bvar::Window::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:90,1
    - Dst: bvar::WindowEx::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_window_unittest.cpp:91,1
    - Dst: bvar::Window::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:91,1
    - Dst: bvar::WindowEx::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:91,1
    - Dst: bvar::Window::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:93,1
    - Dst: bvar::WindowEx::get_value
      Src: /src/brpc/test/bvar_window_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_window_unittest.cpp:95,1
    - Dst: bvar::Stat::get_average_int
      Src: /src/brpc/test/bvar_window_unittest.cpp:95,1
    - Dst: bvar::Stat::get_average_int
      Src: /src/brpc/test/bvar_window_unittest.cpp:95,1
    - Dst: ASSERT_DOUBLE_EQ
      Src: /src/brpc/test/bvar_window_unittest.cpp:96,1
    - Dst: bvar::Stat::get_average_double
      Src: /src/brpc/test/bvar_window_unittest.cpp:96,1
    - Dst: bvar::Stat::get_average_double
      Src: /src/brpc/test/bvar_window_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 97
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_window_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_DOUBLE_EQ
    - bvar::WindowEx::WindowEx
    - bvar::Adder::Adder
    - bvar::WindowEx::get_value
    - bvar::PerSecond::get_value
    - bvar::PerSecondEx::get_value
    - bvar::Stat::get_average_int
    - bvar::Miner::Miner
    - bvar::IntRecorder::IntRecorder
    - bvar::Stat::get_average_double
    - bvar::Window::get_value
    - bvar::Maxer::Maxer
    - sleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(WindowTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/test/scope_guard_unittest.cpp:25,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scope_guard_unittest.cpp:29,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scope_guard_unittest.cpp:37,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scope_guard_unittest.cpp:48,1
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/test/scope_guard_unittest.cpp:52,1
    - Dst: auto::dismiss
      Src: /src/brpc/test/scope_guard_unittest.cpp:55,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/scope_guard_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 58
    functionName: TEST
    functionSourceFile: /src/brpc/test/scope_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - auto::dismiss
    - ASSERT_FALSE
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGuardTest, sanity)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:30,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:30,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:31,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:31,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:32,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:32,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:33,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:33,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:36,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:36,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:42,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:43,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:44,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:44,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:46,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:46,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:47,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:48,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:48,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:49,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:50,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:53,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:54,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:57,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:60,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:62,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:64,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:65,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:65,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:66,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:66,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:67,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:71,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:71,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:77,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:78,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:79,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:79,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:81,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:81,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:82,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:83,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:83,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:84,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:84,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:85,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:88,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:89,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:89,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:92,1
    - Dst: butil::BoundedQueue::pop_bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:93,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:95,1
    - Dst: butil::BoundedQueue::pop_bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:97,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:99,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:99,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:100,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:100,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:101,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:102,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:102,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 67
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 103
    functionName: TEST
    functionSourceFile: /src/brpc/test/bounded_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::BoundedQueue::pop_bottom
    - butil::BoundedQueue::top
    - butil::BoundedQueue::empty
    - butil::BoundedQueue::push
    - ASSERT_FALSE
    - butil::BoundedQueue::push_top
    - butil::BoundedQueue::bottom
    - butil::BoundedQueue::pop
    - butil::BoundedQueue::full
    - butil::BoundedQueue::size
    linkageType: ''
    returnType: void
    signature: void TEST(BoundedQueueTest, sanity)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:30,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:30,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:31,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:31,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:32,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:32,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:33,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:33,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:36,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:36,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:42,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:43,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:44,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:44,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:46,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:46,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:47,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:48,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:48,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:49,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:50,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:53,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:54,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:57,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:60,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:62,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:64,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:65,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:65,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:66,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:66,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:67,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:71,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:71,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:77,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:78,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:79,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:79,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:81,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/test/bounded_queue_unittest.cc:81,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:82,1
    - Dst: butil::BoundedQueue::push_top
      Src: /src/brpc/test/bounded_queue_unittest.cc:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:83,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:83,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:84,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:84,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:85,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:88,1
    - Dst: butil::BoundedQueue::top
      Src: /src/brpc/test/bounded_queue_unittest.cc:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:89,1
    - Dst: butil::BoundedQueue::bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:89,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:92,1
    - Dst: butil::BoundedQueue::pop_bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:93,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:95,1
    - Dst: butil::BoundedQueue::pop_bottom
      Src: /src/brpc/test/bounded_queue_unittest.cc:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:97,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bounded_queue_unittest.cc:99,1
    - Dst: butil::BoundedQueue::size
      Src: /src/brpc/test/bounded_queue_unittest.cc:99,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bounded_queue_unittest.cc:100,1
    - Dst: butil::BoundedQueue::empty
      Src: /src/brpc/test/bounded_queue_unittest.cc:100,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:101,1
    - Dst: butil::BoundedQueue::full
      Src: /src/brpc/test/bounded_queue_unittest.cc:101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bounded_queue_unittest.cc:102,1
    - Dst: butil::BoundedQueue::pop
      Src: /src/brpc/test/bounded_queue_unittest.cc:102,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 67
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 103
    functionName: TEST
    functionSourceFile: /src/brpc/test/bounded_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::BoundedQueue::pop_bottom
    - butil::BoundedQueue::top
    - butil::BoundedQueue::empty
    - butil::BoundedQueue::push
    - ASSERT_FALSE
    - butil::BoundedQueue::push_top
    - butil::BoundedQueue::bottom
    - butil::BoundedQueue::pop
    - butil::BoundedQueue::full
    - butil::BoundedQueue::size
    linkageType: ''
    returnType: void
    signature: void TEST(BoundedQueueTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:34,1
    - Dst: time
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: initialize_random
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void initialize_random()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:34,1
    - Dst: time
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: initialize_random
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void initialize_random()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:69,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:70,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - req_num
    - error_percent
    - circuit_breaker
    argTypes:
    - int
    - int
    - brpc::CircuitBreaker*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 84
    functionName: FeedbackControl
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FeedbackControl(int req_num, int error_percent,\n                 brpc::CircuitBreaker*
      circuit_breaker)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: CircuitBreakerTest::CircuitBreakerTest
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void CircuitBreakerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: ~CircuitBreakerTest()
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CircuitBreakerTest()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:104,1
    - Dst: rand
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:107,1
    - Dst: FeedbackControl*::_circuit_breaker::OnCallEnd
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:108,1
    - Dst: FeedbackControl*::_circuit_breaker::OnCallEnd
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:110,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 120
    functionName: CircuitBreakerTest::feed_back_thread
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - rand
    - FeedbackControl*::_circuit_breaker::OnCallEnd
    - static_cast<FeedbackControl*>
    linkageType: ''
    returnType: void
    signature: void * feed_back_thread(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<pthread_t>*::clear
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:125,1
    - Dst: std::vector<std::unique_ptr<FeedbackControl>>*::clear
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:126,1
    - Dst: FeedbackControl::FeedbackControl
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:130,1
    - Dst: std::vector<std::unique_ptr<FeedbackControl>>*::emplace_back
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:131,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:132,1
    - Dst: std::vector<pthread_t>*::push_back
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - thread_list
    - fc_list
    - error_percent
    argTypes:
    - std::vector<pthread_t>*
    - std::vector<std::unique_ptr<FeedbackControl>>*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 135
    functionName: CircuitBreakerTest::StartFeedbackThread
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<std::unique_ptr<FeedbackControl>>*::emplace_back
    - std::vector<pthread_t>*::clear
    - pthread_create
    - std::vector<pthread_t>*::push_back
    - FeedbackControl::FeedbackControl
    - std::vector<std::unique_ptr<FeedbackControl>>*::clear
    linkageType: ''
    returnType: void
    signature: "void StartFeedbackThread(std::vector<pthread_t>* thread_list,\n                             std::vector<std::unique_ptr<FeedbackControl>>*
      fc_list,\n                             int error_percent)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:146,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:146,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - pthread_join
    - static_cast<FeedbackControl*>
    - StartFeedbackThread
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(CircuitBreakerTest, should_not_isolate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:159,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:159,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:160,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:161,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 164
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_GT
    - pthread_join
    - static_cast<FeedbackControl*>
    - EXPECT_FALSE
    - StartFeedbackThread
    linkageType: ''
    returnType: void
    signature: void TEST_F(CircuitBreakerTest, should_isolate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:173,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:173,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:174,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:175,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:176,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:179,1
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:185,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:185,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:186,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:187,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:188,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:189,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:196,1
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:201,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:201,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:202,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:203,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:204,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:217,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 218
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Reset
    - EXPECT_GT
    - pthread_join
    - static_cast<FeedbackControl*>
    - EXPECT_LE
    - EXPECT_FALSE
    - StartFeedbackThread
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(CircuitBreakerTest, should_isolate_with_half_open)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:226,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:226,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:228,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:229,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:232,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:232,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:234,1
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:238,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:238,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:240,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:241,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:244,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:244,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:246,1
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:250,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:250,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:251,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:252,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:253,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:256,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:256,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:258,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:259,1
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:263,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:263,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:264,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:265,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:266,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:267,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:269,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:269,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 271
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Reset
    - EXPECT_GT
    - pthread_join
    - bthread::TaskGroup::usleep
    - static_cast<FeedbackControl*>
    - EXPECT_LE
    - EXPECT_FALSE
    - StartFeedbackThread
    - EXPECT_EQ
    - isolation_duration_ms
    linkageType: ''
    returnType: void
    signature: void TEST_F(CircuitBreakerTest, isolation_duration_grow_and_reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:276,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:281,1
    - Dst: StartFeedbackThread
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:285,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:285,1
    - Dst: static_cast<FeedbackControl*>
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:286,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:287,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:288,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:291,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/test/brpc_circuit_breaker_unittest.cpp:291,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 293
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_circuit_breaker_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Reset
    - EXPECT_GT
    - pthread_join
    - static_cast<FeedbackControl*>
    - EXPECT_LE
    - EXPECT_FALSE
    - StartFeedbackThread
    - EXPECT_EQ
    - ASSERT_LT
    - isolation_duration_ms
    linkageType: ''
    returnType: void
    signature: void TEST_F(CircuitBreakerTest, maximum_isolation_duration)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/test_file_util_linux.cc:16,1
    - Dst: butil::value
      Src: /src/brpc/test/test_file_util_linux.cc:16,1
    - Dst: ScopedFD::is_valid
      Src: /src/brpc/test/test_file_util_linux.cc:17,1
    - Dst: fdatasync
      Src: /src/brpc/test/test_file_util_linux.cc:19,1
    - Dst: ScopedFD::get
      Src: /src/brpc/test/test_file_util_linux.cc:19,1
    - Dst: posix_fadvise
      Src: /src/brpc/test/test_file_util_linux.cc:21,1
    - Dst: ScopedFD::get
      Src: /src/brpc/test/test_file_util_linux.cc:21,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' file'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 24
    functionName: butil::EvictFileFromSystemCache
    functionSourceFile: /src/brpc/test/test_file_util_linux.cc
    functionUses: 0
    functionsReached:
    - ScopedFD::get
    - butil::value
    - open
    - ScopedFD::is_valid
    - posix_fadvise
    - fdatasync
    linkageType: ''
    returnType: bool
    signature: bool EvictFileFromSystemCache(const FilePath& file)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/test_file_util_linux.cc:16,1
    - Dst: butil::value
      Src: /src/brpc/test/test_file_util_linux.cc:16,1
    - Dst: ScopedFD::is_valid
      Src: /src/brpc/test/test_file_util_linux.cc:17,1
    - Dst: fdatasync
      Src: /src/brpc/test/test_file_util_linux.cc:19,1
    - Dst: ScopedFD::get
      Src: /src/brpc/test/test_file_util_linux.cc:19,1
    - Dst: posix_fadvise
      Src: /src/brpc/test/test_file_util_linux.cc:21,1
    - Dst: ScopedFD::get
      Src: /src/brpc/test/test_file_util_linux.cc:21,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' file'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 24
    functionName: butil::EvictFileFromSystemCache
    functionSourceFile: /src/brpc/test/test_file_util_linux.cc
    functionUses: 0
    functionsReached:
    - ScopedFD::get
    - butil::value
    - open
    - ScopedFD::is_valid
    - posix_fadvise
    - fdatasync
    linkageType: ''
    returnType: bool
    signature: bool EvictFileFromSystemCache(const FilePath& file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_empty
      Src: /src/brpc/test/safe_numerics_unittest.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: ResetFloatingPointUnit
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - _mm_empty
    linkageType: ''
    returnType: void
    signature: void ResetFloatingPointUnit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expected
    - ','
    - actual
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: TEST_EXPECTED_VALIDITY
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEST_EXPECTED_VALIDITY(expected, actual)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expected
    - ','
    - actual
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: TEST_EXPECTED_VALUE
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEST_EXPECTED_VALUE(expected, actual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:58,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:59,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:59,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:60,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:61,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:61,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:62,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:62,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:64,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:65,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:65,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:66,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:67,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:67,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:68,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:70,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:70,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:70,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:72,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:73,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:73,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:74,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:75,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:75,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:76,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:78,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:78,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:78,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:79,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:81,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:81,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:81,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:83,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:84,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:84,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:86,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:87,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:87,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:88,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:88,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:91,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:91,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:92,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:92,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:93,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:93,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:94,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:94,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:95,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:95,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:95,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:96,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:96,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:96,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:98,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:98,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:98,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:99,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:99,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:100,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:100,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 24
    argCount: 2
    argNames:
    - dst
    - line
    argTypes:
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 103
    functionName: TestSpecializedArithmetic
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_EXPECTED_VALUE
    - brpc::GetJsService::jquery_min
    - CheckedNumeric<Dst>
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: "void TestSpecializedArithmetic(\n    const char* dst,\n    int line,\n
      \   typename enable_if<\n        numeric_limits<Dst>::is_integer&& numeric_limits<Dst>::is_signed,\n
      \       int>::type = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:114,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:114,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:114,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:115,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:116,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:116,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:117,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:118,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:118,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:119,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:120,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:120,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:121,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:121,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:121,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:122,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:122,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:125,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:125,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:126,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:126,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:127,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:127,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:128,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:128,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:128,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:129,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:129,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:129,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:131,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:131,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:131,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:132,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:132,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:133,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:133,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:135,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 2
    argNames:
    - dst
    - line
    argTypes:
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 136
    functionName: TestSpecializedArithmetic
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_EXPECTED_VALUE
    - brpc::GetJsService::jquery_min
    - CheckedNumeric<Dst>
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: "void TestSpecializedArithmetic(\n    const char* dst,\n    int line,\n
      \   typename enable_if<\n        numeric_limits<Dst>::is_integer && !numeric_limits<Dst>::is_signed,\n
      \       int>::type = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:145,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:145,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:145,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:147,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:148,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:148,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:149,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:149,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:151,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:152,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:152,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:153,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:154,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:154,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:155,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:157,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:157,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:157,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:159,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:161,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:161,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:161,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:162,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:164,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:164,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:164,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:166,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:167,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:167,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:169,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:170,1
    - Dst: static_cast<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:170,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 2
    argNames:
    - dst
    - line
    argTypes:
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 171
    functionName: TestSpecializedArithmetic
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_EXPECTED_VALUE
    - brpc::GetJsService::jquery_min
    - static_cast<Dst>
    - CheckedNumeric<Dst>
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: "void TestSpecializedArithmetic(\n    const char* dst,\n    int line,\n
      \   typename enable_if<numeric_limits<Dst>::is_iec559, int>::type = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:178,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:179,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:180,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:180,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:180,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:182,1
    - Dst: static_cast<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:182,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:183,1
    - Dst: static_cast<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:183,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:184,1
    - Dst: static_cast<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:184,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:185,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:185,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:185,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:186,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:189,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:189,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:189,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:190,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:190,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:190,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:191,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:191,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:191,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:192,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:192,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:192,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:193,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:193,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:194,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:194,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:195,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:195,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:196,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:196,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:197,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:197,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:198,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:198,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:199,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:199,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:200,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:200,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:202,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:204,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:206,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:208,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:211,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:211,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:212,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:212,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:213,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:213,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:214,1
    - Dst: static_cast<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:214,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:214,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:215,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:215,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:218,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:218,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:219,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:219,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:220,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:220,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:221,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:221,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:224,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:224,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:225,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:225,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:226,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:226,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:227,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:228,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:228,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:229,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:230,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:230,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:230,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:233,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:233,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:234,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:234,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:235,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:235,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:236,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:237,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:237,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:240,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:240,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:241,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:241,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:242,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:242,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:243,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:244,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:244,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:244,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:247,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:247,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:248,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:248,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:249,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:249,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:250,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:250,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:251,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:251,1
    - Dst: CheckedNumeric<Dst>
      Src: /src/brpc/test/safe_numerics_unittest.cc:252,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:252,1
    - Dst: TestSpecializedArithmetic
      Src: /src/brpc/test/safe_numerics_unittest.cc:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 50
    argCount: 2
    argNames:
    - dst
    - line
    argTypes:
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 255
    functionName: TestArithmetic
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_EXPECTED_VALUE
    - TestSpecializedArithmetic
    - brpc::GetJsService::jquery_min
    - static_cast<Dst>
    - CheckedNumeric<Dst>
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: void TestArithmetic(const char* dst, int line)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - Dst
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 259
    functionName: TEST_ARITHMETIC
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEST_ARITHMETIC(Dst)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TEST_ARITHMETIC
      Src: /src/brpc/test/safe_numerics_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 265
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_ARITHMETIC
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, SignedIntegerMath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TEST_ARITHMETIC
      Src: /src/brpc/test/safe_numerics_unittest.cc:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_ARITHMETIC
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, UnsignedIntegerMath)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 277
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, FloatingPointMath)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expected
    - ','
    - actual
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 297
    functionName: TEST_EXPECTED_RANGE
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEST_EXPECTED_RANGE(expected, actual)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:304,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:314,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:316,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:320,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:320,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:323,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:323,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:324,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:327,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:330,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:330,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:331,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:331,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:333,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:333,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:333,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:334,1
    - Dst: SrcLimits::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:334,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:335,1
    - Dst: SrcLimits::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:335,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:336,1
    - Dst: SrcLimits::quiet_NaN
      Src: /src/brpc/test/safe_numerics_unittest.cc:336,1
    - Dst: ResetFloatingPointUnit
      Src: /src/brpc/test/safe_numerics_unittest.cc:337,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:339,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:339,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:340,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:340,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 27
    argCount: 3
    argNames:
    - dst
    - src
    - line
    argTypes:
    - char*
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 300
    functionDepth: 1
    functionLinenumber: 300
    functionLinenumberEnd: 342
    functionName: Test
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 21
    functionsReached:
    - static_cast<Src>
    - COMPILE_ASSERT
    - SrcLimits::quiet_NaN
    - SrcLimits::infinity
    - TEST_EXPECTED_RANGE
    - brpc::GetJsService::jquery_min
    - ResetFloatingPointUnit
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: void Test(const char *dst, const char *src, int line)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:350,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:352,1
    - Dst: CheckedNumeric::CheckedNumeric
      Src: /src/brpc/test/safe_numerics_unittest.cc:356,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:357,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:357,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:358,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:358,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:359,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:359,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:361,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:361,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:362,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:362,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:364,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:364,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:365,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:365,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:366,1
    - Dst: SrcLimits::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:366,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:367,1
    - Dst: SrcLimits::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:367,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:368,1
    - Dst: SrcLimits::quiet_NaN
      Src: /src/brpc/test/safe_numerics_unittest.cc:368,1
    - Dst: ResetFloatingPointUnit
      Src: /src/brpc/test/safe_numerics_unittest.cc:369,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:371,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:371,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:372,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:372,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:373,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:373,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:375,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:375,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:376,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 3
    argNames:
    - dst
    - src
    - line
    argTypes:
    - char*
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 378
    functionName: Test
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 21
    functionsReached:
    - TEST_EXPECTED_VALUE
    - static_cast<Src>
    - COMPILE_ASSERT
    - SrcLimits::quiet_NaN
    - CheckedNumeric::CheckedNumeric
    - SrcLimits::infinity
    - TEST_EXPECTED_RANGE
    - brpc::GetJsService::jquery_min
    - ResetFloatingPointUnit
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: void Test(const char *dst, const char *src, int line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:386,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:388,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:389,1
    - Dst: CheckedNumeric::CheckedNumeric
      Src: /src/brpc/test/safe_numerics_unittest.cc:391,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:392,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:392,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:392,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:393,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:393,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:394,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:394,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:396,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:396,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:397,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:397,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:398,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:398,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:399,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - dst
    - src
    - line
    argTypes:
    - char*
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 400
    functionName: Test
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 21
    functionsReached:
    - TEST_EXPECTED_VALUE
    - static_cast<Src>
    - COMPILE_ASSERT
    - CheckedNumeric::CheckedNumeric
    - TEST_EXPECTED_RANGE
    - brpc::GetJsService::jquery_min
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: void Test(const char *dst, const char *src, int line)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:408,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:411,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:412,1
    - Dst: CheckedNumeric::CheckedNumeric
      Src: /src/brpc/test/safe_numerics_unittest.cc:414,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:415,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:415,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:416,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:416,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:417,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:417,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:418,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:418,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:420,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:420,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:421,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:421,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:422,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:422,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:424,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:424,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:425,1
    - Dst: SrcLimits::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:425,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:426,1
    - Dst: SrcLimits::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:426,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:427,1
    - Dst: SrcLimits::quiet_NaN
      Src: /src/brpc/test/safe_numerics_unittest.cc:427,1
    - Dst: ResetFloatingPointUnit
      Src: /src/brpc/test/safe_numerics_unittest.cc:428,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:430,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:430,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - dst
    - src
    - line
    argTypes:
    - char*
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 432
    functionName: Test
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 21
    functionsReached:
    - TEST_EXPECTED_VALUE
    - static_cast<Src>
    - COMPILE_ASSERT
    - SrcLimits::quiet_NaN
    - CheckedNumeric::CheckedNumeric
    - SrcLimits::infinity
    - TEST_EXPECTED_RANGE
    - brpc::GetJsService::jquery_min
    - ResetFloatingPointUnit
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: void Test(const char *dst, const char *src, int line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:440,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:442,1
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/test/safe_numerics_unittest.cc:443,1
    - Dst: CheckedNumeric::CheckedNumeric
      Src: /src/brpc/test/safe_numerics_unittest.cc:445,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:446,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:446,1
    - Dst: TEST_EXPECTED_VALIDITY
      Src: /src/brpc/test/safe_numerics_unittest.cc:447,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:447,1
    - Dst: TEST_EXPECTED_VALUE
      Src: /src/brpc/test/safe_numerics_unittest.cc:448,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:448,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:448,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:450,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_numerics_unittest.cc:450,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:451,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:451,1
    - Dst: TEST_EXPECTED_RANGE
      Src: /src/brpc/test/safe_numerics_unittest.cc:452,1
    - Dst: static_cast<Src>
      Src: /src/brpc/test/safe_numerics_unittest.cc:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 3
    argNames:
    - dst
    - src
    - line
    argTypes:
    - char*
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 453
    functionName: Test
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 21
    functionsReached:
    - TEST_EXPECTED_VALUE
    - static_cast<Src>
    - COMPILE_ASSERT
    - CheckedNumeric::CheckedNumeric
    - brpc::GetJsService::jquery_min
    - TEST_EXPECTED_RANGE
    - butil::BaseIteratorRangeToNumberTraits::max
    - TEST_EXPECTED_VALIDITY
    linkageType: ''
    returnType: void
    signature: void Test(const char *dst, const char *src, int line)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - d
    - ','
    - s
    - ','
    - t
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 457
    functionDepth: 0
    functionLinenumber: 457
    functionLinenumberEnd: 459
    functionName: TEST_NUMERIC_CONVERSION
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEST_NUMERIC_CONVERSION(d, s, t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 460
    functionDepth: 0
    functionLinenumber: 460
    functionLinenumberEnd: 476
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, IntMinOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 501
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, IntOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TEST_NUMERIC_CONVERSION
      Src: /src/brpc/test/safe_numerics_unittest.cc:504,1
    - Dst: TEST_NUMERIC_CONVERSION
      Src: /src/brpc/test/safe_numerics_unittest.cc:505,1
    - Dst: TEST_NUMERIC_CONVERSION
      Src: /src/brpc/test/safe_numerics_unittest.cc:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 524
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - TEST_NUMERIC_CONVERSION
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, IntMaxOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, FloatOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 544
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, DoubleOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 546
    functionDepth: 0
    functionLinenumber: 546
    functionLinenumberEnd: 549
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, SizeTOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:561,1
    - Dst: numeric_limits<float>::infinity
      Src: /src/brpc/test/safe_numerics_unittest.cc:562,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:565,1
    - Dst: checked_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:565,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_numerics_unittest.cc:565,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:568,1
    - Dst: saturated_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:568,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:569,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:570,1
    - Dst: saturated_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:570,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:572,1
    - Dst: saturated_cast<unsigned>
      Src: /src/brpc/test/safe_numerics_unittest.cc:572,1
    - Dst: static_cast<unsigned>
      Src: /src/brpc/test/safe_numerics_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:574,1
    - Dst: saturated_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:574,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:576,1
    - Dst: saturated_cast<int>
      Src: /src/brpc/test/safe_numerics_unittest.cc:576,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_numerics_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:577,1
    - Dst: saturated_cast<float>
      Src: /src/brpc/test/safe_numerics_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_numerics_unittest.cc:578,1
    - Dst: saturated_cast<float>
      Src: /src/brpc/test/safe_numerics_unittest.cc:578,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 551
    functionDepth: 1
    functionLinenumber: 551
    functionLinenumberEnd: 579
    functionName: TEST
    functionSourceFile: /src/brpc/test/safe_numerics_unittest.cc
    functionUses: 0
    functionsReached:
    - static_cast<size_t>
    - static_cast<unsigned>
    - numeric_limits<float>::infinity
    - saturated_cast<int>
    - saturated_cast<float>
    - static_cast<int>
    - checked_cast<int>
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - saturated_cast<unsigned>
    linkageType: ''
    returnType: void
    signature: void TEST(SafeNumerics, CastTests)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:29,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp
    functionUses: 0
    functionsReached:
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: ~DummyEchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DummyEchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: DummyEchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* request,\n                      test::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:61,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:62,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:62,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:67,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:69,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:70,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:74,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:75,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:78,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:81,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:84,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:84,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:85,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:86,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:87,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:88,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:88,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:90,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:107,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:111,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:112,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:116,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:117,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:118,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:119,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:121,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:128,1
    - Dst: std::unordered_set::count
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:128,1
    - Dst: std::unordered_set::insert
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:130,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:134,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:134,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:145,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:146,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:153,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:155,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:156,1
    - Dst: strncmp
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:156,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:156,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:162,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:166,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:166,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:168,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:170,1
    - Dst: strncmp
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:170,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:170,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:171,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:172,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:174,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:175,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:195,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:196,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp:196,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 108
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 197
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - std::string::find
    - ASSERT_STREQ
    - ASSERT_FALSE
    - std::string::data
    - brpc::Channel::Channel
    - std::unordered_set::count
    - LOG
    - strlen
    - bvar::MultiDimension::get_stats
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - strcmp
    - brpc::Server::Join
    - brpc::Controller::Controller
    - strncmp
    - sscanf
    - std::unordered_set::insert
    linkageType: ''
    returnType: void
    signature: void TEST(PrometheusMetrics, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: FindCstrTest::FindCstrTest
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FindCstrTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~FindCstrTest()
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FindCstrTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/find_cstr_unittest.cpp:31,1
    - Dst: time
      Src: /src/brpc/test/find_cstr_unittest.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: FindCstrTest::SetUp
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:39,1
    - Dst: std::map::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:39,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/find_cstr_unittest.cpp:40,1
    - Dst: std::map::empty
      Src: /src/brpc/test/find_cstr_unittest.cpp:40,1
    - Dst: std::map::begin
      Src: /src/brpc/test/find_cstr_unittest.cpp:42,1
    - Dst: std::map::end
      Src: /src/brpc/test/find_cstr_unittest.cpp:42,1
    - Dst: butil::find_cstr
      Src: /src/brpc/test/find_cstr_unittest.cpp:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/find_cstr_unittest.cpp:47,1
    - Dst: std::map::end
      Src: /src/brpc/test/find_cstr_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 50
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::find_cstr
    - std::map::begin
    - std::map::empty
    - std::map::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: void TEST_F(FindCstrTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/find_cstr_unittest.cpp:56,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/find_cstr_unittest.cpp:57,1
    - Dst: snprintf
      Src: /src/brpc/test/find_cstr_unittest.cpp:60,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/find_cstr_unittest.cpp:62,1
    - Dst: std::string::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:62,1
    - Dst: std::string::append
      Src: /src/brpc/test/find_cstr_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:65,1
    - Dst: std::map::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:65,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/find_cstr_unittest.cpp:66,1
    - Dst: std::map::empty
      Src: /src/brpc/test/find_cstr_unittest.cpp:66,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/find_cstr_unittest.cpp:70,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/find_cstr_unittest.cpp:73,1
    - Dst: std::string::data
      Src: /src/brpc/test/find_cstr_unittest.cpp:73,1
    - Dst: std::vector::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:74,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/find_cstr_unittest.cpp:78,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/find_cstr_unittest.cpp:78,1
    - Dst: std::vector::end
      Src: /src/brpc/test/find_cstr_unittest.cpp:78,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/find_cstr_unittest.cpp:80,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/find_cstr_unittest.cpp:81,1
    - Dst: std::vector::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:82,1
    - Dst: butil::find_cstr
      Src: /src/brpc/test/find_cstr_unittest.cpp:83,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/find_cstr_unittest.cpp:85,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/find_cstr_unittest.cpp:86,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/find_cstr_unittest.cpp:87,1
    - Dst: std::vector::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:88,1
    - Dst: std::map::find
      Src: /src/brpc/test/find_cstr_unittest.cpp:89,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/find_cstr_unittest.cpp:91,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/find_cstr_unittest.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/test/find_cstr_unittest.cpp:94,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 95
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::map::find
    - std::vector::begin
    - std::string::size
    - butil::Timer::start
    - ASSERT_FALSE
    - std::string::data
    - std::random_shuffle
    - std::string::append
    - LOG
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - snprintf
    - std::vector::reserve
    - std::map::size
    - std::vector::push_back
    - std::string::reserve
    - std::vector::end
    - butil::Timer::stop
    - butil::find_cstr
    - std::map::empty
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FindCstrTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: FindCstrTest::FindCstrTest
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FindCstrTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~FindCstrTest()
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FindCstrTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/find_cstr_unittest.cpp:31,1
    - Dst: time
      Src: /src/brpc/test/find_cstr_unittest.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: FindCstrTest::SetUp
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:39,1
    - Dst: std::map::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:39,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/find_cstr_unittest.cpp:40,1
    - Dst: std::map::empty
      Src: /src/brpc/test/find_cstr_unittest.cpp:40,1
    - Dst: std::map::begin
      Src: /src/brpc/test/find_cstr_unittest.cpp:42,1
    - Dst: std::map::end
      Src: /src/brpc/test/find_cstr_unittest.cpp:42,1
    - Dst: butil::find_cstr
      Src: /src/brpc/test/find_cstr_unittest.cpp:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/find_cstr_unittest.cpp:47,1
    - Dst: std::map::end
      Src: /src/brpc/test/find_cstr_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 50
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::find_cstr
    - std::map::begin
    - std::map::empty
    - std::map::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: void TEST_F(FindCstrTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/find_cstr_unittest.cpp:56,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/find_cstr_unittest.cpp:57,1
    - Dst: snprintf
      Src: /src/brpc/test/find_cstr_unittest.cpp:60,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/find_cstr_unittest.cpp:62,1
    - Dst: std::string::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:62,1
    - Dst: std::string::append
      Src: /src/brpc/test/find_cstr_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/find_cstr_unittest.cpp:65,1
    - Dst: std::map::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:65,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/find_cstr_unittest.cpp:66,1
    - Dst: std::map::empty
      Src: /src/brpc/test/find_cstr_unittest.cpp:66,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/find_cstr_unittest.cpp:70,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/find_cstr_unittest.cpp:73,1
    - Dst: std::string::data
      Src: /src/brpc/test/find_cstr_unittest.cpp:73,1
    - Dst: std::vector::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:74,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/find_cstr_unittest.cpp:78,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/find_cstr_unittest.cpp:78,1
    - Dst: std::vector::end
      Src: /src/brpc/test/find_cstr_unittest.cpp:78,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/find_cstr_unittest.cpp:80,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/find_cstr_unittest.cpp:81,1
    - Dst: std::vector::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:82,1
    - Dst: butil::find_cstr
      Src: /src/brpc/test/find_cstr_unittest.cpp:83,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/find_cstr_unittest.cpp:85,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/find_cstr_unittest.cpp:86,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/find_cstr_unittest.cpp:87,1
    - Dst: std::vector::size
      Src: /src/brpc/test/find_cstr_unittest.cpp:88,1
    - Dst: std::map::find
      Src: /src/brpc/test/find_cstr_unittest.cpp:89,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/find_cstr_unittest.cpp:91,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/find_cstr_unittest.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/test/find_cstr_unittest.cpp:94,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 95
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::map::find
    - std::vector::begin
    - std::string::size
    - butil::Timer::start
    - ASSERT_FALSE
    - std::string::data
    - std::random_shuffle
    - std::string::append
    - LOG
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - snprintf
    - std::vector::reserve
    - std::map::size
    - std::vector::push_back
    - std::string::reserve
    - std::vector::end
    - butil::Timer::stop
    - butil::find_cstr
    - std::map::empty
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FindCstrTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: NamingServiceFilterTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_naming_service_filter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: NamingServiceFilterTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_naming_service_filter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' node'
    argTypes:
    - brpc::ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: MyNSFilter::Accept
    functionSourceFile: /src/brpc/test/brpc_naming_service_filter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Accept(const brpc::ServerNode& node) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:50,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:52,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:52,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:53,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:54,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:54,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:56,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:59,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:60,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:62,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:63,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:63,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:63,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:66,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:71,1
    - Dst: brpc::Channel::_lb::SelectServer
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:72,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_naming_service_filter_unittest.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 74
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_naming_service_filter_unittest.cpp
    functionUses: 0
    functionsReached:
    - fopen
    - ARRAY_SIZE
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - fprintf
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - butil::TempFile::TempFile
    - fclose
    - brpc::Channel::Init
    - butil::hostname2endpoint
    - brpc::Channel::_lb::SelectServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(NamingServiceFilterTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::ThreadCheckerClass::ThreadCheckerClass
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::ThreadCheckerClass::DoStuff
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::ThreadCheckerClass::DetachFromThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(ThreadCheckerClass* thread_checker_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteThreadCheckerClassOnThread::DeleteThreadCheckerClassOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteThreadCheckerClassOnThread(\n      ThreadCheckerClass*
      thread_checker_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/thread_checker_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteThreadCheckerClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::ThreadCheckerClass::ThreadCheckerClass
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::ThreadCheckerClass::DoStuff
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::ThreadCheckerClass::DetachFromThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(ThreadCheckerClass* thread_checker_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteThreadCheckerClassOnThread::DeleteThreadCheckerClassOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteThreadCheckerClassOnThread(\n      ThreadCheckerClass*
      thread_checker_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/thread_checker_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteThreadCheckerClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:88,1
    - Dst: scoped_ptr::DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:91,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/thread_checker_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DoStuff
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, CallsAllowedOnSameThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:99,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/thread_checker_unittest.cc:104,1
    - Dst: DeleteThreadCheckerClassOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:106,1
    - Dst: DeleteThreadCheckerClassOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - ThreadCheckerClass::ThreadCheckerClass
    - DeleteThreadCheckerClassOnThread::Start
    - DeleteThreadCheckerClassOnThread::Join
    - scoped_ptr::release
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, DestructorAllowedOnDifferentThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:112,1
    - Dst: scoped_ptr::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:116,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/thread_checker_unittest.cc:117,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:119,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 121
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CallDoStuffOnThread::Join
    - scoped_ptr::DetachFromThread
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::get
    - CallDoStuffOnThread::Start
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, DetachFromThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:127,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/thread_checker_unittest.cc:131,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:133,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - ThreadCheckerClass::ThreadCheckerClass
    - CallDoStuffOnThread::Start
    - CallDoStuffOnThread::Join
    - scoped_ptr::get
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass::MethodOnDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/thread_checker_unittest.cc:139,1
    - Dst: butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 142
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerDeathTest, MethodNotAllowedOnDifferentThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, MethodAllowedOnDifferentThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:151,1
    - Dst: scoped_ptr::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:155,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/thread_checker_unittest.cc:156,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:158,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:159,1
    - Dst: scoped_ptr::DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 164
    functionName: butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CallDoStuffOnThread::Join
    - scoped_ptr::DetachFromThread
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DoStuff
    - scoped_ptr::get
    - CallDoStuffOnThread::Start
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/thread_checker_unittest.cc:168,1
    - Dst: butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerDeathTest, DetachFromThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, DetachFromThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::ThreadCheckerClass::ThreadCheckerClass
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::ThreadCheckerClass::DoStuff
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::ThreadCheckerClass::DetachFromThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(ThreadCheckerClass* thread_checker_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteThreadCheckerClassOnThread::DeleteThreadCheckerClassOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteThreadCheckerClassOnThread(\n      ThreadCheckerClass*
      thread_checker_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/thread_checker_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteThreadCheckerClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: butil::ThreadCheckerClass::ThreadCheckerClass
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/test/thread_checker_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::ThreadCheckerClass::DoStuff
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DoStuff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeClass::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::ThreadCheckerClass::DetachFromThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::NonThreadSafeClass::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: butil::CallDoStuffOnThread::CallDoStuffOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallDoStuffOnThread(ThreadCheckerClass* thread_checker_class)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::CallDoStuffOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - DoStuff
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - thread_checker_class
    argTypes:
    - ThreadCheckerClass*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: butil::DeleteThreadCheckerClassOnThread::DeleteThreadCheckerClassOnThread
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DeleteThreadCheckerClassOnThread(\n      ThreadCheckerClass*
      thread_checker_class)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/thread_checker_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: butil::DeleteThreadCheckerClassOnThread::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:88,1
    - Dst: scoped_ptr::DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:91,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/thread_checker_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DoStuff
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, CallsAllowedOnSameThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:99,1
    - Dst: scoped_ptr::release
      Src: /src/brpc/test/thread_checker_unittest.cc:104,1
    - Dst: DeleteThreadCheckerClassOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:106,1
    - Dst: DeleteThreadCheckerClassOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - ThreadCheckerClass::ThreadCheckerClass
    - DeleteThreadCheckerClassOnThread::Start
    - DeleteThreadCheckerClassOnThread::Join
    - scoped_ptr::release
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, DestructorAllowedOnDifferentThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:112,1
    - Dst: scoped_ptr::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:116,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/thread_checker_unittest.cc:117,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:119,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 121
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - CallDoStuffOnThread::Join
    - scoped_ptr::DetachFromThread
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::get
    - CallDoStuffOnThread::Start
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, DetachFromThread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:127,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/thread_checker_unittest.cc:131,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:133,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 2
    functionsReached:
    - ThreadCheckerClass::ThreadCheckerClass
    - CallDoStuffOnThread::Start
    - CallDoStuffOnThread::Join
    - scoped_ptr::get
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass::MethodOnDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/thread_checker_unittest.cc:139,1
    - Dst: butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 142
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerDeathTest, MethodNotAllowedOnDifferentThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::MethodOnDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, MethodAllowedOnDifferentThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadCheckerClass::ThreadCheckerClass
      Src: /src/brpc/test/thread_checker_unittest.cc:151,1
    - Dst: scoped_ptr::DetachFromThread
      Src: /src/brpc/test/thread_checker_unittest.cc:155,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/thread_checker_unittest.cc:156,1
    - Dst: CallDoStuffOnThread::Start
      Src: /src/brpc/test/thread_checker_unittest.cc:158,1
    - Dst: CallDoStuffOnThread::Join
      Src: /src/brpc/test/thread_checker_unittest.cc:159,1
    - Dst: scoped_ptr::DoStuff
      Src: /src/brpc/test/thread_checker_unittest.cc:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 164
    functionName: butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 2
    functionsReached:
    - CallDoStuffOnThread::Join
    - scoped_ptr::DetachFromThread
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DoStuff
    - scoped_ptr::get
    - CallDoStuffOnThread::Start
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/thread_checker_unittest.cc:168,1
    - Dst: butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
    - ASSERT_DEATH
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerDeathTest, DetachFromThreadInDebug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
      Src: /src/brpc/test/thread_checker_unittest.cc:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_checker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCheckerTest, DetachFromThreadInRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:39,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:40,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:40,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:42,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:44,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:46,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:50,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:50,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:50,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:51,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:55,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:55,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 66
    functionName: TEST
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - ASSERT_TRUE
    - berror
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - butil::read_command_output_through_popen
    linkageType: ''
    returnType: void
    signature: void TEST(PopenTest, posix_popen)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:73,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:74,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:74,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:76,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:78,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:80,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:84,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:84,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:84,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:85,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:88,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:89,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:89,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:89,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:92,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:93,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:93,1
    - Dst: std::string::resize
      Src: /src/brpc/test/popen_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:96,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - ASSERT_TRUE
    - std::string::resize
    - butil::read_command_output_through_clone
    - butil::BasicStringPiece::BasicStringPiece
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST(PopenTest, clone)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 110
    functionName: counter_thread
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * counter_thread(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/popen_unittest.cpp:113,1
    - Dst: _exit
      Src: /src/brpc/test/popen_unittest.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: fork_thread
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - _exit
    - usleep
    linkageType: ''
    returnType: int
    signature: int fork_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:122,1
    - Dst: pthread_create
      Src: /src/brpc/test/popen_unittest.cpp:122,1
    - Dst: usleep
      Src: /src/brpc/test/popen_unittest.cpp:123,1
    - Dst: malloc
      Src: /src/brpc/test/popen_unittest.cpp:124,1
    - Dst: clone
      Src: /src/brpc/test/popen_unittest.cpp:127,1
    - Dst: usleep
      Src: /src/brpc/test/popen_unittest.cpp:129,1
    - Dst: pthread_join
      Src: /src/brpc/test/popen_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:137,1
    - Dst: waitpid
      Src: /src/brpc/test/popen_unittest.cpp:137,1
    - Dst: free
      Src: /src/brpc/test/popen_unittest.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 139
    functionName: TEST
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - free
    - pthread_join
    - pthread_create
    - malloc
    - clone
    - usleep
    - waitpid
    linkageType: ''
    returnType: void
    signature: void TEST(PopenTest, does_vfork_suspend_all_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:39,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:40,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:40,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:42,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:44,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:46,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:50,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:50,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:50,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:51,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/test/popen_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:55,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:55,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 66
    functionName: TEST
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - ASSERT_TRUE
    - berror
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - butil::read_command_output_through_popen
    linkageType: ''
    returnType: void
    signature: void TEST(PopenTest, posix_popen)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:73,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:74,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:74,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:76,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:78,1
    - Dst: berror
      Src: /src/brpc/test/popen_unittest.cpp:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:80,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:84,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:84,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:84,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:85,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:88,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/popen_unittest.cpp:89,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/popen_unittest.cpp:89,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:89,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:92,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/test/popen_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:93,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:93,1
    - Dst: std::string::resize
      Src: /src/brpc/test/popen_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:96,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/popen_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - ASSERT_TRUE
    - std::string::resize
    - butil::read_command_output_through_clone
    - butil::BasicStringPiece::BasicStringPiece
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST(PopenTest, clone)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 110
    functionName: counter_thread
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * counter_thread(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/popen_unittest.cpp:113,1
    - Dst: _exit
      Src: /src/brpc/test/popen_unittest.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: fork_thread
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - _exit
    - usleep
    linkageType: ''
    returnType: int
    signature: int fork_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:122,1
    - Dst: pthread_create
      Src: /src/brpc/test/popen_unittest.cpp:122,1
    - Dst: usleep
      Src: /src/brpc/test/popen_unittest.cpp:123,1
    - Dst: malloc
      Src: /src/brpc/test/popen_unittest.cpp:124,1
    - Dst: clone
      Src: /src/brpc/test/popen_unittest.cpp:127,1
    - Dst: usleep
      Src: /src/brpc/test/popen_unittest.cpp:129,1
    - Dst: pthread_join
      Src: /src/brpc/test/popen_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/popen_unittest.cpp:137,1
    - Dst: waitpid
      Src: /src/brpc/test/popen_unittest.cpp:137,1
    - Dst: free
      Src: /src/brpc/test/popen_unittest.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 139
    functionName: TEST
    functionSourceFile: /src/brpc/test/popen_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - free
    - pthread_join
    - pthread_create
    - malloc
    - clone
    - usleep
    - waitpid
    linkageType: ''
    returnType: void
    signature: void TEST(PopenTest, does_vfork_suspend_all_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 13
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 13
    functionName: ~SelfAssign()
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SelfAssign()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 22
    functionName: CheckDerivedMemberAccess::CheckDerivedMemberAccess
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckDerivedMemberAccess()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ScopedRefPtrToSelf::ScopedRefPtrToSelf
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedRefPtrToSelf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ScopedRefPtrToSelf::was_destroyed
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool was_destroyed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ScopedRefPtrToSelf::SelfDestruct
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelfDestruct()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: ~ScopedRefPtrToSelf()
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedRefPtrToSelf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 13
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 13
    functionName: ~SelfAssign()
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SelfAssign()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 22
    functionName: CheckDerivedMemberAccess::CheckDerivedMemberAccess
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckDerivedMemberAccess()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ScopedRefPtrToSelf::ScopedRefPtrToSelf
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedRefPtrToSelf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ScopedRefPtrToSelf::was_destroyed
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool was_destroyed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ScopedRefPtrToSelf::SelfDestruct
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelfDestruct()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: ~ScopedRefPtrToSelf()
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedRefPtrToSelf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SelfAssign::SelfAssign
      Src: /src/brpc/test/ref_counted_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_unittest.cc:50,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/ref_counted_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: TEST
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_refptr::get
    - EXPECT_EQ
    - SelfAssign::SelfAssign
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedUnitTest, TestSelfAssignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CheckDerivedMemberAccess::CheckDerivedMemberAccess
      Src: /src/brpc/test/ref_counted_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: TEST
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - CheckDerivedMemberAccess::CheckDerivedMemberAccess
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedUnitTest, ScopedRefPtrMemberAccess)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ScopedRefPtrToSelf::ScopedRefPtrToSelf
      Src: /src/brpc/test/ref_counted_unittest.cc:58,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_unittest.cc:59,1
    - Dst: ScopedRefPtrToSelf::was_destroyed
      Src: /src/brpc/test/ref_counted_unittest.cc:59,1
    - Dst: ScopedRefPtrToSelf*::SelfDestruct
      Src: /src/brpc/test/ref_counted_unittest.cc:60,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_unittest.cc:61,1
    - Dst: ScopedRefPtrToSelf::was_destroyed
      Src: /src/brpc/test/ref_counted_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: TEST
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ScopedRefPtrToSelf*::SelfDestruct
    - ScopedRefPtrToSelf::was_destroyed
    - EXPECT_FALSE
    - ScopedRefPtrToSelf::ScopedRefPtrToSelf
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedUnitTest, ScopedRefPtrToSelf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SelfAssign::SelfAssign
      Src: /src/brpc/test/ref_counted_unittest.cc:65,1
    - Dst: scoped_refptr::scoped_refptr
      Src: /src/brpc/test/ref_counted_unittest.cc:66,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_unittest.cc:68,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_unittest.cc:69,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_unittest.cc:71,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_unittest.cc:72,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/ref_counted_unittest.cc:74,1
    - Dst: SelfAssign::SelfAssign
      Src: /src/brpc/test/ref_counted_unittest.cc:76,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/ref_counted_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_unittest.cc:79,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/ref_counted_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/ref_counted_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 84
    functionName: TEST
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_refptr::scoped_refptr
    - EXPECT_NE
    - EXPECT_FALSE
    - EXPECT_EQ
    - SelfAssign::SelfAssign
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedUnitTest, ScopedRefPtrBooleanOperations)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SelfAssign::SelfAssign
      Src: /src/brpc/test/ref_counted_unittest.cc:88,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/ref_counted_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/ref_counted_unittest.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/ref_counted_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SelfAssign::SelfAssign
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RefCountedUnitTest, ScopedRefPtrMoveCtor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/bthread_key_unittest.cpp:42,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bthread_key_unittest.cpp:43,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bthread_key_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 45
    functionName: main
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_keytable_pool_getstat
      Src: /src/brpc/test/bthread_key_unittest.cpp:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: bthread_keytable_pool_size
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_keytable_pool_getstat
    linkageType: ''
    returnType: int
    signature: int bthread_keytable_pool_size(bthread_keytable_pool_t* pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - c
    - key
    argTypes:
    - Counters*
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: CountersWrapper
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountersWrapper(Counters* c, bthread_key_t key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ndestroy::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:73,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:75,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 76
    functionName: ~CountersWrapper()
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ndestroy::fetch_add
    - bthread_key_delete
    linkageType: ''
    returnType: void
    signature: void ~CountersWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CountersWrapper*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: destroy_counters_wrapper
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CountersWrapper*>
    linkageType: ''
    returnType: void
    signature: void destroy_counters_wrapper(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Counters*::nenterthread::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:90,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:92,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:94,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:94,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:96,1
    - Dst: CountersWrapper::CountersWrapper
      Src: /src/brpc/test/bthread_key_unittest.cpp:97,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:101,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:101,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:103,1
    - Dst: Counters*::ncreate::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:105,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:105,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_key_unittest.cpp:106,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:110,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:113,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:113,1
    - Dst: Counters*::nleavethread::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:115,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs
    argTypes:
    - Counters*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 116
    functionName: worker1_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - Counters*::nenterthread::fetch_add
    - Counters*::nleavethread::fetch_add
    - Counters*::ncreate::fetch_add
    - bthread_usleep
    - bthread_getspecific
    - arraysize
    - bthread_self
    - bthread_key_create
    - CountersWrapper::CountersWrapper
    linkageType: ''
    returnType: void
    signature: void worker1_impl(Counters* cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: worker1_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:119,1
    - Dst: static_cast<Counters*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 2
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: worker1
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Counters*>
    - worker1_impl
    linkageType: ''
    returnType: void
    signature: void * worker1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:128,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:128,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:131,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:131,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:134,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:134,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:137,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:139,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:139,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:139,1
    - Dst: Counters::nenterthread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: Counters::nleavethread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: Counters::ncreate::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: Counters::ndestroy::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 147
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - Counters::nenterthread::load
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - bthread_start_background
    - arraysize
    - bthread_join
    - Counters::ndestroy::load
    - Counters::nleavethread::load
    - Counters::ncreate::load
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, creating_key_in_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:154,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: dtor2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void dtor2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:160,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - k
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: worker2_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void worker2_impl(bthread_key_t k)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: worker2_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:165,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 164
    functionDepth: 2
    functionLinenumber: 164
    functionLinenumberEnd: 167
    functionName: worker2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - worker2_impl
    - static_cast<bthread_key_t*>
    linkageType: ''
    returnType: void
    signature: void * worker2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:171,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:171,1
    - Dst: berror
      Src: /src/brpc/test/bthread_key_unittest.cpp:171,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:176,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:176,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:180,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:180,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:183,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:183,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:186,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:193,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:193,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 194
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - end
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - std::sort
    - arraysize
    - bthread_join
    - std::unique
    - clear
    - begin
    - berror
    - size
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, use_one_key_in_different_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:204,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:206,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:210,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:211,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:214,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:215,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - keys
    argTypes:
    - Keys*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 216
    functionName: use_invalid_keys_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void use_invalid_keys_impl(const Keys* keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: use_invalid_keys_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:219,1
    - Dst: static_cast<const Keys*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 221
    functionName: use_invalid_keys
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const Keys*>
    - use_invalid_keys_impl
    linkageType: ''
    returnType: void
    signature: void * use_invalid_keys(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:225,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:232,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:235,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:236,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:236,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 237
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - bthread_join
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, use_invalid_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:241,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:242,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:243,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:244,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:246,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:249,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 250
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - bthread_key_delete
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, reuse_key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:262,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:264,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 259
    functionDepth: 1
    functionLinenumber: 259
    functionLinenumberEnd: 266
    functionName: sid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void sid_dtor(void* tls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:269,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - SidData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 270
    functionName: sid_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void sid_thread_impl(SidData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sid_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 272
    functionDepth: 2
    functionLinenumber: 272
    functionLinenumberEnd: 275
    functionName: sid_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sid_thread_impl
    linkageType: ''
    returnType: void
    signature: void * sid_thread(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:279,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:288,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:289,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:290,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:293,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:294,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:295,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:297,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 302
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - bthread_join
    - EXPECT_EQ
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, set_in_dtor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - d
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 317
    functionName: deleter
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void deleter(void* d)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:323,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:323,1
    - Dst: SBATLS::SBATLS
      Src: /src/brpc/test/bthread_key_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:326,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:330,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:331,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:332,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:336,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:336,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - data
    argTypes:
    - SBAData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 337
    functionName: set_before_anybth_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - bthread_getspecific
    - bthread_join
    - SBATLS::SBATLS
    linkageType: ''
    returnType: void
    signature: void set_before_anybth_impl(SBAData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_before_anybth_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 339
    functionDepth: 2
    functionLinenumber: 339
    functionLinenumberEnd: 342
    functionName: set_before_anybth
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_before_anybth_impl
    linkageType: ''
    returnType: void
    signature: void * set_before_anybth(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:346,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:352,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 357
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, set_tls_before_creating_any_bthread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:370,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:370,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 374
    functionName: pool_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void pool_thread_impl(PoolData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pool_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 376
    functionDepth: 2
    functionLinenumber: 376
    functionLinenumberEnd: 379
    functionName: pool_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pool_thread_impl
    linkageType: ''
    returnType: void
    signature: void * pool_thread(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:384,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:386,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 388
    functionName: pool_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void pool_dtor(void* tls)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:392,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:395,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:399,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:407,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:413,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:417,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:419,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:420,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:426,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:426,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 390
    functionDepth: 2
    functionLinenumber: 390
    functionLinenumberEnd: 427
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_start_urgent
    - bthread_key_delete
    - bthread_join
    - bthread_attr_init
    - EXPECT_EQ
    - bthread_key_create
    - bthread_keytable_pool_size
    - bthread_keytable_pool_destroy
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, using_pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PoolData2*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 437
    functionName: pool_dtor2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<PoolData2*>
    linkageType: ''
    returnType: void
    signature: void pool_dtor2(void* tls)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:440,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:442,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:442,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:444,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:445,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:446,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 447
    functionName: usleep_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - get_thread_local_keytable_list_length
    - bthread_usleep
    - bthread_getspecific
    - ASSERT_LE
    - PoolData2::PoolData2
    linkageType: ''
    returnType: void
    signature: void usleep_thread_impl(PoolData2* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:450,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 449
    functionDepth: 2
    functionLinenumber: 449
    functionLinenumberEnd: 452
    functionName: usleep_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep_thread_impl
    linkageType: ''
    returnType: void
    signature: void * usleep_thread(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_key_unittest.cpp:456,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:461,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:461,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:462,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:465,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_key_unittest.cpp:466,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:467,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 454
    functionDepth: 1
    functionLinenumber: 454
    functionLinenumberEnd: 469
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_start_background
    - bthread_join
    - std::vector::reserve
    - usleep
    - PoolData2::PoolData2
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void launch_many_bthreads(PoolData2* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_key_unittest.cpp:473,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 475
    functionName: run_launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - launch_many_bthreads
    linkageType: ''
    returnType: void
    signature: void * run_launch_many_bthreads(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:479,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:481,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:482,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:488,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:489,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:489,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:493,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:494,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:494,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 477
    functionDepth: 2
    functionLinenumber: 477
    functionLinenumberEnd: 495
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_start_urgent
    - bthread_key_delete
    - bthread_join
    - bthread_attr_init
    - bthread_key_create
    - bthread_keytable_pool_size
    - bthread_keytable_pool_destroy
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, frequently_borrow_keytable_when_using_pool)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:503,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:504,1
    - Dst: erase
      Src: /src/brpc/test/bthread_key_unittest.cpp:506,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:506,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:507,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:510,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:511,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 513
    functionName: return_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_thread_local_keytable_list_length
    - return_keytable
    - BAIDU_SCOPED_LOCK
    - ASSERT_LE
    - erase
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: void return_thread_impl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: return_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 515
    functionDepth: 2
    functionLinenumber: 515
    functionLinenumberEnd: 518
    functionName: return_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - return_thread_impl
    linkageType: ''
    returnType: void
    signature: void * return_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: borrow_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:522,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:523,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:524,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 520
    functionDepth: 1
    functionLinenumber: 520
    functionLinenumberEnd: 526
    functionName: borrow_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - borrow_keytable
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void borrow_thread_impl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: borrow_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 528
    functionDepth: 2
    functionLinenumber: 528
    functionLinenumberEnd: 531
    functionName: borrow_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - borrow_thread_impl
    linkageType: ''
    returnType: void
    signature: void * borrow_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:534,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:535,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:538,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:538,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:544,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:544,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:548,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:548,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:553,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:553,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:556,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:556,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:559,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:560,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:564,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:564,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 533
    functionDepth: 2
    functionLinenumber: 533
    functionLinenumberEnd: 565
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - return_keytable
    - bthread_start_background
    - arraysize
    - bthread_join
    - clear
    - bthread_attr_init
    - size
    - bthread_keytable_pool_destroy
    - bthread_keytable_pool_size
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, borrow_and_return_keytable_when_using_pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_key_unittest.cpp:573,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:574,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_key_unittest.cpp:575,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 576
    functionName: lid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - bthread_mutex_lock
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void lid_dtor(void* tls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:579,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:580,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:580,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:580,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 581
    functionName: lid_worker_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void lid_worker_impl(bthread_key_t key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lid_worker_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:584,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:584,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 583
    functionDepth: 2
    functionLinenumber: 583
    functionLinenumberEnd: 586
    functionName: lid_worker
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - lid_worker_impl
    - static_cast<bthread_key_t*>
    linkageType: ''
    returnType: void
    signature: void * lid_worker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:591,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:592,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:592,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:594,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:598,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:598,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:602,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:602,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:605,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:605,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:608,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_key_unittest.cpp:611,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:611,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:617,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:617,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 588
    functionDepth: 1
    functionLinenumber: 588
    functionLinenumberEnd: 618
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - end
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - std::sort
    - arraysize
    - bthread_mutex_init
    - bthread_join
    - bthread_mutex_destroy
    - std::unique
    - clear
    - begin
    - size
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, use_bthread_mutex_in_dtor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - c
    - key
    argTypes:
    - Counters*
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: CountersWrapper
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountersWrapper(Counters* c, bthread_key_t key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ndestroy::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:73,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:75,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 76
    functionName: ~CountersWrapper()
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ndestroy::fetch_add
    - bthread_key_delete
    linkageType: ''
    returnType: void
    signature: void ~CountersWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CountersWrapper*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: destroy_counters_wrapper
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CountersWrapper*>
    linkageType: ''
    returnType: void
    signature: void destroy_counters_wrapper(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Counters*::nenterthread::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:90,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:92,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:94,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:94,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:96,1
    - Dst: CountersWrapper::CountersWrapper
      Src: /src/brpc/test/bthread_key_unittest.cpp:97,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:101,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:101,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:103,1
    - Dst: Counters*::ncreate::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:105,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:105,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_key_unittest.cpp:106,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:110,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:113,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:113,1
    - Dst: Counters*::nleavethread::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:115,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs
    argTypes:
    - Counters*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 116
    functionName: worker1_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - Counters*::nenterthread::fetch_add
    - Counters*::nleavethread::fetch_add
    - Counters*::ncreate::fetch_add
    - bthread_usleep
    - bthread_getspecific
    - arraysize
    - bthread_self
    - bthread_key_create
    - CountersWrapper::CountersWrapper
    linkageType: ''
    returnType: void
    signature: void worker1_impl(Counters* cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: worker1_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:119,1
    - Dst: static_cast<Counters*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 2
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: worker1
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Counters*>
    - worker1_impl
    linkageType: ''
    returnType: void
    signature: void * worker1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:128,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:128,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:131,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:131,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:134,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:134,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:137,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:139,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:139,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:139,1
    - Dst: Counters::nenterthread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: Counters::nleavethread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: Counters::ncreate::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: Counters::ndestroy::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 147
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - Counters::nenterthread::load
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - bthread_start_background
    - arraysize
    - bthread_join
    - Counters::ndestroy::load
    - Counters::nleavethread::load
    - Counters::ncreate::load
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, creating_key_in_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:154,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: dtor2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void dtor2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:160,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - k
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: worker2_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void worker2_impl(bthread_key_t k)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: worker2_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:165,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 164
    functionDepth: 2
    functionLinenumber: 164
    functionLinenumberEnd: 167
    functionName: worker2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - worker2_impl
    - static_cast<bthread_key_t*>
    linkageType: ''
    returnType: void
    signature: void * worker2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:171,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:171,1
    - Dst: berror
      Src: /src/brpc/test/bthread_key_unittest.cpp:171,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:176,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:176,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:180,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:180,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:183,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:183,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:186,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:188,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:193,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:193,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 194
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - end
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - std::sort
    - arraysize
    - bthread_join
    - std::unique
    - clear
    - begin
    - berror
    - size
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, use_one_key_in_different_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:204,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:206,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:210,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:211,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:214,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:215,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - keys
    argTypes:
    - Keys*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 216
    functionName: use_invalid_keys_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void use_invalid_keys_impl(const Keys* keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: use_invalid_keys_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:219,1
    - Dst: static_cast<const Keys*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 221
    functionName: use_invalid_keys
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const Keys*>
    - use_invalid_keys_impl
    linkageType: ''
    returnType: void
    signature: void * use_invalid_keys(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:225,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:232,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:235,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:236,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:236,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 237
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - bthread_join
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, use_invalid_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:241,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:242,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:243,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:244,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:246,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:249,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 250
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - bthread_key_delete
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, reuse_key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:262,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:264,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 259
    functionDepth: 1
    functionLinenumber: 259
    functionLinenumberEnd: 266
    functionName: sid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void sid_dtor(void* tls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:269,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - SidData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 270
    functionName: sid_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void sid_thread_impl(SidData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sid_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 272
    functionDepth: 2
    functionLinenumber: 272
    functionLinenumberEnd: 275
    functionName: sid_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sid_thread_impl
    linkageType: ''
    returnType: void
    signature: void * sid_thread(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:279,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:288,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:289,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:290,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:293,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:294,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:295,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:297,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 302
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - bthread_join
    - EXPECT_EQ
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, set_in_dtor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - d
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 317
    functionName: deleter
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void deleter(void* d)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:323,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:323,1
    - Dst: SBATLS::SBATLS
      Src: /src/brpc/test/bthread_key_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:326,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:330,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:331,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:332,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:336,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:336,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - data
    argTypes:
    - SBAData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 337
    functionName: set_before_anybth_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - bthread_getspecific
    - bthread_join
    - SBATLS::SBATLS
    linkageType: ''
    returnType: void
    signature: void set_before_anybth_impl(SBAData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_before_anybth_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 339
    functionDepth: 2
    functionLinenumber: 339
    functionLinenumberEnd: 342
    functionName: set_before_anybth
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_before_anybth_impl
    linkageType: ''
    returnType: void
    signature: void * set_before_anybth(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:346,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:352,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 357
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, set_tls_before_creating_any_bthread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:370,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:370,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 374
    functionName: pool_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void pool_thread_impl(PoolData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pool_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 376
    functionDepth: 2
    functionLinenumber: 376
    functionLinenumberEnd: 379
    functionName: pool_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pool_thread_impl
    linkageType: ''
    returnType: void
    signature: void * pool_thread(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:384,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:386,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 388
    functionName: pool_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    linkageType: ''
    returnType: void
    signature: void pool_dtor(void* tls)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:392,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:395,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:399,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:407,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:413,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:417,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:419,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:420,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:426,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:426,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 390
    functionDepth: 2
    functionLinenumber: 390
    functionLinenumberEnd: 427
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_start_urgent
    - bthread_key_delete
    - bthread_join
    - bthread_attr_init
    - EXPECT_EQ
    - bthread_key_create
    - bthread_keytable_pool_size
    - bthread_keytable_pool_destroy
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, using_pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PoolData2*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 437
    functionName: pool_dtor2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<PoolData2*>
    linkageType: ''
    returnType: void
    signature: void pool_dtor2(void* tls)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:440,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:442,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:442,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:444,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:445,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:446,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 447
    functionName: usleep_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_setspecific
    - ASSERT_EQ
    - get_thread_local_keytable_list_length
    - bthread_usleep
    - bthread_getspecific
    - ASSERT_LE
    - PoolData2::PoolData2
    linkageType: ''
    returnType: void
    signature: void usleep_thread_impl(PoolData2* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:450,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 449
    functionDepth: 2
    functionLinenumber: 449
    functionLinenumberEnd: 452
    functionName: usleep_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep_thread_impl
    linkageType: ''
    returnType: void
    signature: void * usleep_thread(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_key_unittest.cpp:456,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:461,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:461,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:462,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:465,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_key_unittest.cpp:466,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:467,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 454
    functionDepth: 1
    functionLinenumber: 454
    functionLinenumberEnd: 469
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_start_background
    - bthread_join
    - std::vector::reserve
    - usleep
    - PoolData2::PoolData2
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void launch_many_bthreads(PoolData2* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_key_unittest.cpp:473,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 475
    functionName: run_launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - launch_many_bthreads
    linkageType: ''
    returnType: void
    signature: void * run_launch_many_bthreads(void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:479,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:481,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:482,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:488,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:489,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:489,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:493,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:494,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:494,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 477
    functionDepth: 2
    functionLinenumber: 477
    functionLinenumberEnd: 495
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_start_urgent
    - bthread_key_delete
    - bthread_join
    - bthread_attr_init
    - bthread_key_create
    - bthread_keytable_pool_size
    - bthread_keytable_pool_destroy
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, frequently_borrow_keytable_when_using_pool)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:503,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:504,1
    - Dst: erase
      Src: /src/brpc/test/bthread_key_unittest.cpp:506,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:506,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:507,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:510,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:511,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 513
    functionName: return_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - get_thread_local_keytable_list_length
    - return_keytable
    - BAIDU_SCOPED_LOCK
    - ASSERT_LE
    - erase
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: void return_thread_impl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: return_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 515
    functionDepth: 2
    functionLinenumber: 515
    functionLinenumberEnd: 518
    functionName: return_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - return_thread_impl
    linkageType: ''
    returnType: void
    signature: void * return_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: borrow_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:522,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:523,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:524,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 520
    functionDepth: 1
    functionLinenumber: 520
    functionLinenumberEnd: 526
    functionName: borrow_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - push_back
    - borrow_keytable
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void borrow_thread_impl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: borrow_thread_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 528
    functionDepth: 2
    functionLinenumber: 528
    functionLinenumberEnd: 531
    functionName: borrow_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - borrow_thread_impl
    linkageType: ''
    returnType: void
    signature: void * borrow_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:534,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:535,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:538,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:538,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:544,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:544,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:548,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:548,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:553,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:553,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:556,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:556,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:559,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:560,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:564,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:564,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 533
    functionDepth: 2
    functionLinenumber: 533
    functionLinenumberEnd: 565
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - return_keytable
    - bthread_start_background
    - arraysize
    - bthread_join
    - clear
    - bthread_attr_init
    - size
    - bthread_keytable_pool_destroy
    - bthread_keytable_pool_size
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, borrow_and_return_keytable_when_using_pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_key_unittest.cpp:573,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:574,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_key_unittest.cpp:575,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 576
    functionName: lid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - bthread_mutex_lock
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void lid_dtor(void* tls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:579,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:580,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:580,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:580,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 581
    functionName: lid_worker_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_getspecific
    - ASSERT_EQ
    - bthread_setspecific
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void lid_worker_impl(bthread_key_t key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lid_worker_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:584,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:584,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 583
    functionDepth: 2
    functionLinenumber: 583
    functionLinenumberEnd: 586
    functionName: lid_worker
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - lid_worker_impl
    - static_cast<bthread_key_t*>
    linkageType: ''
    returnType: void
    signature: void * lid_worker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:591,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:592,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:592,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:594,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:598,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:598,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:602,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:602,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:605,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:605,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:608,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_key_unittest.cpp:611,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:611,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:617,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:617,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 588
    functionDepth: 1
    functionLinenumber: 588
    functionLinenumberEnd: 618
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - end
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_key_delete
    - std::sort
    - arraysize
    - bthread_mutex_init
    - bthread_join
    - bthread_mutex_destroy
    - std::unique
    - clear
    - begin
    - size
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, use_bthread_mutex_in_dtor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpu_relax
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:31,1
    - Dst: printf
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 35
    functionName: spinner
    functionSourceFile: /src/brpc/test/bthread_sched_yield_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    - cpu_relax
    linkageType: ''
    returnType: void
    signature: void * spinner(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sched_yield
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:40,1
    - Dst: printf
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 44
    functionName: yielder
    functionSourceFile: /src/brpc/test/bthread_sched_yield_unittest.cpp
    functionUses: 0
    functionsReached:
    - sched_yield
    - printf
    linkageType: ''
    returnType: void
    signature: void * yielder(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sysconf
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:48,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:49,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:51,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:55,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:57,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:60,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_sched_yield_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - pthread_join
    - pthread_create
    - sysconf
    - sleep
    linkageType: ''
    returnType: void
    signature: void TEST(SchedYieldTest, sched_yield_when_all_core_busy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpu_relax
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:31,1
    - Dst: printf
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 35
    functionName: spinner
    functionSourceFile: /src/brpc/test/bthread_sched_yield_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    - cpu_relax
    linkageType: ''
    returnType: void
    signature: void * spinner(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sched_yield
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:40,1
    - Dst: printf
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 44
    functionName: yielder
    functionSourceFile: /src/brpc/test/bthread_sched_yield_unittest.cpp
    functionUses: 0
    functionsReached:
    - sched_yield
    - printf
    linkageType: ''
    returnType: void
    signature: void * yielder(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sysconf
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:48,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:49,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:51,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:55,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:57,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:60,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_sched_yield_unittest.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_sched_yield_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - pthread_join
    - pthread_create
    - sysconf
    - sleep
    linkageType: ''
    returnType: void
    signature: void TEST(SchedYieldTest, sched_yield_when_all_core_busy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:16,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:16,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:20,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:23,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:24,1
    - Dst: ScopedTempDir::IsValid
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:24,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:26,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:30,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:30,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:32,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:32,1
    - Dst: ScopedTempDir::Take
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:35,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:35,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:35,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:36,1
    - Dst: ScopedTempDir::IsValid
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:38,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:38,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:43,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:43,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:45,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 46
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - FilePath::value
    - FILE_PATH_LITERAL
    - ScopedTempDir::IsValid
    - butil::CreateNewTempDirectory
    - EXPECT_FALSE
    - EXPECT_EQ
    - ScopedTempDir::Set
    - butil::DirectoryExists
    - ScopedTempDir::Take
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, FullPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:54,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:54,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:55,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:56,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:56,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:58,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:58,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:59,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:59,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:59,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:61,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 62
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::GetTempDir
    - FilePath::value
    - ScopedTempDir::path
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_FALSE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, TempDir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:67,1
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:67,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:67,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:73,1
    - Dst: ScopedTempDir::CreateUniqueTempDirUnderPath
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:73,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:74,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:75,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:75,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:76,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:76,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:77,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:77,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:77,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:79,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:79,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 81
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FilePath::IsParent
    - FilePath::value
    - FILE_PATH_LITERAL
    - ScopedTempDir::path
    - butil::DeleteFile
    - butil::CreateNewTempDirectory
    - EXPECT_FALSE
    - ScopedTempDir::CreateUniqueTempDirUnderPath
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, UniqueTempDirUnderPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:85,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:86,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:87,1
    - Dst: ScopedTempDir::Delete
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:88,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:88,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:89,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:91,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:91,1
    - Dst: ScopedTempDir::Take
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:91,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:92,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:93,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:94,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ScopedTempDir::CreateUniqueTempDir
    - ScopedTempDir::Delete
    - EXPECT_FALSE
    - ScopedTempDir::Set
    - ScopedTempDir::Take
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, MultipleInvocations)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:100,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:100,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:101,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:103,1
    - Dst: butil::File::IsValid
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:104,1
    - Dst: butil::File::error_details
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:104,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:105,1
    - Dst: ScopedTempDir::Delete
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:105,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:106,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:106,1
    - Dst: butil::File::Close
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:109,1
    - Dst: ScopedTempDir::Delete
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 110
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::File::Close
    - FILE_PATH_LITERAL
    - ScopedTempDir::path
    - ScopedTempDir::CreateUniqueTempDir
    - ScopedTempDir::Delete
    - butil::File::error_details
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::File::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, LockedTempDir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:16,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:16,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:20,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:23,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:24,1
    - Dst: ScopedTempDir::IsValid
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:24,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:26,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:30,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:30,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:32,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:32,1
    - Dst: ScopedTempDir::Take
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:35,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:35,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:35,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:36,1
    - Dst: ScopedTempDir::IsValid
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:38,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:38,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:43,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:43,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:45,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 46
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - FilePath::value
    - FILE_PATH_LITERAL
    - ScopedTempDir::IsValid
    - butil::CreateNewTempDirectory
    - EXPECT_FALSE
    - EXPECT_EQ
    - ScopedTempDir::Set
    - butil::DirectoryExists
    - ScopedTempDir::Take
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, FullPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:54,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:54,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:55,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:56,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:56,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:58,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:58,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:59,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:59,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:59,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:61,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 62
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::GetTempDir
    - FilePath::value
    - ScopedTempDir::path
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_FALSE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, TempDir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:67,1
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:67,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:67,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:73,1
    - Dst: ScopedTempDir::CreateUniqueTempDirUnderPath
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:73,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:74,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:75,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:75,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:76,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:76,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:77,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:77,1
    - Dst: FilePath::value
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:77,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:79,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:79,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 81
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FilePath::IsParent
    - FilePath::value
    - FILE_PATH_LITERAL
    - ScopedTempDir::path
    - butil::DeleteFile
    - butil::CreateNewTempDirectory
    - EXPECT_FALSE
    - ScopedTempDir::CreateUniqueTempDirUnderPath
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, UniqueTempDirUnderPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:85,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:86,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:87,1
    - Dst: ScopedTempDir::Delete
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:88,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:88,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:89,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:91,1
    - Dst: ScopedTempDir::Set
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:91,1
    - Dst: ScopedTempDir::Take
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:91,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:92,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:93,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:94,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ScopedTempDir::CreateUniqueTempDir
    - ScopedTempDir::Delete
    - EXPECT_FALSE
    - ScopedTempDir::Set
    - ScopedTempDir::Take
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, MultipleInvocations)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:100,1
    - Dst: ScopedTempDir::CreateUniqueTempDir
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:100,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:101,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:103,1
    - Dst: butil::File::IsValid
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:104,1
    - Dst: butil::File::error_details
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:104,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:105,1
    - Dst: ScopedTempDir::Delete
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:105,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:106,1
    - Dst: ScopedTempDir::path
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:106,1
    - Dst: butil::File::Close
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:109,1
    - Dst: ScopedTempDir::Delete
      Src: /src/brpc/test/scoped_temp_dir_unittest.cc:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 110
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_temp_dir_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::File::Close
    - FILE_PATH_LITERAL
    - ScopedTempDir::path
    - ScopedTempDir::CreateUniqueTempDir
    - ScopedTempDir::Delete
    - butil::File::error_details
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::File::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedTempDir, LockedTempDir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/base64_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64_unittest.cc:20,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/test/base64_unittest.cc:22,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/base64_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64_unittest.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 25
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64Encode
    - EXPECT_EQ
    - butil::Base64Decode
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64Test, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/base64_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64_unittest.cc:20,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/test/base64_unittest.cc:22,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/base64_unittest.cc:23,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/base64_unittest.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 25
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/base64_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Base64Encode
    - EXPECT_EQ
    - butil::Base64Decode
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(Base64Test, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:19,1
    - Dst: butil::SysInfo::MaxSharedMemorySize
      Src: /src/brpc/test/sys_info_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 20
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_GT
    - butil::SysInfo::MaxSharedMemorySize
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, MaxSharedMemorySize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_GE
      Src: /src/brpc/test/sys_info_unittest.cc:25,1
    - Dst: butil::SysInfo::NumberOfProcessors
      Src: /src/brpc/test/sys_info_unittest.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 26
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_GE
    - butil::SysInfo::NumberOfProcessors
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, NumProcs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:30,1
    - Dst: butil::SysInfo::AmountOfPhysicalMemory
      Src: /src/brpc/test/sys_info_unittest.cc:30,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:31,1
    - Dst: butil::SysInfo::AmountOfPhysicalMemoryMB
      Src: /src/brpc/test/sys_info_unittest.cc:31,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/sys_info_unittest.cc:33,1
    - Dst: butil::SysInfo::AmountOfVirtualMemory
      Src: /src/brpc/test/sys_info_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 34
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SysInfo::AmountOfVirtualMemory
    - butil::SysInfo::AmountOfPhysicalMemoryMB
    - EXPECT_GT
    - EXPECT_GE
    - butil::SysInfo::AmountOfPhysicalMemory
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, AmountOfMem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/sys_info_unittest.cc:39,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/sys_info_unittest.cc:39,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:40,1
    - Dst: butil::SysInfo::AmountOfFreeDiskSpace
      Src: /src/brpc/test/sys_info_unittest.cc:40,1
    - Dst: FilePath::value
      Src: /src/brpc/test/sys_info_unittest.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::GetTempDir
    - FilePath::value
    - butil::SysInfo::AmountOfFreeDiskSpace
    - EXPECT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, AmountOfFreeDiskSpace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SysInfo::OperatingSystemVersionNumbers
      Src: /src/brpc/test/sys_info_unittest.cc:49,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:52,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:53,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 55
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_GT
    - butil::SysInfo::OperatingSystemVersionNumbers
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, OperatingSystemVersionNumbers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetUptime
      Src: /src/brpc/test/sys_info_unittest.cc:59,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/sys_info_unittest.cc:62,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/sys_info_unittest.cc:62,1
    - Dst: brpc::GetUptime
      Src: /src/brpc/test/sys_info_unittest.cc:63,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:64,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/sys_info_unittest.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_GT
    - butil::PlatformThread::Sleep
    - brpc::GetUptime
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, Uptime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:77,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:77,1
    - Dst: butil::SysInfo::OperatingSystemVersionNumbers
      Src: /src/brpc/test/sys_info_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 84
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - butil::Time
    - butil::SysInfo::OperatingSystemVersionNumbers
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, GoogleChromeOSVersionNumbers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:93,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:93,1
    - Dst: butil::SysInfo::OperatingSystemVersionNumbers
      Src: /src/brpc/test/sys_info_unittest.cc:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 100
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - butil::Time
    - butil::SysInfo::OperatingSystemVersionNumbers
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, GoogleChromeOSVersionNumbersFirst)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:107,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:107,1
    - Dst: butil::SysInfo::OperatingSystemVersionNumbers
      Src: /src/brpc/test/sys_info_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 114
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - butil::Time
    - butil::SysInfo::OperatingSystemVersionNumbers
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, GoogleChromeOSNoVersionNumbers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::FromDoubleT
      Src: /src/brpc/test/sys_info_unittest.cc:119,1
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:120,1
    - Dst: butil::SysInfo::GetLsbReleaseTime
      Src: /src/brpc/test/sys_info_unittest.cc:121,1
    - Dst: EXPECT_DOUBLE_EQ
      Src: /src/brpc/test/sys_info_unittest.cc:122,1
    - Dst: butil::Time::ToDoubleT
      Src: /src/brpc/test/sys_info_unittest.cc:122,1
    - Dst: butil::Time::ToDoubleT
      Src: /src/brpc/test/sys_info_unittest.cc:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 124
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Time::FromDoubleT
    - butil::Time::ToDoubleT
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - butil::SysInfo::GetLsbReleaseTime
    - EXPECT_DOUBLE_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, GoogleChromeOSLsbReleaseTime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:127,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:127,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/sys_info_unittest.cc:128,1
    - Dst: butil::SysInfo::IsRunningOnChromeOS
      Src: /src/brpc/test/sys_info_unittest.cc:128,1
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:133,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:133,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/sys_info_unittest.cc:134,1
    - Dst: butil::SysInfo::IsRunningOnChromeOS
      Src: /src/brpc/test/sys_info_unittest.cc:134,1
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:139,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/sys_info_unittest.cc:140,1
    - Dst: butil::SysInfo::IsRunningOnChromeOS
      Src: /src/brpc/test/sys_info_unittest.cc:140,1
    - Dst: butil::SysInfo::SetChromeOSVersionInfoForTest
      Src: /src/brpc/test/sys_info_unittest.cc:144,1
    - Dst: butil::Time
      Src: /src/brpc/test/sys_info_unittest.cc:144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/sys_info_unittest.cc:145,1
    - Dst: butil::SysInfo::IsRunningOnChromeOS
      Src: /src/brpc/test/sys_info_unittest.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 146
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/sys_info_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SysInfo::IsRunningOnChromeOS
    - EXPECT_TRUE
    - butil::Time
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(SysInfoTest, IsRunningOnChromeOS)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:22,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 53
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - ASSERT_EQ
    - butil::crc32c::Value
    - memset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, StandardResults)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::crc32c::Value
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Extend)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:65,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - ASSERT_EQ
    - butil::crc32c::Mask
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Mask)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::IsFastCrc32Supported
      Src: /src/brpc/test/crc32c_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::IsFastCrc32Supported
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, fast_is_on)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:22,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 53
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - ASSERT_EQ
    - butil::crc32c::Value
    - memset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, StandardResults)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::crc32c::Value
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Extend)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:65,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - ASSERT_EQ
    - butil::crc32c::Mask
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Mask)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::IsFastCrc32Supported
      Src: /src/brpc/test/crc32c_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::IsFastCrc32Supported
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, fast_is_on)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:22,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 53
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - ASSERT_EQ
    - butil::crc32c::Value
    - memset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, StandardResults)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::crc32c::Value
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Extend)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:65,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - ASSERT_EQ
    - butil::crc32c::Mask
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Mask)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::IsFastCrc32Supported
      Src: /src/brpc/test/crc32c_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::IsFastCrc32Supported
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, fast_is_on)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:22,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:23,1
    - Dst: memset
      Src: /src/brpc/test/crc32c_unittest.cc:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:26,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:31,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/crc32c_unittest.cc:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 53
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - ASSERT_EQ
    - butil::crc32c::Value
    - memset
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, StandardResults)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:60,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::crc32c::Value
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Extend)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/crc32c_unittest.cc:65,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/test/crc32c_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - ASSERT_EQ
    - butil::crc32c::Mask
    - ASSERT_NE
    - butil::crc32c::Value
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, Mask)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::IsFastCrc32Supported
      Src: /src/brpc/test/crc32c_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: butil::crc32c::TEST_F
    functionSourceFile: /src/brpc/test/crc32c_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::IsFastCrc32Supported
    linkageType: ''
    returnType: void
    signature: void TEST_F(CRC, fast_is_on)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 22
    functionName: butil::ThreadLocalTesterBase::ThreadLocalTesterBase
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalTesterBase(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: ~ThreadLocalTesterBase()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalTesterBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: butil::SetThreadLocal::SetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~SetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - ThreadLocalTesterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::SetThreadLocal::set_value
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(ThreadLocalTesterBase* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_unittest.cc:42,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: butil::SetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - Set
    - IsSignaled
    - Signal
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::GetThreadLocal::GetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~GetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~GetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - ThreadLocalTesterBase**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::GetThreadLocal::set_ptr
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ptr(ThreadLocalTesterBase** ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_unittest.cc:62,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::GetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - IsSignaled
    - Signal
    - DCHECK
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 22
    functionName: butil::ThreadLocalTesterBase::ThreadLocalTesterBase
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalTesterBase(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: ~ThreadLocalTesterBase()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalTesterBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: butil::SetThreadLocal::SetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~SetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - ThreadLocalTesterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::SetThreadLocal::set_value
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(ThreadLocalTesterBase* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_unittest.cc:42,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: butil::SetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - Set
    - IsSignaled
    - Signal
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::GetThreadLocal::GetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~GetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~GetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - ThreadLocalTesterBase**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::GetThreadLocal::set_ptr
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ptr(ThreadLocalTesterBase** ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_unittest.cc:62,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::GetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - IsSignaled
    - Signal
    - DCHECK
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/thread_local_unittest.cc:77,1
    - Dst: butil::DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/thread_local_unittest.cc:78,1
    - Dst: butil::ThreadLocalPointer::ThreadLocalPointer
      Src: /src/brpc/test/thread_local_unittest.cc:80,1
    - Dst: reinterpret_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:83,1
    - Dst: GetThreadLocal::set_ptr
      Src: /src/brpc/test/thread_local_unittest.cc:89,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:93,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:94,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:96,1
    - Dst: static_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:96,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:99,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:100,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:102,1
    - Dst: static_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:102,1
    - Dst: SetThreadLocal::set_value
      Src: /src/brpc/test/thread_local_unittest.cc:106,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:109,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:110,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:111,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:114,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:115,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:117,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:121,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:122,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:124,1
    - Dst: static_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:124,1
    - Dst: SetThreadLocal::set_value
      Src: /src/brpc/test/thread_local_unittest.cc:127,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:129,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:130,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:131,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:134,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:135,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:137,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:141,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:142,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:144,1
    - Dst: butil::DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/thread_local_unittest.cc:146,1
    - Dst: butil::DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/thread_local_unittest.cc:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 148
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::DelegateSimpleThreadPool::JoinAll
    - static_cast<ThreadLocalTesterBase*>
    - GetThreadLocal::set_ptr
    - butil::DelegateSimpleThreadPool::Start
    - butil::ThreadLocalPointer::ThreadLocalPointer
    - butil::WaitableEvent::Reset
    - butil::WaitableEvent::Wait
    - reinterpret_cast<ThreadLocalTesterBase*>
    - butil::DelegateSimpleThreadPool::AddWork
    - EXPECT_EQ
    - SetThreadLocal::set_value
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, Pointer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocalBoolean::ThreadLocalBoolean
      Src: /src/brpc/test/thread_local_unittest.cc:152,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_local_unittest.cc:153,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:153,1
    - Dst: butil::ThreadLocalBoolean::Set
      Src: /src/brpc/test/thread_local_unittest.cc:155,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_local_unittest.cc:156,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:156,1
    - Dst: butil::ThreadLocalBoolean::Set
      Src: /src/brpc/test/thread_local_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_local_unittest.cc:159,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:159,1
    - Dst: butil::ThreadLocalBoolean::ThreadLocalBoolean
      Src: /src/brpc/test/thread_local_unittest.cc:164,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_local_unittest.cc:165,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadLocalBoolean::ThreadLocalBoolean
    - EXPECT_TRUE
    - butil::ThreadLocalBoolean::Set
    - EXPECT_FALSE
    - butil::ThreadLocalBoolean::Get
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, Boolean)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 22
    functionName: butil::ThreadLocalTesterBase::ThreadLocalTesterBase
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalTesterBase(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: ~ThreadLocalTesterBase()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalTesterBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: butil::SetThreadLocal::SetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~SetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - ThreadLocalTesterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::SetThreadLocal::set_value
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(ThreadLocalTesterBase* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_unittest.cc:42,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: butil::SetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - Set
    - IsSignaled
    - Signal
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::GetThreadLocal::GetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~GetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~GetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - ThreadLocalTesterBase**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::GetThreadLocal::set_ptr
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ptr(ThreadLocalTesterBase** ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_unittest.cc:62,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::GetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - IsSignaled
    - Signal
    - DCHECK
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 22
    functionName: butil::ThreadLocalTesterBase::ThreadLocalTesterBase
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalTesterBase(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: ~ThreadLocalTesterBase()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalTesterBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: butil::SetThreadLocal::SetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~SetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - ThreadLocalTesterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::SetThreadLocal::set_value
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(ThreadLocalTesterBase* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:41,1
    - Dst: Set
      Src: /src/brpc/test/thread_local_unittest.cc:42,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: butil::SetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - Set
    - IsSignaled
    - Signal
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - tlp
    - done
    argTypes:
    - TLPType*
    - butil::WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: butil::GetThreadLocal::GetThreadLocal
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetThreadLocal(TLPType* tlp, butil::WaitableEvent* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~GetThreadLocal()
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~GetThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - ThreadLocalTesterBase**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::GetThreadLocal::set_ptr
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ptr(ThreadLocalTesterBase** ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: IsSignaled
      Src: /src/brpc/test/thread_local_unittest.cc:61,1
    - Dst: Get
      Src: /src/brpc/test/thread_local_unittest.cc:62,1
    - Dst: Signal
      Src: /src/brpc/test/thread_local_unittest.cc:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::GetThreadLocal::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - IsSignaled
    - Signal
    - DCHECK
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/thread_local_unittest.cc:77,1
    - Dst: butil::DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/thread_local_unittest.cc:78,1
    - Dst: butil::ThreadLocalPointer::ThreadLocalPointer
      Src: /src/brpc/test/thread_local_unittest.cc:80,1
    - Dst: reinterpret_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:83,1
    - Dst: GetThreadLocal::set_ptr
      Src: /src/brpc/test/thread_local_unittest.cc:89,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:93,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:94,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:96,1
    - Dst: static_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:96,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:99,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:100,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:102,1
    - Dst: static_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:102,1
    - Dst: SetThreadLocal::set_value
      Src: /src/brpc/test/thread_local_unittest.cc:106,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:109,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:110,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:111,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:114,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:115,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:117,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:121,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:122,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:124,1
    - Dst: static_cast<ThreadLocalTesterBase*>
      Src: /src/brpc/test/thread_local_unittest.cc:124,1
    - Dst: SetThreadLocal::set_value
      Src: /src/brpc/test/thread_local_unittest.cc:127,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:129,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:130,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:131,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:134,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:135,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:137,1
    - Dst: butil::WaitableEvent::Reset
      Src: /src/brpc/test/thread_local_unittest.cc:141,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/thread_local_unittest.cc:142,1
    - Dst: butil::WaitableEvent::Wait
      Src: /src/brpc/test/thread_local_unittest.cc:143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_local_unittest.cc:144,1
    - Dst: butil::DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/thread_local_unittest.cc:146,1
    - Dst: butil::DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/thread_local_unittest.cc:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 148
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::DelegateSimpleThreadPool::JoinAll
    - static_cast<ThreadLocalTesterBase*>
    - GetThreadLocal::set_ptr
    - butil::DelegateSimpleThreadPool::Start
    - butil::ThreadLocalPointer::ThreadLocalPointer
    - butil::WaitableEvent::Reset
    - butil::WaitableEvent::Wait
    - reinterpret_cast<ThreadLocalTesterBase*>
    - butil::DelegateSimpleThreadPool::AddWork
    - EXPECT_EQ
    - SetThreadLocal::set_value
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, Pointer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocalBoolean::ThreadLocalBoolean
      Src: /src/brpc/test/thread_local_unittest.cc:152,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_local_unittest.cc:153,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:153,1
    - Dst: butil::ThreadLocalBoolean::Set
      Src: /src/brpc/test/thread_local_unittest.cc:155,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_local_unittest.cc:156,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:156,1
    - Dst: butil::ThreadLocalBoolean::Set
      Src: /src/brpc/test/thread_local_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_local_unittest.cc:159,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:159,1
    - Dst: butil::ThreadLocalBoolean::ThreadLocalBoolean
      Src: /src/brpc/test/thread_local_unittest.cc:164,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_local_unittest.cc:165,1
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/test/thread_local_unittest.cc:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_local_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadLocalBoolean::ThreadLocalBoolean
    - EXPECT_TRUE
    - butil::ThreadLocalBoolean::Set
    - EXPECT_FALSE
    - butil::ThreadLocalBoolean::Get
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, Boolean)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ReducerTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ReducerTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 41
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, atomicity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:45,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:47,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:47,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:51,1
    - Dst: boost::any_cast<unsigned int>
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:51,1
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:55,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:55,1
    - Dst: ASSERT_DOUBLE_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:57,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:57,1
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:59,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:60,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:62,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 63
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_DOUBLE_EQ
    - bvar::Adder::Adder
    - boost::any_cast<unsigned int>
    - bvar::Adder::valid
    - bvar::Adder::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, adder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:69,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:70,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:74,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 76
    functionName: thread_counter
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_counter(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:80,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:81,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:83,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:85,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 87
    functionName: add_atomic
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::atomic*::fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *add_atomic(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:93,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:102,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:102,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - num_thread
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 104
    functionName: start_perf_test_with_atomic
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - pthread_create
    - butil::atomic::load
    - pthread_join
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_atomic(size_t num_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:108,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:108,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:111,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:120,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - num_thread
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 122
    functionName: start_perf_test_with_adder
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - pthread_join
    - bvar::Adder::Adder
    - pthread_create
    - bvar::Adder::valid
    - EXPECT_EQ
    - bvar::Adder::get_value
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_adder(size_t num_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start_perf_test_with_adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:129,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:129,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:130,1
    - Dst: start_perf_test_with_atomic
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:134,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:134,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 135
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - start_perf_test_with_adder
    - start_perf_test_with_atomic
    - LOG
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:139,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:139,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:141,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:143,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:143,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:145,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:147,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:147,1
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:150,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:150,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:152,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:154,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:154,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:156,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:158,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:158,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:160,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:160,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 161
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::GetJsService::jquery_min
    - bvar::Miner::Miner
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::Miner::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, Min)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:165,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:165,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:166,1
    - Dst: bvar::Maxer::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:168,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:170,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:172,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:172,1
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:175,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:175,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:175,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:176,1
    - Dst: bvar::Maxer::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:178,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:180,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:182,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:182,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:184,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:184,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 185
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - bvar::Maxer::get_value
    - bvar::Maxer::Maxer
    - bvar::Maxer::valid
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:190,1
    - Dst: valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:190,1
    - Dst: get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 192
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - get_value
    - valid
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, global)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:195,1
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:196,1
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:197,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:210,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:212,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:212,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:213,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:213,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:221,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:231,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:232,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 248
    functionName: ReducerTest_window
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::gettimeofday_us
    - bvar::Adder::Adder
    - logging::StringSink::find
    - bvar::Miner::Miner
    - bvar::Maxer::get_value
    - usleep
    - bvar::Maxer::Maxer
    - logging::SetLogSink
    - LOG
    - bvar::Adder::get_value
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void ReducerTest_window()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReducerTest_window
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:252,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:254,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:256,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:256,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:257,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:258,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 250
    functionDepth: 2
    functionLinenumber: 250
    functionLinenumberEnd: 261
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - logging::StringSink::find
    - ReducerTest_window
    - ASSERT_NE
    - sleep
    - logging::SetLogSink
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - x2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 266
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo(int x2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 269
    functionName: operator+=(const Foo& rhs)
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const Foo& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' f'
    argTypes:
    - std::ostream
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 274
    functionName: '& operator<<(std::ostream& os, const Foo& f)'
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:277,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:278,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:278,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:279,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:279,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder::Adder
    - ASSERT_EQ
    - bvar::Adder::get_value
    - Foo
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, non_primitive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:290,1
    - Dst: pthread_self
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:290,1
    - Dst: StringAppenderResult::StringAppenderResult
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:300,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:302,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 304
    functionName: string_appender
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - LOG
    - pthread_self
    - StringAppenderResult::StringAppenderResult
    linkageType: ''
    returnType: void
    signature: void * string_appender(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:307,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:310,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:311,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:313,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:316,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:318,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:323,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:324,1
    - Dst: strtoll
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:326,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:327,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:327,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:327,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:328,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:328,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:329,1
    - Dst: memcmp
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:331,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:331,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:331,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:333,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 335
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - strtoll
    - std::string::c_str
    - pthread_join
    - bvar::Adder::Adder
    - butil::StringSplitter::length
    - pthread_create
    - arraysize
    - butil::StringSplitter::field
    - butil::hash_map::size
    - usleep
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::Adder::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, non_primitive_mt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:338,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:341,1
    - Dst: bvar::Window::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 344
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder::Adder
    - sleep
    - ASSERT_EQ
    - bvar::Window::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, simple_window)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ReducerTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ReducerTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 41
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, atomicity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:45,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:47,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:47,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:51,1
    - Dst: boost::any_cast<unsigned int>
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:51,1
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:55,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:55,1
    - Dst: ASSERT_DOUBLE_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:57,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:57,1
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:59,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:60,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:62,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 63
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_DOUBLE_EQ
    - bvar::Adder::Adder
    - boost::any_cast<unsigned int>
    - bvar::Adder::valid
    - bvar::Adder::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, adder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:69,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:70,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:74,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 76
    functionName: thread_counter
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_counter(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:80,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:81,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:83,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:85,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 87
    functionName: add_atomic
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::atomic*::fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *add_atomic(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:93,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:102,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:102,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - num_thread
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 104
    functionName: start_perf_test_with_atomic
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - pthread_create
    - butil::atomic::load
    - pthread_join
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_atomic(size_t num_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:108,1
    - Dst: bvar::Adder::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:108,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:111,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:120,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - num_thread
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 122
    functionName: start_perf_test_with_adder
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - pthread_join
    - bvar::Adder::Adder
    - pthread_create
    - bvar::Adder::valid
    - EXPECT_EQ
    - bvar::Adder::get_value
    linkageType: ''
    returnType: long
    signature: long start_perf_test_with_adder(size_t num_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start_perf_test_with_adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:129,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:129,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:130,1
    - Dst: start_perf_test_with_atomic
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:134,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:134,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 135
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - start_perf_test_with_adder
    - start_perf_test_with_atomic
    - LOG
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:139,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:139,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:141,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:143,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:143,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:145,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:147,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:147,1
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:150,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:150,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:152,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:154,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:154,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:156,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:158,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:158,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:160,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:160,1
    - Dst: bvar::Miner::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 161
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::GetJsService::jquery_min
    - bvar::Miner::Miner
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::Miner::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, Min)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:165,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:165,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:166,1
    - Dst: bvar::Maxer::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:168,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:170,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:172,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:172,1
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:175,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:175,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:175,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:176,1
    - Dst: bvar::Maxer::valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:178,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:180,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:182,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:182,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:184,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:184,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 185
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - bvar::Maxer::get_value
    - bvar::Maxer::Maxer
    - bvar::Maxer::valid
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:190,1
    - Dst: valid
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:190,1
    - Dst: get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 192
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - get_value
    - valid
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, global)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:195,1
    - Dst: bvar::Maxer::Maxer
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:196,1
    - Dst: bvar::Miner::Miner
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:197,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:210,1
    - Dst: bvar::Maxer::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:212,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:212,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:213,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:213,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:221,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:231,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:232,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 248
    functionName: ReducerTest_window
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - butil::gettimeofday_us
    - bvar::Adder::Adder
    - logging::StringSink::find
    - bvar::Miner::Miner
    - bvar::Maxer::get_value
    - usleep
    - bvar::Maxer::Maxer
    - logging::SetLogSink
    - LOG
    - bvar::Adder::get_value
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void ReducerTest_window()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReducerTest_window
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:252,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:254,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:256,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:256,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:257,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:258,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 250
    functionDepth: 2
    functionLinenumber: 250
    functionLinenumberEnd: 261
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - logging::StringSink::find
    - ReducerTest_window
    - ASSERT_NE
    - sleep
    - logging::SetLogSink
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - x2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 266
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo(int x2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 269
    functionName: operator+=(const Foo& rhs)
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const Foo& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' f'
    argTypes:
    - std::ostream
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 274
    functionName: '& operator<<(std::ostream& os, const Foo& f)'
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:277,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:278,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:278,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:279,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:279,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder::Adder
    - ASSERT_EQ
    - bvar::Adder::get_value
    - Foo
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, non_primitive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:290,1
    - Dst: pthread_self
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:290,1
    - Dst: StringAppenderResult::StringAppenderResult
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:300,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:302,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 304
    functionName: string_appender
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - LOG
    - pthread_self
    - StringAppenderResult::StringAppenderResult
    linkageType: ''
    returnType: void
    signature: void * string_appender(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:307,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:310,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:311,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:313,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:316,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:318,1
    - Dst: bvar::Adder::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:323,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:324,1
    - Dst: strtoll
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:326,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:327,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:327,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:327,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:328,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:328,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:329,1
    - Dst: memcmp
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:331,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:331,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:331,1
    - Dst: arraysize
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:333,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 335
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - strtoll
    - std::string::c_str
    - pthread_join
    - bvar::Adder::Adder
    - butil::StringSplitter::length
    - pthread_create
    - arraysize
    - butil::StringSplitter::field
    - butil::hash_map::size
    - usleep
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::Adder::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, non_primitive_mt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:338,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:341,1
    - Dst: bvar::Window::get_value
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 344
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_reducer_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder::Adder
    - sleep
    - ASSERT_EQ
    - bvar::Window::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReducerTest, simple_window)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ProfilerStart
    functionSourceFile: /src/brpc/test/gperftools_helper.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ProfilerStart(const char*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ProfilerStop
    functionSourceFile: /src/brpc/test/gperftools_helper.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProfilerStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ProfilerFlush
    functionSourceFile: /src/brpc/test/gperftools_helper.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProfilerFlush()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:20,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:21,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:21,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:21,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:22,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:22,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:22,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:23,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:23,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:23,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:24,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:24,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:24,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:25,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:25,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:25,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:26,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:26,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 27
    functionName: TestFindSymbol1
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::StackTrace::ToString
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::FindSymbol
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 2
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: TestFindSymbol2
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: TestFindSymbol3
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol3()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:57,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:71,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/stack_trace_unittest.cc:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 133
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - EXPECT_TRUE
    - StackTrace::Addresses
    - std::string::find
    - ASSERT_GE
    - StackTrace::OutputToStream
    - StackTrace::ToString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, MAYBE_OutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: StackTrace::FrameCount
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: malloc
      Src: /src/brpc/test/stack_trace_unittest.cc:140,1
    - Dst: StackTrace::CopyAddressTo
      Src: /src/brpc/test/stack_trace_unittest.cc:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:146,1
    - Dst: VLOG
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: free
      Src: /src/brpc/test/stack_trace_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 149
    functionName: butil::debug::CheckDebugOutputToStream
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - std::ostringstream::str
    - free
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - malloc
    - StackTrace::CopyAddressTo
    - StackTrace::FrameCount
    - VLOG
    linkageType: ''
    returnType: void
    signature: void CheckDebugOutputToStream(bool exclude_self)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:153,1
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CheckDebugOutputToStream
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugOutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::StackTrace
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugPrintBacktrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:185,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:187,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:190,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:192,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:196,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:198,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:201,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:203,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: ADD_FAILURE
      Src: /src/brpc/test/stack_trace_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 237
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - ADD_FAILURE
    - butil::debug::itoa_r_wrapper
    - brpc::GetJsService::jquery_min
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, itoa_r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 252
    functionName: butil::debug::TestFindSymbol1
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::StackTrace::ToString
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::FindSymbol
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 2
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: butil::debug::TestFindSymbol2
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: butil::debug::TestFindSymbol3
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol3()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:263,1
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 262
    functionDepth: 3
    functionLinenumber: 262
    functionLinenumberEnd: 265
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol2
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, find_symbol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:57,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:71,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/stack_trace_unittest.cc:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 133
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - EXPECT_TRUE
    - StackTrace::Addresses
    - std::string::find
    - ASSERT_GE
    - StackTrace::OutputToStream
    - StackTrace::ToString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, MAYBE_OutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: StackTrace::FrameCount
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: malloc
      Src: /src/brpc/test/stack_trace_unittest.cc:140,1
    - Dst: StackTrace::CopyAddressTo
      Src: /src/brpc/test/stack_trace_unittest.cc:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:146,1
    - Dst: VLOG
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: free
      Src: /src/brpc/test/stack_trace_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 149
    functionName: butil::debug::CheckDebugOutputToStream
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 1
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - std::ostringstream::str
    - free
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - malloc
    - StackTrace::CopyAddressTo
    - StackTrace::FrameCount
    - VLOG
    linkageType: ''
    returnType: void
    signature: void CheckDebugOutputToStream(bool exclude_self)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:153,1
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CheckDebugOutputToStream
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugOutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::StackTrace
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugPrintBacktrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:185,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:187,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:190,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:192,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:196,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:198,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:201,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:203,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: ADD_FAILURE
      Src: /src/brpc/test/stack_trace_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 237
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - ADD_FAILURE
    - butil::debug::itoa_r_wrapper
    - brpc::GetJsService::jquery_min
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, itoa_r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 252
    functionName: butil::debug::TestFindSymbol1
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::debug::StackTrace::ToString
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::FindSymbol
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 2
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: butil::debug::TestFindSymbol2
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: butil::debug::TestFindSymbol3
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol3()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:263,1
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 262
    functionDepth: 3
    functionLinenumber: 262
    functionLinenumberEnd: 265
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol2
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, find_symbol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:57,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:71,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/stack_trace_unittest.cc:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 133
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - EXPECT_TRUE
    - StackTrace::Addresses
    - std::string::find
    - ASSERT_GE
    - StackTrace::OutputToStream
    - StackTrace::ToString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, MAYBE_OutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: StackTrace::FrameCount
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: malloc
      Src: /src/brpc/test/stack_trace_unittest.cc:140,1
    - Dst: StackTrace::CopyAddressTo
      Src: /src/brpc/test/stack_trace_unittest.cc:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:146,1
    - Dst: VLOG
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: free
      Src: /src/brpc/test/stack_trace_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 149
    functionName: butil::debug::CheckDebugOutputToStream
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 2
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - std::ostringstream::str
    - free
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - malloc
    - StackTrace::CopyAddressTo
    - StackTrace::FrameCount
    - VLOG
    linkageType: ''
    returnType: void
    signature: void CheckDebugOutputToStream(bool exclude_self)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:153,1
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CheckDebugOutputToStream
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugOutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::StackTrace
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugPrintBacktrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:185,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:187,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:190,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:192,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:196,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:198,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:201,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:203,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: ADD_FAILURE
      Src: /src/brpc/test/stack_trace_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 237
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - ADD_FAILURE
    - butil::debug::itoa_r_wrapper
    - brpc::GetJsService::jquery_min
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, itoa_r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 252
    functionName: butil::debug::TestFindSymbol1
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 4
    functionsReached:
    - butil::debug::StackTrace::ToString
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::FindSymbol
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 2
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: butil::debug::TestFindSymbol2
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: butil::debug::TestFindSymbol3
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol3()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:263,1
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 262
    functionDepth: 3
    functionLinenumber: 262
    functionLinenumberEnd: 265
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol2
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, find_symbol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:57,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:61,1
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:71,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/stack_trace_unittest.cc:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:76,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    - Dst: std::string::find
      Src: /src/brpc/test/stack_trace_unittest.cc:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 133
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - EXPECT_TRUE
    - StackTrace::Addresses
    - std::string::find
    - ASSERT_GE
    - StackTrace::OutputToStream
    - StackTrace::ToString
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, MAYBE_OutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StackTrace::Addresses
      Src: /src/brpc/test/stack_trace_unittest.cc:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: StackTrace::FrameCount
      Src: /src/brpc/test/stack_trace_unittest.cc:139,1
    - Dst: malloc
      Src: /src/brpc/test/stack_trace_unittest.cc:140,1
    - Dst: StackTrace::CopyAddressTo
      Src: /src/brpc/test/stack_trace_unittest.cc:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/stack_trace_unittest.cc:143,1
    - Dst: StackTrace::OutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:146,1
    - Dst: VLOG
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/stack_trace_unittest.cc:147,1
    - Dst: free
      Src: /src/brpc/test/stack_trace_unittest.cc:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 149
    functionName: butil::debug::CheckDebugOutputToStream
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 3
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - std::ostringstream::str
    - free
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - malloc
    - StackTrace::CopyAddressTo
    - StackTrace::FrameCount
    - VLOG
    linkageType: ''
    returnType: void
    signature: void CheckDebugOutputToStream(bool exclude_self)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:153,1
    - Dst: butil::debug::CheckDebugOutputToStream
      Src: /src/brpc/test/stack_trace_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CheckDebugOutputToStream
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugOutputToStream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::StackTrace
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, DebugPrintBacktrace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 3
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LE
      Src: /src/brpc/test/stack_trace_unittest.cc:169,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:171,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:172,1
    - Dst: std::string
      Src: /src/brpc/test/stack_trace_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - i
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 174
    functionName: butil::debug::itoa_r_wrapper
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 3
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - std::string
    - CHECK_LE
    linkageType: ''
    returnType: std::string
    signature: std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t
      padding)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:185,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:187,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:190,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:192,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:196,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:198,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:201,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/stack_trace_unittest.cc:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:203,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/stack_trace_unittest.cc:204,1
    - Dst: ADD_FAILURE
      Src: /src/brpc/test/stack_trace_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:212,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:217,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:218,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:219,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:220,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/test/stack_trace_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    - Dst: butil::debug::itoa_r_wrapper
      Src: /src/brpc/test/stack_trace_unittest.cc:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 237
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::debug::internal::itoa_r
    - ADD_FAILURE
    - butil::debug::itoa_r_wrapper
    - brpc::GetJsService::jquery_min
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, itoa_r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/test/stack_trace_unittest.cc:245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:250,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    - Dst: butil::debug::StackTrace::ToString
      Src: /src/brpc/test/stack_trace_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 252
    functionName: butil::debug::TestFindSymbol1
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 6
    functionsReached:
    - butil::debug::StackTrace::ToString
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::FindSymbol
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 2
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: butil::debug::TestFindSymbol2
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 3
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol1
      Src: /src/brpc/test/stack_trace_unittest.cc:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: butil::debug::TestFindSymbol3
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol1
    linkageType: ''
    returnType: void
    signature: void TestFindSymbol3()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:263,1
    - Dst: butil::debug::TestFindSymbol2
      Src: /src/brpc/test/stack_trace_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 262
    functionDepth: 3
    functionLinenumber: 262
    functionLinenumberEnd: 265
    functionName: butil::debug::TEST_F
    functionSourceFile: /src/brpc/test/stack_trace_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::TestFindSymbol2
    linkageType: ''
    returnType: void
    signature: void TEST_F(StackTraceTest, find_symbol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:18,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:18,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/environment_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 20
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - EXPECT_TRUE
    - scoped_ptr::GetVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, GetVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:28,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:32,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:32,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/environment_unittest.cc:34,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/environment_unittest.cc:34,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:36,1
    - Dst: scoped_ptr::UnSetVar
      Src: /src/brpc/test/environment_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:40,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:43,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:43,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/environment_unittest.cc:45,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/environment_unittest.cc:45,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:47,1
    - Dst: scoped_ptr::UnSetVar
      Src: /src/brpc/test/environment_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 48
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string::c_str
    - scoped_ptr::GetVar
    - scoped_ptr::UnSetVar
    - scoped_ptr::SetVar
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, GetVarReverse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:53,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::HasVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, HasVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:61,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:61,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:64,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:67,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 69
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::HasVar
    - scoped_ptr::GetVar
    - EXPECT_EQ
    - scoped_ptr::SetVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, SetVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:77,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:80,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:83,1
    - Dst: scoped_ptr::UnSetVar
      Src: /src/brpc/test/environment_unittest.cc:83,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/environment_unittest.cc:86,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 87
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::HasVar
    - scoped_ptr::UnSetVar
    - EXPECT_FALSE
    - scoped_ptr::SetVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, UnSetVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:97,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:98,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:102,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:102,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:104,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:105,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:107,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:107,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:109,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:111,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:111,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:113,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:116,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:116,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:118,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:119,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:121,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 122
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - butil::AlterEnvironment
    - EnvironmentMap::clear
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, AlterEnvironment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/environment_unittest.cc:130,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:133,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:137,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:137,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:138,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:140,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:141,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:143,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:145,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:147,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:148,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:150,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:153,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:154,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:156,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:157,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 160
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string
    - butil::AlterEnvironment
    - EnvironmentMap::clear
    - scoped_ptr::scoped_ptr
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, AlterEnvironment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:18,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:18,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/environment_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 20
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - EXPECT_TRUE
    - scoped_ptr::GetVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, GetVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:28,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:32,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:32,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/environment_unittest.cc:34,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/environment_unittest.cc:34,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:36,1
    - Dst: scoped_ptr::UnSetVar
      Src: /src/brpc/test/environment_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:40,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:43,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:43,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/environment_unittest.cc:45,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/environment_unittest.cc:45,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:47,1
    - Dst: scoped_ptr::UnSetVar
      Src: /src/brpc/test/environment_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 48
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string::c_str
    - scoped_ptr::GetVar
    - scoped_ptr::UnSetVar
    - scoped_ptr::SetVar
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, GetVarReverse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:53,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::HasVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, HasVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:61,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:61,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:64,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:67,1
    - Dst: scoped_ptr::GetVar
      Src: /src/brpc/test/environment_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 69
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::HasVar
    - scoped_ptr::GetVar
    - EXPECT_EQ
    - scoped_ptr::SetVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, SetVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:77,1
    - Dst: scoped_ptr::SetVar
      Src: /src/brpc/test/environment_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:80,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:83,1
    - Dst: scoped_ptr::UnSetVar
      Src: /src/brpc/test/environment_unittest.cc:83,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/environment_unittest.cc:86,1
    - Dst: scoped_ptr::HasVar
      Src: /src/brpc/test/environment_unittest.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 87
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - scoped_ptr::HasVar
    - scoped_ptr::UnSetVar
    - EXPECT_FALSE
    - scoped_ptr::SetVar
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, UnSetVar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:97,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:98,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:102,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:102,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:104,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:105,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:107,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:107,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:109,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:111,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:111,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:113,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:116,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:116,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:118,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:119,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:121,1
    - Dst: string16
      Src: /src/brpc/test/environment_unittest.cc:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 122
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - butil::AlterEnvironment
    - EnvironmentMap::clear
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, AlterEnvironment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/environment_unittest.cc:130,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:133,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:137,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:137,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:138,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:140,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:141,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:143,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:145,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:147,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:148,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:150,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/environment_unittest.cc:153,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:154,1
    - Dst: EnvironmentMap::clear
      Src: /src/brpc/test/environment_unittest.cc:156,1
    - Dst: std::string
      Src: /src/brpc/test/environment_unittest.cc:157,1
    - Dst: butil::AlterEnvironment
      Src: /src/brpc/test/environment_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/environment_unittest.cc:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 160
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/environment_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::string
    - butil::AlterEnvironment
    - EnvironmentMap::clear
    - scoped_ptr::scoped_ptr
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, AlterEnvironment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: uname
      Src: /src/brpc/test/bthread_fd_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - uname
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, read_kernel_version)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: ClientMeta
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ClientMeta
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:93,1
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:99,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:105,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:106,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:110,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 116
    functionName: process_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - write
    - read
    - kevent
    - EV_SET
    - LOG
    - epoll_ctl
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:119,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:132,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:132,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:137,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:141,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:141,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:150,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:150,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:163,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:165,1
    - Dst: bthread_startv
      Src: /src/brpc/test/bthread_fd_unittest.cpp:181,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:185,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:187,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 193
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - epoll_wait
    - bthread_startv
    - bthread_usleep
    - kevent
    - process_thread
    - bthread_fd_wait
    - PLOG
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:199,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:206,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:210,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:210,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:211,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:214,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:217,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 222
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - write
    - EXPECT_EQ
    - read
    - berror
    - bthread_fd_wait
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 231
    functionName: fmix32
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t fmix32 ( uint32_t h )
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:259,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:261,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:267,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_fd_unittest.cpp:267,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:269,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_fd_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:279,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:292,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:294,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:294,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:296,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:302,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:304,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:304,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:309,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:310,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:316,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:318,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:318,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:324,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:328,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:330,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:332,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:341,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:341,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:344,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:346,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:350,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 235
    functionDepth: 2
    functionLinenumber: 235
    functionLinenumberEnd: 355
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - pthread_create
    - bthread_join
    - epoll_create
    - butil::Timer::start
    - fcntl
    - kqueue
    - kevent
    - LOG
    - fmix32
    - epoll_ctl
    - butil::Timer::Timer
    - socketpair
    - butil::Timer::u_elapsed
    - SocketMeta::SocketMeta
    - EV_SET
    - EpollMeta::EpollMeta
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::stop
    - ClientMeta::ClientMeta
    - pthread_join
    - ASSERT_GT
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:368,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:371,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:375,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:377,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:379,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:382,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:383,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:385,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:391,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:393,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 395
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - epoll_create
    - close
    - epoll_ctl
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, mod_closed_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:401,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:403,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:405,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - ASSERT_EQ
    - epoll_ctl
    - epoll_create
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, add_existing_fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:412,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:417,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_fd_unittest.cpp:421,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 423
    functionName: epoll_waiter
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - epoll_wait
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void * epoll_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:427,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:432,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:433,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:433,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:434,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:436,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:437,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:439,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:440,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:441,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 442
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - epoll_create
    - bthread_usleep
    - pthread_join
    - pthread_create
    - kqueue
    - bthread::interrupt_pthread
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:445,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:446,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 444
    functionDepth: 1
    functionLinenumber: 444
    functionLinenumberEnd: 448
    functionName: close_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_close
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * close_the_fd(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:453,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:455,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:462,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:469,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:473,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:473,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:474,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:477,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:479,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:479,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:481,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:483,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 485
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - bthread_close
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - butil::Timer::m_elapsed
    - bthread_fd_wait
    - ASSERT_LT
    - bthread_fd_timedwait
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, invalid_epoll_events)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:488,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:490,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 487
    functionDepth: 1
    functionLinenumber: 487
    functionLinenumberEnd: 495
    functionName: wait_for_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::milliseconds_from_now
    - bthread_fd_timedwait
    linkageType: ''
    returnType: void
    signature: void * wait_for_the_fd(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:499,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:501,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:503,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:503,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:504,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:507,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:507,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:508,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:509,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:510,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 512
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - bthread_close
    - bthread_start_urgent
    - pthread_join
    - butil::Timer::start
    - butil::Timer::stop
    - pthread_create
    - bthread_join
    - butil::Timer::m_elapsed
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:518,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:518,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:519,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:522,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:522,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:523,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:524,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:528,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:530,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:534,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - bthread_close
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - butil::Timer::m_elapsed
    - ASSERT_LT
    - bthread_fd_timedwait
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, close_should_wakeup_waiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:541,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 537
    functionDepth: 1
    functionLinenumber: 537
    functionLinenumberEnd: 543
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - ASSERT_EQ
    - bthread_close
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, close_definitely_invalid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:547,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:548,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:549,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 545
    functionDepth: 1
    functionLinenumber: 545
    functionLinenumberEnd: 550
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_close
    - ASSERT_EQ
    - pipe
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, bthread_close_fd_which_did_not_call_bthread_functions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:555,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:557,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:559,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:561,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 552
    functionDepth: 1
    functionLinenumber: 552
    functionLinenumberEnd: 562
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - ASSERT_EQ
    - pipe
    - bthread_close
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, double_close)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:567,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:569,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:570,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:576,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:577,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:578,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: bthread_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:581,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:588,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:588,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:589,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:590,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:591,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:593,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:599,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:599,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 566
    functionDepth: 1
    functionLinenumber: 566
    functionLinenumberEnd: 601
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - endpoint2sockaddr
    - bthread_connect
    - socket
    - butil::EndPoint::EndPoint
    - butil::milliseconds_from_now
    - ASSERT_LE
    - butil::hostname2endpoint
    - bthread_timed_connect
    - butil::is_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, bthread_connect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:605,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:608,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:608,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:609,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:610,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:614,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:615,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:616,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:617,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:619,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:620,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:629,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/bthread_fd_unittest.cpp:629,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 603
    functionDepth: 1
    functionLinenumber: 603
    functionLinenumberEnd: 631
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - endpoint2sockaddr
    - ASSERT_GE
    - butil::is_connected
    - socket
    - butil::tcp_connect
    - butil::EndPoint::EndPoint
    - butil::cpuwide_time_ms
    - bthread_timed_connect
    - butil::hostname2endpoint
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:635,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 637
    functionName: ConnectThread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterruptImpl
    linkageType: ''
    returnType: void
    signature: void * ConnectThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:641,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_fd_unittest.cpp:641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:642,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:643,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 639
    functionDepth: 1
    functionLinenumber: 639
    functionLinenumberEnd: 644
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_background
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:647,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:648,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 649
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterrupt
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: uname
      Src: /src/brpc/test/bthread_fd_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - uname
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, read_kernel_version)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: ClientMeta
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ClientMeta
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:93,1
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:99,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:105,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:106,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:110,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 116
    functionName: process_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 1
    functionsReached:
    - write
    - read
    - kevent
    - EV_SET
    - LOG
    - epoll_ctl
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:119,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:132,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:132,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:137,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:141,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:141,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:150,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:150,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:163,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:165,1
    - Dst: bthread_startv
      Src: /src/brpc/test/bthread_fd_unittest.cpp:181,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:185,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:187,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 193
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - epoll_wait
    - bthread_startv
    - bthread_usleep
    - kevent
    - process_thread
    - bthread_fd_wait
    - PLOG
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:199,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:206,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:210,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:210,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:211,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:214,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:217,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 222
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - write
    - EXPECT_EQ
    - read
    - berror
    - bthread_fd_wait
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 231
    functionName: fmix32
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t fmix32 ( uint32_t h )
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:259,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:261,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:267,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_fd_unittest.cpp:267,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:269,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_fd_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:279,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:292,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:294,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:294,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:296,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:302,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:304,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:304,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:309,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:310,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:316,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:318,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:318,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:324,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:328,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:330,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:332,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:341,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:341,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:344,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:346,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:350,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 235
    functionDepth: 2
    functionLinenumber: 235
    functionLinenumberEnd: 355
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_usleep
    - pthread_create
    - bthread_join
    - epoll_create
    - butil::Timer::start
    - fcntl
    - kqueue
    - kevent
    - LOG
    - fmix32
    - epoll_ctl
    - butil::Timer::Timer
    - socketpair
    - butil::Timer::u_elapsed
    - SocketMeta::SocketMeta
    - EV_SET
    - EpollMeta::EpollMeta
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::stop
    - ClientMeta::ClientMeta
    - pthread_join
    - ASSERT_GT
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:368,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:371,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:375,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:377,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:379,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:382,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:383,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:385,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:391,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:393,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 395
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - epoll_create
    - close
    - epoll_ctl
    - berror
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, mod_closed_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:401,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:403,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:405,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - ASSERT_EQ
    - epoll_ctl
    - epoll_create
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, add_existing_fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:412,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:417,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_fd_unittest.cpp:421,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 423
    functionName: epoll_waiter
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - epoll_wait
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void * epoll_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:427,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:432,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:433,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:433,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:434,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:436,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:437,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:439,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:440,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:441,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 442
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - epoll_create
    - bthread_usleep
    - pthread_join
    - pthread_create
    - kqueue
    - bthread::interrupt_pthread
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:445,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:446,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 444
    functionDepth: 1
    functionLinenumber: 444
    functionLinenumberEnd: 448
    functionName: close_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_close
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * close_the_fd(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:453,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:455,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:462,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:469,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:473,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:473,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:474,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:477,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:479,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:479,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:481,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:483,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 485
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - bthread_close
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - butil::Timer::m_elapsed
    - bthread_fd_wait
    - ASSERT_LT
    - bthread_fd_timedwait
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, invalid_epoll_events)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:488,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:490,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 487
    functionDepth: 1
    functionLinenumber: 487
    functionLinenumberEnd: 495
    functionName: wait_for_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::milliseconds_from_now
    - bthread_fd_timedwait
    linkageType: ''
    returnType: void
    signature: void * wait_for_the_fd(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:499,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:501,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:503,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:503,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:504,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:507,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:507,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:508,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:509,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:510,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 512
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - bthread_close
    - bthread_start_urgent
    - pthread_join
    - butil::Timer::start
    - butil::Timer::stop
    - pthread_create
    - bthread_join
    - butil::Timer::m_elapsed
    - ASSERT_LT
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:518,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:518,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:519,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:522,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:522,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:523,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:524,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:528,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:530,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:534,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - bthread_close
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - bthread_join
    - butil::Timer::m_elapsed
    - ASSERT_LT
    - bthread_fd_timedwait
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, close_should_wakeup_waiter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:541,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 537
    functionDepth: 1
    functionLinenumber: 537
    functionLinenumberEnd: 543
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - ASSERT_EQ
    - bthread_close
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, close_definitely_invalid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:547,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:548,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:549,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 545
    functionDepth: 1
    functionLinenumber: 545
    functionLinenumberEnd: 550
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_close
    - ASSERT_EQ
    - pipe
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, bthread_close_fd_which_did_not_call_bthread_functions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:555,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:557,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:559,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:561,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 552
    functionDepth: 1
    functionLinenumber: 552
    functionLinenumberEnd: 562
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - ASSERT_EQ
    - pipe
    - bthread_close
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, double_close)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:567,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:569,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:570,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:576,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:577,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:578,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: bthread_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:581,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:588,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:588,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:589,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:590,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:591,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:593,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:599,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:599,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 566
    functionDepth: 1
    functionLinenumber: 566
    functionLinenumberEnd: 601
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - endpoint2sockaddr
    - bthread_connect
    - socket
    - butil::EndPoint::EndPoint
    - butil::milliseconds_from_now
    - ASSERT_LE
    - butil::hostname2endpoint
    - bthread_timed_connect
    - butil::is_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, bthread_connect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:605,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:608,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:608,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:609,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:610,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:614,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:615,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:616,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:617,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:619,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:620,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:629,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/bthread_fd_unittest.cpp:629,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 603
    functionDepth: 1
    functionLinenumber: 603
    functionLinenumberEnd: 631
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - endpoint2sockaddr
    - ASSERT_GE
    - butil::is_connected
    - socket
    - butil::tcp_connect
    - butil::EndPoint::EndPoint
    - butil::cpuwide_time_ms
    - bthread_timed_connect
    - butil::hostname2endpoint
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:635,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 637
    functionName: ConnectThread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterruptImpl
    linkageType: ''
    returnType: void
    signature: void * ConnectThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:641,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_fd_unittest.cpp:641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:642,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:643,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 639
    functionDepth: 1
    functionLinenumber: 639
    functionLinenumberEnd: 644
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - bthread_start_background
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:647,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:648,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 649
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterrupt
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:15,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:17,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:18,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:19,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:21,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:22,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:22,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 24
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/thread_id_name_manager_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void TEST_F(ThreadIdNameManagerTest, ThreadNameInterning)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:27,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:29,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:30,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:31,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:33,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:34,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:34,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:37,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:37,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/thread_id_name_manager_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - EXPECT_EQ
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void TEST_F(ThreadIdNameManagerTest, ResettingNameKeepsCorrectInternedValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:15,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:17,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:18,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:19,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:21,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:22,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:22,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 24
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/thread_id_name_manager_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void TEST_F(ThreadIdNameManagerTest, ThreadNameInterning)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:27,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:29,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:30,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:31,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:33,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:34,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:34,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:37,1
    - Dst: butil::ThreadIdNameManager*::GetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:37,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/test/thread_id_name_manager_unittest.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/thread_id_name_manager_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - EXPECT_EQ
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void TEST_F(ThreadIdNameManagerTest, ResettingNameKeepsCorrectInternedValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: ~Target()
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Target()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::TargetWithFactory
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TargetWithFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: ~Target()
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Target()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::TargetWithFactory
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TargetWithFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:41,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 42
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:49,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:49,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 50
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Comparison)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr::WeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:54,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:54,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:60,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtr::WeakPtr
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, OutOfScope)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr::WeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:64,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:68,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:70,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:71,1
    - Dst: butil::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:73,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:74,1
    - Dst: butil::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 75
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - WeakPtr::get
    - WeakPtr::WeakPtr
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - butil::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Multiple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr::WeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:78,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:82,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:84,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:86,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:88,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 89
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WeakPtr::get
    - WeakPtr::WeakPtr
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, MultipleStaged)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:96,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 99
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Dereference)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:104,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:106,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 107
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, UpCast)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Target::AsWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:112,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 113
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Target::AsWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, SupportsWeakPtr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AsWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:118,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - WeakPtr::get
    - EXPECT_EQ
    - AsWeakPtr
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, DerivedTarget)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:125,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:126,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:126,1
    - Dst: WeakPtrFactory::InvalidateWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:128,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/weak_ptr_unittest.cc:129,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:129,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:135,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:136,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:136,1
    - Dst: WeakPtrFactory::InvalidateWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:138,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:138,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/weak_ptr_unittest.cc:139,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 140
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WeakPtrFactory::InvalidateWeakPtrs
    - WeakPtr::get
    - WeakPtrFactory::HasWeakPtrs
    - EXPECT_FALSE
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, InvalidateWeakPtrs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:147,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:147,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/weak_ptr_unittest.cc:149,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WeakPtrFactory::GetWeakPtr
    - WeakPtrFactory::HasWeakPtrs
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, HasWeakPtrs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: ~Target()
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Target()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::TargetWithFactory
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TargetWithFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: ~Target()
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Target()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::TargetWithFactory
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TargetWithFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:41,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 42
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:49,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:49,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 50
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Comparison)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr::WeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:54,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:54,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:60,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtr::WeakPtr
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, OutOfScope)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr::WeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:64,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:68,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:70,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:71,1
    - Dst: butil::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:73,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:74,1
    - Dst: butil::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 75
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - WeakPtr::get
    - WeakPtr::WeakPtr
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - butil::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Multiple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr::WeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:78,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:82,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:84,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:86,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:88,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 89
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WeakPtr::get
    - WeakPtr::WeakPtr
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, MultipleStaged)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:96,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 99
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, Dereference)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:104,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:106,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 107
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrFactoryTest, UpCast)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Target::AsWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:112,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 113
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Target::AsWeakPtr
    - WeakPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, SupportsWeakPtr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AsWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:118,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - WeakPtr::get
    - EXPECT_EQ
    - AsWeakPtr
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, DerivedTarget)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:125,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:126,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:126,1
    - Dst: WeakPtrFactory::InvalidateWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:128,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:128,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/weak_ptr_unittest.cc:129,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:129,1
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:135,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:136,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:136,1
    - Dst: WeakPtrFactory::InvalidateWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/weak_ptr_unittest.cc:138,1
    - Dst: WeakPtr::get
      Src: /src/brpc/test/weak_ptr_unittest.cc:138,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/weak_ptr_unittest.cc:139,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 140
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WeakPtrFactory::InvalidateWeakPtrs
    - WeakPtr::get
    - WeakPtrFactory::HasWeakPtrs
    - EXPECT_FALSE
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, InvalidateWeakPtrs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtrFactory::GetWeakPtr
      Src: /src/brpc/test/weak_ptr_unittest.cc:146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/weak_ptr_unittest.cc:147,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:147,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/weak_ptr_unittest.cc:149,1
    - Dst: WeakPtrFactory::HasWeakPtrs
      Src: /src/brpc/test/weak_ptr_unittest.cc:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/weak_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WeakPtrFactory::GetWeakPtr
    - WeakPtrFactory::HasWeakPtrs
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(WeakPtrTest, HasWeakPtrs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:39,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:40,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:57,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:61,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:62,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 63
    functionName: EspTest::EspTest
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - pipe
    - Socket::Create
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void EspTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~EspTest()
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EspTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:70,1
    - Dst: brpc::EspMessage::body::append
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:77,1
    - Dst: brpc::policy::SerializeEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:78,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:80,1
    - Dst: brpc::policy::PackEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:81,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:81,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:83,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - ' cntl'
    - msg
    argTypes:
    - brpc::Controller
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 84
    functionName: EspTest::WriteResponse
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::EspMessage::body::append
    - brpc::policy::PackEspRequest
    - butil::IOBuf::size
    - brpc::EspMessage::EspMessage
    - call_id
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeEspRequest
    linkageType: ''
    returnType: void
    signature: void WriteResponse(brpc::Controller& cntl, int msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:91,1
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:92,1
    - Dst: brpc::EspMessage::body::append
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:97,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:99,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:102,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:102,1
    - Dst: id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:102,1
    - Dst: brpc::policy::SerializeEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:105,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:106,1
    - Dst: brpc::EspMessage::body::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:106,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:106,1
    - Dst: brpc::policy::global_esp_authenticator
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:108,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:109,1
    - Dst: brpc::policy::PackEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:110,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:110,1
    - Dst: brpc::Authenticator*::GenerateCredential
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:113,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:115,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: WriteResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:118,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:120,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:121,1
    - Dst: brpc::policy::ParseEspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:125,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:125,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:127,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:128,1
    - Dst: brpc::policy::ProcessEspResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:130,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:132,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:133,1
    - Dst: brpc::EspMessage::body::to_string
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 134
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseEspMessage
    - ASSERT_EQ
    - brpc::Authenticator*::GenerateCredential
    - brpc::Controller::Failed
    - brpc::EspMessage::body::size
    - brpc::EspMessage::EspMessage
    - brpc::policy::global_esp_authenticator
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - id
    - brpc::EspMessage::body::append
    - brpc::policy::PackEspRequest
    - brpc::policy::ProcessEspResponse
    - ASSERT_FALSE
    - WriteResponse
    - butil::IOPortal::IOPortal
    - brpc::ParseResult::error
    - brpc::policy::SerializeEspRequest
    - butil::IOBuf::size
    - brpc::Controller::call_id
    - butil::IOPortal::append_from_file_descriptor
    - brpc::EspMessage::body::to_string
    - brpc::Controller::Controller
    - brpc::ParseResult::message
    - ReAddress
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(EspTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:137,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:140,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:140,1
    - Dst: id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:140,1
    - Dst: WriteResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:142,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:144,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:145,1
    - Dst: brpc::policy::ParseEspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:149,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:149,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:151,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:152,1
    - Dst: brpc::policy::ProcessEspResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:154,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:156,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 157
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseEspMessage
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::policy::ProcessEspResponse
    - brpc::Controller::Failed
    - brpc::EspMessage::EspMessage
    - brpc::Controller::Controller
    - WriteResponse
    - brpc::ParseResult::message
    - ReAddress
    - butil::IOPortal::IOPortal
    - brpc::SetTrackMeAddress
    - id
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(EspTest, wrong_response_head)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:57,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:61,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:62,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 63
    functionName: EspTest::EspTest
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - pipe
    - Socket::Create
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void EspTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~EspTest()
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EspTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:70,1
    - Dst: brpc::EspMessage::body::append
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:77,1
    - Dst: brpc::policy::SerializeEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:78,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:80,1
    - Dst: brpc::policy::PackEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:81,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:81,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:83,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - ' cntl'
    - msg
    argTypes:
    - brpc::Controller
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 84
    functionName: EspTest::WriteResponse
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::EspMessage::body::append
    - brpc::policy::PackEspRequest
    - butil::IOBuf::size
    - brpc::EspMessage::EspMessage
    - call_id
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeEspRequest
    linkageType: ''
    returnType: void
    signature: void WriteResponse(brpc::Controller& cntl, int msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:91,1
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:92,1
    - Dst: brpc::EspMessage::body::append
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:97,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:99,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:102,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:102,1
    - Dst: id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:102,1
    - Dst: brpc::policy::SerializeEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:105,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:106,1
    - Dst: brpc::EspMessage::body::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:106,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:106,1
    - Dst: brpc::policy::global_esp_authenticator
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:108,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:109,1
    - Dst: brpc::policy::PackEspRequest
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:110,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:110,1
    - Dst: brpc::Authenticator*::GenerateCredential
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:113,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:115,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:116,1
    - Dst: WriteResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:118,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:120,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:121,1
    - Dst: brpc::policy::ParseEspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:125,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:125,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:127,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:128,1
    - Dst: brpc::policy::ProcessEspResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:130,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:132,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:133,1
    - Dst: brpc::EspMessage::body::to_string
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 134
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseEspMessage
    - ASSERT_EQ
    - brpc::Authenticator*::GenerateCredential
    - brpc::Controller::Failed
    - brpc::EspMessage::body::size
    - brpc::EspMessage::EspMessage
    - brpc::policy::global_esp_authenticator
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - id
    - brpc::EspMessage::body::append
    - brpc::policy::PackEspRequest
    - brpc::policy::ProcessEspResponse
    - ASSERT_FALSE
    - WriteResponse
    - butil::IOPortal::IOPortal
    - brpc::ParseResult::error
    - brpc::policy::SerializeEspRequest
    - butil::IOBuf::size
    - brpc::Controller::call_id
    - butil::IOPortal::append_from_file_descriptor
    - brpc::EspMessage::body::to_string
    - brpc::Controller::Controller
    - brpc::ParseResult::message
    - ReAddress
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(EspTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::EspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:137,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:140,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:140,1
    - Dst: id
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:140,1
    - Dst: WriteResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:142,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:144,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:145,1
    - Dst: brpc::policy::ParseEspMessage
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:149,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:149,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:151,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:152,1
    - Dst: brpc::policy::ProcessEspResponse
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:154,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:156,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_esp_protocol_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 157
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_esp_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseEspMessage
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::policy::ProcessEspResponse
    - brpc::Controller::Failed
    - brpc::EspMessage::EspMessage
    - brpc::Controller::Controller
    - WriteResponse
    - brpc::ParseResult::message
    - ReAddress
    - butil::IOPortal::IOPortal
    - brpc::SetTrackMeAddress
    - id
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(EspTest, wrong_response_head)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mktime
      Src: /src/brpc/test/time_unittest.cc:44,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/time_unittest.cc:45,1
    - Dst: butil::Time::FromTimeT
      Src: /src/brpc/test/time_unittest.cc:46,1
    - Dst: butil::Time::FromTimeT
      Src: /src/brpc/test/time_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 50
    functionName: TimeTest::OVERRIDE
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Time::FromTimeT
    - mktime
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/brpc/test/time_unittest.cc:59,1
    - Dst: localtime_s
      Src: /src/brpc/test/time_unittest.cc:62,1
    - Dst: localtime_r
      Src: /src/brpc/test/time_unittest.cc:64,1
    - Dst: butil::Time::FromTimeT
      Src: /src/brpc/test/time_unittest.cc:68,1
    - Dst: Time::LocalExplode
      Src: /src/brpc/test/time_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:75,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:77,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:78,1
    - Dst: butil::FromLocalExploded
      Src: /src/brpc/test/time_unittest.cc:81,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:82,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:87,1
    - Dst: Time
      Src: /src/brpc/test/time_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:88,1
    - Dst: Time
      Src: /src/brpc/test/time_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:91,1
    - Dst: Time
      Src: /src/brpc/test/time_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:92,1
    - Dst: butil::Time::FromTimeT
      Src: /src/brpc/test/time_unittest.cc:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 93
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Time::FromTimeT
    - EXPECT_TRUE
    - Time::ToTimeT
    - localtime_s
    - Time::LocalExplode
    - butil::FromLocalExploded
    - Time
    - localtime_r
    - EXPECT_EQ
    - time
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, TimeT)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::FromJsTime
      Src: /src/brpc/test/time_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:98,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:98,1
    - Dst: butil::Time::FromJsTime
      Src: /src/brpc/test/time_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:100,1
    - Dst: Time::ToDoubleT
      Src: /src/brpc/test/time_unittest.cc:100,1
    - Dst: butil::Time::FromDoubleT
      Src: /src/brpc/test/time_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:102,1
    - Dst: Time::ToJsTime
      Src: /src/brpc/test/time_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 103
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Time::FromDoubleT
    - butil::Time::UnixEpoch
    - Time::ToDoubleT
    - butil::Time::FromJsTime
    - Time::ToJsTime
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, JsTime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Now
      Src: /src/brpc/test/time_unittest.cc:107,1
    - Dst: butil::Time::FromTimeVal
      Src: /src/brpc/test/time_unittest.cc:108,1
    - Dst: Time::ToTimeVal
      Src: /src/brpc/test/time_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Time::ToTimeVal
    - butil::Time::Now
    - butil::Time::FromTimeVal
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, FromTimeVal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::NowFromSystemTime
      Src: /src/brpc/test/time_unittest.cc:116,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:118,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/time_unittest.cc:120,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 124
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - Time::UTCExplode
    - EXPECT_EQ
    - butil::Time::NowFromSystemTime
    - butil::FromUTCExploded
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, FromExplodedWithMilliseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::FromTimeT
      Src: /src/brpc/test/time_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:128,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:130,1
    - Dst: Time::ToDoubleT
      Src: /src/brpc/test/time_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 131
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Time::FromTimeT
    - EXPECT_EQ
    - Time::ToDoubleT
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, ZeroIsSymmetric)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Now
      Src: /src/brpc/test/time_unittest.cc:134,1
    - Dst: Time::LocalExplode
      Src: /src/brpc/test/time_unittest.cc:136,1
    - Dst: butil::FromLocalExploded
      Src: /src/brpc/test/time_unittest.cc:138,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:143,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Time::LocalExplode
    - butil::FromLocalExploded
    - butil::TimeDelta::FromSeconds
    - butil::Time::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, LocalExplode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Now
      Src: /src/brpc/test/time_unittest.cc:147,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:149,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/time_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:152,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Time::UTCExplode
    - butil::FromUTCExploded
    - butil::TimeDelta::FromSeconds
    - butil::Time::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, UTCExplode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Now
      Src: /src/brpc/test/time_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:159,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 162
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Time::Now
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, LocalMidnight)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/brpc/test/time_unittest.cc:169,1
    - Dst: memset
      Src: /src/brpc/test/time_unittest.cc:173,1
    - Dst: localtime_s
      Src: /src/brpc/test/time_unittest.cc:176,1
    - Dst: asctime_s
      Src: /src/brpc/test/time_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/time_unittest.cc:177,1
    - Dst: localtime_r
      Src: /src/brpc/test/time_unittest.cc:179,1
    - Dst: asctime_r
      Src: /src/brpc/test/time_unittest.cc:180,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:184,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:185,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 186
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - asctime_s
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - localtime_s
    - arraysize
    - memset
    - localtime_r
    - EXPECT_EQ
    - time
    - asctime_r
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:190,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:190,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 194
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::UTCExplode
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_DayOfWeekSunday)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:198,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:198,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::UTCExplode
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_DayOfWeekWednesday)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:206,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:206,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 210
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::UTCExplode
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_DayOfWeekSaturday)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:214,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:214,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:220,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:226,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 228
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:232,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 234
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest5)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:238,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 240
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:244,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest7)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:250,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 252
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:256,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 258
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest9)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:262,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTest10)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:271,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:273,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:273,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:274,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:276,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpoch0)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:283,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:285,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:285,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:286,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:288,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 289
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpoch1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:295,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:297,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:297,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:298,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:300,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 301
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpoch2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:307,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:309,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:309,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:310,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:310,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:312,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 313
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpochNeg1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:321,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:321,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/time_unittest.cc:323,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 324
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - Time::ToTimeT
    - EXPECT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpochNotNeg1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:330,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:330,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:332,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:332,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:333,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:333,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:335,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 336
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpochNeg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:342,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:344,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:344,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:345,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:347,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:347,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:348,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:348,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:350,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 351
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_TRUE
    - EXPECT_EQ
    - Time::ToTimeT
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEpoch1960)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/time_unittest.cc:355,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 356
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/time_unittest.cc:360,1
    - Dst: brpc::ParsePbFromString
      Src: /src/brpc/test/time_unittest.cc:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 361
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromString
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, DISABLED_ParseTimeTestInvalidString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:368,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:368,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:369,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:370,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:370,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:373,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:378,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:380,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:380,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:381,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:382,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:382,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:384,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:385,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:386,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:388,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:390,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:392,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:392,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:393,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:394,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:394,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:396,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:397,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:398,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:399,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:400,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:401,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:402,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:404,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:404,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:405,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:406,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:406,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:408,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:409,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:411,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:413,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:414,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:416,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:416,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:417,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:418,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:418,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:420,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:421,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:423,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:425,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:426,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:429,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:430,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:431,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:431,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:434,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:435,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:437,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:438,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:439,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:441,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:441,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:442,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:443,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:443,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:445,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:446,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:447,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:448,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:449,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:450,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:451,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:453,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:453,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:454,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:455,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:457,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:458,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:460,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:461,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:462,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:463,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:465,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:465,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:467,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:467,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:469,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:470,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:471,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:472,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:473,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:474,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:475,1
    - Dst: butil::Time::UnixEpoch
      Src: /src/brpc/test/time_unittest.cc:477,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:477,1
    - Dst: Time::UTCExplode
      Src: /src/brpc/test/time_unittest.cc:478,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:479,1
    - Dst: Time::Exploded::HasValidValues
      Src: /src/brpc/test/time_unittest.cc:479,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:481,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:482,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:483,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:484,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:485,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:487,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 101
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 488
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Time::UTCExplode
    - butil::Time::UnixEpoch
    - butil::TimeDelta::FromMilliseconds
    - butil::TimeDelta::FromMicroseconds
    - EXPECT_EQ
    - Time::Exploded::HasValidValues
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, ExplodeBeforeUnixEpoch)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::Max
      Src: /src/brpc/test/time_unittest.cc:491,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:492,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:493,1
    - Dst: butil::TimeDelta::Max
      Src: /src/brpc/test/time_unittest.cc:493,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/time_unittest.cc:494,1
    - Dst: butil::TimeDelta::FromDays
      Src: /src/brpc/test/time_unittest.cc:494,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/time_unittest.cc:495,1
    - Dst: TimeDelta
      Src: /src/brpc/test/time_unittest.cc:495,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 496
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::TimeDelta::FromDays
    - TimeDelta::is_max
    - TimeDelta
    - butil::TimeDelta::Max
    - EXPECT_GT
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, TimeDeltaMax)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::Max
      Src: /src/brpc/test/time_unittest.cc:499,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:500,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:500,1
    - Dst: TimeDelta::ToInternalValue
      Src: /src/brpc/test/time_unittest.cc:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:502,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:502,1
    - Dst: TimeDelta::InDays
      Src: /src/brpc/test/time_unittest.cc:502,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:503,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:503,1
    - Dst: TimeDelta::InHours
      Src: /src/brpc/test/time_unittest.cc:503,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:504,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:504,1
    - Dst: TimeDelta::InMinutes
      Src: /src/brpc/test/time_unittest.cc:504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:505,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:505,1
    - Dst: TimeDelta::InSecondsF
      Src: /src/brpc/test/time_unittest.cc:505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:506,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:506,1
    - Dst: TimeDelta::InSeconds
      Src: /src/brpc/test/time_unittest.cc:506,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:507,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:507,1
    - Dst: TimeDelta::InMillisecondsF
      Src: /src/brpc/test/time_unittest.cc:507,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:508,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:508,1
    - Dst: TimeDelta::InMilliseconds
      Src: /src/brpc/test/time_unittest.cc:508,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:509,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:509,1
    - Dst: TimeDelta::InMillisecondsRoundedUp
      Src: /src/brpc/test/time_unittest.cc:509,1
    - Dst: butil::TimeDelta::FromDays
      Src: /src/brpc/test/time_unittest.cc:511,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:511,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:512,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:512,1
    - Dst: butil::TimeDelta::FromHours
      Src: /src/brpc/test/time_unittest.cc:514,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:514,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:515,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:515,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/time_unittest.cc:517,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:517,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:518,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:518,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:520,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:520,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:521,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:521,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:523,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:523,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:524,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:524,1
    - Dst: butil::TimeDelta::FromSecondsD
      Src: /src/brpc/test/time_unittest.cc:526,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:526,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:527,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:527,1
    - Dst: butil::TimeDelta::FromMillisecondsD
      Src: /src/brpc/test/time_unittest.cc:529,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:530,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:530,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:532,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:533,1
    - Dst: TimeDelta::is_max
      Src: /src/brpc/test/time_unittest.cc:533,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 498
    functionDepth: 1
    functionLinenumber: 498
    functionLinenumberEnd: 534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromDays
    - butil::TimeDelta::FromMilliseconds
    - butil::TimeDelta::Max
    - butil::TimeDelta::FromSecondsD
    - TimeDelta::InMinutes
    - TimeDelta::InSeconds
    - TimeDelta::InDays
    - TimeDelta::InMillisecondsF
    - TimeDelta::ToInternalValue
    - butil::TimeDelta::FromHours
    - EXPECT_EQ
    - TimeDelta::InHours
    - TimeDelta::InMilliseconds
    - EXPECT_TRUE
    - TimeDelta::is_max
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromMicroseconds
    - TimeDelta::InSecondsF
    - std::numeric_limits<double>::infinity
    - butil::TimeDelta::FromSeconds
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::TimeDelta::FromMillisecondsD
    - TimeDelta::InMillisecondsRoundedUp
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, TimeDeltaMaxConversions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Max
      Src: /src/brpc/test/time_unittest.cc:537,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:538,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:538,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:539,1
    - Dst: butil::Time::Max
      Src: /src/brpc/test/time_unittest.cc:539,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/time_unittest.cc:540,1
    - Dst: butil::Time::Now
      Src: /src/brpc/test/time_unittest.cc:540,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/time_unittest.cc:541,1
    - Dst: Time
      Src: /src/brpc/test/time_unittest.cc:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Time::is_max
    - Time
    - EXPECT_GT
    - EXPECT_EQ
    - butil::Time::Now
    - butil::Time::Max
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, Max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Time::Max
      Src: /src/brpc/test/time_unittest.cc:545,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:546,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:546,1
    - Dst: Time::ToInternalValue
      Src: /src/brpc/test/time_unittest.cc:546,1
    - Dst: butil::Time::FromDoubleT
      Src: /src/brpc/test/time_unittest.cc:548,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:548,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:549,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:550,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:550,1
    - Dst: Time::ToDoubleT
      Src: /src/brpc/test/time_unittest.cc:550,1
    - Dst: butil::Time::FromJsTime
      Src: /src/brpc/test/time_unittest.cc:552,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:553,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:553,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:554,1
    - Dst: std::numeric_limits<double>::infinity
      Src: /src/brpc/test/time_unittest.cc:554,1
    - Dst: Time::ToJsTime
      Src: /src/brpc/test/time_unittest.cc:554,1
    - Dst: butil::Time::FromTimeT
      Src: /src/brpc/test/time_unittest.cc:556,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:556,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:557,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:557,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:558,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:558,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:558,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:562,1
    - Dst: static_cast<suseconds_t>
      Src: /src/brpc/test/time_unittest.cc:563,1
    - Dst: butil::Time::FromTimeVal
      Src: /src/brpc/test/time_unittest.cc:564,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:565,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:565,1
    - Dst: Time::ToTimeVal
      Src: /src/brpc/test/time_unittest.cc:566,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:567,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:567,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:568,1
    - Dst: static_cast<suseconds_t>
      Src: /src/brpc/test/time_unittest.cc:568,1
    - Dst: butil::Time::FromCFAbsoluteTime
      Src: /src/brpc/test/time_unittest.cc:573,1
    - Dst: std::numeric_limits<CFAbsoluteTime>::infinity
      Src: /src/brpc/test/time_unittest.cc:573,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:574,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:575,1
    - Dst: std::numeric_limits<CFAbsoluteTime>::infinity
      Src: /src/brpc/test/time_unittest.cc:575,1
    - Dst: Time::ToCFAbsoluteTime
      Src: /src/brpc/test/time_unittest.cc:576,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:581,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:582,1
    - Dst: Time::FromFileTime
      Src: /src/brpc/test/time_unittest.cc:583,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:584,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:584,1
    - Dst: Time::ToFileTime
      Src: /src/brpc/test/time_unittest.cc:585,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:586,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:587,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:587,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 544
    functionDepth: 1
    functionLinenumber: 544
    functionLinenumberEnd: 589
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - Time::ToTimeT
    - Time::ToTimeVal
    - Time::ToInternalValue
    - std::numeric_limits<CFAbsoluteTime>::infinity
    - EXPECT_EQ
    - butil::Time::Max
    - EXPECT_TRUE
    - Time::FromFileTime
    - static_cast<suseconds_t>
    - Time::ToFileTime
    - Time::is_max
    - butil::Time::FromCFAbsoluteTime
    - Time::ToJsTime
    - std::numeric_limits<double>::infinity
    - Time::ToCFAbsoluteTime
    - butil::Time::FromTimeVal
    - butil::Time::FromTimeT
    - butil::Time::FromDoubleT
    - Time::ToDoubleT
    - butil::Time::FromJsTime
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, MaxConversions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FromInternalValue
      Src: /src/brpc/test/time_unittest.cc:593,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:593,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/time_unittest.cc:594,1
    - Dst: Time::is_max
      Src: /src/brpc/test/time_unittest.cc:594,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:595,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/time_unittest.cc:595,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 596
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - Time::ToTimeT
    - butil::FromInternalValue
    - Time::is_max
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, TimeTOverflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: putenv
      Src: /src/brpc/test/time_unittest.cc:614,1
    - Dst: tzset
      Src: /src/brpc/test/time_unittest.cc:615,1
    - Dst: butil::FromLocalExploded
      Src: /src/brpc/test/time_unittest.cc:616,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:617,1
    - Dst: Time::ToTimeT
      Src: /src/brpc/test/time_unittest.cc:617,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 618
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - Time::ToTimeT
    - tzset
    - putenv
    - butil::FromLocalExploded
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(TimeTest, FromLocalExplodedCrashOnAndroid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/time_unittest.cc:623,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/time_unittest.cc:624,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:624,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/time_unittest.cc:625,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/time_unittest.cc:642,1
    - Dst: TimeDelta::InMilliseconds
      Src: /src/brpc/test/time_unittest.cc:642,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/time_unittest.cc:643,1
    - Dst: TimeDelta::InMicroseconds
      Src: /src/brpc/test/time_unittest.cc:643,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:644,1
    - Dst: TimeDelta::InSeconds
      Src: /src/brpc/test/time_unittest.cc:644,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 646
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - TimeDelta::InMilliseconds
    - butil::PlatformThread::Sleep
    - TimeDelta::InMicroseconds
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_EQ
    - EXPECT_GE
    - butil::TimeTicks::Now
    - TimeDelta::InSeconds
    linkageType: ''
    returnType: void
    signature: void TEST(TimeTicks, Deltas)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimeTicks::IsHighResClockWorking
      Src: /src/brpc/test/time_unittest.cc:652,1
    - Dst: GetTicks
      Src: /src/brpc/test/time_unittest.cc:670,1
    - Dst: GetTicks
      Src: /src/brpc/test/time_unittest.cc:675,1
    - Dst: TimeDelta::InMilliseconds
      Src: /src/brpc/test/time_unittest.cc:676,1
    - Dst: TimeDelta::InMicroseconds
      Src: /src/brpc/test/time_unittest.cc:678,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:684,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 685
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 685
    functionName: HighResClockTest
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - TimeDelta::InMilliseconds
    - TimeTicks::IsHighResClockWorking
    - EXPECT_TRUE
    - TimeDelta::InMicroseconds
    - GetTicks
    linkageType: ''
    returnType: void
    signature: void HighResClockTest(TimeTicks (*GetTicks)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HighResClockTest
      Src: /src/brpc/test/time_unittest.cc:688,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 689
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - HighResClockTest
    linkageType: ''
    returnType: void
    signature: void TEST(TimeTicks, HighResNow)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IsThreadNowSupported
      Src: /src/brpc/test/time_unittest.cc:699,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/time_unittest.cc:700,1
    - Dst: butil::TimeTicks::ThreadNow
      Src: /src/brpc/test/time_unittest.cc:701,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/time_unittest.cc:703,1
    - Dst: TimeTicks
      Src: /src/brpc/test/time_unittest.cc:703,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/time_unittest.cc:705,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:705,1
    - Dst: butil::TimeTicks::ThreadNow
      Src: /src/brpc/test/time_unittest.cc:706,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/time_unittest.cc:707,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/time_unittest.cc:711,1
    - Dst: TimeDelta::InMicroseconds
      Src: /src/brpc/test/time_unittest.cc:711,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/time_unittest.cc:714,1
    - Dst: TimeDelta::InMicroseconds
      Src: /src/brpc/test/time_unittest.cc:714,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 698
    functionDepth: 1
    functionLinenumber: 698
    functionLinenumberEnd: 716
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeTicks::Now
    - butil::TimeTicks::ThreadNow
    - butil::PlatformThread::Sleep
    - TimeDelta::InMicroseconds
    - butil::TimeDelta::FromMilliseconds
    - butil::IsThreadNowSupported
    - EXPECT_GT
    - EXPECT_GE
    - TimeTicks
    linkageType: ''
    returnType: void
    signature: void TEST(TimeTicks, MAYBE_ThreadNow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HighResClockTest
      Src: /src/brpc/test/time_unittest.cc:720,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 718
    functionDepth: 1
    functionLinenumber: 718
    functionLinenumberEnd: 721
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - HighResClockTest
    linkageType: ''
    returnType: void
    signature: void TEST(TimeTicks, NowFromSystemTraceTime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:724,1
    - Dst: butil::TimeDelta::FromDays
      Src: /src/brpc/test/time_unittest.cc:724,1
    - Dst: butil::TimeDelta::FromHours
      Src: /src/brpc/test/time_unittest.cc:724,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:725,1
    - Dst: butil::TimeDelta::FromHours
      Src: /src/brpc/test/time_unittest.cc:725,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/time_unittest.cc:725,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:726,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/time_unittest.cc:726,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:726,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:727,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:727,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:727,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:728,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:728,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:729,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:730,1
    - Dst: butil::TimeDelta::FromSecondsD
      Src: /src/brpc/test/time_unittest.cc:730,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:731,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/time_unittest.cc:732,1
    - Dst: butil::TimeDelta::FromMillisecondsD
      Src: /src/brpc/test/time_unittest.cc:732,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:733,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:734,1
    - Dst: butil::TimeDelta::FromDays
      Src: /src/brpc/test/time_unittest.cc:734,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:735,1
    - Dst: butil::TimeDelta::FromHours
      Src: /src/brpc/test/time_unittest.cc:735,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:736,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/time_unittest.cc:736,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:737,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:737,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:738,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:738,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:739,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:739,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:740,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/time_unittest.cc:740,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:741,1
    - Dst: butil::TimeDelta::FromSecondsD
      Src: /src/brpc/test/time_unittest.cc:741,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:742,1
    - Dst: butil::TimeDelta::FromSecondsD
      Src: /src/brpc/test/time_unittest.cc:742,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:743,1
    - Dst: butil::TimeDelta::FromMillisecondsD
      Src: /src/brpc/test/time_unittest.cc:743,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:744,1
    - Dst: butil::TimeDelta::FromMillisecondsD
      Src: /src/brpc/test/time_unittest.cc:744,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:745,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:745,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 723
    functionDepth: 1
    functionLinenumber: 723
    functionLinenumberEnd: 746
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::TimeDelta::FromDays
    - butil::TimeDelta::FromMilliseconds
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromMicroseconds
    - butil::TimeDelta::FromHours
    - butil::TimeDelta::FromSeconds
    - butil::TimeDelta::FromSecondsD
    - EXPECT_EQ
    - butil::TimeDelta::FromMillisecondsD
    linkageType: ''
    returnType: void
    signature: void TEST(TimeDelta, FromAndIn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:751,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:752,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/time_unittest.cc:754,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:755,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:756,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:758,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:759,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:760,1
    - Dst: butil::TimeDelta::FromMicroseconds
      Src: /src/brpc/test/time_unittest.cc:762,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:764,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:765,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 749
    functionDepth: 1
    functionLinenumber: 749
    functionLinenumberEnd: 766
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::TimeDelta::FromSeconds
    - butil::TimeDelta::FromMicroseconds
    linkageType: ''
    returnType: void
    signature: void TEST(TimeDelta, TimeSpecConversion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/time_unittest.cc:782,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/time_unittest.cc:784,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/time_unittest.cc:784,1
    - Dst: Time::ToInternalValue
      Src: /src/brpc/test/time_unittest.cc:784,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 772
    functionDepth: 1
    functionLinenumber: 772
    functionLinenumberEnd: 788
    functionName: TEST
    functionSourceFile: /src/brpc/test/time_unittest.cc
    functionUses: 0
    functionsReached:
    - Time::ToInternalValue
    - EXPECT_EQ
    - GG_INT64_C
    - butil::FromUTCExploded
    linkageType: ''
    returnType: void
    signature: void TEST(TimeDelta, WindowsEpoch)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_server_unittest.cpp:62,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_server_unittest.cpp:63,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_server_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_server_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: RunClosure
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: void * RunClosure(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~MyAuthenticator() override
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MyAuthenticator() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 103
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: MyAuthenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: ~EchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:134,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:134,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:135,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:137,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:137,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:138,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:139,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:139,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: brpc::Controller*::has_request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:144,1
    - Dst: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:144,1
    - Dst: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:147,1
    - Dst: brpc::Controller*::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 150
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - test::EchoResponse*::set_message
    - ASSERT_EQ
    - brpc::Controller*::has_request_user_fields
    - bthread_usleep
    - brpc::Controller*::response_user_fields
    - brpc::Controller*::request_user_fields
    - fetch_add
    - test::EchoRequest*::message
    - brpc::Controller*::request_protocol
    - test::EchoRequest*::sleep_us
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* request,\n                      test::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::ComboRequest*::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:157,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:158,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::ComboRequest*
    - test::ComboResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 160
    functionName: EchoServiceImpl::ComboEcho
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::ComboRequest*::requests
    - test::ComboRequest*::requests_size
    - test::ComboResponse*::add_responses
    linkageType: ''
    returnType: void
    signature: "void ComboEcho(google::protobuf::RpcController*,\n                           const
      test::ComboRequest* request,\n                           test::ComboResponse*
      response,\n                           google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:167,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:167,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:168,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::BytesRequest*
    - test::BytesResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 169
    functionName: EchoServiceImpl::BytesEcho1
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - EXPECT_EQ
    - test::BytesRequest*::databytes
    linkageType: ''
    returnType: void
    signature: "void BytesEcho1(google::protobuf::RpcController*,\n                            const
      test::BytesRequest* request,\n                            test::BytesResponse*
      response,\n                            google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:176,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:176,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:177,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::BytesRequest*
    - test::BytesResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 178
    functionName: EchoServiceImpl::BytesEcho2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - EXPECT_EQ
    - test::BytesRequest*::databytes
    linkageType: ''
    returnType: void
    signature: "void BytesEcho2(google::protobuf::RpcController*,\n                            const
      test::BytesRequest* request,\n                            test::BytesResponse*
      response,\n                            google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - sd
    argTypes:
    - google::protobuf::ServiceDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 187
    functionName: EvilService::EvilService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EvilService(const google::protobuf::ServiceDescriptor* sd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: EvilService::GetDescriptor
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::ServiceDescriptor
    signature: google::protobuf::ServiceDescriptor * GetDescriptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: ServerTest::ServerTest
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: ~ServerTest()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ServerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:208,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/test/brpc_server_unittest.cpp:208,1
    - Dst: brpc::NsheadServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - conflict_sd
    argTypes:
    - google::protobuf::ServiceDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 211
    functionName: ServerTest::TestAddBuiltinService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::AddServiceInternal
    - brpc::Server::AddBuiltinServices
    - brpc::NsheadServiceOptions
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: "void TestAddBuiltinService(\n        const google::protobuf::ServiceDescriptor*
      conflict_sd)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:217,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:218,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:219,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:219,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:224,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:224,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:228,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:228,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:235,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:236,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:236,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:239,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:242,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:243,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:248,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:251,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:252,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:253,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:254,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:258,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:259,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:261,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:261,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:264,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:265,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: brpc::Server::options
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: brpc::Server::ListServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:272,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/brpc_server_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:273,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:273,1
    - Dst: brpc::Server::_service_map::begin
      Src: /src/brpc/test/brpc_server_unittest.cpp:275,1
    - Dst: brpc::Server::_service_map::end
      Src: /src/brpc/test/brpc_server_unittest.cpp:276,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:280,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:281,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 282
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::_service_map::end
    - butil::EndPoint::EndPoint
    - std::vector::empty
    - MyAuthenticator::MyAuthenticator
    - brpc::PortRange
    - brpc::Server::first_service
    - ASSERT_FALSE
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - ASSERT_NE
    - brpc::Server::_service_map::begin
    - brpc::Server::service_count
    - brpc::Server::Start
    - brpc::Server::options
    - brpc::Server::Stop
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Server::IsRunning
    - str2endpoint
    - brpc::Server::ListServices
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:286,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:286,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:287,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:290,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, invalid_protocol_in_enabled_protocols)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 300
    functionName: EchoServiceV1::EchoServiceV1
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceV1()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 301
    functionName: ~EchoServiceV1()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceV1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:306,1
    - Dst: v1::EchoRequest*::has_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:308,1
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:309,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:309,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:312,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:312,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:314,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 315
    functionName: EchoServiceV1::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Controller*::request_protocol
    - CHECK_EQ
    - v1::EchoRequest*::has_message
    - brpc::Controller*::request_attachment
    - v1::EchoRequest*::message
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:321,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:321,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 323
    functionName: EchoServiceV1::Echo2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo2(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:329,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:329,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 331
    functionName: EchoServiceV1::Echo3
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo3(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:337,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:337,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:338,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 339
    functionName: EchoServiceV1::Echo4
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo4(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:345,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:345,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 347
    functionName: EchoServiceV1::Echo5
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo5(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 358
    functionName: EchoServiceV2::EchoServiceV2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceV2()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 359
    functionName: ~EchoServiceV2()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceV2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v2::EchoResponse*::set_value
      Src: /src/brpc/test/brpc_server_unittest.cpp:365,1
    - Dst: v2::EchoRequest*::value
      Src: /src/brpc/test/brpc_server_unittest.cpp:365,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v2::EchoRequest*
    - v2::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 367
    functionName: EchoServiceV2::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v2::EchoResponse*::set_value
    - v2::EchoRequest*::value
    - fetch_add
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController*,\n                      const
      v2::EchoRequest* request,\n                      v2::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:378,1
    - Dst: v3::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:378,1
    - Dst: v3::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:379,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v3::EchoRequest*
    - v3::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 380
    functionName: EchoServiceV3::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - v3::EchoRequest*::message
    - v3::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController*,\n              const
      v3::EchoRequest* request,\n              v3::EchoResponse* response,\n              ::google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:385,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:385,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:386,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:388,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:388,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:392,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:392,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:394,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:397,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:397,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:398,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:401,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:403,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:404,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:404,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:407,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 408
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, empty_enabled_protocols)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:412,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:412,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:413,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:415,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:415,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:419,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:419,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:421,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:422,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:427,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:427,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:428,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:429,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:435,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:435,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:438,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:439,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:442,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:442,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:443,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:446,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 410
    functionDepth: 1
    functionLinenumber: 410
    functionLinenumberEnd: 447
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, only_allow_protocols_in_enabled_protocols)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:451,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:453,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:454,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:454,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:455,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:458,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:458,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:459,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:460,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:461,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:462,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:463,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:465,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:465,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:467,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:468,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:469,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:470,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:472,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:472,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:474,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:475,1
    - Dst: EchoServiceV2::EchoServiceV2
      Src: /src/brpc/test/brpc_server_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:481,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:483,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:484,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:484,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:486,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:487,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:488,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:489,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:490,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:492,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:492,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:494,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:495,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:496,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:497,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:499,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:499,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 503
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - EchoServiceV2::ncalled::load
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EchoServiceV2::EchoServiceV2
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, services_in_different_ns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:507,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:509,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:510,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:510,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:511,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:514,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:514,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:515,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:516,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:517,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:518,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:519,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:521,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:521,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:523,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:524,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:525,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:526,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:527,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:529,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:529,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:531,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:532,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:533,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:534,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:536,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:537,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:542,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:543,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:544,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:545,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:546,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:548,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:548,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:551,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:552,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 553
      start: 505
    functionDepth: 1
    functionLinenumber: 505
    functionLinenumberEnd: 553
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - LOG
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, various_forms_of_uri_paths)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:557,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:559,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:560,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:560,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:561,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:564,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:564,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:565,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:566,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:568,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:569,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:569,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:570,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:571,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:574,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:575,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:576,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:577,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:578,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:579,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:583,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:584,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:585,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:586,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:587,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:588,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:589,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 555
    functionDepth: 1
    functionLinenumber: 555
    functionLinenumberEnd: 592
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - LOG
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, missing_required_fields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:596,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:597,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:601,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:602,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:602,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:603,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:606,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:606,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:607,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:608,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:610,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:611,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:612,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:614,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:614,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:616,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:617,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:618,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:619,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:620,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:622,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 624
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, disallow_http_body_to_pb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:628,1
    - Dst: EchoServiceV2::EchoServiceV2
      Src: /src/brpc/test/brpc_server_unittest.cpp:629,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:632,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:633,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:658,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:658,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:664,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:669,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:669,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:673,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:678,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:678,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:682,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:686,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:687,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:691,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:691,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:695,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:699,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:699,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:702,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:703,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:707,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:707,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:711,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:715,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:715,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:719,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:723,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:724,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:724,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:728,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:728,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:731,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:732,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:732,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:736,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:736,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:740,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:745,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:745,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:746,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:749,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:749,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:750,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:751,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:753,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:753,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:756,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:757,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:758,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:759,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:760,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:761,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:761,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:762,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:762,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:765,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:766,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:767,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:768,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:769,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:771,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:775,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:776,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:777,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:778,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:779,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:781,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:781,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:785,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:786,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:787,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:788,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:789,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:791,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:795,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:796,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:797,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:798,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:799,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:800,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:801,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:801,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:806,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:807,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:808,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:809,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:810,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:812,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:812,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:816,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:817,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:818,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:819,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:820,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:822,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:825,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:826,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:827,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:828,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:829,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:831,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:834,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:835,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:836,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:837,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:838,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:840,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:843,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:844,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:845,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:846,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:847,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:849,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:849,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:852,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:853,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:854,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:855,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:856,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:858,1
    - Dst: EchoServiceV1::ncalled_echo2::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:858,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:861,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:862,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:863,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:864,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:865,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:867,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:867,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:870,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:871,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:872,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:873,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:874,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:876,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:880,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:881,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:882,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:883,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:884,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:885,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:886,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:886,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:888,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:889,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:890,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:891,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:892,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:894,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:894,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: EchoServiceV1::ncalled_echo4::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:897,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:898,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:899,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:900,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:901,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:903,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:903,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: EchoServiceV1::ncalled_echo5::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:907,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:908,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:909,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:910,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:911,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:913,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:913,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:916,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:917,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:918,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:919,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:920,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:922,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:922,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:925,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:926,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:927,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:928,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:929,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:931,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:931,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:935,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:936,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:937,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:938,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:939,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:940,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:940,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:943,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:944,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:946,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:946,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:949,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:950,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:951,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:952,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:953,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:955,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:955,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:959,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:960,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:961,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:962,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:963,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:965,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:968,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:972,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:973,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:973,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:974,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:975,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:975,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 213
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 976
      start: 626
    functionDepth: 1
    functionLinenumber: 626
    functionLinenumberEnd: 976
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled_echo3::load
    - brpc::Server::RemoveService
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EchoServiceV1::ncalled_echo2::load
    - EchoServiceV2::EchoServiceV2
    - LOG
    - brpc::Server::service_count
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - EchoServiceV1::ncalled_echo5::load
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - EchoServiceV1::ncalled_echo4::load
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, restful_mapping)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:984,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:985,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:986,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:987,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:987,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:989,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:992,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:992,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:993,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:994,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:995,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:996,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:996,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:997,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:997,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:998,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:999,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:999,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1005,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1006,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1007,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1010,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1011,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1011,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1012,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1015,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1015,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1016,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1017,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1018,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1019,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1019,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1020,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1021,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1023,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1023,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1028,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1029,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1030,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1030,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1031,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1031,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1056,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1061,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1064,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1064,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1065,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1066,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1067,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1068,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1069,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1070,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1071,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1071,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1078,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1080,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1080,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1082,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1082,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1084,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1084,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1087,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1090,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1090,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1092,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1093,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1093,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1096,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1097,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1098,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1099,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1100,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1100,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1102,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1105,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1106,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1107,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1107,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1109,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1110,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1112,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1113,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1114,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1115,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1117,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1118,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1122,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1122,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1128
      start: 978
    functionDepth: 1
    functionLinenumber: 978
    functionLinenumberEnd: 1128
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - bthread_usleep
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Join
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::DoNothing
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    - test::EchoRequest::set_message
    - LOG
    - brpc::Server::service_count
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Controller::call_id
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::MaxConcurrencyOf
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, http_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1132,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1135,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1136,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1140,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1143,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1144
      start: 1130
    functionDepth: 1
    functionLinenumber: 1130
    functionLinenumberEnd: 1144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::Server
    - brpc::Server::service_count
    - ASSERT_TRUE
    - brpc::Server::Start
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, conflict_name_between_restful_mapping_and_builtin)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1148,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1151,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1152,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1156,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1165,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1165,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1168,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1169,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1170,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1172,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1172,1
    - Dst: EchoServiceV1::GetDescriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1174,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1177,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1178,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1179,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1180,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1182,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1183,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1183,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1186,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1187,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1188,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1189,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1190,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1192,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1196,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1200,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1201,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1201,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1203,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1146
    functionDepth: 1
    functionLinenumber: 1146
    functionLinenumberEnd: 1205
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Server::RemoveService
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::GetDescriptor
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Server::service_count
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, restful_mapping_is_tried_after_others)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1208,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1210,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1213,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1213,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: brpc::Server::FindServiceByName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1216,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1217,1
    - Dst: brpc::Server::FindServiceByFullName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1217,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1218,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1219,1
    - Dst: brpc::Server::FindServiceByFullName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1219,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1220,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1223,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1224,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1227,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:1227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: brpc::Server::FindServiceByName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1231,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1233,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1235,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1236,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1239,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1239,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1241,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1244,1
    - Dst: brpc::Server::ClearServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:1246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1247,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1248
      start: 1207
    functionDepth: 1
    functionLinenumber: 1207
    functionLinenumberEnd: 1248
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - ASSERT_TRUE
    - brpc::Server::service_count
    - brpc::Server::ClearServices
    - brpc::Server::Join
    - brpc::Server::first_service
    - brpc::Server::FindServiceByFullName
    - butil::EndPoint::EndPoint
    - brpc::Server::RemoveService
    - brpc::Server::Start
    - pbrpcframework::get_prototype_by_method_descriptor
    - str2endpoint
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::FindServiceByName
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, add_remove_service)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1252,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1252,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1254,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1257,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1259,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1262,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1265,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1267,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1267,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ep
    - sleep_ms
    - succ
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1269
      start: 1250
    functionDepth: 1
    functionLinenumber: 1250
    functionLinenumberEnd: 1269
    functionName: SendSleepRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::latency_us
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Channel::Init
    - EXPECT_FALSE
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void SendSleepRPC(butil::EndPoint ep, int sleep_ms, bool succ)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1272,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1273,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1276,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1277,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1277,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_server_unittest.cpp:1279,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_server_unittest.cpp:1280,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1281,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1284,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1286,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1271
    functionDepth: 1
    functionLinenumber: 1271
    functionLinenumberEnd: 1289
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::GetStat
    - tcp_connect
    - ASSERT_GT
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, close_idle_connections)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_server_unittest.cpp:1292,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1293,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1294,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1296,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1302,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1302,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1304,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1307,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1307,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1308,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1309,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1312,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1313,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1313,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1322,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1322,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1324,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1326,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1327,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1327,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1328,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1329,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1333,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1334,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1334,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1335,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1345,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1345,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1347,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1350,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1350,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1351,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1352,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1356,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1357,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1357,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1358,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1368,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1368,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1370,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1373,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1373,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1374,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1375,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1378,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1379,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1379,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1380,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1382,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1384
      start: 1291
    functionDepth: 1
    functionLinenumber: 1291
    functionLinenumberEnd: 1384
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - bthread_start_background
    - butil::EndPoint::EndPoint
    - bthread_join
    - labs
    - brpc::Server::AddService
    - butil::Timer::start
    - brpc::NewCallback
    - EchoServiceImpl::count::load
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - butil::Timer::Timer
    - EXPECT_TRUE
    - brpc::Server::Start
    - brpc::Server::Stop
    - butil::Timer::stop
    - brpc::Server::Join
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, logoff_and_multiple_start)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1388,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1388,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1391,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1394,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1396,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ep
    - count
    argTypes:
    - butil::EndPoint
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1400
      start: 1386
    functionDepth: 1
    functionLinenumber: 1386
    functionLinenumberEnd: 1400
    functionName: SendMultipleRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Channel::Init
    - test::EchoResponse::message
    - EXPECT_EQ
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void SendMultipleRPC(butil::EndPoint ep, int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1403,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1405,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1405,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1408,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1409,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1409,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1417,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_server_unittest.cpp:1417,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1422,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1423,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1425
      start: 1402
    functionDepth: 1
    functionLinenumber: 1402
    functionLinenumberEnd: 1425
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - pthread_join
    - brpc::Server::Join
    - pthread_create
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::NewCallback
    - str2endpoint
    - EchoServiceImpl::count::load
    - brpc::Server::Stop
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, serving_requests)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1429,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/test/brpc_server_unittest.cpp:1431,1
    - Dst: getpid
      Src: /src/brpc/test/brpc_server_unittest.cpp:1432,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1434,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1437,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1440,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1441
      start: 1427
    functionDepth: 1
    functionLinenumber: 1427
    functionLinenumberEnd: 1441
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_TRUE
    - brpc::Server::PutPidFileIfNeeded
    - ASSERT_EQ
    - ASSERT_FALSE
    - getpid
    - std::ifstream::is_open
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, create_pid_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1447,1
    - Dst: reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1450,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/brpc_server_unittest.cpp:1450,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1454,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1454,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1457,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1457,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1457,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1458,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:1458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1459
      start: 1443
    functionDepth: 1
    functionLinenumber: 1443
    functionLinenumberEnd: 1459
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - reset
    - brpc::PortRange
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::Server::listen_address
    - EXPECT_EQ
    - butil::tcp_listen
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, range_start)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1462,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1462,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1463,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1463,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1464,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1464,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1465,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1465,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1466,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1466,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1467,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1467,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1468,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1468,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1470,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1470,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1473,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1473,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1475,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1475,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1476,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1476,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1477,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1477,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1478,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1478,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1480,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1480,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1482
      start: 1461
    functionDepth: 1
    functionLinenumber: 1461
    functionLinenumberEnd: 1482
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAddBuiltinService
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, add_builtin_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1491,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1492,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1495,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1497,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1497,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1499,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1502,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1502,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1503,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1504,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1505,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1506,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1507,1
    - Dst: brpc::Controller::set_pb_bytes_to_base64
      Src: /src/brpc/test/brpc_server_unittest.cpp:1508,1
    - Dst: test::BytesRequest::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1511,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1512,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1513,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1513,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1514,1
    - Dst: test::BytesResponse::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1514,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1515,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1516,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1518
      start: 1484
    functionDepth: 1
    functionLinenumber: 1484
    functionLinenumberEnd: 1518
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - test::BytesResponse::databytes
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - EXPECT_FALSE
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - butil::string_printf
    - brpc::Controller::set_pb_bytes_to_base64
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    - test::BytesRequest::set_databytes
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, base64_to_string)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1522,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1523,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1527,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1528,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1528,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1531,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1534,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1534,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1535,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1536,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1537,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1538,1
    - Dst: brpc::Controller::set_pb_single_repeated_to_array
      Src: /src/brpc/test/brpc_server_unittest.cpp:1539,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1541,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1542,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1545,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1547,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1547,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1548,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1548,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1548,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboRequest::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1553,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1553,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1557,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1558,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1560
      start: 1520
    functionDepth: 1
    functionLinenumber: 1520
    functionLinenumberEnd: 1560
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - test::ComboRequest::requests_size
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - EXPECT_FALSE
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - test::ComboResponse::responses
    - EXPECT_TRUE
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::set_pb_single_repeated_to_array
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - test::ComboRequest::requests
    - test::ComboResponse::responses_size
    - brpc::Controller::Controller
    - test::ComboRequest::add_requests
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, single_repeated_to_array)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1563,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1565,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1571,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1575,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1575,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1576,1
    - Dst: test::EchoRequest::mutable_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1579,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1581,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1582,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1585,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1585,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1590,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/brpc_server_unittest.cpp:1590,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1590,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1593,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1595
      start: 1562
    functionDepth: 1
    functionLinenumber: 1562
    functionLinenumberEnd: 1595
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - EXPECT_TRUE
    - std::ostringstream::str
    - brpc::Server::Join
    - logging::StringSink::find
    - test::EchoRequest::mutable_message
    - brpc::Controller::Failed
    - brpc::Server::Start
    - brpc::Server::Stop
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_NE
    - logging::SetLogSink
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, too_big_message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1599,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1601,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1601,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1603,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1603,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1605,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1608,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1611,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1611,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1614,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1614,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1617,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1618,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1619,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1620,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1621,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1621,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1623,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1626,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1627,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1628,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1628,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1630,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1631,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1633,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1634,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1635,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1636,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1637,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1638,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1639,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1642,1
    - Dst: test::EchoRequest::clear_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1643,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1644,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1645,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1645,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1646,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1646,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1649,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1649,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1654,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1655,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1656,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1661,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1663
      start: 1597
    functionDepth: 1
    functionLinenumber: 1597
    functionLinenumberEnd: 1663
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - bthread_usleep
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Join
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::DoNothing
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - LOG
    - test::EchoRequest::clear_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Controller::call_id
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::MaxConcurrencyOf
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1667,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1669,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1669,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1670,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1670,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1673,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1673,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1676,1
    - Dst: brpc::Controller::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1677,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1680,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1681,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1684,1
    - Dst: brpc::Controller::has_response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1686,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1688,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1689
      start: 1665
    functionDepth: 1
    functionLinenumber: 1665
    functionLinenumberEnd: 1689
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - ASSERT_TRUE
    - brpc::Controller::request_user_fields
    - brpc::Controller::ErrorText
    - brpc::Controller::response_user_fields
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::Controller::has_response_user_fields
    - brpc::Controller::Failed
    - brpc::Server::Start
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, user_fields)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1700,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1700,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1701,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1701,1
    - Dst: has_service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1702,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1702,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: has_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: brpc::Controller*::request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: brpc::Controller*::request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: brpc::Controller*::request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1708,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1712,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1712,1
    - Dst: brpc::SerializedRequest*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1715,1
    - Dst: test::EchoRequest::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1716,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1716,1
    - Dst: brpc::Controller*::set_response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1733,1
    - Dst: brpc::Controller*::set_response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1734,1
    - Dst: brpc::Controller*::set_response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1735,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1736,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1737,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1738,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1738,1
    - Dst: brpc::SerializedResponse*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - done
    argTypes:
    - brpc::Controller*
    - brpc::SerializedRequest*
    - brpc::SerializedResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1741
      start: 1693
    functionDepth: 1
    functionLinenumber: 1693
    functionLinenumberEnd: 1741
    functionName: BaiduMasterServiceImpl::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller*::set_response_compress_type
    - test::EchoRequest::message
    - brpc::SerializedResponse*::serialized_data
    - brpc::Controller*::set_response_checksum_type
    - method_name
    - brpc::Controller*::request_attachment
    - ASSERT_NE
    - brpc::Controller*::response_attachment
    - brpc::Controller*::request_checksum_type
    - service_name
    - test::EchoResponse::set_message
    - brpc::Controller*::request_content_type
    - has_method_name
    - brpc::Controller*::sampled_request
    - ASSERT_TRUE
    - brpc::Controller*::set_response_content_type
    - brpc::Controller*::request_compress_type
    - brpc::policy::SerializeRpcMessage
    - has_service_name
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::DeserializeRpcMessage
    - brpc::SerializedRequest*::serialized_data
    linkageType: ''
    returnType: void
    signature: "void ProcessRpcRequest(brpc::Controller* cntl,\n                           const
      brpc::SerializedRequest* request,\n                           brpc::SerializedResponse*
      response,\n                           ::google::protobuf::Closure* done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1748,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1751,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1752,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1753,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1755,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1756,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1756,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1757,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1757,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - ' channel'
    - compress_type
    argTypes:
    - brpc::Channel
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1747
    functionDepth: 1
    functionLinenumber: 1747
    functionLinenumberEnd: 1759
    functionName: TestBaiduMasterService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::request_attachment
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Controller::Controller
    - brpc::Controller::set_request_compress_type
    - test::EchoResponse::message
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void TestBaiduMasterService(brpc::Channel& channel, brpc::CompressType
      compress_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1763,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1763,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1764,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1765,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1766,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1766,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1767,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1768,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1769,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1769,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1771,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1774,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1774,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1777,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1778,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1779,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1783,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1784,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1784,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1785
      start: 1761
    functionDepth: 2
    functionLinenumber: 1761
    functionLinenumberEnd: 1785
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::Join
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - TestBaiduMasterService
    - brpc::Channel::Channel
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, baidu_master_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1790,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1795,1
    - Dst: brpc::SerializedResponse::SerializedResponse
      Src: /src/brpc/test/brpc_server_unittest.cpp:1797,1
    - Dst: brpc::SerializedRequest::SerializedRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1798,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1800,1
    - Dst: brpc::Controller::set_request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1801,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1802,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1803,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1804,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1807,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1807,1
    - Dst: brpc::SerializedRequest::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1809,1
    - Dst: brpc::SampledRequest::SampledRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1810,1
    - Dst: auto::meta::set_service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1811,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1812,1
    - Dst: auto::meta::set_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1813,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1814,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1815,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1817,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1818,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1818,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1818,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::SerializedResponse::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1821,1
    - Dst: brpc::Controller::response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::Controller::response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::Controller::response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1823,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1825,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1825,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 4
    argNames:
    - ' channel'
    - content_type
    - compress_type
    - checksum_type
    argTypes:
    - brpc::Channel
    - brpc::ContentType
    - brpc::CompressType
    - brpc::ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1826
      start: 1787
    functionDepth: 1
    functionLinenumber: 1787
    functionLinenumberEnd: 1826
    functionName: TestGenericCall
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::reset_sampled_request
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::SerializedRequest::SerializedRequest
    - brpc::Controller::request_attachment
    - brpc::SerializedResponse::serialized_data
    - ASSERT_FALSE
    - test::EchoRequest::set_message
    - LOG
    - auto::meta::set_service_name
    - brpc::Controller::response_checksum_type
    - brpc::SerializedRequest::serialized_data
    - brpc::Controller::ErrorText
    - brpc::SerializedResponse::SerializedResponse
    - brpc::Controller::set_request_content_type
    - brpc::Controller::response_content_type
    - brpc::Controller::set_request_compress_type
    - test::EchoResponse::message
    - ASSERT_TRUE
    - brpc::SampledRequest::SampledRequest
    - brpc::Controller::response_compress_type
    - brpc::policy::SerializeRpcMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::DeserializeRpcMessage
    - auto::meta::set_method_name
    - brpc::Controller::set_request_checksum_type
    - CallMethod
    linkageType: ''
    returnType: void
    signature: "void TestGenericCall(brpc::Channel& channel, brpc::ContentType content_type,\n
      \                    brpc::CompressType compress_type,\n                     brpc::ChecksumType
      checksum_type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1830,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1830,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1831,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1833,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1833,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1834,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1836,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1836,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1838,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1841,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1841,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1843,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1845,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1847,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1849,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1852,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1854,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1856,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1858,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1861,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1863,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1865,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1867,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1870,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1872,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1874,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1879,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1879,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1880,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1880,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1881
      start: 1828
    functionDepth: 2
    functionLinenumber: 1828
    functionLinenumberEnd: 1881
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::Join
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Channel
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    - TestGenericCall
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, generic_call)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1884
      start: 1884
    functionDepth: 0
    functionLinenumber: 1884
    functionLinenumberEnd: 1884
    functionName: DefaultRpcPBMessages
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultRpcPBMessages()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1885
      start: 1885
    functionDepth: 0
    functionLinenumber: 1885
    functionLinenumberEnd: 1885
    functionName: Request
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1886
      start: 1886
    functionDepth: 0
    functionLinenumber: 1886
    functionLinenumberEnd: 1886
    functionName: Response
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<DefaultRpcPBMessages>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1896,1
    - Dst: butil::get_object<v1::EchoRequest>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1897,1
    - Dst: butil::get_object<v1::EchoResponse>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1898,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1899,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1900,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - google::protobuf::Service
    - google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1904
      start: 1894
    functionDepth: 0
    functionLinenumber: 1894
    functionLinenumberEnd: 1904
    functionName: TestRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 4
    functionsReached:
    - butil::get_object<v1::EchoResponse>
    - auto::clear_message
    - butil::get_object<v1::EchoRequest>
    - butil::get_object<DefaultRpcPBMessages>
    linkageType: ''
    returnType: brpc::RpcPBMessages
    signature: "brpc::RpcPBMessages * Get(const google::protobuf::Service& service,\n
      \                            const google::protobuf::MethodDescriptor& method)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DefaultRpcPBMessages*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1907,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1908,1
    - Dst: static_cast<v1::EchoRequest*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1908,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1909,1
    - Dst: static_cast<v1::EchoResponse*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1909,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1912,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - messages
    argTypes:
    - brpc::RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1913
      start: 1906
    functionDepth: 0
    functionLinenumber: 1906
    functionLinenumberEnd: 1913
    functionName: TestRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<v1::EchoResponse*>
    - butil::return_object
    - static_cast<DefaultRpcPBMessages*>
    - static_cast<v1::EchoRequest*>
    linkageType: ''
    returnType: void
    signature: void Return(brpc::RpcPBMessages* messages) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1918,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1918,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1919,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1920,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1921,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1921,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1922,1
    - Dst: TestRpcPBMessageFactory::TestRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1924,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1924,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1926,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1929,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1929,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1931,1
    - Dst: v1::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1934,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1936,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1937,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1937,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1937,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1938,1
    - Dst: v1::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1938,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1941,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1942,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1944,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1944,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1946,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1947,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1948,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1948,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1950,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1951,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1951,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1951,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1956,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1956,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1957,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1957,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1958
      start: 1916
    functionDepth: 1
    functionLinenumber: 1916
    functionLinenumberEnd: 1958
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - v1::EchoRequest::set_message
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - TestRpcPBMessageFactory::TestRpcPBMessageFactory
    - butil::string_printf
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - v1::EchoService_Stub::Echo
    - brpc::Server::Stop
    - brpc::Server::Join
    - v1::EchoResponse::message
    - brpc::Controller::Controller
    - str2endpoint
    - c_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, rpc_pb_message_factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1962,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1962,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1963,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1965,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1965,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1966,1
    - Dst: brpc::GetArenaRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1968,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1968,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1970,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1971,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1973,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1973,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1975,1
    - Dst: v3::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1978,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1980,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1981,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1981,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1981,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1982,1
    - Dst: v3::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1982,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1985,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1988,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1988,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1990,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1991,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1992,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1992,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1994,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1995,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1995,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1995,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2000,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2001,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2001,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2002
      start: 1960
    functionDepth: 1
    functionLinenumber: 1960
    functionLinenumberEnd: 2002
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - v3::EchoRequest::set_message
    - v3::EchoResponse::message
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - butil::string_printf
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - v3::EchoService_Stub::Echo
    - brpc::Channel::Init
    - brpc::GetArenaRpcPBMessageFactory
    - brpc::Server::Stop
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    - c_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, arena_rpc_pb_message_factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:2007,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2008,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2011,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2011,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:2015,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:2017,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2018,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2018,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2018,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2019,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:2019,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 4
    argNames:
    - ' ep'
    - ' cntl'
    - error_code
    - failed
    argTypes:
    - butil::EndPoint
    - brpc::Controller
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2020
      start: 2004
    functionDepth: 1
    functionLinenumber: 2004
    functionLinenumberEnd: 2020
    functionName: TestBaiduStdAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ErrorCode
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - Failed
    - ErrorText
    linkageType: ''
    returnType: void
    signature: "void TestBaiduStdAuth(const butil::EndPoint& ep,\n    brpc::Controller&
      cntl,\n    int error_code, bool failed)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:2025,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2026,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2029,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2029,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2031,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2032,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2033,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:2035,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2036,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2036,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2036,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2037,1
    - Dst: http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:2037,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 4
    argNames:
    - ' ep'
    - ' cntl'
    - status_code
    - failed
    argTypes:
    - butil::EndPoint
    - brpc::Controller
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2038
      start: 2022
    functionDepth: 1
    functionLinenumber: 2022
    functionLinenumberEnd: 2038
    functionName: TestHttpAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - request_attachment
    - http_response
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - Failed
    - ErrorText
    linkageType: ''
    returnType: void
    signature: "void TestHttpAuth(const butil::EndPoint& ep,\n                  brpc::Controller&
      cntl,\n                  int status_code, bool failed)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2041,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2042,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2042,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:2043,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:2044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2045,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:2045,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:2046,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2047,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2049,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:2049,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:2051,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2052,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2055,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2056,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2057,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2057,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2059,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2060,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2061,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2061,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2065,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2066,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2069,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2070,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2070,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2071
      start: 2040
    functionDepth: 2
    functionLinenumber: 2040
    functionLinenumberEnd: 2071
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - TestHttpAuth
    - butil::EndPoint::EndPoint
    - brpc::Controller::response_attachment
    - brpc::Controller::Reset
    - MyAuthenticator::MyAuthenticator
    - brpc::Server::AddService
    - brpc::ServerOptions::ServerOptions
    - ASSERT_NE
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    - TestBaiduStdAuth
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, auth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_server_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: RunClosure
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: void * RunClosure(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~MyAuthenticator() override
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MyAuthenticator() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 103
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: MyAuthenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: ~EchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:134,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:134,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:135,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:137,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:137,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:138,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:139,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:139,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: brpc::Controller*::has_request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:144,1
    - Dst: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:144,1
    - Dst: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:147,1
    - Dst: brpc::Controller*::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 150
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - test::EchoResponse*::set_message
    - ASSERT_EQ
    - brpc::Controller*::has_request_user_fields
    - bthread_usleep
    - brpc::Controller*::response_user_fields
    - brpc::Controller*::request_user_fields
    - fetch_add
    - test::EchoRequest*::message
    - brpc::Controller*::request_protocol
    - test::EchoRequest*::sleep_us
    - EXPECT_EQ
    - LOG
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* request,\n                      test::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::ComboRequest*::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:157,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:158,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::ComboRequest*
    - test::ComboResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 160
    functionName: EchoServiceImpl::ComboEcho
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::ComboRequest*::requests
    - test::ComboRequest*::requests_size
    - test::ComboResponse*::add_responses
    linkageType: ''
    returnType: void
    signature: "void ComboEcho(google::protobuf::RpcController*,\n                           const
      test::ComboRequest* request,\n                           test::ComboResponse*
      response,\n                           google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:167,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:167,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:168,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::BytesRequest*
    - test::BytesResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 169
    functionName: EchoServiceImpl::BytesEcho1
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - EXPECT_EQ
    - test::BytesRequest*::databytes
    linkageType: ''
    returnType: void
    signature: "void BytesEcho1(google::protobuf::RpcController*,\n                            const
      test::BytesRequest* request,\n                            test::BytesResponse*
      response,\n                            google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:176,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:176,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:177,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::BytesRequest*
    - test::BytesResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 178
    functionName: EchoServiceImpl::BytesEcho2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - EXPECT_EQ
    - test::BytesRequest*::databytes
    linkageType: ''
    returnType: void
    signature: "void BytesEcho2(google::protobuf::RpcController*,\n                            const
      test::BytesRequest* request,\n                            test::BytesResponse*
      response,\n                            google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - sd
    argTypes:
    - google::protobuf::ServiceDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 187
    functionName: EvilService::EvilService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EvilService(const google::protobuf::ServiceDescriptor* sd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: EvilService::GetDescriptor
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::ServiceDescriptor
    signature: google::protobuf::ServiceDescriptor * GetDescriptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: ServerTest::ServerTest
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: ~ServerTest()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ServerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:208,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/test/brpc_server_unittest.cpp:208,1
    - Dst: brpc::NsheadServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - conflict_sd
    argTypes:
    - google::protobuf::ServiceDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 211
    functionName: ServerTest::TestAddBuiltinService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::AddServiceInternal
    - brpc::Server::AddBuiltinServices
    - brpc::NsheadServiceOptions
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: "void TestAddBuiltinService(\n        const google::protobuf::ServiceDescriptor*
      conflict_sd)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:217,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:218,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:219,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:219,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:224,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:224,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:228,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:228,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:235,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:236,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:236,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:239,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:242,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:243,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:248,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:251,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:252,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:253,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:254,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:258,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:259,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:261,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:261,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:264,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:265,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: brpc::Server::options
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: brpc::Server::ListServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:272,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/brpc_server_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:273,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:273,1
    - Dst: brpc::Server::_service_map::begin
      Src: /src/brpc/test/brpc_server_unittest.cpp:275,1
    - Dst: brpc::Server::_service_map::end
      Src: /src/brpc/test/brpc_server_unittest.cpp:276,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:280,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:281,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 282
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::_service_map::end
    - butil::EndPoint::EndPoint
    - std::vector::empty
    - MyAuthenticator::MyAuthenticator
    - brpc::PortRange
    - brpc::Server::first_service
    - ASSERT_FALSE
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - ASSERT_NE
    - brpc::Server::_service_map::begin
    - brpc::Server::service_count
    - brpc::Server::Start
    - brpc::Server::options
    - brpc::Server::Stop
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Server::IsRunning
    - str2endpoint
    - brpc::Server::ListServices
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:286,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:286,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:287,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:290,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, invalid_protocol_in_enabled_protocols)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 300
    functionName: EchoServiceV1::EchoServiceV1
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceV1()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 301
    functionName: ~EchoServiceV1()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceV1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:306,1
    - Dst: v1::EchoRequest*::has_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:308,1
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:309,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:309,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:312,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:312,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:314,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 315
    functionName: EchoServiceV1::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Controller*::request_protocol
    - CHECK_EQ
    - v1::EchoRequest*::has_message
    - brpc::Controller*::request_attachment
    - v1::EchoRequest*::message
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:321,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:321,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 323
    functionName: EchoServiceV1::Echo2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo2(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:329,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:329,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 331
    functionName: EchoServiceV1::Echo3
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo3(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:337,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:337,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:338,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 339
    functionName: EchoServiceV1::Echo4
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo4(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:345,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:345,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v1::EchoRequest*
    - v1::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 347
    functionName: EchoServiceV1::Echo5
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v1::EchoRequest*::message
    - fetch_add
    - v1::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo5(google::protobuf::RpcController*,\n                      const
      v1::EchoRequest* request,\n                      v1::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 358
    functionName: EchoServiceV2::EchoServiceV2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceV2()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 359
    functionName: ~EchoServiceV2()
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceV2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: v2::EchoResponse*::set_value
      Src: /src/brpc/test/brpc_server_unittest.cpp:365,1
    - Dst: v2::EchoRequest*::value
      Src: /src/brpc/test/brpc_server_unittest.cpp:365,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v2::EchoRequest*
    - v2::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 367
    functionName: EchoServiceV2::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v2::EchoResponse*::set_value
    - v2::EchoRequest*::value
    - fetch_add
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController*,\n                      const
      v2::EchoRequest* request,\n                      v2::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:378,1
    - Dst: v3::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:378,1
    - Dst: v3::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:379,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - v3::EchoRequest*
    - v3::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 380
    functionName: EchoServiceV3::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - v3::EchoRequest*::message
    - v3::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController*,\n              const
      v3::EchoRequest* request,\n              v3::EchoResponse* response,\n              ::google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:385,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:385,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:386,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:388,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:388,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:392,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:392,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:394,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:397,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:397,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:398,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:401,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:403,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:404,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:404,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:407,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 408
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, empty_enabled_protocols)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:412,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:412,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:413,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:415,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:415,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:419,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:419,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:421,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:422,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:427,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:427,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:428,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:429,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:435,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:435,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:438,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:439,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:442,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:442,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:443,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:446,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 410
    functionDepth: 1
    functionLinenumber: 410
    functionLinenumberEnd: 447
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, only_allow_protocols_in_enabled_protocols)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:451,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:453,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:454,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:454,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:455,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:458,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:458,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:459,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:460,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:461,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:462,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:463,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:465,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:465,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:467,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:468,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:469,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:470,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:472,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:472,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:474,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:475,1
    - Dst: EchoServiceV2::EchoServiceV2
      Src: /src/brpc/test/brpc_server_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:481,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:483,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:484,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:484,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:486,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:487,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:488,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:489,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:490,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:492,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:492,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:494,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:495,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:496,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:497,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:499,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:499,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 503
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - EchoServiceV2::ncalled::load
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EchoServiceV2::EchoServiceV2
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, services_in_different_ns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:507,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:509,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:510,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:510,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:511,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:514,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:514,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:515,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:516,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:517,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:518,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:519,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:521,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:521,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:523,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:524,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:525,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:526,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:527,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:529,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:529,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:531,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:532,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:533,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:534,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:536,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:537,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:542,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:543,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:544,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:545,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:546,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:548,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:548,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:551,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:552,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 553
      start: 505
    functionDepth: 1
    functionLinenumber: 505
    functionLinenumberEnd: 553
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - LOG
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, various_forms_of_uri_paths)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:557,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:559,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:560,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:560,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:561,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:564,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:564,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:565,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:566,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:568,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:569,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:569,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:570,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:571,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:574,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:575,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:576,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:577,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:578,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:579,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:583,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:584,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:585,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:586,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:587,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:588,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:589,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 555
    functionDepth: 1
    functionLinenumber: 555
    functionLinenumberEnd: 592
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - LOG
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, missing_required_fields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:596,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:597,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:601,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:602,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:602,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:603,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:606,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:606,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:607,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:608,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:610,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:611,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:612,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:614,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:614,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:616,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:617,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:618,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:619,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:620,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:622,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 624
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, disallow_http_body_to_pb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:628,1
    - Dst: EchoServiceV2::EchoServiceV2
      Src: /src/brpc/test/brpc_server_unittest.cpp:629,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:632,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:633,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:658,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:658,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:664,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:669,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:669,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:673,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:678,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:678,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:682,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:686,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:687,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:691,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:691,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:695,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:699,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:699,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:702,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:703,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:707,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:707,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:711,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:715,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:715,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:719,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:723,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:724,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:724,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:728,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:728,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:731,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:732,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:732,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:736,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:736,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:740,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:745,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:745,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:746,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:749,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:749,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:750,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:751,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:753,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:753,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:756,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:757,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:758,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:759,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:760,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:761,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:761,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:762,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:762,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:765,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:766,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:767,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:768,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:769,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:771,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:775,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:776,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:777,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:778,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:779,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:781,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:781,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:785,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:786,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:787,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:788,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:789,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:791,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:795,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:796,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:797,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:798,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:799,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:800,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:801,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:801,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:806,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:807,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:808,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:809,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:810,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:812,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:812,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:816,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:817,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:818,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:819,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:820,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:822,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:825,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:826,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:827,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:828,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:829,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:831,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:834,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:835,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:836,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:837,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:838,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:840,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:843,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:844,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:845,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:846,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:847,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:849,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:849,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:852,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:853,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:854,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:855,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:856,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:858,1
    - Dst: EchoServiceV1::ncalled_echo2::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:858,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:861,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:862,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:863,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:864,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:865,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:867,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:867,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:870,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:871,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:872,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:873,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:874,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:876,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:880,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:881,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:882,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:883,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:884,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:885,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:886,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:886,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:888,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:889,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:890,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:891,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:892,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:894,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:894,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: EchoServiceV1::ncalled_echo4::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:897,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:898,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:899,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:900,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:901,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:903,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:903,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: EchoServiceV1::ncalled_echo5::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:907,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:908,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:909,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:910,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:911,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:913,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:913,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:916,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:917,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:918,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:919,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:920,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:922,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:922,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:925,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:926,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:927,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:928,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:929,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:931,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:931,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:935,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:936,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:937,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:938,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:939,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:940,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:940,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:943,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:944,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:946,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:946,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:949,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:950,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:951,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:952,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:953,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:955,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:955,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:959,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:960,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:961,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:962,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:963,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:965,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:968,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:972,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:973,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:973,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:974,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:975,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:975,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 213
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 976
      start: 626
    functionDepth: 1
    functionLinenumber: 626
    functionLinenumberEnd: 976
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled_echo3::load
    - brpc::Server::RemoveService
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EchoServiceV1::ncalled_echo2::load
    - EchoServiceV2::EchoServiceV2
    - LOG
    - brpc::Server::service_count
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - EchoServiceV1::ncalled_echo5::load
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - EchoServiceV1::ncalled_echo4::load
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, restful_mapping)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:984,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:985,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:986,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:987,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:987,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:989,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:992,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:992,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:993,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:994,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:995,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:996,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:996,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:997,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:997,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:998,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:999,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:999,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1005,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1006,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1007,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1010,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1011,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1011,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1012,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1015,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1015,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1016,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1017,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1018,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1019,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1019,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1020,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1021,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1023,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1023,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1028,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1029,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1030,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1030,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1031,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1031,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1056,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1061,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1064,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1064,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1065,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1066,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1067,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1068,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1069,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1070,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1071,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1071,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1078,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1080,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1080,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1082,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1082,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1084,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1084,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1087,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1090,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1090,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1092,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1093,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1093,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1096,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1097,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1098,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1099,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1100,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1100,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1102,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1105,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1106,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1107,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1107,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1109,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1110,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1112,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1113,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1114,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1115,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1117,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1118,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1122,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1122,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1128
      start: 978
    functionDepth: 1
    functionLinenumber: 978
    functionLinenumberEnd: 1128
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - bthread_usleep
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Join
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::DoNothing
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    - test::EchoRequest::set_message
    - LOG
    - brpc::Server::service_count
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Controller::call_id
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::MaxConcurrencyOf
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, http_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1132,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1135,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1136,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1140,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1143,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1144
      start: 1130
    functionDepth: 1
    functionLinenumber: 1130
    functionLinenumberEnd: 1144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::Server
    - brpc::Server::service_count
    - ASSERT_TRUE
    - brpc::Server::Start
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, conflict_name_between_restful_mapping_and_builtin)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1148,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1151,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1152,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1156,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1165,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1165,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1168,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1169,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1170,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1172,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1172,1
    - Dst: EchoServiceV1::GetDescriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1174,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1177,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1178,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1179,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1180,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1182,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1183,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1183,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1186,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1187,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1188,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1189,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1190,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1192,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1196,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1200,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1201,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1201,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1203,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1146
    functionDepth: 1
    functionLinenumber: 1146
    functionLinenumberEnd: 1205
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Server::RemoveService
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::GetDescriptor
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Server::service_count
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled::load
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, restful_mapping_is_tried_after_others)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1208,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1210,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1213,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1213,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: brpc::Server::FindServiceByName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1216,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1217,1
    - Dst: brpc::Server::FindServiceByFullName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1217,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1218,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1219,1
    - Dst: brpc::Server::FindServiceByFullName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1219,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1220,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1223,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1224,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1227,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:1227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: brpc::Server::FindServiceByName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1231,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1233,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1235,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1236,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1239,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1239,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1241,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1244,1
    - Dst: brpc::Server::ClearServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:1246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1247,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1248
      start: 1207
    functionDepth: 1
    functionLinenumber: 1207
    functionLinenumberEnd: 1248
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - ASSERT_TRUE
    - brpc::Server::service_count
    - brpc::Server::ClearServices
    - brpc::Server::Join
    - brpc::Server::first_service
    - brpc::Server::FindServiceByFullName
    - butil::EndPoint::EndPoint
    - brpc::Server::RemoveService
    - brpc::Server::Start
    - pbrpcframework::get_prototype_by_method_descriptor
    - str2endpoint
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::FindServiceByName
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, add_remove_service)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1252,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1252,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1254,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1257,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1259,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1262,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1265,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1267,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1267,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ep
    - sleep_ms
    - succ
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1269
      start: 1250
    functionDepth: 1
    functionLinenumber: 1250
    functionLinenumberEnd: 1269
    functionName: SendSleepRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::latency_us
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Channel::Init
    - EXPECT_FALSE
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void SendSleepRPC(butil::EndPoint ep, int sleep_ms, bool succ)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1272,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1273,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1276,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1277,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1277,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_server_unittest.cpp:1279,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_server_unittest.cpp:1280,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1281,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1284,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1286,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1271
    functionDepth: 1
    functionLinenumber: 1271
    functionLinenumberEnd: 1289
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::GetStat
    - tcp_connect
    - ASSERT_GT
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, close_idle_connections)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_server_unittest.cpp:1292,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1293,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1294,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1296,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1302,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1302,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1304,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1307,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1307,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1308,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1309,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1312,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1313,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1313,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1322,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1322,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1324,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1326,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1327,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1327,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1328,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1329,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1333,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1334,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1334,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1335,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1345,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1345,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1347,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1350,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1350,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1351,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1352,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1356,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1357,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1357,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1358,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1368,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1368,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1370,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1373,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1373,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1374,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1375,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1378,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1379,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1379,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1380,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1382,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1384
      start: 1291
    functionDepth: 1
    functionLinenumber: 1291
    functionLinenumberEnd: 1384
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - bthread_start_background
    - butil::EndPoint::EndPoint
    - bthread_join
    - labs
    - brpc::Server::AddService
    - butil::Timer::start
    - brpc::NewCallback
    - EchoServiceImpl::count::load
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - butil::Timer::Timer
    - EXPECT_TRUE
    - brpc::Server::Start
    - brpc::Server::Stop
    - butil::Timer::stop
    - brpc::Server::Join
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, logoff_and_multiple_start)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1388,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1388,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1391,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1394,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1396,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ep
    - count
    argTypes:
    - butil::EndPoint
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1400
      start: 1386
    functionDepth: 1
    functionLinenumber: 1386
    functionLinenumberEnd: 1400
    functionName: SendMultipleRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Channel::Init
    - test::EchoResponse::message
    - EXPECT_EQ
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void SendMultipleRPC(butil::EndPoint ep, int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1403,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1405,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1405,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1408,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1409,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1409,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1417,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_server_unittest.cpp:1417,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1422,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1423,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1425
      start: 1402
    functionDepth: 1
    functionLinenumber: 1402
    functionLinenumberEnd: 1425
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - pthread_join
    - brpc::Server::Join
    - pthread_create
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::NewCallback
    - str2endpoint
    - EchoServiceImpl::count::load
    - brpc::Server::Stop
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, serving_requests)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1429,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/test/brpc_server_unittest.cpp:1431,1
    - Dst: getpid
      Src: /src/brpc/test/brpc_server_unittest.cpp:1432,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1434,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1437,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1440,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1441
      start: 1427
    functionDepth: 1
    functionLinenumber: 1427
    functionLinenumberEnd: 1441
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_TRUE
    - brpc::Server::PutPidFileIfNeeded
    - ASSERT_EQ
    - ASSERT_FALSE
    - getpid
    - std::ifstream::is_open
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, create_pid_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1447,1
    - Dst: reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1450,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/brpc_server_unittest.cpp:1450,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1454,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1454,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1457,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1457,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1457,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1458,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:1458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1459
      start: 1443
    functionDepth: 1
    functionLinenumber: 1443
    functionLinenumberEnd: 1459
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - reset
    - brpc::PortRange
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::Server::listen_address
    - EXPECT_EQ
    - butil::tcp_listen
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, range_start)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1462,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1462,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1463,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1463,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1464,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1464,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1465,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1465,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1466,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1466,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1467,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1467,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1468,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1468,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1470,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1470,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1473,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1473,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1475,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1475,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1476,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1476,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1477,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1477,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1478,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1478,1
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1480,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1480,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1482
      start: 1461
    functionDepth: 1
    functionLinenumber: 1461
    functionLinenumberEnd: 1482
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAddBuiltinService
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, add_builtin_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1491,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1492,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1495,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1497,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1497,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1499,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1502,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1502,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1503,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1504,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1505,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1506,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1507,1
    - Dst: brpc::Controller::set_pb_bytes_to_base64
      Src: /src/brpc/test/brpc_server_unittest.cpp:1508,1
    - Dst: test::BytesRequest::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1511,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1512,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1513,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1513,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1514,1
    - Dst: test::BytesResponse::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1514,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1515,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1516,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1518
      start: 1484
    functionDepth: 1
    functionLinenumber: 1484
    functionLinenumberEnd: 1518
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - test::BytesResponse::databytes
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - EXPECT_FALSE
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - butil::string_printf
    - brpc::Controller::set_pb_bytes_to_base64
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    - test::BytesRequest::set_databytes
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, base64_to_string)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1522,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1523,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1527,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1528,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1528,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1531,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1534,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1534,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1535,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1536,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1537,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1538,1
    - Dst: brpc::Controller::set_pb_single_repeated_to_array
      Src: /src/brpc/test/brpc_server_unittest.cpp:1539,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1541,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1542,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1545,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1547,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1547,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1548,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1548,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1548,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboRequest::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1553,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1553,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1557,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1558,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1560
      start: 1520
    functionDepth: 1
    functionLinenumber: 1520
    functionLinenumberEnd: 1560
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - test::ComboRequest::requests_size
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - EXPECT_FALSE
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - test::ComboResponse::responses
    - EXPECT_TRUE
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::set_pb_single_repeated_to_array
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - test::ComboRequest::requests
    - test::ComboResponse::responses_size
    - brpc::Controller::Controller
    - test::ComboRequest::add_requests
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, single_repeated_to_array)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1563,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1565,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1571,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1575,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1575,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1576,1
    - Dst: test::EchoRequest::mutable_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1579,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1581,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1582,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1585,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1585,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1590,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/brpc_server_unittest.cpp:1590,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1590,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1593,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1595
      start: 1562
    functionDepth: 1
    functionLinenumber: 1562
    functionLinenumberEnd: 1595
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - EXPECT_TRUE
    - std::ostringstream::str
    - brpc::Server::Join
    - logging::StringSink::find
    - test::EchoRequest::mutable_message
    - brpc::Controller::Failed
    - brpc::Server::Start
    - brpc::Server::Stop
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_NE
    - logging::SetLogSink
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, too_big_message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1599,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1601,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1601,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1603,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1603,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1605,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1608,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1611,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1611,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1614,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1614,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1617,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1618,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1619,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1620,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1621,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1621,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1623,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1626,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1627,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1628,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1628,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1630,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1631,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1633,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1634,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1635,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1636,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1637,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1638,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1639,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1642,1
    - Dst: test::EchoRequest::clear_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1643,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1644,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1645,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1645,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1646,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1646,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1649,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1649,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1654,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1655,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1656,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1661,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1663
      start: 1597
    functionDepth: 1
    functionLinenumber: 1597
    functionLinenumberEnd: 1663
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - bthread_usleep
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Join
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::DoNothing
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - LOG
    - test::EchoRequest::clear_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Controller::call_id
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Server::MaxConcurrencyOf
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1667,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1669,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1669,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1670,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1670,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1673,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1673,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1676,1
    - Dst: brpc::Controller::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1677,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1680,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1681,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1684,1
    - Dst: brpc::Controller::has_response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1686,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1688,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1689
      start: 1665
    functionDepth: 1
    functionLinenumber: 1665
    functionLinenumberEnd: 1689
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - ASSERT_TRUE
    - brpc::Controller::request_user_fields
    - brpc::Controller::ErrorText
    - brpc::Controller::response_user_fields
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::Controller::has_response_user_fields
    - brpc::Controller::Failed
    - brpc::Server::Start
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, user_fields)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1700,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1700,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1701,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1701,1
    - Dst: has_service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1702,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1702,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: has_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: brpc::Controller*::request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: brpc::Controller*::request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: brpc::Controller*::request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1708,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1712,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1712,1
    - Dst: brpc::SerializedRequest*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1715,1
    - Dst: test::EchoRequest::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1716,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1716,1
    - Dst: brpc::Controller*::set_response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1733,1
    - Dst: brpc::Controller*::set_response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1734,1
    - Dst: brpc::Controller*::set_response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1735,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1736,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1737,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1738,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1738,1
    - Dst: brpc::SerializedResponse*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - done
    argTypes:
    - brpc::Controller*
    - brpc::SerializedRequest*
    - brpc::SerializedResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1741
      start: 1693
    functionDepth: 1
    functionLinenumber: 1693
    functionLinenumberEnd: 1741
    functionName: BaiduMasterServiceImpl::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller*::set_response_compress_type
    - test::EchoRequest::message
    - brpc::SerializedResponse*::serialized_data
    - brpc::Controller*::set_response_checksum_type
    - method_name
    - brpc::Controller*::request_attachment
    - ASSERT_NE
    - brpc::Controller*::response_attachment
    - brpc::Controller*::request_checksum_type
    - service_name
    - test::EchoResponse::set_message
    - brpc::Controller*::request_content_type
    - has_method_name
    - brpc::Controller*::sampled_request
    - ASSERT_TRUE
    - brpc::Controller*::set_response_content_type
    - brpc::Controller*::request_compress_type
    - brpc::policy::SerializeRpcMessage
    - has_service_name
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::DeserializeRpcMessage
    - brpc::SerializedRequest*::serialized_data
    linkageType: ''
    returnType: void
    signature: "void ProcessRpcRequest(brpc::Controller* cntl,\n                           const
      brpc::SerializedRequest* request,\n                           brpc::SerializedResponse*
      response,\n                           ::google::protobuf::Closure* done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1748,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1751,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1752,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1753,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1755,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1756,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1756,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1757,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1757,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - ' channel'
    - compress_type
    argTypes:
    - brpc::Channel
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1747
    functionDepth: 1
    functionLinenumber: 1747
    functionLinenumberEnd: 1759
    functionName: TestBaiduMasterService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::request_attachment
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Controller::Controller
    - brpc::Controller::set_request_compress_type
    - test::EchoResponse::message
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void TestBaiduMasterService(brpc::Channel& channel, brpc::CompressType
      compress_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1763,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1763,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1764,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1765,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1766,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1766,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1767,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1768,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1769,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1769,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1771,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1774,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1774,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1777,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1778,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1779,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1783,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1784,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1784,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1785
      start: 1761
    functionDepth: 2
    functionLinenumber: 1761
    functionLinenumberEnd: 1785
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::Join
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - TestBaiduMasterService
    - brpc::Channel::Channel
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, baidu_master_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1790,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1795,1
    - Dst: brpc::SerializedResponse::SerializedResponse
      Src: /src/brpc/test/brpc_server_unittest.cpp:1797,1
    - Dst: brpc::SerializedRequest::SerializedRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1798,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1800,1
    - Dst: brpc::Controller::set_request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1801,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1802,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1803,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1804,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1807,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1807,1
    - Dst: brpc::SerializedRequest::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1809,1
    - Dst: brpc::SampledRequest::SampledRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1810,1
    - Dst: auto::meta::set_service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1811,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1812,1
    - Dst: auto::meta::set_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1813,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1814,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1815,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1817,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1818,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1818,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1818,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::SerializedResponse::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1821,1
    - Dst: brpc::Controller::response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::Controller::response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::Controller::response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1823,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1825,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1825,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 4
    argNames:
    - ' channel'
    - content_type
    - compress_type
    - checksum_type
    argTypes:
    - brpc::Channel
    - brpc::ContentType
    - brpc::CompressType
    - brpc::ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1826
      start: 1787
    functionDepth: 1
    functionLinenumber: 1787
    functionLinenumberEnd: 1826
    functionName: TestGenericCall
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::reset_sampled_request
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::SerializedRequest::SerializedRequest
    - brpc::Controller::request_attachment
    - brpc::SerializedResponse::serialized_data
    - ASSERT_FALSE
    - test::EchoRequest::set_message
    - LOG
    - auto::meta::set_service_name
    - brpc::Controller::response_checksum_type
    - brpc::SerializedRequest::serialized_data
    - brpc::Controller::ErrorText
    - brpc::SerializedResponse::SerializedResponse
    - brpc::Controller::set_request_content_type
    - brpc::Controller::response_content_type
    - brpc::Controller::set_request_compress_type
    - test::EchoResponse::message
    - ASSERT_TRUE
    - brpc::SampledRequest::SampledRequest
    - brpc::Controller::response_compress_type
    - brpc::policy::SerializeRpcMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::DeserializeRpcMessage
    - auto::meta::set_method_name
    - brpc::Controller::set_request_checksum_type
    - CallMethod
    linkageType: ''
    returnType: void
    signature: "void TestGenericCall(brpc::Channel& channel, brpc::ContentType content_type,\n
      \                    brpc::CompressType compress_type,\n                     brpc::ChecksumType
      checksum_type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1830,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1830,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1831,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1833,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1833,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1834,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1836,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1836,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1838,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1841,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1841,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1843,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1845,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1847,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1849,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1852,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1854,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1856,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1858,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1861,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1863,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1865,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1867,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1870,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1872,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1874,1
    - Dst: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1879,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1879,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1880,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1880,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1881
      start: 1828
    functionDepth: 2
    functionLinenumber: 1828
    functionLinenumberEnd: 1881
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::Join
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Channel
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    - str2endpoint
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    - TestGenericCall
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, generic_call)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1884
      start: 1884
    functionDepth: 0
    functionLinenumber: 1884
    functionLinenumberEnd: 1884
    functionName: DefaultRpcPBMessages
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultRpcPBMessages()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1885
      start: 1885
    functionDepth: 0
    functionLinenumber: 1885
    functionLinenumberEnd: 1885
    functionName: Request
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1886
      start: 1886
    functionDepth: 0
    functionLinenumber: 1886
    functionLinenumberEnd: 1886
    functionName: Response
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<DefaultRpcPBMessages>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1896,1
    - Dst: butil::get_object<v1::EchoRequest>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1897,1
    - Dst: butil::get_object<v1::EchoResponse>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1898,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1899,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1900,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - google::protobuf::Service
    - google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1904
      start: 1894
    functionDepth: 0
    functionLinenumber: 1894
    functionLinenumberEnd: 1904
    functionName: TestRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 4
    functionsReached:
    - butil::get_object<v1::EchoResponse>
    - auto::clear_message
    - butil::get_object<v1::EchoRequest>
    - butil::get_object<DefaultRpcPBMessages>
    linkageType: ''
    returnType: brpc::RpcPBMessages
    signature: "brpc::RpcPBMessages * Get(const google::protobuf::Service& service,\n
      \                            const google::protobuf::MethodDescriptor& method)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DefaultRpcPBMessages*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1907,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1908,1
    - Dst: static_cast<v1::EchoRequest*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1908,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1909,1
    - Dst: static_cast<v1::EchoResponse*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1909,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1912,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - messages
    argTypes:
    - brpc::RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1913
      start: 1906
    functionDepth: 0
    functionLinenumber: 1906
    functionLinenumberEnd: 1913
    functionName: TestRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<v1::EchoResponse*>
    - butil::return_object
    - static_cast<DefaultRpcPBMessages*>
    - static_cast<v1::EchoRequest*>
    linkageType: ''
    returnType: void
    signature: void Return(brpc::RpcPBMessages* messages) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1918,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1918,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1919,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1920,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1921,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1921,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1922,1
    - Dst: TestRpcPBMessageFactory::TestRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1924,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1924,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1926,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1929,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1929,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1931,1
    - Dst: v1::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1934,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1936,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1937,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1937,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1937,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1938,1
    - Dst: v1::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1938,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1941,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1942,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1944,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1944,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1946,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1947,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1948,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1948,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1950,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1951,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1951,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1951,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1956,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1956,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1957,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1957,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1958
      start: 1916
    functionDepth: 1
    functionLinenumber: 1916
    functionLinenumberEnd: 1958
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - v1::EchoRequest::set_message
    - EchoServiceV1::EchoServiceV1
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - TestRpcPBMessageFactory::TestRpcPBMessageFactory
    - butil::string_printf
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - v1::EchoService_Stub::Echo
    - brpc::Server::Stop
    - brpc::Server::Join
    - v1::EchoResponse::message
    - brpc::Controller::Controller
    - str2endpoint
    - c_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, rpc_pb_message_factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1962,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1962,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1963,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1965,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1965,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1966,1
    - Dst: brpc::GetArenaRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1968,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1968,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1970,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1971,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1973,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1973,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1975,1
    - Dst: v3::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1978,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1980,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1981,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1981,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1981,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1982,1
    - Dst: v3::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1982,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1985,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1988,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1988,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1990,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1991,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1992,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1992,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1994,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1995,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1995,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1995,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2000,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2001,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2001,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2002
      start: 1960
    functionDepth: 1
    functionLinenumber: 1960
    functionLinenumberEnd: 2002
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - v3::EchoRequest::set_message
    - v3::EchoResponse::message
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - butil::string_printf
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - v3::EchoService_Stub::Echo
    - brpc::Channel::Init
    - brpc::GetArenaRpcPBMessageFactory
    - brpc::Server::Stop
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    - c_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, arena_rpc_pb_message_factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:2007,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2008,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2011,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2011,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:2015,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:2017,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2018,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2018,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2018,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2019,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:2019,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 4
    argNames:
    - ' ep'
    - ' cntl'
    - error_code
    - failed
    argTypes:
    - butil::EndPoint
    - brpc::Controller
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2020
      start: 2004
    functionDepth: 1
    functionLinenumber: 2004
    functionLinenumberEnd: 2020
    functionName: TestBaiduStdAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ErrorCode
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - Failed
    - ErrorText
    linkageType: ''
    returnType: void
    signature: "void TestBaiduStdAuth(const butil::EndPoint& ep,\n    brpc::Controller&
      cntl,\n    int error_code, bool failed)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:2025,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2026,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2029,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2029,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2031,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2032,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2033,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:2035,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2036,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2036,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2036,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2037,1
    - Dst: http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:2037,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 4
    argNames:
    - ' ep'
    - ' cntl'
    - status_code
    - failed
    argTypes:
    - butil::EndPoint
    - brpc::Controller
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2038
      start: 2022
    functionDepth: 1
    functionLinenumber: 2022
    functionLinenumberEnd: 2038
    functionName: TestHttpAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - http_request
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - request_attachment
    - http_response
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - Failed
    - ErrorText
    linkageType: ''
    returnType: void
    signature: "void TestHttpAuth(const butil::EndPoint& ep,\n                  brpc::Controller&
      cntl,\n                  int status_code, bool failed)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2041,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2042,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2042,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:2043,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:2044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2045,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:2045,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:2046,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2047,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2049,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:2049,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:2051,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2052,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2055,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2056,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2057,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2057,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2059,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2060,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2061,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2061,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2065,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2066,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2069,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2070,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2070,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2071
      start: 2040
    functionDepth: 2
    functionLinenumber: 2040
    functionLinenumberEnd: 2071
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - TestHttpAuth
    - butil::EndPoint::EndPoint
    - brpc::Controller::response_attachment
    - brpc::Controller::Reset
    - MyAuthenticator::MyAuthenticator
    - brpc::Server::AddService
    - brpc::ServerOptions::ServerOptions
    - ASSERT_NE
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    - str2endpoint
    - TestBaiduStdAuth
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, auth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::map<std::string, std::string>::string>
      Src: /src/brpc/test/crash_logging_unittest.cc:21,1
    - Dst: butil::debug::SetCrashKeyReportingFunctions
      Src: /src/brpc/test/crash_logging_unittest.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 25
    functionName: CrashLoggingTest::SetUp
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SetCrashKeyReportingFunctions
    - std::map<std::string, std::string>::string>
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::ResetCrashLoggingForTesting
      Src: /src/brpc/test/crash_logging_unittest.cc:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: CrashLoggingTest::TearDown
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::ResetCrashLoggingForTesting
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/test/crash_logging_unittest.cc:37,1
    - Dst: as_string
      Src: /src/brpc/test/crash_logging_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: CrashLoggingTest::SetKeyValue
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - as_string
    linkageType: ''
    returnType: void
    signature: "void SetKeyValue(const butil::StringPiece& key,\n                          const
      butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/crash_logging_unittest.cc:41,1
    - Dst: as_string
      Src: /src/brpc/test/crash_logging_unittest.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: CrashLoggingTest::ClearKeyValue
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - as_string
    - erase
    linkageType: ''
    returnType: void
    signature: void ClearKeyValue(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::InitCrashKeys
      Src: /src/brpc/test/crash_logging_unittest.cc:48,1
    - Dst: arraysize
      Src: /src/brpc/test/crash_logging_unittest.cc:48,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:51,1
    - Dst: butil::debug::ClearCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:53,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:54,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:54,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 55
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::InitCrashKeys
    - butil::debug::SetCrashKeyValue
    - EXPECT_TRUE
    - end
    - find
    - arraysize
    - EXPECT_EQ
    - butil::debug::ClearCrashKey
    linkageType: ''
    returnType: void
    signature: void TEST_F(CrashLoggingTest, SetClearSingle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::InitCrashKeys
      Src: /src/brpc/test/crash_logging_unittest.cc:63,1
    - Dst: arraysize
      Src: /src/brpc/test/crash_logging_unittest.cc:63,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:69,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:70,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:71,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:71,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:72,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:72,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:72,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:75,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:76,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:77,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:79,1
    - Dst: butil::debug::ClearCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:83,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:83,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:84,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:84,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:84,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:85,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:85,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:86,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:86,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:86,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:90,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:92,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:95,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:95,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:95,1
    - Dst: butil::debug::ClearCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:99,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:99,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:100,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:100,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:100,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:101,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:101,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:102,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:102,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 103
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::InitCrashKeys
    - butil::debug::SetCrashKeyValue
    - EXPECT_TRUE
    - end
    - find
    - EXPECT_EQ
    - arraysize
    - size
    - butil::debug::ClearCrashKey
    linkageType: ''
    returnType: void
    signature: void TEST_F(CrashLoggingTest, SetChunked)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::InitCrashKeys
      Src: /src/brpc/test/crash_logging_unittest.cc:108,1
    - Dst: arraysize
      Src: /src/brpc/test/crash_logging_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:110,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:110,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:111,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:111,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:115,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:117,1
    - Dst: size
      Src: /src/brpc/test/crash_logging_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:118,1
    - Dst: end
      Src: /src/brpc/test/crash_logging_unittest.cc:118,1
    - Dst: find
      Src: /src/brpc/test/crash_logging_unittest.cc:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 119
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::InitCrashKeys
    - EXPECT_TRUE
    - end
    - find
    - EXPECT_EQ
    - arraysize
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(CrashLoggingTest, ScopedCrashKey)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::InitCrashKeys
      Src: /src/brpc/test/crash_logging_unittest.cc:128,1
    - Dst: arraysize
      Src: /src/brpc/test/crash_logging_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:130,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:132,1
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:133,1
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/crash_logging_unittest.cc:134,1
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:134,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/crash_logging_unittest.cc:135,1
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/test/crash_logging_unittest.cc:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 136
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::InitCrashKeys
    - EXPECT_TRUE
    - butil::debug::LookupCrashKey
    - arraysize
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(CrashLoggingTest, InitSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ChunkCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:145,1
    - Dst: std::vector::size
      Src: /src/brpc/test/crash_logging_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:146,1
    - Dst: ChunkCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:150,1
    - Dst: std::vector::size
      Src: /src/brpc/test/crash_logging_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:151,1
    - Dst: ChunkCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:156,1
    - Dst: std::vector::size
      Src: /src/brpc/test/crash_logging_unittest.cc:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:158,1
    - Dst: ChunkCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:162,1
    - Dst: std::vector::size
      Src: /src/brpc/test/crash_logging_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:164,1
    - Dst: ChunkCrashKeyValue
      Src: /src/brpc/test/crash_logging_unittest.cc:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:169,1
    - Dst: std::vector::size
      Src: /src/brpc/test/crash_logging_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 174
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ChunkCrashKeyValue
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(CrashLoggingTest, ChunkValue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/crash_logging_unittest.cc:180,1
    - Dst: butil::debug::InitCrashKeys
      Src: /src/brpc/test/crash_logging_unittest.cc:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 181
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/crash_logging_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::debug::InitCrashKeys
    linkageType: ''
    returnType: void
    signature: void TEST_F(CrashLoggingTest, ChunkRounding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:38,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:44,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:45,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:46,1
    - Dst: compress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:46,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:47,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:48,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:49,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:51,1
    - Dst: decompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:51,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:52,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:53,1
    - Dst: printf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 6
    argNames:
    - method_name
    - num
    - ' msg'
    - len
    - compress
    - decompress
    argTypes:
    - char*
    - int
    - snappy_message::SnappyMessageProto
    - int
    - Compress
    - Decompress
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 61
    functionName: CompressMessage
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - compress
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::IOBuf::length
    - decompress
    - printf
    - butil::IOBuf::IOBuf
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: "void CompressMessage(const char* method_name,\n                            int
      num, snappy_message::SnappyMessageProto& msg, \n                            int
      len, Compress compress, Decompress decompress)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::GetUncompressedLength
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:65,1
    - Dst: char::char
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:68,1
    - Dst: butil::snappy::RawUncompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:69,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:73,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - input
    - len
    - buf
    argTypes:
    - char*
    - size_t
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 76
    functionName: SnappyDecompressIOBuf
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::snappy::RawUncompress
    - char::char
    - butil::IOBuf*::append
    - butil::snappy::GetUncompressedLength
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompressIOBuf(char* input, size_t len, butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snappy_message::SnappyMessageProto::set_text
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:82,1
    - Dst: snappy_message::SnappyMessageProto::add_numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:83,1
    - Dst: snappy_message::SnappyMessageProto::add_numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:84,1
    - Dst: snappy_message::SnappyMessageProto::add_numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:85,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:86,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:87,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:87,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:89,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:89,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:90,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:90,1
    - Dst: snappy_message::SnappyMessageProto::text
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:90,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:91,1
    - Dst: snappy_message::SnappyMessageProto::numbers_size
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:92,1
    - Dst: snappy_message::SnappyMessageProto::numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:93,1
    - Dst: snappy_message::SnappyMessageProto::numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:94,1
    - Dst: snappy_message::SnappyMessageProto::numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 95
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - strcmp
    - snappy_message::SnappyMessageProto::add_numbers
    - brpc::policy::SnappyCompress
    - snappy_message::SnappyMessageProto::numbers
    - brpc::policy::SnappyDecompress
    - snappy_message::SnappyMessageProto::text
    - snappy_message::SnappyMessageProto::numbers_size
    - butil::IOBuf::IOBuf
    - snappy_message::SnappyMessageProto::set_text
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, snappy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:98,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:100,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:100,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:101,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:102,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:102,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:103,1
    - Dst: to_string
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 104
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - to_string
    - brpc::policy::SnappyCompress
    - ASSERT_STREQ
    - brpc::policy::SnappyDecompress
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, snappy_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char::char
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:109,1
    - Dst: snappy_message::SnappyMessageProto::set_text
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:119,1
    - Dst: snappy_message::SnappyMessageProto::add_numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:120,1
    - Dst: snappy_message::SnappyMessageProto::add_numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:121,1
    - Dst: snappy_message::SnappyMessageProto::add_numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:122,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:123,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:124,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:125,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:127,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:127,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:129,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:129,1
    - Dst: snappy_message::SnappyMessageProto::text
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:130,1
    - Dst: snappy_message::SnappyMessageProto::numbers_size
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:131,1
    - Dst: snappy_message::SnappyMessageProto::numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:132,1
    - Dst: snappy_message::SnappyMessageProto::numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:133,1
    - Dst: snappy_message::SnappyMessageProto::numbers
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:133,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 135
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - strcmp
    - snappy_message::SnappyMessageProto::add_numbers
    - brpc::policy::SnappyCompress
    - snappy_message::SnappyMessageProto::numbers
    - snappy_message::SnappyMessageProto::numbers_size
    - brpc::policy::SnappyDecompress
    - snappy_message::SnappyMessageProto::text
    - char::char
    - butil::IOBuf::IOBuf
    - snappy_message::SnappyMessageProto::set_text
    - ProfilerStop
    - ProfilerStart
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, mass_snappy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char::char
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:139,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:152,1
    - Dst: butil::snappy::Compress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:152,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:155,1
    - Dst: butil::snappy::Compress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:155,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:155,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:156,1
    - Dst: const_cast<char*>
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:159,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:160,1
    - Dst: butil::snappy::Uncompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:160,1
    - Dst: const_cast<char*>
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:162,1
    - Dst: butil::snappy::Uncompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:162,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:162,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 164
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - std::string::c_str
    - butil::snappy::Uncompress
    - butil::snappy::Compress
    - std::string::append
    - char::char
    - butil::IOBuf::IOBuf
    - const_cast<char*>
    - std::string::size
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, snappy_test)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:169,1
    - Dst: printf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:170,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:173,1
    - Dst: char::char
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:176,1
    - Dst: snappy_message::SnappyMessageProto::set_text
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:186,1
    - Dst: std::min
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:187,1
    - Dst: CompressMessage
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:188,1
    - Dst: CompressMessage
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:191,1
    - Dst: CompressMessage
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:194,1
    - Dst: printf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:197,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 166
    functionDepth: 2
    functionLinenumber: 166
    functionLinenumberEnd: 200
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - CompressMessage
    - std::min
    - printf
    - char::char
    - snappy_message::SnappyMessageProto::set_text
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, throughput_compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:207,1
    - Dst: printf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:208,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:211,1
    - Dst: char::char
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:214,1
    - Dst: rand
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:216,1
    - Dst: snappy_message::SnappyMessageProto::set_text
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:220,1
    - Dst: std::min
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:221,1
    - Dst: CompressMessage
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:222,1
    - Dst: CompressMessage
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:225,1
    - Dst: CompressMessage
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:228,1
    - Dst: printf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:231,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 202
    functionDepth: 2
    functionLinenumber: 202
    functionLinenumberEnd: 234
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - CompressMessage
    - std::min
    - butil::Timer::Timer
    - printf
    - char::char
    - snappy_message::SnappyMessageProto::set_text
    - rand
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, throughput_compare_complete_random)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:237,1
    - Dst: char::char
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:239,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:246,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:246,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:248,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:248,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:249,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:250,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:251,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:251,1
    - Dst: const_cast<char*>
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:251,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:251,1
    - Dst: to_string
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:253,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:253,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_snappy_compress_unittest.cpp:253,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 2
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_snappy_compress_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - to_string
    - strcmp
    - std::string::c_str
    - brpc::policy::SnappyCompress
    - std::string::data
    - butil::IOBuf::to_string
    - SnappyDecompressIOBuf
    - butil::IOBuf::append
    - char::char
    - butil::IOBuf::IOBuf
    - const_cast<char*>
    - std::string::size
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(test_compress_method, mass_snappy_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: FlatMapTest::FlatMapTest
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlatMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~FlatMapTest()
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FlatMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: Foo
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: Foo
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo(const Foo&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: operator=(const Foo&)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(const Foo&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:59,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:70,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:74,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 79
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::erase
    - ASSERT_EQ
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, initialization_of_values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::PooledAllocator<int, 128>::allocate
      Src: /src/brpc/test/flat_map_unittest.cpp:83,1
    - Dst: butil::details::PooledAllocator<int, 128>::allocate
      Src: /src/brpc/test/flat_map_unittest.cpp:87,1
    - Dst: std::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 94
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::details::PooledAllocator<int, 128>::allocate
    - std::swap
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, swap_pooled_allocator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:99,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:99,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:100,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:101,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:104,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:105,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:106,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:109,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:109,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:110,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:111,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:111,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:114,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:117,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:118,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:119,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:122,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:124,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:124,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:125,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:128,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:130,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:131,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:131,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:132,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:135,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:137,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:138,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:139,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:139,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:143,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:152,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:153,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:156,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:166,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:167,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:178,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:179,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:189,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:189,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/flat_map_unittest.cpp:190,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:190,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:193,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:193,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:195,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:202,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:204,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/flat_map_unittest.cpp:206,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:206,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/flat_map_unittest.cpp:208,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:208,1
    - Dst: arraysize
      Src: /src/brpc/test/flat_map_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:211,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:211,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:215,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:217,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:224,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 105
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_GE
    - butil::flatmap_round
    - arraysize
    - ASSERT_LE
    - Map::empty
    - Map::bucket_count
    - ASSERT_NE
    - Map::init
    - Map::initialized
    - Map::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, copy_flat_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:230,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:230,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:234,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:235,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:237,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:238,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:238,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:240,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FlatMap::seek
    - ASSERT_TRUE
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, seek_by_string_piece)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:245,1
    - Dst: tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:245,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:245,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:252,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:263,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:264,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:265,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:267,1
    - Dst: strcasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:268,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:269,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:270,1
    - Dst: strncasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:271,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:272,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:273,1
    - Dst: memcmp
      Src: /src/brpc/test/flat_map_unittest.cpp:274,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:276,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:276,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:277,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:278,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 279
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - strncasecmp
    - butil::ascii_tolower
    - strcasecmp
    - rand
    - LOG
    - tolower
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, to_lower)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:284,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:285,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/test/flat_map_unittest.cpp:287,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:289,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:290,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:290,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - __builtin_ctzl
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, __builtin_ctzl_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:295,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 305
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::CaseIgnoredFlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, case_ignored_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:309,1
    - Dst: butil::CaseIgnoredFlatSet::init
      Src: /src/brpc/test/flat_map_unittest.cpp:309,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:311,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:311,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:313,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:313,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:315,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:315,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:317,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:317,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:319,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:319,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:321,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:322,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:324,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 325
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::CaseIgnoredFlatSet::init
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::CaseIgnoredFlatSet::seek
    - butil::CaseIgnoredFlatSet::size
    - butil::CaseIgnoredFlatSet::insert
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, case_ignored_set)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:335,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:338,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:338,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:339,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:342,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:342,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:343,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:344,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:345,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:346,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:347,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:348,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:349,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:349,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:350,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:350,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:361,1
    - Dst: S1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:362,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:362,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:363,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:365,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:365,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:366,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:367,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:368,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:368,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:370,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:371,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:372,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:373,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:374,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:375,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:376,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:376,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 385
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - S1::begin
    - ASSERT_EQ
    - ASSERT_TRUE
    - M1::size
    - M1::begin
    - M1::end
    - S1::init
    - S1::seek
    - S1::size
    - S1::erase
    - M1::init
    - M1::insert
    - S1::end
    - S1::insert
    - M1::erase
    - M1::seek
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, make_sure_all_methods_compile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:393,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:393,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:394,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:396,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:398,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/flat_map_unittest.cpp:398,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:401,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:405,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:406,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:410,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:411,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:416,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:416,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:417,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:418,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:420,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:422,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:424,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:425,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:427,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:429,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:430,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:432,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:434,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:435,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:435,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:436,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:436,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:438,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:440,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:440,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:442,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:443,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:447,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:448,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:452,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:453,1
    - Dst: find_cstr
      Src: /src/brpc/test/flat_map_unittest.cpp:455,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:455,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:457,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:459,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:459,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:466,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:471,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:472,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:473,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:473,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:476,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:477,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:478,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:478,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:480,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:481,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:482,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:483,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:483,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:484,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:485,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:486,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:486,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:489,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:489,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:490,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:491,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:491,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:494,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:495,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:495,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:497,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:498,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:498,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:500,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:501,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:502,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:504,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:505,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:509,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:510,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:512,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:514,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:515,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:515,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:517,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:518,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:518,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 108
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 520
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - stop
    - start
    - std::map::find
    - n_elapsed
    - butil::FlatMap::size
    - butil::Timer::start
    - find_cstr
    - butil::FlatMap::init
    - LOG
    - butil::FlatMap::swap
    - butil::Timer::Timer
    - butil::string_printf
    - butil::Timer::n_elapsed
    - butil::FlatMap::seek
    - butil::hash_map::find
    - butil::FlatMap::resize
    - std::vector::reserve
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::Timer::stop
    - c_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, flat_map_of_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:529,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:530,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:531,1
    - Dst: M2::init
      Src: /src/brpc/test/flat_map_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:533,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:534,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:538,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:543,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:544,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:548,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:550,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:551,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:557,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:557,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:558,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:559,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:560,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:560,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:561,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:563,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:564,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:564,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:565,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:566,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:566,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:567,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:569,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:570,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:571,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:575,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 577
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::vector::push_back
    - M2::init
    - butil::Timer::stop
    - M1::begin
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - M1::end
    - M2::end
    - M2::begin
    - M1::init
    - rand
    - std::vector::reserve
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, fast_iterator)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Key>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:584,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:587,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:587,1
    - Dst: save_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:590,1
    - Dst: on_pause
      Src: /src/brpc/test/flat_map_unittest.cpp:592,1
    - Dst: restore_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:593,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:594,1
    - Dst: std::vector<Key>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:595,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:597,1
    - Dst: std::vector<Key>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:601,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 4
    argNames:
    - keys
    - ' map'
    - max_one_pass
    - ' on_pause'
    argTypes:
    - std::vector<Key>*
    - butil::FlatMap<Key, Value>
    - size_t
    - OnPause
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 580
    functionDepth: 1
    functionLinenumber: 580
    functionLinenumberEnd: 603
    functionName: list_flat_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - end
    - on_pause
    - restore_iterator
    - std::vector<Key>*::push_back
    - save_iterator
    - begin
    - std::vector<Key>*::clear
    linkageType: ''
    returnType: void
    signature: "void list_flat_map(std::vector<Key>* keys,\n                          const
      butil::FlatMap<Key, Value>& map,\n                          size_t max_one_pass,\n
      \                         OnPause& on_pause)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/flat_map_unittest.cpp:609,1
    - Dst: time
      Src: /src/brpc/test/flat_map_unittest.cpp:609,1
    - Dst: PositionHintMap*::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:612,1
    - Dst: PositionHintMap*::init
      Src: /src/brpc/test/flat_map_unittest.cpp:612,1
    - Dst: std::vector<uint64_t>*::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:615,1
    - Dst: std::vector<uint64_t>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:616,1
    - Dst: PositionHintMap*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:617,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:619,1
    - Dst: PositionHintMap*::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:620,1
    - Dst: std::vector<uint64_t>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:623,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    - Dst: PositionHintMap*::bucket_info
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    - Dst: PositionHintMap*::size
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - map
    - keys
    argTypes:
    - PositionHintMap*
    - std::vector<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 627
    functionName: fill_position_hint_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - PositionHintMap*::init
    - std::vector<uint64_t>*::push_back
    - LOG
    - PositionHintMap*::bucket_info
    - PositionHintMap*::size
    - std::vector<uint64_t>*::reserve
    - std::vector<uint64_t>*::clear
    - PositionHintMap*::clear
    - rand
    - time
    - PositionHintMap*::seek
    - PositionHintMap*::initialized
    - srand
    linkageType: ''
    returnType: void
    signature: "void fill_position_hint_map(PositionHintMap* map,\n                                   std::vector<uint64_t>*
      keys)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 630
    functionName: CountOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountOnPause()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 631
    functionDepth: 0
    functionLinenumber: 631
    functionLinenumberEnd: 633
    functionName: operator()(const PositionHintMap::PositionHint&)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint&)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:640,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:646,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:647,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:647,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:647,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:648,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:648,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:648,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:649,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:650,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:650,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:652,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 637
    functionDepth: 2
    functionLinenumber: 637
    functionLinenumberEnd: 655
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - PositionHintMap::size
    - std::vector::end
    - std::sort
    - fill_position_hint_map
    - std::vector::begin
    - list_flat_map
    - ASSERT_NE
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, do_nothing_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:659,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:660,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 661
    functionName: RemoveInsertVisitedOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: void
    signature: void RemoveInsertVisitedOnPause()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:665,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:665,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:670,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:670,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:671,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:677,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:677,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:678,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 680
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - size
    - erase
    - insert
    - seek
    - rand
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint& hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:690,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:693,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:698,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:699,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:700,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:700,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:701,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:701,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:701,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:702,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:704,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:706,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:707,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:707,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    - Dst: RemoveInsertVisitedOnPause::inserted_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 687
    functionDepth: 2
    functionLinenumber: 687
    functionLinenumberEnd: 711
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - RemoveInsertVisitedOnPause::removed_keys::size
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - PositionHintMap::size
    - std::vector::end
    - std::sort
    - ASSERT_FALSE
    - fill_position_hint_map
    - std::vector::begin
    - RemoveInsertVisitedOnPause::removed_keys::seek
    - list_flat_map
    - RemoveInsertVisitedOnPause::inserted_keys::seek
    - ASSERT_NE
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, erase_insert_visited_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 714
    functionDepth: 0
    functionLinenumber: 714
    functionLinenumberEnd: 716
    functionName: RemoveHintedOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: void
    signature: void RemoveHintedOnPause()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:720,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 717
    functionDepth: 0
    functionLinenumber: 717
    functionLinenumberEnd: 721
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - erase
    - insert
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint& hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:729,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:735,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:738,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:739,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:739,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:739,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::unique
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: LOG_IF
      Src: /src/brpc/test/flat_map_unittest.cpp:741,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:741,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:744,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:744,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:744,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:745,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:747,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: RemoveHintedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 753
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 753
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - std::vector::end
    - PositionHintMap::size
    - std::sort
    - fill_position_hint_map
    - std::vector::begin
    - std::unique
    - LOG_IF
    - list_flat_map
    - RemoveHintedOnPause::removed_keys::seek
    - ASSERT_NE
    - std::vector::size
    - std::vector::resize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, erase_hinted_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:758,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:759,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 760
    functionName: RemoveInsertUnvisitedOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: void
    signature: void RemoveInsertUnvisitedOnPause()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:765,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:766,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:767,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:767,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:767,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:768,1
    - Dst: push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:771,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:772,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:779,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:779,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:784,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:787,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:787,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:787,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:791,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:791,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:792,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 795
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - end
    - ASSERT_EQ
    - std::find
    - size
    - push_back
    - seek
    - erase
    - insert
    - begin
    - rand
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint& hint)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:806,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:814,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:815,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:815,1
    - Dst: RemoveInsertUnvisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:816,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:816,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:816,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:817,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:817,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:817,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:818,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:822,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:822,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 803
    functionDepth: 2
    functionLinenumber: 803
    functionLinenumberEnd: 824
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - RemoveInsertUnvisitedOnPause::removed_keys::size
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - PositionHintMap::size
    - std::vector::end
    - std::sort
    - fill_position_hint_map
    - std::vector::begin
    - list_flat_map
    - ASSERT_NE
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, erase_insert_unvisited_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - k
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 834
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 834
    functionName: fmix64
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fmix64 (uint64_t k)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fmix64
      Src: /src/brpc/test/flat_map_unittest.cpp:839,1
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/test/flat_map_unittest.cpp:839,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 838
    functionDepth: 1
    functionLinenumber: 838
    functionLinenumberEnd: 839
    functionName: operator()(const T* p) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - fmix64
    - reinterpret_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/test/flat_map_unittest.cpp:845,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 844
    functionDepth: 0
    functionLinenumber: 844
    functionLinenumberEnd: 845
    functionName: operator()(const T* p) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:851,1
    - Dst: int::int
      Src: /src/brpc/test/flat_map_unittest.cpp:852,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/test/flat_map_unittest.cpp:856,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:861,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:863,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:864,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/test/flat_map_unittest.cpp:864,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:864,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:866,1
    - Dst: std::set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:867,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:868,1
    - Dst: butil::hash_set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:869,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:871,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:875,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:875,1
    - Dst: butil::hash_set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:875,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:880,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:881,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:882,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:888,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:889,1
    - Dst: std::set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:890,1
    - Dst: std::set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:890,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:892,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:893,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:893,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:893,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:896,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:897,1
    - Dst: butil::hash_set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:898,1
    - Dst: butil::hash_set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:898,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:900,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:901,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:901,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:901,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 906
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 906
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::set::size
    - std::vector::begin
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    - ARRAY_SIZE
    - butil::Timer::start
    - std::set::end
    - std::random_shuffle
    - std::set::find
    - butil::hash_set::find
    - LOG
    - butil::Timer::Timer
    - butil::FlatSet::init
    - butil::hash_set::insert
    - butil::FlatSet::seek
    - butil::Timer::n_elapsed
    - butil::FlatSet::size
    - butil::hash_set::end
    - butil::hash_set::size
    - std::vector::reserve
    - std::vector::push_back
    - std::set::insert
    - butil::Timer::stop
    - std::vector::end
    - std::vector::size
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf_cmp_with_map_storing_pointers)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 914
    functionDepth: 0
    functionLinenumber: 914
    functionLinenumberEnd: 914
    functionName: Value
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 915
      start: 915
    functionDepth: 0
    functionLinenumber: 915
    functionLinenumberEnd: 915
    functionName: Value
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Value(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 916
    functionName: Value
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Value (const Value& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 920
      start: 917
    functionDepth: 0
    functionLinenumber: 917
    functionLinenumberEnd: 920
    functionName: ~Value()
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 926
      start: 922
    functionDepth: 0
    functionLinenumber: 922
    functionLinenumberEnd: 926
    functionName: '& operator= (const Value& rhs)'
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Value
    signature: Value & operator= (const Value& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 928
    functionDepth: 0
    functionLinenumber: 928
    functionLinenumberEnd: 928
    functionName: operator== (const Value& rhs) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator== (const Value& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 929
    functionDepth: 0
    functionLinenumber: 929
    functionLinenumberEnd: 929
    functionName: operator!= (const Value& rhs) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!= (const Value& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' v'
    argTypes:
    - std::ostream
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 931
    functionDepth: 0
    functionLinenumber: 931
    functionLinenumberEnd: 932
    functionName: '& operator<< (std::ostream& os, const Value& v)'
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<< (std::ostream& os, const Value& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 941
    functionDepth: 0
    functionLinenumber: 941
    functionLinenumberEnd: 941
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 942
      start: 942
    functionDepth: 0
    functionLinenumber: 942
    functionLinenumberEnd: 942
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Key(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 943
      start: 943
    functionDepth: 0
    functionLinenumber: 943
    functionLinenumberEnd: 943
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Key(const Key& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 944
    functionName: operator=(const Key& rhs)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(const Key& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 945
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 945
    functionName: ~Key()
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' k'
    argTypes:
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 949
    functionDepth: 0
    functionLinenumber: 949
    functionLinenumberEnd: 949
    functionName: operator()(const Key& k) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const Key& k) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - Key
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 953
      start: 952
    functionDepth: 0
    functionLinenumber: 952
    functionLinenumberEnd: 953
    functionName: operator()(const Key& k1, const Key& k2) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const Key& k1, const Key& k2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:958,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:959,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:966,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:966,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:967,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:968,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:970,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:971,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 972
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::erase
    - ASSERT_EQ
    - butil::FlatMap::seek
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, key_value_are_not_constructed_before_first_insertion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:976,1
    - Dst: butil::FlatMap::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:976,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:977,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:977,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:978,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:979,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:979,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:980,1
    - Dst: butil::FlatMap::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:980,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:981,1
    - Dst: butil::FlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:981,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:982,1
    - Dst: butil::FlatMap::load_factor
      Src: /src/brpc/test/flat_map_unittest.cpp:982,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:984,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:984,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:985,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:987,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:990,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:991,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:994,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:994,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:996,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:997,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:998,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:998,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:999,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1001,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1003,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1003,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1005,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1006,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1007,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1008,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1010,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 974
    functionDepth: 1
    functionLinenumber: 974
    functionLinenumberEnd: 1011
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::FlatMap::bucket_count
    - butil::FlatMap::load_factor
    - butil::FlatMap::seek
    - ASSERT_NE
    - butil::FlatMap::initialized
    - butil::FlatMap::init
    - butil::FlatMap::size
    - butil::FlatMap::erase
    - butil::FlatMap::swap
    - butil::FlatMap::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, manipulate_uninitialized_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1014,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1015,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1016,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1017,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1020,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1025,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1027,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1029,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1033,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1035,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1037,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1041,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1043,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1048,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1050,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1050,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1051,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1052,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1053,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1055
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::CaseIgnoredFlatMap::init
    - butil::FlatMap::init
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf_small_string_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1061,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1062,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1063,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1063,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1064,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1065,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1065,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1076,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1076,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1077,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1078,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1079,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1081,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1085,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1085,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1086,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1086,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1087,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1092,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1092,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1093,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1093,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1095,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1099,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1100,1
    - Dst: Map::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1101,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: Map::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1115,1
    - Dst: Map::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1118,1
    - Dst: Map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1119,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1119,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1120,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1121,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1122,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1123,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1124,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: Map::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1131,1
    - Dst: Map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1135,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1136,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1137,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1138,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1139,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1139,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1140
      start: 1057
    functionDepth: 1
    functionLinenumber: 1057
    functionLinenumberEnd: 1140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - Map::seek
    - Map::erase
    - Map::_pool::count_allocated
    - ASSERT_FALSE
    - Map::end
    - Map::clear
    - Map::begin
    - Map::bucket_count
    - Map::_pool::count_free
    - Map::empty
    - Map::initialized
    - Map::init
    - Map::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/flat_map_unittest.cpp:1143,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:1149,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1158,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1159,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1160,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1168,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1169,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1171,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1172,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1179,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1179,1
    - Dst: find
      Src: /src/brpc/test/flat_map_unittest.cpp:1181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1182,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1183,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1186,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1187,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1199,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1142
    functionDepth: 1
    functionLinenumber: 1142
    functionLinenumberEnd: 1208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - end
    - ASSERT_TRUE
    - ASSERT_EQ
    - find
    - size
    - seek
    - erase
    - clear
    - insert
    - begin
    - rand
    - init
    - LOG
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, random_insert_erase)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:1213,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1223,1
    - Dst: std::max
      Src: /src/brpc/test/flat_map_unittest.cpp:1228,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1230,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1231,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1240,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1241,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1242,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1243,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1244,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1245,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1247,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1249,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1250,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1252,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1256,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1256,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1256,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1259,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1260,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1261,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1264,1
    - Dst: butil::MultiFlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1267,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1268,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1271,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1273,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1274,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1275,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1278,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1280,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1281,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1282,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1285,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1287,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1288,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1289,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1292,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1294,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1295,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1296,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1297,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1299,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1301,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1302,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1303,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1306,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1308,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1309,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1312,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1312,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1313,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1313,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1314,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1314,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1315,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1315,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1316,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1316,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1317,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1317,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1318,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1318,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1321,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1321,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1321,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1324,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1325,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1326,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1328,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1330,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1332,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1334,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1336,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1337,1
    - Dst: std::map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1338,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1340,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1342,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1343,1
    - Dst: butil::PooledMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1344,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1346,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1348,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1349,1
    - Dst: std::unordered_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1350,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1352,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1354,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1355,1
    - Dst: std::unordered_multimap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1356,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1358,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1360,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1361,1
    - Dst: butil::hash_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1362,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1364,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1366,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1367,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1370,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1370,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1371,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1371,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1372,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1372,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1373,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1373,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1374,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1374,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1375,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1375,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1376,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1376,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 110
    argCount: 2
    argNames:
    - random
    - ' value'
    argTypes:
    - bool
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1378
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1378
    functionName: perf_insert_erase
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_multimap::insert
    - std::max
    - std::map::erase
    - butil::PooledMap::clear
    - stop
    - butil::MultiFlatMap::clear
    - start
    - std::vector::begin
    - n_elapsed
    - ARRAY_SIZE
    - std::map::clear
    - std::unordered_multimap::erase
    - butil::Timer::start
    - std::unordered_map::clear
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::FlatMap::init
    - rand
    - LOG
    - butil::Timer::Timer
    - butil::PooledMap::erase
    - butil::Timer::n_elapsed
    - std::unordered_multimap::clear
    - butil::MultiFlatMap::erase
    - random_shuffle
    - butil::hash_map::erase
    - std::vector::clear
    - butil::FlatMap::erase
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - std::unordered_map::erase
    - butil::hash_map::clear
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void perf_insert_erase(bool random, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:1383,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1393,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1396,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1397,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1398,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1400,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1401,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1403,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1406,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1407,1
    - Dst: butil::MultiFlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1411,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1412,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1416,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1417,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1421,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1422,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1426,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1427,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1431,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1432,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1433,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1436,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1437,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1444,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1445,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1446,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1448,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1450,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1452,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1454,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1456,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1457,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1458,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1460,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1462,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1463,1
    - Dst: butil::PooledMap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1464,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1466,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1468,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1469,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1472,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1474,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1475,1
    - Dst: std::unordered_multimap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1476,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1478,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1480,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1481,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1482,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1484,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1486,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1486,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1489,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1489,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1490,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1490,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1491,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1491,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1492,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1492,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1493,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1493,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1494,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1494,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1495,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1495,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 75
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1381
    functionDepth: 1
    functionLinenumber: 1381
    functionLinenumberEnd: 1497
    functionName: perf_seek
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_multimap::insert
    - butil::PooledMap::clear
    - stop
    - butil::MultiFlatMap::clear
    - start
    - std::map::find
    - std::vector::begin
    - n_elapsed
    - butil::PooledMap::find
    - ARRAY_SIZE
    - std::map::clear
    - butil::Timer::start
    - std::unordered_map::clear
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::FlatMap::init
    - rand
    - LOG
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::FlatMap::seek
    - std::unordered_multimap::clear
    - random_shuffle
    - butil::hash_map::find
    - std::vector::clear
    - butil::MultiFlatMap::seek
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - std::unordered_multimap::find
    - butil::hash_map::clear
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void perf_seek(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1507,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1508,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1508,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1509,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1509,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1510,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1511,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1511,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1512,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1512,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1513,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1514,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1514,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1515,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1515,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1516,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1517,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1517,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1519
      start: 1506
    functionDepth: 2
    functionLinenumber: 1506
    functionLinenumberEnd: 1519
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - Dummy2
    - perf_insert_erase
    - perf_seek
    - Dummy1
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1529,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1529,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1530
      start: 1521
    functionDepth: 1
    functionLinenumber: 1521
    functionLinenumberEnd: 1530
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FlatMap::is_too_crowded
    - ASSERT_FALSE
    - butil::FlatMap::size
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1544,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1549,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1552,1
    - Dst: butil::MultiFlatMap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1555,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1559,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1559,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1561,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1561,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1566,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: hasher
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1570,1
    - Dst: hasher
      Src: /src/brpc/test/flat_map_unittest.cpp:1570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1575,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1580,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1581,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1582,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1582,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1586,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1587,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1588,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1589,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1596,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1603,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1608,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1612,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1616,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1617
      start: 1532
    functionDepth: 1
    functionLinenumber: 1532
    functionLinenumberEnd: 1617
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::MultiFlatMap::bucket_count
    - std::find
    - ASSERT_TRUE
    - std::vector::end
    - butil::MultiFlatMap::insert
    - butil::flatmap_round
    - butil::MultiFlatMap::erase
    - butil::MultiFlatMap::init
    - butil::MultiFlatMap::seek_all
    - std::vector::begin
    - hasher
    - Foo
    - butil::flatmap_mod
    - ASSERT_NE
    - butil::MultiFlatMap::seek
    - std::vector::size
    - butil::MultiFlatMap::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, multi)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: FlatMapTest::FlatMapTest
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlatMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~FlatMapTest()
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FlatMapTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: Foo
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: Foo
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo(const Foo&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: operator=(const Foo&)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(const Foo&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:59,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:70,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:74,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 79
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::erase
    - ASSERT_EQ
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, initialization_of_values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::PooledAllocator<int, 128>::allocate
      Src: /src/brpc/test/flat_map_unittest.cpp:83,1
    - Dst: butil::details::PooledAllocator<int, 128>::allocate
      Src: /src/brpc/test/flat_map_unittest.cpp:87,1
    - Dst: std::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 94
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::details::PooledAllocator<int, 128>::allocate
    - std::swap
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, swap_pooled_allocator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:99,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:99,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:100,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:101,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:104,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:105,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:106,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:109,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:109,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:110,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:111,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:111,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:114,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:117,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:118,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:119,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:122,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:124,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:124,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:125,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:128,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:130,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:131,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:131,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:132,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:135,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:137,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:138,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:139,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:139,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:143,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:152,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:153,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:156,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:166,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:167,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:178,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:179,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:189,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:189,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/flat_map_unittest.cpp:190,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:190,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:193,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:193,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:195,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:202,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:204,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/flat_map_unittest.cpp:206,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:206,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/flat_map_unittest.cpp:208,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:208,1
    - Dst: arraysize
      Src: /src/brpc/test/flat_map_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:211,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:211,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:215,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:217,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:224,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 105
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_GE
    - butil::flatmap_round
    - arraysize
    - ASSERT_LE
    - Map::empty
    - Map::bucket_count
    - ASSERT_NE
    - Map::init
    - Map::initialized
    - Map::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, copy_flat_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:230,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:230,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:234,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:235,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:237,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:238,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:238,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:240,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FlatMap::seek
    - ASSERT_TRUE
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, seek_by_string_piece)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:245,1
    - Dst: tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:245,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:245,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:252,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:263,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:264,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:265,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:267,1
    - Dst: strcasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:268,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:269,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:270,1
    - Dst: strncasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:271,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:272,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:273,1
    - Dst: memcmp
      Src: /src/brpc/test/flat_map_unittest.cpp:274,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:276,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:276,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:277,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:278,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 279
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - strncasecmp
    - butil::ascii_tolower
    - strcasecmp
    - rand
    - LOG
    - tolower
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, to_lower)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:284,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:285,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/test/flat_map_unittest.cpp:287,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:289,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:290,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:290,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - __builtin_ctzl
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, __builtin_ctzl_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:295,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 305
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::CaseIgnoredFlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, case_ignored_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:309,1
    - Dst: butil::CaseIgnoredFlatSet::init
      Src: /src/brpc/test/flat_map_unittest.cpp:309,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:311,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:311,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:313,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:313,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:315,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:315,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:317,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:317,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:319,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:319,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:321,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:322,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:324,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 325
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::CaseIgnoredFlatSet::init
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::CaseIgnoredFlatSet::seek
    - butil::CaseIgnoredFlatSet::size
    - butil::CaseIgnoredFlatSet::insert
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, case_ignored_set)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:335,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:338,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:338,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:339,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:342,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:342,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:343,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:344,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:345,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:346,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:347,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:348,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:349,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:349,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:350,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:350,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:361,1
    - Dst: S1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:362,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:362,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:363,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:365,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:365,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:366,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:367,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:368,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:368,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:370,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:371,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:372,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:373,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:374,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:375,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:376,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:376,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 385
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - S1::begin
    - ASSERT_EQ
    - ASSERT_TRUE
    - M1::size
    - M1::begin
    - M1::end
    - S1::init
    - S1::seek
    - S1::size
    - S1::erase
    - M1::init
    - M1::insert
    - S1::end
    - S1::insert
    - M1::erase
    - M1::seek
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, make_sure_all_methods_compile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:393,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:393,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:394,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:396,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:398,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/flat_map_unittest.cpp:398,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:401,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:405,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:406,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:410,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:411,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:416,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:416,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:417,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:418,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:420,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:422,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:424,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:425,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:427,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:429,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:430,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:432,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:434,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:435,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:435,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:436,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:436,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:438,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:440,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:440,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:442,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:443,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:447,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:448,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:452,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:453,1
    - Dst: find_cstr
      Src: /src/brpc/test/flat_map_unittest.cpp:455,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:455,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:457,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:459,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:459,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:466,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:471,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:472,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:473,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:473,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:476,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:477,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:478,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:478,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:480,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:481,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:482,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:483,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:483,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:484,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:485,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:486,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:486,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:489,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:489,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:490,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:491,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:491,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:494,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:495,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:495,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:497,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:498,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:498,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:500,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:501,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:502,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:504,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:505,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:509,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:510,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:512,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:514,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:515,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:515,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:517,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:518,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:518,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 108
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 520
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - stop
    - start
    - std::map::find
    - n_elapsed
    - butil::FlatMap::size
    - butil::Timer::start
    - find_cstr
    - butil::FlatMap::init
    - LOG
    - butil::FlatMap::swap
    - butil::Timer::Timer
    - butil::string_printf
    - butil::Timer::n_elapsed
    - butil::FlatMap::seek
    - butil::hash_map::find
    - butil::FlatMap::resize
    - std::vector::reserve
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::Timer::stop
    - c_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, flat_map_of_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:529,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:530,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:531,1
    - Dst: M2::init
      Src: /src/brpc/test/flat_map_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:533,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:534,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:538,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:543,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:544,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:548,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:550,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:551,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:557,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:557,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:558,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:559,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:560,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:560,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:561,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:563,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:564,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:564,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:565,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:566,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:566,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:567,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:569,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:570,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:571,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:575,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 577
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::vector::push_back
    - M2::init
    - butil::Timer::stop
    - M1::begin
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - M1::end
    - M2::end
    - M2::begin
    - M1::init
    - rand
    - std::vector::reserve
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, fast_iterator)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Key>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:584,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:587,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:587,1
    - Dst: save_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:590,1
    - Dst: on_pause
      Src: /src/brpc/test/flat_map_unittest.cpp:592,1
    - Dst: restore_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:593,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:594,1
    - Dst: std::vector<Key>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:595,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:597,1
    - Dst: std::vector<Key>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:601,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 4
    argNames:
    - keys
    - ' map'
    - max_one_pass
    - ' on_pause'
    argTypes:
    - std::vector<Key>*
    - butil::FlatMap<Key, Value>
    - size_t
    - OnPause
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 580
    functionDepth: 1
    functionLinenumber: 580
    functionLinenumberEnd: 603
    functionName: list_flat_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 4
    functionsReached:
    - end
    - on_pause
    - restore_iterator
    - std::vector<Key>*::push_back
    - save_iterator
    - begin
    - std::vector<Key>*::clear
    linkageType: ''
    returnType: void
    signature: "void list_flat_map(std::vector<Key>* keys,\n                          const
      butil::FlatMap<Key, Value>& map,\n                          size_t max_one_pass,\n
      \                         OnPause& on_pause)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/flat_map_unittest.cpp:609,1
    - Dst: time
      Src: /src/brpc/test/flat_map_unittest.cpp:609,1
    - Dst: PositionHintMap*::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:612,1
    - Dst: PositionHintMap*::init
      Src: /src/brpc/test/flat_map_unittest.cpp:612,1
    - Dst: std::vector<uint64_t>*::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:615,1
    - Dst: std::vector<uint64_t>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:616,1
    - Dst: PositionHintMap*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:617,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:619,1
    - Dst: PositionHintMap*::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:620,1
    - Dst: std::vector<uint64_t>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:623,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    - Dst: PositionHintMap*::bucket_info
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    - Dst: PositionHintMap*::size
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - map
    - keys
    argTypes:
    - PositionHintMap*
    - std::vector<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 627
    functionName: fill_position_hint_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 4
    functionsReached:
    - ASSERT_EQ
    - PositionHintMap*::init
    - std::vector<uint64_t>*::push_back
    - LOG
    - PositionHintMap*::bucket_info
    - PositionHintMap*::size
    - std::vector<uint64_t>*::reserve
    - std::vector<uint64_t>*::clear
    - PositionHintMap*::clear
    - rand
    - time
    - PositionHintMap*::seek
    - PositionHintMap*::initialized
    - srand
    linkageType: ''
    returnType: void
    signature: "void fill_position_hint_map(PositionHintMap* map,\n                                   std::vector<uint64_t>*
      keys)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 630
    functionName: CountOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CountOnPause()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 631
    functionDepth: 0
    functionLinenumber: 631
    functionLinenumberEnd: 633
    functionName: operator()(const PositionHintMap::PositionHint&)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint&)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:640,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:646,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:647,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:647,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:647,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:648,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:648,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:648,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:649,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:650,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:650,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:652,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 637
    functionDepth: 2
    functionLinenumber: 637
    functionLinenumberEnd: 655
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - PositionHintMap::size
    - std::vector::end
    - std::sort
    - fill_position_hint_map
    - std::vector::begin
    - list_flat_map
    - ASSERT_NE
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, do_nothing_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:659,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:660,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 661
    functionName: RemoveInsertVisitedOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: void
    signature: void RemoveInsertVisitedOnPause()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:665,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:665,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:670,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:670,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:671,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:677,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:677,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:678,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 680
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - size
    - erase
    - insert
    - seek
    - rand
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint& hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:690,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:693,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:698,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:699,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:700,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:700,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:701,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:701,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:701,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:702,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:704,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:706,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:707,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:707,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    - Dst: RemoveInsertVisitedOnPause::inserted_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 687
    functionDepth: 2
    functionLinenumber: 687
    functionLinenumberEnd: 711
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - RemoveInsertVisitedOnPause::removed_keys::size
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - PositionHintMap::size
    - std::vector::end
    - std::sort
    - ASSERT_FALSE
    - fill_position_hint_map
    - std::vector::begin
    - RemoveInsertVisitedOnPause::removed_keys::seek
    - list_flat_map
    - RemoveInsertVisitedOnPause::inserted_keys::seek
    - ASSERT_NE
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, erase_insert_visited_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 714
    functionDepth: 0
    functionLinenumber: 714
    functionLinenumberEnd: 716
    functionName: RemoveHintedOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: void
    signature: void RemoveHintedOnPause()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:720,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 717
    functionDepth: 0
    functionLinenumber: 717
    functionLinenumberEnd: 721
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - erase
    - insert
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint& hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:729,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:735,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:738,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:739,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:739,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:739,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::unique
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:740,1
    - Dst: LOG_IF
      Src: /src/brpc/test/flat_map_unittest.cpp:741,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:741,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:744,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:744,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:744,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:745,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:747,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: RemoveHintedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 753
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 753
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - std::vector::end
    - PositionHintMap::size
    - std::sort
    - fill_position_hint_map
    - std::vector::begin
    - std::unique
    - LOG_IF
    - list_flat_map
    - RemoveHintedOnPause::removed_keys::seek
    - ASSERT_NE
    - std::vector::size
    - std::vector::resize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, erase_hinted_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:758,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:759,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 760
    functionName: RemoveInsertUnvisitedOnPause
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: void
    signature: void RemoveInsertUnvisitedOnPause()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:765,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:766,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:767,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:767,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:767,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:768,1
    - Dst: push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:771,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:772,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:779,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:779,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:784,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:787,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:787,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:787,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:791,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:791,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:792,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 795
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - end
    - ASSERT_EQ
    - std::find
    - size
    - push_back
    - seek
    - erase
    - insert
    - begin
    - rand
    linkageType: ''
    returnType: void
    signature: void operator()(const PositionHintMap::PositionHint& hint)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fill_position_hint_map
      Src: /src/brpc/test/flat_map_unittest.cpp:806,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:814,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:815,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:815,1
    - Dst: RemoveInsertUnvisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:816,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:816,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:816,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:817,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:817,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:817,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:818,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:822,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:822,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 803
    functionDepth: 2
    functionLinenumber: 803
    functionLinenumberEnd: 824
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - RemoveInsertUnvisitedOnPause::removed_keys::size
    - ASSERT_EQ
    - ASSERT_TRUE
    - PositionHintMap::seek
    - PositionHintMap::size
    - std::vector::end
    - std::sort
    - fill_position_hint_map
    - std::vector::begin
    - list_flat_map
    - ASSERT_NE
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, erase_insert_unvisited_during_iteration)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - k
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 834
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 834
    functionName: fmix64
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fmix64 (uint64_t k)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fmix64
      Src: /src/brpc/test/flat_map_unittest.cpp:839,1
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/test/flat_map_unittest.cpp:839,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 838
    functionDepth: 1
    functionLinenumber: 838
    functionLinenumberEnd: 839
    functionName: operator()(const T* p) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - fmix64
    - reinterpret_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/test/flat_map_unittest.cpp:845,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 844
    functionDepth: 0
    functionLinenumber: 844
    functionLinenumberEnd: 845
    functionName: operator()(const T* p) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:851,1
    - Dst: int::int
      Src: /src/brpc/test/flat_map_unittest.cpp:852,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/test/flat_map_unittest.cpp:856,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:861,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:863,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:864,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/test/flat_map_unittest.cpp:864,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:864,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:866,1
    - Dst: std::set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:867,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:868,1
    - Dst: butil::hash_set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:869,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:871,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:875,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:875,1
    - Dst: butil::hash_set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:875,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:880,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:881,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:882,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:888,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:889,1
    - Dst: std::set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:890,1
    - Dst: std::set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:890,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:892,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:893,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:893,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:893,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:896,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:897,1
    - Dst: butil::hash_set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:898,1
    - Dst: butil::hash_set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:898,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:900,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:901,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:901,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:901,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 906
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 906
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::set::size
    - std::vector::begin
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    - ARRAY_SIZE
    - butil::Timer::start
    - std::set::end
    - std::random_shuffle
    - std::set::find
    - butil::hash_set::find
    - LOG
    - butil::Timer::Timer
    - butil::FlatSet::init
    - butil::hash_set::insert
    - butil::FlatSet::seek
    - butil::Timer::n_elapsed
    - butil::FlatSet::size
    - butil::hash_set::end
    - butil::hash_set::size
    - std::vector::reserve
    - std::vector::push_back
    - std::set::insert
    - butil::Timer::stop
    - std::vector::end
    - std::vector::size
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf_cmp_with_map_storing_pointers)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 914
    functionDepth: 0
    functionLinenumber: 914
    functionLinenumberEnd: 914
    functionName: Value
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 915
      start: 915
    functionDepth: 0
    functionLinenumber: 915
    functionLinenumberEnd: 915
    functionName: Value
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Value(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 916
    functionName: Value
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Value (const Value& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 920
      start: 917
    functionDepth: 0
    functionLinenumber: 917
    functionLinenumberEnd: 920
    functionName: ~Value()
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 926
      start: 922
    functionDepth: 0
    functionLinenumber: 922
    functionLinenumberEnd: 926
    functionName: '& operator= (const Value& rhs)'
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Value
    signature: Value & operator= (const Value& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 928
    functionDepth: 0
    functionLinenumber: 928
    functionLinenumberEnd: 928
    functionName: operator== (const Value& rhs) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator== (const Value& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 929
    functionDepth: 0
    functionLinenumber: 929
    functionLinenumberEnd: 929
    functionName: operator!= (const Value& rhs) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!= (const Value& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' v'
    argTypes:
    - std::ostream
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 931
    functionDepth: 0
    functionLinenumber: 931
    functionLinenumberEnd: 932
    functionName: '& operator<< (std::ostream& os, const Value& v)'
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<< (std::ostream& os, const Value& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 941
    functionDepth: 0
    functionLinenumber: 941
    functionLinenumberEnd: 941
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 942
      start: 942
    functionDepth: 0
    functionLinenumber: 942
    functionLinenumberEnd: 942
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Key(int x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 943
      start: 943
    functionDepth: 0
    functionLinenumber: 943
    functionLinenumberEnd: 943
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Key(const Key& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 944
    functionName: operator=(const Key& rhs)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(const Key& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 945
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 945
    functionName: ~Key()
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' k'
    argTypes:
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 949
    functionDepth: 0
    functionLinenumber: 949
    functionLinenumberEnd: 949
    functionName: operator()(const Key& k) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const Key& k) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - Key
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 953
      start: 952
    functionDepth: 0
    functionLinenumber: 952
    functionLinenumberEnd: 953
    functionName: operator()(const Key& k1, const Key& k2) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const Key& k1, const Key& k2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:958,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:959,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:966,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:966,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:967,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:968,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:970,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:971,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 972
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::erase
    - ASSERT_EQ
    - butil::FlatMap::seek
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, key_value_are_not_constructed_before_first_insertion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:976,1
    - Dst: butil::FlatMap::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:976,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:977,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:977,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:978,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:979,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:979,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:980,1
    - Dst: butil::FlatMap::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:980,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:981,1
    - Dst: butil::FlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:981,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:982,1
    - Dst: butil::FlatMap::load_factor
      Src: /src/brpc/test/flat_map_unittest.cpp:982,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:984,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:984,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:985,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:987,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:990,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:991,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:994,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:994,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:996,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:997,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:998,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:998,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:999,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1001,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1003,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1003,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1005,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1006,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1007,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1008,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1010,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 974
    functionDepth: 1
    functionLinenumber: 974
    functionLinenumberEnd: 1011
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::FlatMap::bucket_count
    - butil::FlatMap::load_factor
    - butil::FlatMap::seek
    - ASSERT_NE
    - butil::FlatMap::initialized
    - butil::FlatMap::init
    - butil::FlatMap::size
    - butil::FlatMap::erase
    - butil::FlatMap::swap
    - butil::FlatMap::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, manipulate_uninitialized_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1014,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1015,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1016,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1017,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1020,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1025,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1027,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1029,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1033,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1035,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1037,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1041,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1043,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1048,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1050,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1050,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1051,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1052,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1053,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1055
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::CaseIgnoredFlatMap::init
    - butil::FlatMap::init
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf_small_string_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1061,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1062,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1063,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1063,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1064,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1065,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1065,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1076,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1076,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1077,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1078,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1079,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1081,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1085,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1085,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1086,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1086,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1087,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1092,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1092,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1093,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1093,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1095,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1099,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1100,1
    - Dst: Map::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1101,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: Map::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1115,1
    - Dst: Map::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1118,1
    - Dst: Map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1119,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1119,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1120,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1121,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1122,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1123,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1124,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: Map::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1131,1
    - Dst: Map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1135,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1136,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1137,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1138,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1139,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1139,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1140
      start: 1057
    functionDepth: 1
    functionLinenumber: 1057
    functionLinenumberEnd: 1140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - Map::seek
    - Map::erase
    - Map::_pool::count_allocated
    - ASSERT_FALSE
    - Map::end
    - Map::clear
    - Map::begin
    - Map::bucket_count
    - Map::_pool::count_free
    - Map::empty
    - Map::initialized
    - Map::init
    - Map::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/flat_map_unittest.cpp:1143,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:1149,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1158,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1159,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1160,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1168,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1169,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1171,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1172,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1179,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1179,1
    - Dst: find
      Src: /src/brpc/test/flat_map_unittest.cpp:1181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1182,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1183,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1186,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1187,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1199,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1142
    functionDepth: 1
    functionLinenumber: 1142
    functionLinenumberEnd: 1208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - end
    - ASSERT_TRUE
    - ASSERT_EQ
    - find
    - size
    - seek
    - erase
    - clear
    - insert
    - begin
    - rand
    - init
    - LOG
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, random_insert_erase)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:1213,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1223,1
    - Dst: std::max
      Src: /src/brpc/test/flat_map_unittest.cpp:1228,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1230,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1231,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1240,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1241,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1242,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1243,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1244,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1245,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1247,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1249,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1250,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1252,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1256,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1256,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1256,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1259,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1260,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1261,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1264,1
    - Dst: butil::MultiFlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1267,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1268,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1271,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1273,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1274,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1275,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1278,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1280,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1281,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1282,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1285,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1287,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1288,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1289,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1292,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1294,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1295,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1296,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1297,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1299,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1301,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1302,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1303,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1306,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1308,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1309,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1312,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1312,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1313,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1313,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1314,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1314,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1315,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1315,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1316,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1316,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1317,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1317,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1318,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1318,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1321,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1321,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1321,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1324,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1325,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1326,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1328,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1330,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1332,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1334,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1336,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1337,1
    - Dst: std::map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1338,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1340,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1342,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1343,1
    - Dst: butil::PooledMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1344,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1346,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1348,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1349,1
    - Dst: std::unordered_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1350,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1352,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1354,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1355,1
    - Dst: std::unordered_multimap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1356,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1358,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1360,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1361,1
    - Dst: butil::hash_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1362,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1364,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1366,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1367,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1370,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1370,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1371,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1371,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1372,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1372,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1373,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1373,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1374,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1374,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1375,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1375,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1376,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1376,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 110
    argCount: 2
    argNames:
    - random
    - ' value'
    argTypes:
    - bool
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1378
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1378
    functionName: perf_insert_erase
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::unordered_multimap::insert
    - std::max
    - std::map::erase
    - butil::PooledMap::clear
    - stop
    - butil::MultiFlatMap::clear
    - start
    - std::vector::begin
    - n_elapsed
    - ARRAY_SIZE
    - std::map::clear
    - std::unordered_multimap::erase
    - butil::Timer::start
    - std::unordered_map::clear
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::FlatMap::init
    - rand
    - LOG
    - butil::Timer::Timer
    - butil::PooledMap::erase
    - butil::Timer::n_elapsed
    - std::unordered_multimap::clear
    - butil::MultiFlatMap::erase
    - random_shuffle
    - butil::hash_map::erase
    - std::vector::clear
    - butil::FlatMap::erase
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - std::unordered_map::erase
    - butil::hash_map::clear
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void perf_insert_erase(bool random, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:1383,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1393,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1396,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1397,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1398,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1400,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1401,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1403,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1406,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1407,1
    - Dst: butil::MultiFlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1411,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1412,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1416,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1417,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1421,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1422,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1426,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1427,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1431,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1432,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1433,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1436,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1437,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1444,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1445,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1446,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1448,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1450,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1452,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1454,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1456,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1457,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1458,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1460,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1462,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1463,1
    - Dst: butil::PooledMap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1464,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1466,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1468,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1469,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1472,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1474,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1475,1
    - Dst: std::unordered_multimap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1476,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1478,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1480,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1481,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1482,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1484,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1486,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1486,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1489,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1489,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1490,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1490,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1491,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1491,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1492,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1492,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1493,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1493,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1494,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1494,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1495,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1495,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 75
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1381
    functionDepth: 1
    functionLinenumber: 1381
    functionLinenumberEnd: 1497
    functionName: perf_seek
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::unordered_multimap::insert
    - butil::PooledMap::clear
    - stop
    - butil::MultiFlatMap::clear
    - start
    - std::map::find
    - std::vector::begin
    - n_elapsed
    - butil::PooledMap::find
    - ARRAY_SIZE
    - std::map::clear
    - butil::Timer::start
    - std::unordered_map::clear
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::FlatMap::init
    - rand
    - LOG
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::FlatMap::seek
    - std::unordered_multimap::clear
    - random_shuffle
    - butil::hash_map::find
    - std::vector::clear
    - butil::MultiFlatMap::seek
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - std::unordered_multimap::find
    - butil::hash_map::clear
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void perf_seek(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1507,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1508,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1508,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1509,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1509,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1510,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1511,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1511,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1512,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1512,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1513,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1514,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1514,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1515,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1515,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1516,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1517,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1517,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1519
      start: 1506
    functionDepth: 2
    functionLinenumber: 1506
    functionLinenumberEnd: 1519
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - Dummy2
    - perf_insert_erase
    - perf_seek
    - Dummy1
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1529,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1529,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1530
      start: 1521
    functionDepth: 1
    functionLinenumber: 1521
    functionLinenumberEnd: 1530
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::FlatMap::is_too_crowded
    - ASSERT_FALSE
    - butil::FlatMap::size
    - butil::FlatMap::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1544,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1549,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1552,1
    - Dst: butil::MultiFlatMap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1555,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1559,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1559,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1561,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1561,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1563,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1566,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: hasher
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1570,1
    - Dst: hasher
      Src: /src/brpc/test/flat_map_unittest.cpp:1570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1575,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1580,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1581,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1582,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1582,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1586,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1587,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1588,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1589,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1596,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1603,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1608,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1612,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1616,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1617
      start: 1532
    functionDepth: 1
    functionLinenumber: 1532
    functionLinenumberEnd: 1617
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::MultiFlatMap::bucket_count
    - std::find
    - ASSERT_TRUE
    - std::vector::end
    - butil::MultiFlatMap::insert
    - butil::flatmap_round
    - butil::MultiFlatMap::erase
    - butil::MultiFlatMap::init
    - butil::MultiFlatMap::seek_all
    - std::vector::begin
    - hasher
    - Foo
    - butil::flatmap_mod
    - ASSERT_NE
    - butil::MultiFlatMap::seek
    - std::vector::size
    - butil::MultiFlatMap::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, multi)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: StatusTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:37,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: StatusTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_status_unittest.cpp:42,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:43,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:47,1
    - Dst: boost::any_cast<std::string>
      Src: /src/brpc/test/bvar_status_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:49,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:50,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:51,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:51,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:54,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:56,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:56,1
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_status_unittest.cpp:58,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:60,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:61,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:62,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_status_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:63,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:64,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_status_unittest.cpp:66,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_status_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:67,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:68,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:69,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:70,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:71,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:74,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:75,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:76,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:77,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:77,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:79,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_status_unittest.cpp:83,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_status_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:84,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:85,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:85,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:87,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:88,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:91,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:91,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:93,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:96,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:99,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_status_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:100,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:101,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:101,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:103,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:107,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:110,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_status_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:111,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:111,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:115,1
    - Dst: boost::any_cast<int>
      Src: /src/brpc/test/bvar_status_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:117,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:117,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:119,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_status_unittest.cpp:126,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:130,1
    - Dst: boost::any_cast<void*>
      Src: /src/brpc/test/bvar_status_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:132,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_status_unittest.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 133
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bvar::Variable::list_exposed
    - bvar::Status::hide
    - bvar::Status::set_value
    - bvar::Variable::describe_exposed
    - boost::any_cast<std::string>
    - bvar::Status::Status
    - bvar::Status::expose
    - bvar::Status::name
    - boost::any_cast<int>
    - boost::any_cast<void*>
    - bvar::Status::get_value
    - LOG
    - std::vector::size
    - bvar::Status::get_description
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: print1
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void print1(std::ostream& os, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: print2
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t print2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bvar_status_unittest.cpp:145,1
    - Dst: bvar::BasicPassiveStatus::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:149,1
    - Dst: boost::any_cast<std::string>
      Src: /src/brpc/test/bvar_status_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:152,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:153,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_status_unittest.cpp:153,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:156,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:158,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:158,1
    - Dst: bvar::BasicPassiveStatus::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:164,1
    - Dst: boost::any_cast<int32_t>
      Src: /src/brpc/test/bvar_status_unittest.cpp:166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_status_unittest.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_status_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:171,1
    - Dst: boost::any_cast<int64_t>
      Src: /src/brpc/test/bvar_status_unittest.cpp:171,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_status_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:174,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:175,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_status_unittest.cpp:175,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:177,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:180,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 181
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - bvar::Variable::list_exposed
    - boost::any_cast<int32_t>
    - ASSERT_TRUE
    - bvar::Variable::describe_exposed
    - bvar::BasicPassiveStatus::get_value
    - boost::any_cast<std::string>
    - boost::any_cast<int64_t>
    - LOG
    - std::vector::size
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, passive_status)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 185
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - x2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 186
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo(int x2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Foo
      Src: /src/brpc/test/bvar_status_unittest.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: operator+(const Foo& rhs) const
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - Foo
    linkageType: ''
    returnType: Foo
    signature: Foo operator+(const Foo& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' f'
    argTypes:
    - std::ostream
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 194
    functionName: '& operator<<(std::ostream& os, const Foo& f)'
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_status_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:198,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:198,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:199,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_status_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:200,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:200,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:204,1
    - Dst: boost::any_cast<Foo>
      Src: /src/brpc/test/bvar_status_unittest.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 206
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - boost::any_cast<Foo>
    - ASSERT_EQ
    - bvar::Status::set_value
    - Foo
    - bvar::Status::Status
    - bvar::Status::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, non_primitive)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: StatusTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:37,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: StatusTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_status_unittest.cpp:42,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:43,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:47,1
    - Dst: boost::any_cast<std::string>
      Src: /src/brpc/test/bvar_status_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:49,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:50,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:51,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:51,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:54,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:56,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:56,1
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_status_unittest.cpp:58,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:60,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:61,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:62,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_status_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:63,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:64,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_status_unittest.cpp:66,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_status_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:67,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:68,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:69,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:70,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:71,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:74,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:75,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:76,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:77,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:77,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:79,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_status_unittest.cpp:83,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_status_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:84,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:85,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:85,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:87,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:88,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_status_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:91,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:91,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:93,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:96,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:99,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_status_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:100,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:101,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:101,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:103,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:107,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:110,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_status_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:111,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:111,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:115,1
    - Dst: boost::any_cast<int>
      Src: /src/brpc/test/bvar_status_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:117,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:117,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:119,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_status_unittest.cpp:126,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:130,1
    - Dst: boost::any_cast<void*>
      Src: /src/brpc/test/bvar_status_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:132,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_status_unittest.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 133
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bvar::Variable::list_exposed
    - bvar::Status::hide
    - bvar::Status::set_value
    - bvar::Variable::describe_exposed
    - boost::any_cast<std::string>
    - bvar::Status::Status
    - bvar::Status::expose
    - bvar::Status::name
    - boost::any_cast<int>
    - boost::any_cast<void*>
    - bvar::Status::get_value
    - LOG
    - std::vector::size
    - bvar::Status::get_description
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: print1
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void print1(std::ostream& os, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: print2
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t print2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bvar_status_unittest.cpp:145,1
    - Dst: bvar::BasicPassiveStatus::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:149,1
    - Dst: boost::any_cast<std::string>
      Src: /src/brpc/test/bvar_status_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:152,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:153,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_status_unittest.cpp:153,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:156,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:158,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:158,1
    - Dst: bvar::BasicPassiveStatus::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:164,1
    - Dst: boost::any_cast<int32_t>
      Src: /src/brpc/test/bvar_status_unittest.cpp:166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_status_unittest.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_status_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:171,1
    - Dst: boost::any_cast<int64_t>
      Src: /src/brpc/test/bvar_status_unittest.cpp:171,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_status_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:174,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:175,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_status_unittest.cpp:175,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:177,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_status_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:180,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_status_unittest.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 181
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - bvar::Variable::list_exposed
    - boost::any_cast<int32_t>
    - ASSERT_TRUE
    - bvar::Variable::describe_exposed
    - bvar::BasicPassiveStatus::get_value
    - boost::any_cast<std::string>
    - boost::any_cast<int64_t>
    - LOG
    - std::vector::size
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, passive_status)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 185
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - x2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 186
    functionName: Foo
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo(int x2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Foo
      Src: /src/brpc/test/bvar_status_unittest.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: operator+(const Foo& rhs) const
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - Foo
    linkageType: ''
    returnType: Foo
    signature: Foo operator+(const Foo& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' f'
    argTypes:
    - std::ostream
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 194
    functionName: '& operator<<(std::ostream& os, const Foo& f)'
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_status_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:198,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:198,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:199,1
    - Dst: Foo
      Src: /src/brpc/test/bvar_status_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:200,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:200,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_status_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_status_unittest.cpp:204,1
    - Dst: boost::any_cast<Foo>
      Src: /src/brpc/test/bvar_status_unittest.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 206
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_status_unittest.cpp
    functionUses: 0
    functionsReached:
    - boost::any_cast<Foo>
    - ASSERT_EQ
    - bvar::Status::set_value
    - Foo
    - bvar::Status::Status
    - bvar::Status::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, non_primitive)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: FPL
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FPL(x)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:90,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:91,1
    - Dst: static_cast<USHORT>
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: wcslen
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: reinterpret_cast<REPARSE_DATA_BUFFER*>
      Src: /src/brpc/test/file_util_unittest.cc:96,1
    - Dst: memcpy
      Src: /src/brpc/test/file_util_unittest.cc:99,1
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - source
    - ' target_path'
    argTypes:
    - HANDLE
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 112
    functionName: butil::SetReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::size
    - butil::value
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    - static_cast<USHORT>
    - std::wstring::c_str
    - wcslen
    - DeviceIoControl
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool SetReparsePoint(HANDLE source, const FilePath& target_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - source
    argTypes:
    - HANDLE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::DeleteReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - DeviceIoControl
    linkageType: ''
    returnType: bool
    signature: bool DeleteReparsePoint(HANDLE source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/file_util_unittest.cc:132,1
    - Dst: ::CreateFile
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: butil::ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    - Dst: SetReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - ' source'
    - ' target'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 141
    functionName: butil::ReparsePoint::ReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - SetReparsePoint
    - butil::ReparsePoint::IsValid
    - ::CreateFile
    - Set
    linkageType: ''
    returnType: void
    signature: void ReparsePoint(const FilePath& source, const FilePath& target)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::DeleteReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: ~ReparsePoint()
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::DeleteReparsePoint
    linkageType: ''
    returnType: void
    signature: void ~ReparsePoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: butil::ReparsePoint::IsValid
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsValid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - ' path'
    - mode_bits_to_set
    - mode_bits_to_clear
    argTypes:
    - FilePath
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 173
    functionName: butil::ChangePosixFilePermissions
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: "void ChangePosixFilePermissions(const FilePath& path,\n                                int
      mode_bits_to_set,\n                                int mode_bits_to_clear)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getuid
      Src: /src/brpc/test/file_util_unittest.cc:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    - Dst: CreateUniqueTempDir
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 197
    functionName: butil::FileUtilTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - setegid
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - seteuid
    - getuid
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: StreamingRpcTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 206
    functionName: butil::FileUtilTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - StreamingRpcTest::TearDown
    - ASSERT_EQ
    - seteuid
    - setegid
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:222,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' enumerator'
    argTypes:
    - FileEnumerator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 230
    functionName: butil::FindResultCollector::FindResultCollector
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - EXPECT_TRUE
    - Next
    - end
    - FilePath::value
    - find
    - insert
    linkageType: ''
    returnType: void
    signature: void FindResultCollector(FileEnumerator& enumerator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' file'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: butil::FindResultCollector::HasFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - find
    - value
    - end
    linkageType: ''
    returnType: bool
    signature: bool HasFile(const FilePath& file) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    - Dst: butil::FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: butil::FindResultCollector::size
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::FindResultCollector::size
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: int size()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wofstream::open
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::close
      Src: /src/brpc/test/file_util_unittest.cc:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' filename'
    - ' contents'
    argTypes:
    - FilePath
    - std::wstring
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::CreateTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - std::wofstream::is_open
    - butil::value
    - std::wofstream::close
    - std::wofstream::open
    linkageType: ''
    returnType: void
    signature: "void CreateTextFile(const FilePath& filename,\n                    const
      std::wstring& contents)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wifstream::open
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::getline
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: std::wifstream::close
      Src: /src/brpc/test/file_util_unittest.cc:262,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' filename'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 264
    functionName: butil::ReadTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::wifstream::close
    - butil::value
    - std::wstring
    - std::wifstream::getline
    - arraysize
    - std::wifstream::is_open
    - std::wifstream::open
    linkageType: ''
    returnType: std::wstring
    signature: std::wstring ReadTextFile(const FilePath& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ft'
    argTypes:
    - FILETIME
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: butil::FileTimeAsUint64
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t FileTimeAsUint64(const FILETIME& ft)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:282,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:291,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:294,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:297,1
    - Dst: butil::ComputeDirectorySize
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 301
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::ComputeDirectorySize
    - butil::CreateTextFile
    - FPL
    - FilePath::Append
    - butil::GetFileSize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileAndDirectorySize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: DirName
      Src: /src/brpc/test/file_util_unittest.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 329
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - DirName
    - butil::CreateTextFile
    - FPL
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathBasic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:355,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:361,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:362,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:365,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:366,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:372,1
    - Dst: FilePath::StringType::resize
      Src: /src/brpc/test/file_util_unittest.cc:373,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:381,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:416,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:417,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:418,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:427,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:431,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 446
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - FilePath::StringType::resize
    - FilePath::DirName
    - ASSERT_STREQ
    - ASSERT_FALSE
    - ReparsePoint::IsValid
    - butil::NormalizeFilePath
    - FilePath::Append
    - butil::FilePath
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathReparsePoints)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:450,1
    - Dst: isalpha
      Src: /src/brpc/test/file_util_unittest.cc:451,1
    - Dst: LOG
      Src: /src/brpc/test/file_util_unittest.cc:452,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:458,1
    - Dst: ::QueryDosDevice
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:470,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:472,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:475,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:484,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:486,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:493,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:502,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:505,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:512,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - ASSERT_EQ
    - isalpha
    - FilePath::value
    - FPL
    - EXPECT_EQ
    - ASSERT_FALSE
    - std::wstring::c_str
    - FilePath::Append
    - butil::FilePath
    - DevicePathToDriveLetterPath
    - ASSERT_LT
    - LOG
    - ::QueryDosDevice
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DevicePathToDriveLetter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:522,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:523,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: GetShortPathName
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: ASSERT_STRNE
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:549,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: file_util::MakeFileUnreadable
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:556,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: GetLongPathName
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 564
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::IsParent
    - ASSERT_STRNE
    - FilePath::Append
    - GetLongPathName
    - butil::PathExists
    - ASSERT_NE
    - EXPECT_EQ
    - EXPECT_STREQ
    - EXPECT_TRUE
    - FilePath::value
    - FPL
    - FilePath::DirName
    - DWORD
    - FilePath::BaseName
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    - butil::CreateTemporaryFileInDir
    - file_util::MakeFileUnreadable
    - ASSERT_LT
    - GetShortPathName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileInDirLongPathTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:573,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:581,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 570
    functionDepth: 2
    functionLinenumber: 570
    functionLinenumberEnd: 599
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::ReadTextFile
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - butil::ReadSymbolicLink
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndReadSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 642
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - EXPECT_NE
    - butil::NormalizeFilePath
    - EXPECT_FALSE
    - EXPECT_EQ
    - FilePath::BaseName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:646,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 653
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:656,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 664
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistentWithNonExistentParent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:669,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:678,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 684
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:690,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:694,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 704
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:712,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 725
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - FPL
    - butil::IsLink
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToNonExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:734,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:735,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:745,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:760,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 727
    functionDepth: 1
    functionLinenumber: 727
    functionLinenumberEnd: 767
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - EXPECT_EQ
    - std::string::data
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - std::string::length
    - EXPECT_FALSE
    - char::char
    - static_cast<int>
    - butil::ReadFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndRead)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:784,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:790,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:801,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 769
    functionDepth: 1
    functionLinenumber: 769
    functionLinenumberEnd: 810
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - static_cast<int>
    - EXPECT_EQ
    - std::string::length
    - butil::PathIsWritable
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndWrite)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:816,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:830,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:847,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 858
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - butil::WriteFile
    - EXPECT_TRUE
    - FindResultCollector::size
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - EXPECT_EQ
    - static_cast<int>
    - std::string::length
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeDirectoryPermissionsAndEnumerate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:869,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:873,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:877,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 889
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:896,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 892
    functionDepth: 1
    functionLinenumber: 892
    functionLinenumberEnd: 910
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistantWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:917,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:921,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:925,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:929,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 941
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirNonRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:947,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:951,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:959,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 944
    functionDepth: 1
    functionLinenumber: 944
    functionLinenumberEnd: 971
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:977,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:981,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 990
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:996,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1000,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1001,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1002,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 992
    functionDepth: 2
    functionLinenumber: 992
    functionLinenumberEnd: 1011
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1017,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1023,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1027
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileDirExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1034,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1038,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1039,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1040,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1060,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1062,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: butil::internal::MoveUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1030
    functionDepth: 1
    functionLinenumber: 1030
    functionLinenumberEnd: 1069
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::internal::MoveUnsafe
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1075,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1081,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1071
    functionDepth: 1
    functionLinenumber: 1071
    functionLinenumberEnd: 1104
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1154
      start: 1106
    functionDepth: 1
    functionLinenumber: 1106
    functionLinenumberEnd: 1154
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1156
    functionDepth: 1
    functionLinenumber: 1156
    functionLinenumberEnd: 1209
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1233,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1256
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1262,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1258
    functionDepth: 1
    functionLinenumber: 1258
    functionLinenumberEnd: 1305
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1315,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1316,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1307
    functionDepth: 1
    functionLinenumber: 1307
    functionLinenumberEnd: 1323
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1329,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1333,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1334,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1325
    functionDepth: 2
    functionLinenumber: 1325
    functionLinenumberEnd: 1343
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExisting)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1364
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1364
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExistingDirectory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1366
    functionDepth: 1
    functionLinenumber: 1366
    functionLinenumberEnd: 1401
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryWithTrailingSeparators)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1408,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: SetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1410,1
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1418,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1423
      start: 1404
    functionDepth: 1
    functionLinenumber: 1404
    functionLinenumberEnd: 1423
    functionName: butil::SetReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - GetFileAttributes
    - SetFileAttributes
    - butil::value
    - win::GetVersion
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::SetPosixFilePermissions
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void SetReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1428,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1425
    functionDepth: 1
    functionLinenumber: 1425
    functionLinenumberEnd: 1435
    functionName: butil::IsReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - GetFileAttributes
    - butil::value
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    linkageType: ''
    returnType: bool
    signature: bool IsReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1445,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1446,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1437
    functionDepth: 2
    functionLinenumber: 1437
    functionLinenumberEnd: 1455
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - butil::SetReadOnly
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1461,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1477,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1478,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: butil::internal::CopyFileUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1483,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1484,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1489,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1490,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1457
    functionDepth: 2
    functionLinenumber: 1457
    functionLinenumberEnd: 1493
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::internal::CopyFileUnsafe
    - butil::PathExists
    - FilePath::Append
    - FilePath::AppendASCII
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1501,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1505,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1514
      start: 1495
    functionDepth: 2
    functionLinenumber: 1495
    functionLinenumberEnd: 1514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - ASSERT_TRUE
    - butil::path
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::SetReadOnly
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1565
      start: 1521
    functionDepth: 1
    functionLinenumber: 1521
    functionLinenumberEnd: 1565
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::ContentsEqual
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, ContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1572,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1612
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1612
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::TextContentsEqual
    - FILE_PATH_LITERAL
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, TextContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1627,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1631,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1632,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: internal::CopyAndDeleteDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1646
      start: 1617
    functionDepth: 1
    functionLinenumber: 1617
    functionLinenumberEnd: 1646
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyAndDeleteDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1649,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: ::_tdupenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:1659,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1661,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1662,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:1664,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1669,1
    - Dst: free
      Src: /src/brpc/test/file_util_unittest.cc:1670,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1648
    functionDepth: 1
    functionLinenumber: 1648
    functionLinenumberEnd: 1674
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::IsAbsolute
    - butil::GetTempDir
    - free
    - FilePath::value
    - arraysize
    - ::_tputenv_s
    - ::_tdupenv_s
    - _T
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: butil::CreateTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1685,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1688
      start: 1677
    functionDepth: 1
    functionLinenumber: 1677
    functionLinenumberEnd: 1688
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CreateTemporaryFile
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1697,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1698,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1704,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1712
      start: 1690
    functionDepth: 1
    functionLinenumber: 1690
    functionLinenumberEnd: 1712
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateAndOpenTemporaryFile
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndOpenTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1717,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: butil::File
      Src: /src/brpc/test/file_util_unittest.cc:1720,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1724,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1714
    functionDepth: 1
    functionLinenumber: 1714
    functionLinenumberEnd: 1727
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::FileToFILE
    - FPL
    - butil::File
    - File::Pass
    - File::IsValid
    - EXPECT_FALSE
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileToFILE)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1734
      start: 1729
    functionDepth: 1
    functionLinenumber: 1729
    functionLinenumberEnd: 1734
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - butil::CreateNewTempDirectory
    - butil::PathExists
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTempDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::CreateTemporaryDirInDir
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1739,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1745
      start: 1736
    functionDepth: 1
    functionLinenumber: 1736
    functionLinenumberEnd: 1745
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTemporaryDirInDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: butil::GetShmemTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1752
      start: 1748
    functionDepth: 1
    functionLinenumber: 1748
    functionLinenumberEnd: 1752
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::GetShmemTempDir
    - EXPECT_TRUE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetShmemTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetHomeDir
      Src: /src/brpc/test/file_util_unittest.cc:1760,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: FilePath::empty
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1764
      start: 1755
    functionDepth: 1
    functionLinenumber: 1755
    functionLinenumberEnd: 1764
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::empty
    - butil::GetHomeDir
    - FilePath::IsAbsolute
    - ASSERT_TRUE
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetHomeDirTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1786,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1799,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1800,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1807,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1811,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1814,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1818
      start: 1766
    functionDepth: 1
    functionLinenumber: 1766
    functionLinenumberEnd: 1818
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - FilePath::DirName
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::FilePath
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1832,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1838
      start: 1820
    functionDepth: 1
    functionLinenumber: 1820
    functionLinenumberEnd: 1838
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DetectDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1842,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1847,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1850,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1869,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1874,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1892,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1899,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1909,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1921,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1945,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1959,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1968,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1983,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 69
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1840
    functionDepth: 1
    functionLinenumber: 1840
    functionLinenumberEnd: 1986
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FindResultCollector::size
    - std::wstring
    - win::GetVersion
    - FileEnumerator::Next
    - butil::CreateTextFile
    - FPL
    - ReparsePoint::IsValid
    - EXPECT_FALSE
    - FilePath::Append
    - EXPECT_EQ
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileEnumeratorTest)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1999,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2012,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2013,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2014
      start: 1988
    functionDepth: 2
    functionLinenumber: 1988
    functionLinenumberEnd: 2014
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::AppendToFile
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, AppendToFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2026,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2027,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2028,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2031,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2034,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2039,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2045,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2054,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2055,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2016
    functionDepth: 1
    functionLinenumber: 2016
    functionLinenumberEnd: 2058
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::path
    - butil::WriteFile
    - std::string
    - std::vector::end
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - std::string::data
    - std::vector::begin
    - std::vector::size
    - static_cast<int>
    - butil::ReadFile
    - std::string::begin
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2068,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2075,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2083,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2085,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2087,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2089,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2091,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2093,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2115
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_EQ
    - butil::WriteFile
    - butil::ReadFileToString
    - FILE_PATH_LITERAL
    - std::string::clear
    - butil::DeleteFile
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFileToString)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2134,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: butil::TouchFile
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: butil::GetFileInfo
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: File::Info::last_accessed::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: File::Info::last_modified::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2148
      start: 2117
    functionDepth: 1
    functionLinenumber: 2117
    functionLinenumberEnd: 2148
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::GetFileInfo
    - FILE_PATH_LITERAL
    - butil::TouchFile
    - butil::DeleteFile
    - butil::FromUTCExploded
    - File::Info::last_accessed::ToInternalValue
    - File::Info::last_modified::ToInternalValue
    - auto::ToInternalValue
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, TouchFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2150
    functionDepth: 1
    functionLinenumber: 2150
    functionLinenumberEnd: 2164
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::WriteFile
    - std::string::c_str
    - butil::IsDirectoryEmpty
    - FILE_PATH_LITERAL
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, IsDirectoryEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:2179,1
    - Dst: path
      Src: /src/brpc/test/file_util_unittest.cc:2186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2192,1
    - Dst: CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: stat
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2199,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: geteuid
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2215,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2216,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2218,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2221
      start: 2178
    functionDepth: 1
    functionLinenumber: 2178
    functionLinenumberEnd: 2221
    functionName: butil::VerifyPathControlledByUserTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - value
    - geteuid
    - StreamingRpcTest::SetUp
    - path
    - ChangePosixFilePermissions
    - insert
    - CreateDirectory
    - stat
    - AppendASCII
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileUtilTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:2224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2225
      start: 2223
    functionDepth: 2
    functionLinenumber: 2223
    functionLinenumberEnd: 2225
    functionName: butil::VerifyPathControlledByUserTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::FileUtilTest::TearDown
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2242,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2243,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2247,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2248,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2253,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2254,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2258,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2261
      start: 2237
    functionDepth: 1
    functionLinenumber: 2237
    functionLinenumberEnd: 2261
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - AppendASCII
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, BadPaths)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2271,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2272,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2274,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2275,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2286,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2287,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2290,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2291,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2295,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2298
      start: 2263
    functionDepth: 1
    functionLinenumber: 2263
    functionLinenumberEnd: 2298
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::CreateSymbolicLink
    - EXPECT_FALSE
    - FilePath::AppendASCII
    - butil::PathExists
    - AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, Symlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2305,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2306,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2307,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2308,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2309,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2310,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2313,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2316,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2319,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2320,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2324,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2327,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2330,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2331,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2335,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2338,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2341,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2344
      start: 2300
    functionDepth: 2
    functionLinenumber: 2300
    functionLinenumberEnd: 2344
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, OwnershipChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2348,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2349,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2350,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2351,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2352,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2353,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2356,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2357,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2359,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2362,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2363,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2366,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2369,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2370,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2372,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2379,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2380,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2382,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2383,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2385,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2386,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2391,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2392,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2393,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2394,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2395,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2396,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2399,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2400,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2402,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2403,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2405,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2406,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2409,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2410,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2412,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2413,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2415,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2416,1
    - Dst: std::set_union
      Src: /src/brpc/test/file_util_unittest.cc:2423,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: std::inserter
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: std::set::begin
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2428,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2429,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2431,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2432,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2434,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2437
      start: 2346
    functionDepth: 2
    functionLinenumber: 2346
    functionLinenumberEnd: 2437
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - end
    - std::set::begin
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - begin
    - std::inserter
    - ASSERT_NO_FATAL_FAILURE
    - std::set_union
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, GroupWriteTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2441,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2442,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2443,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2444,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2445,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2446,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2449,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2450,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2452,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2453,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2455,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2456,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2460,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2461,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2462,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2463,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2465,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2468,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2469,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2473,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2474,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2475,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2476,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2478,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2479,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2481,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2482,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2486,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2487,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2488,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2489,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2491,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2492,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2494,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2495,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2499,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2500,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2501,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2502,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2504,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2505,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2507,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2508,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2512,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2513,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2514,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2515,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2517,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2518,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2520,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2521,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2526,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2527,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2528,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2531,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2534,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2537
      start: 2439
    functionDepth: 2
    functionLinenumber: 2439
    functionLinenumberEnd: 2537
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, WriteBitChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2541,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:2542,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2545
      start: 2539
    functionDepth: 1
    functionLinenumber: 2539
    functionLinenumberEnd: 2545
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_FALSE
    - butil::FilePath::value
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryParentsNotExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2556,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/file_util_unittest.cc:2557,1
    - Dst: file_util::InsertImageIntoMediaStore
      Src: /src/brpc/test/file_util_unittest.cc:2561,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2567,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2568,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:2571,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2572,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    - Dst: File::ReadAtCurrentPos
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2576
      start: 2548
    functionDepth: 1
    functionLinenumber: 2548
    functionLinenumberEnd: 2576
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - file_util::InsertImageIntoMediaStore
    - char::char
    - OpenContentUriForRead
    - File::ReadAtCurrentPos
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - FilePath::Append
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - FilePath::AppendASCII
    - butil::GetFileSize
    - EXPECT_LT
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ValidContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2587,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2589
      start: 2578
    functionDepth: 1
    functionLinenumber: 2578
    functionLinenumberEnd: 2589
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - OpenContentUriForRead
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - EXPECT_FALSE
    - butil::GetFileSize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NonExistentContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2602,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2603,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: fcntl
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    - Dst: read
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2609
      start: 2592
    functionDepth: 0
    functionLinenumber: 2592
    functionLinenumberEnd: 2609
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - fcntl
    - read
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDDoesClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2614
      start: 2612
    functionDepth: 0
    functionLinenumber: 2612
    functionLinenumberEnd: 2614
    functionName: butil::CloseWithScopedFD
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CloseWithScopedFD(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    - Dst: butil::CloseWithScopedFD
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2627
      start: 2617
    functionDepth: 1
    functionLinenumber: 2617
    functionLinenumberEnd: 2627
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - IGNORE_EINTR
    - EXPECT_DEATH
    - butil::CloseWithScopedFD
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDCrashesOnCloseFailure)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:90,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:91,1
    - Dst: static_cast<USHORT>
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: wcslen
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: reinterpret_cast<REPARSE_DATA_BUFFER*>
      Src: /src/brpc/test/file_util_unittest.cc:96,1
    - Dst: memcpy
      Src: /src/brpc/test/file_util_unittest.cc:99,1
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - source
    - ' target_path'
    argTypes:
    - HANDLE
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 112
    functionName: butil::SetReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::size
    - butil::value
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    - static_cast<USHORT>
    - std::wstring::c_str
    - wcslen
    - DeviceIoControl
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool SetReparsePoint(HANDLE source, const FilePath& target_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - source
    argTypes:
    - HANDLE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::DeleteReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 1
    functionsReached:
    - DeviceIoControl
    linkageType: ''
    returnType: bool
    signature: bool DeleteReparsePoint(HANDLE source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/file_util_unittest.cc:132,1
    - Dst: ::CreateFile
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: butil::ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    - Dst: SetReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - ' source'
    - ' target'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 141
    functionName: butil::ReparsePoint::ReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - SetReparsePoint
    - butil::ReparsePoint::IsValid
    - ::CreateFile
    - Set
    linkageType: ''
    returnType: void
    signature: void ReparsePoint(const FilePath& source, const FilePath& target)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::DeleteReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: ~ReparsePoint()
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::DeleteReparsePoint
    linkageType: ''
    returnType: void
    signature: void ~ReparsePoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: butil::ReparsePoint::IsValid
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsValid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - ' path'
    - mode_bits_to_set
    - mode_bits_to_clear
    argTypes:
    - FilePath
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 173
    functionName: butil::ChangePosixFilePermissions
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 3
    functionsReached:
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: "void ChangePosixFilePermissions(const FilePath& path,\n                                int
      mode_bits_to_set,\n                                int mode_bits_to_clear)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getuid
      Src: /src/brpc/test/file_util_unittest.cc:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    - Dst: CreateUniqueTempDir
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 197
    functionName: butil::FileUtilTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - setegid
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - seteuid
    - getuid
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: StreamingRpcTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 206
    functionName: butil::FileUtilTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 1
    functionsReached:
    - StreamingRpcTest::TearDown
    - ASSERT_EQ
    - seteuid
    - setegid
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:222,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' enumerator'
    argTypes:
    - FileEnumerator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 230
    functionName: butil::FindResultCollector::FindResultCollector
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - EXPECT_TRUE
    - Next
    - end
    - FilePath::value
    - find
    - insert
    linkageType: ''
    returnType: void
    signature: void FindResultCollector(FileEnumerator& enumerator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' file'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: butil::FindResultCollector::HasFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - find
    - value
    - end
    linkageType: ''
    returnType: bool
    signature: bool HasFile(const FilePath& file) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    - Dst: butil::FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: butil::FindResultCollector::size
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::FindResultCollector::size
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: int size()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wofstream::open
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::close
      Src: /src/brpc/test/file_util_unittest.cc:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' filename'
    - ' contents'
    argTypes:
    - FilePath
    - std::wstring
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::CreateTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 30
    functionsReached:
    - ASSERT_TRUE
    - std::wofstream::is_open
    - butil::value
    - std::wofstream::close
    - std::wofstream::open
    linkageType: ''
    returnType: void
    signature: "void CreateTextFile(const FilePath& filename,\n                    const
      std::wstring& contents)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wifstream::open
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::getline
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: std::wifstream::close
      Src: /src/brpc/test/file_util_unittest.cc:262,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' filename'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 264
    functionName: butil::ReadTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 6
    functionsReached:
    - EXPECT_TRUE
    - std::wifstream::close
    - butil::value
    - std::wstring
    - std::wifstream::getline
    - arraysize
    - std::wifstream::is_open
    - std::wifstream::open
    linkageType: ''
    returnType: std::wstring
    signature: std::wstring ReadTextFile(const FilePath& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ft'
    argTypes:
    - FILETIME
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: butil::FileTimeAsUint64
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t FileTimeAsUint64(const FILETIME& ft)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:282,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:291,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:294,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:297,1
    - Dst: butil::ComputeDirectorySize
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 301
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::ComputeDirectorySize
    - butil::CreateTextFile
    - FPL
    - FilePath::Append
    - butil::GetFileSize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileAndDirectorySize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: DirName
      Src: /src/brpc/test/file_util_unittest.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 329
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - DirName
    - butil::CreateTextFile
    - FPL
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathBasic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:355,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:361,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:362,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:365,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:366,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:372,1
    - Dst: FilePath::StringType::resize
      Src: /src/brpc/test/file_util_unittest.cc:373,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:381,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:416,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:417,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:418,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:427,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:431,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 446
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - FilePath::StringType::resize
    - FilePath::DirName
    - ASSERT_STREQ
    - ASSERT_FALSE
    - ReparsePoint::IsValid
    - butil::NormalizeFilePath
    - FilePath::Append
    - butil::FilePath
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathReparsePoints)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:450,1
    - Dst: isalpha
      Src: /src/brpc/test/file_util_unittest.cc:451,1
    - Dst: LOG
      Src: /src/brpc/test/file_util_unittest.cc:452,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:458,1
    - Dst: ::QueryDosDevice
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:470,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:472,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:475,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:484,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:486,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:493,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:502,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:505,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:512,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - ASSERT_EQ
    - isalpha
    - FilePath::value
    - FPL
    - EXPECT_EQ
    - ASSERT_FALSE
    - std::wstring::c_str
    - FilePath::Append
    - butil::FilePath
    - DevicePathToDriveLetterPath
    - ASSERT_LT
    - LOG
    - ::QueryDosDevice
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DevicePathToDriveLetter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:522,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:523,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: GetShortPathName
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: ASSERT_STRNE
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:549,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: file_util::MakeFileUnreadable
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:556,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: GetLongPathName
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 564
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::IsParent
    - ASSERT_STRNE
    - FilePath::Append
    - GetLongPathName
    - butil::PathExists
    - ASSERT_NE
    - EXPECT_EQ
    - EXPECT_STREQ
    - EXPECT_TRUE
    - FilePath::value
    - FPL
    - FilePath::DirName
    - DWORD
    - FilePath::BaseName
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    - butil::CreateTemporaryFileInDir
    - file_util::MakeFileUnreadable
    - ASSERT_LT
    - GetShortPathName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileInDirLongPathTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:573,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:581,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 570
    functionDepth: 2
    functionLinenumber: 570
    functionLinenumberEnd: 599
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::ReadTextFile
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - butil::ReadSymbolicLink
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndReadSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 642
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - EXPECT_NE
    - butil::NormalizeFilePath
    - EXPECT_FALSE
    - EXPECT_EQ
    - FilePath::BaseName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:646,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 653
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:656,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 664
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistentWithNonExistentParent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:669,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:678,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 684
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:690,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:694,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 704
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:712,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 725
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - FPL
    - butil::IsLink
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToNonExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:734,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:735,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:745,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:760,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 727
    functionDepth: 1
    functionLinenumber: 727
    functionLinenumberEnd: 767
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - EXPECT_EQ
    - std::string::data
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - std::string::length
    - EXPECT_FALSE
    - char::char
    - static_cast<int>
    - butil::ReadFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndRead)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:784,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:790,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:801,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 769
    functionDepth: 1
    functionLinenumber: 769
    functionLinenumberEnd: 810
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - static_cast<int>
    - EXPECT_EQ
    - std::string::length
    - butil::PathIsWritable
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndWrite)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:816,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:830,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:847,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 858
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - butil::WriteFile
    - EXPECT_TRUE
    - FindResultCollector::size
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - EXPECT_EQ
    - static_cast<int>
    - std::string::length
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeDirectoryPermissionsAndEnumerate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:869,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:873,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:877,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 889
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:896,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 892
    functionDepth: 1
    functionLinenumber: 892
    functionLinenumberEnd: 910
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistantWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:917,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:921,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:925,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:929,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 941
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirNonRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:947,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:951,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:959,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 944
    functionDepth: 1
    functionLinenumber: 944
    functionLinenumberEnd: 971
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:977,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:981,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 990
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:996,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1000,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1001,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1002,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 992
    functionDepth: 2
    functionLinenumber: 992
    functionLinenumberEnd: 1011
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1017,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1023,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1027
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileDirExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1034,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1038,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1039,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1040,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1060,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1062,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: butil::internal::MoveUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1030
    functionDepth: 1
    functionLinenumber: 1030
    functionLinenumberEnd: 1069
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::internal::MoveUnsafe
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1075,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1081,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1071
    functionDepth: 1
    functionLinenumber: 1071
    functionLinenumberEnd: 1104
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1154
      start: 1106
    functionDepth: 1
    functionLinenumber: 1106
    functionLinenumberEnd: 1154
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1156
    functionDepth: 1
    functionLinenumber: 1156
    functionLinenumberEnd: 1209
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1233,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1256
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1262,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1258
    functionDepth: 1
    functionLinenumber: 1258
    functionLinenumberEnd: 1305
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1315,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1316,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1307
    functionDepth: 1
    functionLinenumber: 1307
    functionLinenumberEnd: 1323
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1329,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1333,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1334,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1325
    functionDepth: 2
    functionLinenumber: 1325
    functionLinenumberEnd: 1343
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExisting)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1364
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1364
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExistingDirectory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1366
    functionDepth: 1
    functionLinenumber: 1366
    functionLinenumberEnd: 1401
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryWithTrailingSeparators)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1408,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: SetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1410,1
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1418,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1423
      start: 1404
    functionDepth: 1
    functionLinenumber: 1404
    functionLinenumberEnd: 1423
    functionName: butil::SetReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached:
    - ASSERT_TRUE
    - GetFileAttributes
    - SetFileAttributes
    - butil::value
    - win::GetVersion
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::SetPosixFilePermissions
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void SetReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1428,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1425
    functionDepth: 1
    functionLinenumber: 1425
    functionLinenumberEnd: 1435
    functionName: butil::IsReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - GetFileAttributes
    - butil::value
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    linkageType: ''
    returnType: bool
    signature: bool IsReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1445,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1446,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1437
    functionDepth: 2
    functionLinenumber: 1437
    functionLinenumberEnd: 1455
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - butil::SetReadOnly
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1461,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1477,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1478,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: butil::internal::CopyFileUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1483,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1484,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1489,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1490,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1457
    functionDepth: 2
    functionLinenumber: 1457
    functionLinenumberEnd: 1493
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::internal::CopyFileUnsafe
    - butil::PathExists
    - FilePath::Append
    - FilePath::AppendASCII
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1501,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1505,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1514
      start: 1495
    functionDepth: 2
    functionLinenumber: 1495
    functionLinenumberEnd: 1514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - ASSERT_TRUE
    - butil::path
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::SetReadOnly
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1565
      start: 1521
    functionDepth: 1
    functionLinenumber: 1521
    functionLinenumberEnd: 1565
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::ContentsEqual
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, ContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1572,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1612
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1612
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::TextContentsEqual
    - FILE_PATH_LITERAL
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, TextContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1627,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1631,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1632,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: internal::CopyAndDeleteDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1646
      start: 1617
    functionDepth: 1
    functionLinenumber: 1617
    functionLinenumberEnd: 1646
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyAndDeleteDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1649,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: ::_tdupenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:1659,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1661,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1662,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:1664,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1669,1
    - Dst: free
      Src: /src/brpc/test/file_util_unittest.cc:1670,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1648
    functionDepth: 1
    functionLinenumber: 1648
    functionLinenumberEnd: 1674
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::IsAbsolute
    - butil::GetTempDir
    - free
    - FilePath::value
    - arraysize
    - ::_tputenv_s
    - ::_tdupenv_s
    - _T
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: butil::CreateTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1685,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1688
      start: 1677
    functionDepth: 1
    functionLinenumber: 1677
    functionLinenumberEnd: 1688
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CreateTemporaryFile
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1697,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1698,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1704,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1712
      start: 1690
    functionDepth: 1
    functionLinenumber: 1690
    functionLinenumberEnd: 1712
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateAndOpenTemporaryFile
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndOpenTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1717,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: butil::File
      Src: /src/brpc/test/file_util_unittest.cc:1720,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1724,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1714
    functionDepth: 1
    functionLinenumber: 1714
    functionLinenumberEnd: 1727
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::FileToFILE
    - FPL
    - butil::File
    - File::Pass
    - File::IsValid
    - EXPECT_FALSE
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileToFILE)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1734
      start: 1729
    functionDepth: 1
    functionLinenumber: 1729
    functionLinenumberEnd: 1734
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - butil::CreateNewTempDirectory
    - butil::PathExists
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTempDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::CreateTemporaryDirInDir
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1739,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1745
      start: 1736
    functionDepth: 1
    functionLinenumber: 1736
    functionLinenumberEnd: 1745
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTemporaryDirInDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: butil::GetShmemTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1752
      start: 1748
    functionDepth: 1
    functionLinenumber: 1748
    functionLinenumberEnd: 1752
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::GetShmemTempDir
    - EXPECT_TRUE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetShmemTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetHomeDir
      Src: /src/brpc/test/file_util_unittest.cc:1760,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: FilePath::empty
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1764
      start: 1755
    functionDepth: 1
    functionLinenumber: 1755
    functionLinenumberEnd: 1764
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::empty
    - butil::GetHomeDir
    - FilePath::IsAbsolute
    - ASSERT_TRUE
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetHomeDirTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1786,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1799,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1800,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1807,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1811,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1814,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1818
      start: 1766
    functionDepth: 1
    functionLinenumber: 1766
    functionLinenumberEnd: 1818
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - FilePath::DirName
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::FilePath
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1832,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1838
      start: 1820
    functionDepth: 1
    functionLinenumber: 1820
    functionLinenumberEnd: 1838
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DetectDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1842,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1847,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1850,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1869,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1874,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1892,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1899,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1909,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1921,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1945,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1959,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1968,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1983,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 69
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1840
    functionDepth: 1
    functionLinenumber: 1840
    functionLinenumberEnd: 1986
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FindResultCollector::size
    - std::wstring
    - win::GetVersion
    - FileEnumerator::Next
    - butil::CreateTextFile
    - FPL
    - ReparsePoint::IsValid
    - EXPECT_FALSE
    - FilePath::Append
    - EXPECT_EQ
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileEnumeratorTest)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1999,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2012,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2013,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2014
      start: 1988
    functionDepth: 2
    functionLinenumber: 1988
    functionLinenumberEnd: 2014
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::AppendToFile
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, AppendToFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2026,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2027,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2028,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2031,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2034,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2039,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2045,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2054,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2055,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2016
    functionDepth: 1
    functionLinenumber: 2016
    functionLinenumberEnd: 2058
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::path
    - butil::WriteFile
    - std::string
    - std::vector::end
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - std::string::data
    - std::vector::begin
    - std::vector::size
    - static_cast<int>
    - butil::ReadFile
    - std::string::begin
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2068,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2075,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2083,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2085,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2087,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2089,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2091,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2093,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2115
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_EQ
    - butil::WriteFile
    - butil::ReadFileToString
    - FILE_PATH_LITERAL
    - std::string::clear
    - butil::DeleteFile
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFileToString)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2134,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: butil::TouchFile
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: butil::GetFileInfo
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: File::Info::last_accessed::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: File::Info::last_modified::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2148
      start: 2117
    functionDepth: 1
    functionLinenumber: 2117
    functionLinenumberEnd: 2148
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::GetFileInfo
    - FILE_PATH_LITERAL
    - butil::TouchFile
    - butil::DeleteFile
    - butil::FromUTCExploded
    - File::Info::last_accessed::ToInternalValue
    - File::Info::last_modified::ToInternalValue
    - auto::ToInternalValue
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, TouchFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2150
    functionDepth: 1
    functionLinenumber: 2150
    functionLinenumberEnd: 2164
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::WriteFile
    - std::string::c_str
    - butil::IsDirectoryEmpty
    - FILE_PATH_LITERAL
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, IsDirectoryEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:2179,1
    - Dst: path
      Src: /src/brpc/test/file_util_unittest.cc:2186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2192,1
    - Dst: CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: stat
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2199,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: geteuid
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2215,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2216,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2218,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2221
      start: 2178
    functionDepth: 1
    functionLinenumber: 2178
    functionLinenumberEnd: 2221
    functionName: butil::VerifyPathControlledByUserTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - value
    - geteuid
    - StreamingRpcTest::SetUp
    - path
    - ChangePosixFilePermissions
    - insert
    - CreateDirectory
    - stat
    - AppendASCII
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileUtilTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:2224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2225
      start: 2223
    functionDepth: 2
    functionLinenumber: 2223
    functionLinenumberEnd: 2225
    functionName: butil::VerifyPathControlledByUserTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::FileUtilTest::TearDown
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2242,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2243,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2247,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2248,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2253,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2254,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2258,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2261
      start: 2237
    functionDepth: 1
    functionLinenumber: 2237
    functionLinenumberEnd: 2261
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - AppendASCII
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, BadPaths)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2271,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2272,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2274,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2275,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2286,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2287,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2290,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2291,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2295,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2298
      start: 2263
    functionDepth: 1
    functionLinenumber: 2263
    functionLinenumberEnd: 2298
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::CreateSymbolicLink
    - EXPECT_FALSE
    - FilePath::AppendASCII
    - butil::PathExists
    - AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, Symlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2305,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2306,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2307,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2308,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2309,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2310,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2313,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2316,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2319,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2320,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2324,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2327,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2330,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2331,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2335,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2338,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2341,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2344
      start: 2300
    functionDepth: 2
    functionLinenumber: 2300
    functionLinenumberEnd: 2344
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, OwnershipChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2348,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2349,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2350,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2351,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2352,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2353,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2356,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2357,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2359,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2362,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2363,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2366,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2369,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2370,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2372,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2379,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2380,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2382,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2383,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2385,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2386,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2391,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2392,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2393,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2394,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2395,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2396,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2399,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2400,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2402,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2403,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2405,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2406,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2409,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2410,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2412,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2413,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2415,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2416,1
    - Dst: std::set_union
      Src: /src/brpc/test/file_util_unittest.cc:2423,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: std::inserter
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: std::set::begin
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2428,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2429,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2431,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2432,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2434,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2437
      start: 2346
    functionDepth: 2
    functionLinenumber: 2346
    functionLinenumberEnd: 2437
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - end
    - std::set::begin
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - begin
    - std::inserter
    - ASSERT_NO_FATAL_FAILURE
    - std::set_union
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, GroupWriteTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2441,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2442,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2443,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2444,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2445,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2446,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2449,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2450,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2452,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2453,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2455,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2456,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2460,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2461,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2462,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2463,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2465,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2468,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2469,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2473,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2474,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2475,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2476,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2478,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2479,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2481,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2482,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2486,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2487,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2488,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2489,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2491,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2492,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2494,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2495,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2499,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2500,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2501,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2502,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2504,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2505,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2507,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2508,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2512,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2513,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2514,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2515,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2517,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2518,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2520,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2521,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2526,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2527,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2528,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2531,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2534,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2537
      start: 2439
    functionDepth: 2
    functionLinenumber: 2439
    functionLinenumberEnd: 2537
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, WriteBitChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2541,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:2542,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2545
      start: 2539
    functionDepth: 1
    functionLinenumber: 2539
    functionLinenumberEnd: 2545
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_FALSE
    - butil::FilePath::value
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryParentsNotExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2556,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/file_util_unittest.cc:2557,1
    - Dst: file_util::InsertImageIntoMediaStore
      Src: /src/brpc/test/file_util_unittest.cc:2561,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2567,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2568,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:2571,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2572,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    - Dst: File::ReadAtCurrentPos
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2576
      start: 2548
    functionDepth: 1
    functionLinenumber: 2548
    functionLinenumberEnd: 2576
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - file_util::InsertImageIntoMediaStore
    - char::char
    - OpenContentUriForRead
    - File::ReadAtCurrentPos
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - FilePath::Append
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - FilePath::AppendASCII
    - butil::GetFileSize
    - EXPECT_LT
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ValidContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2587,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2589
      start: 2578
    functionDepth: 1
    functionLinenumber: 2578
    functionLinenumberEnd: 2589
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - OpenContentUriForRead
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - EXPECT_FALSE
    - butil::GetFileSize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NonExistentContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2602,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2603,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: fcntl
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    - Dst: read
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2609
      start: 2592
    functionDepth: 0
    functionLinenumber: 2592
    functionLinenumberEnd: 2609
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - fcntl
    - read
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDDoesClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2614
      start: 2612
    functionDepth: 0
    functionLinenumber: 2612
    functionLinenumberEnd: 2614
    functionName: butil::CloseWithScopedFD
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CloseWithScopedFD(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    - Dst: butil::CloseWithScopedFD
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2627
      start: 2617
    functionDepth: 1
    functionLinenumber: 2617
    functionLinenumberEnd: 2627
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - IGNORE_EINTR
    - EXPECT_DEATH
    - butil::CloseWithScopedFD
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDCrashesOnCloseFailure)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:90,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:91,1
    - Dst: static_cast<USHORT>
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: wcslen
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: reinterpret_cast<REPARSE_DATA_BUFFER*>
      Src: /src/brpc/test/file_util_unittest.cc:96,1
    - Dst: memcpy
      Src: /src/brpc/test/file_util_unittest.cc:99,1
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - source
    - ' target_path'
    argTypes:
    - HANDLE
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 112
    functionName: butil::SetReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::size
    - butil::value
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    - static_cast<USHORT>
    - std::wstring::c_str
    - wcslen
    - DeviceIoControl
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool SetReparsePoint(HANDLE source, const FilePath& target_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - source
    argTypes:
    - HANDLE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::DeleteReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached:
    - DeviceIoControl
    linkageType: ''
    returnType: bool
    signature: bool DeleteReparsePoint(HANDLE source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/file_util_unittest.cc:132,1
    - Dst: ::CreateFile
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: butil::ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    - Dst: SetReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - ' source'
    - ' target'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 141
    functionName: butil::ReparsePoint::ReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - SetReparsePoint
    - butil::ReparsePoint::IsValid
    - ::CreateFile
    - Set
    linkageType: ''
    returnType: void
    signature: void ReparsePoint(const FilePath& source, const FilePath& target)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: ~ReparsePoint()
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - DeleteReparsePoint
    linkageType: ''
    returnType: void
    signature: void ~ReparsePoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: butil::ReparsePoint::IsValid
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsValid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - ' path'
    - mode_bits_to_set
    - mode_bits_to_clear
    argTypes:
    - FilePath
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 173
    functionName: butil::ChangePosixFilePermissions
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 6
    functionsReached:
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: "void ChangePosixFilePermissions(const FilePath& path,\n                                int
      mode_bits_to_set,\n                                int mode_bits_to_clear)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getuid
      Src: /src/brpc/test/file_util_unittest.cc:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    - Dst: CreateUniqueTempDir
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 197
    functionName: butil::FileUtilTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - setegid
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - seteuid
    - getuid
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: StreamingRpcTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 206
    functionName: butil::FileUtilTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached:
    - StreamingRpcTest::TearDown
    - ASSERT_EQ
    - seteuid
    - setegid
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:222,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' enumerator'
    argTypes:
    - FileEnumerator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 230
    functionName: butil::FindResultCollector::FindResultCollector
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - EXPECT_TRUE
    - Next
    - end
    - FilePath::value
    - find
    - insert
    linkageType: ''
    returnType: void
    signature: void FindResultCollector(FileEnumerator& enumerator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' file'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: butil::FindResultCollector::HasFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - find
    - value
    - end
    linkageType: ''
    returnType: bool
    signature: bool HasFile(const FilePath& file) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    - Dst: butil::FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: butil::FindResultCollector::size
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 3
    functionsReached:
    - butil::FindResultCollector::size
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: int size()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wofstream::open
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::close
      Src: /src/brpc/test/file_util_unittest.cc:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' filename'
    - ' contents'
    argTypes:
    - FilePath
    - std::wstring
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::CreateTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 60
    functionsReached:
    - ASSERT_TRUE
    - std::wofstream::is_open
    - butil::value
    - std::wofstream::close
    - std::wofstream::open
    linkageType: ''
    returnType: void
    signature: "void CreateTextFile(const FilePath& filename,\n                    const
      std::wstring& contents)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wifstream::open
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::getline
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: std::wifstream::close
      Src: /src/brpc/test/file_util_unittest.cc:262,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' filename'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 264
    functionName: butil::ReadTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 12
    functionsReached:
    - EXPECT_TRUE
    - std::wifstream::close
    - butil::value
    - std::wstring
    - std::wifstream::getline
    - arraysize
    - std::wifstream::is_open
    - std::wifstream::open
    linkageType: ''
    returnType: std::wstring
    signature: std::wstring ReadTextFile(const FilePath& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ft'
    argTypes:
    - FILETIME
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: butil::FileTimeAsUint64
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t FileTimeAsUint64(const FILETIME& ft)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:282,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:291,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:294,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:297,1
    - Dst: butil::ComputeDirectorySize
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 301
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::ComputeDirectorySize
    - butil::CreateTextFile
    - FPL
    - FilePath::Append
    - butil::GetFileSize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileAndDirectorySize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: DirName
      Src: /src/brpc/test/file_util_unittest.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 329
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - DirName
    - butil::CreateTextFile
    - FPL
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathBasic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:355,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:361,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:362,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:365,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:366,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:372,1
    - Dst: FilePath::StringType::resize
      Src: /src/brpc/test/file_util_unittest.cc:373,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:381,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:416,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:417,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:418,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:427,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:431,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 446
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - FilePath::StringType::resize
    - FilePath::DirName
    - ASSERT_STREQ
    - ASSERT_FALSE
    - ReparsePoint::IsValid
    - butil::NormalizeFilePath
    - FilePath::Append
    - butil::FilePath
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathReparsePoints)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:450,1
    - Dst: isalpha
      Src: /src/brpc/test/file_util_unittest.cc:451,1
    - Dst: LOG
      Src: /src/brpc/test/file_util_unittest.cc:452,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:458,1
    - Dst: ::QueryDosDevice
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:470,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:472,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:475,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:484,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:486,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:493,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:502,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:505,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:512,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - ASSERT_EQ
    - isalpha
    - FilePath::value
    - FPL
    - EXPECT_EQ
    - ASSERT_FALSE
    - std::wstring::c_str
    - FilePath::Append
    - butil::FilePath
    - DevicePathToDriveLetterPath
    - ASSERT_LT
    - LOG
    - ::QueryDosDevice
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DevicePathToDriveLetter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:522,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:523,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: GetShortPathName
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: ASSERT_STRNE
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:549,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: file_util::MakeFileUnreadable
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:556,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: GetLongPathName
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 564
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::IsParent
    - ASSERT_STRNE
    - FilePath::Append
    - GetLongPathName
    - butil::PathExists
    - ASSERT_NE
    - EXPECT_EQ
    - EXPECT_STREQ
    - EXPECT_TRUE
    - FilePath::value
    - FPL
    - FilePath::DirName
    - DWORD
    - FilePath::BaseName
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    - butil::CreateTemporaryFileInDir
    - file_util::MakeFileUnreadable
    - ASSERT_LT
    - GetShortPathName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileInDirLongPathTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:573,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:581,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 570
    functionDepth: 2
    functionLinenumber: 570
    functionLinenumberEnd: 599
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::ReadTextFile
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - butil::ReadSymbolicLink
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndReadSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 642
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - EXPECT_NE
    - butil::NormalizeFilePath
    - EXPECT_FALSE
    - EXPECT_EQ
    - FilePath::BaseName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:646,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 653
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:656,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 664
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistentWithNonExistentParent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:669,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:678,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 684
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:690,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:694,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 704
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:712,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 725
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - FPL
    - butil::IsLink
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToNonExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:734,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:735,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:745,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:760,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 727
    functionDepth: 1
    functionLinenumber: 727
    functionLinenumberEnd: 767
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - EXPECT_EQ
    - std::string::data
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - std::string::length
    - EXPECT_FALSE
    - char::char
    - static_cast<int>
    - butil::ReadFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndRead)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:784,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:790,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:801,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 769
    functionDepth: 1
    functionLinenumber: 769
    functionLinenumberEnd: 810
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - static_cast<int>
    - EXPECT_EQ
    - std::string::length
    - butil::PathIsWritable
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndWrite)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:816,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:830,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:847,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 858
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - butil::WriteFile
    - EXPECT_TRUE
    - FindResultCollector::size
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - EXPECT_EQ
    - static_cast<int>
    - std::string::length
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeDirectoryPermissionsAndEnumerate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:869,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:873,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:877,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 889
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:896,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 892
    functionDepth: 1
    functionLinenumber: 892
    functionLinenumberEnd: 910
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistantWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:917,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:921,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:925,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:929,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 941
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirNonRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:947,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:951,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:959,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 944
    functionDepth: 1
    functionLinenumber: 944
    functionLinenumberEnd: 971
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:977,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:981,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 990
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:996,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1000,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1001,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1002,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 992
    functionDepth: 2
    functionLinenumber: 992
    functionLinenumberEnd: 1011
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1017,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1023,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1027
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileDirExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1034,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1038,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1039,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1040,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1060,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1062,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: butil::internal::MoveUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1030
    functionDepth: 1
    functionLinenumber: 1030
    functionLinenumberEnd: 1069
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::internal::MoveUnsafe
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1075,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1081,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1071
    functionDepth: 1
    functionLinenumber: 1071
    functionLinenumberEnd: 1104
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1154
      start: 1106
    functionDepth: 1
    functionLinenumber: 1106
    functionLinenumberEnd: 1154
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1156
    functionDepth: 1
    functionLinenumber: 1156
    functionLinenumberEnd: 1209
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1233,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1256
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1262,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1258
    functionDepth: 1
    functionLinenumber: 1258
    functionLinenumberEnd: 1305
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1315,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1316,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1307
    functionDepth: 1
    functionLinenumber: 1307
    functionLinenumberEnd: 1323
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1329,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1333,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1334,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1325
    functionDepth: 2
    functionLinenumber: 1325
    functionLinenumberEnd: 1343
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExisting)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1364
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1364
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExistingDirectory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1366
    functionDepth: 1
    functionLinenumber: 1366
    functionLinenumberEnd: 1401
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryWithTrailingSeparators)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1408,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: SetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1410,1
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1418,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1423
      start: 1404
    functionDepth: 1
    functionLinenumber: 1404
    functionLinenumberEnd: 1423
    functionName: butil::SetReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 4
    functionsReached:
    - ASSERT_TRUE
    - GetFileAttributes
    - SetFileAttributes
    - butil::value
    - win::GetVersion
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::SetPosixFilePermissions
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void SetReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1428,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1425
    functionDepth: 1
    functionLinenumber: 1425
    functionLinenumberEnd: 1435
    functionName: butil::IsReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 4
    functionsReached:
    - EXPECT_TRUE
    - GetFileAttributes
    - butil::value
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    linkageType: ''
    returnType: bool
    signature: bool IsReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1445,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1446,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1437
    functionDepth: 2
    functionLinenumber: 1437
    functionLinenumberEnd: 1455
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - butil::SetReadOnly
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1461,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1477,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1478,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: butil::internal::CopyFileUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1483,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1484,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1489,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1490,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1457
    functionDepth: 2
    functionLinenumber: 1457
    functionLinenumberEnd: 1493
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::internal::CopyFileUnsafe
    - butil::PathExists
    - FilePath::Append
    - FilePath::AppendASCII
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1501,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1505,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1514
      start: 1495
    functionDepth: 2
    functionLinenumber: 1495
    functionLinenumberEnd: 1514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - ASSERT_TRUE
    - butil::path
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::SetReadOnly
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1565
      start: 1521
    functionDepth: 1
    functionLinenumber: 1521
    functionLinenumberEnd: 1565
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::ContentsEqual
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, ContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1572,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1612
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1612
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::TextContentsEqual
    - FILE_PATH_LITERAL
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, TextContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1627,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1631,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1632,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: internal::CopyAndDeleteDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1646
      start: 1617
    functionDepth: 1
    functionLinenumber: 1617
    functionLinenumberEnd: 1646
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyAndDeleteDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1649,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: ::_tdupenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:1659,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1661,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1662,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:1664,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1669,1
    - Dst: free
      Src: /src/brpc/test/file_util_unittest.cc:1670,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1648
    functionDepth: 1
    functionLinenumber: 1648
    functionLinenumberEnd: 1674
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::IsAbsolute
    - butil::GetTempDir
    - free
    - FilePath::value
    - arraysize
    - ::_tputenv_s
    - ::_tdupenv_s
    - _T
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: butil::CreateTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1685,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1688
      start: 1677
    functionDepth: 1
    functionLinenumber: 1677
    functionLinenumberEnd: 1688
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CreateTemporaryFile
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1697,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1698,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1704,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1712
      start: 1690
    functionDepth: 1
    functionLinenumber: 1690
    functionLinenumberEnd: 1712
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateAndOpenTemporaryFile
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndOpenTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1717,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: butil::File
      Src: /src/brpc/test/file_util_unittest.cc:1720,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1724,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1714
    functionDepth: 1
    functionLinenumber: 1714
    functionLinenumberEnd: 1727
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::FileToFILE
    - FPL
    - butil::File
    - File::Pass
    - File::IsValid
    - EXPECT_FALSE
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileToFILE)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1734
      start: 1729
    functionDepth: 1
    functionLinenumber: 1729
    functionLinenumberEnd: 1734
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - butil::CreateNewTempDirectory
    - butil::PathExists
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTempDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::CreateTemporaryDirInDir
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1739,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1745
      start: 1736
    functionDepth: 1
    functionLinenumber: 1736
    functionLinenumberEnd: 1745
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTemporaryDirInDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: butil::GetShmemTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1752
      start: 1748
    functionDepth: 1
    functionLinenumber: 1748
    functionLinenumberEnd: 1752
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::GetShmemTempDir
    - EXPECT_TRUE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetShmemTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetHomeDir
      Src: /src/brpc/test/file_util_unittest.cc:1760,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: FilePath::empty
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1764
      start: 1755
    functionDepth: 1
    functionLinenumber: 1755
    functionLinenumberEnd: 1764
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::empty
    - butil::GetHomeDir
    - FilePath::IsAbsolute
    - ASSERT_TRUE
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetHomeDirTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1786,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1799,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1800,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1807,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1811,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1814,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1818
      start: 1766
    functionDepth: 1
    functionLinenumber: 1766
    functionLinenumberEnd: 1818
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - FilePath::DirName
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::FilePath
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1832,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1838
      start: 1820
    functionDepth: 1
    functionLinenumber: 1820
    functionLinenumberEnd: 1838
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DetectDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1842,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1847,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1850,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1869,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1874,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1892,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1899,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1909,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1921,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1945,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1959,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1968,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1983,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 69
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1840
    functionDepth: 1
    functionLinenumber: 1840
    functionLinenumberEnd: 1986
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FindResultCollector::size
    - std::wstring
    - win::GetVersion
    - FileEnumerator::Next
    - butil::CreateTextFile
    - FPL
    - ReparsePoint::IsValid
    - EXPECT_FALSE
    - FilePath::Append
    - EXPECT_EQ
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileEnumeratorTest)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1999,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2012,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2013,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2014
      start: 1988
    functionDepth: 2
    functionLinenumber: 1988
    functionLinenumberEnd: 2014
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::AppendToFile
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, AppendToFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2026,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2027,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2028,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2031,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2034,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2039,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2045,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2054,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2055,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2016
    functionDepth: 1
    functionLinenumber: 2016
    functionLinenumberEnd: 2058
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::path
    - butil::WriteFile
    - std::string
    - std::vector::end
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - std::string::data
    - std::vector::begin
    - std::vector::size
    - static_cast<int>
    - butil::ReadFile
    - std::string::begin
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2068,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2075,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2083,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2085,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2087,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2089,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2091,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2093,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2115
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_EQ
    - butil::WriteFile
    - butil::ReadFileToString
    - FILE_PATH_LITERAL
    - std::string::clear
    - butil::DeleteFile
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFileToString)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2134,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: butil::TouchFile
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: butil::GetFileInfo
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: File::Info::last_accessed::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: File::Info::last_modified::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2148
      start: 2117
    functionDepth: 1
    functionLinenumber: 2117
    functionLinenumberEnd: 2148
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::GetFileInfo
    - FILE_PATH_LITERAL
    - butil::TouchFile
    - butil::DeleteFile
    - butil::FromUTCExploded
    - File::Info::last_accessed::ToInternalValue
    - File::Info::last_modified::ToInternalValue
    - auto::ToInternalValue
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, TouchFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2150
    functionDepth: 1
    functionLinenumber: 2150
    functionLinenumberEnd: 2164
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::WriteFile
    - std::string::c_str
    - butil::IsDirectoryEmpty
    - FILE_PATH_LITERAL
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, IsDirectoryEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:2179,1
    - Dst: path
      Src: /src/brpc/test/file_util_unittest.cc:2186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2192,1
    - Dst: CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: stat
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2199,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: geteuid
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2215,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2216,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2218,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2221
      start: 2178
    functionDepth: 1
    functionLinenumber: 2178
    functionLinenumberEnd: 2221
    functionName: butil::VerifyPathControlledByUserTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - value
    - geteuid
    - StreamingRpcTest::SetUp
    - path
    - ChangePosixFilePermissions
    - insert
    - CreateDirectory
    - stat
    - AppendASCII
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileUtilTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:2224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2225
      start: 2223
    functionDepth: 2
    functionLinenumber: 2223
    functionLinenumberEnd: 2225
    functionName: butil::VerifyPathControlledByUserTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::FileUtilTest::TearDown
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2242,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2243,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2247,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2248,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2253,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2254,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2258,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2261
      start: 2237
    functionDepth: 1
    functionLinenumber: 2237
    functionLinenumberEnd: 2261
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - AppendASCII
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, BadPaths)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2271,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2272,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2274,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2275,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2286,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2287,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2290,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2291,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2295,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2298
      start: 2263
    functionDepth: 1
    functionLinenumber: 2263
    functionLinenumberEnd: 2298
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::CreateSymbolicLink
    - EXPECT_FALSE
    - FilePath::AppendASCII
    - butil::PathExists
    - AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, Symlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2305,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2306,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2307,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2308,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2309,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2310,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2313,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2316,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2319,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2320,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2324,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2327,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2330,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2331,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2335,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2338,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2341,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2344
      start: 2300
    functionDepth: 2
    functionLinenumber: 2300
    functionLinenumberEnd: 2344
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, OwnershipChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2348,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2349,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2350,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2351,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2352,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2353,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2356,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2357,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2359,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2362,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2363,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2366,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2369,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2370,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2372,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2379,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2380,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2382,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2383,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2385,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2386,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2391,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2392,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2393,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2394,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2395,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2396,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2399,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2400,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2402,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2403,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2405,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2406,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2409,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2410,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2412,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2413,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2415,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2416,1
    - Dst: std::set_union
      Src: /src/brpc/test/file_util_unittest.cc:2423,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: std::inserter
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: std::set::begin
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2428,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2429,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2431,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2432,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2434,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2437
      start: 2346
    functionDepth: 2
    functionLinenumber: 2346
    functionLinenumberEnd: 2437
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - end
    - std::set::begin
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - begin
    - std::inserter
    - ASSERT_NO_FATAL_FAILURE
    - std::set_union
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, GroupWriteTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2441,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2442,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2443,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2444,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2445,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2446,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2449,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2450,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2452,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2453,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2455,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2456,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2460,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2461,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2462,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2463,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2465,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2468,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2469,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2473,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2474,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2475,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2476,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2478,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2479,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2481,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2482,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2486,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2487,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2488,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2489,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2491,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2492,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2494,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2495,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2499,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2500,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2501,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2502,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2504,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2505,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2507,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2508,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2512,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2513,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2514,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2515,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2517,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2518,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2520,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2521,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2526,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2527,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2528,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2531,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2534,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2537
      start: 2439
    functionDepth: 2
    functionLinenumber: 2439
    functionLinenumberEnd: 2537
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, WriteBitChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2541,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:2542,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2545
      start: 2539
    functionDepth: 1
    functionLinenumber: 2539
    functionLinenumberEnd: 2545
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_FALSE
    - butil::FilePath::value
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryParentsNotExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2556,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/file_util_unittest.cc:2557,1
    - Dst: file_util::InsertImageIntoMediaStore
      Src: /src/brpc/test/file_util_unittest.cc:2561,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2567,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2568,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:2571,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2572,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    - Dst: File::ReadAtCurrentPos
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2576
      start: 2548
    functionDepth: 1
    functionLinenumber: 2548
    functionLinenumberEnd: 2576
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - file_util::InsertImageIntoMediaStore
    - char::char
    - OpenContentUriForRead
    - File::ReadAtCurrentPos
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - FilePath::Append
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - FilePath::AppendASCII
    - butil::GetFileSize
    - EXPECT_LT
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ValidContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2587,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2589
      start: 2578
    functionDepth: 1
    functionLinenumber: 2578
    functionLinenumberEnd: 2589
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - OpenContentUriForRead
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - EXPECT_FALSE
    - butil::GetFileSize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NonExistentContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2602,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2603,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: fcntl
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    - Dst: read
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2609
      start: 2592
    functionDepth: 0
    functionLinenumber: 2592
    functionLinenumberEnd: 2609
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - fcntl
    - read
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDDoesClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2614
      start: 2612
    functionDepth: 0
    functionLinenumber: 2612
    functionLinenumberEnd: 2614
    functionName: butil::CloseWithScopedFD
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CloseWithScopedFD(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    - Dst: butil::CloseWithScopedFD
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2627
      start: 2617
    functionDepth: 1
    functionLinenumber: 2617
    functionLinenumberEnd: 2627
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - IGNORE_EINTR
    - EXPECT_DEATH
    - butil::CloseWithScopedFD
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDCrashesOnCloseFailure)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: std::wstring::size
      Src: /src/brpc/test/file_util_unittest.cc:88,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:90,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:91,1
    - Dst: static_cast<USHORT>
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: wcslen
      Src: /src/brpc/test/file_util_unittest.cc:92,1
    - Dst: reinterpret_cast<REPARSE_DATA_BUFFER*>
      Src: /src/brpc/test/file_util_unittest.cc:96,1
    - Dst: memcpy
      Src: /src/brpc/test/file_util_unittest.cc:99,1
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - source
    - ' target_path'
    argTypes:
    - HANDLE
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 112
    functionName: butil::SetReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::size
    - butil::value
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    - static_cast<USHORT>
    - std::wstring::c_str
    - wcslen
    - DeviceIoControl
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool SetReparsePoint(HANDLE source, const FilePath& target_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/brpc/test/file_util_unittest.cc:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - source
    argTypes:
    - HANDLE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: butil::DeleteReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 2
    functionsReached:
    - DeviceIoControl
    linkageType: ''
    returnType: bool
    signature: bool DeleteReparsePoint(HANDLE source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/brpc/test/file_util_unittest.cc:132,1
    - Dst: ::CreateFile
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:133,1
    - Dst: butil::ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    - Dst: SetReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - ' source'
    - ' target'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 141
    functionName: butil::ReparsePoint::ReparsePoint
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - SetReparsePoint
    - butil::ReparsePoint::IsValid
    - ::CreateFile
    - Set
    linkageType: ''
    returnType: void
    signature: void ReparsePoint(const FilePath& source, const FilePath& target)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteReparsePoint
      Src: /src/brpc/test/file_util_unittest.cc:145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: ~ReparsePoint()
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - DeleteReparsePoint
    linkageType: ''
    returnType: void
    signature: void ~ReparsePoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: butil::ReparsePoint::IsValid
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsValid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - ' path'
    - mode_bits_to_set
    - mode_bits_to_clear
    argTypes:
    - FilePath
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 173
    functionName: butil::ChangePosixFilePermissions
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 9
    functionsReached:
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: "void ChangePosixFilePermissions(const FilePath& path,\n                                int
      mode_bits_to_set,\n                                int mode_bits_to_clear)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getuid
      Src: /src/brpc/test/file_util_unittest.cc:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:190,1
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    - Dst: CreateUniqueTempDir
      Src: /src/brpc/test/file_util_unittest.cc:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 197
    functionName: butil::FileUtilTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - setegid
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - seteuid
    - getuid
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: seteuid
      Src: /src/brpc/test/file_util_unittest.cc:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: setegid
      Src: /src/brpc/test/file_util_unittest.cc:202,1
    - Dst: StreamingRpcTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 206
    functionName: butil::FileUtilTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 3
    functionsReached:
    - StreamingRpcTest::TearDown
    - ASSERT_EQ
    - seteuid
    - setegid
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:221,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:222,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:224,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' enumerator'
    argTypes:
    - FileEnumerator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 230
    functionName: butil::FindResultCollector::FindResultCollector
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - value
    - EXPECT_TRUE
    - Next
    - end
    - FilePath::value
    - find
    - insert
    linkageType: ''
    returnType: void
    signature: void FindResultCollector(FileEnumerator& enumerator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' file'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: butil::FindResultCollector::HasFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - find
    - value
    - end
    linkageType: ''
    returnType: bool
    signature: bool HasFile(const FilePath& file) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    - Dst: butil::FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: butil::FindResultCollector::size
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 4
    functionsReached:
    - butil::FindResultCollector::size
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: int size()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wofstream::open
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:250,1
    - Dst: std::wofstream::close
      Src: /src/brpc/test/file_util_unittest.cc:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' filename'
    - ' contents'
    argTypes:
    - FilePath
    - std::wstring
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::CreateTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 90
    functionsReached:
    - ASSERT_TRUE
    - std::wofstream::is_open
    - butil::value
    - std::wofstream::close
    - std::wofstream::open
    linkageType: ''
    returnType: void
    signature: "void CreateTextFile(const FilePath& filename,\n                    const
      std::wstring& contents)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::wifstream::open
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:259,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::is_open
      Src: /src/brpc/test/file_util_unittest.cc:260,1
    - Dst: std::wifstream::getline
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:261,1
    - Dst: std::wifstream::close
      Src: /src/brpc/test/file_util_unittest.cc:262,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' filename'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 264
    functionName: butil::ReadTextFile
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 18
    functionsReached:
    - EXPECT_TRUE
    - std::wifstream::close
    - butil::value
    - std::wstring
    - std::wifstream::getline
    - arraysize
    - std::wifstream::is_open
    - std::wifstream::open
    linkageType: ''
    returnType: std::wstring
    signature: std::wstring ReadTextFile(const FilePath& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ft'
    argTypes:
    - FILETIME
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: butil::FileTimeAsUint64
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t FileTimeAsUint64(const FILETIME& ft)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:278,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:282,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:284,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:287,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:291,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:293,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:294,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:296,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:297,1
    - Dst: butil::ComputeDirectorySize
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 301
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::ComputeDirectorySize
    - butil::CreateTextFile
    - FPL
    - FilePath::Append
    - butil::GetFileSize
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileAndDirectorySize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:306,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:307,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:308,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:312,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:313,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:318,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:327,1
    - Dst: DirName
      Src: /src/brpc/test/file_util_unittest.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 329
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - DirName
    - butil::CreateTextFile
    - FPL
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathBasic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:349,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:352,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:354,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:355,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:361,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:362,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:365,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:366,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:372,1
    - Dst: FilePath::StringType::resize
      Src: /src/brpc/test/file_util_unittest.cc:373,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:375,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:377,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:380,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:381,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:384,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:386,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:391,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:396,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:405,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:409,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:415,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:416,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:417,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:418,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:420,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:427,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:428,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:430,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:431,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:433,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:437,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 446
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - FilePath::StringType::resize
    - FilePath::DirName
    - ASSERT_STREQ
    - ASSERT_FALSE
    - ReparsePoint::IsValid
    - butil::NormalizeFilePath
    - FilePath::Append
    - butil::FilePath
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathReparsePoints)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:450,1
    - Dst: isalpha
      Src: /src/brpc/test/file_util_unittest.cc:451,1
    - Dst: LOG
      Src: /src/brpc/test/file_util_unittest.cc:452,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:458,1
    - Dst: ::QueryDosDevice
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/file_util_unittest.cc:459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:466,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:470,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:471,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:472,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:474,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:475,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:484,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:486,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:489,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:492,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:493,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:502,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:505,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:507,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: DevicePathToDriveLetterPath
      Src: /src/brpc/test/file_util_unittest.cc:511,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:512,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - ASSERT_EQ
    - isalpha
    - FilePath::value
    - FPL
    - EXPECT_EQ
    - ASSERT_FALSE
    - std::wstring::c_str
    - FilePath::Append
    - butil::FilePath
    - DevicePathToDriveLetterPath
    - ASSERT_LT
    - LOG
    - ::QueryDosDevice
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DevicePathToDriveLetter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:522,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:523,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:525,1
    - Dst: GetShortPathName
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:530,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:532,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:533,1
    - Dst: ASSERT_STRNE
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:538,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:539,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:549,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: file_util::MakeFileUnreadable
      Src: /src/brpc/test/file_util_unittest.cc:552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: butil::CreateTemporaryFileInDir
      Src: /src/brpc/test/file_util_unittest.cc:555,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:556,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:557,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::IsParent
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:558,1
    - Dst: GetLongPathName
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    - Dst: DWORD
      Src: /src/brpc/test/file_util_unittest.cc:563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 564
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::IsParent
    - ASSERT_STRNE
    - FilePath::Append
    - GetLongPathName
    - butil::PathExists
    - ASSERT_NE
    - EXPECT_EQ
    - EXPECT_STREQ
    - EXPECT_TRUE
    - FilePath::value
    - FPL
    - FilePath::DirName
    - DWORD
    - FilePath::BaseName
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    - butil::CreateTemporaryFileInDir
    - file_util::MakeFileUnreadable
    - ASSERT_LT
    - GetShortPathName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileInDirLongPathTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:571,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:572,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:573,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:575,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:581,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:585,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:588,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:590,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:591,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:595,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:596,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:597,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    - Dst: butil::ReadSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 570
    functionDepth: 2
    functionLinenumber: 570
    functionLinenumberEnd: 599
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::ReadTextFile
    - FilePath::value
    - butil::CreateTextFile
    - FPL
    - butil::ReadSymbolicLink
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndReadSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:608,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:609,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:612,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:617,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: FilePath::BaseName
      Src: /src/brpc/test/file_util_unittest.cc:620,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:623,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:626,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:629,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:633,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:635,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:637,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    - Dst: butil::NormalizeFilePath
      Src: /src/brpc/test/file_util_unittest.cc:641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 642
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - EXPECT_NE
    - butil::NormalizeFilePath
    - EXPECT_FALSE
    - EXPECT_EQ
    - FilePath::BaseName
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NormalizeFilePathSymlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:646,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:647,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:649,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:650,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:651,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:652,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 653
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:656,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:658,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:660,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:661,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:662,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 664
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_FALSE
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistentWithNonExistentParent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:668,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:669,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:670,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:673,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:674,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:677,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:678,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:679,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 684
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:689,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:690,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:691,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:694,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:695,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:702,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:703,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 704
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:708,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:709,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:712,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:713,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:717,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:718,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:721,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    - Dst: butil::IsLink
      Src: /src/brpc/test/file_util_unittest.cc:724,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 706
    functionDepth: 1
    functionLinenumber: 706
    functionLinenumberEnd: 725
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - FPL
    - butil::IsLink
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteSymlinkToNonExistentFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:729,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:730,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:734,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:735,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:738,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:739,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:744,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:745,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:748,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:749,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:752,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:755,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:756,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:759,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:760,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:763,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 727
    functionDepth: 1
    functionLinenumber: 727
    functionLinenumberEnd: 767
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - EXPECT_EQ
    - std::string::data
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - std::string::length
    - EXPECT_FALSE
    - char::char
    - static_cast<int>
    - butil::ReadFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndRead)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:771,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:777,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:783,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:784,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:785,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:789,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:790,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:792,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:794,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:798,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:800,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:801,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:803,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:804,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: butil::PathIsWritable
      Src: /src/brpc/test/file_util_unittest.cc:805,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:808,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 769
    functionDepth: 1
    functionLinenumber: 769
    functionLinenumberEnd: 810
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::WriteFile
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - static_cast<int>
    - EXPECT_EQ
    - std::string::length
    - butil::PathIsWritable
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeFilePermissionsAndWrite)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:816,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:817,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:820,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:821,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:823,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:829,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:830,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:833,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:834,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:839,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:841,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:842,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:845,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:846,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:847,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:852,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:853,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:856,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:857,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 858
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - butil::WriteFile
    - EXPECT_TRUE
    - FindResultCollector::size
    - FPL
    - butil::GetPosixFilePermissions
    - std::string::data
    - butil::SetPosixFilePermissions
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - EXPECT_EQ
    - static_cast<int>
    - std::string::length
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ChangeDirectoryPermissionsAndEnumerate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:868,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:869,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:872,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:873,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:874,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:877,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:881,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:882,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:886,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:887,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:888,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 889
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:895,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:896,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:897,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:901,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:905,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:908,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:909,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 892
    functionDepth: 1
    functionLinenumber: 892
    functionLinenumberEnd: 910
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteNonExistantWildCard)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:916,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:917,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:918,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:920,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:921,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:922,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:924,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:925,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:926,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:928,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:929,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:933,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:934,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:938,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:939,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 941
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirNonRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:946,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:947,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:948,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:950,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:951,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:952,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:954,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:956,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:958,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:959,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:960,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:963,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:964,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:967,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:968,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:969,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:970,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 944
    functionDepth: 1
    functionLinenumber: 944
    functionLinenumberEnd: 971
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateTextFile
    - FPL
    - butil::DeleteFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DeleteDirRecursive)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:976,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:977,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:978,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:981,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:983,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:985,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:988,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:989,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 990
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:995,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:996,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:997,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1000,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1001,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1002,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1003,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1005,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1008,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1009,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1010,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 992
    functionDepth: 2
    functionLinenumber: 992
    functionLinenumberEnd: 1011
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1016,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1017,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1018,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1022,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1023,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1024,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1026,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1027
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveFileDirExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1033,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1034,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1035,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1038,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1039,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1040,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1041,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1045,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1047,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1049,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1051,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1054,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1055,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1056,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1057,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1060,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1061,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1062,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1063,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1064,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1065,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: butil::internal::MoveUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1066,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1067,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1068,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1030
    functionDepth: 1
    functionLinenumber: 1030
    functionLinenumberEnd: 1069
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::internal::MoveUnsafe
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1074,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1075,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1076,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1080,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1081,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1082,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1086,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1089,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1091,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: butil::Move
      Src: /src/brpc/test/file_util_unittest.cc:1097,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1102,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1071
    functionDepth: 1
    functionLinenumber: 1071
    functionLinenumberEnd: 1104
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    - butil::Move
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, MoveExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1109,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1110,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1111,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1115,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1117,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1121,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1123,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1127,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1129,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1133,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1135,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1137,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1139,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1152,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1154
      start: 1106
    functionDepth: 1
    functionLinenumber: 1106
    functionLinenumberEnd: 1154
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1159,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1161,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1165,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1167,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1171,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1173,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1177,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1179,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1183,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1186,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1188,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1190,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1192,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1198,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1201,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1202,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1206,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1156
    functionDepth: 1
    functionLinenumber: 1156
    functionLinenumberEnd: 1209
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryRecursivelyExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1214,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1216,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1220,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1222,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1226,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1227,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1228,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1232,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1233,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1234,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1238,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1240,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1244,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1249,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1250,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1253,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1254,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1256
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1261,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1262,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1263,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1267,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1269,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1273,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1275,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1279,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1281,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1285,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1287,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1289,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1293,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1295,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1298,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1299,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1300,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1301,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1302,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1303,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1258
    functionDepth: 1
    functionLinenumber: 1258
    functionLinenumberEnd: 1305
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryExists)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1310,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1312,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1315,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1316,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1319,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1307
    functionDepth: 1
    functionLinenumber: 1307
    functionLinenumberEnd: 1323
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToNew)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1328,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1329,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1330,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1333,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1334,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1336,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1338,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1341,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1343
      start: 1325
    functionDepth: 2
    functionLinenumber: 1325
    functionLinenumberEnd: 1343
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - butil::ReadTextFile
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExisting)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1348,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1350,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1354,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1356,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1358,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1364
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1364
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileWithCopyDirectoryRecursiveToExistingDirectory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1369,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1371,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1375,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1377,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1381,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1383,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1388,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1391,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1394,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1397,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1398,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1399,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1366
    functionDepth: 1
    functionLinenumber: 1366
    functionLinenumberEnd: 1401
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::PathExists
    - FilePath::Append
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryWithTrailingSeparators)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1407,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1408,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: SetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1409,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1410,1
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1411,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1418,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    - Dst: butil::SetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1421,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1423
      start: 1404
    functionDepth: 1
    functionLinenumber: 1404
    functionLinenumberEnd: 1423
    functionName: butil::SetReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 6
    functionsReached:
    - ASSERT_TRUE
    - GetFileAttributes
    - SetFileAttributes
    - butil::value
    - win::GetVersion
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::SetPosixFilePermissions
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void SetReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetFileAttributes
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: butil::value
      Src: /src/brpc/test/file_util_unittest.cc:1427,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/file_util_unittest.cc:1428,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    - Dst: butil::GetPosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:1432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1425
    functionDepth: 1
    functionLinenumber: 1425
    functionLinenumberEnd: 1435
    functionName: butil::IsReadOnly
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 6
    functionsReached:
    - EXPECT_TRUE
    - GetFileAttributes
    - butil::value
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    linkageType: ''
    returnType: bool
    signature: bool IsReadOnly(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1439,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1441,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1444,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1445,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1446,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1447,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1450,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1451,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1437
    functionDepth: 2
    functionLinenumber: 1437
    functionLinenumberEnd: 1455
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CopyDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - butil::SetReadOnly
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyDirectoryACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1460,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1461,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1462,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1466,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1469,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1473,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1477,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1478,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1479,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: butil::internal::CopyFileUnsafe
      Src: /src/brpc/test/file_util_unittest.cc:1480,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1483,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1484,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1487,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1488,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1489,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1490,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1491,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1457
    functionDepth: 2
    functionLinenumber: 1457
    functionLinenumberEnd: 1493
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - FilePath::DirName
    - butil::internal::CopyFileUnsafe
    - butil::PathExists
    - FilePath::Append
    - FilePath::AppendASCII
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1499,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1501,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1504,1
    - Dst: butil::SetReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1505,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1506,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1509,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: butil::CopyFile
      Src: /src/brpc/test/file_util_unittest.cc:1510,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1511,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    - Dst: butil::IsReadOnly
      Src: /src/brpc/test/file_util_unittest.cc:1513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1514
      start: 1495
    functionDepth: 2
    functionLinenumber: 1495
    functionLinenumberEnd: 1514
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CopyFile
    - ASSERT_TRUE
    - butil::path
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - butil::IsReadOnly
    - ASSERT_FALSE
    - butil::SetReadOnly
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyFileACL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1523,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1524,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1525,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1528,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1530,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1532,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1534,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1536,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1538,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1540,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1542,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1544,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1546,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1548,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1550,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1553,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1554,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1555,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1556,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1557,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1558,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1559,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1560,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1561,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1563,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    - Dst: butil::ContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1565
      start: 1521
    functionDepth: 1
    functionLinenumber: 1521
    functionLinenumberEnd: 1565
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::ContentsEqual
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, ContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:1571,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:1572,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1573,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1576,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1578,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1580,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1582,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1584,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1586,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1588,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1590,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1592,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1594,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1596,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1598,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1600,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1602,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1603,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1604,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1605,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1606,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1607,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1608,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1609,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1610,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    - Dst: butil::TextContentsEqual
      Src: /src/brpc/test/file_util_unittest.cc:1611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1612
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1612
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::TextContentsEqual
    - FILE_PATH_LITERAL
    - FilePath::Append
    - butil::PathExists
    - FilePath::AppendASCII
    - EXPECT_FALSE
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ReadOnlyFileUtilTest, TextContentsEqual)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1620,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1622,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1626,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1627,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1628,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1631,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1632,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1634,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1636,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: internal::CopyAndDeleteDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1638,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1642,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1643,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1644,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1646
      start: 1617
    functionDepth: 1
    functionLinenumber: 1617
    functionLinenumberEnd: 1646
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CreateDirectory
    - butil::path
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - ASSERT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - FilePath::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CopyAndDeleteDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1649,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: ::_tdupenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1656,1
    - Dst: arraysize
      Src: /src/brpc/test/file_util_unittest.cc:1659,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1661,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1662,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1663,1
    - Dst: FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:1664,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1669,1
    - Dst: free
      Src: /src/brpc/test/file_util_unittest.cc:1670,1
    - Dst: ::_tputenv_s
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    - Dst: _T
      Src: /src/brpc/test/file_util_unittest.cc:1672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1648
    functionDepth: 1
    functionLinenumber: 1648
    functionLinenumberEnd: 1674
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::IsAbsolute
    - butil::GetTempDir
    - free
    - FilePath::value
    - arraysize
    - ::_tputenv_s
    - ::_tdupenv_s
    - _T
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: butil::CreateTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1680,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1681,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1682,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1685,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1687,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1688
      start: 1677
    functionDepth: 1
    functionLinenumber: 1677
    functionLinenumberEnd: 1688
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CreateTemporaryFile
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenTemporaryFile
      Src: /src/brpc/test/file_util_unittest.cc:1697,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1698,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1699,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1704,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1709,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1710,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1712
      start: 1690
    functionDepth: 1
    functionLinenumber: 1690
    functionLinenumberEnd: 1712
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::CreateAndOpenTemporaryFile
    - butil::DeleteFile
    - EXPECT_FALSE
    - butil::PathExists
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateAndOpenTemporaryFileTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1716,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1717,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1719,1
    - Dst: butil::File
      Src: /src/brpc/test/file_util_unittest.cc:1720,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1721,1
    - Dst: butil::FileToFILE
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: File::Pass
      Src: /src/brpc/test/file_util_unittest.cc:1723,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1724,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1725,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    - Dst: butil::CloseFile
      Src: /src/brpc/test/file_util_unittest.cc:1726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1714
    functionDepth: 1
    functionLinenumber: 1714
    functionLinenumberEnd: 1727
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::FileToFILE
    - FPL
    - butil::File
    - File::Pass
    - File::IsValid
    - EXPECT_FALSE
    - butil::CloseFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileToFILE)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: butil::CreateNewTempDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: FilePath::StringType
      Src: /src/brpc/test/file_util_unittest.cc:1731,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1732,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1733,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1734
      start: 1729
    functionDepth: 1
    functionLinenumber: 1729
    functionLinenumberEnd: 1734
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DeleteFile
    - butil::CreateNewTempDirectory
    - butil::PathExists
    - FilePath::StringType
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTempDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::CreateTemporaryDirInDir
      Src: /src/brpc/test/file_util_unittest.cc:1738,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1739,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1740,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1742,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1743,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1745
      start: 1736
    functionDepth: 1
    functionLinenumber: 1736
    functionLinenumberEnd: 1745
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - EXPECT_TRUE
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateNewTemporaryDirInDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: butil::GetShmemTempDir
      Src: /src/brpc/test/file_util_unittest.cc:1750,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1751,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1752
      start: 1748
    functionDepth: 1
    functionLinenumber: 1748
    functionLinenumberEnd: 1752
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::GetShmemTempDir
    - EXPECT_TRUE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetShmemTempDirTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetHomeDir
      Src: /src/brpc/test/file_util_unittest.cc:1760,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: FilePath::empty
      Src: /src/brpc/test/file_util_unittest.cc:1761,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    - Dst: FilePath::IsAbsolute
      Src: /src/brpc/test/file_util_unittest.cc:1762,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1764
      start: 1755
    functionDepth: 1
    functionLinenumber: 1755
    functionLinenumberEnd: 1764
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - FilePath::empty
    - butil::GetHomeDir
    - FilePath::IsAbsolute
    - ASSERT_TRUE
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, GetHomeDirTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1768,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1771,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1774,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1777,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1778,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1779,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1781,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1784,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1785,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1786,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1787,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1788,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1790,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1791,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1792,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1797,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1799,1
    - Dst: FilePath::DirName
      Src: /src/brpc/test/file_util_unittest.cc:1800,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1802,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1806,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/file_util_unittest.cc:1807,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1808,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1811,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1813,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1814,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1815,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1818
      start: 1766
    functionDepth: 1
    functionLinenumber: 1766
    functionLinenumberEnd: 1818
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_TRUE
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - FilePath::DirName
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::FilePath
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1823,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1824,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1825,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1826,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1827,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1830,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1831,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1832,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1833,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/test/file_util_unittest.cc:1834,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1835,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1838
      start: 1820
    functionDepth: 1
    functionLinenumber: 1820
    functionLinenumberEnd: 1838
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FILE_PATH_LITERAL
    - butil::CreateTextFile
    - FilePath::Append
    - butil::DeleteFile
    - butil::PathExists
    - EXPECT_FALSE
    - butil::DirectoryExists
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, DetectDirectoryTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1842,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1843,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1844,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1847,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1849,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1850,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1851,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1854,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1855,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1856,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1857,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1858,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1859,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1862,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1863,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1864,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1865,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1866,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1867,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1868,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1869,1
    - Dst: butil::CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: std::wstring
      Src: /src/brpc/test/file_util_unittest.cc:1870,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1871,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1874,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1876,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1877,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1878,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1879,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1880,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1883,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1885,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1886,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1887,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1888,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1892,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1894,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1895,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1896,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1899,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1903,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1904,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1905,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1906,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1909,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1911,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1912,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1913,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1914,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1915,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1916,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1918,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1921,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1923,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1924,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1925,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1927,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1932,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1933,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1934,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1935,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1936,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1937,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: ReparsePoint::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:1943,1
    - Dst: win::GetVersion
      Src: /src/brpc/test/file_util_unittest.cc:1945,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1951,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1952,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1953,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: FPL
      Src: /src/brpc/test/file_util_unittest.cc:1954,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1955,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1959,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1961,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1962,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1963,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1964,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1965,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1968,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1970,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1972,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1973,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1974,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1975,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: FindResultCollector::HasFile
      Src: /src/brpc/test/file_util_unittest.cc:1976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: FindResultCollector::size
      Src: /src/brpc/test/file_util_unittest.cc:1977,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1983,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/test/file_util_unittest.cc:1984,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 69
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1840
    functionDepth: 1
    functionLinenumber: 1840
    functionLinenumberEnd: 1986
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - butil::CreateDirectory
    - FindResultCollector::size
    - std::wstring
    - win::GetVersion
    - FileEnumerator::Next
    - butil::CreateTextFile
    - FPL
    - ReparsePoint::IsValid
    - EXPECT_FALSE
    - FilePath::Append
    - EXPECT_EQ
    - FindResultCollector::HasFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, FileEnumeratorTest)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:1990,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:1994,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:1996,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:1999,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2000,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2002,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2003,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2006,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2007,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2008,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2009,1
    - Dst: butil::AppendToFile
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2010,1
    - Dst: butil::ReadTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2012,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2013,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2014
      start: 1988
    functionDepth: 2
    functionLinenumber: 1988
    functionLinenumberEnd: 2014
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::ReadTextFile
    - FILE_PATH_LITERAL
    - butil::DeleteFile
    - butil::AppendToFile
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, AppendToFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2022,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::data
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2023,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2026,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2027,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2028,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2031,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2032,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2033,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2034,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string::begin
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2035,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2036,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2039,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2040,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2041,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: std::vector::end
      Src: /src/brpc/test/file_util_unittest.cc:2042,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2045,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2046,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2047,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::string
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2048,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: std::string::size
      Src: /src/brpc/test/file_util_unittest.cc:2049,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2053,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2054,1
    - Dst: butil::ReadFile
      Src: /src/brpc/test/file_util_unittest.cc:2055,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    - Dst: std::vector::size
      Src: /src/brpc/test/file_util_unittest.cc:2057,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2016
    functionDepth: 1
    functionLinenumber: 2016
    functionLinenumberEnd: 2058
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::path
    - butil::WriteFile
    - std::string
    - std::vector::end
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - std::string::data
    - std::vector::begin
    - std::vector::size
    - static_cast<int>
    - butil::ReadFile
    - std::string::begin
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2065,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2067,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2068,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2072,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2074,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2075,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2078,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2079,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2082,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2083,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2085,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2086,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2087,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2089,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2090,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2091,1
    - Dst: std::string::clear
      Src: /src/brpc/test/file_util_unittest.cc:2093,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2094,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2095,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2097,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2099,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2102,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2106,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2110,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/test/file_util_unittest.cc:2113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2115
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::path
    - ASSERT_EQ
    - butil::WriteFile
    - butil::ReadFileToString
    - FILE_PATH_LITERAL
    - std::string::clear
    - butil::DeleteFile
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ReadFileToString)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2119,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/file_util_unittest.cc:2123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2125,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2129,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2134,1
    - Dst: butil::FromUTCExploded
      Src: /src/brpc/test/file_util_unittest.cc:2139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: butil::TouchFile
      Src: /src/brpc/test/file_util_unittest.cc:2141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: butil::GetFileInfo
      Src: /src/brpc/test/file_util_unittest.cc:2143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2144,1
    - Dst: File::Info::last_accessed::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: auto::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2146,1
    - Dst: File::Info::last_modified::ToInternalValue
      Src: /src/brpc/test/file_util_unittest.cc:2147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2148
      start: 2117
    functionDepth: 1
    functionLinenumber: 2117
    functionLinenumberEnd: 2148
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - butil::WriteFile
    - std::string::c_str
    - butil::GetFileInfo
    - FILE_PATH_LITERAL
    - butil::TouchFile
    - butil::DeleteFile
    - butil::FromUTCExploded
    - File::Info::last_accessed::ToInternalValue
    - File::Info::last_modified::ToInternalValue
    - auto::ToInternalValue
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, TouchFile)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2151,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2155,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2157,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: std::string::length
      Src: /src/brpc/test/file_util_unittest.cc:2161,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    - Dst: butil::IsDirectoryEmpty
      Src: /src/brpc/test/file_util_unittest.cc:2163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2150
    functionDepth: 1
    functionLinenumber: 2150
    functionLinenumberEnd: 2164
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::WriteFile
    - std::string::c_str
    - butil::IsDirectoryEmpty
    - FILE_PATH_LITERAL
    - ASSERT_FALSE
    - butil::PathExists
    - FilePath::Append
    - std::string::length
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, IsDirectoryEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/file_util_unittest.cc:2179,1
    - Dst: path
      Src: /src/brpc/test/file_util_unittest.cc:2186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2187,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2190,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2192,1
    - Dst: CreateTextFile
      Src: /src/brpc/test/file_util_unittest.cc:2193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: stat
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: value
      Src: /src/brpc/test/file_util_unittest.cc:2197,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2199,1
    - Dst: insert
      Src: /src/brpc/test/file_util_unittest.cc:2200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: geteuid
      Src: /src/brpc/test/file_util_unittest.cc:2202,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2215,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2216,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2218,1
    - Dst: ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2221
      start: 2178
    functionDepth: 1
    functionLinenumber: 2178
    functionLinenumberEnd: 2221
    functionName: butil::VerifyPathControlledByUserTest::OVERRIDE
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - value
    - geteuid
    - StreamingRpcTest::SetUp
    - path
    - ChangePosixFilePermissions
    - insert
    - CreateDirectory
    - stat
    - AppendASCII
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileUtilTest::TearDown
      Src: /src/brpc/test/file_util_unittest.cc:2224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2225
      start: 2223
    functionDepth: 2
    functionLinenumber: 2223
    functionLinenumberEnd: 2225
    functionName: butil::VerifyPathControlledByUserTest::TearDown
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::FileUtilTest::TearDown
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2239,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2242,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2243,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2247,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2248,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2253,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2254,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2258,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2261
      start: 2237
    functionDepth: 1
    functionLinenumber: 2237
    functionLinenumberEnd: 2261
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - AppendASCII
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, BadPaths)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2271,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2272,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2274,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2275,1
    - Dst: AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: butil::CreateSymbolicLink
      Src: /src/brpc/test/file_util_unittest.cc:2280,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2286,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2287,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2290,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2291,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2295,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2298
      start: 2263
    functionDepth: 1
    functionLinenumber: 2263
    functionLinenumberEnd: 2298
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::CreateSymbolicLink
    - EXPECT_FALSE
    - FilePath::AppendASCII
    - butil::PathExists
    - AppendASCII
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, Symlinks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2305,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2306,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2307,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2308,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2309,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2310,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2313,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2316,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2319,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2320,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2324,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2327,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2330,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2331,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2335,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2338,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2341,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2344
      start: 2300
    functionDepth: 2
    functionLinenumber: 2300
    functionLinenumberEnd: 2344
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, OwnershipChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2348,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2349,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2350,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2351,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2352,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2353,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2356,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2357,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2359,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2360,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2362,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2363,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2366,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2369,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2370,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2372,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2379,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2380,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2382,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2383,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2385,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2386,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2391,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2392,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2393,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2394,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2395,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2396,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2399,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2400,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2402,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2403,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2405,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2406,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2409,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2410,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2412,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2413,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2415,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2416,1
    - Dst: std::set_union
      Src: /src/brpc/test/file_util_unittest.cc:2423,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2424,1
    - Dst: begin
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: end
      Src: /src/brpc/test/file_util_unittest.cc:2425,1
    - Dst: std::inserter
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: std::set::begin
      Src: /src/brpc/test/file_util_unittest.cc:2426,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2428,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2429,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2431,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2432,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2434,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2437
      start: 2346
    functionDepth: 2
    functionLinenumber: 2346
    functionLinenumberEnd: 2437
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - end
    - std::set::begin
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - begin
    - std::inserter
    - ASSERT_NO_FATAL_FAILURE
    - std::set_union
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, GroupWriteTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2441,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2442,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2443,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2444,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2445,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2446,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2449,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2450,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2452,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2453,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2455,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2456,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2460,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2461,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2462,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2463,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2465,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2468,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2469,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2473,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2474,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2475,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2476,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2478,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2479,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2481,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2482,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2486,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2487,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2488,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2489,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2491,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2492,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2494,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2495,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2499,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2500,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2501,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2502,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2504,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2505,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2507,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2508,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2512,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2513,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2514,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2515,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2517,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2518,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2520,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2521,1
    - Dst: ASSERT_NO_FATAL_FAILURE
      Src: /src/brpc/test/file_util_unittest.cc:2526,1
    - Dst: butil::ChangePosixFilePermissions
      Src: /src/brpc/test/file_util_unittest.cc:2527,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2528,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2531,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2534,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/test/file_util_unittest.cc:2535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2537
      start: 2439
    functionDepth: 2
    functionLinenumber: 2439
    functionLinenumberEnd: 2537
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::VerifyPathControlledByUser
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    - ASSERT_NO_FATAL_FAILURE
    linkageType: ''
    returnType: void
    signature: void TEST_F(VerifyPathControlledByUserTest, WriteBitChecks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2540,1
    - Dst: butil::path
      Src: /src/brpc/test/file_util_unittest.cc:2541,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/test/file_util_unittest.cc:2542,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    - Dst: butil::CreateDirectory
      Src: /src/brpc/test/file_util_unittest.cc:2544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2545
      start: 2539
    functionDepth: 1
    functionLinenumber: 2539
    functionLinenumberEnd: 2545
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::path
    - butil::CreateDirectory
    - ASSERT_FALSE
    - butil::FilePath::value
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, CreateDirectoryParentsNotExist)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/file_util_unittest.cc:2551,1
    - Dst: FilePath::AppendASCII
      Src: /src/brpc/test/file_util_unittest.cc:2552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2553,1
    - Dst: FilePath::Append
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/test/file_util_unittest.cc:2554,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2556,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/file_util_unittest.cc:2557,1
    - Dst: file_util::InsertImageIntoMediaStore
      Src: /src/brpc/test/file_util_unittest.cc:2561,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2562,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2563,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2567,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2568,1
    - Dst: char::char
      Src: /src/brpc/test/file_util_unittest.cc:2571,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2572,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2573,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    - Dst: File::ReadAtCurrentPos
      Src: /src/brpc/test/file_util_unittest.cc:2574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2576
      start: 2548
    functionDepth: 1
    functionLinenumber: 2548
    functionLinenumberEnd: 2576
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - file_util::InsertImageIntoMediaStore
    - char::char
    - OpenContentUriForRead
    - File::ReadAtCurrentPos
    - FILE_PATH_LITERAL
    - EXPECT_EQ
    - FilePath::Append
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - FilePath::AppendASCII
    - butil::GetFileSize
    - EXPECT_LT
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, ValidContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: FilePath::IsContentUri
      Src: /src/brpc/test/file_util_unittest.cc:2580,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: butil::PathExists
      Src: /src/brpc/test/file_util_unittest.cc:2581,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: butil::GetFileSize
      Src: /src/brpc/test/file_util_unittest.cc:2584,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/test/file_util_unittest.cc:2587,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    - Dst: File::IsValid
      Src: /src/brpc/test/file_util_unittest.cc:2588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2589
      start: 2578
    functionDepth: 1
    functionLinenumber: 2578
    functionLinenumberEnd: 2589
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - OpenContentUriForRead
    - FilePath::IsContentUri
    - File::IsValid
    - butil::PathExists
    - EXPECT_FALSE
    - butil::GetFileSize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileUtilTest, NonExistentContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2595,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2602,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2603,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: fcntl
      Src: /src/brpc/test/file_util_unittest.cc:2606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    - Dst: read
      Src: /src/brpc/test/file_util_unittest.cc:2608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2609
      start: 2592
    functionDepth: 0
    functionLinenumber: 2592
    functionLinenumberEnd: 2609
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - fcntl
    - read
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDDoesClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2614
      start: 2612
    functionDepth: 0
    functionLinenumber: 2612
    functionLinenumberEnd: 2614
    functionName: butil::CloseWithScopedFD
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CloseWithScopedFD(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: pipe
      Src: /src/brpc/test/file_util_unittest.cc:2619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: close
      Src: /src/brpc/test/file_util_unittest.cc:2621,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    - Dst: butil::CloseWithScopedFD
      Src: /src/brpc/test/file_util_unittest.cc:2625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2627
      start: 2617
    functionDepth: 1
    functionLinenumber: 2617
    functionLinenumberEnd: 2627
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_util_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pipe
    - IGNORE_EINTR
    - EXPECT_DEATH
    - butil::CloseWithScopedFD
    - close
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedFD, ScopedFDCrashesOnCloseFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:29,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:30,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: main
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::Mutex*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:39,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:40,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:40,1
    - Dst: auto::lock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:41,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:42,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:42,1
    - Dst: auto::unlock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: butex_wake_func
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::unlock
    - bthread_self_tag
    - push_back
    - static_cast<bthread::Mutex*>
    - auto::lock
    linkageType: ''
    returnType: void
    signature: void * butex_wake_func(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::Mutex::lock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:49,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:53,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:54,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 57
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::Mutex::unlock
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - bthread::Mutex::lock
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadButexMultiTest, butex_wake)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexWakeAllArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:68,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:71,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:71,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:72,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:73,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:74,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 76
    functionName: butex_wake_all_func1
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - static_cast<ButexWakeAllArgs*>
    - bthread_self_tag
    - auto::wait
    - push_back
    linkageType: ''
    returnType: void
    signature: void * butex_wake_all_func1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexWakeAllArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:79,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:82,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:82,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:83,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:84,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:85,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 87
    functionName: butex_wake_all_func2
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - static_cast<ButexWakeAllArgs*>
    - bthread_self_tag
    - auto::wait
    - push_back
    linkageType: ''
    returnType: void
    signature: void * butex_wake_all_func2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:96,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:99,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:100,1
    - Dst: bthread::CountdownEvent::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:101,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:102,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 106
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::CountdownEvent::wait
    - bthread_start_background
    - bthread_join
    - bthread::CountdownEvent::signal
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadButexMultiTest, butex_wake_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexRequeueArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:118,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:122,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:122,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:124,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:125,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:126,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 128
    functionName: butex_requeue_func1
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - bthread_self_tag
    - auto::wait
    - push_back
    - static_cast<ButexRequeueArgs*>
    linkageType: ''
    returnType: void
    signature: void * butex_requeue_func1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexRequeueArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:131,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:135,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:135,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:137,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:138,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:139,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 141
    functionName: butex_requeue_func2
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - bthread_self_tag
    - auto::wait
    - push_back
    - static_cast<ButexRequeueArgs*>
    linkageType: ''
    returnType: void
    signature: void * butex_requeue_func2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:152,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:155,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:156,1
    - Dst: bthread::ConditionVariable::notify_all
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:159,1
    - Dst: bthread::ConditionVariable::notify_all
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:163,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:165,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 169
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::ConditionVariable::notify_all
    - bthread::CountdownEvent::wait
    - bthread_start_background
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadButexMultiTest, butex_requeue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::Mutex*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:39,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:40,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:40,1
    - Dst: auto::lock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:41,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:42,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:42,1
    - Dst: auto::unlock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: butex_wake_func
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::unlock
    - bthread_self_tag
    - push_back
    - static_cast<bthread::Mutex*>
    - auto::lock
    linkageType: ''
    returnType: void
    signature: void * butex_wake_func(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::Mutex::lock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:49,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:53,1
    - Dst: bthread::Mutex::unlock
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:54,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 57
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::Mutex::unlock
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_join
    - bthread::Mutex::lock
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadButexMultiTest, butex_wake)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexWakeAllArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:68,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:71,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:71,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:72,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:73,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:74,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 76
    functionName: butex_wake_all_func1
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - static_cast<ButexWakeAllArgs*>
    - bthread_self_tag
    - auto::wait
    - push_back
    linkageType: ''
    returnType: void
    signature: void * butex_wake_all_func1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexWakeAllArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:79,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:82,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:82,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:83,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:84,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:85,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 87
    functionName: butex_wake_all_func2
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - static_cast<ButexWakeAllArgs*>
    - bthread_self_tag
    - auto::wait
    - push_back
    linkageType: ''
    returnType: void
    signature: void * butex_wake_all_func2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:96,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:99,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:100,1
    - Dst: bthread::CountdownEvent::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:101,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:102,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 106
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::CountdownEvent::wait
    - bthread_start_background
    - bthread_join
    - bthread::CountdownEvent::signal
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadButexMultiTest, butex_wake_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexRequeueArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:118,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:122,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:122,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:124,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:125,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:126,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 128
    functionName: butex_requeue_func1
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - bthread_self_tag
    - auto::wait
    - push_back
    - static_cast<ButexRequeueArgs*>
    linkageType: ''
    returnType: void
    signature: void * butex_requeue_func1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ButexRequeueArgs*>
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:131,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:135,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:135,1
    - Dst: auto::signal
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:137,1
    - Dst: auto::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:138,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:139,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 141
    functionName: butex_requeue_func2
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::signal
    - bthread_self_tag
    - auto::wait
    - push_back
    - static_cast<ButexRequeueArgs*>
    linkageType: ''
    returnType: void
    signature: void * butex_requeue_func2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:152,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:155,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:156,1
    - Dst: bthread::ConditionVariable::notify_all
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:159,1
    - Dst: bthread::ConditionVariable::notify_all
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:163,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:165,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 169
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_butex_multi_tag_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::ConditionVariable::notify_all
    - bthread::CountdownEvent::wait
    - bthread_start_background
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadButexMultiTest, butex_requeue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:17,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:17,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:19,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:20,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:21,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:21,1
    - Dst: WaitableEvent::Reset
      Src: /src/brpc/test/waitable_event_unittest.cc:23,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:24,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:24,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:25,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:25,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:25,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:27,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/waitable_event_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:29,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:29,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 30
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WaitableEvent::Wait
    - WaitableEvent::Reset
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::TimedWait
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    - WaitableEvent::Signal
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, ManualBasics)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:35,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:35,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:37,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:38,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:38,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:39,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:39,1
    - Dst: WaitableEvent::Reset
      Src: /src/brpc/test/waitable_event_unittest.cc:41,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:42,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:42,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:43,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:43,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:43,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:45,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/waitable_event_unittest.cc:46,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:47,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:47,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:47,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:49,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:50,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:50,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 51
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WaitableEvent::Wait
    - WaitableEvent::Reset
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::TimedWait
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    - WaitableEvent::Signal
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, AutoBasics)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WaitableEvent::WaitableEvent
      Src: /src/brpc/test/waitable_event_unittest.cc:56,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:59,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:59,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:62,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:62,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:65,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:65,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:68,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:68,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 72
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - WaitableEvent::WaitableEvent
    - EXPECT_EQ
    - Signal
    - butil::WaitableEvent::WaitMany
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, WaitManyShortcut)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - seconds
    - ev
    argTypes:
    - double
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::WaitableEventSignaler::WaitableEventSignaler
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitableEventSignaler(double seconds, WaitableEvent* ev)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/waitable_event_unittest.cc:82,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/waitable_event_unittest.cc:82,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/waitable_event_unittest.cc:82,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: butil::WaitableEventSignaler::ThreadMain
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - Signal
    - butil::TimeDelta::FromSeconds
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WaitableEvent::WaitableEvent
      Src: /src/brpc/test/waitable_event_unittest.cc:94,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/waitable_event_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:100,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:100,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/waitable_event_unittest.cc:102,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 106
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - WaitableEvent::WaitableEvent
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - EXPECT_EQ
    - butil::WaitableEvent::WaitMany
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, WaitMany)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:17,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:17,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:19,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:20,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:21,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:21,1
    - Dst: WaitableEvent::Reset
      Src: /src/brpc/test/waitable_event_unittest.cc:23,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:24,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:24,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:25,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:25,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:25,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:27,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/waitable_event_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:29,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:29,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 14
    functionDepth: 1
    functionLinenumber: 14
    functionLinenumberEnd: 30
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WaitableEvent::Wait
    - WaitableEvent::Reset
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::TimedWait
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    - WaitableEvent::Signal
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, ManualBasics)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:35,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:35,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:37,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:38,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:38,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:39,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:39,1
    - Dst: WaitableEvent::Reset
      Src: /src/brpc/test/waitable_event_unittest.cc:41,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:42,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/waitable_event_unittest.cc:42,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:43,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:43,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:43,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:45,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/waitable_event_unittest.cc:46,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/waitable_event_unittest.cc:47,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:47,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:47,1
    - Dst: WaitableEvent::Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:49,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/waitable_event_unittest.cc:50,1
    - Dst: WaitableEvent::TimedWait
      Src: /src/brpc/test/waitable_event_unittest.cc:50,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/waitable_event_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 51
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - WaitableEvent::Wait
    - WaitableEvent::Reset
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::TimedWait
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    - WaitableEvent::Signal
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, AutoBasics)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WaitableEvent::WaitableEvent
      Src: /src/brpc/test/waitable_event_unittest.cc:56,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:59,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:59,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:62,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:62,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:65,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:65,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:68,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:68,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 72
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - WaitableEvent::WaitableEvent
    - EXPECT_EQ
    - Signal
    - butil::WaitableEvent::WaitMany
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, WaitManyShortcut)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - seconds
    - ev
    argTypes:
    - double
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::WaitableEventSignaler::WaitableEventSignaler
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitableEventSignaler(double seconds, WaitableEvent* ev)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/waitable_event_unittest.cc:82,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/waitable_event_unittest.cc:82,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/waitable_event_unittest.cc:82,1
    - Dst: Signal
      Src: /src/brpc/test/waitable_event_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: butil::WaitableEventSignaler::ThreadMain
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - Signal
    - butil::TimeDelta::FromSeconds
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WaitableEvent::WaitableEvent
      Src: /src/brpc/test/waitable_event_unittest.cc:94,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/waitable_event_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/waitable_event_unittest.cc:100,1
    - Dst: butil::WaitableEvent::WaitMany
      Src: /src/brpc/test/waitable_event_unittest.cc:100,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/waitable_event_unittest.cc:102,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 106
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/waitable_event_unittest.cc
    functionUses: 0
    functionsReached:
    - WaitableEvent::WaitableEvent
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - EXPECT_EQ
    - butil::WaitableEvent::WaitMany
    linkageType: ''
    returnType: void
    signature: void TEST(WaitableEventTest, WaitMany)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 14
    functionName: butil::Node::Node
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Node(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 16
    functionName: butil::Node::id
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: butil::MultipleInheritanceNodeBase::MultipleInheritanceNodeBase
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNodeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::MultipleInheritanceNode::MultipleInheritanceNode
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: tail
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: end
      Src: /src/brpc/test/linked_list_unittest.cc:41,1
    - Dst: LinkNode*::next
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: LinkNode*::previous
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/linked_list_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: LinkNode*::value
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    - forward
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - end
    - LinkNode*::previous
    - tail
    - LinkNode*::next
    - head
    - LinkNode*::value
    - EXPECT_EQ
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void ExpectListContentsForDirection(const LinkedList<Node>& list,\n
      \ int num_nodes, const int* node_ids, bool forward)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:55,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:56,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:59,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 62
    functionName: butil::ExpectListContents
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - SCOPED_TRACE
    - butil::ExpectListContentsForDirection
    linkageType: ''
    returnType: void
    signature: "void ExpectListContents(const LinkedList<Node>& list,\n                        int
      num_nodes,\n                        const int* node_ids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 2
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:73,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:115,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:116,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:117,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:118,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:159,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:160,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:167,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:168,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:169,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:170,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::RemoveFromList
    - LinkedList::Append
    - LinkedList::end
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemoveFromList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:189,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::InsertBefore
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertBefore)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:226,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - Node::InsertAfter
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertAfter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    - Dst: MultipleInheritanceNode::value
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - MultipleInheritanceNode::value
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, MultipleInheritanceNode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 263
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptyListIsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:269,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 272
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - LinkedList::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NonEmptyListIsNotEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:278,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:279,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 282
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptiedListIsEmptyAgain)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:289,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:290,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 294
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::head
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NodesCanBeReused)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:300,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: Node::next
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    - Dst: Node::previous
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 305
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::next
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    - Node::previous
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemovedNodeHasNullNextPrevious)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 14
    functionName: butil::Node::Node
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Node(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 16
    functionName: butil::Node::id
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: butil::MultipleInheritanceNodeBase::MultipleInheritanceNodeBase
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNodeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::MultipleInheritanceNode::MultipleInheritanceNode
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: tail
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: end
      Src: /src/brpc/test/linked_list_unittest.cc:41,1
    - Dst: LinkNode*::next
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: LinkNode*::previous
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/linked_list_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: LinkNode*::value
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    - forward
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 1
    functionsReached:
    - end
    - LinkNode*::previous
    - tail
    - LinkNode*::next
    - head
    - LinkNode*::value
    - EXPECT_EQ
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void ExpectListContentsForDirection(const LinkedList<Node>& list,\n
      \ int num_nodes, const int* node_ids, bool forward)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:55,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:56,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:59,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 62
    functionName: butil::ExpectListContents
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 5
    functionsReached:
    - SCOPED_TRACE
    - butil::ExpectListContentsForDirection
    linkageType: ''
    returnType: void
    signature: "void ExpectListContents(const LinkedList<Node>& list,\n                        int
      num_nodes,\n                        const int* node_ids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 2
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:73,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:115,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:116,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:117,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:118,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:159,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:160,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:167,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:168,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:169,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:170,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::RemoveFromList
    - LinkedList::Append
    - LinkedList::end
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemoveFromList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:189,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::InsertBefore
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertBefore)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:226,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - Node::InsertAfter
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertAfter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    - Dst: MultipleInheritanceNode::value
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - MultipleInheritanceNode::value
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, MultipleInheritanceNode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 263
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptyListIsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:269,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 272
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - LinkedList::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NonEmptyListIsNotEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:278,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:279,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 282
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptiedListIsEmptyAgain)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:289,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:290,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 294
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::head
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NodesCanBeReused)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:300,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: Node::next
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    - Dst: Node::previous
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 305
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::next
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    - Node::previous
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemovedNodeHasNullNextPrevious)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 14
    functionName: butil::Node::Node
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Node(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 16
    functionName: butil::Node::id
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: butil::MultipleInheritanceNodeBase::MultipleInheritanceNodeBase
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNodeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::MultipleInheritanceNode::MultipleInheritanceNode
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: tail
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: end
      Src: /src/brpc/test/linked_list_unittest.cc:41,1
    - Dst: LinkNode*::next
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: LinkNode*::previous
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/linked_list_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: LinkNode*::value
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    - forward
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 2
    functionsReached:
    - end
    - LinkNode*::previous
    - tail
    - LinkNode*::next
    - head
    - LinkNode*::value
    - EXPECT_EQ
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void ExpectListContentsForDirection(const LinkedList<Node>& list,\n
      \ int num_nodes, const int* node_ids, bool forward)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:55,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:56,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:59,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 62
    functionName: butil::ExpectListContents
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 10
    functionsReached:
    - SCOPED_TRACE
    - butil::ExpectListContentsForDirection
    linkageType: ''
    returnType: void
    signature: "void ExpectListContents(const LinkedList<Node>& list,\n                        int
      num_nodes,\n                        const int* node_ids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 2
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:73,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:115,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:116,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:117,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:118,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:159,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:160,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:167,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:168,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:169,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:170,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::RemoveFromList
    - LinkedList::Append
    - LinkedList::end
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemoveFromList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:189,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::InsertBefore
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertBefore)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:226,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - Node::InsertAfter
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertAfter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    - Dst: MultipleInheritanceNode::value
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - MultipleInheritanceNode::value
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, MultipleInheritanceNode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 263
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptyListIsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:269,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 272
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - LinkedList::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NonEmptyListIsNotEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:278,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:279,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 282
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptiedListIsEmptyAgain)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:289,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:290,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 294
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::head
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NodesCanBeReused)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:300,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: Node::next
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    - Dst: Node::previous
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 305
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::next
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    - Node::previous
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemovedNodeHasNullNextPrevious)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 14
    functionName: butil::Node::Node
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Node(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 16
    functionName: butil::Node::id
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: butil::MultipleInheritanceNodeBase::MultipleInheritanceNodeBase
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNodeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::MultipleInheritanceNode::MultipleInheritanceNode
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultipleInheritanceNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: tail
      Src: /src/brpc/test/linked_list_unittest.cc:40,1
    - Dst: end
      Src: /src/brpc/test/linked_list_unittest.cc:41,1
    - Dst: LinkNode*::next
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: LinkNode*::previous
      Src: /src/brpc/test/linked_list_unittest.cc:42,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/linked_list_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: LinkNode*::value
      Src: /src/brpc/test/linked_list_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    - forward
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 3
    functionsReached:
    - end
    - LinkNode*::previous
    - tail
    - LinkNode*::next
    - head
    - LinkNode*::value
    - EXPECT_EQ
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void ExpectListContentsForDirection(const LinkedList<Node>& list,\n
      \ int num_nodes, const int* node_ids, bool forward)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:55,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:56,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/linked_list_unittest.cc:59,1
    - Dst: butil::ExpectListContentsForDirection
      Src: /src/brpc/test/linked_list_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - ' list'
    - num_nodes
    - node_ids
    argTypes:
    - LinkedList<Node>
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 62
    functionName: butil::ExpectListContents
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 15
    functionsReached:
    - SCOPED_TRACE
    - butil::ExpectListContentsForDirection
    linkageType: ''
    returnType: void
    signature: "void ExpectListContents(const LinkedList<Node>& list,\n                        int
      num_nodes,\n                        const int* node_ids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:67,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 2
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:73,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:79,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:82,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:89,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:92,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:99,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, Append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:115,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:116,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:117,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:118,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:122,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:125,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:132,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:135,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:142,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:145,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:152,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:155,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:159,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:160,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::end
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:164,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:167,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:168,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:169,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:170,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:174,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::RemoveFromList
    - LinkedList::Append
    - LinkedList::end
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemoveFromList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:189,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:193,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:196,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:202,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:205,1
    - Dst: Node::InsertBefore
      Src: /src/brpc/test/linked_list_unittest.cc:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:211,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::InsertBefore
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertBefore)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:226,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:230,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:233,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:239,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:242,1
    - Dst: Node::InsertAfter
      Src: /src/brpc/test/linked_list_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: LinkedList::tail
      Src: /src/brpc/test/linked_list_unittest.cc:248,1
    - Dst: butil::ExpectListContents
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    - Dst: arraysize
      Src: /src/brpc/test/linked_list_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::Append
    - arraysize
    - Node::InsertAfter
    - LinkedList::head
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, InsertAfter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    - Dst: MultipleInheritanceNode::value
      Src: /src/brpc/test/linked_list_unittest.cc:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - MultipleInheritanceNode::value
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, MultipleInheritanceNode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 263
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptyListIsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:269,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 272
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - LinkedList::Append
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NonEmptyListIsNotEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:278,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:279,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    - Dst: LinkedList::empty
      Src: /src/brpc/test/linked_list_unittest.cc:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 282
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::empty
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, EmptiedListIsEmptyAgain)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:289,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:290,1
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    - Dst: LinkedList::head
      Src: /src/brpc/test/linked_list_unittest.cc:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 294
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - LinkedList::head
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, NodesCanBeReused)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LinkedList::Append
      Src: /src/brpc/test/linked_list_unittest.cc:300,1
    - Dst: Node::RemoveFromList
      Src: /src/brpc/test/linked_list_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: Node::next
      Src: /src/brpc/test/linked_list_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    - Dst: Node::previous
      Src: /src/brpc/test/linked_list_unittest.cc:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 305
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - Node::next
    - Node::RemoveFromList
    - LinkedList::Append
    - EXPECT_EQ
    - Node::previous
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedList, RemovedNodeHasNullNextPrevious)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:49,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:51,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:53,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:55,1
    - Dst: std::wostringstream::str
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 57
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - butil::UTF8ToWide
    - butil::WideToUTF8
    - arraysize
    - std::wostringstream::str
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF8AndWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:64,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:65,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 66
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::UTF8ToWide
    - butil::WideToUTF8
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF8AndWideEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:99,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:100,1
    - Dst: strlen
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:109,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:110,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:111,1
    - Dst: static_cast<wchar_t>
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:116,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:117,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 119
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ARRAYSIZE_UNSAFE
    - std::wstring::length
    - butil::UTF8ToWide
    - static_cast<wchar_t>
    - EXPECT_EQ
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF8ToWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:144,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:145,1
    - Dst: wcslen
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 151
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - wcslen
    - arraysize
    - butil::WideToUTF8
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF16ToUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:177,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:178,1
    - Dst: wcslen
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:182,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 184
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - wcslen
    - ARRAYSIZE_UNSAFE
    - butil::WideToUTF8
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF32ToUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:201,1
    - Dst: WriteInto
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:201,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:202,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:202,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:202,1
    - Dst: memcpy
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:204,1
    - Dst: WriteInto
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:204,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:205,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:205,1
    - Dst: std::string::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:205,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:207,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:207,1
    - Dst: butil::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 209
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::length
    - WriteInto
    - butil::WideToUTF8
    - EXPECT_EQ
    - arraysize
    - butil::length
    - std::string::length
    - memcpy
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertMultiString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:49,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:51,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:53,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:55,1
    - Dst: std::wostringstream::str
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 57
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - butil::UTF8ToWide
    - butil::WideToUTF8
    - arraysize
    - std::wostringstream::str
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF8AndWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:64,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:65,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 66
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::UTF8ToWide
    - butil::WideToUTF8
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF8AndWideEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:99,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:100,1
    - Dst: strlen
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:109,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:110,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:111,1
    - Dst: static_cast<wchar_t>
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:116,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:117,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 119
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - ARRAYSIZE_UNSAFE
    - std::wstring::length
    - butil::UTF8ToWide
    - static_cast<wchar_t>
    - EXPECT_EQ
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF8ToWide)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:144,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:145,1
    - Dst: wcslen
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 151
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - wcslen
    - arraysize
    - butil::WideToUTF8
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF16ToUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:177,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:178,1
    - Dst: wcslen
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:182,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 184
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - wcslen
    - ARRAYSIZE_UNSAFE
    - butil::WideToUTF8
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertUTF32ToUTF8)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:201,1
    - Dst: WriteInto
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:201,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:202,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:202,1
    - Dst: std::wstring::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:202,1
    - Dst: memcpy
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:204,1
    - Dst: WriteInto
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:204,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:205,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:205,1
    - Dst: std::string::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:205,1
    - Dst: butil::WideToUTF8
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:207,1
    - Dst: arraysize
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:207,1
    - Dst: butil::length
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/utf_string_conversions_unittest.cc:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 209
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/utf_string_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::length
    - WriteInto
    - butil::WideToUTF8
    - EXPECT_EQ
    - arraysize
    - butil::length
    - std::string::length
    - memcpy
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertMultiString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:38,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_redis_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:49,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:52,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:54,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_redis_unittest.cpp:56,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:56,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 60
    functionName: RemoveRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - snprintf
    - system
    - CHECK
    - usleep
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveRedisServer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:67,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:68,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:69,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:75,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:76,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:80,1
    - Dst: fork
      Src: /src/brpc/test/brpc_redis_unittest.cpp:82,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:84,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:85,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:87,1
    - Dst: unlink
      Src: /src/brpc/test/brpc_redis_unittest.cpp:91,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_redis_unittest.cpp:92,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:93,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:94,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:98,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 99
    functionName: RunRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - exit
    - system
    - fork
    - execvp
    - usleep
    - puts
    - atexit
    - unlink
    linkageType: ''
    returnType: void
    signature: void RunRedisServer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: RedisTest::RedisTest
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_redis_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: RedisTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: RedisTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:115,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:115,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:115,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:118,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:118,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:118,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:119,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:120,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:125,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:125,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:125,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:133,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:133,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:133,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 2
    argNames:
    - ' reply1'
    - ' reply2'
    argTypes:
    - brpc::RedisReply
    - brpc::RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 140
    functionName: AssertReplyEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - integer
    - ASSERT_EQ
    - type
    - ASSERT_STREQ
    - AssertReplyEqual
    - CHECK_EQ
    - c_str
    - error_message
    - data
    - ASSERT_NE
    - size
    linkageType: ''
    returnType: void
    signature: "void AssertReplyEqual(const brpc::RedisReply& reply1,\n                      const
      brpc::RedisReply& reply2)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:151,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - brpc::RedisResponse
    - brpc::RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 156
    functionName: AssertResponseEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - AssertReplyEqual
    - reply_size
    - reply
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: "void AssertResponseEqual(const brpc::RedisResponse& r1,\n                         const
      brpc::RedisResponse& r2,\n                         int repeated_times = 1)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:160,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:163,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:166,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:166,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:167,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:171,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:171,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:172,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:173,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:174,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:175,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:175,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:178,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:179,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:180,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:181,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:182,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:184,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:185,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:186,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:186,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:188,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:192,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:193,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:194,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:195,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:196,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:196,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:198,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:200,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:201,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:202,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:203,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:203,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:204,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:205,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:206,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:206,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:208,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:209,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:210,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:212,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:213,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:214,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:215,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:216,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:216,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:218,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:220,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:222,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:223,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:224,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:225,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:225,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:227,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:228,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:229,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:231,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:233,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:234,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 235
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - puts
    - brpc::RedisResponse::Clear
    - brpc::Controller::ErrorText
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:239,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:242,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:245,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:245,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:246,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:247,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:250,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:251,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:253,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:253,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:254,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:254,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:255,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:256,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:256,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:257,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:257,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:258,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:258,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:259,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:259,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:261,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:263,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:264,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:265,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:266,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:267,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:268,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:276,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:277,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:277,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:280,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:281,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 237
    functionDepth: 3
    functionLinenumber: 237
    functionLinenumberEnd: 283
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::RedisResponse::MergeFrom
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - puts
    - brpc::RedisResponse::Clear
    - brpc::Controller::ErrorText
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - AssertResponseEqual
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, keys_with_spaces)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:287,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:290,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:293,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:293,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:294,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:295,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:296,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:298,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:299,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:300,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:301,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:302,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:303,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:303,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:304,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:305,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:306,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:307,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:308,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:309,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:310,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:311,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:312,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:312,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:315,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:316,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:317,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 285
    functionDepth: 3
    functionLinenumber: 285
    functionLinenumberEnd: 318
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::RedisResponse::MergeFrom
    - AssertResponseEqual
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - ASSERT_FALSE
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, incr_and_decr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:322,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:325,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:328,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:328,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:329,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:330,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:331,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:338,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:338,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:339,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:339,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:340,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:340,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:341,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:341,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:343,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:345,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:346,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:347,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:348,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:349,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:350,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:351,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:352,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:353,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:353,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:356,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:357,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:358,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 359
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::RedisResponse::MergeFrom
    - AssertResponseEqual
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - ASSERT_FALSE
    - arraysize
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - brpc::RedisRequest::AddCommandByComponents
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, by_components)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_redis_unittest.cpp:363,1
    - Dst: std::string::capacity
      Src: /src/brpc/test/brpc_redis_unittest.cpp:364,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 368
    functionName: GeneratePassword
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand_in
    - std::string::push_back
    - std::string::reserve
    - std::string::capacity
    linkageType: ''
    returnType: std::string
    signature: std::string GeneratePassword()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:372,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:376,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:377,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_redis_unittest.cpp:378,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:382,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:385,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:385,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:386,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:387,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:388,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:390,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:390,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:391,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:391,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:392,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:392,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:393,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:395,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:396,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:396,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:397,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:398,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:398,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:399,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:400,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:400,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:402,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:402,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:403,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:404,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:405,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:405,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:405,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:410,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:413,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:413,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:414,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:415,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:416,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:418,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:419,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:422,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:422,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:428,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:430,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:432,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:434,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:434,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:435,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:437,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:439,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:440,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:440,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:442,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:443,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:443,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:444,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:445,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:445,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:447,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:447,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:453,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:460,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:461,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:464,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:465,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:466,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:466,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:467,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:468,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:468,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:468,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 370
    functionDepth: 2
    functionLinenumber: 370
    functionLinenumberEnd: 471
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - std::string::c_str
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - puts
    - LOG
    - brpc::Controller::ErrorText
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, auth)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:475,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:478,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:480,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:481,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:483,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:486,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:487,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:488,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:490,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:491,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:492,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:493,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:495,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:496,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:497,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:498,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:500,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:501,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:501,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:502,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:504,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:505,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:505,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:506,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:508,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:509,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:509,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:510,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:512,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:513,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:513,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:514,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 473
    functionDepth: 1
    functionLinenumber: 473
    functionLinenumberEnd: 515
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::_buf::to_string
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, cmd_format)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:519,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:522,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:523,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:524,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:525,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:526,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:528,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:529,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:530,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:531,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:533,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:534,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:535,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:536,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:538,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:539,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:540,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:541,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:543,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:544,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:545,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:546,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:548,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:549,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:550,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:551,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:553,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:554,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:555,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 557
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::_buf::to_string
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, quote_and_escape)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:561,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:563,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' commands'
    argTypes:
    - std::vector<butil::StringPiece>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 568
    functionName: GetCompleteCommand
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - std::string::append
    - std::string::push_back
    - data
    linkageType: ''
    returnType: std::string
    signature: std::string GetCompleteCommand(const std::vector<butil::StringPiece>&
      commands)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:572,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:573,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:575,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: brpc::RedisCommandNoFormat
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:580,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:580,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:582,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:582,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:588,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:593,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:593,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:596,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:597,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:601,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:602,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:602,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:609,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:614,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:614,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:617,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:618,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:622,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:623,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:623,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:629,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:632,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:632,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:633,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:639,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:644,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:644,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:645,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:650,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:650,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:651,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:656,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:656,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:657,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 571
    functionDepth: 2
    functionLinenumber: 571
    functionLinenumberEnd: 659
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::RedisCommandNoFormat
    - std::string::c_str
    - butil::fast_rand_less_than
    - butil::IOBuf::size
    - brpc::RedisCommandParser::Consume
    - GetCompleteCommand
    - butil::Arena::Arena
    - brpc::RedisCommandParser::Reset
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::empty
    - std::string::size
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, command_parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:662,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:666,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:667,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:668,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:669,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:669,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:670,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:671,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:671,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:676,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:677,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:677,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:678,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:678,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:683,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:684,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:685,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:686,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:686,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:687,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:688,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:688,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:692,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:693,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:693,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:694,1
    - Dst: brpc::RedisReply::error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:694,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:699,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:700,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:701,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:702,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:702,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:703,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:704,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:704,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:708,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:709,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:709,1
    - Dst: brpc::RedisReply::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:711,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:712,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:712,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:713,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:714,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:714,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:715,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:715,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:717,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:718,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:718,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:719,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:721,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:721,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:723,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:724,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:724,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:725,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:726,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:726,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:727,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:727,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:730,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:731,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:732,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:732,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:738,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:739,1
    - Dst: brpc::RedisReply::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:744,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:745,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:745,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:746,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:747,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:747,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:750,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:751,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:752,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:752,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: brpc::RedisReply::integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:759,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:760,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:761,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:763,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:764,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:765,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:766,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:767,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:768,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:768,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:770,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:771,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:776,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:776,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:777,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:777,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:778,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:778,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:781,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:781,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:782,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:784,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:784,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:785,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:785,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:786,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:786,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:787,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:787,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:788,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:788,1
    - Dst: brpc::RedisReply::SetNullArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:791,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:793,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:794,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:795,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:795,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:796,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:796,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:802,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:804,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:805,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:806,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:809,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:810,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:810,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:811,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:811,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:813,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:813,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:813,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:818,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:819,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:819,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:821,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:821,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:822,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:823,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:823,1
    - Dst: brpc::RedisReply::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:824,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:825,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:825,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:826,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:827,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:827,1
    - Dst: brpc::RedisReply::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:828,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:829,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:829,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 107
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 831
      start: 661
    functionDepth: 1
    functionLinenumber: 661
    functionLinenumberEnd: 831
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetInteger
    - brpc::RedisReply::is_nil
    - is_array
    - brpc::RedisReply::SetString
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    - brpc::RedisReply::is_array
    - brpc::RedisReply::is_error
    - brpc::RedisReply::error_message
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBufAppender::move_to
    - SetArray
    - is_integer
    - ASSERT_STREQ
    - brpc::RedisReply::CopyFromDifferentArena
    - butil::IOBufAppender::IOBufAppender
    - brpc::RedisReply::SetStatus
    - butil::Arena::Arena
    - brpc::RedisReply::SetNullString
    - size
    - brpc::RedisReply::is_integer
    - brpc::RedisReply::SetInteger
    - brpc::RedisReply::SerializeTo
    - integer
    - is_string
    - brpc::RedisReply::c_str
    - brpc::RedisReply::SetError
    - ASSERT_TRUE
    - brpc::RedisReply::is_string
    - brpc::RedisReply::size
    - brpc::RedisReply::SetNullArray
    - brpc::RedisReply::SetArray
    - is_nil
    - SetString
    - brpc::RedisReply::FormatString
    - c_str
    - brpc::RedisReply::integer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, redis_reply_codec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_redis_unittest.cpp:842,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 842
      start: 840
    functionDepth: 1
    functionLinenumber: 840
    functionLinenumberEnd: 842
    functionName: RedisServiceImpl::RedisServiceImpl
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void RedisServiceImpl(std::string password)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:846,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:855,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:856,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:856,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:858,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:861,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:863,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:865,1
    - Dst: clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:869,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 30
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 874
      start: 844
    functionDepth: 1
    functionLinenumber: 844
    functionLinenumberEnd: 874
    functionName: RedisServiceImpl::OnBatched
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - RedisServiceImpl::DoGet
    - push_back
    - RedisServiceImpl::DoSet
    - empty
    - brpc::RedisReply*::SetArray
    - clear
    - as_string
    - size
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult OnBatched(const std::vector<butil::StringPiece>&
      args,\n                   brpc::RedisReply* output, bool flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - output
    argTypes:
    - std::string
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 876
    functionDepth: 0
    functionLinenumber: 876
    functionLinenumberEnd: 879
    functionName: RedisServiceImpl::DoSet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisReply*::SetStatus
    linkageType: ''
    returnType: void
    signature: void DoSet(const std::string& key, const std::string& value, brpc::RedisReply*
      output)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_unittest.cpp:882,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:883,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:884,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:886,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 881
    functionDepth: 0
    functionLinenumber: 881
    functionLinenumberEnd: 888
    functionName: RedisServiceImpl::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - find
    - end
    - brpc::RedisReply*::SetString
    - brpc::RedisReply*::SetNullString
    linkageType: ''
    returnType: void
    signature: void DoGet(const std::string& key, brpc::RedisReply* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_redis_unittest.cpp:899,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 899
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 899
    functionName: AuthSession::AuthSession
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void AuthSession(std::string password)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 903
      start: 901
    functionDepth: 0
    functionLinenumber: 901
    functionLinenumberEnd: 903
    functionName: AuthSession::Destroy
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 911
      start: 910
    functionDepth: 0
    functionLinenumber: 910
    functionLinenumberEnd: 911
    functionName: AuthCommandHandler::AuthCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AuthCommandHandler(RedisServiceImpl* rs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:917,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:918,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:921,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:921,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:923,1
    - Dst: AuthSession::AuthSession
      Src: /src/brpc/test/brpc_redis_unittest.cpp:926,1
    - Dst: brpc::RedisConnContext*::reset_session
      Src: /src/brpc/test/brpc_redis_unittest.cpp:927,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:928,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 930
      start: 913
    functionDepth: 1
    functionLinenumber: 913
    functionLinenumberEnd: 930
    functionName: AuthCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisConnContext*::reset_session
    - brpc::RedisReply*::SetStatus
    - AuthSession::AuthSession
    - brpc::RedisReply*::SetError
    - data
    - size
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 940
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 940
    functionName: SetCommandHandler::SetCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetCommandHandler(RedisServiceImpl* rs, bool batch_process = false)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:947,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:950,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:952,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:955,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:956,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:960,1
    - Dst: SetCommandHandler::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:962,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:962,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:962,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 942
    functionDepth: 1
    functionLinenumber: 942
    functionLinenumberEnd: 965
    functionName: SetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnBatched
    - brpc::RedisReply*::SetError
    - SetCommandHandler::DoSet
    - static_cast<AuthSession*>
    - as_string
    - size
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:969,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - output
    argTypes:
    - std::string
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 967
    functionDepth: 0
    functionLinenumber: 967
    functionLinenumberEnd: 970
    functionName: SetCommandHandler::DoSet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisReply*::SetStatus
    linkageType: ''
    returnType: void
    signature: void DoSet(const std::string& key, const std::string& value, brpc::RedisReply*
      output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 980
    functionDepth: 0
    functionLinenumber: 980
    functionLinenumberEnd: 982
    functionName: GetCommandHandler::GetCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetCommandHandler(RedisServiceImpl* rs, bool batch_process = false)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:989,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:992,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:994,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:997,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:998,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1002,1
    - Dst: GetCommandHandler::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1004,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1004,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1007
      start: 984
    functionDepth: 1
    functionLinenumber: 984
    functionLinenumberEnd: 1007
    functionName: GetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnBatched
    - brpc::RedisReply*::SetError
    - static_cast<AuthSession*>
    - as_string
    - size
    - GetCommandHandler::DoGet
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1010,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1011,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1012,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1016
      start: 1009
    functionDepth: 0
    functionLinenumber: 1009
    functionLinenumberEnd: 1016
    functionName: GetCommandHandler::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - find
    - end
    - brpc::RedisReply*::SetString
    - brpc::RedisReply*::SetNullString
    linkageType: ''
    returnType: void
    signature: void DoGet(const std::string& key, brpc::RedisReply* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1026
      start: 1025
    functionDepth: 0
    functionLinenumber: 1025
    functionLinenumberEnd: 1026
    functionName: IncrCommandHandler::IncrCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrCommandHandler(RedisServiceImpl* rs)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1033,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1036,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1038,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1041,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1042,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1046,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1047,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1048,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1049,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1051
      start: 1028
    functionDepth: 1
    functionLinenumber: 1028
    functionLinenumberEnd: 1051
    functionName: IncrCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetInteger
    - unlock
    - brpc::RedisReply*::SetError
    - static_cast<AuthSession*>
    - as_string
    - size
    - lock
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1058,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1059,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1060,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1061,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1062,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1063,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1064,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1065,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1066,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1067,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1068,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1072,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1072,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1074,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1076,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1077,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1078,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1078,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1078,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1080,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1081,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1083,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1083,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1084,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1084,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1085,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1085,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1086,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1086,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1087,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1087,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1088,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1088,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1089,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1089,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1090,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1092,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1092,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1094,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1095,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1095,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1096,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1097,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1097,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1098,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1099,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1099,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1100,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1101,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1101,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1102,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1103,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1104,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1104,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1104,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1106,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1107,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1108,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1110,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1111,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1113,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1114,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1116,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1116,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1117,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1118,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1119,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1119,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1120,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1121,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1121,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1122,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1123,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1123,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1124,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1125,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1125,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1126,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1127,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1127,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1128,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1128,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1129,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1130,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1131,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1132,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1133
      start: 1057
    functionDepth: 2
    functionLinenumber: 1057
    functionLinenumberEnd: 1133
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::Controller::Reset
    - GetCommandHandler::GetCommandHandler
    - ASSERT_STREQ
    - ASSERT_FALSE
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - std::string::append
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - ASSERT_NE
    - RedisServiceImpl::RedisServiceImpl
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::Clear
    - IncrCommandHandler::IncrCommandHandler
    - brpc::RedisRequest::Clear
    - SetCommandHandler::SetCommandHandler
    - brpc::RedisRequest::AddCommand
    - brpc::Server::Start
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisRequest::AddCommandByComponents
    - ASSERT_TRUE
    - std::vector::push_back
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Channel*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1136,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1138,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1139,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1140,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1141,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1141,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1142,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1143,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1143,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1144,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1145,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1145,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1148
      start: 1135
    functionDepth: 1
    functionLinenumber: 1135
    functionLinenumberEnd: 1148
    functionName: incr_thread
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - brpc::Channel*::CallMethod
    - EXPECT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::Failed
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - static_cast<brpc::Channel*>
    linkageType: ''
    returnType: void
    signature: void * incr_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1151,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1153,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1154,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1155,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1156,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1157,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1158,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1162,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1164,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1167,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1171,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1175,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1150
    functionDepth: 2
    functionLinenumber: 1150
    functionLinenumberEnd: 1183
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - std::vector::push_back
    - RedisServiceImpl::RedisServiceImpl
    - std::vector::back
    - brpc::Server::listen_address
    - bthread_start_background
    - IncrCommandHandler::IncrCommandHandler
    - bthread_join
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Server::Start
    - GeneratePassword
    - RedisServiceImpl*::AddCommandHandler
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::Channel::Channel
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1187
      start: 1187
    functionDepth: 0
    functionLinenumber: 1187
    functionLinenumberEnd: 1187
    functionName: MultiCommandHandler::MultiCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultiCommandHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1194
      start: 1189
    functionDepth: 0
    functionLinenumber: 1189
    functionLinenumberEnd: 1194
    functionName: MultiCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetStatus
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiTransactionHandler::MultiTransactionHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1196
    functionDepth: 0
    functionLinenumber: 1196
    functionLinenumberEnd: 1198
    functionName: MultiCommandHandler::NewTransactionHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - MultiTransactionHandler::MultiTransactionHandler
    linkageType: ''
    returnType: RedisCommandHandler
    signature: RedisCommandHandler * NewTransactionHandler() override
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1206,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1211,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1214,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1215,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1219,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1220,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1224,1
    - Dst: SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1226,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1229,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1231
      start: 1202
    functionDepth: 1
    functionLinenumber: 1202
    functionLinenumberEnd: 1231
    functionName: MultiCommandHandler::MultiTransactionHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetStatus
    - std::vector::push_back
    - unlock
    - brpc::RedisReply*::SetStatus
    - SetInteger
    - brpc::RedisReply*::SetError
    - push_back
    - brpc::RedisReply*::SetArray
    - as_string
    - size
    - lock
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(const std::vector<butil::StringPiece>&
      args,\n                                            brpc::RedisReply* output,\n
      \                                           bool flush_batched) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1238,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1239,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1240,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1241,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1242,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1242,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1243,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1243,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1244,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1244,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1245,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1245,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1246,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1249,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1249,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1251,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1253,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1257,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1258,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1259,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1260,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1261,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1261,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1262,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1263,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1263,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1268,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1269,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1271,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1272,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1275,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1277,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1277,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1279,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1279,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1280,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1280,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1281,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1281,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1282,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1283,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1285,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1285,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1286,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1286,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1289,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1291,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1291,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1296,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1297,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1298,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1299,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1300,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1301,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1302,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1302,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1303,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1306,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1307,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1307,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1308,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1309,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1309,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1310,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1310,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1237
    functionDepth: 2
    functionLinenumber: 1237
    functionLinenumberEnd: 1312
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - GetCommandHandler::GetCommandHandler
    - ASSERT_STREQ
    - ASSERT_FALSE
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - size
    - integer
    - RedisServiceImpl::RedisServiceImpl
    - brpc::Controller::ErrorText
    - IncrCommandHandler::IncrCommandHandler
    - SetCommandHandler::SetCommandHandler
    - brpc::RedisRequest::AddCommand
    - brpc::Server::Start
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    - MultiCommandHandler::MultiCommandHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_command_continue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1315,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1316,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1317,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1318,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1319,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1320,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1321,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1322,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1323,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1324,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1325,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1328,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1328,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1330,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1332,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1336,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1337,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1339,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1340,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1340,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1341,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1341,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1347,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1348,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1348,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1350,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1351,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1351,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1352,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1352,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1353
      start: 1314
    functionDepth: 2
    functionLinenumber: 1314
    functionLinenumberEnd: 1353
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - GetCommandHandler::GetCommandHandler
    - ASSERT_STREQ
    - ASSERT_FALSE
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - RedisServiceImpl::RedisServiceImpl
    - brpc::Controller::ErrorText
    - SetCommandHandler::SetCommandHandler
    - brpc::RedisRequest::AddCommand
    - brpc::Server::Start
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    - MultiCommandHandler::MultiCommandHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_handle_pipeline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1359,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1364,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1366,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1367,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1368,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1372,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1377,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1379,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1389,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1391,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1392,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1396,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1402,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1403,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1405,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1406,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1407,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1411,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1416,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1417,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1419,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1420,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1424,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1430,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1432,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1436,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1438,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1438,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1439,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1439,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1444,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1445,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1447,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1452,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1453,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1458
      start: 1355
    functionDepth: 1
    functionLinenumber: 1355
    functionLinenumberEnd: 1458
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::RedisReply::is_array
    - brpc::RedisReply::ConsumePartialIOBuf
    - brpc::RedisReply::size
    - ASSERT_STREQ
    - brpc::RedisCommandParser::Consume
    - brpc::RedisCommandParser::RedisCommandParser
    - as_string
    - butil::Arena::Arena
    - std::string::append
    - c_str
    - butil::IOBuf::append
    - std::to_string
    - butil::IOBuf::IOBuf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, memory_allocation_limits)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:49,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:52,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:54,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_redis_unittest.cpp:56,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:56,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 60
    functionName: RemoveRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - snprintf
    - system
    - CHECK
    - usleep
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveRedisServer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:67,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:68,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:69,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:75,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:76,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:80,1
    - Dst: fork
      Src: /src/brpc/test/brpc_redis_unittest.cpp:82,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:84,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:85,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:87,1
    - Dst: unlink
      Src: /src/brpc/test/brpc_redis_unittest.cpp:91,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_redis_unittest.cpp:92,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:93,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:94,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:98,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 99
    functionName: RunRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - exit
    - system
    - fork
    - execvp
    - usleep
    - puts
    - atexit
    - unlink
    linkageType: ''
    returnType: void
    signature: void RunRedisServer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: RedisTest::RedisTest
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_redis_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: RedisTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: RedisTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:115,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:115,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:115,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:118,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:118,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:118,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:119,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:120,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:125,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:125,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:125,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:133,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:133,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:133,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 2
    argNames:
    - ' reply1'
    - ' reply2'
    argTypes:
    - brpc::RedisReply
    - brpc::RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 140
    functionName: AssertReplyEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached:
    - integer
    - ASSERT_EQ
    - type
    - ASSERT_STREQ
    - AssertReplyEqual
    - CHECK_EQ
    - c_str
    - error_message
    - data
    - ASSERT_NE
    - size
    linkageType: ''
    returnType: void
    signature: "void AssertReplyEqual(const brpc::RedisReply& reply1,\n                      const
      brpc::RedisReply& reply2)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:151,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - brpc::RedisResponse
    - brpc::RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 156
    functionName: AssertResponseEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - AssertReplyEqual
    - reply_size
    - reply
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: "void AssertResponseEqual(const brpc::RedisResponse& r1,\n                         const
      brpc::RedisResponse& r2,\n                         int repeated_times = 1)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:160,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:163,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:166,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:166,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:167,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:171,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:171,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:172,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:173,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:174,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:175,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:175,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:178,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:179,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:180,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:181,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:182,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:184,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:185,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:186,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:186,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:188,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:192,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:193,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:194,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:195,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:196,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:196,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:198,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:200,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:201,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:202,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:203,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:203,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:204,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:205,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:206,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:206,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:208,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:209,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:210,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:212,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:213,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:214,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:215,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:216,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:216,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:218,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:220,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:222,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:223,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:224,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:225,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:225,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:227,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:228,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:229,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:231,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:233,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:234,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 235
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - puts
    - brpc::RedisResponse::Clear
    - brpc::Controller::ErrorText
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:239,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:242,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:245,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:245,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:246,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:247,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:250,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:251,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:253,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:253,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:254,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:254,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:255,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:256,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:256,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:257,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:257,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:258,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:258,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:259,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:259,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:261,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:263,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:264,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:265,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:266,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:267,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:268,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:276,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:277,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:277,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:280,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:281,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 237
    functionDepth: 3
    functionLinenumber: 237
    functionLinenumberEnd: 283
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::RedisResponse::MergeFrom
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - puts
    - brpc::RedisResponse::Clear
    - brpc::Controller::ErrorText
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - AssertResponseEqual
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, keys_with_spaces)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:287,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:290,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:293,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:293,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:294,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:295,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:296,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:298,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:299,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:300,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:301,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:302,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:303,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:303,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:304,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:305,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:306,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:307,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:308,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:309,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:310,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:311,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:312,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:312,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:315,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:316,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:317,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 285
    functionDepth: 3
    functionLinenumber: 285
    functionLinenumberEnd: 318
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::RedisResponse::MergeFrom
    - AssertResponseEqual
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - ASSERT_FALSE
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, incr_and_decr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:322,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:325,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:328,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:328,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:329,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:330,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:331,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:338,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:338,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:339,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:339,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:340,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:340,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:341,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:341,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:343,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:345,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:346,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:347,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:348,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:349,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:350,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:351,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:352,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:353,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:353,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:356,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:357,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:358,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 359
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::RedisResponse::MergeFrom
    - AssertResponseEqual
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - ASSERT_FALSE
    - arraysize
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - brpc::RedisRequest::AddCommandByComponents
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, by_components)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_redis_unittest.cpp:363,1
    - Dst: std::string::capacity
      Src: /src/brpc/test/brpc_redis_unittest.cpp:364,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 368
    functionName: GeneratePassword
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 5
    functionsReached:
    - butil::fast_rand_in
    - std::string::push_back
    - std::string::reserve
    - std::string::capacity
    linkageType: ''
    returnType: std::string
    signature: std::string GeneratePassword()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:372,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:376,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:377,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_redis_unittest.cpp:378,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:382,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:385,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:385,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:386,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:387,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:388,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:390,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:390,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:391,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:391,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:392,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:392,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:393,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:395,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:396,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:396,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:397,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:398,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:398,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:399,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:400,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:400,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:402,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:402,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:403,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:404,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:405,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:405,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:405,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:410,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:413,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:413,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:414,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:415,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:416,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:418,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:419,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:422,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:422,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:428,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:430,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:432,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:434,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:434,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:435,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:437,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:439,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:440,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:440,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:442,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:443,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:443,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:444,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:445,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:445,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:447,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:447,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:453,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:460,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:461,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:464,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:465,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:466,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:466,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:467,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:468,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:468,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:468,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 370
    functionDepth: 2
    functionLinenumber: 370
    functionLinenumberEnd: 471
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - std::string::c_str
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - puts
    - LOG
    - brpc::Controller::ErrorText
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, auth)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:475,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:478,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:480,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:481,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:483,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:486,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:487,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:488,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:490,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:491,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:492,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:493,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:495,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:496,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:497,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:498,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:500,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:501,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:501,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:502,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:504,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:505,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:505,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:506,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:508,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:509,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:509,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:510,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:512,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:513,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:513,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:514,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 473
    functionDepth: 1
    functionLinenumber: 473
    functionLinenumberEnd: 515
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::_buf::to_string
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, cmd_format)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:519,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:522,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:523,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:524,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:525,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:526,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:528,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:529,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:530,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:531,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:533,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:534,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:535,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:536,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:538,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:539,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:540,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:541,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:543,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:544,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:545,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:546,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:548,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:549,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:550,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:551,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:553,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:554,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:555,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 517
    functionDepth: 1
    functionLinenumber: 517
    functionLinenumberEnd: 557
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - brpc::RedisRequest::Clear
    - brpc::RedisRequest::AddCommand
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::_buf::to_string
    - puts
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, quote_and_escape)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:561,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:563,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' commands'
    argTypes:
    - std::vector<butil::StringPiece>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 568
    functionName: GetCompleteCommand
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - size
    - std::string::append
    - std::string::push_back
    - data
    linkageType: ''
    returnType: std::string
    signature: std::string GetCompleteCommand(const std::vector<butil::StringPiece>&
      commands)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:572,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:573,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:575,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: brpc::RedisCommandNoFormat
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:580,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:580,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:582,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:582,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:588,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:593,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:593,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:596,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:597,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:601,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:602,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:602,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:609,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:614,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:614,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:617,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:618,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:622,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:623,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:623,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:629,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:632,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:632,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:633,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:639,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:644,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:644,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:645,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:650,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:650,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:651,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:656,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:656,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:657,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 571
    functionDepth: 2
    functionLinenumber: 571
    functionLinenumberEnd: 659
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::RedisCommandNoFormat
    - std::string::c_str
    - butil::fast_rand_less_than
    - butil::IOBuf::size
    - brpc::RedisCommandParser::Consume
    - GetCompleteCommand
    - butil::Arena::Arena
    - brpc::RedisCommandParser::Reset
    - butil::IOBuf::push_back
    - butil::IOBuf::append
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::empty
    - std::string::size
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, command_parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:662,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:666,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:667,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:668,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:669,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:669,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:670,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:671,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:671,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:676,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:677,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:677,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:678,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:678,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:683,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:684,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:685,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:686,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:686,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:687,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:688,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:688,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:692,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:693,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:693,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:694,1
    - Dst: brpc::RedisReply::error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:694,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:699,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:700,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:701,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:702,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:702,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:703,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:704,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:704,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:708,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:709,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:709,1
    - Dst: brpc::RedisReply::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:711,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:712,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:712,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:713,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:714,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:714,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:715,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:715,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:717,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:718,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:718,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:719,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:721,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:721,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:723,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:724,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:724,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:725,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:726,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:726,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:727,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:727,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:730,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:731,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:732,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:732,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:738,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:739,1
    - Dst: brpc::RedisReply::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:744,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:745,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:745,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:746,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:747,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:747,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:750,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:751,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:752,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:752,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: brpc::RedisReply::integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:759,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:760,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:761,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:763,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:764,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:765,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:766,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:767,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:768,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:768,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:770,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:771,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:776,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:776,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:777,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:777,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:778,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:778,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:781,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:781,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:782,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:784,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:784,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:785,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:785,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:786,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:786,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:787,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:787,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:788,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:788,1
    - Dst: brpc::RedisReply::SetNullArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:791,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:793,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:794,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:795,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:795,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:796,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:796,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:802,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:804,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:805,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:806,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:809,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:810,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:810,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:811,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:811,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:813,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:813,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:813,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:818,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:819,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:819,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:821,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:821,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:822,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:823,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:823,1
    - Dst: brpc::RedisReply::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:824,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:825,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:825,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:826,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:827,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:827,1
    - Dst: brpc::RedisReply::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:828,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:829,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:829,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 107
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 831
      start: 661
    functionDepth: 1
    functionLinenumber: 661
    functionLinenumberEnd: 831
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetInteger
    - brpc::RedisReply::is_nil
    - is_array
    - brpc::RedisReply::SetString
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    - brpc::RedisReply::is_array
    - brpc::RedisReply::is_error
    - brpc::RedisReply::error_message
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBufAppender::move_to
    - SetArray
    - is_integer
    - ASSERT_STREQ
    - brpc::RedisReply::CopyFromDifferentArena
    - butil::IOBufAppender::IOBufAppender
    - brpc::RedisReply::SetStatus
    - butil::Arena::Arena
    - brpc::RedisReply::SetNullString
    - size
    - brpc::RedisReply::is_integer
    - brpc::RedisReply::SetInteger
    - brpc::RedisReply::SerializeTo
    - integer
    - is_string
    - brpc::RedisReply::c_str
    - brpc::RedisReply::SetError
    - ASSERT_TRUE
    - brpc::RedisReply::is_string
    - brpc::RedisReply::size
    - brpc::RedisReply::SetNullArray
    - brpc::RedisReply::SetArray
    - is_nil
    - SetString
    - brpc::RedisReply::FormatString
    - c_str
    - brpc::RedisReply::integer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, redis_reply_codec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_redis_unittest.cpp:842,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 842
      start: 840
    functionDepth: 1
    functionLinenumber: 840
    functionLinenumberEnd: 842
    functionName: RedisServiceImpl::RedisServiceImpl
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 4
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void RedisServiceImpl(std::string password)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:846,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:855,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:856,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:856,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:858,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:861,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:863,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:865,1
    - Dst: clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:869,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 30
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 874
      start: 844
    functionDepth: 1
    functionLinenumber: 844
    functionLinenumberEnd: 874
    functionName: RedisServiceImpl::OnBatched
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - RedisServiceImpl::DoGet
    - push_back
    - RedisServiceImpl::DoSet
    - empty
    - brpc::RedisReply*::SetArray
    - clear
    - as_string
    - size
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult OnBatched(const std::vector<butil::StringPiece>&
      args,\n                   brpc::RedisReply* output, bool flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - output
    argTypes:
    - std::string
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 876
    functionDepth: 0
    functionLinenumber: 876
    functionLinenumberEnd: 879
    functionName: RedisServiceImpl::DoSet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisReply*::SetStatus
    linkageType: ''
    returnType: void
    signature: void DoSet(const std::string& key, const std::string& value, brpc::RedisReply*
      output)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_unittest.cpp:882,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:883,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:884,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:886,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 881
    functionDepth: 0
    functionLinenumber: 881
    functionLinenumberEnd: 888
    functionName: RedisServiceImpl::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - find
    - end
    - brpc::RedisReply*::SetString
    - brpc::RedisReply*::SetNullString
    linkageType: ''
    returnType: void
    signature: void DoGet(const std::string& key, brpc::RedisReply* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_redis_unittest.cpp:899,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 899
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 899
    functionName: AuthSession::AuthSession
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void AuthSession(std::string password)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 903
      start: 901
    functionDepth: 0
    functionLinenumber: 901
    functionLinenumberEnd: 903
    functionName: AuthSession::Destroy
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 911
      start: 910
    functionDepth: 0
    functionLinenumber: 910
    functionLinenumberEnd: 911
    functionName: AuthCommandHandler::AuthCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AuthCommandHandler(RedisServiceImpl* rs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:917,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:918,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:921,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:921,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:923,1
    - Dst: AuthSession::AuthSession
      Src: /src/brpc/test/brpc_redis_unittest.cpp:926,1
    - Dst: brpc::RedisConnContext*::reset_session
      Src: /src/brpc/test/brpc_redis_unittest.cpp:927,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:928,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 930
      start: 913
    functionDepth: 1
    functionLinenumber: 913
    functionLinenumberEnd: 930
    functionName: AuthCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisConnContext*::reset_session
    - brpc::RedisReply*::SetStatus
    - AuthSession::AuthSession
    - brpc::RedisReply*::SetError
    - data
    - size
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 940
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 940
    functionName: SetCommandHandler::SetCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetCommandHandler(RedisServiceImpl* rs, bool batch_process = false)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:947,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:950,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:952,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:955,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:956,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:960,1
    - Dst: SetCommandHandler::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:962,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:962,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:962,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 942
    functionDepth: 1
    functionLinenumber: 942
    functionLinenumberEnd: 965
    functionName: SetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnBatched
    - brpc::RedisReply*::SetError
    - SetCommandHandler::DoSet
    - static_cast<AuthSession*>
    - as_string
    - size
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:969,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - output
    argTypes:
    - std::string
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 967
    functionDepth: 0
    functionLinenumber: 967
    functionLinenumberEnd: 970
    functionName: SetCommandHandler::DoSet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisReply*::SetStatus
    linkageType: ''
    returnType: void
    signature: void DoSet(const std::string& key, const std::string& value, brpc::RedisReply*
      output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 980
    functionDepth: 0
    functionLinenumber: 980
    functionLinenumberEnd: 982
    functionName: GetCommandHandler::GetCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetCommandHandler(RedisServiceImpl* rs, bool batch_process = false)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:989,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:992,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:994,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:997,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:998,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1002,1
    - Dst: GetCommandHandler::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1004,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1004,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1007
      start: 984
    functionDepth: 1
    functionLinenumber: 984
    functionLinenumberEnd: 1007
    functionName: GetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnBatched
    - brpc::RedisReply*::SetError
    - static_cast<AuthSession*>
    - as_string
    - size
    - GetCommandHandler::DoGet
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1010,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1011,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1012,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1016
      start: 1009
    functionDepth: 0
    functionLinenumber: 1009
    functionLinenumberEnd: 1016
    functionName: GetCommandHandler::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - find
    - end
    - brpc::RedisReply*::SetString
    - brpc::RedisReply*::SetNullString
    linkageType: ''
    returnType: void
    signature: void DoGet(const std::string& key, brpc::RedisReply* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisServiceImpl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1026
      start: 1025
    functionDepth: 0
    functionLinenumber: 1025
    functionLinenumberEnd: 1026
    functionName: IncrCommandHandler::IncrCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrCommandHandler(RedisServiceImpl* rs)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1033,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1036,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1038,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1041,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1042,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1046,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1047,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1048,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1049,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1051
      start: 1028
    functionDepth: 1
    functionLinenumber: 1028
    functionLinenumberEnd: 1051
    functionName: IncrCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetInteger
    - unlock
    - brpc::RedisReply*::SetError
    - static_cast<AuthSession*>
    - as_string
    - size
    - lock
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(brpc::RedisConnContext* ctx,\n
      \                                       const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1058,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1059,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1060,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1061,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1062,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1063,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1064,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1065,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1066,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1067,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1068,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1072,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1072,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1074,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1076,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1077,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1078,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1078,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1078,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1080,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1081,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1083,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1083,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1084,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1084,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1085,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1085,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1086,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1086,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1087,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1087,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1088,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1088,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1089,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1089,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1090,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1092,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1092,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1094,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1095,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1095,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1096,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1097,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1097,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1098,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1099,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1099,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1100,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1101,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1101,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1102,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1103,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1104,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1104,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1104,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1106,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1107,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1108,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1110,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1111,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1113,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1114,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1116,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1116,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1116,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1117,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1118,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1119,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1119,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1120,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1121,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1121,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1122,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1123,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1123,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1124,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1125,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1125,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1126,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1127,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1127,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1128,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1128,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1129,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1130,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1131,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1132,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1133
      start: 1057
    functionDepth: 2
    functionLinenumber: 1057
    functionLinenumberEnd: 1133
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::Controller::Reset
    - GetCommandHandler::GetCommandHandler
    - ASSERT_STREQ
    - ASSERT_FALSE
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - std::string::append
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - ASSERT_NE
    - RedisServiceImpl::RedisServiceImpl
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::Clear
    - IncrCommandHandler::IncrCommandHandler
    - brpc::RedisRequest::Clear
    - SetCommandHandler::SetCommandHandler
    - brpc::RedisRequest::AddCommand
    - brpc::Server::Start
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisRequest::AddCommandByComponents
    - ASSERT_TRUE
    - std::vector::push_back
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Channel*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1136,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1138,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1139,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1140,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1141,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1141,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1142,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1143,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1143,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1144,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1145,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1145,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1148
      start: 1135
    functionDepth: 1
    functionLinenumber: 1135
    functionLinenumberEnd: 1148
    functionName: incr_thread
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - brpc::Channel*::CallMethod
    - EXPECT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::Failed
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - static_cast<brpc::Channel*>
    linkageType: ''
    returnType: void
    signature: void * incr_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1151,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1153,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1154,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1155,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1156,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1157,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1158,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1162,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1164,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1167,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1171,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1175,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1150
    functionDepth: 2
    functionLinenumber: 1150
    functionLinenumberEnd: 1183
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - std::vector::push_back
    - RedisServiceImpl::RedisServiceImpl
    - std::vector::back
    - brpc::Server::listen_address
    - bthread_start_background
    - IncrCommandHandler::IncrCommandHandler
    - bthread_join
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Server::Start
    - GeneratePassword
    - RedisServiceImpl*::AddCommandHandler
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::Channel::Channel
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1187
      start: 1187
    functionDepth: 0
    functionLinenumber: 1187
    functionLinenumberEnd: 1187
    functionName: MultiCommandHandler::MultiCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MultiCommandHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1194
      start: 1189
    functionDepth: 0
    functionLinenumber: 1189
    functionLinenumberEnd: 1194
    functionName: MultiCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetStatus
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(const std::vector<butil::StringPiece>&
      args,\n                                        brpc::RedisReply* output,\n                                        bool
      flush_batched) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiTransactionHandler::MultiTransactionHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1196
    functionDepth: 0
    functionLinenumber: 1196
    functionLinenumberEnd: 1198
    functionName: MultiCommandHandler::NewTransactionHandler
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - MultiTransactionHandler::MultiTransactionHandler
    linkageType: ''
    returnType: RedisCommandHandler
    signature: RedisCommandHandler * NewTransactionHandler() override
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1206,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1211,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1214,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1215,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1219,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1220,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1224,1
    - Dst: SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1226,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1229,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1231
      start: 1202
    functionDepth: 1
    functionLinenumber: 1202
    functionLinenumberEnd: 1231
    functionName: MultiCommandHandler::MultiTransactionHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetStatus
    - std::vector::push_back
    - unlock
    - brpc::RedisReply*::SetStatus
    - SetInteger
    - brpc::RedisReply*::SetError
    - push_back
    - brpc::RedisReply*::SetArray
    - as_string
    - size
    - lock
    linkageType: ''
    returnType: brpc::RedisCommandHandlerResult
    signature: "brpc::RedisCommandHandlerResult Run(const std::vector<butil::StringPiece>&
      args,\n                                            brpc::RedisReply* output,\n
      \                                           bool flush_batched) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1238,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1239,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1240,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1241,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1242,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1242,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1243,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1243,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1244,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1244,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1245,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1245,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1246,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1249,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1249,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1251,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1253,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1257,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1258,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1259,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1260,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1261,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1261,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1262,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1263,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1263,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1268,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1269,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1271,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1272,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1275,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1277,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1277,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1279,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1279,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1280,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1280,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1281,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1281,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1282,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1283,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1285,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1285,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1286,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1286,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1289,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1291,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1291,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1296,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1297,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1298,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1299,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1300,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1301,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1302,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1302,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1303,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1306,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1307,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1307,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1308,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1309,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1309,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1310,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1310,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1237
    functionDepth: 2
    functionLinenumber: 1237
    functionLinenumberEnd: 1312
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - GetCommandHandler::GetCommandHandler
    - ASSERT_STREQ
    - ASSERT_FALSE
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - size
    - integer
    - RedisServiceImpl::RedisServiceImpl
    - brpc::Controller::ErrorText
    - IncrCommandHandler::IncrCommandHandler
    - SetCommandHandler::SetCommandHandler
    - brpc::RedisRequest::AddCommand
    - brpc::Server::Start
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    - MultiCommandHandler::MultiCommandHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_command_continue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1315,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1316,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1317,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1318,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1319,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1320,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1321,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1322,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1323,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1324,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1325,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1328,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1328,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1330,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1332,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1336,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1337,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1339,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1340,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1340,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1341,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1341,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1347,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1348,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1348,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1350,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1351,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1351,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1352,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1352,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1353
      start: 1314
    functionDepth: 2
    functionLinenumber: 1314
    functionLinenumberEnd: 1353
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - GeneratePassword
    - brpc::ChannelOptions::ChannelOptions
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - GetCommandHandler::GetCommandHandler
    - ASSERT_STREQ
    - ASSERT_FALSE
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::listen_address
    - RedisServiceImpl::RedisServiceImpl
    - brpc::Controller::ErrorText
    - SetCommandHandler::SetCommandHandler
    - brpc::RedisRequest::AddCommand
    - brpc::Server::Start
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::RedisResponse::reply_size
    - brpc::Controller::Controller
    - MultiCommandHandler::MultiCommandHandler
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, server_handle_pipeline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1359,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1364,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1366,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1367,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1368,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1372,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1377,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1379,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1389,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1391,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1392,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1396,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1402,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1403,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1405,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1406,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1407,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1411,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1416,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1417,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1419,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1420,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1424,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1430,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1432,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1436,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1438,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1438,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1439,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1439,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1444,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1445,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1447,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1452,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1453,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1458
      start: 1355
    functionDepth: 1
    functionLinenumber: 1355
    functionLinenumberEnd: 1458
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::RedisReply::is_array
    - brpc::RedisReply::ConsumePartialIOBuf
    - brpc::RedisReply::size
    - ASSERT_STREQ
    - brpc::RedisCommandParser::Consume
    - brpc::RedisCommandParser::RedisCommandParser
    - as_string
    - butil::Arena::Arena
    - std::string::append
    - c_str
    - butil::IOBuf::append
    - std::to_string
    - butil::IOBuf::IOBuf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, memory_allocation_limits)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ExecutionQueueTest::SetUp
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ExecutionQueueTest::TearDown
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: LongIntTask
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LongIntTask(long v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - v
    - e
    argTypes:
    - long
    - bthread::CountdownEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: LongIntTask
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LongIntTask(long v, bthread::CountdownEvent* e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: LongIntTask
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LongIntTask()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskIterator<LongIntTask>::is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:49,1
    - Dst: bthread::TaskIterator<LongIntTask>::event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - meta
    - iter
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 56
    functionName: add
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 63
    functionsReached:
    - bthread::TaskIterator<LongIntTask>::is_queue_stopped
    - bthread::TaskIterator<LongIntTask>::event::signal
    linkageType: ''
    returnType: int
    signature: int add(void* meta, bthread::TaskIterator<LongIntTask> &iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:70,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:74,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:77,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:77,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:78,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:79,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 82
    functionName: test_single_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - ASSERT_TRUE
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_single_thread(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_single_thread
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_single_thread
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: RValue::RValue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    functionName: RValue::RValue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RValue(int v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: RValue::RValue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RValue(RValue&& rhs)  noexcept
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 100
    functionName: '& operator=(RValue&& rhs) noexcept'
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RValue
    signature: RValue & operator=(RValue&& rhs) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: RValue::value
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskIterator<RValue>::is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:112,1
    - Dst: bthread::TaskIterator<RValue>::value
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - meta
    - iter
    argTypes:
    - void*
    - bthread::TaskIterator<RValue>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: add
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 63
    functionsReached:
    - bthread::TaskIterator<RValue>::is_queue_stopped
    - bthread::TaskIterator<RValue>::value
    linkageType: ''
    returnType: int
    signature: int add(void* meta, bthread::TaskIterator<RValue> &iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:132,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:137,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:137,1
    - Dst: std::move
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:140,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:140,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:141,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:141,1
    - Dst: RValue
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:142,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 145
    functionName: test_rvalue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - ASSERT_EQ
    - execution_queue_execute
    - ASSERT_TRUE
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - ASSERT_NE
    - RValue
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_rvalue(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_rvalue
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_rvalue
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, rvalue)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:165,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:166,1
    - Dst: bthread::CountdownEvent::CountdownEvent
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:168,1
    - Dst: bthread::CountdownEvent::reset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:171,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:173,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:177,1
    - Dst: bthread::CountdownEvent::reset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:178,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:181,1
    - Dst: PushArg*::expected_value::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:182,1
    - Dst: PushArg*::total_num::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:183,1
    - Dst: PushArg*::total_time::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:184,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 186
    functionName: push_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    - butil::Timer::stop
    - bthread::CountdownEvent::wait
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread::CountdownEvent::CountdownEvent
    - PushArg*::expected_value::fetch_add
    - bthread::CountdownEvent::reset
    - PushArg*::total_num::fetch_add
    - PushArg*::total_time::fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * push_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:191,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:192,1
    - Dst: execution_queue_address
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:195,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:196,1
    - Dst: bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:197,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:201,1
    - Dst: bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:201,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:202,1
    - Dst: PushArg*::expected_value::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:203,1
    - Dst: PushArg*::total_num::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:204,1
    - Dst: PushArg*::total_time::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:205,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 207
    functionName: push_thread_which_addresses_execq
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::execute
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::stopped
    - execution_queue_address
    - PushArg*::expected_value::fetch_add
    - PushArg*::total_num::fetch_add
    - PushArg*::total_time::fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * push_thread_which_addresses_execq(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:215,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:220,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:220,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:228,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:229,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:230,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:233,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:233,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:234,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:235,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:238,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:239,1
    - Dst: PushArg::expected_value::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:240,1
    - Dst: PushArg::total_time::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:241,1
    - Dst: PushArg::total_num::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:241,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:247,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:247,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:254,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:255,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:256,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:259,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:259,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:260,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:261,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:264,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:265,1
    - Dst: PushArg::expected_value::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:266,1
    - Dst: PushArg::total_time::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:267,1
    - Dst: PushArg::total_num::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:267,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:269,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 46
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 271
    functionName: test_performance
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - PushArg::expected_value::load
    - execution_queue_start
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - PushArg::total_num::load
    - execution_queue_join
    - usleep
    - PushArg::total_time::load
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void test_performance(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_performance
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_performance
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, performance)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:291,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:292,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:294,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:301,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:304,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:305,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:309,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 283
    functionDepth: 1
    functionLinenumber: 283
    functionLinenumberEnd: 314
    functionName: add_with_suspend
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - is_queue_stopped
    - EXPECT_FALSE
    - EXPECT_EQ
    - event::signal
    linkageType: ''
    returnType: int
    signature: int add_with_suspend(void* meta, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:328,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:328,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:337,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:338,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:344,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:344,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:348,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:348,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:351,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:355,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:355,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:356,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:360,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:361,1
    - Dst: PushArg::expected_value::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:361,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 362
    functionName: test_execute_urgent
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - execution_queue_execute
    - PushArg::expected_value::load
    - execution_queue_start
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - execution_queue_join
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_execute_urgent(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_execute_urgent
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 364
    functionDepth: 2
    functionLinenumber: 364
    functionLinenumberEnd: 368
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_execute_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, execute_urgent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:377,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:382,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:385,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:385,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:387,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:393,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:395,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:395,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:397,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:399,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:402,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:403,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:404,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 29
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 405
    functionName: test_urgent_task_is_the_last_task
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - std::atomic_thread_fence
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_urgent_task_is_the_last_task(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_urgent_task_is_the_last_task
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:408,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 410
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_urgent_task_is_the_last_task
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, urgent_task_is_the_last_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:418,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:420,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 423
    functionName: push_thread_with_id
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * push_thread_with_id(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:431,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:434,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 437
    functionName: check_order
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - event::signal
    linkageType: ''
    returnType: int
    signature: int check_order(void* meta, bthread::TaskIterator<LongIntTask>& iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:440,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:446,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:450,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:450,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:453,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:454,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:456,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:459,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:460,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:461,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 462
    functionName: test_multi_threaded_order
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - memset
    - execution_queue_join
    - LOG
    - execution_queue_start
    linkageType: ''
    returnType: void
    signature: void test_multi_threaded_order(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_multi_threaded_order
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:466,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 468
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_multi_threaded_order
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, multi_threaded_order)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:471,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:475,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:475,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 477
    functionName: check_running_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - is_queue_stopped
    - pthread_self
    linkageType: ''
    returnType: int
    signature: int check_running_thread(void* arg, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:480,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:489,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:492,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:494,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:495,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 479
    functionDepth: 1
    functionLinenumber: 479
    functionLinenumberEnd: 496
    functionName: test_in_place_task
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - pthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_in_place_task(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_in_place_task
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:500,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 502
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_in_place_task
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, in_place_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:513,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:514,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:514,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 509
    functionDepth: 1
    functionLinenumber: 509
    functionLinenumberEnd: 517
    functionName: run_first_tasks
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - execution_queue_execute
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void *run_first_tasks(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:520,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:525,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:525,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:526,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:527,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:528,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:529,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:532,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:535,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:536,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:536,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - arg
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<InPlaceTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 540
    functionName: stuck_and_check_running_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - bthread::futex_wait_private
    - butil::atomic*::store
    - butil::atomic*::load
    - EXPECT_NE
    - EXPECT_FALSE
    - bthread::futex_wake_private
    - EXPECT_EQ
    - pthread_self
    linkageType: ''
    returnType: int
    signature: int stuck_and_check_running_thread(void* arg, bthread::TaskIterator<InPlaceTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:552,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:556,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:556,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:557,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:558,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:564,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:564,1
    - Dst: butil::atomic::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:567,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:569,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:570,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:570,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 542
    functionDepth: 1
    functionLinenumber: 542
    functionLinenumberEnd: 571
    functionName: test_should_start_new_thread_on_more_tasks
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - pthread_create
    - bthread::futex_wait_private
    - execution_queue_stop
    - butil::atomic::load
    - execution_queue_join
    - bthread::futex_wake_private
    - butil::atomic::store
    - pthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_should_start_new_thread_on_more_tasks(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_should_start_new_thread_on_more_tasks
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 2
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_should_start_new_thread_on_more_tasks
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, should_start_new_thread_on_more_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:582,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:584,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 588
    functionName: inplace_push_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * inplace_push_thread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:591,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:597,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:601,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:601,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:604,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:605,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:607,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:610,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:611,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:612,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 613
    functionName: test_inplace_and_order
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - memset
    - execution_queue_join
    - LOG
    - execution_queue_start
    linkageType: ''
    returnType: void
    signature: void test_inplace_and_order(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_inplace_and_order
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:617,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 615
    functionDepth: 2
    functionLinenumber: 615
    functionLinenumberEnd: 619
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_inplace_and_order
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, inplace_and_order)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 623
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, size_of_task_node)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:627,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:635,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:637,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:640,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 644
    functionName: add_with_suspend2
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - event::signal
    - usleep
    linkageType: ''
    returnType: int
    signature: int add_with_suspend2(void* meta, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:656,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:660,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:660,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:664,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:665,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:667,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:668,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:670,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:671,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:672,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:673,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 646
    functionDepth: 1
    functionLinenumber: 646
    functionLinenumberEnd: 674
    functionName: test_cancel
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_cancel
    - execution_queue_stop
    - execution_queue_join
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_cancel(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:678,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 676
    functionDepth: 2
    functionLinenumber: 676
    functionLinenumberEnd: 680
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_cancel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:690,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:692,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:692,1
    - Dst: handle::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:692,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:693,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:693,1
    - Dst: handle::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:693,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:694,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:694,1
    - Dst: handle::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:694,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' iter'
    argTypes:
    - bthread::TaskIterator<CancelSelf*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 697
    functionName: cancel_self
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - execution_queue_cancel
    - handle::load
    - usleep
    linkageType: ''
    returnType: int
    signature: int cancel_self(void* /*meta*/, bthread::TaskIterator<CancelSelf*>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:704,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:708,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:713,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:713,1
    - Dst: CancelSelf::handle::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:715,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:716,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:716,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 699
    functionDepth: 1
    functionLinenumber: 699
    functionLinenumberEnd: 717
    functionName: test_cancel_self
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - LOG
    - CancelSelf::handle::store
    linkageType: ''
    returnType: void
    signature: void test_cancel_self(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cancel_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:721,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 723
      start: 719
    functionDepth: 2
    functionLinenumber: 719
    functionLinenumberEnd: 723
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_cancel_self
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, cancel_self)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:741,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:747,1
    - Dst: AddMeta*::expected::fetch_sub
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:749,1
    - Dst: AddMeta*::succ_times::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:750,1
    - Dst: AddMeta*::fail_times::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:752,1
    - Dst: AddMeta*::race_times::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:754,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<AddTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 740
    functionDepth: 1
    functionLinenumber: 740
    functionLinenumberEnd: 761
    functionName: add_with_cancel
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - AddMeta*::expected::fetch_sub
    - execution_queue_cancel
    - AddMeta*::race_times::fetch_add
    - AddMeta*::succ_times::fetch_add
    - AddMeta*::fail_times::fetch_add
    linkageType: ''
    returnType: int
    signature: int add_with_cancel(void* meta, bthread::TaskIterator<AddTask>& iter)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: AddMeta::expected::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:767,1
    - Dst: AddMeta::succ_times::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:768,1
    - Dst: AddMeta::fail_times::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:769,1
    - Dst: AddMeta::race_times::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:771,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:779,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:779,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:780,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:790,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:795,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:795,1
    - Dst: AddMeta::expected::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:801,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:802,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:803,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:803,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:804,1
    - Dst: AddMeta::expected::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:804,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:805,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 36
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 808
      start: 763
    functionDepth: 1
    functionLinenumber: 763
    functionLinenumberEnd: 808
    functionName: test_random_cancel
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - butil::fast_rand_less_than
    - execution_queue_cancel
    - AddMeta::expected::fetch_add
    - execution_queue_stop
    - AddMeta::expected::load
    - execution_queue_join
    - AddMeta::fail_times::store
    - AddMeta::expected::store
    - LOG
    - AddMeta::race_times::store
    - execution_queue_start
    - AddMeta::succ_times::store
    linkageType: ''
    returnType: void
    signature: void test_random_cancel(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_random_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:812,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 815
      start: 810
    functionDepth: 2
    functionLinenumber: 810
    functionLinenumberEnd: 815
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_random_cancel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, random_cancel)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskIterator<LongIntTask>::event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:821,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - meta
    - iter
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 824
    functionName: add2
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskIterator<LongIntTask>::event::signal
    linkageType: ''
    returnType: int
    signature: int add2(void* meta, bthread::TaskIterator<LongIntTask> &iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:833,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:837,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:841,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:843,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:843,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:844,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:845,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:846,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 826
    functionDepth: 1
    functionLinenumber: 826
    functionLinenumberEnd: 847
    functionName: test_not_do_iterate_at_all
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_not_do_iterate_at_all(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_not_do_iterate_at_all
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:851,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 849
    functionDepth: 2
    functionLinenumber: 849
    functionLinenumberEnd: 853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_not_do_iterate_at_all
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, not_do_iterate_at_all)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:857,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:865,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:867,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:870,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 874
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 874
    functionName: add_with_suspend3
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - event::signal
    - usleep
    linkageType: ''
    returnType: int
    signature: int add_with_suspend3(void* meta, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:884,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:887,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:890,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:890,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:892,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:898,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:898,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:900,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:900,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:906,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:906,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:909,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:909,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:910,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:910,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:912,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 913
      start: 876
    functionDepth: 1
    functionLinenumber: 876
    functionLinenumberEnd: 913
    functionName: test_cancel_unexecuted_high_priority_task
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_cancel
    - execution_queue_stop
    - execution_queue_join
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_cancel_unexecuted_high_priority_task(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cancel_unexecuted_high_priority_task
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 915
    functionDepth: 2
    functionLinenumber: 915
    functionLinenumberEnd: 919
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_cancel_unexecuted_high_priority_task
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, cancel_unexecuted_high_priority_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ExecutionQueueTest::SetUp
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ExecutionQueueTest::TearDown
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: LongIntTask
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LongIntTask(long v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - v
    - e
    argTypes:
    - long
    - bthread::CountdownEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: LongIntTask
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LongIntTask(long v, bthread::CountdownEvent* e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: LongIntTask
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LongIntTask()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskIterator<LongIntTask>::is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:49,1
    - Dst: bthread::TaskIterator<LongIntTask>::event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - meta
    - iter
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 56
    functionName: add
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 69
    functionsReached:
    - bthread::TaskIterator<LongIntTask>::is_queue_stopped
    - bthread::TaskIterator<LongIntTask>::event::signal
    linkageType: ''
    returnType: int
    signature: int add(void* meta, bthread::TaskIterator<LongIntTask> &iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:70,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:74,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:77,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:77,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:78,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:79,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 82
    functionName: test_single_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - ASSERT_TRUE
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_single_thread(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_single_thread
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_single_thread
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: RValue::RValue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    functionName: RValue::RValue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RValue(int v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: RValue::RValue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RValue(RValue&& rhs)  noexcept
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 100
    functionName: '& operator=(RValue&& rhs) noexcept'
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RValue
    signature: RValue & operator=(RValue&& rhs) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: RValue::value
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskIterator<RValue>::is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:112,1
    - Dst: bthread::TaskIterator<RValue>::value
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - meta
    - iter
    argTypes:
    - void*
    - bthread::TaskIterator<RValue>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: add
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 69
    functionsReached:
    - bthread::TaskIterator<RValue>::is_queue_stopped
    - bthread::TaskIterator<RValue>::value
    linkageType: ''
    returnType: int
    signature: int add(void* meta, bthread::TaskIterator<RValue> &iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:132,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:137,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:137,1
    - Dst: std::move
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:140,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:140,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:141,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:141,1
    - Dst: RValue
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:142,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 145
    functionName: test_rvalue
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::move
    - ASSERT_EQ
    - execution_queue_execute
    - ASSERT_TRUE
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - ASSERT_NE
    - RValue
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_rvalue(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_rvalue
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_rvalue
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, rvalue)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:165,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:166,1
    - Dst: bthread::CountdownEvent::CountdownEvent
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:168,1
    - Dst: bthread::CountdownEvent::reset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:171,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:173,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:177,1
    - Dst: bthread::CountdownEvent::reset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:178,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:181,1
    - Dst: PushArg*::expected_value::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:182,1
    - Dst: PushArg*::total_num::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:183,1
    - Dst: PushArg*::total_time::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:184,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 186
    functionName: push_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    - butil::Timer::stop
    - bthread::CountdownEvent::wait
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread::CountdownEvent::CountdownEvent
    - PushArg*::expected_value::fetch_add
    - bthread::CountdownEvent::reset
    - PushArg*::total_num::fetch_add
    - PushArg*::total_time::fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * push_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:191,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:192,1
    - Dst: execution_queue_address
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:195,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:196,1
    - Dst: bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:197,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:201,1
    - Dst: bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:201,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:202,1
    - Dst: PushArg*::expected_value::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:203,1
    - Dst: PushArg*::total_num::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:204,1
    - Dst: PushArg*::total_time::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:205,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 207
    functionName: push_thread_which_addresses_execq
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::execute
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::stopped
    - execution_queue_address
    - PushArg*::expected_value::fetch_add
    - PushArg*::total_num::fetch_add
    - PushArg*::total_time::fetch_add
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * push_thread_which_addresses_execq(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:215,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:220,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:220,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:228,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:229,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:230,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:233,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:233,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:234,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:235,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:238,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:239,1
    - Dst: PushArg::expected_value::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:240,1
    - Dst: PushArg::total_time::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:241,1
    - Dst: PushArg::total_num::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:241,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:247,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:247,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:254,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:255,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:256,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:259,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:259,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:260,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:261,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:264,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:265,1
    - Dst: PushArg::expected_value::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:266,1
    - Dst: PushArg::total_time::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:267,1
    - Dst: PushArg::total_num::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:267,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:269,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 46
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 271
    functionName: test_performance
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - PushArg::expected_value::load
    - execution_queue_start
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - PushArg::total_num::load
    - execution_queue_join
    - usleep
    - PushArg::total_time::load
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void test_performance(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_performance
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_performance
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, performance)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:291,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:292,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:294,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:301,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:304,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:305,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:309,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 283
    functionDepth: 1
    functionLinenumber: 283
    functionLinenumberEnd: 314
    functionName: add_with_suspend
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - is_queue_stopped
    - EXPECT_FALSE
    - EXPECT_EQ
    - event::signal
    linkageType: ''
    returnType: int
    signature: int add_with_suspend(void* meta, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:328,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:328,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:337,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:338,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:344,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:344,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:348,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:348,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:351,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:355,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:355,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:356,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:360,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:361,1
    - Dst: PushArg::expected_value::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:361,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 362
    functionName: test_execute_urgent
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - execution_queue_execute
    - PushArg::expected_value::load
    - execution_queue_start
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - execution_queue_join
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_execute_urgent(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_execute_urgent
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 364
    functionDepth: 2
    functionLinenumber: 364
    functionLinenumberEnd: 368
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_execute_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, execute_urgent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:377,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:382,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:385,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:385,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:387,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:393,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:395,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:395,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:397,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:399,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:402,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:403,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:404,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 29
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 405
    functionName: test_urgent_task_is_the_last_task
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - std::atomic_thread_fence
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_urgent_task_is_the_last_task(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_urgent_task_is_the_last_task
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:408,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 410
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_urgent_task_is_the_last_task
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, urgent_task_is_the_last_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:418,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:420,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 423
    functionName: push_thread_with_id
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * push_thread_with_id(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:431,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:434,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 437
    functionName: check_order
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - event::signal
    linkageType: ''
    returnType: int
    signature: int check_order(void* meta, bthread::TaskIterator<LongIntTask>& iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:440,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:446,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:450,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:450,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:453,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:454,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:456,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:459,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:460,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:461,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 462
    functionName: test_multi_threaded_order
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - memset
    - execution_queue_join
    - LOG
    - execution_queue_start
    linkageType: ''
    returnType: void
    signature: void test_multi_threaded_order(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_multi_threaded_order
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:466,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 468
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_multi_threaded_order
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, multi_threaded_order)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:471,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:475,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:475,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 477
    functionName: check_running_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - is_queue_stopped
    - pthread_self
    linkageType: ''
    returnType: int
    signature: int check_running_thread(void* arg, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:480,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:489,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:492,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:494,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:495,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 479
    functionDepth: 1
    functionLinenumber: 479
    functionLinenumberEnd: 496
    functionName: test_in_place_task
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - pthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_in_place_task(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_in_place_task
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:500,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 502
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_in_place_task
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, in_place_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:513,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:514,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:514,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 509
    functionDepth: 1
    functionLinenumber: 509
    functionLinenumberEnd: 517
    functionName: run_first_tasks
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - execution_queue_execute
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void *run_first_tasks(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:520,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:525,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:525,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:526,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:527,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:528,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:529,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:532,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:535,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:536,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:536,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - arg
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<InPlaceTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 540
    functionName: stuck_and_check_running_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - bthread::futex_wait_private
    - butil::atomic*::store
    - butil::atomic*::load
    - EXPECT_NE
    - EXPECT_FALSE
    - bthread::futex_wake_private
    - EXPECT_EQ
    - pthread_self
    linkageType: ''
    returnType: int
    signature: int stuck_and_check_running_thread(void* arg, bthread::TaskIterator<InPlaceTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:552,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:556,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:556,1
    - Dst: butil::atomic::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:557,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:558,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:564,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:564,1
    - Dst: butil::atomic::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:567,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:569,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:570,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:570,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 542
    functionDepth: 1
    functionLinenumber: 542
    functionLinenumberEnd: 571
    functionName: test_should_start_new_thread_on_more_tasks
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - pthread_create
    - bthread::futex_wait_private
    - execution_queue_stop
    - butil::atomic::load
    - execution_queue_join
    - bthread::futex_wake_private
    - butil::atomic::store
    - pthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_should_start_new_thread_on_more_tasks(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_should_start_new_thread_on_more_tasks
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 2
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_should_start_new_thread_on_more_tasks
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, should_start_new_thread_on_more_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:582,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:584,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 588
    functionName: inplace_push_thread
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    - LOG
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * inplace_push_thread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:591,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:597,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:601,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:601,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:604,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:605,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:607,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:610,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:611,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:612,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 613
    functionName: test_inplace_and_order
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - pthread_create
    - execution_queue_stop
    - memset
    - execution_queue_join
    - LOG
    - execution_queue_start
    linkageType: ''
    returnType: void
    signature: void test_inplace_and_order(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_inplace_and_order
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:617,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 615
    functionDepth: 2
    functionLinenumber: 615
    functionLinenumberEnd: 619
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_inplace_and_order
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, inplace_and_order)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 623
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, size_of_task_node)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:627,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:635,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:637,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:640,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 644
    functionName: add_with_suspend2
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - event::signal
    - usleep
    linkageType: ''
    returnType: int
    signature: int add_with_suspend2(void* meta, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:656,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:660,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:660,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:664,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:665,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:667,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:668,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:670,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:671,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:672,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:673,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 646
    functionDepth: 1
    functionLinenumber: 646
    functionLinenumberEnd: 674
    functionName: test_cancel
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_cancel
    - execution_queue_stop
    - execution_queue_join
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_cancel(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:678,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 676
    functionDepth: 2
    functionLinenumber: 676
    functionLinenumberEnd: 680
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_cancel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:690,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:692,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:692,1
    - Dst: handle::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:692,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:693,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:693,1
    - Dst: handle::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:693,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:694,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:694,1
    - Dst: handle::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:694,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' iter'
    argTypes:
    - bthread::TaskIterator<CancelSelf*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 697
    functionName: cancel_self
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - execution_queue_cancel
    - handle::load
    - usleep
    linkageType: ''
    returnType: int
    signature: int cancel_self(void* /*meta*/, bthread::TaskIterator<CancelSelf*>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:704,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:708,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:713,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:713,1
    - Dst: CancelSelf::handle::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:715,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:716,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:716,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 699
    functionDepth: 1
    functionLinenumber: 699
    functionLinenumberEnd: 717
    functionName: test_cancel_self
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - LOG
    - CancelSelf::handle::store
    linkageType: ''
    returnType: void
    signature: void test_cancel_self(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cancel_self
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:721,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 723
      start: 719
    functionDepth: 2
    functionLinenumber: 719
    functionLinenumberEnd: 723
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_cancel_self
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, cancel_self)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:741,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:747,1
    - Dst: AddMeta*::expected::fetch_sub
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:749,1
    - Dst: AddMeta*::succ_times::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:750,1
    - Dst: AddMeta*::fail_times::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:752,1
    - Dst: AddMeta*::race_times::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:754,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<AddTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 740
    functionDepth: 1
    functionLinenumber: 740
    functionLinenumberEnd: 761
    functionName: add_with_cancel
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - AddMeta*::expected::fetch_sub
    - execution_queue_cancel
    - AddMeta*::race_times::fetch_add
    - AddMeta*::succ_times::fetch_add
    - AddMeta*::fail_times::fetch_add
    linkageType: ''
    returnType: int
    signature: int add_with_cancel(void* meta, bthread::TaskIterator<AddTask>& iter)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: AddMeta::expected::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:767,1
    - Dst: AddMeta::succ_times::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:768,1
    - Dst: AddMeta::fail_times::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:769,1
    - Dst: AddMeta::race_times::store
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:771,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:779,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:779,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:780,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:790,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:795,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:795,1
    - Dst: AddMeta::expected::fetch_add
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:801,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:802,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:803,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:803,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:804,1
    - Dst: AddMeta::expected::load
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:804,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:805,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 36
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 808
      start: 763
    functionDepth: 1
    functionLinenumber: 763
    functionLinenumberEnd: 808
    functionName: test_random_cancel
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - butil::fast_rand_less_than
    - execution_queue_cancel
    - AddMeta::expected::fetch_add
    - execution_queue_stop
    - AddMeta::expected::load
    - execution_queue_join
    - AddMeta::fail_times::store
    - AddMeta::expected::store
    - LOG
    - AddMeta::race_times::store
    - execution_queue_start
    - AddMeta::succ_times::store
    linkageType: ''
    returnType: void
    signature: void test_random_cancel(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_random_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:812,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 815
      start: 810
    functionDepth: 2
    functionLinenumber: 810
    functionLinenumberEnd: 815
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_random_cancel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, random_cancel)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskIterator<LongIntTask>::event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:821,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - meta
    - iter
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 824
    functionName: add2
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskIterator<LongIntTask>::event::signal
    linkageType: ''
    returnType: int
    signature: int add2(void* meta, bthread::TaskIterator<LongIntTask> &iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:833,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:837,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:841,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:843,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:843,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:844,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:845,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:846,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 826
    functionDepth: 1
    functionLinenumber: 826
    functionLinenumberEnd: 847
    functionName: test_not_do_iterate_at_all
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_stop
    - execution_queue_join
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_not_do_iterate_at_all(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_not_do_iterate_at_all
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:851,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 849
    functionDepth: 2
    functionLinenumber: 849
    functionLinenumberEnd: 853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_not_do_iterate_at_all
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, not_do_iterate_at_all)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_queue_stopped
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:857,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:865,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:867,1
    - Dst: event::signal
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:870,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<LongIntTask>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 874
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 874
    functionName: add_with_suspend3
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_queue_stopped
    - event::signal
    - usleep
    linkageType: ''
    returnType: int
    signature: int add_with_suspend3(void* meta, bthread::TaskIterator<LongIntTask>&
      iter)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:884,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:887,1
    - Dst: execution_queue_start
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:890,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:890,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:892,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:898,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:898,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:900,1
    - Dst: execution_queue_cancel
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:900,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:906,1
    - Dst: execution_queue_execute
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:906,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:909,1
    - Dst: execution_queue_stop
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:909,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:910,1
    - Dst: execution_queue_join
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:910,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:912,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 1
    argNames:
    - use_pthread
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 913
      start: 876
    functionDepth: 1
    functionLinenumber: 876
    functionLinenumberEnd: 913
    functionName: test_cancel_unexecuted_high_priority_task
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - execution_queue_execute
    - execution_queue_start
    - execution_queue_cancel
    - execution_queue_stop
    - execution_queue_join
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void test_cancel_unexecuted_high_priority_task(bool use_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cancel_unexecuted_high_priority_task
      Src: /src/brpc/test/bthread_execution_queue_unittest.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 915
    functionDepth: 2
    functionLinenumber: 915
    functionLinenumberEnd: 919
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_execution_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_cancel_unexecuted_high_priority_task
    linkageType: ''
    returnType: void
    signature: void TEST_F(ExecutionQueueTest, cancel_unexecuted_high_priority_task)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:67,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:68,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:69,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:73,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 78
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:102,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:116,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:118,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:120,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:120,1
    - Dst: std::string*::data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:120,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 123
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - strtol
    - std::string*::data
    - ::test::EchoResponse*::set_message
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:129,1
    - Dst: AddBuiltinServices
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:130,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:130,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:139,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:144,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: brpc::get_client_side_messenger
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:150,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 152
    functionName: HttpTest::HttpTest
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - brpc::get_client_side_messenger
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    - AddBuiltinServices
    linkageType: ''
    returnType: void
    signature: void HttpTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: ~HttpTest()
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HttpTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:163,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - expect
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: HttpTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::VerifyHttpRequest
    - ReAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg, bool expect)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:169,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:172,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 177
    functionName: HttpTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:180,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:181,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:182,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:183,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:186,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:187,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:188,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 190
    functionName: HttpTest::MakePostRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - test::EchoRequest::set_message
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakePostRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:193,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:194,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:195,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:196,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:199,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:200,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:203,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 205
    functionName: HttpTest::MakePostProtoJsonRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - json2pb::ProtoMessageToProtoJson
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakePostProtoJsonRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:209,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:210,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:211,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:212,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:215,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:217,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 219
    functionName: HttpTest::MakePostProtoTextRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::HttpContext*::body
    - brpc::URI::Print
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: "brpc::policy::HttpContext * MakePostProtoTextRequestMessage(\n        const
      std::string& path)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:222,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:223,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 226
    functionName: HttpTest::MakeGetRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakeGetRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:230,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:231,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:232,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:235,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:236,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:237,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 239
    functionName: HttpTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakeResponseMessage(int code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:245,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:249,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:251,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:252,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:255,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:255,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:257,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:259,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:259,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 261
    functionName: HttpTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext*::header
    - static_cast<brpc::policy::HttpContext*>
    - ioctl
    - brpc::policy::HttpContext*::Destroy
    - brpc::ParseResult::error
    - get
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::policy::ParseHttpMessage
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:264,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:266,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:267,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:268,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:269,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:269,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:270,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:273,1
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:273,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:275,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:276,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - out
    - cntl
    - h2_stream_id
    argTypes:
    - butil::IOBuf*
    - brpc::Controller*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 278
    functionName: HttpTest::MakeH2EchoRequestBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::policy::SerializeHttpRequest
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::PackH2Request
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::Controller*::call_id
    - brpc::Controller*::Failed
    - brpc::SocketMessage*::AppendAndDestroySelf
    - get
    - butil::IOBuf::IOBuf
    - butil::Status::ok
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: void MakeH2EchoRequestBuf(butil::IOBuf* out, brpc::Controller* cntl,
      int* h2_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:281,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:283,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:284,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:286,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:287,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:287,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:289,1
    - Dst: brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:290,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:291,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - h2_stream_id
    argTypes:
    - butil::IOBuf*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 292
    functionName: HttpTest::MakeH2EchoResponseBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - brpc::policy::H2UnsentResponse::New
    - brpc::Controller::response_attachment
    - brpc::Controller::Controller
    - get
    - brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
    - brpc::Controller::http_request
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void MakeH2EchoResponseBuf(butil::IOBuf* out, int h2_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:310,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 314
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, indenting_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:318,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:324,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:326,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:326,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:327,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:327,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:327,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:328,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:331,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:333,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:333,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:335,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:336,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:340,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:340,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:344,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 347
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - endpoint2str
    - std::string
    - std::string::c_str
    - brpc::policy::ParseHttpServerAddress
    - butil::EndPoint::EndPoint
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::ip2str
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, parse_http_address)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:352,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:353,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:354,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:357,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:358,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:359,1
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:363,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:364,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:365,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:366,1
    - Dst: MakePostProtoJsonRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:370,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:371,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:372,1
    - Dst: MakePostProtoTextRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:376,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:377,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 349
    functionDepth: 0
    functionLinenumber: 349
    functionLinenumberEnd: 380
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - MakePostProtoJsonRequestMessage
    - MakePostProtoTextRequestMessage
    - brpc::policy::HttpContext*::Destroy
    - MakeGetRequestMessage
    - SetFailed
    - VerifyMessage
    - MakePostRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, verify_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:383,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:384,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 388
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - SetFailed
    - MakePostRequestMessage
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:391,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:394,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:394,1
    - Dst: FindMethodPropertyByFullName
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:396,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:397,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:399,1
    - Dst: brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:399,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 401
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
    - MakeGetRequestMessage
    - FindMethodPropertyByFullName
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, reject_get_to_pb_services_with_required_fields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:404,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:407,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:407,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 409
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - MakePostRequestMessage
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:412,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:414,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:414,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 416
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - MakePostRequestMessage
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:420,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:423,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:426,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:427,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 428
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:432,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:433,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:433,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:435,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:437,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:438,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:438,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:441,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:442,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:442,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:444,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:446,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:447,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:448,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:451,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:452,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:452,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:454,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:456,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:457,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:458,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:461,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:462,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:462,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:463,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:465,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:466,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 468
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::Controller::http_response
    - MakeResponseMessage
    - set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:471,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:472,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:473,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:479,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:479,1
    - Dst: id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:479,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:482,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:483,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:484,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:484,1
    - Dst: brpc::policy::PackHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:485,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:486,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:488,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:488,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:492,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:493,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:493,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:494,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:495,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:496,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:499,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:500,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:502,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:503,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:503,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:504,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:505,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:508,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 470
    functionDepth: 1
    functionLinenumber: 470
    functionLinenumberEnd: 509
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::Failed
    - brpc::SetTrackMeAddress
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - id
    - brpc::policy::ParseHttpMessage
    - ASSERT_FALSE
    - get
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::ErrorText
    - brpc::Controller::call_id
    - brpc::policy::PackHttpRequest
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::SerializeHttpRequest
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:513,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:514,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:521,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:524,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:525,1
    - Dst: system
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:525,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:525,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: fgets
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:532,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 533
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - butil::string_printf
    - brpc::Server::AddService
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string::c_str
    - std::string
    - system
    - brpc::Server::Start
    - EXPECT_EQ
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, chunked_uploading)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:545,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - seq_no
    argTypes:
    - char*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 547
    functionName: CopyPAPrefixedWithSeqNo
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: void CopyPAPrefixedWithSeqNo(char* buf, uint64_t seq_no)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 557
    functionName: DownloadServiceImpl::DownloadServiceImpl
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DownloadServiceImpl(DonePlace done_place = DONE_BEFORE_CREATE_PA,\n
      \                       size_t num_repeat = 1)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:565,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:566,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:567,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:570,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:572,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:576,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:578,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:581,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:582,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:584,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:584,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:586,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:598,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:600,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:600,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:601,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:603,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 605
    functionName: DownloadServiceImpl::Download
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::SetFailed
    - bthread_usleep
    - butil::intrusive_ptr::get
    - ASSERT_GT
    - brpc::Controller*::http_response
    - brpc::Controller*::CreateProgressiveAttachment
    - butil::intrusive_ptr::reset
    - brpc::ClosureGuard::reset
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - LOG_EVERY_SECOND
    - CopyPAPrefixedWithSeqNo
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::Write
    linkageType: ''
    returnType: void
    signature: "void Download(::google::protobuf::RpcController* cntl_base,\n                  const
      ::test::HttpRequest*,\n                  ::test::HttpResponse*,\n                  ::google::protobuf::Closure*
      done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:613,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:614,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:615,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:618,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:620,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:625,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:627,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:627,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:628,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:639,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:640,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:644,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:644,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:645,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 646
    functionName: DownloadServiceImpl::DownloadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::SetFailed
    - bthread_usleep
    - butil::intrusive_ptr::get
    - brpc::Controller*::http_response
    - brpc::Controller*::CreateProgressiveAttachment
    - CHECK_EQ
    - brpc::ClosureGuard::reset
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG_EVERY_SECOND
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::Write
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: "void DownloadFailed(::google::protobuf::RpcController* cntl_base,\n
      \                       const ::test::HttpRequest*,\n                        ::test::HttpResponse*,\n
      \                       ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done_place
    argTypes:
    - DonePlace
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 648
    functionName: DownloadServiceImpl::set_done_place
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_done_place(DonePlace done_place)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    functionName: DownloadServiceImpl::written_bytes
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t written_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 650
    functionName: DownloadServiceImpl::ever_full
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ever_full() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 651
    functionName: DownloadServiceImpl::last_errno
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int last_errno() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:663,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:665,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:665,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: DownloadServiceImpl::set_done_place
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:669,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:670,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:674,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:675,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:676,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:677,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:677,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:677,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:680,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:681,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 661
    functionDepth: 1
    functionLinenumber: 661
    functionLinenumberEnd: 683
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - CopyPAPrefixedWithSeqNo
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Controller::http_request
    - DownloadServiceImpl::set_done_place
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_chunked_response_normally)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:687,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:688,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:692,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:697,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:698,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:699,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:700,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:703,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:703,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:704,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:705,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:705,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:707,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:707,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 685
    functionDepth: 1
    functionLinenumber: 685
    functionLinenumberEnd: 708
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::response_attachment
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - ASSERT_NE
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_failed_chunked_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<ReadBody>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:717,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 718
    functionName: ReadBody::ReadBody
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<ReadBody>
    linkageType: ''
    returnType: void
    signature: void ReadBody()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:723,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:723,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:723,1
    - Dst: append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:724,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:727,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:728,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:728,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:730,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:731,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:731,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:731,1
    - Dst: clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:733,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:736,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 720
    functionDepth: 1
    functionLinenumber: 720
    functionLinenumberEnd: 737
    functionName: ReadBody::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - memcmp
    - std::min
    - EXPECT_EQ
    - clear
    - data
    - size
    - CopyPAPrefixedWithSeqNo
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* data, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<ReadBody>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:739,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:740,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 745
    functionName: ReadBody::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - butil::intrusive_ptr<ReadBody>
    - data
    - size
    - ASSERT_LT
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 746
    functionDepth: 0
    functionLinenumber: 746
    functionLinenumberEnd: 746
    functionName: ReadBody::destroyed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool destroyed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 747
      start: 747
    functionDepth: 0
    functionLinenumber: 747
    functionLinenumberEnd: 747
    functionName: '& destroying_status() const'
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status & destroying_status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 748
    functionName: ReadBody::read_bytes
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t read_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:766,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:769,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:770,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:770,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:773,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:778,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:779,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:780,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:781,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:782,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:782,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:783,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:783,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:784,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:784,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:785,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:785,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:788,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:789,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:790,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:795,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:798,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:798,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:801,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:804,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:804,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:807,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:808,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:808,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:809,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 763
    functionDepth: 1
    functionLinenumber: 763
    functionLinenumberEnd: 810
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - usleep
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_long_body_progressively)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:813,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:815,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:818,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:818,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:819,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:819,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:821,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:826,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:827,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:828,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:829,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:830,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:830,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:830,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:832,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:832,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:833,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:833,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:836,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:842,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:843,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:845,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:846,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:846,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 848
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - DownloadServiceImpl::written_bytes
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_short_body_progressively)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:853,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:856,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:857,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:857,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:858,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:858,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:861,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:865,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:866,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:867,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:868,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:869,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:869,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:869,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:870,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:870,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:871,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:871,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:872,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:872,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:876,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:878,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:883,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:884,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:884,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:887,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:891,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:893,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:893,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 894
      start: 850
    functionDepth: 1
    functionLinenumber: 850
    functionLinenumberEnd: 894
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - usleep
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_progressively_after_cntl_destroys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:897,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:902,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:903,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:903,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:904,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:904,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:906,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:907,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:911,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:912,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:913,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:914,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:916,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:916,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:917,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:919,1
    - Dst: DownloadServiceImpl::ever_full
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:919,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:920,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:920,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:921,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:921,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:922,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:922,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:925,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:926,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:927,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:932,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:934,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:934,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:937,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:938,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:938,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:941,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:942,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:942,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:943,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:943,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 896
    functionDepth: 1
    functionLinenumber: 896
    functionLinenumberEnd: 944
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - DownloadServiceImpl::ever_full
    - usleep
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - LOG
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_progressively_after_long_delay)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:950,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:951,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:951,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:952,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:952,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:953,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:954,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:958,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:959,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:960,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:961,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:962,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:962,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:962,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:965,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:966,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:967,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:968,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:970,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:972,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 973
      start: 946
    functionDepth: 1
    functionLinenumber: 946
    functionLinenumberEnd: 973
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - DownloadServiceImpl::written_bytes
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, skip_progressive_reading)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:979,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 978
    functionDepth: 1
    functionLinenumber: 978
    functionLinenumberEnd: 980
    functionName: AlwaysFailRead::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:982,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 984
      start: 981
    functionDepth: 1
    functionLinenumber: 981
    functionLinenumberEnd: 984
    functionName: AlwaysFailRead::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:989,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:992,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:992,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:993,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:993,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:994,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:995,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:999,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1000,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1001,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1002,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1003,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1003,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1003,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1004,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1004,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: AlwaysFailRead::AlwaysFailRead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1007,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1008,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1009,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1009,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 987
    functionDepth: 1
    functionLinenumber: 987
    functionLinenumberEnd: 1010
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - ASSERT_NE
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - AlwaysFailRead::AlwaysFailRead
    - brpc::Controller::Controller
    - butil::my_ip
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, failed_on_read_one_part)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1013,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1015,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1021,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1026,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1027,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1028,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1029,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1030,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1030,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1030,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1031,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1031,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1032,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1032,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1036,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1037,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1038,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1043,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1046,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1046,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1047,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1048,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1049,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1052,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1053,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1053,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1054,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1054,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 1012
    functionDepth: 1
    functionLinenumber: 1012
    functionLinenumberEnd: 1055
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - usleep
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - brpc::Server::Join
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, broken_socket_stops_progressive_reading)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1063
    functionDepth: 0
    functionLinenumber: 1063
    functionLinenumberEnd: 1065
    functionName: ServerProgressiveReader::ServerProgressiveReader
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerProgressiveReader(brpc::Controller* cntl, google::protobuf::Closure*
      done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<ReadBody>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1069,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1075,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1076,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1077
      start: 1068
    functionDepth: 1
    functionLinenumber: 1068
    functionLinenumberEnd: 1077
    functionName: ServerProgressiveReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - response_attachment
    - butil::intrusive_ptr<ReadBody>
    - data
    - size
    - ASSERT_LT
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1087
      start: 1085
    functionDepth: 0
    functionLinenumber: 1085
    functionLinenumberEnd: 1087
    functionName: ServerAlwaysFailReader::ServerAlwaysFailReader
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerAlwaysFailReader(brpc::Controller* cntl, google::protobuf::Closure*
      done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1091,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1090
    functionDepth: 1
    functionLinenumber: 1090
    functionLinenumberEnd: 1092
    functionName: ServerAlwaysFailReader::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1097,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1098,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1094
    functionDepth: 1
    functionLinenumber: 1094
    functionLinenumberEnd: 1100
    functionName: ServerAlwaysFailReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - CHECK_EQ
    - error_code
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1112,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1113,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1114,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1115,1
    - Dst: ServerProgressiveReader::ServerProgressiveReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::HttpRequest*
    - ::test::HttpResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1116
      start: 1108
    functionDepth: 1
    functionLinenumber: 1108
    functionLinenumberEnd: 1116
    functionName: UploadServiceImpl::Upload
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_will_be_read_progressively
    - ServerProgressiveReader::ServerProgressiveReader
    - UploadServiceImpl::check_header
    - static_cast<brpc::Controller*>
    - brpc::Controller*::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: "void Upload(::google::protobuf::RpcController* controller,\n                        const
      ::test::HttpRequest* request,\n                        ::test::HttpResponse*
      response,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1122,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1123,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1124,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    - Dst: ServerAlwaysFailReader::ServerAlwaysFailReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::HttpRequest*
    - ::test::HttpResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1126
      start: 1118
    functionDepth: 1
    functionLinenumber: 1118
    functionLinenumberEnd: 1126
    functionName: UploadServiceImpl::UploadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_will_be_read_progressively
    - ServerAlwaysFailReader::ServerAlwaysFailReader
    - UploadServiceImpl::check_header
    - static_cast<brpc::Controller*>
    - brpc::Controller*::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: "void UploadFailed(::google::protobuf::RpcController* controller,\n
      \                       const ::test::HttpRequest* request,\n                        ::test::HttpResponse*
      response,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1130,1
    - Dst: GOOGLE_CHECK_NOTNULL
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1131,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1133
      start: 1129
    functionDepth: 0
    functionLinenumber: 1129
    functionLinenumberEnd: 1133
    functionName: UploadServiceImpl::check_header
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - GOOGLE_CHECK_NOTNULL
    - CHECK_EQ
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: void check_header(brpc::Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1138,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1144,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1144,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1146,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1150,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1151,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1152,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1153,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1155,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1158,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1159,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1161,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1161,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1163,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1169,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1170,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1170,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1136
    functionDepth: 1
    functionLinenumber: 1136
    functionLinenumberEnd: 1171
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - LOG
    - CopyPAPrefixedWithSeqNo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, server_end_read_short_body_progressively)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1177,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1182,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1183,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1183,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1185,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1189,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1191,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1192,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1194,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1197,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1198,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1200,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1200,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1202,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1208,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1209,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1209,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1210
      start: 1175
    functionDepth: 1
    functionLinenumber: 1175
    functionLinenumberEnd: 1210
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - EXPECT_EQ
    - LOG
    - CopyPAPrefixedWithSeqNo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, server_end_read_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1216,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1219,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1226,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1230,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1231,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1232,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1233,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1234,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1235,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1235,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1241,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1243,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1244,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1245,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1246,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1247,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1249,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1255,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1256,1
    - Dst: brpc::SocketUniquePtr::GetAgentSocket
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1256,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1257,1
    - Dst: brpc::SocketUniquePtr::parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1257,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    - Dst: brpc::policy::H2Context*::_remote_window_left::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1213
    functionDepth: 1
    functionLinenumber: 1213
    functionLinenumberEnd: 1260
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::SetTrackMeAddress
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::EndPoint
    - brpc::SocketUniquePtr::parsing_context
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::SocketUniquePtr::GetAgentSocket
    - static_cast<brpc::policy::H2Context*>
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - brpc::policy::H2Context*::_remote_window_left::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1264,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1267,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1269,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1271,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1273,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1275,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1276,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1278,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1281,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1282,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1282,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1284,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1284,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1285,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1262
    functionDepth: 1
    functionLinenumber: 1262
    functionLinenumberEnd: 1286
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::policy::ParseH2Message
    - MakeH2EchoRequestBuf
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - MakeH2EchoResponseBuf
    - brpc::Controller::Controller
    - get
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_ping)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1294
      start: 1288
    functionDepth: 0
    functionLinenumber: 1288
    functionLinenumberEnd: 1294
    functionName: SaveUint32
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint32(void* out, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1297,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1299,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1301,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1303,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1305,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1307,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1308,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1311,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1314,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1315,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1316,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1317,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1317,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1318
      start: 1296
    functionDepth: 1
    functionLinenumber: 1296
    functionLinenumberEnd: 1318
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::http_response
    - brpc::policy::ParseH2Message
    - MakeH2EchoRequestBuf
    - brpc::Controller::Failed
    - SaveUint32
    - MakeH2EchoResponseBuf
    - brpc::Controller::Controller
    - get
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - brpc::Controller::ErrorCode
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_rst_before_header)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1321,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1323,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1325,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1327,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1328,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1330,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1331,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1332,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1335,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1338,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1338,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1339,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1340,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1341
      start: 1320
    functionDepth: 1
    functionLinenumber: 1320
    functionLinenumberEnd: 1341
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::http_response
    - brpc::policy::ParseH2Message
    - MakeH2EchoRequestBuf
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - SaveUint32
    - MakeH2EchoResponseBuf
    - brpc::Controller::Controller
    - get
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_rst_after_header_and_data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1344,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1345,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1348,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1349,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1350,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1351,1
    - Dst: brpc::H2Settings::H2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1354,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1355,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1356,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1357,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1358,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1359,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1359,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1361,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1363,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1366,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1366,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1368,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1372,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1372,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1373,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1373,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1374,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1374,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1376,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1376,1
    - Dst: brpc::policy::H2UnsentRequest*::DestroyStreamUserData
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1378,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1343
    functionDepth: 1
    functionLinenumber: 1343
    functionLinenumberEnd: 1380
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - brpc::policy::H2UnsentRequest*::DestroyStreamUserData
    - brpc::SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::H2Settings::H2Settings
    - brpc::policy::SerializeFrameHead
    - brpc::Controller::request_attachment
    - ASSERT_FALSE
    - get
    - test::EchoRequest::set_message
    - butil::Status::error_code
    - brpc::policy::ParseH2Message
    - brpc::Controller::call_id
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::Controller::http_request
    - butil::Status::ok
    - butil::Status::error_str
    - ASSERT_TRUE
    - brpc::policy::SerializeHttpRequest
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::PackH2Request
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_window_used_up)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::H2Settings::H2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1384,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1388,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1389,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1390,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1391,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1393,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1393,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1394,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1394,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1395,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1398,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1398,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1400,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1401,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1401,1
    - Dst: brpc::policy::H2Context*::ConsumeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1405,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1406,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1407,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1408,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1412
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1412
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - ASSERT_TRUE
    - brpc::policy::H2Context::H2Context
    - brpc::policy::ParseH2Message
    - brpc::policy::H2Context*::ConsumeFrameHead
    - brpc::policy::H2Context*::Init
    - butil::IOPortal::append_from_file_descriptor
    - CHECK_EQ
    - get
    - butil::IOPortal::IOPortal
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::H2Settings::H2Settings
    - initialize_parsing_context
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1416,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1419,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1419,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1422,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1426,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1426,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1429,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1433,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1433,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1414
    functionDepth: 1
    functionLinenumber: 1414
    functionLinenumberEnd: 1435
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_invalid_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1439,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1440,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1440,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1441,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1441,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1442,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1449,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1452,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1453,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1454,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1455,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1456,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1457,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1457,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1461,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1461,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1462,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1465,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1466,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1467,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1468,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1469,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1470,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1470,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1473,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1474,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1479,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1480,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1481,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1482,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1483,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1484,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1484,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1487,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1489
      start: 1437
    functionDepth: 1
    functionLinenumber: 1437
    functionLinenumberEnd: 1489
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::set_timeout_ms
    - brpc::SetTrackMeAddress
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - butil::my_ip
    - brpc::SocketUniquePtr::_agent_socket_id::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_not_closing_socket_when_rpc_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1495,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1497,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1500,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1502,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1504,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1507,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1507,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1510,1
    - Dst: parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1510,1
    - Dst: brpc::policy::H2Context*::hpacker
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1511,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1512,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1513,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1518,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1523,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1527,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1531,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1535,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1537,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1538,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1541,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1541,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1544,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1545,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1545,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1547,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1547,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1550,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1551,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1551,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1553,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1556,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1560,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1562,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1563,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1565,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1565,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1569,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1570,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1570,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1574,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1574,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1575,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1575,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1577,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1577,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1578,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1578,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1584,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1587
      start: 1491
    functionDepth: 1
    functionLinenumber: 1491
    functionLinenumberEnd: 1587
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MakeH2EchoRequestBuf
    - brpc::Controller::Failed
    - brpc::ParseResult::is_ok
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    - brpc::Controller::http_response
    - butil::IOBufAppender::move_to
    - test::EchoResponse::SerializeToZeroCopyStream
    - ASSERT_FALSE
    - butil::IOBufAppender::IOBufAppender
    - get
    - butil::string_printf
    - EXPECT_TRUE
    - ProcessMessage
    - test::EchoResponse::set_message
    - brpc::policy::ParseH2Message
    - butil::IOBuf::size
    - butil::IOBuf::Movable
    - Encode
    - parsing_context
    - static_cast<brpc::policy::H2Context*>
    - GetHeader
    - brpc::policy::H2Context*::hpacker
    - ASSERT_TRUE
    - brpc::HPackOptions::HPackOptions
    - content_type
    - brpc::Controller::Controller
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_header_after_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1590,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1592,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1594,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1596,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1597,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1600,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1601,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1602,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1603,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1606,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1606,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1607,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1607,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1609,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1610,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1610,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1613,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1614,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1614,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1617,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1621,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1622,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1623,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1625,1
    - Dst: butil::Status::error_data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1626
      start: 1589
    functionDepth: 2
    functionLinenumber: 1589
    functionLinenumberEnd: 1626
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MakeH2EchoRequestBuf
    - brpc::Controller::Failed
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::ParseResult::is_ok
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    - butil::Status::error_data
    - SaveUint32
    - get
    - brpc::ParseResult::error
    - ProcessMessage
    - butil::Status::error_code
    - brpc::policy::ParseH2Message
    - brpc::Controller::call_id
    - MakeH2EchoResponseBuf
    - ASSERT_TRUE
    - brpc::policy::PackH2Request
    - brpc::policy::H2UnsentRequest::New
    - SnappyDecompressIOBuf
    - brpc::Controller::Controller
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_goaway_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1631,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1631,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1633
      start: 1630
    functionDepth: 0
    functionLinenumber: 1630
    functionLinenumberEnd: 1633
    functionName: AfterRecevingGoAway::Run
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1640,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1642,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1645,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1645,1
    - Dst: AfterRecevingGoAway::AfterRecevingGoAway
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1650,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1652,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1652,1
    - Dst: set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1653,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1654,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1655,1
    - Dst: accept
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1658,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1659,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1661,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1663,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1664,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1666,1
    - Dst: need_shutdown_write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1666,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1670,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1637
    functionDepth: 1
    functionLinenumber: 1637
    functionLinenumberEnd: 1672
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - ASSERT_EQ
    - std::vector::push_back
    - brpc::Channel::CallMethod
    - bthread_usleep
    - ASSERT_GT
    - AfterRecevingGoAway::AfterRecevingGoAway
    - brpc::Join
    - SaveUint32
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - call_id
    - SerializeFrameHead
    - need_shutdown_write
    - accept
    - set_timeout_ms
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_handle_goaway_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1676,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1677,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1677,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1680,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1685,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1688,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1689,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1690,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1691,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1692,1
    - Dst: test::EchoRequest::SerializeAsString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1692,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1693,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1694,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1695,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: test::EchoResponse::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1697,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1697,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1699,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1701,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1702,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1703,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1704,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1705,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1706,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1706,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1707
      start: 1674
    functionDepth: 1
    functionLinenumber: 1674
    functionLinenumberEnd: 1707
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - test::EchoRequest::SerializeAsString
    - brpc::Controller::Controller
    - butil::my_ip
    - test::EchoResponse::ParseFromString
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, spring_protobuf_content_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1723,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1725,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1725,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1727,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1728,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1735,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1737,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1737,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1739,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1740,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1741,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1742,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1743,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1744,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1745,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1745,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1748,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1754,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1760,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1760,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1761,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1763,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1764,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1765,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1765,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1767,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1768,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1769,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1769,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1771,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1772,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1773,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1773,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1775,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1778,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1779,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1779,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1783,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1783,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1709
    functionDepth: 1
    functionLinenumber: 1709
    functionLinenumberEnd: 1791
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::reset_sampled_request
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - sleep
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - butil::DeleteFile
    - brpc::Channel::Channel
    - std::unique_ptr::release
    - ASSERT_NE
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::HttpMessage::body
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::HttpMessage::header
    - butil::FilePath
    - brpc::SampleIterator::Next
    - test::EchoResponse::message
    - json2pb::ProtoMessageToJson
    - brpc::Controller::http_request
    - brpc::HttpMessage::HttpMessage
    - ASSERT_TRUE
    - brpc::SampledRequest*::meta::protocol_type
    - brpc::Controller::Controller
    - butil::my_ip
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, dump_http_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1795,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1796,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1796,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1797,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1797,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1799,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1804,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1807,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1808,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1809,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1810,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1811,1
    - Dst: test::EchoRequest::Utf8DebugString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1811,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1812,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1813,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1814,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1814,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1815,1
    - Dst: google::protobuf::TextFormat::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1815,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1817,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1817,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1820,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1821,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1822,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1823,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1825,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1827
      start: 1793
    functionDepth: 1
    functionLinenumber: 1793
    functionLinenumberEnd: 1827
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - google::protobuf::TextFormat::ParseFromString
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - butil::my_ip
    - test::EchoRequest::Utf8DebugString
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, proto_text_content_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1831,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1832,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1832,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1833,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1833,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1835,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1840,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1843,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1844,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1845,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1846,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1848,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1849,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1849,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1850,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1852,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1852,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1855,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1856,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1856,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1857,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1857,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1860,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1861,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1862,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1863,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1864,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1864,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1866,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1866,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1867
      start: 1829
    functionDepth: 1
    functionLinenumber: 1829
    functionLinenumberEnd: 1867
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - json2pb::ProtoJsonToProtoMessage
    - ASSERT_FALSE
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - json2pb::ProtoMessageToProtoJson
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, proto_json_content_type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1877,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1877,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1878,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1879,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1881,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1881,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1882,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1884,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1887,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1871
    functionDepth: 1
    functionLinenumber: 1871
    functionLinenumberEnd: 1890
    functionName: HttpServiceImpl::Head
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::Controller*::http_response
    - ASSERT_NE
    - butil::StringToInt
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void Head(::google::protobuf::RpcController* cntl_base,\n        const
      ::test::HttpRequest*,\n        ::test::HttpResponse*,\n        ::google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1897,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1898,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1899,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1900,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1901,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1901,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1902,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1903
      start: 1892
    functionDepth: 0
    functionLinenumber: 1892
    functionLinenumberEnd: 1903
    functionName: HttpServiceImpl::Expect
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void Expect(::google::protobuf::RpcController* cntl_base,\n        const
      ::test::HttpRequest*,\n        ::test::HttpResponse*,\n        ::google::protobuf::Closure*
      done) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1908,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1910,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1910,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1911,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1911,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1913,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1918,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1919,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1920,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1921,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1921,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1922,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1924,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1924,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1924,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1927,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1928,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1929,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1932,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1933,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1934,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1937
      start: 1906
    functionDepth: 1
    functionLinenumber: 1906
    functionLinenumberEnd: 1937
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - ASSERT_NE
    - EXPECT_EQ
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - butil::IntToString
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http_head)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1944,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::HttpHeader*::method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1946,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1947,1
    - Dst: brpc::HttpHeader*::major_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1948,1
    - Dst: brpc::HttpHeader*::minor_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1949,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1959,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1961,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1962,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1963,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1964,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1971,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1972,1
    - Dst: brpc::HttpHeader*::HeaderBegin
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1975,1
    - Dst: brpc::HttpHeader*::HeaderEnd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1976,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1979,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1983,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1986,1
    - Dst: empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1987,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1987,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1993,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1997,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 3
    argNames:
    - out
    - h
    - ' remote_side'
    argTypes:
    - butil::IOBuf*
    - brpc::HttpHeader*
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1998
      start: 1941
    functionDepth: 1
    functionLinenumber: 1941
    functionLinenumberEnd: 1998
    functionName: MakeHttpRequestHeaders
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - brpc::HttpHeader*::content_type
    - brpc::HttpHeader*::uri
    - brpc::HttpHeader*::major_version
    - HttpMethod2Str
    - brpc::HttpHeader*::method
    - port
    - empty
    - host
    - brpc::HttpHeader*::HeaderBegin
    - brpc::HttpHeader*::HeaderEnd
    - butil::Base64Encode
    - brpc::HttpHeader*::minor_version
    - PrintWithoutHost
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::HttpHeader*::GetHeader
    linkageType: ''
    returnType: void
    signature: "void MakeHttpRequestHeaders(butil::IOBuf* out,\n                            brpc::HttpHeader*
      h,\n                            const butil::EndPoint& remote_side)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2005,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2005,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2005,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2007,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2007,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2007,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2010,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2011,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2013,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2013,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2014,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2015,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2015,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2016,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2018,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2018,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2019,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2023,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2023,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2023,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2024,1
    - Dst: reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2025,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2025,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2025,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2029,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2029,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 2
    argNames:
    - ' sock'
    - ' imsg_guard'
    argTypes:
    - brpc::SocketUniquePtr
    - brpc::DestroyingPtr<brpc::policy::HttpContext>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2030
      start: 2002
    functionDepth: 1
    functionLinenumber: 2002
    functionLinenumberEnd: 2030
    functionName: ReadOneResponse
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - static_cast<brpc::policy::HttpContext*>
    - brpc::ParseResult::is_ok
    - brpc::policy::ParseHttpMessage
    - reset
    - butil::IOPortal::empty
    - get
    - butil::IOPortal::IOPortal
    - bthread_fd_wait
    - LOG
    - brpc::ParseResult::error
    - butil::gettimeofday_us
    - butil::ToPrintableString
    - butil::IOPortal::append_from_file_descriptor
    - fd
    - ASSERT_TRUE
    - brpc::ParseResult::message
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void ReadOneResponse(brpc::SocketUniquePtr& sock,\n    brpc::DestroyingPtr<brpc::policy::HttpContext>&
      imsg_guard)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2034,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2039,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2040,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2040,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2044,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2048,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2049,1
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2050,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2051,1
    - Dst: brpc::HttpHeader::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2052,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2053,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2055,1
    - Dst: MakeHttpRequestHeaders
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2056,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2057,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2057,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2059,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2061,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2061,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2062,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2063,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2064,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2065,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2065,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2070,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2072,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2072,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2075,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2077,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2077,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2080,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2080,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2081
      start: 2032
    functionDepth: 2
    functionLinenumber: 2032
    functionLinenumberEnd: 2081
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::HttpHeader::SetHeader
    - brpc::DestroyingPtr::header
    - bthread_usleep
    - MakeHttpRequestHeaders
    - butil::EndPoint::EndPoint
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - std::to_string
    - EXPECT_EQ
    - LOG
    - Socket::Create
    - butil::gettimeofday_us
    - brpc::HttpHeader::set_method
    - butil::IOBuf::size
    - butil::ToPrintableString
    - brpc::Server::Start
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Write
    - ReadOneResponse
    - brpc::HttpHeader::HttpHeader
    - butil::str2endpoint
    - brpc::HttpHeader::uri
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http_expect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2104,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2105,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2105,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2106,1
    - Dst: brpc::policy::H2StreamContext::H2StreamContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2109,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2110,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2111,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2112,1
    - Dst: brpc::policy::H2StreamContext*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2115,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2119,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2124,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2125,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2129,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2130,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2134,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2134,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2139,1
    - Dst: std::string::length
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2145,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2147,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2148,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2149,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2149,1
    - Dst: brpc::policy::H2StreamContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2156
      start: 2084
    functionDepth: 1
    functionLinenumber: 2084
    functionLinenumberEnd: 2156
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::VerifyHttpRequest
    - brpc::policy::H2StreamContext::H2StreamContext
    - EXPECT_GT
    - brpc::policy::H2Context::H2Context
    - std::string::find
    - get
    - EXPECT_FALSE
    - butil::IOPortal::IOPortal
    - std::string::length
    - EXPECT_EQ
    - EXPECT_TRUE
    - butil::IOPortal::to_string
    - brpc::policy::H2StreamContext*::header
    - brpc::policy::H2StreamContext*::Destroy
    - brpc::policy::H2StreamContext*::Init
    - butil::IOPortal::append_from_file_descriptor
    - initialize_parsing_context
    - brpc::policy::H2Context*::Init
    - ioctl
    - ReAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, grpc_auth_failed_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2088
      start: 2088
    functionDepth: 0
    functionLinenumber: 2088
    functionLinenumberEnd: 2088
    functionName: FailingAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2091
      start: 2089
    functionDepth: 0
    functionLinenumber: 2089
    functionLinenumberEnd: 2091
    functionName: FailingAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2094
      start: 2092
    functionDepth: 0
    functionLinenumber: 2092
    functionLinenumberEnd: 2094
    functionName: FailingAuthenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2178,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2179,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2180,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2183,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2186,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2187,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2191,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2192,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2194,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2195,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2195,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2198,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2199,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2199,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2200,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2203,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2204,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2205,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2205,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2210,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2210,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2213,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2214,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2215,1
    - Dst: std::stoi
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2215,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2218,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2221,1
    - Dst: std::string*::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2221,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2224,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2230
      start: 2159
    functionDepth: 1
    functionLinenumber: 2159
    functionLinenumberEnd: 2230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<brpc::policy::HttpContext*>
    - brpc::policy::VerifyHttpRequest
    - EXPECT_GT
    - VerifyMessage
    - brpc::policy::ParseHttpMessage
    - std::string::find
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext*::Destroy
    - get
    - EXPECT_FALSE
    - butil::IOPortal::IOPortal
    - brpc::policy::HttpContext*::header
    - EXPECT_EQ
    - MakePostRequestMessage
    - brpc::ParseResult::error
    - std::string*::find
    - EXPECT_TRUE
    - std::stoi
    - butil::IOPortal::append_from_file_descriptor
    - ioctl
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http10_auth_failed_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2163
      start: 2163
    functionDepth: 0
    functionLinenumber: 2163
    functionLinenumberEnd: 2163
    functionName: FailingAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2166
      start: 2164
    functionDepth: 0
    functionLinenumber: 2164
    functionLinenumberEnd: 2166
    functionName: FailingAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2169
      start: 2167
    functionDepth: 0
    functionLinenumber: 2167
    functionLinenumberEnd: 2169
    functionName: FailingAuthenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:102,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:116,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:118,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:120,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:120,1
    - Dst: std::string*::data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:120,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 123
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - strtol
    - std::string*::data
    - ::test::EchoResponse*::set_message
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:129,1
    - Dst: AddBuiltinServices
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:130,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:130,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:139,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:144,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: brpc::get_client_side_messenger
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:150,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 152
    functionName: HttpTest::HttpTest
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - brpc::get_client_side_messenger
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    - AddBuiltinServices
    linkageType: ''
    returnType: void
    signature: void HttpTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: ~HttpTest()
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HttpTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:163,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - expect
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: HttpTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::VerifyHttpRequest
    - ReAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg, bool expect)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:169,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:172,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 177
    functionName: HttpTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:180,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:181,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:182,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:183,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:186,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:187,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:188,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 190
    functionName: HttpTest::MakePostRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - test::EchoRequest::set_message
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakePostRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:193,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:194,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:195,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:196,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:199,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:200,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:203,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 205
    functionName: HttpTest::MakePostProtoJsonRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - json2pb::ProtoMessageToProtoJson
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakePostProtoJsonRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:209,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:210,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:211,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:212,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:215,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:217,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 219
    functionName: HttpTest::MakePostProtoTextRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::HttpContext*::body
    - brpc::URI::Print
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: "brpc::policy::HttpContext * MakePostProtoTextRequestMessage(\n        const
      std::string& path)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:222,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:223,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 226
    functionName: HttpTest::MakeGetRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakeGetRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:230,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:231,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:232,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:235,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:236,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:237,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 239
    functionName: HttpTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::header
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakeResponseMessage(int code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:245,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:249,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:251,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:252,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:255,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:255,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:257,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:259,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:259,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 261
    functionName: HttpTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext*::header
    - static_cast<brpc::policy::HttpContext*>
    - ioctl
    - brpc::policy::HttpContext*::Destroy
    - brpc::ParseResult::error
    - get
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::policy::ParseHttpMessage
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:264,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:266,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:267,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:268,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:269,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:269,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:270,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:273,1
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:273,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:275,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:276,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - out
    - cntl
    - h2_stream_id
    argTypes:
    - butil::IOBuf*
    - brpc::Controller*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 278
    functionName: HttpTest::MakeH2EchoRequestBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::policy::SerializeHttpRequest
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::PackH2Request
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::Controller*::call_id
    - brpc::Controller*::Failed
    - brpc::SocketMessage*::AppendAndDestroySelf
    - get
    - butil::IOBuf::IOBuf
    - butil::Status::ok
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: void MakeH2EchoRequestBuf(butil::IOBuf* out, brpc::Controller* cntl,
      int* h2_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:281,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:283,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:284,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:286,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:287,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:287,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:289,1
    - Dst: brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:290,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:291,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - h2_stream_id
    argTypes:
    - butil::IOBuf*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 292
    functionName: HttpTest::MakeH2EchoResponseBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - brpc::policy::H2UnsentResponse::New
    - brpc::Controller::response_attachment
    - brpc::Controller::Controller
    - get
    - brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
    - brpc::Controller::http_request
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void MakeH2EchoResponseBuf(butil::IOBuf* out, int h2_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:310,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 314
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, indenting_ostream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:318,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:324,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:326,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:326,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:327,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:327,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:327,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:328,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:331,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:333,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:333,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:335,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:336,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:339,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:340,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:340,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:344,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 347
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - endpoint2str
    - std::string
    - std::string::c_str
    - brpc::policy::ParseHttpServerAddress
    - butil::EndPoint::EndPoint
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::ip2str
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, parse_http_address)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:352,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:353,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:354,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:357,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:358,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:359,1
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:363,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:364,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:365,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:366,1
    - Dst: MakePostProtoJsonRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:370,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:371,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:372,1
    - Dst: MakePostProtoTextRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:376,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:377,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 349
    functionDepth: 0
    functionLinenumber: 349
    functionLinenumberEnd: 380
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - MakePostProtoJsonRequestMessage
    - MakePostProtoTextRequestMessage
    - brpc::policy::HttpContext*::Destroy
    - MakeGetRequestMessage
    - SetFailed
    - VerifyMessage
    - MakePostRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, verify_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:383,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:384,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 388
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - SetFailed
    - MakePostRequestMessage
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:391,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:394,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:394,1
    - Dst: FindMethodPropertyByFullName
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:396,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:397,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:399,1
    - Dst: brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:399,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 401
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
    - MakeGetRequestMessage
    - FindMethodPropertyByFullName
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, reject_get_to_pb_services_with_required_fields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:404,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:407,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:407,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 409
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - MakePostRequestMessage
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:412,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:414,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:414,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 416
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - MakePostRequestMessage
    - _nerror_bvar::get_value
    - CheckResponseCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:420,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:423,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:426,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:427,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 428
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:432,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:433,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:433,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:435,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:437,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:438,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:438,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:441,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:442,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:442,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:444,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:446,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:447,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:448,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:451,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:452,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:452,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:454,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:456,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:457,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:458,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:461,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:462,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:462,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:463,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:465,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:466,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 468
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::Controller::http_response
    - MakeResponseMessage
    - set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:471,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:472,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:473,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:479,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:479,1
    - Dst: id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:479,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:482,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:483,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:484,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:484,1
    - Dst: brpc::policy::PackHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:485,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:486,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:488,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:488,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:492,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:493,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:493,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:494,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:495,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:496,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:499,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:500,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:502,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:503,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:503,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:504,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:505,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:508,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 470
    functionDepth: 1
    functionLinenumber: 470
    functionLinenumberEnd: 509
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::Failed
    - brpc::SetTrackMeAddress
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - id
    - brpc::policy::ParseHttpMessage
    - ASSERT_FALSE
    - get
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::ErrorText
    - brpc::Controller::call_id
    - brpc::policy::PackHttpRequest
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::SerializeHttpRequest
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:513,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:514,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:521,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:524,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:525,1
    - Dst: system
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:525,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:525,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: fgets
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:532,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 533
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - butil::string_printf
    - brpc::Server::AddService
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string::c_str
    - std::string
    - system
    - brpc::Server::Start
    - EXPECT_EQ
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, chunked_uploading)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:545,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - seq_no
    argTypes:
    - char*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 547
    functionName: CopyPAPrefixedWithSeqNo
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 5
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: void CopyPAPrefixedWithSeqNo(char* buf, uint64_t seq_no)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 557
    functionName: DownloadServiceImpl::DownloadServiceImpl
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DownloadServiceImpl(DonePlace done_place = DONE_BEFORE_CREATE_PA,\n
      \                       size_t num_repeat = 1)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:565,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:566,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:567,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:570,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:572,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:576,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:578,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:581,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:582,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:584,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:584,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:586,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:598,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:600,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:600,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:601,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:603,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 605
    functionName: DownloadServiceImpl::Download
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::SetFailed
    - bthread_usleep
    - butil::intrusive_ptr::get
    - ASSERT_GT
    - brpc::Controller*::http_response
    - brpc::Controller*::CreateProgressiveAttachment
    - butil::intrusive_ptr::reset
    - brpc::ClosureGuard::reset
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - LOG_EVERY_SECOND
    - CopyPAPrefixedWithSeqNo
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::Write
    linkageType: ''
    returnType: void
    signature: "void Download(::google::protobuf::RpcController* cntl_base,\n                  const
      ::test::HttpRequest*,\n                  ::test::HttpResponse*,\n                  ::google::protobuf::Closure*
      done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:613,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:614,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:615,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:618,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:620,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:625,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:627,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:627,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:628,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:639,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:640,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:644,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:644,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:645,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 646
    functionName: DownloadServiceImpl::DownloadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::SetFailed
    - bthread_usleep
    - butil::intrusive_ptr::get
    - brpc::Controller*::http_response
    - brpc::Controller*::CreateProgressiveAttachment
    - CHECK_EQ
    - brpc::ClosureGuard::reset
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG_EVERY_SECOND
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::Write
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: "void DownloadFailed(::google::protobuf::RpcController* cntl_base,\n
      \                       const ::test::HttpRequest*,\n                        ::test::HttpResponse*,\n
      \                       ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done_place
    argTypes:
    - DonePlace
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 648
    functionName: DownloadServiceImpl::set_done_place
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_done_place(DonePlace done_place)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    functionName: DownloadServiceImpl::written_bytes
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t written_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 650
    functionName: DownloadServiceImpl::ever_full
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ever_full() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 651
    functionName: DownloadServiceImpl::last_errno
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int last_errno() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:663,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:665,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:665,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: DownloadServiceImpl::set_done_place
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:669,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:670,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:674,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:675,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:676,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:677,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:677,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:677,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:680,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:681,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 661
    functionDepth: 1
    functionLinenumber: 661
    functionLinenumberEnd: 683
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - CopyPAPrefixedWithSeqNo
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Controller::http_request
    - DownloadServiceImpl::set_done_place
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_chunked_response_normally)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:687,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:688,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:692,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:697,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:698,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:699,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:700,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:703,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:703,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:704,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:705,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:705,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:707,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:707,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 685
    functionDepth: 1
    functionLinenumber: 685
    functionLinenumberEnd: 708
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::response_attachment
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - ASSERT_NE
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_failed_chunked_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<ReadBody>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:717,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 718
    functionName: ReadBody::ReadBody
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 5
    functionsReached:
    - butil::intrusive_ptr<ReadBody>
    linkageType: ''
    returnType: void
    signature: void ReadBody()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:723,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:723,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:723,1
    - Dst: append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:724,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:727,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:728,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:728,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:730,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:731,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:731,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:731,1
    - Dst: clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:733,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:736,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 720
    functionDepth: 1
    functionLinenumber: 720
    functionLinenumberEnd: 737
    functionName: ReadBody::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - memcmp
    - std::min
    - EXPECT_EQ
    - clear
    - data
    - size
    - CopyPAPrefixedWithSeqNo
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* data, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<ReadBody>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:739,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:740,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:744,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 745
    functionName: ReadBody::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - butil::intrusive_ptr<ReadBody>
    - data
    - size
    - ASSERT_LT
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 746
    functionDepth: 0
    functionLinenumber: 746
    functionLinenumberEnd: 746
    functionName: ReadBody::destroyed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool destroyed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 747
      start: 747
    functionDepth: 0
    functionLinenumber: 747
    functionLinenumberEnd: 747
    functionName: '& destroying_status() const'
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status & destroying_status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 748
    functionName: ReadBody::read_bytes
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t read_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:766,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:769,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:770,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:770,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:773,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:776,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:778,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:779,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:780,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:781,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:782,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:782,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:783,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:783,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:784,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:784,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:785,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:785,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:788,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:789,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:790,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:795,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:798,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:798,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:801,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:804,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:804,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:807,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:808,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:808,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:809,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 763
    functionDepth: 1
    functionLinenumber: 763
    functionLinenumberEnd: 810
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - usleep
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_long_body_progressively)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:813,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:815,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:818,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:818,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:819,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:819,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:821,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:824,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:826,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:827,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:828,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:829,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:830,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:830,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:830,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:832,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:832,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:833,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:833,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:836,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:842,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:843,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:845,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:846,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:846,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 848
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - DownloadServiceImpl::written_bytes
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_short_body_progressively)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:853,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:856,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:857,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:857,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:858,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:858,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:861,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:865,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:866,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:867,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:868,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:869,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:869,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:869,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:870,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:870,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:871,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:871,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:872,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:872,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:876,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:878,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:883,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:884,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:884,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:887,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:891,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:893,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:893,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 894
      start: 850
    functionDepth: 1
    functionLinenumber: 850
    functionLinenumberEnd: 894
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - usleep
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_progressively_after_cntl_destroys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:897,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:902,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:903,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:903,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:904,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:904,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:906,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:907,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:909,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:911,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:912,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:913,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:914,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:916,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:916,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:917,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:919,1
    - Dst: DownloadServiceImpl::ever_full
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:919,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:920,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:920,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:921,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:921,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:922,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:922,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:925,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:926,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:927,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:932,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:934,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:934,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:937,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:938,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:938,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:941,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:942,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:942,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:943,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:943,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 896
    functionDepth: 1
    functionLinenumber: 896
    functionLinenumberEnd: 944
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - DownloadServiceImpl::ever_full
    - usleep
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - LOG
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, read_progressively_after_long_delay)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:950,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:951,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:951,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:952,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:952,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:953,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:954,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:958,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:959,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:960,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:961,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:962,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:962,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:962,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:965,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:966,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:967,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:968,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:970,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:972,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 973
      start: 946
    functionDepth: 1
    functionLinenumber: 946
    functionLinenumberEnd: 973
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - DownloadServiceImpl::written_bytes
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, skip_progressive_reading)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:979,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 978
    functionDepth: 1
    functionLinenumber: 978
    functionLinenumberEnd: 980
    functionName: AlwaysFailRead::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:982,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 984
      start: 981
    functionDepth: 1
    functionLinenumber: 981
    functionLinenumberEnd: 984
    functionName: AlwaysFailRead::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:989,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:992,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:992,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:993,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:993,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:994,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:995,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:997,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:999,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1000,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1001,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1002,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1003,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1003,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1003,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1004,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1004,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: AlwaysFailRead::AlwaysFailRead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1007,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1008,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1009,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1009,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 987
    functionDepth: 1
    functionLinenumber: 987
    functionLinenumberEnd: 1010
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - ASSERT_NE
    - EXPECT_EQ
    - DownloadServiceImpl::last_errno
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - AlwaysFailRead::AlwaysFailRead
    - brpc::Controller::Controller
    - butil::my_ip
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, failed_on_read_one_part)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1013,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1015,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1021,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1026,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1027,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1028,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1029,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1030,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1030,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1030,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1031,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1031,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1032,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1032,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1036,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1037,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1038,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1043,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1046,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1046,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1047,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1048,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1049,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1052,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1053,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1053,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1054,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1054,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 1012
    functionDepth: 1
    functionLinenumber: 1012
    functionLinenumberEnd: 1055
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::get
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - ReadBody::ReadBody
    - brpc::ChannelOptions::ChannelOptions
    - butil::intrusive_ptr::reset
    - sleep
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - butil::intrusive_ptr::destroyed
    - usleep
    - EXPECT_EQ
    - LOG
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - brpc::Controller::http_request
    - brpc::Controller::response_will_be_read_progressively
    - ASSERT_TRUE
    - butil::intrusive_ptr::read_bytes
    - butil::intrusive_ptr::destroying_status
    - brpc::Server::Join
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, broken_socket_stops_progressive_reading)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1063
    functionDepth: 0
    functionLinenumber: 1063
    functionLinenumberEnd: 1065
    functionName: ServerProgressiveReader::ServerProgressiveReader
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerProgressiveReader(brpc::Controller* cntl, google::protobuf::Closure*
      done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<ReadBody>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1069,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1072,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1075,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1076,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1077
      start: 1068
    functionDepth: 1
    functionLinenumber: 1068
    functionLinenumberEnd: 1077
    functionName: ServerProgressiveReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - response_attachment
    - butil::intrusive_ptr<ReadBody>
    - data
    - size
    - ASSERT_LT
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1087
      start: 1085
    functionDepth: 0
    functionLinenumber: 1085
    functionLinenumberEnd: 1087
    functionName: ServerAlwaysFailReader::ServerAlwaysFailReader
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerAlwaysFailReader(brpc::Controller* cntl, google::protobuf::Closure*
      done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1091,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1090
    functionDepth: 1
    functionLinenumber: 1090
    functionLinenumberEnd: 1092
    functionName: ServerAlwaysFailReader::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1097,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1098,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1094
    functionDepth: 1
    functionLinenumber: 1094
    functionLinenumberEnd: 1100
    functionName: ServerAlwaysFailReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - CHECK_EQ
    - error_code
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1112,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1113,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1114,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1115,1
    - Dst: ServerProgressiveReader::ServerProgressiveReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::HttpRequest*
    - ::test::HttpResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1116
      start: 1108
    functionDepth: 1
    functionLinenumber: 1108
    functionLinenumberEnd: 1116
    functionName: UploadServiceImpl::Upload
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_will_be_read_progressively
    - ServerProgressiveReader::ServerProgressiveReader
    - UploadServiceImpl::check_header
    - static_cast<brpc::Controller*>
    - brpc::Controller*::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: "void Upload(::google::protobuf::RpcController* controller,\n                        const
      ::test::HttpRequest* request,\n                        ::test::HttpResponse*
      response,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1122,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1123,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1124,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    - Dst: ServerAlwaysFailReader::ServerAlwaysFailReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::HttpRequest*
    - ::test::HttpResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1126
      start: 1118
    functionDepth: 1
    functionLinenumber: 1118
    functionLinenumberEnd: 1126
    functionName: UploadServiceImpl::UploadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_will_be_read_progressively
    - ServerAlwaysFailReader::ServerAlwaysFailReader
    - UploadServiceImpl::check_header
    - static_cast<brpc::Controller*>
    - brpc::Controller*::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: "void UploadFailed(::google::protobuf::RpcController* controller,\n
      \                       const ::test::HttpRequest* request,\n                        ::test::HttpResponse*
      response,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1130,1
    - Dst: GOOGLE_CHECK_NOTNULL
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1131,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1133
      start: 1129
    functionDepth: 0
    functionLinenumber: 1129
    functionLinenumberEnd: 1133
    functionName: UploadServiceImpl::check_header
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 4
    functionsReached:
    - GOOGLE_CHECK_NOTNULL
    - CHECK_EQ
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: void check_header(brpc::Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1138,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1144,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1144,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1146,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1150,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1151,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1152,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1153,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1155,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1158,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1159,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1161,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1161,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1163,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1169,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1170,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1170,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1136
    functionDepth: 1
    functionLinenumber: 1136
    functionLinenumberEnd: 1171
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - LOG
    - CopyPAPrefixedWithSeqNo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, server_end_read_short_body_progressively)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1177,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1182,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1183,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1183,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1185,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1189,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1191,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1192,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1194,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1197,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1198,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1200,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1200,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1202,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1208,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1209,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1209,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1210
      start: 1175
    functionDepth: 1
    functionLinenumber: 1175
    functionLinenumberEnd: 1210
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - EXPECT_EQ
    - LOG
    - CopyPAPrefixedWithSeqNo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, server_end_read_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1216,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1219,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1222,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1226,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1230,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1231,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1232,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1233,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1234,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1235,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1235,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1241,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1243,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1244,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1245,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1246,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1247,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1249,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1255,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1256,1
    - Dst: brpc::SocketUniquePtr::GetAgentSocket
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1256,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1257,1
    - Dst: brpc::SocketUniquePtr::parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1257,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    - Dst: brpc::policy::H2Context*::_remote_window_left::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1213
    functionDepth: 1
    functionLinenumber: 1213
    functionLinenumberEnd: 1260
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::SetTrackMeAddress
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::EndPoint
    - brpc::SocketUniquePtr::parsing_context
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::SocketUniquePtr::GetAgentSocket
    - static_cast<brpc::policy::H2Context*>
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_GT
    - brpc::Controller::Controller
    - butil::my_ip
    - brpc::policy::H2Context*::_remote_window_left::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1264,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1267,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1269,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1271,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1273,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1275,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1276,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1278,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1281,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1282,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1282,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1284,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1284,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1285,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1262
    functionDepth: 1
    functionLinenumber: 1262
    functionLinenumberEnd: 1286
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::policy::ParseH2Message
    - MakeH2EchoRequestBuf
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - MakeH2EchoResponseBuf
    - brpc::Controller::Controller
    - get
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_ping)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1294
      start: 1288
    functionDepth: 0
    functionLinenumber: 1288
    functionLinenumberEnd: 1294
    functionName: SaveUint32
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint32(void* out, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1297,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1299,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1301,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1303,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1305,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1307,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1308,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1311,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1314,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1315,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1316,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1317,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1317,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1318
      start: 1296
    functionDepth: 1
    functionLinenumber: 1296
    functionLinenumberEnd: 1318
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::http_response
    - brpc::policy::ParseH2Message
    - MakeH2EchoRequestBuf
    - brpc::Controller::Failed
    - SaveUint32
    - MakeH2EchoResponseBuf
    - brpc::Controller::Controller
    - get
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - brpc::Controller::ErrorCode
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_rst_before_header)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1321,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1323,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1325,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1327,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1328,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1330,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1331,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1332,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1335,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1338,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1338,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1339,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1339,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1340,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1341
      start: 1320
    functionDepth: 1
    functionLinenumber: 1320
    functionLinenumberEnd: 1341
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::http_response
    - brpc::policy::ParseH2Message
    - MakeH2EchoRequestBuf
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - SaveUint32
    - MakeH2EchoResponseBuf
    - brpc::Controller::Controller
    - get
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_rst_after_header_and_data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1344,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1345,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1348,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1349,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1350,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1351,1
    - Dst: brpc::H2Settings::H2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1354,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1355,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1356,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1357,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1358,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1359,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1359,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1361,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1363,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1366,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1366,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1368,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1372,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1372,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1373,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1373,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1374,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1374,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1376,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1376,1
    - Dst: brpc::policy::H2UnsentRequest*::DestroyStreamUserData
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1378,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1343
    functionDepth: 1
    functionLinenumber: 1343
    functionLinenumberEnd: 1380
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - brpc::policy::H2UnsentRequest*::DestroyStreamUserData
    - brpc::SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::H2Settings::H2Settings
    - brpc::policy::SerializeFrameHead
    - brpc::Controller::request_attachment
    - ASSERT_FALSE
    - get
    - test::EchoRequest::set_message
    - butil::Status::error_code
    - brpc::policy::ParseH2Message
    - brpc::Controller::call_id
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::Controller::http_request
    - butil::Status::ok
    - butil::Status::error_str
    - ASSERT_TRUE
    - brpc::policy::SerializeHttpRequest
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::PackH2Request
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_window_used_up)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::H2Settings::H2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1384,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1388,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1389,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1390,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1391,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1393,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1393,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1394,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1394,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1395,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1398,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1398,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1400,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1401,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1401,1
    - Dst: brpc::policy::H2Context*::ConsumeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1405,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1406,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1407,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1408,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1412
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1412
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - ASSERT_TRUE
    - brpc::policy::H2Context::H2Context
    - brpc::policy::ParseH2Message
    - brpc::policy::H2Context*::ConsumeFrameHead
    - brpc::policy::H2Context*::Init
    - butil::IOPortal::append_from_file_descriptor
    - CHECK_EQ
    - get
    - butil::IOPortal::IOPortal
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::H2Settings::H2Settings
    - initialize_parsing_context
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1416,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1419,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1419,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1422,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1426,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1426,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1429,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1433,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1433,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1414
    functionDepth: 1
    functionLinenumber: 1414
    functionLinenumberEnd: 1435
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_invalid_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1439,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1440,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1440,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1441,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1441,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1442,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1449,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1452,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1453,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1454,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1455,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1456,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1457,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1457,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1461,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1461,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1462,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1465,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1466,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1467,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1468,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1469,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1470,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1470,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1473,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1474,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1479,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1480,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1481,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1482,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1483,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1484,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1484,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1487,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1489
      start: 1437
    functionDepth: 1
    functionLinenumber: 1437
    functionLinenumberEnd: 1489
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::set_timeout_ms
    - brpc::SetTrackMeAddress
    - brpc::Server::AddService
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - butil::my_ip
    - brpc::SocketUniquePtr::_agent_socket_id::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_not_closing_socket_when_rpc_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1495,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1497,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1500,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1502,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1504,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1507,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1507,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1510,1
    - Dst: parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1510,1
    - Dst: brpc::policy::H2Context*::hpacker
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1511,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1512,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1513,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1518,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1523,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1527,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1531,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1535,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1537,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1538,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1541,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1541,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1544,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1545,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1545,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1547,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1547,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1550,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1551,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1551,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1553,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1556,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1560,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1562,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1563,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1565,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1565,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1569,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1570,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1570,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1574,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1574,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1575,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1575,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1577,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1577,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1578,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1578,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1584,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1587
      start: 1491
    functionDepth: 1
    functionLinenumber: 1491
    functionLinenumberEnd: 1587
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MakeH2EchoRequestBuf
    - brpc::Controller::Failed
    - brpc::ParseResult::is_ok
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    - brpc::Controller::http_response
    - butil::IOBufAppender::move_to
    - test::EchoResponse::SerializeToZeroCopyStream
    - ASSERT_FALSE
    - butil::IOBufAppender::IOBufAppender
    - get
    - butil::string_printf
    - EXPECT_TRUE
    - ProcessMessage
    - test::EchoResponse::set_message
    - brpc::policy::ParseH2Message
    - butil::IOBuf::size
    - butil::IOBuf::Movable
    - Encode
    - parsing_context
    - static_cast<brpc::policy::H2Context*>
    - GetHeader
    - brpc::policy::H2Context*::hpacker
    - ASSERT_TRUE
    - brpc::HPackOptions::HPackOptions
    - content_type
    - brpc::Controller::Controller
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_header_after_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1590,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1592,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1594,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1596,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1597,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1600,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1601,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1602,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1603,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1606,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1606,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1607,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1607,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1609,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1610,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1610,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1613,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1614,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1614,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1617,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1621,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1622,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1623,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1625,1
    - Dst: butil::Status::error_data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1626
      start: 1589
    functionDepth: 2
    functionLinenumber: 1589
    functionLinenumberEnd: 1626
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MakeH2EchoRequestBuf
    - brpc::Controller::Failed
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::ParseResult::is_ok
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::SerializeFrameHead
    - butil::Status::error_data
    - SaveUint32
    - get
    - brpc::ParseResult::error
    - ProcessMessage
    - butil::Status::error_code
    - brpc::policy::ParseH2Message
    - brpc::Controller::call_id
    - MakeH2EchoResponseBuf
    - ASSERT_TRUE
    - brpc::policy::PackH2Request
    - brpc::policy::H2UnsentRequest::New
    - SnappyDecompressIOBuf
    - brpc::Controller::Controller
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_goaway_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1631,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1631,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1633
      start: 1630
    functionDepth: 0
    functionLinenumber: 1630
    functionLinenumberEnd: 1633
    functionName: AfterRecevingGoAway::Run
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1640,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1642,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1645,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1645,1
    - Dst: AfterRecevingGoAway::AfterRecevingGoAway
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1650,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1652,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1652,1
    - Dst: set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1653,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1654,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1655,1
    - Dst: accept
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1658,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1659,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1661,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1663,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1664,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1666,1
    - Dst: need_shutdown_write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1666,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1670,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1637
    functionDepth: 1
    functionLinenumber: 1637
    functionLinenumberEnd: 1672
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - ASSERT_EQ
    - std::vector::push_back
    - brpc::Channel::CallMethod
    - bthread_usleep
    - ASSERT_GT
    - AfterRecevingGoAway::AfterRecevingGoAway
    - brpc::Join
    - SaveUint32
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - call_id
    - SerializeFrameHead
    - need_shutdown_write
    - accept
    - set_timeout_ms
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_handle_goaway_streams)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1676,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1677,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1677,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1680,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1685,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1688,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1689,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1690,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1691,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1692,1
    - Dst: test::EchoRequest::SerializeAsString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1692,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1693,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1694,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1695,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: test::EchoResponse::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1697,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1697,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1699,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1701,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1702,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1703,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1704,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1705,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1706,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1706,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1707
      start: 1674
    functionDepth: 1
    functionLinenumber: 1674
    functionLinenumberEnd: 1707
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - test::EchoRequest::SerializeAsString
    - brpc::Controller::Controller
    - butil::my_ip
    - test::EchoResponse::ParseFromString
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, spring_protobuf_content_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1723,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1725,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1725,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1727,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1728,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1735,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1737,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1737,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1739,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1740,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1741,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1742,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1743,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1744,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1745,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1745,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1748,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1754,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1760,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1760,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1761,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1763,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1764,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1765,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1765,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1767,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1768,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1769,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1769,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1771,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1772,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1773,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1773,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1775,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1778,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1779,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1779,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1783,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1783,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1709
    functionDepth: 1
    functionLinenumber: 1709
    functionLinenumberEnd: 1791
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::reset_sampled_request
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - sleep
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - butil::DeleteFile
    - brpc::Channel::Channel
    - std::unique_ptr::release
    - ASSERT_NE
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::HttpMessage::body
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::HttpMessage::header
    - butil::FilePath
    - brpc::SampleIterator::Next
    - test::EchoResponse::message
    - json2pb::ProtoMessageToJson
    - brpc::Controller::http_request
    - brpc::HttpMessage::HttpMessage
    - ASSERT_TRUE
    - brpc::SampledRequest*::meta::protocol_type
    - brpc::Controller::Controller
    - butil::my_ip
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, dump_http_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1795,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1796,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1796,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1797,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1797,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1799,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1804,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1807,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1808,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1809,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1810,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1811,1
    - Dst: test::EchoRequest::Utf8DebugString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1811,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1812,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1813,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1814,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1814,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1815,1
    - Dst: google::protobuf::TextFormat::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1815,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1817,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1817,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1820,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1821,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1822,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1823,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1825,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1827
      start: 1793
    functionDepth: 1
    functionLinenumber: 1793
    functionLinenumberEnd: 1827
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - google::protobuf::TextFormat::ParseFromString
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - butil::my_ip
    - test::EchoRequest::Utf8DebugString
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, proto_text_content_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1831,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1832,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1832,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1833,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1833,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1835,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1840,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1843,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1844,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1845,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1846,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1848,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1849,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1849,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1850,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1852,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1852,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1855,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1856,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1856,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1857,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1857,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1860,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1861,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1862,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1863,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1864,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1864,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1866,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1866,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1867
      start: 1829
    functionDepth: 1
    functionLinenumber: 1829
    functionLinenumberEnd: 1867
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::Controller::request_attachment
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - json2pb::ProtoJsonToProtoMessage
    - ASSERT_FALSE
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - ASSERT_TRUE
    - json2pb::ProtoMessageToProtoJson
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, proto_json_content_type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1876,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1877,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1877,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1878,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1879,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1881,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1881,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1882,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1884,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1887,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1871
    functionDepth: 1
    functionLinenumber: 1871
    functionLinenumberEnd: 1890
    functionName: HttpServiceImpl::Head
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::Controller*::http_response
    - ASSERT_NE
    - butil::StringToInt
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void Head(::google::protobuf::RpcController* cntl_base,\n        const
      ::test::HttpRequest*,\n        ::test::HttpResponse*,\n        ::google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1897,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1898,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1899,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1900,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1901,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1901,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1902,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1903
      start: 1892
    functionDepth: 0
    functionLinenumber: 1892
    functionLinenumberEnd: 1903
    functionName: HttpServiceImpl::Expect
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void Expect(::google::protobuf::RpcController* cntl_base,\n        const
      ::test::HttpRequest*,\n        ::test::HttpResponse*,\n        ::google::protobuf::Closure*
      done) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1908,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1910,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1910,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1911,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1911,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1913,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1918,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1919,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1920,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1921,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1921,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1922,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1924,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1924,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1924,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1927,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1928,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1929,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1932,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1933,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1934,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1937
      start: 1906
    functionDepth: 1
    functionLinenumber: 1906
    functionLinenumberEnd: 1937
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::http_response
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - ASSERT_NE
    - EXPECT_EQ
    - brpc::Controller::ErrorText
    - butil::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Controller::http_request
    - butil::IntToString
    - brpc::Controller::Controller
    - butil::my_ip
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http_head)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1944,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::HttpHeader*::method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1946,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1947,1
    - Dst: brpc::HttpHeader*::major_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1948,1
    - Dst: brpc::HttpHeader*::minor_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1949,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1959,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1961,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1962,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1963,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1964,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1971,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1972,1
    - Dst: brpc::HttpHeader*::HeaderBegin
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1975,1
    - Dst: brpc::HttpHeader*::HeaderEnd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1976,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1979,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1983,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1986,1
    - Dst: empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1987,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1987,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1993,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1997,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 3
    argNames:
    - out
    - h
    - ' remote_side'
    argTypes:
    - butil::IOBuf*
    - brpc::HttpHeader*
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1998
      start: 1941
    functionDepth: 1
    functionLinenumber: 1941
    functionLinenumberEnd: 1998
    functionName: MakeHttpRequestHeaders
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - brpc::HttpHeader*::content_type
    - brpc::HttpHeader*::uri
    - brpc::HttpHeader*::major_version
    - HttpMethod2Str
    - brpc::HttpHeader*::method
    - port
    - empty
    - host
    - brpc::HttpHeader*::HeaderBegin
    - brpc::HttpHeader*::HeaderEnd
    - butil::Base64Encode
    - brpc::HttpHeader*::minor_version
    - PrintWithoutHost
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::HttpHeader*::GetHeader
    linkageType: ''
    returnType: void
    signature: "void MakeHttpRequestHeaders(butil::IOBuf* out,\n                            brpc::HttpHeader*
      h,\n                            const butil::EndPoint& remote_side)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2005,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2005,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2005,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2007,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2007,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2007,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2010,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2011,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2013,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2013,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2014,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2015,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2015,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2016,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2018,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2018,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2019,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2023,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2023,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2023,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2024,1
    - Dst: reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2025,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2025,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2025,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2029,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2029,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 2
    argNames:
    - ' sock'
    - ' imsg_guard'
    argTypes:
    - brpc::SocketUniquePtr
    - brpc::DestroyingPtr<brpc::policy::HttpContext>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2030
      start: 2002
    functionDepth: 1
    functionLinenumber: 2002
    functionLinenumberEnd: 2030
    functionName: ReadOneResponse
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - static_cast<brpc::policy::HttpContext*>
    - brpc::ParseResult::is_ok
    - brpc::policy::ParseHttpMessage
    - reset
    - butil::IOPortal::empty
    - get
    - butil::IOPortal::IOPortal
    - bthread_fd_wait
    - LOG
    - brpc::ParseResult::error
    - butil::gettimeofday_us
    - butil::ToPrintableString
    - butil::IOPortal::append_from_file_descriptor
    - fd
    - ASSERT_TRUE
    - brpc::ParseResult::message
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void ReadOneResponse(brpc::SocketUniquePtr& sock,\n    brpc::DestroyingPtr<brpc::policy::HttpContext>&
      imsg_guard)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2034,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2039,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2040,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2040,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2044,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2048,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2049,1
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2050,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2051,1
    - Dst: brpc::HttpHeader::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2052,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2053,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2055,1
    - Dst: MakeHttpRequestHeaders
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2056,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2057,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2057,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2059,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2061,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2061,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2062,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2063,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2064,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2065,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2065,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2070,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2072,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2072,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2075,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2077,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2077,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2080,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2080,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2081
      start: 2032
    functionDepth: 2
    functionLinenumber: 2032
    functionLinenumberEnd: 2081
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::HttpHeader::SetHeader
    - brpc::DestroyingPtr::header
    - bthread_usleep
    - MakeHttpRequestHeaders
    - butil::EndPoint::EndPoint
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - std::to_string
    - EXPECT_EQ
    - LOG
    - Socket::Create
    - butil::gettimeofday_us
    - brpc::HttpHeader::set_method
    - butil::IOBuf::size
    - butil::ToPrintableString
    - brpc::Server::Start
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Write
    - ReadOneResponse
    - brpc::HttpHeader::HttpHeader
    - butil::str2endpoint
    - brpc::HttpHeader::uri
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http_expect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2104,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2105,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2105,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2106,1
    - Dst: brpc::policy::H2StreamContext::H2StreamContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2109,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2110,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2111,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2112,1
    - Dst: brpc::policy::H2StreamContext*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2115,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2119,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2124,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2125,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2129,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2130,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2134,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2134,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2139,1
    - Dst: std::string::length
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2145,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2147,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2148,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2149,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2149,1
    - Dst: brpc::policy::H2StreamContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2156
      start: 2084
    functionDepth: 1
    functionLinenumber: 2084
    functionLinenumberEnd: 2156
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::VerifyHttpRequest
    - brpc::policy::H2StreamContext::H2StreamContext
    - EXPECT_GT
    - brpc::policy::H2Context::H2Context
    - std::string::find
    - get
    - EXPECT_FALSE
    - butil::IOPortal::IOPortal
    - std::string::length
    - EXPECT_EQ
    - EXPECT_TRUE
    - butil::IOPortal::to_string
    - brpc::policy::H2StreamContext*::header
    - brpc::policy::H2StreamContext*::Destroy
    - brpc::policy::H2StreamContext*::Init
    - butil::IOPortal::append_from_file_descriptor
    - initialize_parsing_context
    - brpc::policy::H2Context*::Init
    - ioctl
    - ReAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, grpc_auth_failed_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2088
      start: 2088
    functionDepth: 0
    functionLinenumber: 2088
    functionLinenumberEnd: 2088
    functionName: FailingAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2091
      start: 2089
    functionDepth: 0
    functionLinenumber: 2089
    functionLinenumberEnd: 2091
    functionName: FailingAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2094
      start: 2092
    functionDepth: 0
    functionLinenumber: 2092
    functionLinenumberEnd: 2094
    functionName: FailingAuthenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2178,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2179,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2180,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2183,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2186,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2187,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2191,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2192,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2194,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2195,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2195,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2198,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2199,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2199,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2200,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2203,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2204,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2205,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2205,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2210,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2210,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2213,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2214,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2215,1
    - Dst: std::stoi
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2215,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2218,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2221,1
    - Dst: std::string*::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2221,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2224,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2230
      start: 2159
    functionDepth: 1
    functionLinenumber: 2159
    functionLinenumberEnd: 2230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<brpc::policy::HttpContext*>
    - brpc::policy::VerifyHttpRequest
    - EXPECT_GT
    - VerifyMessage
    - brpc::policy::ParseHttpMessage
    - std::string::find
    - brpc::policy::HttpContext*::body
    - brpc::policy::HttpContext*::Destroy
    - get
    - EXPECT_FALSE
    - butil::IOPortal::IOPortal
    - brpc::policy::HttpContext*::header
    - EXPECT_EQ
    - MakePostRequestMessage
    - brpc::ParseResult::error
    - std::string*::find
    - EXPECT_TRUE
    - std::stoi
    - butil::IOPortal::append_from_file_descriptor
    - ioctl
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http10_auth_failed_response)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2163
      start: 2163
    functionDepth: 0
    functionLinenumber: 2163
    functionLinenumberEnd: 2163
    functionName: FailingAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2166
      start: 2164
    functionDepth: 0
    functionLinenumber: 2164
    functionLinenumberEnd: 2166
    functionName: FailingAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2169
      start: 2167
    functionDepth: 0
    functionLinenumber: 2167
    functionLinenumberEnd: 2169
    functionName: FailingAuthenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileDescriptor*::dependency_count
      Src: /src/brpc/test/brpc_proto_unittest.cpp:33,1
    - Dst: FileDescriptor*::dependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:34,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:35,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:37,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:38,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:38,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:42,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - file_desc
    - pool
    argTypes:
    - FileDescriptor*
    - DescriptorPool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 43
    functionName: BuildDependency
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_TRUE
    - BuildDependency
    - FileDescriptor*::CopyTo
    - DescriptorPool*::BuildFile
    - FileDescriptor*::dependency
    - FileDescriptor*::dependency_count
    linkageType: ''
    returnType: void
    signature: void BuildDependency(const FileDescriptor *file_desc, DescriptorPool
      *pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: policy::RpcMeta::GetDescriptor
      Src: /src/brpc/test/brpc_proto_unittest.cpp:47,1
    - Dst: Descriptor*::file
      Src: /src/brpc/test/brpc_proto_unittest.cpp:48,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:51,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:53,1
    - Dst: DescriptorPool::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:55,1
    - Dst: FileDescriptor*::FindMessageTypeByName
      Src: /src/brpc/test/brpc_proto_unittest.cpp:56,1
    - Dst: Descriptor*::name
      Src: /src/brpc/test/brpc_proto_unittest.cpp:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:57,1
    - Dst: policy::RpcMeta::set_correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:60,1
    - Dst: policy::RpcMeta::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:60,1
    - Dst: DynamicMessageFactory::GetPrototype
      Src: /src/brpc/test/brpc_proto_unittest.cpp:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:62,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:63,1
    - Dst: Message*::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: Message*::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:66,1
    - Dst: policy::RpcMeta::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    - Dst: policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 68
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - Descriptor*::name
    - ASSERT_TRUE
    - ASSERT_EQ
    - Message*::SerializeToString
    - BuildDependency
    - policy::RpcMeta::ParseFromString
    - DescriptorPool::BuildFile
    - FileDescriptor*::CopyTo
    - DynamicMessageFactory::GetPrototype
    - FileDescriptor*::FindMessageTypeByName
    - policy::RpcMeta::correlation_id
    - Descriptor*::file
    - policy::RpcMeta::set_correlation_id
    - policy::RpcMeta::SerializeToString
    - Message*::ParseFromString
    - policy::RpcMeta::GetDescriptor
    linkageType: ''
    returnType: void
    signature: void TEST(ProtoTest, proto)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::Message1::set_stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:74,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:74,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:76,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message1::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message2::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message1::set_stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:79,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:79,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 81
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - test::Message1::set_stat
    - test::Message2::ParseFromString
    - ASSERT_FALSE
    - test::Message2::stat
    - test::Message1::SerializeToString
    - test::Message1::stat
    linkageType: ''
    returnType: void
    signature: void TEST(ProtoTest, required_enum)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileDescriptor*::dependency_count
      Src: /src/brpc/test/brpc_proto_unittest.cpp:33,1
    - Dst: FileDescriptor*::dependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:34,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:35,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:37,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:38,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:38,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:42,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - file_desc
    - pool
    argTypes:
    - FileDescriptor*
    - DescriptorPool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 43
    functionName: BuildDependency
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_TRUE
    - BuildDependency
    - FileDescriptor*::CopyTo
    - DescriptorPool*::BuildFile
    - FileDescriptor*::dependency
    - FileDescriptor*::dependency_count
    linkageType: ''
    returnType: void
    signature: void BuildDependency(const FileDescriptor *file_desc, DescriptorPool
      *pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: policy::RpcMeta::GetDescriptor
      Src: /src/brpc/test/brpc_proto_unittest.cpp:47,1
    - Dst: Descriptor*::file
      Src: /src/brpc/test/brpc_proto_unittest.cpp:48,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:51,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:53,1
    - Dst: DescriptorPool::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:55,1
    - Dst: FileDescriptor*::FindMessageTypeByName
      Src: /src/brpc/test/brpc_proto_unittest.cpp:56,1
    - Dst: Descriptor*::name
      Src: /src/brpc/test/brpc_proto_unittest.cpp:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:57,1
    - Dst: policy::RpcMeta::set_correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:60,1
    - Dst: policy::RpcMeta::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:60,1
    - Dst: DynamicMessageFactory::GetPrototype
      Src: /src/brpc/test/brpc_proto_unittest.cpp:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:62,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:63,1
    - Dst: Message*::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: Message*::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:66,1
    - Dst: policy::RpcMeta::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    - Dst: policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 68
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - Descriptor*::name
    - ASSERT_TRUE
    - ASSERT_EQ
    - Message*::SerializeToString
    - BuildDependency
    - policy::RpcMeta::ParseFromString
    - DescriptorPool::BuildFile
    - FileDescriptor*::CopyTo
    - DynamicMessageFactory::GetPrototype
    - FileDescriptor*::FindMessageTypeByName
    - policy::RpcMeta::correlation_id
    - Descriptor*::file
    - policy::RpcMeta::set_correlation_id
    - policy::RpcMeta::SerializeToString
    - Message*::ParseFromString
    - policy::RpcMeta::GetDescriptor
    linkageType: ''
    returnType: void
    signature: void TEST(ProtoTest, proto)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::Message1::set_stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:74,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:74,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:76,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message1::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message2::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message1::set_stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:79,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:79,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 81
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - test::Message1::set_stat
    - test::Message2::ParseFromString
    - ASSERT_FALSE
    - test::Message2::stat
    - test::Message1::SerializeToString
    - test::Message1::stat
    linkageType: ''
    returnType: void
    signature: void TEST(ProtoTest, required_enum)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: StatusTest::StatusTest
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StatusTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~StatusTest()
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StatusTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/status_unittest.cpp:29,1
    - Dst: time
      Src: /src/brpc/test/status_unittest.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: StatusTest::SetUp
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::Status
      Src: /src/brpc/test/status_unittest.cpp:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:39,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:40,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:40,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:41,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:42,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:42,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:45,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:48,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:49,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:49,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:50,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:51,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:51,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:54,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:54,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/status_unittest.cpp:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:57,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:58,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:58,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:59,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:60,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:60,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:63,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 64
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_STREQ
    - butil::Status::Status
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::OK
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, success_status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:73,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:74,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:74,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:75,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:76,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:76,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:79,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:82,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:83,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:83,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:86,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:91,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:92,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:92,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:93,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:94,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:94,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:97,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:97,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:100,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:101,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:101,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:109,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:110,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:110,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:111,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:112,1
    - Dst: std::string
      Src: /src/brpc/test/status_unittest.cpp:112,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:112,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:115,1
    - Dst: std::string
      Src: /src/brpc/test/status_unittest.cpp:115,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 116
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - std::string
    - ASSERT_STREQ
    - ASSERT_FALSE
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, failed_status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:136,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:137,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:137,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:138,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:139,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:139,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:142,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:144,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:144,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:145,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:146,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:146,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:153,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:153,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:154,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:155,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:155,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:156,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:157,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:157,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:160,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:160,1
    - Dst: butil::Status::reset
      Src: /src/brpc/test/status_unittest.cpp:162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:163,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:164,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:164,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:165,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:166,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:166,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:169,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:171,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:171,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:172,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:173,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:173,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:174,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:175,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:175,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:178,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 179
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_TRUE
    - ASSERT_STREQ
    - ASSERT_FALSE
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::reset
    - butil::Status::set_error
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:185,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:186,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:186,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:187,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:188,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:188,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:191,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:191,1
    - Dst: butil::Status::Status
      Src: /src/brpc/test/status_unittest.cpp:193,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:194,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:195,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:195,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:196,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:197,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:197,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:200,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:200,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:203,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:204,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:204,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:205,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:206,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:206,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:209,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:211,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:211,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:212,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:213,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:213,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:220,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:221,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:221,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:222,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:223,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:223,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:226,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:226,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:229,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:230,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:230,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:237,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:237,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:238,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:239,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:239,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:240,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:241,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:241,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:244,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:248,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:249,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:249,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:250,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:251,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:251,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:254,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_TRUE
    - ASSERT_STREQ
    - butil::Status::Status
    - ASSERT_FALSE
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::set_error
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:261,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/test/status_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:263,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/test/status_unittest.cpp:263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:265,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:266,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:266,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:267,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:267,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:270,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:270,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 271
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_STREQ
    - ASSERT_FALSE
    - butil::StringPiece::as_string
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, message_has_zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: StatusTest::StatusTest
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StatusTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~StatusTest()
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StatusTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/status_unittest.cpp:29,1
    - Dst: time
      Src: /src/brpc/test/status_unittest.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: StatusTest::SetUp
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::Status
      Src: /src/brpc/test/status_unittest.cpp:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:39,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:40,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:40,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:41,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:42,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:42,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:45,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:45,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:48,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:49,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:49,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:50,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:51,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:51,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:54,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:54,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/status_unittest.cpp:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:57,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:58,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:58,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:59,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:60,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:60,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:63,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 64
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_STREQ
    - butil::Status::Status
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::OK
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, success_status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:73,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:74,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:74,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:75,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:76,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:76,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:79,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:82,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:83,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:83,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:86,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:91,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:92,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:92,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:93,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:94,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:94,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:97,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:97,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:100,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:101,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:101,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:109,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:110,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:110,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:111,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:112,1
    - Dst: std::string
      Src: /src/brpc/test/status_unittest.cpp:112,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:112,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:115,1
    - Dst: std::string
      Src: /src/brpc/test/status_unittest.cpp:115,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 116
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - std::string
    - ASSERT_STREQ
    - ASSERT_FALSE
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, failed_status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:136,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:137,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:137,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:138,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:139,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:139,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:142,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:144,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:144,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:145,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:146,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:146,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:153,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:153,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:154,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:155,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:155,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:156,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:157,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:157,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:160,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:160,1
    - Dst: butil::Status::reset
      Src: /src/brpc/test/status_unittest.cpp:162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:163,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:164,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:164,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:165,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:166,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:166,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:169,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:171,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:171,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:172,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:173,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:173,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:174,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:175,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:175,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:178,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 179
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_TRUE
    - ASSERT_STREQ
    - ASSERT_FALSE
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::reset
    - butil::Status::set_error
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:185,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:186,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:186,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:187,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:188,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:188,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:191,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:191,1
    - Dst: butil::Status::Status
      Src: /src/brpc/test/status_unittest.cpp:193,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/status_unittest.cpp:194,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:195,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:195,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:196,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:197,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:197,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:200,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:200,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:203,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:204,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:204,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:205,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:206,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:206,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:209,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:211,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:211,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:212,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:213,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:213,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:220,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:221,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:221,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:222,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:223,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:223,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:226,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:226,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:229,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:230,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:230,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:237,1
    - Dst: butil::Status::set_error
      Src: /src/brpc/test/status_unittest.cpp:237,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:238,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:239,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:239,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:240,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:241,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:241,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:244,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:248,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:249,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:249,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:250,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:251,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:251,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:254,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_TRUE
    - ASSERT_STREQ
    - butil::Status::Status
    - ASSERT_FALSE
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::set_error
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:261,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/test/status_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:263,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/test/status_unittest.cpp:263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/status_unittest.cpp:265,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/status_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:266,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/status_unittest.cpp:266,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/status_unittest.cpp:267,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/test/status_unittest.cpp:267,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/status_unittest.cpp:270,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/status_unittest.cpp:270,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/status_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 271
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/status_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Status::error_code
    - std::ostringstream::str
    - ASSERT_STREQ
    - ASSERT_FALSE
    - butil::StringPiece::as_string
    - butil::Status::error_cstr
    - butil::Status::error_str
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void TEST_F(StatusTest, message_has_zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:71,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 28
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: ~EchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:84,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:86,1
    - Dst: brpc::Controller*::log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:86,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:87,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:88,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:88,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:91,1
    - Dst: brpc::Controller*::trace_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:91,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 93
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::trace_id
    - test::EchoResponse*::set_message
    - bthread_usleep
    - snprintf
    - brpc::Controller*::log_id
    - test::EchoRequest*::sleep_us
    - static_cast<brpc::Controller*>
    - TRACEPRINTF
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* req,\n                      test::EchoResponse* res,\n                      google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: ClosureChecker::ClosureChecker
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClosureChecker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: ~ClosureChecker()
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ~ClosureChecker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 103
    functionName: ClosureChecker::Run
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VLOG
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: MyVLogSite
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - VLOG
    linkageType: ''
    returnType: void
    signature: void MyVLogSite()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:114,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' cntl'
    - name
    argTypes:
    - brpc::Controller
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: CheckContent
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - find
    - response_attachment
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void CheckContent(const brpc::Controller& cntl, const char* name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' cntl'
    - error
    argTypes:
    - brpc::Controller
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: CheckErrorText
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ErrorText
    linkageType: ''
    returnType: void
    signature: void CheckErrorText(const brpc::Controller& cntl, const char* error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:126,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:131,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:131,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:131,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - ' cntl'
    - name
    - expect
    argTypes:
    - brpc::Controller
    - char*
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 133
    functionName: CheckFieldInContent
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - response_attachment
    - ASSERT_EQ
    - find
    - c_str
    - sscanf
    - strlen
    linkageType: ''
    returnType: void
    signature: "void CheckFieldInContent(const brpc::Controller& cntl,\n                         const
      char* name, int32_t expect)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:136,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:138,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' cntl'
    - expect
    argTypes:
    - brpc::Controller
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: CheckAnnotation
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - find
    - response_attachment
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void CheckAnnotation(const brpc::Controller& cntl, int64_t expect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:145,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:146,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' cntl'
    - ' expect_id_str'
    argTypes:
    - brpc::Controller
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: CheckTraceId
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - find
    - response_attachment
    - ASSERT_TRUE
    - std::string
    linkageType: ''
    returnType: void
    signature: "void CheckTraceId(const brpc::Controller& cntl,\n                  const
      std::string& expect_id_str)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: BuiltinServiceTest::BuiltinServiceTest
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BuiltinServiceTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: ~BuiltinServiceTest()
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BuiltinServiceTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:155,1
    - Dst: AddBuiltinServices
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: BuiltinServiceTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - AddBuiltinServices
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::StopAndJoin
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: BuiltinServiceTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:159,1
    - Dst: Join
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:160,1
    - Dst: ClearServices
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 162
    functionName: BuiltinServiceTest::StopAndJoin
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 1
    functionsReached:
    - ClearServices
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void StopAndJoin()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:167,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - cntl
    - use_html
    argTypes:
    - brpc::Controller*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 170
    functionName: BuiltinServiceTest::SetUpController
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: void SetUpController(brpc::Controller* cntl, bool use_html) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:177,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:178,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:179,1
    - Dst: brpc::IndexService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:180,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:181,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:182,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 183
    functionName: BuiltinServiceTest::TestIndex
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::http_response
    - brpc::IndexService::default_method
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestIndex(bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:190,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:191,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:192,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:194,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:194,1
    - Dst: brpc::StatusService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:196,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:197,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:198,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:199,1
    - Dst: RemoveService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 200
    functionName: BuiltinServiceTest::TestStatus
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 4
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::http_response
    - EXPECT_EQ
    - brpc::StatusService::default_method
    - brpc::Controller::Failed
    - RemoveService
    - brpc::Controller::Controller
    - AddService
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - EchoServiceImpl::EchoServiceImpl
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestStatus(bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:208,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:209,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:210,1
    - Dst: MyVLogSite
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:211,1
    - Dst: brpc::VLogService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:212,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:213,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:214,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:214,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 202
    functionDepth: 2
    functionLinenumber: 202
    functionLinenumberEnd: 217
    functionName: BuiltinServiceTest::TestVLog
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::http_response
    - MyVLogSite
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - CheckContent
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - brpc::VLogService::default_method
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestVLog(bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:224,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:225,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:226,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:228,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:229,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:229,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:231,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:232,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:234,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:235,1
    - Dst: brpc::ConnectionsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:237,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:238,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:239,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:239,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:240,1
    - Dst: CheckFieldInContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:241,1
    - Dst: close
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:243,1
    - Dst: BuiltinServiceTest::StopAndJoin
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 245
    functionName: BuiltinServiceTest::TestConnections
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::http_response
    - CheckFieldInContent
    - EXPECT_FALSE
    - usleep
    - Start
    - EXPECT_EQ
    - ClosureChecker::ClosureChecker
    - tcp_connect
    - snprintf
    - ASSERT_GT
    - brpc::ConnectionsService::default_method
    - brpc::Controller::Controller
    - str2endpoint
    - CheckContent
    - BuiltinServiceTest::StopAndJoin
    - close
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestConnections(bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:252,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:253,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:254,1
    - Dst: brpc::BadMethodRequest::set_service_name
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:256,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:257,1
    - Dst: brpc::BadMethodService::no_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:259,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:259,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:260,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:260,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 263
    functionName: BuiltinServiceTest::TestBadMethod
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::http_response
    - EXPECT_EQ
    - CheckErrorText
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::BadMethodService::no_method
    - ClosureChecker::ClosureChecker
    - brpc::BadMethodRequest::set_service_name
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestBadMethod(bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:271,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:272,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:273,1
    - Dst: brpc::FlagsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:274,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:275,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:276,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:276,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:277,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:280,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:281,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:282,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:283,1
    - Dst: brpc::FlagsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:285,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:286,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:286,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:287,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:290,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:291,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:292,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:293,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:294,1
    - Dst: brpc::FlagsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:296,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:297,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:298,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:298,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:301,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:302,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:303,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:304,1
    - Dst: brpc::FlagsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:305,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:306,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:307,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:307,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:308,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 310
    functionName: BuiltinServiceTest::TestFlags
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::FlagsService::default_method
    - brpc::Controller::http_response
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::http_request
    - brpc::Controller::Controller
    - CheckContent
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestFlags(bool use_html)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:319,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:320,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:321,1
    - Dst: brpc::RpczService::disable
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:322,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:323,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:323,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:324,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:327,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:328,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:329,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:330,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:331,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:332,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:333,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:335,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:339,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:340,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:341,1
    - Dst: brpc::RpczService::stats
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:342,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:343,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:343,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:345,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:352,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:353,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:354,1
    - Dst: brpc::RpczService::enable
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:355,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:356,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:356,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:357,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:357,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:358,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:363,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:364,1
    - Dst: brpc::RpczService::hex_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:365,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:366,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:366,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:367,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:369,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:370,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:371,1
    - Dst: brpc::RpczService::dec_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:372,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:373,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:373,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:377,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:377,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:377,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:380,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:381,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:381,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:383,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:383,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:392,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:393,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:394,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:395,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:396,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:396,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:399,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:400,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:401,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:402,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:403,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:404,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:405,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:406,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:406,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:406,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:407,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:407,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:415,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:416,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:417,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:418,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:419,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:420,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:420,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:423,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:424,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:425,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:426,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:427,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:429,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:430,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:430,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:430,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:431,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:431,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:439,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:441,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:442,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:443,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:444,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:444,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:447,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:448,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:449,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:450,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:451,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:453,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:454,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:454,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:455,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:455,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:463,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:464,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:465,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:466,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:467,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:467,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:470,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:471,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:472,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:473,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:474,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:475,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:477,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:478,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:478,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:479,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:479,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:484,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:485,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:486,1
    - Dst: brpc::RpczService::stats
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:487,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:488,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:488,1
    - Dst: BuiltinServiceTest::StopAndJoin
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:493,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 96
    argCount: 3
    argNames:
    - enable
    - hex
    - use_html
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 494
    functionName: BuiltinServiceTest::TestRpcz
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Controller::Failed
    - brpc::Controller::set_log_id
    - brpc::RpczService::default_method
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::RpczService::dec_log_id
    - EXPECT_FALSE
    - usleep
    - Start
    - EXPECT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - brpc::RpczService::enable
    - ClosureChecker::ClosureChecker
    - brpc::RpczService::stats
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - snprintf
    - brpc::RpczService::disable
    - brpc::Channel::Init
    - AddService
    - test::EchoResponse::message
    - brpc::Controller::http_request
    - brpc::RpczService::hex_log_id
    - brpc::Controller::Controller
    - CheckContent
    - str2endpoint
    - BuiltinServiceTest::StopAndJoin
    - BuiltinServiceTest::SetUpController
    linkageType: ''
    returnType: void
    signature: void TestRpcz(bool enable, bool hex, bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestIndex
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:501,1
    - Dst: TestIndex
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 500
    functionDepth: 0
    functionLinenumber: 500
    functionLinenumberEnd: 503
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestIndex
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:510,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:511,1
    - Dst: set_version
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:512,1
    - Dst: brpc::VersionService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:513,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:514,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:515,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:515,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 505
    functionDepth: 1
    functionLinenumber: 505
    functionLinenumberEnd: 516
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - set_version
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::VersionService::default_method
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:523,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:524,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:525,1
    - Dst: brpc::HealthService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:526,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:527,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:528,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 529
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetUpController
    - brpc::HealthService::default_method
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, health)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:535,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:536,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 537
    functionName: MyHealthReporter::GenerateReport
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - brpc::Controller*::response_attachment
    linkageType: ''
    returnType: void
    signature: "void GenerateReport(brpc::Controller* cntl,\n                        google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:544,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:544,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:547,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:550,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:550,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:551,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:552,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:553,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:554,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:554,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:554,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:555,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:555,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 556
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::ErrorText
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - Start
    - EXPECT_EQ
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, customized_health)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: grpc::health::v1::HealthCheckResponse::set_status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:563,1
    - Dst: brpc::Controller*::response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:565,1
    - Dst: brpc::Controller*::response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:566,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:569,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:570,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:571,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:573,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 574
    functionName: MyGrpcHealthReporter::GenerateReport
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - brpc::Controller*::response
    - grpc::health::v1::HealthCheckResponse::set_status
    - brpc::Controller*::http_response
    - brpc::Controller*::response_attachment
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: "void GenerateReport(brpc::Controller* cntl,\n                        google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:579,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:579,1
    - Dst: grpc::health::v1::HealthCheckRequest::set_service
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:583,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:584,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:585,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:588,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:588,1
    - Dst: grpc::health::v1::Health_Stub::Check
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:590,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:591,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:591,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:591,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:592,1
    - Dst: grpc::health::v1::HealthCheckResponse::status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:592,1
    - Dst: grpc::health::v1::HealthCheckResponse::Clear
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:594,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:595,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:596,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:597,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:598,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:598,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:598,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:599,1
    - Dst: grpc::health::v1::HealthCheckResponse::status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:599,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 577
    functionDepth: 1
    functionLinenumber: 577
    functionLinenumberEnd: 600
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::ErrorText
    - grpc::health::v1::HealthCheckResponse::status
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - grpc::health::v1::HealthCheckRequest::set_service
    - brpc::Channel::Init
    - Start
    - grpc::health::v1::Health_Stub::Check
    - EXPECT_FALSE
    - brpc::Controller::http_request
    - grpc::health::v1::HealthCheckResponse::Clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, normal_grpc_health)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:606,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:606,1
    - Dst: grpc::health::v1::HealthCheckRequest::set_service
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:610,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:611,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:613,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:616,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:616,1
    - Dst: grpc::health::v1::Health_Stub::Check
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:619,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:621,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:621,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:621,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:622,1
    - Dst: grpc::health::v1::HealthCheckResponse::status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 623
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - grpc::health::v1::HealthCheckResponse::status
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - grpc::health::v1::HealthCheckRequest::set_service
    - brpc::Channel::Init
    - Start
    - grpc::health::v1::Health_Stub::Check
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, customized_grpc_health)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestStatus
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:626,1
    - Dst: TestStatus
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestStatus
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:634,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:636,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:636,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:636,1
    - Dst: brpc::ListService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:638,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:639,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:640,1
    - Dst: brpc::ListResponse::service_size
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:640,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:641,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:641,1
    - Dst: brpc::ListResponse::service
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 630
    functionDepth: 1
    functionLinenumber: 630
    functionLinenumberEnd: 642
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::ListService::default_method
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::ListResponse::service_size
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - AddService
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ListResponse::service
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 647
    functionName: sleep_thread
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    linkageType: ''
    returnType: void
    signature: void * sleep_thread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:653,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:656,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:656,1
    - Dst: brpc::ThreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:657,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:658,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:658,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 662
      start: 649
    functionDepth: 1
    functionLinenumber: 649
    functionLinenumberEnd: 662
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - brpc::ThreadsService::default_method
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestVLog
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:665,1
    - Dst: TestVLog
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:666,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 664
    functionDepth: 0
    functionLinenumber: 664
    functionLinenumberEnd: 667
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestVLog
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, vlog)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnections
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:670,1
    - Dst: TestConnections
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:671,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 669
    functionDepth: 0
    functionLinenumber: 669
    functionLinenumberEnd: 672
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnections
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, connections)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestFlags
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:675,1
    - Dst: TestFlags
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:676,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 677
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 677
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestFlags
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, flags)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBadMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:680,1
    - Dst: TestBadMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:681,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 679
    functionDepth: 0
    functionLinenumber: 679
    functionLinenumberEnd: 682
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBadMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, bad_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:686,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:686,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:691,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:692,1
    - Dst: bvar::Adder::Adder
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:693,1
    - Dst: bvar::Adder::expose
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:694,1
    - Dst: brpc::VarsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:696,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:697,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:697,1
    - Dst: CheckFieldInContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:698,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:701,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:702,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:703,1
    - Dst: brpc::VarsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:704,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:705,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:705,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:706,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 684
    functionDepth: 1
    functionLinenumber: 684
    functionLinenumberEnd: 708
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::VarsService::default_method
    - ASSERT_EQ
    - bvar::Adder::Adder
    - bvar::Adder::expose
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - CheckFieldInContent
    - CheckContent
    - EXPECT_FALSE
    - Start
    - ClosureChecker::ClosureChecker
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, vars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcz
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:714,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 718
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRpcz
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, rpcz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:724,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:725,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:726,1
    - Dst: brpc::PProfService::profile
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:727,1
    - Dst: ProfilerFlush
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:729,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:730,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:730,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:730,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:731,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:731,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:734,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:735,1
    - Dst: brpc::PProfService::heap
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:736,1
    - Dst: getenv
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:737,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:738,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:738,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:738,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:741,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:742,1
    - Dst: brpc::PProfService::growth
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:743,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:745,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:745,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:745,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:748,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:749,1
    - Dst: brpc::PProfService::symbol
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:750,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:751,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:751,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:752,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:755,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:756,1
    - Dst: brpc::PProfService::cmdline
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:757,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:758,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:758,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:759,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 761
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::PProfService::profile
    - brpc::PProfService::growth
    - ProfilerFlush
    - brpc::Controller::ErrorText
    - getenv
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::PProfService::symbol
    - brpc::Controller::Controller
    - CheckContent
    - brpc::Controller::ErrorCode
    - EXPECT_FALSE
    - brpc::PProfService::cmdline
    - EXPECT_GT
    - ClosureChecker::ClosureChecker
    - brpc::Controller::http_request
    - brpc::PProfService::heap
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, pprof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:770,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:771,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:772,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:773,1
    - Dst: brpc::DirService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:774,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:775,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:775,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:776,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:780,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:781,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:782,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:783,1
    - Dst: brpc::DirService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:784,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:785,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:785,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:787,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:789,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:794,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:795,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:796,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:797,1
    - Dst: brpc::DirService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:798,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:799,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:799,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:800,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 764
    functionDepth: 1
    functionLinenumber: 764
    functionLinenumberEnd: 802
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SetUpController
    - CheckErrorText
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - CheckContent
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - brpc::DirService::default_method
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, dir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:809,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:810,1
    - Dst: brpc::IdsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:811,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:812,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:812,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:813,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:816,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:817,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:818,1
    - Dst: brpc::IdsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:819,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:820,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:820,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:821,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:825,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:825,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:826,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:827,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:829,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:830,1
    - Dst: brpc::IdsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:831,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:832,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:832,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:833,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 835
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 835
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - EXPECT_TRUE
    - bthread_id_create
    - CheckErrorText
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - CheckContent
    - brpc::IdsService::default_method
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, ids)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:838,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 840
      start: 837
    functionDepth: 1
    functionLinenumber: 837
    functionLinenumberEnd: 840
    functionName: dummy_bthread
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * dummy_bthread(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:849,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 846
    functionDepth: 1
    functionLinenumber: 846
    functionLinenumberEnd: 852
    functionName: bthread_trace
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * bthread_trace(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:860,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:861,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:862,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:863,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:863,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:864,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:867,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:868,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:869,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:870,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:871,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:871,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:872,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:876,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:876,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:877,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:878,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:880,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:881,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:882,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:883,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:883,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:884,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:891,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:891,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:893,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:895,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:896,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:898,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:899,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:900,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:901,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:903,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:903,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:904,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:905,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:906,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:911,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 913
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 913
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - EXPECT_TRUE
    - ASSERT_TRUE
    - brpc::BthreadsService::default_method
    - bthread_usleep
    - find
    - CheckErrorText
    - EXPECT_EQ
    - bthread_start_background
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::Controller::Controller
    - CheckContent
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, bthreads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:920,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:921,1
    - Dst: brpc::SocketsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:922,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:923,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:923,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:924,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:927,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:928,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:929,1
    - Dst: brpc::SocketsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:930,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:931,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:931,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:932,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:937,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:937,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:938,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:939,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:941,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:942,1
    - Dst: brpc::SocketsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:943,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:944,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:944,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:945,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 947
      start: 915
    functionDepth: 1
    functionLinenumber: 915
    functionLinenumberEnd: 947
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - EXPECT_TRUE
    - Socket::Create
    - brpc::SocketsService::default_method
    - CheckErrorText
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - CheckContent
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - brpc::Controller::http_request
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, sockets)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:954,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:955,1
    - Dst: brpc::MemoryService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:956,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:957,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:957,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:958,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:959,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:960,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:961,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:962,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:963,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:964,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:965,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 966
      start: 950
    functionDepth: 1
    functionLinenumber: 950
    functionLinenumberEnd: 966
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - CheckContent
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - brpc::MemoryService::default_method
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, memory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/test/resource_pool_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: Foo
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 8
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/test/resource_pool_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: Foo
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 8
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: butil::value
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - foo
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::validate
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const Foo* foo)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: butil::value
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - foo
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::validate
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const Foo* foo)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 68
    functionName: ResourcePoolTest::ResourcePoolTest
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResourcePoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: ~ResourcePoolTest()
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ResourcePoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/resource_pool_unittest.cpp:71,1
    - Dst: time
      Src: /src/brpc/test/resource_pool_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: ResourcePoolTest::SetUp
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 91
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, atomic_array_init)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/resource_pool_unittest.cpp:99,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: YellObj
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - printf
    linkageType: ''
    returnType: void
    signature: void YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/resource_pool_unittest.cpp:104,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 106
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - erase
    - printf
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:112,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:112,1
    - Dst: describe_resources<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:116,1
    - Dst: memcmp
      Src: /src/brpc/test/resource_pool_unittest.cpp:116,1
    - Dst: get_resource<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:119,1
    - Dst: describe_resources<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:120,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:121,1
    - Dst: describe_resources<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 123
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ARRAY_SIZE
    - ASSERT_EQ
    - get_resource<MyObject>
    - return_resource
    - printf
    - describe_resources<MyObject>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, change_config)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - value
    - dummy
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value, int dummy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:133,1
    - Dst: get_resource<NonDefaultCtorObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:136,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:136,1
    - Dst: get_resource<NonDefaultCtorObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:138,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:138,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:140,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:146,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/resource_pool_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:148,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:151,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:154,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/resource_pool_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:156,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:159,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:163,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:169,1
    - Dst: clear_resources<YellObj>
      Src: /src/brpc/test/resource_pool_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/resource_pool_unittest.cpp:173,1
    - Dst: empty
      Src: /src/brpc/test/resource_pool_unittest.cpp:173,1
    - Dst: size
      Src: /src/brpc/test/resource_pool_unittest.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 174
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - address_resource
    - size
    - get_resource
    - clear
    - get_resource<NonDefaultCtorObject>
    - return_resource
    - printf
    - clear_resources<YellObj>
    - empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_resource<Foo>
      Src: /src/brpc/test/resource_pool_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:188,1
    - Dst: describe_resources<Foo>
      Src: /src/brpc/test/resource_pool_unittest.cpp:188,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 189
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - describe_resources<Foo>
    - get_resource<Foo>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, validator)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:192,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:197,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:201,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:204,1
    - Dst: int::int
      Src: /src/brpc/test/resource_pool_unittest.cpp:205,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:207,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:209,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:211,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:212,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:212,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:214,1
    - Dst: int::int
      Src: /src/brpc/test/resource_pool_unittest.cpp:216,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:218,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:219,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:219,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:221,1
    - Dst: butil::unsafe_address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:224,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:226,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:227,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:227,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:229,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:232,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:234,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:235,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:235,1
    - Dst: describe_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:237,1
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:238,1
    - Dst: describe_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:239,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 240
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_resources<int>
    - ASSERT_EQ
    - address_resource
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - get_resource
    - clear_resources<int>
    - int::int
    - butil::unsafe_address_resource
    - return_resource
    - printf
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_int)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:250,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:253,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:256,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:257,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/resource_pool_unittest.cpp:259,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:264,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:266,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:268,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:269,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:269,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:272,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:274,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/resource_pool_unittest.cpp:274,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:276,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:277,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:277,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:278,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:281,1
    - Dst: describe_resources<SilentObj>
      Src: /src/brpc/test/resource_pool_unittest.cpp:284,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 285
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - describe_resources<SilentObj>
    - stop
    - SilentObj::SilentObj
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - start
    - get_resource
    - return_resource
    - n_elapsed
    - printf
    - std::vector::clear
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_perf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:293,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:294,1
    - Dst: D
      Src: /src/brpc/test/resource_pool_unittest.cpp:296,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:300,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:301,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:302,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:304,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:306,1
    - Dst: pthread_self
      Src: /src/brpc/test/resource_pool_unittest.cpp:306,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:306,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:309,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:312,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:314,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:315,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:317,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/resource_pool_unittest.cpp:319,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/resource_pool_unittest.cpp:319,1
    - Dst: std::vector::end
      Src: /src/brpc/test/resource_pool_unittest.cpp:319,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:321,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:322,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:323,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:325,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:328,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:331,1
    - Dst: pthread_self
      Src: /src/brpc/test/resource_pool_unittest.cpp:332,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:332,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:332,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 335
    functionName: get_and_return_int
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - stop
    - start
    - std::vector::begin
    - n_elapsed
    - printf
    - butil::Timer::start
    - std::random_shuffle
    - return_resource
    - pthread_self
    - butil::Timer::Timer
    - D
    - butil::Timer::n_elapsed
    - std::vector::clear
    - std::vector::reserve
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - get_resource
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * get_and_return_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:340,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:341,1
    - Dst: D
      Src: /src/brpc/test/resource_pool_unittest.cpp:342,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:345,1
    - Dst: D::D
      Src: /src/brpc/test/resource_pool_unittest.cpp:348,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:350,1
    - Dst: D::D
      Src: /src/brpc/test/resource_pool_unittest.cpp:352,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:354,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:356,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/resource_pool_unittest.cpp:358,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/resource_pool_unittest.cpp:358,1
    - Dst: std::vector::end
      Src: /src/brpc/test/resource_pool_unittest.cpp:358,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:360,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:361,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:364,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:366,1
    - Dst: pthread_self
      Src: /src/brpc/test/resource_pool_unittest.cpp:367,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:367,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:367,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 371
    functionName: new_and_delete_int
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - stop
    - D
    - start
    - std::vector::end
    - std::random_shuffle
    - std::vector::begin
    - pthread_self
    - n_elapsed
    - printf
    - std::vector::clear
    - D::D
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * new_and_delete_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_and_return_int
      Src: /src/brpc/test/resource_pool_unittest.cpp:374,1
    - Dst: new_and_delete_int
      Src: /src/brpc/test/resource_pool_unittest.cpp:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 376
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_and_return_int
    - new_and_delete_int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_and_return_int_single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:381,1
    - Dst: pthread_create
      Src: /src/brpc/test/resource_pool_unittest.cpp:381,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:383,1
    - Dst: pthread_join
      Src: /src/brpc/test/resource_pool_unittest.cpp:384,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:389,1
    - Dst: pthread_create
      Src: /src/brpc/test/resource_pool_unittest.cpp:389,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:391,1
    - Dst: pthread_join
      Src: /src/brpc/test/resource_pool_unittest.cpp:392,1
    - Dst: describe_resources<D>
      Src: /src/brpc/test/resource_pool_unittest.cpp:395,1
    - Dst: clear_resources<D>
      Src: /src/brpc/test/resource_pool_unittest.cpp:396,1
    - Dst: describe_resources<D>
      Src: /src/brpc/test/resource_pool_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:401,1
    - Dst: memcmp
      Src: /src/brpc/test/resource_pool_unittest.cpp:401,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 402
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ARRAY_SIZE
    - ASSERT_EQ
    - describe_resources<D>
    - pthread_join
    - pthread_create
    - clear_resources<D>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_and_return_int_multiple_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:405,1
    - Dst: describe_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:406,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:409,1
    - Dst: std::vector::capacity
      Src: /src/brpc/test/resource_pool_unittest.cpp:411,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:412,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:414,1
    - Dst: std::make_pair
      Src: /src/brpc/test/resource_pool_unittest.cpp:414,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:418,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:418,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:420,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:420,1
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:422,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 423
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_resources<int>
    - ASSERT_EQ
    - std::vector::push_back
    - get_resource
    - clear_resources<int>
    - std::vector::capacity
    - std::make_pair
    - std::vector::reserve
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, verify_get)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 68
    functionName: ResourcePoolTest::ResourcePoolTest
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResourcePoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: ~ResourcePoolTest()
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ResourcePoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/resource_pool_unittest.cpp:71,1
    - Dst: time
      Src: /src/brpc/test/resource_pool_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: ResourcePoolTest::SetUp
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 91
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, atomic_array_init)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/resource_pool_unittest.cpp:99,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: YellObj
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - printf
    linkageType: ''
    returnType: void
    signature: void YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/resource_pool_unittest.cpp:104,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 106
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - erase
    - printf
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:112,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:112,1
    - Dst: describe_resources<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:116,1
    - Dst: memcmp
      Src: /src/brpc/test/resource_pool_unittest.cpp:116,1
    - Dst: get_resource<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:119,1
    - Dst: describe_resources<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:120,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:121,1
    - Dst: describe_resources<MyObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 123
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ARRAY_SIZE
    - ASSERT_EQ
    - get_resource<MyObject>
    - return_resource
    - printf
    - describe_resources<MyObject>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, change_config)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - value
    - dummy
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value, int dummy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:133,1
    - Dst: get_resource<NonDefaultCtorObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:136,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:136,1
    - Dst: get_resource<NonDefaultCtorObject>
      Src: /src/brpc/test/resource_pool_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:138,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:138,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:140,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:146,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/resource_pool_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:148,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:151,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:154,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/resource_pool_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:156,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:159,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:163,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:169,1
    - Dst: clear_resources<YellObj>
      Src: /src/brpc/test/resource_pool_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/resource_pool_unittest.cpp:173,1
    - Dst: empty
      Src: /src/brpc/test/resource_pool_unittest.cpp:173,1
    - Dst: size
      Src: /src/brpc/test/resource_pool_unittest.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 174
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - address_resource
    - size
    - get_resource
    - clear
    - get_resource<NonDefaultCtorObject>
    - return_resource
    - printf
    - clear_resources<YellObj>
    - empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_resource<Foo>
      Src: /src/brpc/test/resource_pool_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:188,1
    - Dst: describe_resources<Foo>
      Src: /src/brpc/test/resource_pool_unittest.cpp:188,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 189
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - describe_resources<Foo>
    - get_resource<Foo>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, validator)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:192,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:197,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:201,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:204,1
    - Dst: int::int
      Src: /src/brpc/test/resource_pool_unittest.cpp:205,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:207,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:209,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:211,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:212,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:212,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:214,1
    - Dst: int::int
      Src: /src/brpc/test/resource_pool_unittest.cpp:216,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:218,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:219,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:219,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:221,1
    - Dst: butil::unsafe_address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:224,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:226,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:227,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:227,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:229,1
    - Dst: address_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:232,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:234,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:235,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:235,1
    - Dst: describe_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:237,1
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:238,1
    - Dst: describe_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:239,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 240
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_resources<int>
    - ASSERT_EQ
    - address_resource
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - get_resource
    - clear_resources<int>
    - int::int
    - butil::unsafe_address_resource
    - return_resource
    - printf
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_int)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:250,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:253,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:256,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:257,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/resource_pool_unittest.cpp:259,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:264,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:266,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:268,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:269,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:269,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:272,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:274,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/resource_pool_unittest.cpp:274,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:276,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:277,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:277,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:278,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:281,1
    - Dst: describe_resources<SilentObj>
      Src: /src/brpc/test/resource_pool_unittest.cpp:284,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 285
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - describe_resources<SilentObj>
    - stop
    - SilentObj::SilentObj
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - start
    - get_resource
    - return_resource
    - n_elapsed
    - printf
    - std::vector::clear
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_perf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:293,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:294,1
    - Dst: D
      Src: /src/brpc/test/resource_pool_unittest.cpp:296,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/resource_pool_unittest.cpp:300,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:301,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:302,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:304,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:306,1
    - Dst: pthread_self
      Src: /src/brpc/test/resource_pool_unittest.cpp:306,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:306,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:309,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:312,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:314,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:315,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:317,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/resource_pool_unittest.cpp:319,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/resource_pool_unittest.cpp:319,1
    - Dst: std::vector::end
      Src: /src/brpc/test/resource_pool_unittest.cpp:319,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:321,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:322,1
    - Dst: return_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:323,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:325,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:328,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:331,1
    - Dst: pthread_self
      Src: /src/brpc/test/resource_pool_unittest.cpp:332,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:332,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:332,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 335
    functionName: get_and_return_int
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 1
    functionsReached:
    - stop
    - start
    - std::vector::begin
    - n_elapsed
    - printf
    - butil::Timer::start
    - std::random_shuffle
    - return_resource
    - pthread_self
    - butil::Timer::Timer
    - D
    - butil::Timer::n_elapsed
    - std::vector::clear
    - std::vector::reserve
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - get_resource
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * get_and_return_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:340,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/resource_pool_unittest.cpp:341,1
    - Dst: D
      Src: /src/brpc/test/resource_pool_unittest.cpp:342,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/resource_pool_unittest.cpp:345,1
    - Dst: D::D
      Src: /src/brpc/test/resource_pool_unittest.cpp:348,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:350,1
    - Dst: D::D
      Src: /src/brpc/test/resource_pool_unittest.cpp:352,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:354,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:356,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/resource_pool_unittest.cpp:358,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/resource_pool_unittest.cpp:358,1
    - Dst: std::vector::end
      Src: /src/brpc/test/resource_pool_unittest.cpp:358,1
    - Dst: start
      Src: /src/brpc/test/resource_pool_unittest.cpp:360,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:361,1
    - Dst: stop
      Src: /src/brpc/test/resource_pool_unittest.cpp:364,1
    - Dst: printf
      Src: /src/brpc/test/resource_pool_unittest.cpp:366,1
    - Dst: pthread_self
      Src: /src/brpc/test/resource_pool_unittest.cpp:367,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:367,1
    - Dst: n_elapsed
      Src: /src/brpc/test/resource_pool_unittest.cpp:367,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 371
    functionName: new_and_delete_int
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::vector::push_back
    - stop
    - D
    - start
    - std::vector::end
    - std::random_shuffle
    - std::vector::begin
    - pthread_self
    - n_elapsed
    - printf
    - std::vector::clear
    - D::D
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * new_and_delete_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_and_return_int
      Src: /src/brpc/test/resource_pool_unittest.cpp:374,1
    - Dst: new_and_delete_int
      Src: /src/brpc/test/resource_pool_unittest.cpp:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 376
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_and_return_int
    - new_and_delete_int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_and_return_int_single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:381,1
    - Dst: pthread_create
      Src: /src/brpc/test/resource_pool_unittest.cpp:381,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:383,1
    - Dst: pthread_join
      Src: /src/brpc/test/resource_pool_unittest.cpp:384,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:389,1
    - Dst: pthread_create
      Src: /src/brpc/test/resource_pool_unittest.cpp:389,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/resource_pool_unittest.cpp:391,1
    - Dst: pthread_join
      Src: /src/brpc/test/resource_pool_unittest.cpp:392,1
    - Dst: describe_resources<D>
      Src: /src/brpc/test/resource_pool_unittest.cpp:395,1
    - Dst: clear_resources<D>
      Src: /src/brpc/test/resource_pool_unittest.cpp:396,1
    - Dst: describe_resources<D>
      Src: /src/brpc/test/resource_pool_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:401,1
    - Dst: memcmp
      Src: /src/brpc/test/resource_pool_unittest.cpp:401,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 402
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ARRAY_SIZE
    - ASSERT_EQ
    - describe_resources<D>
    - pthread_join
    - pthread_create
    - clear_resources<D>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, get_and_return_int_multiple_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:405,1
    - Dst: describe_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:406,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/resource_pool_unittest.cpp:409,1
    - Dst: std::vector::capacity
      Src: /src/brpc/test/resource_pool_unittest.cpp:411,1
    - Dst: get_resource
      Src: /src/brpc/test/resource_pool_unittest.cpp:412,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/resource_pool_unittest.cpp:414,1
    - Dst: std::make_pair
      Src: /src/brpc/test/resource_pool_unittest.cpp:414,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:418,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:418,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/resource_pool_unittest.cpp:420,1
    - Dst: std::vector::size
      Src: /src/brpc/test/resource_pool_unittest.cpp:420,1
    - Dst: clear_resources<int>
      Src: /src/brpc/test/resource_pool_unittest.cpp:422,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 423
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/resource_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_resources<int>
    - ASSERT_EQ
    - std::vector::push_back
    - get_resource
    - clear_resources<int>
    - std::vector::capacity
    - std::make_pair
    - std::vector::reserve
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(ResourcePoolTest, verify_get)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 15
    functionName: Increment
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:20,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 24
    functionName: TEST
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(BindHelpersTest, TestScopedClosureRunnerExitScope)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:30,1
    - Dst: butil::ScopedClosureRunner::Release
      Src: /src/brpc/test/callback_helpers_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:34,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/callback_helpers_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 37
    functionName: TEST
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Closure::Run
    - butil::Bind
    - butil::ScopedClosureRunner::Release
    linkageType: ''
    returnType: void
    signature: void TEST(BindHelpersTest, TestScopedClosureRunnerRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedClosureRunner::Reset
      Src: /src/brpc/test/callback_helpers_unittest.cc:44,1
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:44,1
    - Dst: butil::ScopedClosureRunner::Reset
      Src: /src/brpc/test/callback_helpers_unittest.cc:45,1
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:49,1
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:54,1
    - Dst: butil::ScopedClosureRunner::Reset
      Src: /src/brpc/test/callback_helpers_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 59
    functionName: TEST
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Bind
    - butil::ScopedClosureRunner::Reset
    linkageType: ''
    returnType: void
    signature: void TEST(BindHelpersTest, TestScopedClosureRunnerReset)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 15
    functionName: Increment
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:20,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 24
    functionName: TEST
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(BindHelpersTest, TestScopedClosureRunnerExitScope)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:30,1
    - Dst: butil::ScopedClosureRunner::Release
      Src: /src/brpc/test/callback_helpers_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:34,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/callback_helpers_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 37
    functionName: TEST
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Closure::Run
    - butil::Bind
    - butil::ScopedClosureRunner::Release
    linkageType: ''
    returnType: void
    signature: void TEST(BindHelpersTest, TestScopedClosureRunnerRelease)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedClosureRunner::Reset
      Src: /src/brpc/test/callback_helpers_unittest.cc:44,1
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:44,1
    - Dst: butil::ScopedClosureRunner::Reset
      Src: /src/brpc/test/callback_helpers_unittest.cc:45,1
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:49,1
    - Dst: butil::Bind
      Src: /src/brpc/test/callback_helpers_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:54,1
    - Dst: butil::ScopedClosureRunner::Reset
      Src: /src/brpc/test/callback_helpers_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/callback_helpers_unittest.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 59
    functionName: TEST
    functionSourceFile: /src/brpc/test/callback_helpers_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Bind
    - butil::ScopedClosureRunner::Reset
    linkageType: ''
    returnType: void
    signature: void TEST(BindHelpersTest, TestScopedClosureRunnerReset)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr
    - val
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 17
    functionName: butil::SetIntRunner::SetIntRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetIntRunner(int* ptr, int val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~SetIntRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetIntRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::SetIntRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - event
    argTypes:
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::WaitEventRunner::WaitEventRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitEventRunner(WaitableEvent* event)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~WaitEventRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WaitEventRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: butil::WaitEventRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Signal
    - IsSignaled
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - seq
    argTypes:
    - AtomicSequenceNumber*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::SeqRunner::SeqRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeqRunner(AtomicSequenceNumber* seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::SeqRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - seq
    - total
    - event
    argTypes:
    - AtomicSequenceNumber*
    - int
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: butil::VerifyPoolRunner::VerifyPoolRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void VerifyPoolRunner(AtomicSequenceNumber* seq,\n                   int
      total, WaitableEvent* event)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:64,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:65,1
    - Dst: Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: butil::VerifyPoolRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - Wait
    - GetNext
    - Signal
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr
    - val
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 17
    functionName: butil::SetIntRunner::SetIntRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetIntRunner(int* ptr, int val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~SetIntRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetIntRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::SetIntRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - event
    argTypes:
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::WaitEventRunner::WaitEventRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitEventRunner(WaitableEvent* event)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~WaitEventRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WaitEventRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: butil::WaitEventRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Signal
    - IsSignaled
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - seq
    argTypes:
    - AtomicSequenceNumber*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::SeqRunner::SeqRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeqRunner(AtomicSequenceNumber* seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::SeqRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - seq
    - total
    - event
    argTypes:
    - AtomicSequenceNumber*
    - int
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: butil::VerifyPoolRunner::VerifyPoolRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void VerifyPoolRunner(AtomicSequenceNumber* seq,\n                   int
      total, WaitableEvent* event)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:64,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:65,1
    - Dst: Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: butil::VerifyPoolRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - Wait
    - GetNext
    - Signal
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:83,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:86,1
    - Dst: DelegateSimpleThread::HasBeenStarted
      Src: /src/brpc/test/simple_thread_unittest.cc:86,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:87,1
    - Dst: DelegateSimpleThread::HasBeenJoined
      Src: /src/brpc/test/simple_thread_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:88,1
    - Dst: DelegateSimpleThread::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:91,1
    - Dst: DelegateSimpleThread::HasBeenStarted
      Src: /src/brpc/test/simple_thread_unittest.cc:91,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:92,1
    - Dst: DelegateSimpleThread::HasBeenJoined
      Src: /src/brpc/test/simple_thread_unittest.cc:92,1
    - Dst: DelegateSimpleThread::Join
      Src: /src/brpc/test/simple_thread_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:95,1
    - Dst: DelegateSimpleThread::HasBeenStarted
      Src: /src/brpc/test/simple_thread_unittest.cc:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:96,1
    - Dst: DelegateSimpleThread::HasBeenJoined
      Src: /src/brpc/test/simple_thread_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 98
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DelegateSimpleThread::HasBeenStarted
    - DelegateSimpleThread::Join
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::HasBeenJoined
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, CreateAndJoin)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:107,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:107,1
    - Dst: DelegateSimpleThread::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:108,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:110,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:110,1
    - Dst: DelegateSimpleThread::Join
      Src: /src/brpc/test/simple_thread_unittest.cc:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 112
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DelegateSimpleThread::Join
    - WaitableEvent::Wait
    - DelegateSimpleThread::Start
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, WaitForEvent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:120,1
    - Dst: DelegateSimpleThread::name_prefix
      Src: /src/brpc/test/simple_thread_unittest.cc:120,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:121,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:121,1
    - Dst: DelegateSimpleThread::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:124,1
    - Dst: DelegateSimpleThread::name_prefix
      Src: /src/brpc/test/simple_thread_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:125,1
    - Dst: DelegateSimpleThread::name
      Src: /src/brpc/test/simple_thread_unittest.cc:125,1
    - Dst: std::string
      Src: /src/brpc/test/simple_thread_unittest.cc:126,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/simple_thread_unittest.cc:126,1
    - Dst: DelegateSimpleThread::tid
      Src: /src/brpc/test/simple_thread_unittest.cc:126,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:129,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:129,1
    - Dst: DelegateSimpleThread::Join
      Src: /src/brpc/test/simple_thread_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:133,1
    - Dst: DelegateSimpleThread::name_prefix
      Src: /src/brpc/test/simple_thread_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:134,1
    - Dst: DelegateSimpleThread::name
      Src: /src/brpc/test/simple_thread_unittest.cc:134,1
    - Dst: std::string
      Src: /src/brpc/test/simple_thread_unittest.cc:135,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/simple_thread_unittest.cc:135,1
    - Dst: DelegateSimpleThread::tid
      Src: /src/brpc/test/simple_thread_unittest.cc:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 136
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::IntToString
    - DelegateSimpleThread::Join
    - std::string
    - DelegateSimpleThread::name_prefix
    - WaitableEvent::Wait
    - DelegateSimpleThread::tid
    - DelegateSimpleThread::Start
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    - EXPECT_EQ
    - DelegateSimpleThread::name
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, NamedWithOptions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/simple_thread_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:146,1
    - Dst: AtomicSequenceNumber::GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:146,1
    - Dst: DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:147,1
    - Dst: DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/simple_thread_unittest.cc:150,1
    - Dst: DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/simple_thread_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:154,1
    - Dst: AtomicSequenceNumber::GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:154,1
    - Dst: DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:162,1
    - Dst: DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/simple_thread_unittest.cc:164,1
    - Dst: DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/simple_thread_unittest.cc:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:167,1
    - Dst: AtomicSequenceNumber::GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 168
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - AtomicSequenceNumber::GetNext
    - DelegateSimpleThreadPool::Start
    - EXPECT_EQ
    - DelegateSimpleThreadPool::AddWork
    - DelegateSimpleThreadPool::JoinAll
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, ThreadPool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr
    - val
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 17
    functionName: butil::SetIntRunner::SetIntRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetIntRunner(int* ptr, int val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~SetIntRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetIntRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::SetIntRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - event
    argTypes:
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::WaitEventRunner::WaitEventRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitEventRunner(WaitableEvent* event)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~WaitEventRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WaitEventRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: butil::WaitEventRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Signal
    - IsSignaled
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - seq
    argTypes:
    - AtomicSequenceNumber*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::SeqRunner::SeqRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeqRunner(AtomicSequenceNumber* seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::SeqRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - seq
    - total
    - event
    argTypes:
    - AtomicSequenceNumber*
    - int
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: butil::VerifyPoolRunner::VerifyPoolRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void VerifyPoolRunner(AtomicSequenceNumber* seq,\n                   int
      total, WaitableEvent* event)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:64,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:65,1
    - Dst: Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: butil::VerifyPoolRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - Wait
    - GetNext
    - Signal
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr
    - val
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 17
    functionName: butil::SetIntRunner::SetIntRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetIntRunner(int* ptr, int val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~SetIntRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SetIntRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::SetIntRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - event
    argTypes:
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::WaitEventRunner::WaitEventRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitEventRunner(WaitableEvent* event)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~WaitEventRunner()
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WaitEventRunner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:35,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    - Dst: IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: butil::WaitEventRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Signal
    - IsSignaled
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - seq
    argTypes:
    - AtomicSequenceNumber*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::SeqRunner::SeqRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeqRunner(AtomicSequenceNumber* seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::SeqRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - seq
    - total
    - event
    argTypes:
    - AtomicSequenceNumber*
    - int
    - WaitableEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: butil::VerifyPoolRunner::VerifyPoolRunner
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void VerifyPoolRunner(AtomicSequenceNumber* seq,\n                   int
      total, WaitableEvent* event)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:64,1
    - Dst: Signal
      Src: /src/brpc/test/simple_thread_unittest.cc:65,1
    - Dst: Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: butil::VerifyPoolRunner::OVERRIDE
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - Wait
    - GetNext
    - Signal
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:83,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:86,1
    - Dst: DelegateSimpleThread::HasBeenStarted
      Src: /src/brpc/test/simple_thread_unittest.cc:86,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:87,1
    - Dst: DelegateSimpleThread::HasBeenJoined
      Src: /src/brpc/test/simple_thread_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:88,1
    - Dst: DelegateSimpleThread::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:91,1
    - Dst: DelegateSimpleThread::HasBeenStarted
      Src: /src/brpc/test/simple_thread_unittest.cc:91,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:92,1
    - Dst: DelegateSimpleThread::HasBeenJoined
      Src: /src/brpc/test/simple_thread_unittest.cc:92,1
    - Dst: DelegateSimpleThread::Join
      Src: /src/brpc/test/simple_thread_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:95,1
    - Dst: DelegateSimpleThread::HasBeenStarted
      Src: /src/brpc/test/simple_thread_unittest.cc:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:96,1
    - Dst: DelegateSimpleThread::HasBeenJoined
      Src: /src/brpc/test/simple_thread_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 98
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DelegateSimpleThread::HasBeenStarted
    - DelegateSimpleThread::Join
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::HasBeenJoined
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, CreateAndJoin)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:107,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:107,1
    - Dst: DelegateSimpleThread::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:108,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:110,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:110,1
    - Dst: DelegateSimpleThread::Join
      Src: /src/brpc/test/simple_thread_unittest.cc:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 112
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DelegateSimpleThread::Join
    - WaitableEvent::Wait
    - DelegateSimpleThread::Start
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, WaitForEvent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:120,1
    - Dst: DelegateSimpleThread::name_prefix
      Src: /src/brpc/test/simple_thread_unittest.cc:120,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/simple_thread_unittest.cc:121,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:121,1
    - Dst: DelegateSimpleThread::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:124,1
    - Dst: DelegateSimpleThread::name_prefix
      Src: /src/brpc/test/simple_thread_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:125,1
    - Dst: DelegateSimpleThread::name
      Src: /src/brpc/test/simple_thread_unittest.cc:125,1
    - Dst: std::string
      Src: /src/brpc/test/simple_thread_unittest.cc:126,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/simple_thread_unittest.cc:126,1
    - Dst: DelegateSimpleThread::tid
      Src: /src/brpc/test/simple_thread_unittest.cc:126,1
    - Dst: WaitableEvent::Wait
      Src: /src/brpc/test/simple_thread_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/simple_thread_unittest.cc:129,1
    - Dst: WaitableEvent::IsSignaled
      Src: /src/brpc/test/simple_thread_unittest.cc:129,1
    - Dst: DelegateSimpleThread::Join
      Src: /src/brpc/test/simple_thread_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:133,1
    - Dst: DelegateSimpleThread::name_prefix
      Src: /src/brpc/test/simple_thread_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:134,1
    - Dst: DelegateSimpleThread::name
      Src: /src/brpc/test/simple_thread_unittest.cc:134,1
    - Dst: std::string
      Src: /src/brpc/test/simple_thread_unittest.cc:135,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/simple_thread_unittest.cc:135,1
    - Dst: DelegateSimpleThread::tid
      Src: /src/brpc/test/simple_thread_unittest.cc:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 136
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::IntToString
    - DelegateSimpleThread::Join
    - std::string
    - DelegateSimpleThread::name_prefix
    - WaitableEvent::Wait
    - DelegateSimpleThread::tid
    - DelegateSimpleThread::Start
    - EXPECT_FALSE
    - WaitableEvent::IsSignaled
    - EXPECT_EQ
    - DelegateSimpleThread::name
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, NamedWithOptions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/simple_thread_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:146,1
    - Dst: AtomicSequenceNumber::GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:146,1
    - Dst: DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:147,1
    - Dst: DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/simple_thread_unittest.cc:150,1
    - Dst: DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/simple_thread_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:154,1
    - Dst: AtomicSequenceNumber::GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:154,1
    - Dst: DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/simple_thread_unittest.cc:162,1
    - Dst: DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/simple_thread_unittest.cc:164,1
    - Dst: DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/simple_thread_unittest.cc:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/simple_thread_unittest.cc:167,1
    - Dst: AtomicSequenceNumber::GetNext
      Src: /src/brpc/test/simple_thread_unittest.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 168
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/simple_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - AtomicSequenceNumber::GetNext
    - DelegateSimpleThreadPool::Start
    - EXPECT_EQ
    - DelegateSimpleThreadPool::AddWork
    - DelegateSimpleThreadPool::JoinAll
    linkageType: ''
    returnType: void
    signature: void TEST(SimpleThreadTest, ThreadPool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setlocale
      Src: /src/brpc/test/scoped_locale.cc:14,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_locale.cc:15,1
    - Dst: setlocale
      Src: /src/brpc/test/scoped_locale.cc:15,1
    - Dst: c_str
      Src: /src/brpc/test/scoped_locale.cc:15,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' locale'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 17
    functionName: butil::ScopedLocale::ScopedLocale
    functionSourceFile: /src/brpc/test/scoped_locale.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - setlocale
    - c_str
    linkageType: ''
    returnType: void
    signature: void ScopedLocale::ScopedLocale(const std::string& locale)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/scoped_locale.cc:20,1
    - Dst: c_str
      Src: /src/brpc/test/scoped_locale.cc:20,1
    - Dst: setlocale
      Src: /src/brpc/test/scoped_locale.cc:20,1
    - Dst: c_str
      Src: /src/brpc/test/scoped_locale.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: ScopedLocale::~ScopedLocale()
    functionSourceFile: /src/brpc/test/scoped_locale.cc
    functionUses: 0
    functionsReached:
    - setlocale
    - c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void ScopedLocale::~ScopedLocale()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setlocale
      Src: /src/brpc/test/scoped_locale.cc:14,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_locale.cc:15,1
    - Dst: setlocale
      Src: /src/brpc/test/scoped_locale.cc:15,1
    - Dst: c_str
      Src: /src/brpc/test/scoped_locale.cc:15,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' locale'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 17
    functionName: butil::ScopedLocale::ScopedLocale
    functionSourceFile: /src/brpc/test/scoped_locale.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - setlocale
    - c_str
    linkageType: ''
    returnType: void
    signature: void ScopedLocale::ScopedLocale(const std::string& locale)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/scoped_locale.cc:20,1
    - Dst: c_str
      Src: /src/brpc/test/scoped_locale.cc:20,1
    - Dst: setlocale
      Src: /src/brpc/test/scoped_locale.cc:20,1
    - Dst: c_str
      Src: /src/brpc/test/scoped_locale.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: ScopedLocale::~ScopedLocale()
    functionSourceFile: /src/brpc/test/scoped_locale.cc
    functionUses: 0
    functionsReached:
    - setlocale
    - c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void ScopedLocale::~ScopedLocale()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: Foo
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: destroy
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: func
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Foo*::destroy
      Src: /src/brpc/test/unique_ptr_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: operator()(Foo* f) const
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached:
    - Foo*::destroy
    linkageType: ''
    returnType: void
    signature: void operator()(Foo* f) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:45,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:46,1
    - Dst: std::unique_ptr::func
      Src: /src/brpc/test/unique_ptr_unittest.cpp:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 53
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::func
    - ASSERT_FALSE
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(UniquePtrTest, basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - foo
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: generate_foo
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::unique_ptr<Foo>
    signature: std::unique_ptr<Foo> generate_foo(Foo* foo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Foo::Foo
      Src: /src/brpc/test/unique_ptr_unittest.cpp:61,1
    - Dst: generate_foo
      Src: /src/brpc/test/unique_ptr_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/unique_ptr_unittest.cpp:63,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/unique_ptr_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - generate_foo
    - std::unique_ptr::get
    - Foo::Foo
    linkageType: ''
    returnType: void
    signature: void TEST_F(UniquePtrTest, return_unique_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: Foo
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: destroy
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 60
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: func
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Foo*::destroy
      Src: /src/brpc/test/unique_ptr_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: operator()(Foo* f) const
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached:
    - Foo*::destroy
    linkageType: ''
    returnType: void
    signature: void operator()(Foo* f) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:45,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:46,1
    - Dst: std::unique_ptr::func
      Src: /src/brpc/test/unique_ptr_unittest.cpp:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/unique_ptr_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 53
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::func
    - ASSERT_FALSE
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(UniquePtrTest, basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - foo
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: generate_foo
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: std::unique_ptr<Foo>
    signature: std::unique_ptr<Foo> generate_foo(Foo* foo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Foo::Foo
      Src: /src/brpc/test/unique_ptr_unittest.cpp:61,1
    - Dst: generate_foo
      Src: /src/brpc/test/unique_ptr_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/unique_ptr_unittest.cpp:63,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/unique_ptr_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/unique_ptr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - generate_foo
    - std::unique_ptr::get
    - Foo::Foo
    linkageType: ''
    returnType: void
    signature: void TEST_F(UniquePtrTest, return_unique_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:56,1
    - Dst: time
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: initialize_random
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void initialize_random()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: LoadBalancerTest::LoadBalancerTest
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void LoadBalancerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~LoadBalancerTest()
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LoadBalancerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: Foo
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' f'
    - n
    argTypes:
    - Foo
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 82
    functionName: AddN
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AddN(Foo& f, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: read_cb
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void read_cb(const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: operator()(const Foo& f)
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void operator()(const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:101,1
    - Dst: Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:108,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:112,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:115,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:116,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:116,1
    - Dst: CallableObj
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:118,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:122,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:123,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:126,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:133,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 136
    functionName: test_doubly_buffered_data
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Read
    - DBD::Modify
    - CallableObj
    - DBD::Read
    linkageType: ''
    returnType: void
    signature: void test_doubly_buffered_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:139,1
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:140,1
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:141,1
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 143
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_doubly_buffered_data
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, doubly_buffered_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DBD*>
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:149,1
    - Dst: auto::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:152,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 159
    functionName: DBDBthread
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::Read
    - static_cast<DBD*>
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * DBDBthread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:167,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:168,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:173,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:173,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:177,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:178,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:179,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:181,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:182,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:186,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:186,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 188
    functionName: DBDMultiBthread
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - butil::gettimeofday_ms
    - bthread_start_urgent
    - DBD::Modify
    - bthread_join
    - usleep
    - DBD::Read
    linkageType: ''
    returnType: void
    signature: void DBDMultiBthread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DBDMultiBthread
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - DBDMultiBthread
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, doubly_buffered_data_bthread_multi_bthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' f'
    - n
    argTypes:
    - PerfMap
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 210
    functionName: AddMapN
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AddMapN(PerfMap& f, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 220
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:226,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:231,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:233,1
    - Dst: auto::dbd::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:237,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:242,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 245
    functionName: read_dbd
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - auto::dbd::Read
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * read_dbd(void* void_arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:259,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:259,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:272,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:276,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:277,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:280,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:282,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:283,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:283,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:284,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:287,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:289,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:298,1
    - Dst: butil::class_name<DBD>
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:298,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 41
    argCount: 2
    argNames:
    - thread_num
    - modify_during_reading
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 304
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 8
    functionsReached:
    - ASSERT_EQ
    - butil::gettimeofday_ms
    - ASSERT_TRUE
    - DBD::Modify
    - pthread_join
    - pthread_create
    - butil::class_name<DBD>
    - snprintf
    - usleep
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void PerfTest(int thread_num, bool modify_during_reading)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:308,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:309,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:310,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:311,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:314,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:315,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:316,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:317,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:320,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:321,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:322,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:323,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:326,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:327,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:328,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 330
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, dbd_performance)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::resize
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:338,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:338,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:339,1
    - Dst: weight::volatile_value
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:342,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:343,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:346,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:350,1
    - Dst: left::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:351,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:356,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' weight_tree'
    argTypes:
    - std::vector<LALB::ServerInfo>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 359
    functionName: ValidateWeightTree
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - weight::volatile_value
    - size
    - left::load
    - std::vector::size
    - std::vector::resize
    linkageType: ''
    returnType: void
    signature: "void ValidateWeightTree(\n    std::vector<LALB::ServerInfo> & weight_tree)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:364,1
    - Dst: weight_tree::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:365,1
    - Dst: server_map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:367,1
    - Dst: _left_weights::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:373,1
    - Dst: server_map::seek
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:375,1
    - Dst: weight::volatile_value
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:377,1
    - Dst: ValidateWeightTree
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:380,1
    - Dst: _total::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:380,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' lalb'
    - N
    argTypes:
    - LALB
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 381
    functionName: ValidateLALB
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - server_map::seek
    - server_map::size
    - weight_tree::size
    - _left_weights::size
    - ValidateWeightTree
    - _total::load
    - weight::volatile_value
    linkageType: ''
    returnType: void
    signature: void ValidateLALB(LALB& lalb, size_t N)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:385,1
    - Dst: LALB::_total::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:385,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:394,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:396,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:400,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:400,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:402,1
    - Dst: LALB::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:402,1
    - Dst: ValidateLALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:405,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:408,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:408,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:408,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:410,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:413,1
    - Dst: LALB::RemoveServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:414,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:414,1
    - Dst: ValidateLALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:417,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:421,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:421,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 423
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - std::vector::push_back
    - ASSERT_TRUE
    - LALB::RemoveServer
    - std::vector::pop_back
    - std::vector::end
    - std::vector::back
    - LALB::AddServer
    - ValidateLALB
    - butil::EndPoint::EndPoint
    - snprintf
    - LALB::_total::load
    - std::random_shuffle
    - std::vector::begin
    - str2endpoint
    - Socket::SetFailed
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, la_sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CountMap::CountMap
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:437,1
    - Dst: rand
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:440,1
    - Dst: SelectArg*::hash
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:444,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:447,1
    - Dst: SelectArg*::hash
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:451,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:453,1
    - Dst: LOG_IF
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:455,1
    - Dst: pthread_self
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:455,1
    - Dst: berror
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:456,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 458
    functionName: select_server
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - CountMap::CountMap
    - brpc::LoadBalancer*::SelectServer
    - rand
    - pthread_self
    - SelectArg*::hash
    - LOG_IF
    - berror
    linkageType: ''
    returnType: void
    signature: void * select_server(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:464,1
    - Dst: brpc::Socket*::id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 466
    functionName: SaveRecycle::BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Socket*::id
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* s)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:475,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:477,1
    - Dst: LALB::LALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:479,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:482,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:493,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:493,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:502,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:504,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:504,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:516,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:516,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:518,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:523,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:523,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:524,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:527,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:528,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:529,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:531,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:531,1
    - Dst: std::vector::assign
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:539,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:539,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:539,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:541,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:541,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:541,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:543,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:543,1
    - Dst: brpc::LoadBalancer*::RemoveServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:544,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:544,1
    - Dst: brpc::LoadBalancer*::AddServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:544,1
    - Dst: ValidateLALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:554,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:554,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:555,1
    - Dst: LALB*::_total::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:559,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:561,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:563,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:563,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:565,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:568,1
    - Dst: CountMap*::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:571,1
    - Dst: CountMap*::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:572,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:579,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:587,1
    - Dst: CountMap::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:587,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:595,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:597,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:597,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:602,1
    - Dst: CountMap::erase
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:604,1
    - Dst: CountMap::erase
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:604,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 100
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 469
    functionDepth: 2
    functionLinenumber: 469
    functionLinenumberEnd: 609
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - ValidateLALB
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - CountMap::size
    - brpc::SetTrackMeAddress
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    - ARRAY_SIZE
    - std::vector::pop_back
    - butil::Timer::start
    - brpc::LoadBalancer*::RemoveServersInBatch
    - std::random_shuffle
    - ASSERT_NE
    - LOG
    - brpc::LoadBalancer*::AddServersInBatch
    - butil::Timer::Timer
    - SaveRecycle::SaveRecycle
    - Socket::Create
    - std::vector::assign
    - butil::Timer::u_elapsed
    - CountMap*::end
    - CountMap::erase
    - LALB::LALB
    - snprintf
    - brpc::SocketUniquePtr::SetLogOff
    - LALB*::_total::load
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - pthread_join
    - brpc::LoadBalancer*::AddServer
    - butil::class_name_str
    - ASSERT_GT
    - str2endpoint
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - Socket::SetFailed
    - brpc::LoadBalancer*::SelectServer
    - std::vector::size
    - CountMap*::begin
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, update_while_selection)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:616,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:618,1
    - Dst: LALB::LALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:620,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:622,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:624,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:629,1
    - Dst: std::string::find_last_of
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:631,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:633,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:642,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:644,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:644,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:650,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:650,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:652,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:652,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:658,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:658,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:659,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:660,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:664,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:664,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:666,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:667,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:667,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:668,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:669,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:676,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:676,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:678,1
    - Dst: CountMap*::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:680,1
    - Dst: CountMap*::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:694,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:694,1
    - Dst: CountMap::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:694,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:700,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:702,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:709,1
    - Dst: sqrt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:710,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:710,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:711,1
    - Dst: brpc::LoadBalancer*::Describe
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:716,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:717,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:720,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:722,1
    - Dst: static_cast<double>
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:724,1
    - Dst: std::stoi
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:724,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:729,1
    - Dst: sqrt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:730,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:730,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:731,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:734,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:734,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:736,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:736,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:737,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:738,1
    - Dst: CountMap::erase
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:738,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 95
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 611
    functionDepth: 1
    functionLinenumber: 611
    functionLinenumberEnd: 742
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - pthread_create
    - butil::EndPoint::EndPoint
    - CountMap::size
    - std::string::find_last_of
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    - std::string::substr
    - ARRAY_SIZE
    - ASSERT_NE
    - std::to_string
    - SaveRecycle::SaveRecycle
    - Socket::Create
    - std::ostringstream::str
    - CountMap*::end
    - std::stoi
    - CountMap::erase
    - LALB::LALB
    - snprintf
    - sqrt
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - ProfilerStart
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - ProfilerStop
    - ASSERT_TRUE
    - std::vector::push_back
    - brpc::LoadBalancer*::Describe
    - pthread_join
    - butil::fast_rand_less_than
    - brpc::LoadBalancer*::AddServer
    - butil::class_name_str
    - static_cast<double>
    - c_str
    - str2endpoint
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - Socket::SetFailed
    - std::vector::size
    - CountMap*::begin
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, fairness)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:767,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:772,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:775,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:776,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:776,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:781,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:781,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:782,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:783,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:784,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:790,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:791,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:802,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:803,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:807,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:807,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:807,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:810,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:818,1
    - Dst: sqrt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:820,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:820,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:820,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:823,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:823,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 744
    functionDepth: 1
    functionLinenumber: 744
    functionLinenumberEnd: 826
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - std::vector::push_back
    - brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    - brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - sqrt
    - brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    - str2endpoint
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - brpc::policy::ConsistentHashingLoadBalancer::AddServer
    - Socket::SetFailed
    - std::vector::size
    - std::map::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, consistent_hashing)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:843,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:846,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:846,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:851,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:855,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:855,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:856,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:860,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:860,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:862,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:862,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:864,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:864,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:879,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:879,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:880,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:880,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:881,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:889,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:889,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:893,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 895
      start: 828
    functionDepth: 1
    functionLinenumber: 828
    functionLinenumberEnd: 895
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::SetLogOff
    - str2endpoint
    - EXPECT_FALSE
    - brpc::SetTrackMeAddress
    - butil::StringToInt
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    - std::map::size
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, weighted_round_robin)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:906,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:907,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:909,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:910,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:910,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:917,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:917,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:925,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:925,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:934,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:934,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:935,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 936
      start: 897
    functionDepth: 1
    functionLinenumber: 897
    functionLinenumberEnd: 936
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::EndPoint::EndPoint
    - brpc::ExcludedServers::Destroy
    - brpc::ExcludedServers*::Add
    - brpc::SocketUniquePtr::SetLogOff
    - str2endpoint
    - brpc::ExcludedServers::Create
    - brpc::SetTrackMeAddress
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, weighted_round_robin_no_valid_server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:955,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:957,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:958,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:958,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:963,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:963,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:967,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:967,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:970,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:970,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:972,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:972,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:987,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:987,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:988,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:988,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:989,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:998,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:998,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1009,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1011,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 938
    functionDepth: 1
    functionLinenumber: 938
    functionLinenumberEnd: 1013
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - EXPECT_TRUE
    - ASSERT_GE
    - brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - ASSERT_LE
    - str2endpoint
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::StringToInt
    - brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    - std::map::size
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, weighted_randomized)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1021,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1021,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1022,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1022,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1028,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1029,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1030,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1030,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1034,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1034,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1036,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1037,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1045,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1045,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1049,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1049,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1050,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1055,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1055,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1057,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1060,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1060,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1067,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1070,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1070,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1072,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1072,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1081,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1081,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1088,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1091
      start: 1015
    functionDepth: 1
    functionLinenumber: 1015
    functionLinenumberEnd: 1091
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - std::vector::push_back
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - brpc::LoadBalancer*::AddServer
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::_ninflight_app_health_check::store
    - str2endpoint
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - brpc::LoadBalancer*::SelectServer
    - brpc::SetTrackMeAddress
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, health_check_no_valid_server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1099,1
    - Dst: brpc::policy::RandomizedLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1102,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1105,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1108,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1110,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1115,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1122,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1122,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1124,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1126,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1133,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1133,1
    - Dst: id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1133,1
    - Dst: brpc::SocketUniquePtr::Revive
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1134,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1136,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1150,1
    - Dst: abs
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1150,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1155,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1155,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1157
      start: 1093
    functionDepth: 1
    functionLinenumber: 1093
    functionLinenumberEnd: 1157
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - SetFailed
    - ASSERT_TRUE
    - bthread_usleep
    - butil::fast_rand_less_than
    - brpc::policy::RandomizedLoadBalancer::New
    - brpc::LoadBalancer*::AddServer
    - butil::EndPoint::EndPoint
    - brpc::policy::RoundRobinLoadBalancer::New
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - str2endpoint
    - brpc::LoadBalancer*::SelectServer
    - brpc::SetTrackMeAddress
    - id
    - brpc::SocketUniquePtr::Revive
    - abs
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, revived_from_all_failed_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1163
      start: 1162
    functionDepth: 0
    functionLinenumber: 1162
    functionLinenumberEnd: 1163
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 31
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1164
    functionDepth: 0
    functionLinenumber: 1164
    functionLinenumberEnd: 1164
    functionName: ~EchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1172,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1175,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1176,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1177,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1179,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1165
    functionDepth: 1
    functionLinenumber: 1165
    functionLinenumberEnd: 1183
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse*::set_message
    - fetch_sub
    - fetch_add
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* req,\n                      test::EchoResponse* res,\n                      google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1194,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1195,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1196,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1197,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1201
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1201
    functionName: Done::Run
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ErrorCode
    - Failed
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1210,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1213,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1213,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1214,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1207
    functionDepth: 1
    functionLinenumber: 1207
    functionLinenumberEnd: 1216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - butil::fast_rand_less_than
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, invalid_lb_params)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1219,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1220,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1222,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1223,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1227,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1234,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1234,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1235,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1235,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1238,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1243,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1244,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1248,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1251,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1252,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1256,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1258,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1259,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1259,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1262,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1264,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1265,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1265,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1267,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1268,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1269,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1270,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1271,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1278,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1278,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1279,1
    - Dst: store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1280,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1284,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1285,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1286,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1287,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1290,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1290,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1291
      start: 1218
    functionDepth: 1
    functionLinenumber: 1218
    functionLinenumberEnd: 1291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - Done::Done
    - brpc::ChannelOptions::ChannelOptions
    - Done*::req::set_message
    - ARRAY_SIZE
    - brpc::Server::AddService
    - butil::gettimeofday_ms
    - brpc::Channel::Channel
    - store
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    - test::EchoRequest::set_message
    - brpc::Server::Start
    - brpc::Channel::Init
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - butil::fast_rand_less_than
    - load
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, revived_from_all_failed_intergrated)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1295,1
    - Dst: brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1296,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1297,1
    - Dst: brpc::LoadBalancerWithNaming::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1297,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1300,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1302,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1302,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1303,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1307,1
    - Dst: brpc::LoadBalancerWithNaming::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1308
      start: 1294
    functionDepth: 1
    functionLinenumber: 1294
    functionLinenumberEnd: 1308
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancerWithNaming::Init
    - ASSERT_EQ
    - brpc::SocketMapFind
    - brpc::SocketMapKey
    - brpc::GlobalInitializeOrDie
    - butil::EndPoint::EndPoint
    - brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
    - CHECK_EQ
    - str2endpoint
    - Socket::SetFailed
    - brpc::LoadBalancerWithNaming::SelectServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, la_selection_too_long)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:56,1
    - Dst: time
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: initialize_random
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void initialize_random()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: LoadBalancerTest::LoadBalancerTest
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void LoadBalancerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~LoadBalancerTest()
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LoadBalancerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: Foo
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' f'
    - n
    argTypes:
    - Foo
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 82
    functionName: AddN
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AddN(Foo& f, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: read_cb
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void read_cb(const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - Foo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: operator()(const Foo& f)
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void operator()(const Foo& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:101,1
    - Dst: Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:108,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:112,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:115,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:116,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:116,1
    - Dst: CallableObj
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:118,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:122,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:123,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:126,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:133,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 136
    functionName: test_doubly_buffered_data
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - Read
    - DBD::Modify
    - CallableObj
    - DBD::Read
    linkageType: ''
    returnType: void
    signature: void test_doubly_buffered_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:139,1
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:140,1
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:141,1
    - Dst: test_doubly_buffered_data
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 143
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_doubly_buffered_data
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, doubly_buffered_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DBD*>
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:149,1
    - Dst: auto::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:152,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 159
    functionName: DBDBthread
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::Read
    - static_cast<DBD*>
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * DBDBthread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:167,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:168,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:173,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:173,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:177,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:178,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:179,1
    - Dst: DBD::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:181,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:182,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:186,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:186,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 188
    functionName: DBDMultiBthread
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - butil::gettimeofday_ms
    - bthread_start_urgent
    - DBD::Modify
    - bthread_join
    - usleep
    - DBD::Read
    linkageType: ''
    returnType: void
    signature: void DBDMultiBthread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DBDMultiBthread
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - DBDMultiBthread
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, doubly_buffered_data_bthread_multi_bthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' f'
    - n
    argTypes:
    - PerfMap
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 210
    functionName: AddMapN
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AddMapN(PerfMap& f, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 220
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: PerfArgs
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:226,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:231,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:233,1
    - Dst: auto::dbd::Read
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:237,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:242,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 245
    functionName: read_dbd
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - auto::dbd::Read
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * read_dbd(void* void_arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:259,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:259,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:272,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:276,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:277,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:280,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:282,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:283,1
    - Dst: DBD::Modify
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:283,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:284,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:287,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:289,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:298,1
    - Dst: butil::class_name<DBD>
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:298,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 41
    argCount: 2
    argNames:
    - thread_num
    - modify_during_reading
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 304
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 9
    functionsReached:
    - ASSERT_EQ
    - butil::gettimeofday_ms
    - ASSERT_TRUE
    - DBD::Modify
    - pthread_join
    - pthread_create
    - butil::class_name<DBD>
    - snprintf
    - usleep
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void PerfTest(int thread_num, bool modify_during_reading)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:308,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:309,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:310,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:311,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:314,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:315,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:316,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:317,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:320,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:321,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:322,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:323,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:326,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:327,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:328,1
    - Dst: PerfTest
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 330
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - PerfTest
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, dbd_performance)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::resize
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:338,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:338,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:339,1
    - Dst: weight::volatile_value
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:342,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:343,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:346,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:350,1
    - Dst: left::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:351,1
    - Dst: size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:356,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' weight_tree'
    argTypes:
    - std::vector<LALB::ServerInfo>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 359
    functionName: ValidateWeightTree
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - weight::volatile_value
    - size
    - left::load
    - std::vector::size
    - std::vector::resize
    linkageType: ''
    returnType: void
    signature: "void ValidateWeightTree(\n    std::vector<LALB::ServerInfo> & weight_tree)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:364,1
    - Dst: weight_tree::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:365,1
    - Dst: server_map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:367,1
    - Dst: _left_weights::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:373,1
    - Dst: server_map::seek
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:375,1
    - Dst: weight::volatile_value
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:377,1
    - Dst: ValidateWeightTree
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:380,1
    - Dst: _total::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:380,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' lalb'
    - N
    argTypes:
    - LALB
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 381
    functionName: ValidateLALB
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - server_map::seek
    - server_map::size
    - weight_tree::size
    - _left_weights::size
    - ValidateWeightTree
    - _total::load
    - weight::volatile_value
    linkageType: ''
    returnType: void
    signature: void ValidateLALB(LALB& lalb, size_t N)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:385,1
    - Dst: LALB::_total::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:385,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:394,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:396,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:400,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:400,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:402,1
    - Dst: LALB::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:402,1
    - Dst: ValidateLALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:405,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:408,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:408,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:408,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:410,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:411,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:413,1
    - Dst: LALB::RemoveServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:414,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:414,1
    - Dst: ValidateLALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:417,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:421,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:421,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 423
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - std::vector::push_back
    - ASSERT_TRUE
    - LALB::RemoveServer
    - std::vector::pop_back
    - std::vector::end
    - std::vector::back
    - LALB::AddServer
    - ValidateLALB
    - butil::EndPoint::EndPoint
    - snprintf
    - LALB::_total::load
    - std::random_shuffle
    - std::vector::begin
    - str2endpoint
    - Socket::SetFailed
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, la_sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CountMap::CountMap
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:437,1
    - Dst: rand
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:440,1
    - Dst: SelectArg*::hash
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:444,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:447,1
    - Dst: SelectArg*::hash
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:451,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:453,1
    - Dst: LOG_IF
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:455,1
    - Dst: pthread_self
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:455,1
    - Dst: berror
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:456,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 458
    functionName: select_server
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - CountMap::CountMap
    - brpc::LoadBalancer*::SelectServer
    - rand
    - pthread_self
    - SelectArg*::hash
    - LOG_IF
    - berror
    linkageType: ''
    returnType: void
    signature: void * select_server(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:464,1
    - Dst: brpc::Socket*::id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 466
    functionName: SaveRecycle::BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Socket*::id
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* s)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:475,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:477,1
    - Dst: LALB::LALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:479,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:482,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:493,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:493,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:502,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:504,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:504,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:516,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:516,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:518,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:523,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:523,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:524,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:527,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:528,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:529,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:531,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:531,1
    - Dst: std::vector::assign
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:539,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:539,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:539,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:541,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:541,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:541,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:543,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:543,1
    - Dst: brpc::LoadBalancer*::RemoveServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:544,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:544,1
    - Dst: brpc::LoadBalancer*::AddServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:544,1
    - Dst: ValidateLALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:554,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:554,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:555,1
    - Dst: LALB*::_total::load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:559,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:561,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:563,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:563,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:565,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:568,1
    - Dst: CountMap*::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:571,1
    - Dst: CountMap*::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:572,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:579,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:587,1
    - Dst: CountMap::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:587,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:595,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:597,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:597,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:602,1
    - Dst: CountMap::erase
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:604,1
    - Dst: CountMap::erase
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:604,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 100
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 469
    functionDepth: 2
    functionLinenumber: 469
    functionLinenumberEnd: 609
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - ValidateLALB
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - CountMap::size
    - brpc::SetTrackMeAddress
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    - ARRAY_SIZE
    - std::vector::pop_back
    - butil::Timer::start
    - brpc::LoadBalancer*::RemoveServersInBatch
    - std::random_shuffle
    - ASSERT_NE
    - LOG
    - brpc::LoadBalancer*::AddServersInBatch
    - butil::Timer::Timer
    - SaveRecycle::SaveRecycle
    - Socket::Create
    - std::vector::assign
    - butil::Timer::u_elapsed
    - CountMap*::end
    - CountMap::erase
    - LALB::LALB
    - snprintf
    - brpc::SocketUniquePtr::SetLogOff
    - LALB*::_total::load
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - pthread_join
    - brpc::LoadBalancer*::AddServer
    - butil::class_name_str
    - ASSERT_GT
    - str2endpoint
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - Socket::SetFailed
    - brpc::LoadBalancer*::SelectServer
    - std::vector::size
    - CountMap*::begin
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, update_while_selection)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:616,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:618,1
    - Dst: LALB::LALB
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:620,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:622,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:624,1
    - Dst: butil::class_name_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:629,1
    - Dst: std::string::find_last_of
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:631,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:633,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:642,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:644,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:644,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:650,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:650,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:652,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:652,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:658,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:658,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:659,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:660,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:664,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:664,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:666,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:667,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:667,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:668,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:669,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:676,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:676,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:678,1
    - Dst: CountMap*::begin
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:680,1
    - Dst: CountMap*::end
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:694,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:694,1
    - Dst: CountMap::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:694,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:700,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:702,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:709,1
    - Dst: sqrt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:710,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:710,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:711,1
    - Dst: brpc::LoadBalancer*::Describe
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:716,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:717,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:720,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:722,1
    - Dst: static_cast<double>
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:724,1
    - Dst: std::stoi
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:724,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:729,1
    - Dst: sqrt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:730,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:730,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:731,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:734,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:734,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:736,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:736,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:737,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:738,1
    - Dst: CountMap::erase
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:738,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 95
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 611
    functionDepth: 1
    functionLinenumber: 611
    functionLinenumberEnd: 742
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - pthread_create
    - butil::EndPoint::EndPoint
    - CountMap::size
    - std::string::find_last_of
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    - std::string::substr
    - ARRAY_SIZE
    - ASSERT_NE
    - std::to_string
    - SaveRecycle::SaveRecycle
    - Socket::Create
    - std::ostringstream::str
    - CountMap*::end
    - std::stoi
    - CountMap::erase
    - LALB::LALB
    - snprintf
    - sqrt
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - ProfilerStart
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - ProfilerStop
    - ASSERT_TRUE
    - std::vector::push_back
    - brpc::LoadBalancer*::Describe
    - pthread_join
    - butil::fast_rand_less_than
    - brpc::LoadBalancer*::AddServer
    - butil::class_name_str
    - static_cast<double>
    - c_str
    - str2endpoint
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - Socket::SetFailed
    - std::vector::size
    - CountMap*::begin
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, fairness)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:767,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:772,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:775,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:776,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:776,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:781,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:781,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:782,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:783,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:784,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:790,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:791,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:802,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:803,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:807,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:807,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:807,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:810,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:818,1
    - Dst: sqrt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:820,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:820,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:820,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:823,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:823,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 744
    functionDepth: 1
    functionLinenumber: 744
    functionLinenumberEnd: 826
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - std::vector::push_back
    - brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    - brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - sqrt
    - brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    - str2endpoint
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - brpc::policy::ConsistentHashingLoadBalancer::AddServer
    - Socket::SetFailed
    - std::vector::size
    - std::map::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, consistent_hashing)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:843,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:846,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:846,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:851,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:855,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:855,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:856,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:860,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:860,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:862,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:862,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:864,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:864,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:879,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:879,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:880,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:880,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:881,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:889,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:889,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:893,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 895
      start: 828
    functionDepth: 1
    functionLinenumber: 828
    functionLinenumberEnd: 895
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::SetLogOff
    - str2endpoint
    - EXPECT_FALSE
    - brpc::SetTrackMeAddress
    - butil::StringToInt
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    - std::map::size
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, weighted_round_robin)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:906,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:907,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:909,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:910,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:910,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:917,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:917,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:925,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:925,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:934,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:934,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:935,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 936
      start: 897
    functionDepth: 1
    functionLinenumber: 897
    functionLinenumberEnd: 936
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::EndPoint::EndPoint
    - brpc::ExcludedServers::Destroy
    - brpc::ExcludedServers*::Add
    - brpc::SocketUniquePtr::SetLogOff
    - str2endpoint
    - brpc::ExcludedServers::Create
    - brpc::SetTrackMeAddress
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, weighted_round_robin_no_valid_server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:955,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:957,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:958,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:958,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:963,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:963,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:967,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:967,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:970,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:970,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:972,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:972,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:987,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:987,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:988,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:988,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:989,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:998,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:998,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1009,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1011,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 938
    functionDepth: 1
    functionLinenumber: 938
    functionLinenumberEnd: 1013
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - SaveRecycle::SaveRecycle
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - EXPECT_TRUE
    - ASSERT_GE
    - brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - ASSERT_LE
    - str2endpoint
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::StringToInt
    - brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    - std::map::size
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, weighted_randomized)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1021,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1021,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1022,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1022,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1028,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1029,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1030,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1030,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1034,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1034,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1036,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1037,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1045,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1045,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1049,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1049,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1050,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1055,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1055,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1057,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1060,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1060,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1067,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1070,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1070,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1072,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1072,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1081,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1081,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1088,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1091
      start: 1015
    functionDepth: 1
    functionLinenumber: 1015
    functionLinenumberEnd: 1091
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - std::vector::push_back
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - brpc::LoadBalancer*::AddServer
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::_ninflight_app_health_check::store
    - str2endpoint
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - brpc::LoadBalancer*::SelectServer
    - brpc::SetTrackMeAddress
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, health_check_no_valid_server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1099,1
    - Dst: brpc::policy::RandomizedLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1102,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1105,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1108,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1110,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1115,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1122,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1122,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1124,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1126,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1133,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1133,1
    - Dst: id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1133,1
    - Dst: brpc::SocketUniquePtr::Revive
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1134,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1136,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1150,1
    - Dst: abs
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1150,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1155,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1155,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1157
      start: 1093
    functionDepth: 1
    functionLinenumber: 1093
    functionLinenumberEnd: 1157
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - Socket::Create
    - SetFailed
    - ASSERT_TRUE
    - bthread_usleep
    - butil::fast_rand_less_than
    - brpc::policy::RandomizedLoadBalancer::New
    - brpc::LoadBalancer*::AddServer
    - butil::EndPoint::EndPoint
    - brpc::policy::RoundRobinLoadBalancer::New
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - str2endpoint
    - brpc::LoadBalancer*::SelectServer
    - brpc::SetTrackMeAddress
    - id
    - brpc::SocketUniquePtr::Revive
    - abs
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, revived_from_all_failed_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1163
      start: 1162
    functionDepth: 0
    functionLinenumber: 1162
    functionLinenumberEnd: 1163
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 32
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1164
    functionDepth: 0
    functionLinenumber: 1164
    functionLinenumberEnd: 1164
    functionName: ~EchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1172,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1175,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1176,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1177,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1179,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1165
    functionDepth: 1
    functionLinenumber: 1165
    functionLinenumberEnd: 1183
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse*::set_message
    - fetch_sub
    - fetch_add
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* req,\n                      test::EchoResponse* res,\n                      google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1194,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1195,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1196,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1197,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1201
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1201
    functionName: Done::Run
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ErrorCode
    - Failed
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1210,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1213,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1213,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1214,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1207
    functionDepth: 1
    functionLinenumber: 1207
    functionLinenumberEnd: 1216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - butil::fast_rand_less_than
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, invalid_lb_params)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1219,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1220,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1222,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1223,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1227,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1234,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1234,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1235,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1235,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1238,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1243,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1244,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1248,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1251,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1252,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1256,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1258,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1259,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1259,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1262,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1264,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1265,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1265,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1267,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1268,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1269,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1270,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1271,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1278,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1278,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1279,1
    - Dst: store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1280,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1284,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1285,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1286,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1287,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1290,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1290,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1291
      start: 1218
    functionDepth: 1
    functionLinenumber: 1218
    functionLinenumberEnd: 1291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - bthread_usleep
    - Done::Done
    - brpc::ChannelOptions::ChannelOptions
    - Done*::req::set_message
    - ARRAY_SIZE
    - brpc::Server::AddService
    - butil::gettimeofday_ms
    - brpc::Channel::Channel
    - store
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    - test::EchoRequest::set_message
    - brpc::Server::Start
    - brpc::Channel::Init
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - butil::fast_rand_less_than
    - load
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, revived_from_all_failed_intergrated)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1295,1
    - Dst: brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1296,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1297,1
    - Dst: brpc::LoadBalancerWithNaming::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1297,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1300,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1302,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1302,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1303,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1307,1
    - Dst: brpc::LoadBalancerWithNaming::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1308
      start: 1294
    functionDepth: 1
    functionLinenumber: 1294
    functionLinenumberEnd: 1308
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancerWithNaming::Init
    - ASSERT_EQ
    - brpc::SocketMapFind
    - brpc::SocketMapKey
    - brpc::GlobalInitializeOrDie
    - butil::EndPoint::EndPoint
    - brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
    - CHECK_EQ
    - str2endpoint
    - Socket::SetFailed
    - brpc::LoadBalancerWithNaming::SelectServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, la_selection_too_long)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~TestRefCounted()
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TestRefCounted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Increment
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - count
    - n
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: butil::IncrementBy
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementBy(int* count, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref_counted'
    argTypes:
    - scoped_refptr<TestRefCounted>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::RefCountedParam
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedParam(const scoped_refptr<TestRefCounted>& ref_counted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:33,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:35,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:38,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:40,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 43
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:54,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:55,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:56,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:59,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:62,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:65,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 70
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, MultipleCancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:82,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:84,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CallbackCanceledOnDestruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRefCounted::TestRefCounted
      Src: /src/brpc/test/cancelable_callback_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 107
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - TestRefCounted::TestRefCounted
    - EXPECT_TRUE
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CancelDropsCallback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:117,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:119,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:122,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:124,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:133,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:135,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 140
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - ASSERT_FALSE
    - CancelableClosure::IsCancelled
    - CancelableClosure::callback
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Unretained
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~TestRefCounted()
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TestRefCounted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Increment
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - count
    - n
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: butil::IncrementBy
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementBy(int* count, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref_counted'
    argTypes:
    - scoped_refptr<TestRefCounted>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::RefCountedParam
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedParam(const scoped_refptr<TestRefCounted>& ref_counted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:33,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:35,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:38,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:40,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 43
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:54,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:55,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:56,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:59,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:62,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:65,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 70
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, MultipleCancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:82,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:84,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CallbackCanceledOnDestruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRefCounted::TestRefCounted
      Src: /src/brpc/test/cancelable_callback_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 107
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - TestRefCounted::TestRefCounted
    - EXPECT_TRUE
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CancelDropsCallback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:117,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:119,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:122,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:124,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:133,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:135,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 140
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - ASSERT_FALSE
    - CancelableClosure::IsCancelled
    - CancelableClosure::callback
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Unretained
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~TestRefCounted()
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TestRefCounted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Increment
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - count
    - n
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: butil::IncrementBy
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementBy(int* count, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref_counted'
    argTypes:
    - scoped_refptr<TestRefCounted>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::RefCountedParam
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedParam(const scoped_refptr<TestRefCounted>& ref_counted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:33,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:35,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:38,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:40,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 43
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:54,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:55,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:56,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:59,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:62,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:65,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 70
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, MultipleCancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:82,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:84,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CallbackCanceledOnDestruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRefCounted::TestRefCounted
      Src: /src/brpc/test/cancelable_callback_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 107
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - TestRefCounted::TestRefCounted
    - EXPECT_TRUE
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CancelDropsCallback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:117,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:119,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:122,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:124,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:133,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:135,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 140
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - ASSERT_FALSE
    - CancelableClosure::IsCancelled
    - CancelableClosure::callback
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Unretained
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 18
    functionName: ~TestRefCounted()
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TestRefCounted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::Increment
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Increment(int* count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - count
    - n
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: butil::IncrementBy
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementBy(int* count, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref_counted'
    argTypes:
    - scoped_refptr<TestRefCounted>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: butil::RefCountedParam
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedParam(const scoped_refptr<TestRefCounted>& ref_counted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:31,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:33,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:35,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:38,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:40,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 43
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:52,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:54,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:55,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:56,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:59,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:62,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:65,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 70
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - CancelableClosure::callback
    - CancelableClosure::Cancel
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, MultipleCancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:80,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:82,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:84,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Closure::Run
    - butil::Unretained
    - CancelableClosure::callback
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CallbackCanceledOnDestruction)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRefCounted::TestRefCounted
      Src: /src/brpc/test/cancelable_callback_unittest.cc:94,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:95,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:100,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:103,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:104,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: scoped_refptr::get
      Src: /src/brpc/test/cancelable_callback_unittest.cc:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    - Dst: scoped_refptr::HasOneRef
      Src: /src/brpc/test/cancelable_callback_unittest.cc:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 107
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - TestRefCounted::TestRefCounted
    - EXPECT_TRUE
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, CancelDropsCallback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:115,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:117,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:119,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:121,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:122,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:124,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:125,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:126,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:129,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:133,1
    - Dst: CancelableClosure::callback
      Src: /src/brpc/test/cancelable_callback_unittest.cc:135,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::is_null
      Src: /src/brpc/test/cancelable_callback_unittest.cc:136,1
    - Dst: butil::Closure::Run
      Src: /src/brpc/test/cancelable_callback_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/cancelable_callback_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 140
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - butil::Closure::Run
    - butil::Closure::is_null
    - butil::Unretained
    - ASSERT_FALSE
    - CancelableClosure::IsCancelled
    - CancelableClosure::callback
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:146,1
    - Dst: CancelableClosure::Reset
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Bind
      Src: /src/brpc/test/cancelable_callback_unittest.cc:149,1
    - Dst: butil::Unretained
      Src: /src/brpc/test/cancelable_callback_unittest.cc:150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:151,1
    - Dst: CancelableClosure::Cancel
      Src: /src/brpc/test/cancelable_callback_unittest.cc:153,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    - Dst: CancelableClosure::IsCancelled
      Src: /src/brpc/test/cancelable_callback_unittest.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/cancelable_callback_unittest.cc
    functionUses: 0
    functionsReached:
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Unretained
    - CancelableClosure::IsCancelled
    - EXPECT_FALSE
    - CancelableClosure::Cancel
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void TEST(CancelableCallbackTest, IsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: MVariableTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: MVariableTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:60,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:60,1
    - Dst: bvar::MultiDimension::expose
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:62,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:62,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:64,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:65,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:67,1
    - Dst: bvar::MultiDimension::expose
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:67,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:68,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:70,1
    - Dst: bvar::MultiDimension::expose
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:70,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:71,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:73,1
    - Dst: bvar::MultiDimension::expose
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:73,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:74,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:76,1
    - Dst: bvar::MultiDimension::expose_as
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:76,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:77,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:79,1
    - Dst: bvar::MultiDimension::expose_as
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:79,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:80,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:82,1
    - Dst: bvar::MultiDimension::expose_as
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:82,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:83,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:85,1
    - Dst: bvar::MultiDimension::expose_as
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:85,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:86,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:88,1
    - Dst: bvar::MultiDimension::expose_as
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:88,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:89,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:89,1
    - Dst: bvar::MultiDimension::expose
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:91,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:92,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:92,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:95,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:96,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:100,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:100,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:101,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:106,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:106,1
    - Dst: bvar::MVariableBase::list_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:110,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:110,1
    - Dst: bvar::MultiDimension::hide
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:113,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:113,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:114,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:115,1
    - Dst: bvar::MVariableBase::list_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:117,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 118
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::MVariableBase::count_exposed
    - ASSERT_TRUE
    - bvar::MultiDimension::get_stats
    - std::vector::push_back
    - bvar::MultiDimension::name
    - std::vector::pop_back
    - bvar::MultiDimension::expose_as
    - ASSERT_STREQ
    - bvar::MultiDimension::hide
    - bvar::MVariableBase::list_exposed
    - std::vector::clear
    - bvar::MultiDimension::count_stats
    - bvar::MultiDimension::expose
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MVariableTest, expose)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyStringView()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 125
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - strlen
    linkageType: ''
    returnType: void
    signature: void MyStringView(const char* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyStringView::data
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:128,1
    - Dst: MyStringView::size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string_view
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyStringView::size
    - MyStringView::data
    linkageType: ''
    returnType: void
    signature: void MyStringView(const std::string_view& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyStringView::data
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:131,1
    - Dst: MyStringView::size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 131
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyStringView::size
    - MyStringView::data
    linkageType: ''
    returnType: void
    signature: void MyStringView(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - offset
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 133
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyStringView(const char* offset, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: MyStringView::data
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: MyStringView::size
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 144
    functionName: operator std::string() const
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void operator std::string() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 152
    functionName: operator butil::StringPiece() const
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void operator butil::StringPiece() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:160,1
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:160,1
    - Dst: butil::BasicStringPiece::wordmemcmp
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:164,1
    - Dst: data
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:164,1
    - Dst: data
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:164,1
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - MyStringView
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 165
    functionName: operator==(const MyStringView& x, const std::string& y)
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - butil::BasicStringPiece::wordmemcmp
    - data
    linkageType: ''
    returnType: bool
    signature: bool operator==(const MyStringView& x, const std::string& y)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:168,1
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:168,1
    - Dst: butil::BasicStringPiece::wordmemcmp
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:172,1
    - Dst: data
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:172,1
    - Dst: data
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:172,1
    - Dst: size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - std::string
    - MyStringView
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 173
    functionName: operator==(const std::string& x, const MyStringView& y)
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - butil::BasicStringPiece::wordmemcmp
    - data
    linkageType: ''
    returnType: bool
    signature: bool operator==(const std::string& x, const MyStringView& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:182,1
    - Dst: KeyType::size
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:182,1
    - Dst: bvar::MultiDimension::count_labels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:182,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:183,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:183,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:184,1
    - Dst: bvar::MultiDimension::labels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:184,1
    - Dst: ItemType
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:187,1
    - Dst: ItemType
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:187,1
    - Dst: ItemType
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:187,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:188,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:190,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:191,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:191,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:198,1
    - Dst: bvar::Adder*::get_value
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:198,1
    - Dst: bvar::MultiDimension::delete_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:199,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:200,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:201,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 202
    functionName: TestLabels
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - ASSERT_TRUE
    - std::string::c_str
    - KeyType::size
    - bvar::MultiDimension::name
    - bvar::MultiDimension::has_stats
    - ASSERT_STREQ
    - ASSERT_FALSE
    - bvar::Adder*::get_value
    - bvar::MultiDimension::count_labels
    - bvar::MultiDimension::count_stats
    - bvar::MultiDimension::delete_stats
    - ASSERT_NE
    - ItemType
    - bvar::MultiDimension::labels
    linkageType: ''
    returnType: void
    signature: void TestLabels()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:205,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:206,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:207,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:209,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:210,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:211,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:214,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:215,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:216,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:219,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:220,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:221,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:223,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:224,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:225,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:227,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:228,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 204
    functionDepth: 2
    functionLinenumber: 204
    functionLinenumberEnd: 230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestLabels
    linkageType: ''
    returnType: void
    signature: void TEST_F(MVariableTest, labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:238,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:239,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:240,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:243,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:244,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:245,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:246,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:250,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:251,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:256,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:261,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:265,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:266,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:270,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:274,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:278,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:279,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:282,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:283,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:286,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:287,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:291,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:292,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:296,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:298,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:298,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:299,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:299,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:300,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:300,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:301,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 302
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension::get_stats
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - ASSERT_TRUE
    - std::string::c_str
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - sleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(MVariableTest, dump)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::describe_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:312,1
    - Dst: bvar::MVariableBase::describe_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:312,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:313,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:313,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 304
    functionDepth: 1
    functionLinenumber: 304
    functionLinenumberEnd: 314
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - std::string::c_str
    - ASSERT_STREQ
    - bvar::MVariableBase::describe_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(MVariableTest, test_describe_exposed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:31,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:36,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:37,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:38,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:39,1
    - Dst: brpc::get_client_side_messenger
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:45,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:46,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:46,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:49,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:49,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:50,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:50,1
    - Dst: brpc::SocketUniquePtr::initialize_parsing_context
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:51,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:58,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:59,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:60,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:62,1
    - Dst: brpc::policy::H2UnsentRequest*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:63,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:63,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:65,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:68,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:70,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:73,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:74,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:78,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:79,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:80,1
    - Dst: brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:81,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:81,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:85,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp:87,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 88
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_h2_unsent_message_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentRequest*::AppendAndDestroySelf
    - brpc::Controller::response_attachment
    - CHECK_EQ
    - brpc::SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - brpc::policy::H2Context::H2Context
    - brpc::Controller::http_response
    - brpc::SocketUniquePtr::initialize_parsing_context
    - EXPECT_EQ
    - LOG
    - Socket::Create
    - butil::gettimeofday_us
    - butil::IOBuf::size
    - brpc::policy::H2UnsentResponse::New
    - brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
    - ProfilerStart
    - ProfilerStop
    - brpc::Controller::http_request
    - brpc::policy::SerializeHttpRequest
    - brpc::policy::H2Context*::Init
    - brpc::policy::H2UnsentRequest::New
    - brpc::get_client_side_messenger
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST(H2UnsentMessage, request_throughput)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::CPU::CPU
      Src: /src/brpc/test/cpu_unittest.cc:18,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cpu_unittest.cc:22,1
    - Dst: butil::CPU::has_mmx
      Src: /src/brpc/test/cpu_unittest.cc:22,1
    - Dst: butil::CPU::has_sse
      Src: /src/brpc/test/cpu_unittest.cc:27,1
    - Dst: butil::CPU::has_sse2
      Src: /src/brpc/test/cpu_unittest.cc:32,1
    - Dst: butil::CPU::has_sse3
      Src: /src/brpc/test/cpu_unittest.cc:37,1
    - Dst: butil::CPU::has_ssse3
      Src: /src/brpc/test/cpu_unittest.cc:42,1
    - Dst: butil::CPU::has_sse41
      Src: /src/brpc/test/cpu_unittest.cc:47,1
    - Dst: butil::CPU::has_sse42
      Src: /src/brpc/test/cpu_unittest.cc:52,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/cpu_unittest.cc:57,1
    - Dst: butil::CPU::has_mmx
      Src: /src/brpc/test/cpu_unittest.cc:57,1
    - Dst: butil::CPU::has_sse
      Src: /src/brpc/test/cpu_unittest.cc:62,1
    - Dst: butil::CPU::has_sse2
      Src: /src/brpc/test/cpu_unittest.cc:67,1
    - Dst: butil::CPU::has_sse3
      Src: /src/brpc/test/cpu_unittest.cc:72,1
    - Dst: butil::CPU::has_ssse3
      Src: /src/brpc/test/cpu_unittest.cc:79,1
    - Dst: butil::CPU::has_sse41
      Src: /src/brpc/test/cpu_unittest.cc:84,1
    - Dst: butil::CPU::has_sse42
      Src: /src/brpc/test/cpu_unittest.cc:89,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/cpu_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::CPU::has_ssse3
    - ASSERT_TRUE
    - butil::CPU::CPU
    - butil::CPU::has_mmx
    - butil::CPU::has_sse42
    - butil::CPU::has_sse
    - butil::CPU::has_sse2
    - butil::CPU::has_sse3
    - butil::CPU::has_sse41
    linkageType: ''
    returnType: void
    signature: void TEST(CPU, RunExtendedInstructions)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/test/bvar_variable_unittest.cpp:45,1
    - Dst: size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:47,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' vec'
    argTypes:
    - std::vector<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: vec2string
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - std::ostringstream::str
    - empty
    linkageType: ''
    returnType: std::string
    signature: std::string vec2string(const std::vector<T>& vec)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: VariableTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:60,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: VariableTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_variable_unittest.cpp:65,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:67,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:67,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:71,1
    - Dst: boost::any_cast<int>
      Src: /src/brpc/test/bvar_variable_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:73,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:73,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:74,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:75,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:75,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:78,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:80,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:80,1
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_variable_unittest.cpp:82,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:84,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:85,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:85,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:86,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:87,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:88,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_variable_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:89,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:90,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:90,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:92,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_variable_unittest.cpp:92,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:93,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:94,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:95,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:96,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:97,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:98,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:100,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:101,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:102,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:103,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:103,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:107,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:109,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_variable_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:110,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:111,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:111,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:113,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:116,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:117,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:118,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:118,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:120,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:123,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:126,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:127,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:128,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:128,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:130,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:134,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:137,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:138,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:138,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:142,1
    - Dst: boost::any_cast<int>
      Src: /src/brpc/test/bvar_variable_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:144,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:144,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:146,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:150,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_variable_unittest.cpp:153,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:157,1
    - Dst: boost::any_cast<void*>
      Src: /src/brpc/test/bvar_variable_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:159,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_variable_unittest.cpp:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 73
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 160
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::Status::is_hidden
    - ASSERT_EQ
    - bvar::Variable::list_exposed
    - bvar::Status::hide
    - bvar::Status::set_value
    - bvar::Variable::describe_exposed
    - ASSERT_FALSE
    - bvar::Status::Status
    - boost::any_cast<int>
    - bvar::Status::expose
    - bvar::Status::name
    - boost::any_cast<void*>
    - bvar::Status::get_value
    - LOG
    - std::vector::size
    - bvar::Status::get_description
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_variable_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:174,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:175,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:176,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:178,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:179,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:180,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:182,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:183,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:184,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:186,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:187,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:188,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:190,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:191,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:192,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:194,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:195,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:196,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::expose_as
    - ASSERT_EQ
    - bvar::Status::Status
    - bvar::Status::expose
    - bvar::Status::name
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, expose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/bvar_variable_unittest.cpp:203,1
    - Dst: std::make_pair
      Src: /src/brpc/test/bvar_variable_unittest.cpp:203,1
    - Dst: as_string
      Src: /src/brpc/test/bvar_variable_unittest.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' name'
    - ' description'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 205
    functionName: MyDumper::dump
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - as_string
    - push_back
    - std::make_pair
    linkageType: ''
    returnType: bool
    signature: "bool dump(const std::string& name,\n              const butil::StringPiece&
      description)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: print_int
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int print_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:219,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:219,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:220,1
    - Dst: MyDumper::_list::empty
      Src: /src/brpc/test/bvar_variable_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:232,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:233,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:244,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:246,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:250,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:251,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:256,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:258,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:261,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:262,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:265,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:267,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:271,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:272,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:279,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:281,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:285,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:286,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:291,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:293,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:298,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:299,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:304,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:306,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:309,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:310,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:310,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:312,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:315,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:316,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 82
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 317
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - MyDumper::_list::size
    - bvar::Variable::dump_exposed
    - MyDumper::_list::clear
    - bvar::DumpOptions::DumpOptions
    - MyDumper::_list::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, dump)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_variable_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:322,1
    - Dst: bvar::LatencyRecorder::count
      Src: /src/brpc/test/bvar_variable_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:323,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:324,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:325,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:328,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:328,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:330,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: vec2string
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:345,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:345,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:346,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:348,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:361,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:361,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:362,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:364,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 319
    functionDepth: 2
    functionLinenumber: 319
    functionLinenumberEnd: 376
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::Variable::list_exposed
    - std::vector::end
    - std::sort
    - vec2string
    - bvar::LatencyRecorder::LatencyRecorder
    - std::vector::begin
    - bvar::LatencyRecorder::expose
    - bvar::LatencyRecorder::count
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, latency_recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutexattr_init
      Src: /src/brpc/test/bvar_variable_unittest.cpp:380,1
    - Dst: pthread_mutexattr_settype
      Src: /src/brpc/test/bvar_variable_unittest.cpp:381,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bvar_variable_unittest.cpp:383,1
    - Dst: pthread_mutexattr_destroy
      Src: /src/brpc/test/bvar_variable_unittest.cpp:384,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_variable_unittest.cpp:385,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_variable_unittest.cpp:387,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_variable_unittest.cpp:389,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_variable_unittest.cpp:391,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_variable_unittest.cpp:392,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 378
    functionDepth: 1
    functionLinenumber: 378
    functionLinenumberEnd: 394
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - pthread_mutexattr_settype
    - butil::Timer::n_elapsed
    - BAIDU_SCOPED_LOCK
    - pthread_mutexattr_init
    - pthread_mutexattr_destroy
    - pthread_mutex_init
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, recursive_mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/test/bvar_variable_unittest.cpp:45,1
    - Dst: size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:47,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' vec'
    argTypes:
    - std::vector<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: vec2string
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 1
    functionsReached:
    - size
    - std::ostringstream::str
    - empty
    linkageType: ''
    returnType: std::string
    signature: std::string vec2string(const std::vector<T>& vec)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: VariableTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:60,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: VariableTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_variable_unittest.cpp:65,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:67,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:67,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:71,1
    - Dst: boost::any_cast<int>
      Src: /src/brpc/test/bvar_variable_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:73,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:73,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:74,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:75,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:75,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:78,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:80,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:80,1
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_variable_unittest.cpp:82,1
    - Dst: bvar::Status::set_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:84,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:85,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:85,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:86,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:87,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:88,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_variable_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:89,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:90,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:90,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:92,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_variable_unittest.cpp:92,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:93,1
    - Dst: bvar::Status::is_hidden
      Src: /src/brpc/test/bvar_variable_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:94,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:95,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:96,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:97,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:98,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:100,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:101,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:102,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:103,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:103,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:107,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:109,1
    - Dst: bvar::Status::hide
      Src: /src/brpc/test/bvar_variable_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:110,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:111,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:111,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:113,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:116,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:117,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:118,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:118,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:120,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:123,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:126,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:127,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:128,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:128,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:130,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:134,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:137,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:138,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:138,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:142,1
    - Dst: boost::any_cast<int>
      Src: /src/brpc/test/bvar_variable_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:144,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:144,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:146,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:150,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_variable_unittest.cpp:153,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/test/bvar_variable_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:157,1
    - Dst: boost::any_cast<void*>
      Src: /src/brpc/test/bvar_variable_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:159,1
    - Dst: bvar::Status::get_description
      Src: /src/brpc/test/bvar_variable_unittest.cpp:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 73
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 160
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::Status::is_hidden
    - ASSERT_EQ
    - bvar::Variable::list_exposed
    - bvar::Status::hide
    - bvar::Status::set_value
    - bvar::Variable::describe_exposed
    - ASSERT_FALSE
    - bvar::Status::Status
    - boost::any_cast<int>
    - bvar::Status::expose
    - bvar::Status::name
    - boost::any_cast<void*>
    - bvar::Status::get_value
    - LOG
    - std::vector::size
    - bvar::Status::get_description
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::Status
      Src: /src/brpc/test/bvar_variable_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:174,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:175,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:176,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:178,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:179,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:180,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:182,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:183,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:184,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:186,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:187,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:188,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:190,1
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/test/bvar_variable_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:191,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:192,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:194,1
    - Dst: bvar::Status::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:195,1
    - Dst: bvar::Status::name
      Src: /src/brpc/test/bvar_variable_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:196,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::expose_as
    - ASSERT_EQ
    - bvar::Status::Status
    - bvar::Status::expose
    - bvar::Status::name
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, expose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/bvar_variable_unittest.cpp:203,1
    - Dst: std::make_pair
      Src: /src/brpc/test/bvar_variable_unittest.cpp:203,1
    - Dst: as_string
      Src: /src/brpc/test/bvar_variable_unittest.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' name'
    - ' description'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 205
    functionName: MyDumper::dump
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - as_string
    - push_back
    - std::make_pair
    linkageType: ''
    returnType: bool
    signature: "bool dump(const std::string& name,\n              const butil::StringPiece&
      description)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: print_int
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int print_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:219,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:219,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_variable_unittest.cpp:220,1
    - Dst: MyDumper::_list::empty
      Src: /src/brpc/test/bvar_variable_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:232,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:233,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:244,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:246,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:250,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:251,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:256,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:258,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:261,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:262,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:265,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:267,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:271,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:272,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:279,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:281,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:285,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:286,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:291,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:293,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:298,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:299,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:304,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:306,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:309,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:310,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:310,1
    - Dst: MyDumper::_list::clear
      Src: /src/brpc/test/bvar_variable_unittest.cpp:312,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/test/bvar_variable_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:315,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:316,1
    - Dst: MyDumper::_list::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 82
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 317
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - MyDumper::_list::size
    - bvar::Variable::dump_exposed
    - MyDumper::_list::clear
    - bvar::DumpOptions::DumpOptions
    - MyDumper::_list::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, dump)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_variable_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:322,1
    - Dst: bvar::LatencyRecorder::count
      Src: /src/brpc/test/bvar_variable_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:323,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:324,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:325,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:328,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:328,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:330,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: vec2string
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:345,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:345,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:346,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:348,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:361,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:361,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:362,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:364,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 319
    functionDepth: 2
    functionLinenumber: 319
    functionLinenumberEnd: 376
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::Variable::list_exposed
    - std::vector::end
    - std::sort
    - vec2string
    - bvar::LatencyRecorder::LatencyRecorder
    - std::vector::begin
    - bvar::LatencyRecorder::expose
    - bvar::LatencyRecorder::count
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, latency_recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutexattr_init
      Src: /src/brpc/test/bvar_variable_unittest.cpp:380,1
    - Dst: pthread_mutexattr_settype
      Src: /src/brpc/test/bvar_variable_unittest.cpp:381,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bvar_variable_unittest.cpp:383,1
    - Dst: pthread_mutexattr_destroy
      Src: /src/brpc/test/bvar_variable_unittest.cpp:384,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_variable_unittest.cpp:385,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_variable_unittest.cpp:387,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_variable_unittest.cpp:389,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_variable_unittest.cpp:391,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_variable_unittest.cpp:392,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 378
    functionDepth: 1
    functionLinenumber: 378
    functionLinenumberEnd: 394
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - pthread_mutexattr_settype
    - butil::Timer::n_elapsed
    - BAIDU_SCOPED_LOCK
    - pthread_mutexattr_init
    - pthread_mutexattr_destroy
    - pthread_mutex_init
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(VariableTest, recursive_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/bvar_variable_unittest.cpp:398,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bvar_variable_unittest.cpp:399,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bvar_variable_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 401
    functionName: main
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char** argv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/brpc/test/object_pool_unittest.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: Foo
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 10
    functionsReached:
    - rand
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/brpc/test/object_pool_unittest.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: Foo
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 10
    functionsReached:
    - rand
    linkageType: ''
    returnType: void
    signature: void Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: ~Foo()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Foo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: butil::value
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - foo
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: butil::validate
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const Foo* foo)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: butil::value
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - foo
    argTypes:
    - Foo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: butil::validate
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const Foo* foo)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ObjectPoolTest::ObjectPoolTest
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObjectPoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: ~ObjectPoolTest()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ObjectPoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/object_pool_unittest.cpp:69,1
    - Dst: time
      Src: /src/brpc/test/object_pool_unittest.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: ObjectPoolTest::SetUp
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/object_pool_unittest.cpp:81,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: YellObj
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - printf
    linkageType: ''
    returnType: void
    signature: void YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/object_pool_unittest.cpp:86,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - erase
    - printf
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:94,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:94,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:98,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:98,1
    - Dst: get_object<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:100,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:101,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:102,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 104
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ARRAY_SIZE
    - ASSERT_EQ
    - return_object
    - describe_objects<MyObject>
    - get_object<MyObject>
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, change_config)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - value
    - dummy
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value, int dummy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/test/object_pool_unittest.cpp:114,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:116,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:118,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:120,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:129,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:135,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:139,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:145,1
    - Dst: clear_objects<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    - Dst: empty
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    - Dst: size
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 150
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - return_object
    - get_object<NonDefaultCtorObject>
    - clear
    - empty
    - printf
    - size
    - get_object<YellObj>
    - clear_objects<YellObj>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_object<Foo>
      Src: /src/brpc/test/object_pool_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:163,1
    - Dst: describe_objects<Foo>
      Src: /src/brpc/test/object_pool_unittest.cpp:163,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 164
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - get_object<Foo>
    - describe_objects<Foo>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, validator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:167,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:172,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:175,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:177,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:178,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:180,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:182,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:184,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:185,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:185,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:187,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:189,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:191,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:192,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:192,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:194,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:195,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear_objects<int>
    - get_object<int>
    - return_object
    - describe_objects<int>
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - printf
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:207,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:209,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:212,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:212,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:213,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:218,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:220,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:222,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:223,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:223,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:226,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:230,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:231,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:231,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:232,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:235,1
    - Dst: describe_objects<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:238,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 239
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - return_object
    - get_object<SilentObj>
    - std::vector::push_back
    - stop
    - SilentObj::SilentObj
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - start
    - describe_objects<SilentObj>
    - n_elapsed
    - printf
    - std::vector::clear
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_perf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:247,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:248,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:249,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:253,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:254,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:254,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:255,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:257,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:257,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:257,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:260,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:263,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:265,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:267,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:269,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:271,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:271,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:271,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:273,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:274,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:275,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:277,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:280,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:283,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:284,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:284,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:285,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 288
    functionName: get_and_return_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 2
    functionsReached:
    - return_object
    - stop
    - start
    - std::vector::begin
    - n_elapsed
    - printf
    - get_object<D>
    - butil::Timer::start
    - std::random_shuffle
    - pthread_self
    - butil::Timer::Timer
    - D
    - butil::Timer::n_elapsed
    - std::vector::clear
    - std::vector::reserve
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * get_and_return_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:293,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:294,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:295,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:298,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:301,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:303,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:305,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:307,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:309,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:311,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:311,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:311,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:313,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:314,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:317,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:319,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:320,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:320,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:321,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 325
    functionName: new_and_delete_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 2
    functionsReached:
    - std::vector::push_back
    - stop
    - D
    - start
    - std::vector::end
    - std::random_shuffle
    - std::vector::begin
    - pthread_self
    - n_elapsed
    - printf
    - std::vector::clear
    - D::D
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * new_and_delete_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_and_return_int
      Src: /src/brpc/test/object_pool_unittest.cpp:328,1
    - Dst: new_and_delete_int
      Src: /src/brpc/test/object_pool_unittest.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 330
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_and_return_int
    - new_and_delete_int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_and_return_int_single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:335,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:335,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:337,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:338,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:343,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:343,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:345,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:346,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:349,1
    - Dst: clear_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:350,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:354,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:354,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 355
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_objects<D>
    - ARRAY_SIZE
    - ASSERT_EQ
    - memcmp
    - pthread_join
    - pthread_create
    - clear_objects<D>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_and_return_int_multiple_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:358,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:359,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:362,1
    - Dst: std::vector::capacity
      Src: /src/brpc/test/object_pool_unittest.cpp:363,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:364,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:366,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:370,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:370,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 373
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear_objects<int>
    - get_object<int>
    - describe_objects<int>
    - std::vector::push_back
    - ASSERT_EQ
    - std::vector::capacity
    - std::vector::reserve
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, verify_get)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ObjectPoolTest::ObjectPoolTest
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObjectPoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: ~ObjectPoolTest()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ObjectPoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/object_pool_unittest.cpp:69,1
    - Dst: time
      Src: /src/brpc/test/object_pool_unittest.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: ObjectPoolTest::SetUp
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/object_pool_unittest.cpp:81,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: YellObj
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - printf
    linkageType: ''
    returnType: void
    signature: void YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/test/object_pool_unittest.cpp:86,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - erase
    - printf
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:94,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:94,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:98,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:98,1
    - Dst: get_object<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:100,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:101,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:102,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 104
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ARRAY_SIZE
    - ASSERT_EQ
    - return_object
    - describe_objects<MyObject>
    - get_object<MyObject>
    - printf
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, change_config)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - value
    - dummy
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: NonDefaultCtorObject
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonDefaultCtorObject(int value, int dummy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/test/object_pool_unittest.cpp:114,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:116,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:118,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:120,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:129,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:135,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:139,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:145,1
    - Dst: clear_objects<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    - Dst: empty
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    - Dst: size
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 150
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - return_object
    - get_object<NonDefaultCtorObject>
    - clear
    - empty
    - printf
    - size
    - get_object<YellObj>
    - clear_objects<YellObj>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_object<Foo>
      Src: /src/brpc/test/object_pool_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:163,1
    - Dst: describe_objects<Foo>
      Src: /src/brpc/test/object_pool_unittest.cpp:163,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 164
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - get_object<Foo>
    - describe_objects<Foo>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, validator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:167,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:172,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:175,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:177,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:178,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:180,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:182,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:184,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:185,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:185,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:187,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:189,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:191,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:192,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:192,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:194,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:195,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear_objects<int>
    - get_object<int>
    - return_object
    - describe_objects<int>
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - printf
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:207,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:209,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:212,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:212,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:213,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:218,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:220,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:222,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:223,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:223,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:226,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:230,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:231,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:231,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:232,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:235,1
    - Dst: describe_objects<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:238,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 239
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - return_object
    - get_object<SilentObj>
    - std::vector::push_back
    - stop
    - SilentObj::SilentObj
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - start
    - describe_objects<SilentObj>
    - n_elapsed
    - printf
    - std::vector::clear
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_perf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:247,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:248,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:249,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:253,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:254,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:254,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:255,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:257,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:257,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:257,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:260,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:263,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:265,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:267,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:269,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:271,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:271,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:271,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:273,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:274,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:275,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:277,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:280,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:283,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:284,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:284,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:285,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 288
    functionName: get_and_return_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 3
    functionsReached:
    - return_object
    - stop
    - start
    - std::vector::begin
    - n_elapsed
    - printf
    - get_object<D>
    - butil::Timer::start
    - std::random_shuffle
    - pthread_self
    - butil::Timer::Timer
    - D
    - butil::Timer::n_elapsed
    - std::vector::clear
    - std::vector::reserve
    - std::vector::push_back
    - butil::Timer::stop
    - std::vector::end
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * get_and_return_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:293,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:294,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:295,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:298,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:301,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:303,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:305,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:307,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:309,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:311,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:311,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:311,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:313,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:314,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:317,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:319,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:320,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:320,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:321,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 325
    functionName: new_and_delete_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 3
    functionsReached:
    - std::vector::push_back
    - stop
    - D
    - start
    - std::vector::end
    - std::random_shuffle
    - std::vector::begin
    - pthread_self
    - n_elapsed
    - printf
    - std::vector::clear
    - D::D
    - std::vector::reserve
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * new_and_delete_int(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_and_return_int
      Src: /src/brpc/test/object_pool_unittest.cpp:328,1
    - Dst: new_and_delete_int
      Src: /src/brpc/test/object_pool_unittest.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 330
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_and_return_int
    - new_and_delete_int
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_and_return_int_single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:335,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:335,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:337,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:338,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:343,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:343,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:345,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:346,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:349,1
    - Dst: clear_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:350,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:354,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:354,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 355
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_objects<D>
    - ARRAY_SIZE
    - ASSERT_EQ
    - memcmp
    - pthread_join
    - pthread_create
    - clear_objects<D>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, get_and_return_int_multiple_threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:358,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:359,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:362,1
    - Dst: std::vector::capacity
      Src: /src/brpc/test/object_pool_unittest.cpp:363,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:364,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:366,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:370,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:370,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 373
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear_objects<int>
    - get_object<int>
    - describe_objects<int>
    - std::vector::push_back
    - ASSERT_EQ
    - std::vector::capacity
    - std::vector::reserve
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(ObjectPoolTest, verify_get)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:53,1
    - Dst: loop_count::load
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:55,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:59,1
    - Dst: loop_count::load
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:63,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 67
    functionName: print_func
    functionSourceFile: /src/brpc/test/bthread_cond_bug_unittest.cpp
    functionUses: 0
    functionsReached:
    - loop_count::load
    - LOG
    - usleep
    linkageType: ''
    returnType: void
    signature: void * print_func(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:71,1
    - Dst: bthread_stopped
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:74,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:74,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:78,1
    - Dst: bthread_stopped
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:78,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:78,1
    - Dst: wait_for
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:81,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:90,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:93,1
    - Dst: rand
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:93,1
    - Dst: loop_count::fetch_add
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:96,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 98
    functionName: produce_func
    functionSourceFile: /src/brpc/test/bthread_cond_bug_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - loop_count::fetch_add
    - push_back
    - bthread_self
    - usleep
    - size
    - LOG
    - wait_for
    - rand
    linkageType: ''
    returnType: void
    signature: void * produce_func(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_stopped
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:101,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:101,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:105,1
    - Dst: empty
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:106,1
    - Dst: pop_front
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:107,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:108,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:110,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:113,1
    - Dst: rand
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 121
    functionName: consume_func
    functionSourceFile: /src/brpc/test/bthread_cond_bug_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_self
    - empty
    - pop_front
    - usleep
    - size
    - LOG_EVERY_SECOND
    - LOG
    - rand
    linkageType: ''
    returnType: void
    signature: void * consume_func(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:126,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:129,1
    - Dst: print_func
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:131,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:133,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:134,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:136,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_bug_unittest.cpp:140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 123
    functionDepth: 2
    functionLinenumber: 123
    functionLinenumberEnd: 141
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_bug_unittest.cpp
    functionUses: 0
    functionsReached:
    - print_func
    - ASSERT_EQ
    - bthread_start_background
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadCondBugTest, test_bug)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:34,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_once_unittest.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: init_routine
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void init_routine()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once
      Src: /src/brpc/test/bthread_once_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:41,1
    - Dst: load
      Src: /src/brpc/test/bthread_once_unittest.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: bthread_once_task
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - load
    - bthread_once
    linkageType: ''
    returnType: void
    signature: void bthread_once_task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once_task
      Src: /src/brpc/test/bthread_once_unittest.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 2
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: first_bthread_once_task
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_once_task
    linkageType: ''
    returnType: void
    signature: void * first_bthread_once_task(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once_task
      Src: /src/brpc/test/bthread_once_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: other_bthread_once_task
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_once_task
    linkageType: ''
    returnType: void
    signature: void * other_bthread_once_task(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:58,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:58,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:61,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_once_unittest.cpp:63,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_once_unittest.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_once_unittest.cpp:65,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_once_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:69,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:69,1
    - Dst: bthread_once_task
      Src: /src/brpc/test/bthread_once_unittest.cpp:72,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:75,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:77,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 56
    functionDepth: 2
    functionLinenumber: 56
    functionLinenumberEnd: 78
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_once_task
    - ASSERT_EQ
    - bthread_usleep
    - bthread_start_background
    - ASSERT_GT
    - bthread_join
    - concurrency
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadOnceTest, once)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:86,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_once_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: BthreadSingleton::BthreadSingleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void BthreadSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_leaky_singleton<BthreadSingleton>
      Src: /src/brpc/test/bthread_once_unittest.cpp:92,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_once_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:95,1
    - Dst: load
      Src: /src/brpc/test/bthread_once_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: get_bthread_singleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - ASSERT_EQ
    - load
    - bthread::get_leaky_singleton<BthreadSingleton>
    linkageType: ''
    returnType: void
    signature: void get_bthread_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/test/bthread_once_unittest.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 102
    functionName: first_get_bthread_singleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void * first_get_bthread_singleton(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/test/bthread_once_unittest.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 108
    functionName: get_bthread_singleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 2
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void * get_bthread_singleton(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:114,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:114,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:117,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_once_unittest.cpp:119,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_once_unittest.cpp:120,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_once_unittest.cpp:121,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_once_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:125,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:125,1
    - Dst: get_bthread_singleton
      Src: /src/brpc/test/bthread_once_unittest.cpp:128,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:131,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:133,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 134
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - bthread_start_background
    - ASSERT_GT
    - bthread_join
    - get_bthread_singleton
    - concurrency
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadOnceTest, singleton)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:34,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_once_unittest.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: init_routine
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void init_routine()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once
      Src: /src/brpc/test/bthread_once_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:41,1
    - Dst: load
      Src: /src/brpc/test/bthread_once_unittest.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: bthread_once_task
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - load
    - bthread_once
    linkageType: ''
    returnType: void
    signature: void bthread_once_task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once_task
      Src: /src/brpc/test/bthread_once_unittest.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 2
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: first_bthread_once_task
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_once_task
    linkageType: ''
    returnType: void
    signature: void * first_bthread_once_task(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once_task
      Src: /src/brpc/test/bthread_once_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: other_bthread_once_task
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_once_task
    linkageType: ''
    returnType: void
    signature: void * other_bthread_once_task(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:58,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:58,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:61,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_once_unittest.cpp:63,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_once_unittest.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_once_unittest.cpp:65,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_once_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:69,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:69,1
    - Dst: bthread_once_task
      Src: /src/brpc/test/bthread_once_unittest.cpp:72,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:75,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:77,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 56
    functionDepth: 2
    functionLinenumber: 56
    functionLinenumberEnd: 78
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_once_task
    - ASSERT_EQ
    - bthread_usleep
    - bthread_start_background
    - ASSERT_GT
    - bthread_join
    - concurrency
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadOnceTest, once)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:86,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_once_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: BthreadSingleton::BthreadSingleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void BthreadSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_leaky_singleton<BthreadSingleton>
      Src: /src/brpc/test/bthread_once_unittest.cpp:92,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_once_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:95,1
    - Dst: load
      Src: /src/brpc/test/bthread_once_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: get_bthread_singleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_NE
    - ASSERT_EQ
    - load
    - bthread::get_leaky_singleton<BthreadSingleton>
    linkageType: ''
    returnType: void
    signature: void get_bthread_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/test/bthread_once_unittest.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 102
    functionName: first_get_bthread_singleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void * first_get_bthread_singleton(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/test/bthread_once_unittest.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 108
    functionName: get_bthread_singleton
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 5
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void * get_bthread_singleton(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:114,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:114,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_once_unittest.cpp:117,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_once_unittest.cpp:119,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_once_unittest.cpp:120,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_once_unittest.cpp:121,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_once_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_once_unittest.cpp:125,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_once_unittest.cpp:125,1
    - Dst: get_bthread_singleton
      Src: /src/brpc/test/bthread_once_unittest.cpp:128,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:131,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_once_unittest.cpp:133,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 134
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_once_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - bthread_start_background
    - ASSERT_GT
    - bthread_join
    - get_bthread_singleton
    - concurrency
    - ASSERT_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadOnceTest, singleton)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_channel_unittest.cpp:63,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_channel_unittest.cpp:64,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_channel_unittest.cpp:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 66
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_channel_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    functionName: RunClosure
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: void * RunClosure(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 78
    functionName: DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteOnlyOnceChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:80,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 82
    functionName: ~DeleteOnlyOnceChannel()
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void ~DeleteOnlyOnceChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_channel_unittest.cpp:103,1
    - Dst: brpc::AuthContext*::set_group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:104,1
    - Dst: brpc::AuthContext*::set_roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:105,1
    - Dst: brpc::AuthContext*::set_starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:106,1
    - Dst: brpc::AuthContext*::set_is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 109
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AuthContext*::set_user
    - brpc::AuthContext*::set_roles
    - brpc::AuthContext*::set_starter
    - brpc::AuthContext*::set_is_service
    - brpc::AuthContext*::set_group
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:115,1
    - Dst: brpc::policy::MostCommonMessage*::socket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:120,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:120,1
    - Dst: brpc::policy::RpcMeta::has_authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:122,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:124,1
    - Dst: brpc::Socket*::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:125,1
    - Dst: brpc::policy::RpcMeta::authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:125,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:126,1
    - Dst: MyAuthenticator::VerifyCredential
      Src: /src/brpc/test/brpc_channel_unittest.cpp:127,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:128,1
    - Dst: brpc::Socket*::mutable_auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 131
    functionName: VerifyMyRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::VerifyCredential
    - EXPECT_TRUE
    - butil::EndPoint
    - brpc::Socket*::mutable_auth_context
    - static_cast<const brpc::policy::MostCommonMessage*>
    - brpc::Socket*::auth_context
    - MyAuthenticator::MyAuthenticator
    - brpc::policy::RpcMeta::has_authentication_data
    - brpc::policy::MostCommonMessage*::socket
    - EXPECT_EQ
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - brpc::policy::RpcMeta::authentication_data
    linkageType: ''
    returnType: bool
    signature: bool VerifyMyRequest(const brpc::InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: CallAfterRpcObject::CallAfterRpcObject
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallAfterRpcObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: ~CallAfterRpcObject()
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ~CallAfterRpcObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: CallAfterRpcObject::Append
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void Append(const std::string& s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:155,1
    - Dst: CallAfterRpcObject::CallAfterRpcObject
      Src: /src/brpc/test/brpc_channel_unittest.cpp:156,1
    - Dst: brpc::Controller*::set_after_rpc_resp_fn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:157,1
    - Dst: std::bind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:157,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:160,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:161,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:161,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:162,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:162,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:165,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:166,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_channel_unittest.cpp:167,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:171,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:171,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:172,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:172,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:174,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:174,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:175,1
    - Dst: ::test::EchoResponse*::add_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:176,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:176,1
    - Dst: ::test::EchoResponse*::set_receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    - Dst: brpc::Controller*::_current_call::sending_sock::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 179
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::SetFailed
    - brpc::Controller*::_current_call::sending_sock::id
    - brpc::Controller*::set_after_rpc_resp_fn
    - bthread_usleep
    - ::test::EchoResponse*::set_receiving_socket_id
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::sleep_us
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::server_fail
    - ::test::EchoRequest*::message
    - ::test::EchoRequest*::code
    - ::test::EchoResponse*::set_message
    - CallAfterRpcObject::CallAfterRpcObject
    - LOG
    - static_cast<brpc::Controller*>
    - std::bind
    - ::test::EchoResponse*::add_code_list
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const test::EchoRequest*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:184,1
    - Dst: static_cast<const test::EchoResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:185,1
    - Dst: std::shared_ptr<CallAfterRpcObject>::Append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:187,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:188,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 4
    argNames:
    - str
    - cntl
    - req
    - res
    argTypes:
    - std::shared_ptr<CallAfterRpcObject>
    - brpc::Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 190
    functionName: MyEchoService::CallAfterRpc
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - static_cast<const test::EchoResponse*>
    - std::shared_ptr<CallAfterRpcObject>::Append
    - static_cast<const test::EchoRequest*>
    linkageType: ''
    returnType: void
    signature: "void CallAfterRpc(std::shared_ptr<CallAfterRpcObject> str,\n                        brpc::Controller*
      cntl,\n                        const google::protobuf::Message* req,\n                        const
      google::protobuf::Message* res)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:200,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_channel_unittest.cpp:201,1
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_channel_unittest.cpp:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:209,1
    - Dst: AddHandler
      Src: /src/brpc/test/brpc_channel_unittest.cpp:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:211,1
    - Dst: save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:211,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:211,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:212,1
    - Dst: fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 213
    functionName: ChannelTest::ChannelTest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - fname
    - std::string
    - AddHandler
    - EXPECT_EQ
    - save
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - butil::endpoint2str
    - options
    linkageType: ''
    returnType: void
    signature: void ChannelTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 215
    functionName: ~ChannelTest()
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ChannelTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: ChannelTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:230,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_channel_unittest.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 231
    functionName: ChannelTest::register_protocol
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - RegisterProtocol
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void register_protocol()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DestroyingPtr::ReleaseSocket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:236,1
    - Dst: brpc::SocketUniquePtr::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:239,1
    - Dst: brpc::AuthContext*::user
      Src: /src/brpc/test/brpc_channel_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:240,1
    - Dst: brpc::AuthContext*::group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:240,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:241,1
    - Dst: brpc::AuthContext*::roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:242,1
    - Dst: brpc::AuthContext*::starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:242,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:243,1
    - Dst: brpc::AuthContext*::is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:243,1
    - Dst: brpc::InputMessageBase*::arg
      Src: /src/brpc/test/brpc_channel_unittest.cpp:245,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:248,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: brpc::policy::RpcMeta::request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:256,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:256,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:256,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:258,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:258,1
    - Dst: ChannelTest*::_dummy::options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:260,1
    - Dst: Get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:260,1
    - Dst: brpc::RpcPBMessages*::Request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:261,1
    - Dst: brpc::RpcPBMessages*::Response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:262,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:263,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:264,1
    - Dst: brpc::DestroyingPtr::payload::cutn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:265,1
    - Dst: brpc::DestroyingPtr::payload::size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:265,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:265,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:267,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:267,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:270,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:270,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:272,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:273,1
    - Dst: brpc::Controller*::_current_call::sending_sock::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:274,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_channel_unittest.cpp:274,1
    - Dst: "brpc::NewCallback<\n            int64_t, brpc::Controller*,\n            brpc::RpcPBMessages*,\n
        \           const brpc::Server*,\n            brpc::MethodStatus*, int64_t>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:278,1
    - Dst: brpc::policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:283,1
    - Dst: ChannelTest*::_svc::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:285,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 286
    functionName: ChannelTest::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SocketUniquePtr::auth_context
    - brpc::SocketUniquePtr::SetFailed
    - brpc::RpcPBMessages*::Response
    - brpc::AuthContext*::group
    - brpc::InputMessageBase*::arg
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::id
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::AuthContext*::starter
    - brpc::Controller*::_current_call::sending_sock::reset
    - brpc::policy::RpcMeta::correlation_id
    - method_name
    - brpc::RpcPBMessages*::Request
    - ChannelTest*::_svc::CallMethod
    - EXPECT_EQ
    - "brpc::NewCallback<\n            int64_t, brpc::Controller*,\n            brpc::RpcPBMessages*,\n
      \           const brpc::Server*,\n            brpc::MethodStatus*, int64_t>"
    - service_name
    - ChannelTest*::_dummy::options
    - EXPECT_TRUE
    - brpc::DestroyingPtr::ReleaseSocket
    - ChannelTest*::_svc::descriptor
    - brpc::AuthContext*::is_service
    - brpc::DestroyingPtr::payload::cutn
    - brpc::SocketUniquePtr::release
    - brpc::policy::RpcMeta::attachment_size
    - brpc::DestroyingPtr::payload::size
    - brpc::Controller::Controller
    - brpc::policy::RpcMeta::request
    - brpc::AuthContext*::roles
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - brpc::AuthContext*::user
    - Get
    linkageType: ''
    returnType: void
    signature: void ProcessRpcRequest(brpc::InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_channel_unittest.cpp:290,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:292,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:297,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ep
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 301
    functionName: ChannelTest::StartAccept
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - ChannelTest::StartAccept
    - tcp_listen
    - bthread_usleep
    linkageType: ''
    returnType: int
    signature: int StartAccept(butil::EndPoint ep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StopAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:304,1
    - Dst: Join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 306
    functionName: ChannelTest::StopAndJoin
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - StopAccept
    - Join
    linkageType: ''
    returnType: void
    signature: void StopAndJoin()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:312,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:325,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:327,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:327,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - channel
    - single_server
    - short_connection
    argTypes:
    - brpc::Channel*
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 329
    functionName: ChannelTest::SetUpChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_EQ
    - brpc::Channel*::Init
    linkageType: ''
    returnType: void
    signature: "void SetUpChannel(brpc::Channel* channel, \n                      bool
      single_server,\n                      bool short_connection,\n                      const
      brpc::Authenticator* auth = NULL,\n                      std::string connection_group
      = std::string(),\n                      bool use_backup_request_policy = false)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:338,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:339,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:341,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:347,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - channel
    - cntl
    - req
    - res
    - async
    argTypes:
    - brpc::ChannelBase*
    - brpc::Controller*
    - test::EchoRequest*
    - test::EchoResponse*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 349
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - bthread_id_join
    - brpc::Controller*::call_id
    - brpc::DoNothing
    linkageType: ''
    returnType: void
    signature: "void CallMethod(brpc::ChannelBase* channel, \n                    brpc::Controller*
      cntl,\n                    test::EchoRequest* req, test::EchoResponse* res,\n
      \                   bool async, bool destroy = false)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:358,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:359,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:361,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:367,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - channel
    - cntl
    - req
    - res
    - async
    argTypes:
    - brpc::ChannelBase*
    - brpc::Controller*
    - test::ComboRequest*
    - test::ComboResponse*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 369
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - bthread_id_join
    - brpc::Controller*::call_id
    - brpc::DoNothing
    linkageType: ''
    returnType: void
    signature: "void CallMethod(brpc::ChannelBase* channel, \n                    brpc::Controller*
      cntl,\n                    test::ComboRequest* req, test::ComboResponse* res,\n
      \                   bool async, bool destroy = false)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:377,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:378,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:380,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:383,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:384,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:386,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:386,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 371
    functionDepth: 2
    functionLinenumber: 371
    functionLinenumberEnd: 387
    functionName: ChannelTest::TestConnectionFailed
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestConnectionFailed(bool single_server, bool async, \n                              bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:400,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:400,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:405,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:408,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:409,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:411,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:411,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:412,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:412,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:413,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:413,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 389
    functionDepth: 2
    functionLinenumber: 389
    functionLinenumberEnd: 414
    functionName: ChannelTest::TestConnectionFailedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::EchoRequest::set_message
    - LOG
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestConnectionFailedParallel(bool single_server, bool async,
      \n                                      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:423,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:426,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:426,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:430,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:430,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:433,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:436,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:437,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:439,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:439,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:440,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:440,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:441,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:441,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:442,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:443,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:443,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 416
    functionDepth: 2
    functionLinenumber: 416
    functionLinenumberEnd: 444
    functionName: ChannelTest::TestConnectionFailedSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - LOG
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestConnectionFailedSelective(bool single_server, bool async,
      \n                                       bool short_connection)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:451,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:451,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:452,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:453,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:455,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:458,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:461,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:461,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:463,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:464,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:464,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:465,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:465,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:466,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:467,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:467,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:471,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:472,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:473,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:473,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:474,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:477,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:477,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:482,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:483,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:484,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:485,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:486,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:487,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:488,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:488,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:490,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:490,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:493,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:494,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:496,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:497,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:498,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:499,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:501,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:501,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:503,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:504,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:508,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:509,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:511,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:512,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:513,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:514,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:516,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:516,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:518,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:518,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:520,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 47
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 446
    functionDepth: 2
    functionLinenumber: 446
    functionLinenumberEnd: 521
    functionName: ChannelTest::TestSuccess
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::Reset
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - butil::gettimeofday_us
    - test::EchoResponse::receiving_socket_id
    - test::EchoRequest::Clear
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - EXPECT_NE
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSuccess(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:530,1
    - Dst: test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:531,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 525
    functionDepth: 1
    functionLinenumber: 525
    functionLinenumberEnd: 534
    functionName: ChannelTest::SetCode::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    - test::EchoRequest*::set_code
    - brpc::SubCall
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int channel_index,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* response)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Skip
      Src: /src/brpc/test/brpc_channel_unittest.cpp:545,1
    - Dst: ChannelTest::SetCode::Map
      Src: /src/brpc/test/brpc_channel_unittest.cpp:547,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 539
    functionDepth: 2
    functionLinenumber: 539
    functionLinenumberEnd: 548
    functionName: ChannelTest::SetCodeOnEven::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Skip
    - ChannelTest::SetCode::Map
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int channel_index,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* response)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<const test::ComboRequest*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:559,1
    - Dst: dynamic_cast<test::ComboResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:560,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:561,1
    - Dst: test::ComboRequest*::requests_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:563,1
    - Dst: brpc::Bad
      Src: /src/brpc/test/brpc_channel_unittest.cpp:564,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:566,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:566,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:567,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:568,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - res_base
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 553
    functionDepth: 1
    functionLinenumber: 553
    functionLinenumberEnd: 569
    functionName: ChannelTest::GetReqAndAddRes::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Bad
    - test::ComboRequest*::requests_size
    - brpc::SubCall
    - test::ComboResponse*::add_responses
    - google::protobuf::MethodDescriptor*::name
    - pbrpcframework::get_prototype_by_method_descriptor
    - dynamic_cast<test::ComboResponse*>
    - test::ComboRequest*::requests
    - dynamic_cast<const test::ComboRequest*>
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int channel_index,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* res_base)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:578,1
    - Dst: auto::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:579,1
    - Dst: auto::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:581,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:583,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:583,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 585
    functionName: ChannelTest::SuccessLimitCallMapper::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    - brpc::SubCall
    - auto::set_code
    - auto::set_sleep_us
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int channel_index,\n                          const
      google::protobuf::MethodDescriptor* method,\n                          const
      google::protobuf::Message* req_base,\n                          google::protobuf::Message*
      response) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 594
    functionName: ChannelTest::MergeNothing::Merge
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Result
    signature: "Result Merge(google::protobuf::Message* /*response*/,\n                     const
      google::protobuf::Message* /*sub_response*/)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:602,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:602,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:610,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:612,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:615,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:616,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:619,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:619,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:620,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:620,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:621,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:622,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:622,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:622,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:624,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:624,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:627,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:627,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:631,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:632,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:633,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:633,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:634,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:637,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:637,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:639,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 597
    functionDepth: 2
    functionLinenumber: 597
    functionLinenumberEnd: 640
    functionName: ChannelTest::TestSuccessParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - SetCode::SetCode
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSuccessParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:648,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:648,1
    - Dst: DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:650,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:651,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:657,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:663,1
    - Dst: SetCode*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:663,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:667,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:668,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:671,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:671,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:672,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:672,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:673,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:677,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:683,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:684,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:685,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:685,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:686,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:689,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:689,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:691,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 642
    functionDepth: 2
    functionLinenumber: 642
    functionLinenumberEnd: 692
    functionName: ChannelTest::TestSuccessDuplicatedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - SetCode::SetCode
    - SetCode*::ref_count
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: "void TestSuccessDuplicatedParallel(\n        bool single_server, bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:700,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:700,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:701,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:702,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:704,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:704,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:706,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:708,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:708,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:710,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:714,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:715,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:717,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:717,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:717,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:720,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:720,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:722,1
    - Dst: test::EchoRequest::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:722,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:722,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:723,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:723,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:727,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:728,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:729,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:729,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:730,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:733,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:733,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:735,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 694
    functionDepth: 2
    functionLinenumber: 694
    functionLinenumberEnd: 736
    functionName: ChannelTest::TestSuccessSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - brpc::Controller::remote_side
    - bthread_usleep
    - brpc::Controller::sub
    - brpc::ChannelOptions::ChannelOptions
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::code_list
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - test::EchoResponse::code_list_size
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::SelectiveChannel::Init
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - test::EchoRequest::code
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_GE
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestSuccessSelective(bool single_server, bool async, bool short_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:743,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:743,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:748,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:749,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:749,1
    - Dst: SetCodeOnEven::SetCodeOnEven
      Src: /src/brpc/test/brpc_channel_unittest.cpp:751,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:753,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:756,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:757,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:758,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:763,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:767,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:767,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:767,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:770,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:770,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:772,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:772,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:776,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:777,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:778,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:778,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:779,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:782,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:782,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:784,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 738
    functionDepth: 2
    functionLinenumber: 738
    functionLinenumberEnd: 785
    functionName: ChannelTest::TestSkipParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - SetCodeOnEven::SetCodeOnEven
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSkipParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:792,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:792,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:798,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:798,1
    - Dst: GetReqAndAddRes::GetReqAndAddRes
      Src: /src/brpc/test/brpc_channel_unittest.cpp:800,1
    - Dst: MergeNothing::MergeNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:800,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:805,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:806,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:810,1
    - Dst: ::test::EchoRequest*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:811,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:811,1
    - Dst: ::test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:812,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:816,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:817,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:818,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:823,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:824,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:827,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:827,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:828,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:828,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:829,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:830,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:830,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:832,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:832,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:833,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:833,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:837,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:838,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:839,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:839,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:840,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:843,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:843,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:845,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 787
    functionDepth: 2
    functionLinenumber: 787
    functionLinenumberEnd: 846
    functionName: ChannelTest::TestSuccessParallel2
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - GetReqAndAddRes::GetReqAndAddRes
    - bthread_usleep
    - brpc::Controller::Failed
    - MergeNothing::MergeNothing
    - ConnectionCount
    - brpc::Controller::Reset
    - ChannelTest::SetUpChannel
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - ::test::EchoRequest*::set_code
    - EXPECT_EQ
    - test::ComboResponse::responses
    - butil::string_printf
    - butil::gettimeofday_us
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::latency_us
    - ::test::EchoRequest*::set_message
    - EXPECT_LT
    - butil::BasicStringPiece::BasicStringPiece
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - ASSERT_GT
    - test::ComboResponse::responses_size
    - brpc::Controller::Controller
    - EXPECT_GE
    - test::ComboRequest::add_requests
    linkageType: ''
    returnType: void
    signature: void TestSuccessParallel2(bool single_server, bool async, bool short_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: brpc::ParallelChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:860,1
    - Dst: SuccessLimitCallMapper::SuccessLimitCallMapper
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:864,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:864,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:867,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:870,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:871,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:872,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:876,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:877,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:877,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:879,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:879,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:882,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:882,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:886,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:886,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:887,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:887,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:890,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:891,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:892,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:892,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:893,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:896,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:896,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:898,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 35
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 899
      start: 848
    functionDepth: 2
    functionLinenumber: 848
    functionLinenumberEnd: 899
    functionName: ChannelTest::TestSuccessLimitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - SuccessLimitCallMapper::SuccessLimitCallMapper
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - brpc::ParallelChannel::Init
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSuccessLimitParallel(bool single_server, bool async, bool
      short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CancelerArg*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:907,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:911,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:912,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 906
    functionDepth: 1
    functionLinenumber: 906
    functionLinenumberEnd: 914
    functionName: ChannelTest::Canceler
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CancelerArg*>
    - LOG
    - brpc::StartCancel
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * Canceler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:924,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:925,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:930,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:931,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:932,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:933,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:934,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:936,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 917
    functionDepth: 2
    functionLinenumber: 917
    functionLinenumberEnd: 937
    functionName: ChannelTest::CancelBeforeCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::StartCancel
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelBeforeCallMethod(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:945,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:945,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:951,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:952,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:952,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:957,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:960,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:961,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:962,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:963,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:964,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:966,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:966,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:967,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:967,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:968,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:968,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:969,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 939
    functionDepth: 2
    functionLinenumber: 939
    functionLinenumberEnd: 970
    functionName: ChannelTest::CancelBeforeCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Controller::sub
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::StartCancel
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelBeforeCallMethodParallel(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:978,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:978,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:981,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:982,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:982,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:984,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:985,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:986,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:986,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:989,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:992,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:994,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:995,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:996,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:997,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:997,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:997,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:998,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 972
    functionDepth: 2
    functionLinenumber: 972
    functionLinenumberEnd: 999
    functionName: ChannelTest::CancelBeforeCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - brpc::StartCancel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void CancelBeforeCallMethodSelective(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1008,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1009,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1011,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1014,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1015,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1019,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1019,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1020,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1021,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1022,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1023,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1024,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1025,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1025,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1025,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1026,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1026,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1027,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1027,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1029,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1029,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1030,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1030,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1031,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1032
      start: 1001
    functionDepth: 2
    functionLinenumber: 1001
    functionLinenumberEnd: 1032
    functionName: ChannelTest::CancelDuringCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - brpc::Controller::sub
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - butil::Timer::u_elapsed
    - EXPECT_TRUE
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - EXPECT_LT
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - butil::Timer::stop
    - pthread_join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void CancelDuringCallMethod(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1040,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1040,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1047,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1047,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1052,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1055,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1060,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1060,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1061,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1062,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1063,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1064,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1065,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1068,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1068,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1069,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1069,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1070,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1071,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1071,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1075
      start: 1034
    functionDepth: 2
    functionLinenumber: 1034
    functionLinenumberEnd: 1075
    functionName: ChannelTest::CancelDuringCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - brpc::Controller::sub
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - butil::Timer::u_elapsed
    - ChannelTest::CallMethod
    - brpc::Controller::latency_us
    - brpc::Controller::call_id
    - EXPECT_LT
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - butil::Timer::stop
    - pthread_join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void CancelDuringCallMethodParallel(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1083,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1083,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1087,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1087,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1089,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1090,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1091,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1091,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1094,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1097,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1102,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1102,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1103,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1104,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1105,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1106,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1107,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1108,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1108,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1109,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1110,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1111,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1112,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1112,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1114
      start: 1077
    functionDepth: 2
    functionLinenumber: 1077
    functionLinenumberEnd: 1114
    functionName: ChannelTest::CancelDuringCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - brpc::Controller::sub
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - butil::Timer::u_elapsed
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::SelectiveChannel::Init
    - EXPECT_LT
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - butil::Timer::stop
    - pthread_join
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::AddChannel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void CancelDuringCallMethodSelective(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1122,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1122,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1123,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1124,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1126,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1129,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1130,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1131,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1134,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1135,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1135,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1137
      start: 1116
    functionDepth: 2
    functionLinenumber: 1116
    functionLinenumberEnd: 1137
    functionName: ChannelTest::CancelAfterCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - bthread_id_error
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelAfterCallMethod(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1145,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1145,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1157,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1160,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1162,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1164,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1165,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1165,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1167,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1167,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1169,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1169,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1170,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1139
    functionDepth: 2
    functionLinenumber: 1139
    functionLinenumberEnd: 1171
    functionName: ChannelTest::CancelAfterCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Controller::sub
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - bthread_id_error
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelAfterCallMethodParallel(\n        bool single_server, bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1174,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1174,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1175,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1176,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1178,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1179,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1182,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1185,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1185,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1186,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1188,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1188,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1188,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1191,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1192,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1193,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1193,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1194,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1197,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1197,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1200
      start: 1173
    functionDepth: 2
    functionLinenumber: 1173
    functionLinenumberEnd: 1200
    functionName: ChannelTest::TestAttachment
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - brpc::Controller::request_attachment
    - std::string
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_FALSE
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestAttachment(bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1208,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1211,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1214,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1215,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1215,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1215,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1202
    functionDepth: 2
    functionLinenumber: 1202
    functionLinenumberEnd: 1217
    functionName: ChannelTest::TestRequestNotInit
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestRequestNotInit(bool single_server, bool async,\n                            bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1224,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1224,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1231,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1231,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1236,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1240,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1240,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1240,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1241,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1241,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1243
      start: 1219
    functionDepth: 2
    functionLinenumber: 1219
    functionLinenumberEnd: 1243
    functionName: ChannelTest::TestRequestNotInitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - LOG
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestRequestNotInitParallel(bool single_server, bool async,\n
      \                                   bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1250,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1250,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1254,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1254,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1256,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1258,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1258,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1261,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1265,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1265,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1265,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1266,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1267,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1268,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1268,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1245
    functionDepth: 2
    functionLinenumber: 1245
    functionLinenumberEnd: 1270
    functionName: ChannelTest::TestRequestNotInitSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - ChannelTest::SetUpChannel
    - LOG
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestRequestNotInitSelective(bool single_server, bool async,\n
      \                                    bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1276,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1276,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1277,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1278,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1280,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1283,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1284,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1285,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1286,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1287,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1288,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1290,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1290,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1290,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1293
      start: 1272
    functionDepth: 2
    functionLinenumber: 1272
    functionLinenumberEnd: 1293
    functionName: ChannelTest::TestRPCTimeout
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TestRPCTimeout(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1312,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1315,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1316,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1317,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1318,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1319,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1320,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1321,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1323,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1323,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1325,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1325,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1328,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1295
    functionDepth: 2
    functionLinenumber: 1295
    functionLinenumberEnd: 1329
    functionName: ChannelTest::TestRPCTimeoutParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::sub
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void TestRPCTimeoutParallel(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1338,1
    - Dst: test::EchoRequest*::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1339,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1340,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - method
    - req_base
    - response
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1342
      start: 1333
    functionDepth: 1
    functionLinenumber: 1333
    functionLinenumberEnd: 1342
    functionName: ChannelTest::MakeTheRequestTimeout::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoRequest*::set_sleep_us
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    - brpc::SubCall
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int /*channel_index*/,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* response)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1350,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1350,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1357,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1357,1
    - Dst: MakeTheRequestTimeout::MakeTheRequestTimeout
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1359,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1362,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1365,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1366,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1367,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1368,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1370,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1371,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1371,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1371,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1372,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1372,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1373,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1375,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1377,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1377,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1381,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1345
    functionDepth: 2
    functionLinenumber: 1345
    functionLinenumberEnd: 1382
    functionName: ChannelTest::TimeoutStillChecksSubChannelsParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::sub
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - butil::Timer::start
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - MakeTheRequestTimeout::MakeTheRequestTimeout
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void TimeoutStillChecksSubChannelsParallel(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1389,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1389,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1393,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1393,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1395,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1397,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1397,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1400,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1403,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1404,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1405,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1406,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1407,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1408,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1409,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1411,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1411,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1412,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1412,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1414,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1414,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1415,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1415,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1416,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1417
      start: 1384
    functionDepth: 2
    functionLinenumber: 1384
    functionLinenumberEnd: 1417
    functionName: ChannelTest::TestRPCTimeoutSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::sub
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::SelectiveChannel::Init
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::AddChannel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestRPCTimeoutSelective(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1424,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1424,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1425,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1426,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1428,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1431,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1432,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1437
      start: 1419
    functionDepth: 2
    functionLinenumber: 1419
    functionLinenumberEnd: 1437
    functionName: ChannelTest::TestCloseFD
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestCloseFD(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1444,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1444,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1451,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1451,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1456,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1459,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1460,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1461,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1463,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1463,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1464,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1465,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1465,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1466,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1439
    functionDepth: 2
    functionLinenumber: 1439
    functionLinenumberEnd: 1467
    functionName: ChannelTest::TestCloseFDParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestCloseFDParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1477,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1480,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1480,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1482,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1484,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1484,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1487,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1490,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1491,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1495,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1496,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1496,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1498,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1499
      start: 1469
    functionDepth: 2
    functionLinenumber: 1469
    functionLinenumberEnd: 1499
    functionName: ChannelTest::TestCloseFDSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestCloseFDSelective(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1507,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1508,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1510,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1513,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1514,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1519
      start: 1501
    functionDepth: 2
    functionLinenumber: 1501
    functionLinenumberEnd: 1519
    functionName: ChannelTest::TestServerFail
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoRequest::set_server_fail
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestServerFail(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1526,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1526,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1533,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1533,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1538,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1541,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1542,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1545,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1545,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1546,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1546,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1547,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1548
      start: 1521
    functionDepth: 2
    functionLinenumber: 1521
    functionLinenumberEnd: 1548
    functionName: ChannelTest::TestServerFailParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoRequest::set_server_fail
    - LOG
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestServerFailParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1555,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1555,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1559,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1559,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1561,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1563,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1563,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1566,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1569,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1570,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1574,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1575,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1575,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1577,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1577,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1578,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1579
      start: 1550
    functionDepth: 2
    functionLinenumber: 1550
    functionLinenumberEnd: 1579
    functionName: ChannelTest::TestServerFailSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - test::EchoRequest::set_server_fail
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - LOG
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestServerFailSelective(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1585,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1585,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1586,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1587,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1589,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1592,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1593,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1594,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1596,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1596,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1596,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1597,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1597,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1597,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1599,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1600,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1601,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1601,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1602,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1605,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1606
      start: 1581
    functionDepth: 2
    functionLinenumber: 1581
    functionLinenumberEnd: 1606
    functionName: ChannelTest::TestDestroyChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - butil::gettimeofday_us
    - test::EchoRequest::set_sleep_us
    - std::string
    - brpc::Controller::ErrorText
    - bthread_usleep
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - ConnectionCount
    - brpc::Controller::ErrorCode
    - EXPECT_LT
    - test::EchoResponse::message
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestDestroyChannel(bool single_server, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1613,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1613,1
    - Dst: brpc::ParallelChannel::ParallelChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1614,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1616,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1618,1
    - Dst: brpc::ParallelChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1618,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1622,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1625,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1626,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1627,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1629,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1629,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1629,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1632,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1633,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1634,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1634,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1635,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1638
      start: 1608
    functionDepth: 2
    functionLinenumber: 1608
    functionLinenumberEnd: 1638
    functionName: ChannelTest::TestDestroyChannelParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::ParallelChannel::ParallelChannel
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - std::string
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::ParallelChannel*::AddChannel
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TestDestroyChannelParallel(bool single_server, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1645,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1645,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1647,1
    - Dst: brpc::SelectiveChannel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1647,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1649,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1650,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1651,1
    - Dst: brpc::SelectiveChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1651,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1654,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1657,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1658,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1662,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1662,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1663,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1664,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1665,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1665,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1668,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1669,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1670,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1670,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1671,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1673,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1640
    functionDepth: 2
    functionLinenumber: 1640
    functionLinenumberEnd: 1674
    functionName: ChannelTest::TestDestroyChannelSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::remote_side
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel*::Init
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - std::string
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::SelectiveChannel*::AddChannel
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestDestroyChannelSelective(bool single_server, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1677,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1680,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1683,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1683,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1683,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - channel
    - async
    argTypes:
    - brpc::ChannelBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1685
      start: 1676
    functionDepth: 2
    functionLinenumber: 1676
    functionLinenumberEnd: 1685
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::EchoResponse::message
    - EXPECT_EQ
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void RPCThread(brpc::ChannelBase* channel, bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1692,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1695,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1695,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1696,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1696,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1696,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1697,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - channel
    - async
    - count
    argTypes:
    - brpc::ChannelBase*
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1699
      start: 1687
    functionDepth: 2
    functionLinenumber: 1687
    functionLinenumberEnd: 1699
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - brpc::Controller::ErrorCode
    - test::EchoResponse::message
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void RPCThread(brpc::ChannelBase* channel, bool async, int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1703,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1704,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1705,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1709,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1714,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 5
    argNames:
    - single_server
    - async
    - short_connection
    - auth
    - count
    argTypes:
    - bool
    - bool
    - bool
    - brpc::Authenticator*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1716
      start: 1701
    functionDepth: 2
    functionLinenumber: 1701
    functionLinenumberEnd: 1716
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - brpc::Controller::ErrorCode
    - test::EchoResponse::message
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void RPCThread(bool single_server, bool async, bool short_connection,\n
      \                  const brpc::Authenticator* auth, int count)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1724,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1724,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1725,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1726,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1727,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1733,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1735,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1735,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1743,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1743,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1745,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1745,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1747,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1748
      start: 1718
    functionDepth: 2
    functionLinenumber: 1718
    functionLinenumberEnd: 1748
    functionName: ChannelTest::TestAuthentication
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::count::load
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - pthread_join
    - pthread_create
    - brpc::NewCallback
    - brpc::Channel::Channel
    - EXPECT_EQ
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestAuthentication(bool single_server, \n                            bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1756,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1756,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1757,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1764,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1764,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1775,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1775,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1779,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1783,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1783,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1785,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1785,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1787,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1788
      start: 1750
    functionDepth: 2
    functionLinenumber: 1750
    functionLinenumberEnd: 1788
    functionName: ChannelTest::TestAuthenticationParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::count::load
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - pthread_join
    - pthread_create
    - brpc::ParallelChannel::AddChannel
    - brpc::NewCallback
    - EXPECT_EQ
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestAuthenticationParallel(bool single_server, \n                                    bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1796,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1796,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1797,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1801,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1801,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1803,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1812,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1814,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1814,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1818,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1822,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1822,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1824,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1824,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1827
      start: 1790
    functionDepth: 2
    functionLinenumber: 1790
    functionLinenumberEnd: 1827
    functionName: ChannelTest::TestAuthenticationSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::count::load
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - pthread_join
    - pthread_create
    - brpc::NewCallback
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::Init
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - ChannelTest::SetUpChannel
    - MyAuthenticator::MyAuthenticator
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestAuthenticationSelective(bool single_server, \n                                    bool
      async, bool short_connection)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1834,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1834,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1835,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1836,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1841,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1842,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1845,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1846,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1847,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1848,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1849,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1849,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1849,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1850,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1850,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1851,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1854,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1857,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1858,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1862,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1862,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1862,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1863,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1863,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1865,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1866,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1867,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1867,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1868,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1872,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1873,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1873,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1874,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1874,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1876,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1876,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1879,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1880,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1883,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1884,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1885,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1887,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1887,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 39
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1888
      start: 1829
    functionDepth: 2
    functionLinenumber: 1829
    functionLinenumberEnd: 1888
    functionName: ChannelTest::TestRetry
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::Controller::Failed
    - ConnectionCount
    - brpc::Controller::Reset
    - brpc::Controller::set_timeout_ms
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - brpc::Controller::set_max_retry
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - brpc::Controller::retried_count
    linkageType: ''
    returnType: void
    signature: void TestRetry(bool single_server, bool async, bool short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1891,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1891,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1893,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1894,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1899,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1900,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1900,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1903,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1904,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1905,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1911,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1912,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1913,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1914,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1916,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1916,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1918
      start: 1890
    functionDepth: 2
    functionLinenumber: 1890
    functionLinenumberEnd: 1918
    functionName: ChannelTest::TestRetryOtherServer
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::TempFile::save_format
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - endpoint2str
    - ChannelTest::StopAndJoin
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - butil::TempFile::TempFile
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::Controller::set_max_retry
    linkageType: ''
    returnType: void
    signature: void TestRetryOtherServer(bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - channel_test_param
    - async_param
    - short_connection_param
    - fixed_backoff_param
    argTypes:
    - ChannelTest*
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1928
      start: 1921
    functionDepth: 0
    functionLinenumber: 1921
    functionLinenumberEnd: 1928
    functionName: ChannelTest::TestRetryBackoffInfo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TestRetryBackoffInfo(ChannelTest* channel_test_param,\n                             bool
      async_param,\n                             bool short_connection_param,\n                             bool
      fixed_backoff_param)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TestRetryBackoffInfo*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1937,1
    - Dst: auto::channel_test::TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1938,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1941
      start: 1936
    functionDepth: 0
    functionLinenumber: 1936
    functionLinenumberEnd: 1941
    functionName: ChannelTest::TestRetryBackoffBthread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TestRetryBackoffInfo*>
    - auto::channel_test::TestRetryBackoff
    linkageType: ''
    returnType: void
    signature: void * TestRetryBackoffBthread(void* void_args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1945,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1945,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1949,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1951,1
    - Dst: brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1952,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1956,1
    - Dst: brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1957,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1963,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1964,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1966,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1970,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1971,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1971,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1974,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1975,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1982,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1983,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1984,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1985,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1986,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1987,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1987,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1987,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1988,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1988,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1991,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1991,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 4
    argNames:
    - async
    - short_connection
    - fixed_backoff
    - retry_backoff_in_pthread
    argTypes:
    - bool
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1993
      start: 1943
    functionDepth: 2
    functionLinenumber: 1943
    functionLinenumberEnd: 1993
    functionName: ChannelTest::TestRetryBackoff
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::unique_ptr::reset
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_GT
    - std::string
    - std::string::c_str
    - brpc::Channel::Channel
    - butil::TempFile::TempFile
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::TempFile::fname
    - ChannelTest::CallMethod
    - brpc::Controller::latency_us
    - brpc::Channel::Init
    - brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
    - brpc::Controller::set_max_retry
    - butil::TempFile::save_format
    - ChannelTest::StartAccept
    - endpoint2str
    - brpc::Controller::Controller
    - std::unique_ptr::unique_ptr
    - brpc::Controller::retried_count
    - std::unique_ptr::get
    - brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
    linkageType: ''
    returnType: void
    signature: "void TestRetryBackoff(bool async, bool short_connection, bool fixed_backoff,\n
      \                         bool retry_backoff_in_pthread)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2001,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2001,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2002,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2003,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2008,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2009,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2011,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2012,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2013,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2014,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2016,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2016,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2016,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2018,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2018,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2019,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2023,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2024,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2025,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2025,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2026,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2031,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2032
      start: 1995
    functionDepth: 2
    functionLinenumber: 1995
    functionLinenumberEnd: 2032
    functionName: ChannelTest::TestBackupRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::Controller::set_backup_request_ms
    - ConnectionCount
    - brpc::Controller::set_timeout_ms
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::Controller::has_backup_request
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - brpc::Controller::set_max_retry
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - brpc::Controller::retried_count
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: "void TestBackupRequest(bool single_server, bool async,\n                           bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2038
      start: 2036
    functionDepth: 0
    functionLinenumber: 2036
    functionLinenumberEnd: 2038
    functionName: ChannelTest::BackupRequestPolicyImpl::GetBackupRequestMs
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBackupRequestMs(const brpc::Controller*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2043
      start: 2041
    functionDepth: 0
    functionLinenumber: 2041
    functionLinenumberEnd: 2043
    functionName: ChannelTest::BackupRequestPolicyImpl::DoBackup
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool DoBackup(const brpc::Controller*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2045
      start: 2045
    functionDepth: 0
    functionLinenumber: 2045
    functionLinenumberEnd: 2045
    functionName: ChannelTest::BackupRequestPolicyImpl::OnRPCEnd
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnRPCEnd(const brpc::Controller*) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2053,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2053,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2062,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2063,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2068,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2069,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2072,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2073,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2074,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2076,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2076,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2076,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2077,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2077,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2078,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2078,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2079,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2083,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2084,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2085,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2085,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2086,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2089,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2089,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2093,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2094
      start: 2051
    functionDepth: 2
    functionLinenumber: 2051
    functionLinenumberEnd: 2094
    functionName: ChannelTest::TestBackupRequestPolicy
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - ConnectionCount
    - brpc::Controller::set_timeout_ms
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::Controller::has_backup_request
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ASSERT_GE
    - ChannelTest::CallMethod
    - brpc::Controller::set_max_retry
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - brpc::Controller::retried_count
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void TestBackupRequestPolicy(bool single_server, bool async,\n                                 bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2113
      start: 2113
    functionDepth: 0
    functionLinenumber: 2113
    functionLinenumberEnd: 2113
    functionName: MyShared::MyShared
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyShared()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2114
      start: 2114
    functionDepth: 0
    functionLinenumber: 2114
    functionLinenumberEnd: 2114
    functionName: MyShared::MyShared
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyShared(const MyShared&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 2115
    functionDepth: 0
    functionLinenumber: 2115
    functionLinenumberEnd: 2115
    functionName: ~MyShared() override
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MyShared() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyShared::MyShared
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2128,1
    - Dst: MyShared*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2133,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2136,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2140
      start: 2123
    functionDepth: 1
    functionLinenumber: 2123
    functionLinenumberEnd: 2140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MyShared*::ref_count
    - butil::intrusive_ptr::ref_count
    - MyShared::MyShared
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, intrusive_ptr_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2145,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2146,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2147,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2147,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2151,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2152,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2153,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2153,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2156,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2158,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2159,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2160,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2164,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2164,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2170,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2174
      start: 2142
    functionDepth: 1
    functionLinenumber: 2142
    functionLinenumberEnd: 2174
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::SingleServer
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::SocketMapFind
    - brpc::SocketMapKey
    - Init
    - butil::EndPoint::EndPoint
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_as_single_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2178,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2179
      start: 2176
    functionDepth: 1
    functionLinenumber: 2176
    functionLinenumberEnd: 2179
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_unknown_naming_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2183,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2184
      start: 2181
    functionDepth: 1
    functionLinenumber: 2181
    functionLinenumberEnd: 2184
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_unexist_fns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2187,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2189,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2191,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2191,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2192,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2194,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2194,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2196,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2198,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2198,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2199
      start: 2186
    functionDepth: 1
    functionLinenumber: 2186
    functionLinenumberEnd: 2199
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - butil::TempFile::save
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - butil::TempFile::TempFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_empty_fns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2202,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2205,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2206,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2207,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2208
      start: 2201
    functionDepth: 1
    functionLinenumber: 2201
    functionLinenumberEnd: 2208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_empty_lns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2211,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2213,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2213,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2214,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2217,1
    - Dst: brpc::Channel*::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2217,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: brpc::Channel*::_lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2221,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2231,1
    - Dst: _lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2231,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2233,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2242,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2243,1
    - Dst: butil::intrusive_ptr::_nref::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2243,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2245
      start: 2210
    functionDepth: 1
    functionLinenumber: 2210
    functionLinenumberEnd: 2245
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - dynamic_cast<brpc::LoadBalancerWithNaming*>
    - butil::intrusive_ptr::get
    - Init
    - ASSERT_FALSE
    - brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
    - _lb::get
    - butil::TempFile::save
    - brpc::Channel::Channel
    - butil::intrusive_ptr::_nref::load
    - butil::TempFile::TempFile
    - brpc::Channel*::SingleServer
    - brpc::Channel*::_lb::get
    - brpc::Channel*::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_naming_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2248,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2253,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2255,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2258,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2260,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2263,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2265,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2268,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2270,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2272,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2274,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2278,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2280,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2282,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2285,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2287,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2289,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2291,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2293,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2295,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2297,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2299,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2300,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2309,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2311,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2311,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2312,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2315,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2317,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2318,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2319,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2319,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2320,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2247
    functionDepth: 1
    functionLinenumber: 2247
    functionLinenumberEnd: 2321
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - ARRAY_SIZE
    - ASSERT_TRUE
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - butil::TempFile::TempFile
    - fprintf
    - fclose
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, parse_hostname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2331
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2331
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectionFailed
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, connection_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2336,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2339,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2340,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2342
      start: 2333
    functionDepth: 1
    functionLinenumber: 2333
    functionLinenumberEnd: 2342
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::ErrorText
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, empty_parallel_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2346,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2346,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2348,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2351,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2352,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2353,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2353,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2354
      start: 2344
    functionDepth: 1
    functionLinenumber: 2344
    functionLinenumberEnd: 2354
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, empty_selective_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Bad
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2362
      start: 2357
    functionDepth: 1
    functionLinenumber: 2357
    functionLinenumberEnd: 2362
    functionName: BadCall::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Bad
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    const google::protobuf::Message*,\n                     google::protobuf::Message*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2369,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2371,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2371,1
    - Dst: BadCall::BadCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2375,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2378,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2379,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2380,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2380,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2381
      start: 2365
    functionDepth: 1
    functionLinenumber: 2365
    functionLinenumberEnd: 2381
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetUpChannel
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - BadCall::BadCall
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, returns_bad_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Skip
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2389
      start: 2384
    functionDepth: 1
    functionLinenumber: 2384
    functionLinenumberEnd: 2389
    functionName: SkipCall::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Skip
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    const google::protobuf::Message*,\n                     google::protobuf::Message*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2396,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2398,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2398,1
    - Dst: SkipCall::SkipCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2399,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2402,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2405,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2406,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2409,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2409,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2410,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2413
      start: 2392
    functionDepth: 1
    functionLinenumber: 2392
    functionLinenumberEnd: 2413
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - SetUpChannel
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    - SkipCall::SkipCall
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, skip_all_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailedParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2419,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2423
      start: 2415
    functionDepth: 0
    functionLinenumber: 2415
    functionLinenumberEnd: 2423
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectionFailedParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, connection_failed_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailedSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2429,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2433
      start: 2425
    functionDepth: 0
    functionLinenumber: 2425
    functionLinenumberEnd: 2433
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectionFailedSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, connection_failed_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccess
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2443
      start: 2435
    functionDepth: 0
    functionLinenumber: 2435
    functionLinenumberEnd: 2443
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccess
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2449,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2453
      start: 2445
    functionDepth: 0
    functionLinenumber: 2445
    functionLinenumberEnd: 2453
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessDuplicatedParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2459,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2463
      start: 2455
    functionDepth: 0
    functionLinenumber: 2455
    functionLinenumberEnd: 2463
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessDuplicatedParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_duplicated_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2469,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2473
      start: 2465
    functionDepth: 0
    functionLinenumber: 2465
    functionLinenumberEnd: 2473
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSkipParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2483
      start: 2475
    functionDepth: 0
    functionLinenumber: 2475
    functionLinenumberEnd: 2483
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSkipParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, skip_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessParallel2
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2489,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2493
      start: 2485
    functionDepth: 0
    functionLinenumber: 2485
    functionLinenumberEnd: 2493
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessParallel2
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_parallel2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessLimitParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2499,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2503
      start: 2495
    functionDepth: 0
    functionLinenumber: 2495
    functionLinenumberEnd: 2503
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessLimitParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_limit_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelBeforeCallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2509,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2513
      start: 2505
    functionDepth: 0
    functionLinenumber: 2505
    functionLinenumberEnd: 2513
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelBeforeCallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_before_callmethod)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelBeforeCallMethodParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2519,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2523
      start: 2515
    functionDepth: 0
    functionLinenumber: 2515
    functionLinenumberEnd: 2523
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelBeforeCallMethodParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_before_callmethod_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelBeforeCallMethodSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2529,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2533
      start: 2525
    functionDepth: 0
    functionLinenumber: 2525
    functionLinenumberEnd: 2533
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelBeforeCallMethodSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_before_callmethod_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelDuringCallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2539,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2543
      start: 2535
    functionDepth: 0
    functionLinenumber: 2535
    functionLinenumberEnd: 2543
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelDuringCallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_during_callmethod)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelDuringCallMethodParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2549,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2553
      start: 2545
    functionDepth: 0
    functionLinenumber: 2545
    functionLinenumberEnd: 2553
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelDuringCallMethodParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_during_callmethod_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelDuringCallMethodSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2563
      start: 2555
    functionDepth: 0
    functionLinenumber: 2555
    functionLinenumberEnd: 2563
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelDuringCallMethodSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_during_callmethod_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelAfterCallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2569,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2573
      start: 2565
    functionDepth: 0
    functionLinenumber: 2565
    functionLinenumberEnd: 2573
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelAfterCallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_after_callmethod)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelAfterCallMethodParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2579,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2583
      start: 2575
    functionDepth: 0
    functionLinenumber: 2575
    functionLinenumberEnd: 2583
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelAfterCallMethodParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_after_callmethod_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRequestNotInit
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2589,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2593
      start: 2585
    functionDepth: 0
    functionLinenumber: 2585
    functionLinenumberEnd: 2593
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRequestNotInit
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, request_not_init)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRequestNotInitParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2599,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2603
      start: 2595
    functionDepth: 0
    functionLinenumber: 2595
    functionLinenumberEnd: 2603
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRequestNotInitParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, request_not_init_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRequestNotInitSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2613
      start: 2605
    functionDepth: 0
    functionLinenumber: 2605
    functionLinenumberEnd: 2613
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRequestNotInitSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, request_not_init_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRPCTimeout
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2619,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2623
      start: 2615
    functionDepth: 0
    functionLinenumber: 2615
    functionLinenumberEnd: 2623
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRPCTimeout
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRPCTimeoutParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2629,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2633
      start: 2625
    functionDepth: 0
    functionLinenumber: 2625
    functionLinenumberEnd: 2633
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRPCTimeoutParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeoutStillChecksSubChannelsParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2643
      start: 2635
    functionDepth: 0
    functionLinenumber: 2635
    functionLinenumberEnd: 2643
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TimeoutStillChecksSubChannelsParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout_still_checks_sub_channels_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRPCTimeoutSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2649,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2653
      start: 2645
    functionDepth: 0
    functionLinenumber: 2645
    functionLinenumberEnd: 2653
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRPCTimeoutSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFD
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2659,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2663
      start: 2655
    functionDepth: 0
    functionLinenumber: 2655
    functionLinenumberEnd: 2663
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestCloseFD
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, close_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFDParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2669,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2673
      start: 2665
    functionDepth: 0
    functionLinenumber: 2665
    functionLinenumberEnd: 2673
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestCloseFDParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, close_fd_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFDSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2679,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2683
      start: 2675
    functionDepth: 0
    functionLinenumber: 2675
    functionLinenumberEnd: 2683
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestCloseFDSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, close_fd_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestServerFail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2689,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2693
      start: 2685
    functionDepth: 0
    functionLinenumber: 2685
    functionLinenumberEnd: 2693
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestServerFail
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, server_fail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestServerFailParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2699,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2703
      start: 2695
    functionDepth: 0
    functionLinenumber: 2695
    functionLinenumberEnd: 2703
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestServerFailParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, server_fail_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestServerFailSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2709,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2713
      start: 2705
    functionDepth: 0
    functionLinenumber: 2705
    functionLinenumberEnd: 2713
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestServerFailSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, server_fail_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAuthentication
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2719,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2723
      start: 2715
    functionDepth: 0
    functionLinenumber: 2715
    functionLinenumberEnd: 2723
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAuthentication
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, authentication)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAuthenticationParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2729,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2733
      start: 2725
    functionDepth: 0
    functionLinenumber: 2725
    functionLinenumberEnd: 2733
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAuthenticationParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, authentication_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAuthenticationSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2739,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2743
      start: 2735
    functionDepth: 0
    functionLinenumber: 2735
    functionLinenumberEnd: 2743
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAuthenticationSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, authentication_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRetry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2749,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2753
      start: 2745
    functionDepth: 0
    functionLinenumber: 2745
    functionLinenumberEnd: 2753
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRetry
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRetryOtherServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2758,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2761
      start: 2755
    functionDepth: 0
    functionLinenumber: 2755
    functionLinenumberEnd: 2761
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRetryOtherServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry_other_servers)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TestRetryBackoffInfo::TestRetryBackoffInfo
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2772,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2774,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2774,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2775,1
    - Dst: TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2778,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2784
      start: 2763
    functionDepth: 1
    functionLinenumber: 2763
    functionLinenumberEnd: 2784
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRetryBackoffInfo::TestRetryBackoffInfo
    - bthread_start_background
    - bthread_join
    - TestRetryBackoff
    - std::unique_ptr::get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry_backoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequest
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2790,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2794
      start: 2786
    functionDepth: 0
    functionLinenumber: 2786
    functionLinenumberEnd: 2794
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequest
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backup_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequestPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2800,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2804
      start: 2796
    functionDepth: 0
    functionLinenumber: 2796
    functionLinenumberEnd: 2804
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequestPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backup_request_policy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2807,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2808,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2808,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2809,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2823,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2824,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2828,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2832,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2832,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2836,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2841
      start: 2806
    functionDepth: 1
    functionLinenumber: 2806
    functionLinenumberEnd: 2841
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetUpChannel
    - StartAccept
    - pthread_join
    - pthread_create
    - brpc::NewCallback
    - brpc::Channel::Channel
    - EXPECT_EQ
    - time
    - MyAuthenticator::MyAuthenticator
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, multiple_threads_single_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2844,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2845,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2845,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2846,1
    - Dst: "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n
        \                       bool, bool, bool, const brpc::Authenticator*, int>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2863,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2868,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2868,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2872,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2877
      start: 2843
    functionDepth: 0
    functionLinenumber: 2843
    functionLinenumberEnd: 2877
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - StartAccept
    - pthread_join
    - "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n                        bool,
      bool, bool, const brpc::Authenticator*, int>"
    - pthread_create
    - EXPECT_EQ
    - time
    - MyAuthenticator::MyAuthenticator
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, multiple_threads_multiple_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAttachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2882,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2885
      start: 2879
    functionDepth: 0
    functionLinenumber: 2879
    functionLinenumberEnd: 2885
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAttachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, clear_attachment_after_retry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestDestroyChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2890,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2893
      start: 2887
    functionDepth: 0
    functionLinenumber: 2887
    functionLinenumberEnd: 2893
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDestroyChannel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, destroy_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestDestroyChannelParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2898,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2901
      start: 2895
    functionDepth: 0
    functionLinenumber: 2895
    functionLinenumberEnd: 2901
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDestroyChannelParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, destroy_channel_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestDestroyChannelSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2906,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2909
      start: 2903
    functionDepth: 0
    functionLinenumber: 2903
    functionLinenumberEnd: 2909
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDestroyChannelSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, destroy_channel_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2912,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2916
      start: 2911
    functionDepth: 1
    functionLinenumber: 2911
    functionLinenumberEnd: 2916
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, sizeof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2922
      start: 2920
    functionDepth: 0
    functionLinenumber: 2920
    functionLinenumberEnd: 2922
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, global_channel_should_quit_successfully)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2926,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2929,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2930,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2934,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2935,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2937,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2937,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2941,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2942,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2943,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2944,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2944,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2946
      start: 2924
    functionDepth: 1
    functionLinenumber: 2924
    functionLinenumberEnd: 2946
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, unused_call_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AdaptiveConnectionType::AdaptiveConnectionType
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2949,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2950,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2951,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2951,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2952,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2952,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2955,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2956,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2956,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2959,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2960,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2963,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2964,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2967,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2968,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2968,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2969,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2972,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2973,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2973,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2974,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2974,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2977,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2978,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2978,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2979,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2979,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2980
      start: 2948
    functionDepth: 1
    functionLinenumber: 2948
    functionLinenumberEnd: 2980
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::AdaptiveConnectionType::has_error
    - ASSERT_TRUE
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::AdaptiveConnectionType::name
    - brpc::AdaptiveConnectionType::AdaptiveConnectionType
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, adaptive_connection_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AdaptiveProtocolType::AdaptiveProtocolType
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2983,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2984,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2985,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2985,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2986,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2987,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2987,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2990,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2991,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2991,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2992,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2993,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2993,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2996,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2997,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2997,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2998,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2999,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2999,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3002,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3003,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3003,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3004,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3005,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3005,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3008,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3009,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3009,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3010,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3011,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3011,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3014,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3015,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3015,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3017,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3017,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3018
      start: 2982
    functionDepth: 1
    functionLinenumber: 2982
    functionLinenumberEnd: 3018
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::AdaptiveProtocolType::has_param
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::AdaptiveProtocolType::param
    - brpc::AdaptiveProtocolType::name
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, adaptive_protocol_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_channel_unittest.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    functionName: RunClosure
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: void * RunClosure(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 78
    functionName: DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteOnlyOnceChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:80,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 82
    functionName: ~DeleteOnlyOnceChannel()
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void ~DeleteOnlyOnceChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_channel_unittest.cpp:103,1
    - Dst: brpc::AuthContext*::set_group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:104,1
    - Dst: brpc::AuthContext*::set_roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:105,1
    - Dst: brpc::AuthContext*::set_starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:106,1
    - Dst: brpc::AuthContext*::set_is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 109
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::AuthContext*::set_user
    - brpc::AuthContext*::set_roles
    - brpc::AuthContext*::set_starter
    - brpc::AuthContext*::set_is_service
    - brpc::AuthContext*::set_group
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:115,1
    - Dst: brpc::policy::MostCommonMessage*::socket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:120,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:120,1
    - Dst: brpc::policy::RpcMeta::has_authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:122,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:124,1
    - Dst: brpc::Socket*::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:125,1
    - Dst: brpc::policy::RpcMeta::authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:125,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:126,1
    - Dst: MyAuthenticator::VerifyCredential
      Src: /src/brpc/test/brpc_channel_unittest.cpp:127,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:128,1
    - Dst: brpc::Socket*::mutable_auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 131
    functionName: VerifyMyRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::VerifyCredential
    - EXPECT_TRUE
    - butil::EndPoint
    - brpc::Socket*::mutable_auth_context
    - static_cast<const brpc::policy::MostCommonMessage*>
    - brpc::Socket*::auth_context
    - MyAuthenticator::MyAuthenticator
    - brpc::policy::RpcMeta::has_authentication_data
    - brpc::policy::MostCommonMessage*::socket
    - EXPECT_EQ
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - brpc::policy::RpcMeta::authentication_data
    linkageType: ''
    returnType: bool
    signature: bool VerifyMyRequest(const brpc::InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: CallAfterRpcObject::CallAfterRpcObject
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallAfterRpcObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: ~CallAfterRpcObject()
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ~CallAfterRpcObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: CallAfterRpcObject::Append
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void Append(const std::string& s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:155,1
    - Dst: CallAfterRpcObject::CallAfterRpcObject
      Src: /src/brpc/test/brpc_channel_unittest.cpp:156,1
    - Dst: brpc::Controller*::set_after_rpc_resp_fn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:157,1
    - Dst: std::bind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:157,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:160,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:161,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:161,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:162,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:162,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:165,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:166,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_channel_unittest.cpp:167,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:171,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:171,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:172,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:172,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:174,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:174,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:175,1
    - Dst: ::test::EchoResponse*::add_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:176,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:176,1
    - Dst: ::test::EchoResponse*::set_receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    - Dst: brpc::Controller*::_current_call::sending_sock::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 179
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::SetFailed
    - brpc::Controller*::_current_call::sending_sock::id
    - brpc::Controller*::set_after_rpc_resp_fn
    - bthread_usleep
    - ::test::EchoResponse*::set_receiving_socket_id
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::sleep_us
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::server_fail
    - ::test::EchoRequest*::message
    - ::test::EchoRequest*::code
    - ::test::EchoResponse*::set_message
    - CallAfterRpcObject::CallAfterRpcObject
    - LOG
    - static_cast<brpc::Controller*>
    - std::bind
    - ::test::EchoResponse*::add_code_list
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const test::EchoRequest*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:184,1
    - Dst: static_cast<const test::EchoResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:185,1
    - Dst: std::shared_ptr<CallAfterRpcObject>::Append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:187,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:188,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 4
    argNames:
    - str
    - cntl
    - req
    - res
    argTypes:
    - std::shared_ptr<CallAfterRpcObject>
    - brpc::Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 190
    functionName: MyEchoService::CallAfterRpc
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - static_cast<const test::EchoResponse*>
    - std::shared_ptr<CallAfterRpcObject>::Append
    - static_cast<const test::EchoRequest*>
    linkageType: ''
    returnType: void
    signature: "void CallAfterRpc(std::shared_ptr<CallAfterRpcObject> str,\n                        brpc::Controller*
      cntl,\n                        const google::protobuf::Message* req,\n                        const
      google::protobuf::Message* res)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:200,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_channel_unittest.cpp:201,1
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_channel_unittest.cpp:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:209,1
    - Dst: AddHandler
      Src: /src/brpc/test/brpc_channel_unittest.cpp:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:211,1
    - Dst: save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:211,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:211,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:212,1
    - Dst: fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 213
    functionName: ChannelTest::ChannelTest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - fname
    - std::string
    - AddHandler
    - EXPECT_EQ
    - save
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - butil::endpoint2str
    - options
    linkageType: ''
    returnType: void
    signature: void ChannelTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 215
    functionName: ~ChannelTest()
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ChannelTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: ChannelTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:230,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_channel_unittest.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 231
    functionName: ChannelTest::register_protocol
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - RegisterProtocol
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void register_protocol()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DestroyingPtr::ReleaseSocket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:236,1
    - Dst: brpc::SocketUniquePtr::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:239,1
    - Dst: brpc::AuthContext*::user
      Src: /src/brpc/test/brpc_channel_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:240,1
    - Dst: brpc::AuthContext*::group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:240,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:241,1
    - Dst: brpc::AuthContext*::roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:241,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:242,1
    - Dst: brpc::AuthContext*::starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:242,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:243,1
    - Dst: brpc::AuthContext*::is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:243,1
    - Dst: brpc::InputMessageBase*::arg
      Src: /src/brpc/test/brpc_channel_unittest.cpp:245,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:248,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: brpc::policy::RpcMeta::request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:256,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:256,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:256,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:258,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:258,1
    - Dst: ChannelTest*::_dummy::options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:260,1
    - Dst: Get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:260,1
    - Dst: brpc::RpcPBMessages*::Request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:261,1
    - Dst: brpc::RpcPBMessages*::Response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:262,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:263,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:264,1
    - Dst: brpc::DestroyingPtr::payload::cutn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:265,1
    - Dst: brpc::DestroyingPtr::payload::size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:265,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:265,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:267,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:267,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:270,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:270,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:272,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:273,1
    - Dst: brpc::Controller*::_current_call::sending_sock::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:274,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_channel_unittest.cpp:274,1
    - Dst: "brpc::NewCallback<\n            int64_t, brpc::Controller*,\n            brpc::RpcPBMessages*,\n
        \           const brpc::Server*,\n            brpc::MethodStatus*, int64_t>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:278,1
    - Dst: brpc::policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:283,1
    - Dst: ChannelTest*::_svc::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:285,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 286
    functionName: ChannelTest::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SocketUniquePtr::auth_context
    - brpc::SocketUniquePtr::SetFailed
    - brpc::RpcPBMessages*::Response
    - brpc::AuthContext*::group
    - brpc::InputMessageBase*::arg
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::id
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::AuthContext*::starter
    - brpc::Controller*::_current_call::sending_sock::reset
    - brpc::policy::RpcMeta::correlation_id
    - method_name
    - brpc::RpcPBMessages*::Request
    - ChannelTest*::_svc::CallMethod
    - EXPECT_EQ
    - "brpc::NewCallback<\n            int64_t, brpc::Controller*,\n            brpc::RpcPBMessages*,\n
      \           const brpc::Server*,\n            brpc::MethodStatus*, int64_t>"
    - service_name
    - ChannelTest*::_dummy::options
    - EXPECT_TRUE
    - brpc::DestroyingPtr::ReleaseSocket
    - ChannelTest*::_svc::descriptor
    - brpc::AuthContext*::is_service
    - brpc::DestroyingPtr::payload::cutn
    - brpc::SocketUniquePtr::release
    - brpc::policy::RpcMeta::attachment_size
    - brpc::DestroyingPtr::payload::size
    - brpc::Controller::Controller
    - brpc::policy::RpcMeta::request
    - brpc::AuthContext*::roles
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - brpc::AuthContext*::user
    - Get
    linkageType: ''
    returnType: void
    signature: void ProcessRpcRequest(brpc::InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_channel_unittest.cpp:290,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:292,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:297,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ep
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 301
    functionName: ChannelTest::StartAccept
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 42
    functionsReached:
    - ChannelTest::StartAccept
    - tcp_listen
    - bthread_usleep
    linkageType: ''
    returnType: int
    signature: int StartAccept(butil::EndPoint ep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StopAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:304,1
    - Dst: Join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 306
    functionName: ChannelTest::StopAndJoin
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 42
    functionsReached:
    - StopAccept
    - Join
    linkageType: ''
    returnType: void
    signature: void StopAndJoin()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:312,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:325,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:327,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:327,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - channel
    - single_server
    - short_connection
    argTypes:
    - brpc::Channel*
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 329
    functionName: ChannelTest::SetUpChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 42
    functionsReached:
    - std::string
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_EQ
    - brpc::Channel*::Init
    linkageType: ''
    returnType: void
    signature: "void SetUpChannel(brpc::Channel* channel, \n                      bool
      single_server,\n                      bool short_connection,\n                      const
      brpc::Authenticator* auth = NULL,\n                      std::string connection_group
      = std::string(),\n                      bool use_backup_request_policy = false)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:338,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:339,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:341,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:347,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - channel
    - cntl
    - req
    - res
    - async
    argTypes:
    - brpc::ChannelBase*
    - brpc::Controller*
    - test::EchoRequest*
    - test::EchoResponse*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 349
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 43
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - bthread_id_join
    - brpc::Controller*::call_id
    - brpc::DoNothing
    linkageType: ''
    returnType: void
    signature: "void CallMethod(brpc::ChannelBase* channel, \n                    brpc::Controller*
      cntl,\n                    test::EchoRequest* req, test::EchoResponse* res,\n
      \                   bool async, bool destroy = false)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:358,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:359,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:361,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:367,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - channel
    - cntl
    - req
    - res
    - async
    argTypes:
    - brpc::ChannelBase*
    - brpc::Controller*
    - test::ComboRequest*
    - test::ComboResponse*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 369
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 43
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - bthread_id_join
    - brpc::Controller*::call_id
    - brpc::DoNothing
    linkageType: ''
    returnType: void
    signature: "void CallMethod(brpc::ChannelBase* channel, \n                    brpc::Controller*
      cntl,\n                    test::ComboRequest* req, test::ComboResponse* res,\n
      \                   bool async, bool destroy = false)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:377,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:378,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:380,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:383,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:384,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:386,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:386,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 371
    functionDepth: 2
    functionLinenumber: 371
    functionLinenumberEnd: 387
    functionName: ChannelTest::TestConnectionFailed
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestConnectionFailed(bool single_server, bool async, \n                              bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:400,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:400,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:405,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:408,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:409,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:411,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:411,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:412,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:412,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:413,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:413,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 389
    functionDepth: 2
    functionLinenumber: 389
    functionLinenumberEnd: 414
    functionName: ChannelTest::TestConnectionFailedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::EchoRequest::set_message
    - LOG
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestConnectionFailedParallel(bool single_server, bool async,
      \n                                      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:423,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:426,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:426,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:430,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:430,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:433,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:436,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:437,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:439,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:439,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:440,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:440,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:441,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:441,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:442,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:443,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:443,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 416
    functionDepth: 2
    functionLinenumber: 416
    functionLinenumberEnd: 444
    functionName: ChannelTest::TestConnectionFailedSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - LOG
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestConnectionFailedSelective(bool single_server, bool async,
      \n                                       bool short_connection)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:451,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:451,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:452,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:453,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:455,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:458,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:461,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:461,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:463,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:464,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:464,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:465,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:465,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:466,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:466,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:467,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:467,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:471,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:472,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:473,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:473,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:474,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:477,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:477,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:482,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:483,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:484,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:485,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:486,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:487,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:488,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:488,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:490,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:490,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:493,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:494,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:496,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:497,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:498,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:499,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:501,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:501,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:503,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:504,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:508,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:509,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:511,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:512,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:513,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:514,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:516,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:516,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:518,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:518,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:520,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 47
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 446
    functionDepth: 2
    functionLinenumber: 446
    functionLinenumberEnd: 521
    functionName: ChannelTest::TestSuccess
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::Reset
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::Clear
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - butil::gettimeofday_us
    - test::EchoResponse::receiving_socket_id
    - test::EchoRequest::Clear
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - EXPECT_NE
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSuccess(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:530,1
    - Dst: test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:531,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 525
    functionDepth: 1
    functionLinenumber: 525
    functionLinenumberEnd: 534
    functionName: ChannelTest::SetCode::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    - test::EchoRequest*::set_code
    - brpc::SubCall
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int channel_index,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* response)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Skip
      Src: /src/brpc/test/brpc_channel_unittest.cpp:545,1
    - Dst: ChannelTest::SetCode::Map
      Src: /src/brpc/test/brpc_channel_unittest.cpp:547,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 539
    functionDepth: 2
    functionLinenumber: 539
    functionLinenumberEnd: 548
    functionName: ChannelTest::SetCodeOnEven::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Skip
    - ChannelTest::SetCode::Map
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int channel_index,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* response)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<const test::ComboRequest*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:559,1
    - Dst: dynamic_cast<test::ComboResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:560,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:561,1
    - Dst: test::ComboRequest*::requests_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:563,1
    - Dst: brpc::Bad
      Src: /src/brpc/test/brpc_channel_unittest.cpp:564,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:566,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:566,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:567,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:568,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - res_base
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 553
    functionDepth: 1
    functionLinenumber: 553
    functionLinenumberEnd: 569
    functionName: ChannelTest::GetReqAndAddRes::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Bad
    - test::ComboRequest*::requests_size
    - brpc::SubCall
    - test::ComboResponse*::add_responses
    - google::protobuf::MethodDescriptor*::name
    - pbrpcframework::get_prototype_by_method_descriptor
    - dynamic_cast<test::ComboResponse*>
    - test::ComboRequest*::requests
    - dynamic_cast<const test::ComboRequest*>
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int channel_index,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* res_base)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:578,1
    - Dst: auto::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:579,1
    - Dst: auto::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:581,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:583,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:583,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - channel_index
    - method
    - req_base
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 585
    functionName: ChannelTest::SuccessLimitCallMapper::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    - brpc::SubCall
    - auto::set_code
    - auto::set_sleep_us
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int channel_index,\n                          const
      google::protobuf::MethodDescriptor* method,\n                          const
      google::protobuf::Message* req_base,\n                          google::protobuf::Message*
      response) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 594
    functionName: ChannelTest::MergeNothing::Merge
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Result
    signature: "Result Merge(google::protobuf::Message* /*response*/,\n                     const
      google::protobuf::Message* /*sub_response*/)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:602,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:602,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:610,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:612,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:615,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:616,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:619,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:619,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:620,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:620,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:621,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:622,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:622,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:622,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:624,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:624,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:627,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:627,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:631,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:632,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:633,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:633,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:634,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:637,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:637,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:639,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 597
    functionDepth: 2
    functionLinenumber: 597
    functionLinenumberEnd: 640
    functionName: ChannelTest::TestSuccessParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - SetCode::SetCode
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSuccessParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:648,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:648,1
    - Dst: DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:650,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:651,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:657,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:657,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:663,1
    - Dst: SetCode*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:663,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:667,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:668,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:671,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:671,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:672,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:672,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:673,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:677,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:683,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:684,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:685,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:685,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:686,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:689,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:689,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:691,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 642
    functionDepth: 2
    functionLinenumber: 642
    functionLinenumberEnd: 692
    functionName: ChannelTest::TestSuccessDuplicatedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - SetCode::SetCode
    - SetCode*::ref_count
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: "void TestSuccessDuplicatedParallel(\n        bool single_server, bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:700,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:700,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:701,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:702,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:704,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:704,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:706,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:708,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:708,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:710,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:714,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:715,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:717,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:717,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:717,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:720,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:720,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:722,1
    - Dst: test::EchoRequest::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:722,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:722,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:723,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:723,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:727,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:728,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:729,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:729,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:730,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:733,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:733,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:735,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 694
    functionDepth: 2
    functionLinenumber: 694
    functionLinenumberEnd: 736
    functionName: ChannelTest::TestSuccessSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - brpc::Controller::remote_side
    - bthread_usleep
    - brpc::Controller::sub
    - brpc::ChannelOptions::ChannelOptions
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - std::string
    - test::EchoResponse::code_list
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - test::EchoResponse::code_list_size
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::SelectiveChannel::Init
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - test::EchoRequest::code
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_GE
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestSuccessSelective(bool single_server, bool async, bool short_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:743,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:743,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:748,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:749,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:749,1
    - Dst: SetCodeOnEven::SetCodeOnEven
      Src: /src/brpc/test/brpc_channel_unittest.cpp:751,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:753,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:756,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:757,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:758,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:763,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:767,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:767,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:767,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:770,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:770,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:772,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:772,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:776,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:777,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:778,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:778,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:779,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:782,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:782,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:784,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 738
    functionDepth: 2
    functionLinenumber: 738
    functionLinenumberEnd: 785
    functionName: ChannelTest::TestSkipParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - SetCodeOnEven::SetCodeOnEven
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSkipParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:792,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:792,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:798,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:798,1
    - Dst: GetReqAndAddRes::GetReqAndAddRes
      Src: /src/brpc/test/brpc_channel_unittest.cpp:800,1
    - Dst: MergeNothing::MergeNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:800,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:805,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:806,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:810,1
    - Dst: ::test::EchoRequest*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:811,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:811,1
    - Dst: ::test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:812,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:816,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:817,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:818,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:823,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:824,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:827,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:827,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:828,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:828,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:829,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:830,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:830,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:832,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:832,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:833,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:833,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:837,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:838,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:839,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:839,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:840,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:843,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:843,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:845,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 787
    functionDepth: 2
    functionLinenumber: 787
    functionLinenumberEnd: 846
    functionName: ChannelTest::TestSuccessParallel2
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - GetReqAndAddRes::GetReqAndAddRes
    - bthread_usleep
    - brpc::Controller::Failed
    - MergeNothing::MergeNothing
    - ConnectionCount
    - brpc::Controller::Reset
    - ChannelTest::SetUpChannel
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - ::test::EchoRequest*::set_code
    - EXPECT_EQ
    - test::ComboResponse::responses
    - butil::string_printf
    - butil::gettimeofday_us
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::latency_us
    - ::test::EchoRequest*::set_message
    - EXPECT_LT
    - butil::BasicStringPiece::BasicStringPiece
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - ASSERT_GT
    - test::ComboResponse::responses_size
    - brpc::Controller::Controller
    - EXPECT_GE
    - test::ComboRequest::add_requests
    linkageType: ''
    returnType: void
    signature: void TestSuccessParallel2(bool single_server, bool async, bool short_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: brpc::ParallelChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:860,1
    - Dst: SuccessLimitCallMapper::SuccessLimitCallMapper
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:864,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:864,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:867,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:870,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:871,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:872,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:876,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:877,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:877,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:879,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:879,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:882,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:882,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:886,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:886,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:887,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:887,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:890,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:891,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:892,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:892,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:893,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:896,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:896,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:898,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 35
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 899
      start: 848
    functionDepth: 2
    functionLinenumber: 848
    functionLinenumberEnd: 899
    functionName: ChannelTest::TestSuccessLimitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_code
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - ChannelTest::SetUpChannel
    - SuccessLimitCallMapper::SuccessLimitCallMapper
    - std::string
    - test::EchoResponse::code_list
    - brpc::ParallelChannel::AddChannel
    - brpc::ParallelChannel::Init
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - EXPECT_TRUE
    - test::EchoResponse::code_list_size
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestSuccessLimitParallel(bool single_server, bool async, bool
      short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CancelerArg*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:907,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:911,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:912,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 906
    functionDepth: 1
    functionLinenumber: 906
    functionLinenumberEnd: 914
    functionName: ChannelTest::Canceler
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CancelerArg*>
    - LOG
    - brpc::StartCancel
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * Canceler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:924,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:925,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:930,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:931,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:932,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:933,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:934,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:936,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 917
    functionDepth: 2
    functionLinenumber: 917
    functionLinenumberEnd: 937
    functionName: ChannelTest::CancelBeforeCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::StartCancel
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelBeforeCallMethod(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:945,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:945,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:951,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:952,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:952,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:957,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:960,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:961,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:962,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:963,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:964,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:966,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:966,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:967,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:967,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:968,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:968,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:969,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 939
    functionDepth: 2
    functionLinenumber: 939
    functionLinenumberEnd: 970
    functionName: ChannelTest::CancelBeforeCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Controller::sub
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::StartCancel
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelBeforeCallMethodParallel(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:978,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:978,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:981,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:982,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:982,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:984,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:985,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:986,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:986,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:989,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:992,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:994,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:995,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:996,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:997,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:997,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:997,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:998,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 972
    functionDepth: 2
    functionLinenumber: 972
    functionLinenumberEnd: 999
    functionName: ChannelTest::CancelBeforeCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - brpc::StartCancel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void CancelBeforeCallMethodSelective(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1008,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1009,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1011,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1014,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1015,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1019,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1019,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1020,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1021,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1022,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1023,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1024,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1025,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1025,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1025,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1026,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1026,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1027,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1027,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1029,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1029,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1030,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1030,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1031,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1032
      start: 1001
    functionDepth: 2
    functionLinenumber: 1001
    functionLinenumberEnd: 1032
    functionName: ChannelTest::CancelDuringCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - brpc::Controller::sub
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - butil::Timer::u_elapsed
    - EXPECT_TRUE
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - EXPECT_LT
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - butil::Timer::stop
    - pthread_join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void CancelDuringCallMethod(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1040,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1040,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1047,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1047,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1052,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1055,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1060,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1060,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1061,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1062,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1063,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1064,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1065,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1068,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1068,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1069,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1069,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1070,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1071,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1071,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1075
      start: 1034
    functionDepth: 2
    functionLinenumber: 1034
    functionLinenumberEnd: 1075
    functionName: ChannelTest::CancelDuringCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - brpc::Controller::sub
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - butil::Timer::u_elapsed
    - ChannelTest::CallMethod
    - brpc::Controller::latency_us
    - brpc::Controller::call_id
    - EXPECT_LT
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - butil::Timer::stop
    - pthread_join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void CancelDuringCallMethodParallel(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1083,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1083,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1087,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1087,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1089,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1090,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1091,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1091,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1094,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1097,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1099,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1102,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1102,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1103,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1104,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1105,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1106,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1107,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1108,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1108,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1109,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1110,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1111,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1112,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1112,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1114
      start: 1077
    functionDepth: 2
    functionLinenumber: 1077
    functionLinenumberEnd: 1114
    functionName: ChannelTest::CancelDuringCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - brpc::Controller::sub
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - butil::Timer::u_elapsed
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::SelectiveChannel::Init
    - EXPECT_LT
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - butil::Timer::stop
    - pthread_join
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::AddChannel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void CancelDuringCallMethodSelective(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1122,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1122,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1123,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1124,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1126,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1129,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1130,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1131,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1134,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1135,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1135,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1137
      start: 1116
    functionDepth: 2
    functionLinenumber: 1116
    functionLinenumberEnd: 1137
    functionName: ChannelTest::CancelAfterCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - bthread_id_error
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelAfterCallMethod(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1145,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1145,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1157,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1160,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1162,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1164,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1165,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1165,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1167,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1167,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1169,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1169,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1170,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1139
    functionDepth: 2
    functionLinenumber: 1139
    functionLinenumberEnd: 1171
    functionName: ChannelTest::CancelAfterCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::call_id
    - brpc::Controller::sub
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - bthread_id_error
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void CancelAfterCallMethodParallel(\n        bool single_server, bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1174,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1174,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1175,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1176,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1178,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1179,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1182,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1185,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1185,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1186,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1188,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1188,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1188,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1191,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1192,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1193,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1193,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1194,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1197,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1197,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1200
      start: 1173
    functionDepth: 2
    functionLinenumber: 1173
    functionLinenumberEnd: 1200
    functionName: ChannelTest::TestAttachment
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - brpc::Controller::request_attachment
    - std::string
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_FALSE
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: void TestAttachment(bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1208,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1211,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1214,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1215,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1215,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1215,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1202
    functionDepth: 2
    functionLinenumber: 1202
    functionLinenumberEnd: 1217
    functionName: ChannelTest::TestRequestNotInit
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestRequestNotInit(bool single_server, bool async,\n                            bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1224,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1224,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1231,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1231,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1236,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1240,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1240,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1240,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1241,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1241,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1243
      start: 1219
    functionDepth: 2
    functionLinenumber: 1219
    functionLinenumberEnd: 1243
    functionName: ChannelTest::TestRequestNotInitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - LOG
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestRequestNotInitParallel(bool single_server, bool async,\n
      \                                   bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1250,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1250,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1254,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1254,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1256,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1258,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1258,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1261,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1265,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1265,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1265,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1266,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1267,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1268,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1268,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1245
    functionDepth: 2
    functionLinenumber: 1245
    functionLinenumberEnd: 1270
    functionName: ChannelTest::TestRequestNotInitSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - ChannelTest::SetUpChannel
    - LOG
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestRequestNotInitSelective(bool single_server, bool async,\n
      \                                    bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1276,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1276,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1277,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1278,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1280,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1283,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1284,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1285,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1286,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1287,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1288,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1290,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1290,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1290,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1291,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1293
      start: 1272
    functionDepth: 2
    functionLinenumber: 1272
    functionLinenumberEnd: 1293
    functionName: ChannelTest::TestRPCTimeout
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TestRPCTimeout(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1312,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1315,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1316,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1317,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1318,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1319,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1320,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1321,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1323,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1323,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1325,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1325,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1328,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1295
    functionDepth: 2
    functionLinenumber: 1295
    functionLinenumberEnd: 1329
    functionName: ChannelTest::TestRPCTimeoutParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::sub
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void TestRPCTimeoutParallel(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1338,1
    - Dst: test::EchoRequest*::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1339,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1340,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - method
    - req_base
    - response
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1342
      start: 1333
    functionDepth: 1
    functionLinenumber: 1333
    functionLinenumberEnd: 1342
    functionName: ChannelTest::MakeTheRequestTimeout::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoRequest*::set_sleep_us
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    - brpc::SubCall
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(\n            int /*channel_index*/,\n            const
      google::protobuf::MethodDescriptor* method,\n            const google::protobuf::Message*
      req_base,\n            google::protobuf::Message* response)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1350,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1350,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1357,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1357,1
    - Dst: MakeTheRequestTimeout::MakeTheRequestTimeout
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1359,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1362,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1365,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1366,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1367,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1368,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1370,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1371,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1371,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1371,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1372,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1372,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1373,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1375,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1375,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1377,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1377,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1380,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1381,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1345
    functionDepth: 2
    functionLinenumber: 1345
    functionLinenumberEnd: 1382
    functionName: ChannelTest::TimeoutStillChecksSubChannelsParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::sub
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - butil::Timer::start
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::ErrorCode
    - MakeTheRequestTimeout::MakeTheRequestTimeout
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void TimeoutStillChecksSubChannelsParallel(\n        bool single_server,
      bool async, bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1389,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1389,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1393,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1393,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1395,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1397,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1397,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1400,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1403,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1404,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1405,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1406,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1407,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1408,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1409,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1411,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1411,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1412,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1412,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1414,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1414,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1415,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1415,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1416,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1417
      start: 1384
    functionDepth: 2
    functionLinenumber: 1384
    functionLinenumberEnd: 1417
    functionName: ChannelTest::TestRPCTimeoutSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::sub
    - brpc::Controller::timeout_ms
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::sub_count
    - labs
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - butil::Timer::m_elapsed
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - ChannelTest::StopAndJoin
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::SelectiveChannel::Init
    - EXPECT_LT
    - ChannelTest::StartAccept
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::AddChannel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestRPCTimeoutSelective(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1424,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1424,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1425,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1426,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1428,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1431,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1432,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1437
      start: 1419
    functionDepth: 2
    functionLinenumber: 1419
    functionLinenumberEnd: 1437
    functionName: ChannelTest::TestCloseFD
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestCloseFD(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1444,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1444,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1451,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1451,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1456,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1459,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1460,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1461,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1463,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1463,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1464,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1465,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1465,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1466,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1439
    functionDepth: 2
    functionLinenumber: 1439
    functionLinenumberEnd: 1467
    functionName: ChannelTest::TestCloseFDParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestCloseFDParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1477,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1480,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1480,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1482,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1484,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1484,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1487,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1490,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1491,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1495,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1496,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1496,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1498,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1499
      start: 1469
    functionDepth: 2
    functionLinenumber: 1469
    functionLinenumberEnd: 1499
    functionName: ChannelTest::TestCloseFDSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestCloseFDSelective(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1507,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1508,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1510,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1513,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1514,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1519
      start: 1501
    functionDepth: 2
    functionLinenumber: 1501
    functionLinenumberEnd: 1519
    functionName: ChannelTest::TestServerFail
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoRequest::set_server_fail
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestServerFail(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1526,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1526,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1533,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1533,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1538,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1541,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1542,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1545,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1545,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1546,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1546,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1547,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1548
      start: 1521
    functionDepth: 2
    functionLinenumber: 1521
    functionLinenumberEnd: 1548
    functionName: ChannelTest::TestServerFailParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoRequest::set_server_fail
    - LOG
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestServerFailParallel(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1555,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1555,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1559,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1559,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1561,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1563,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1563,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1566,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1569,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1570,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1574,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1575,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1575,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1577,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1577,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1578,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1579
      start: 1550
    functionDepth: 2
    functionLinenumber: 1550
    functionLinenumberEnd: 1579
    functionName: ChannelTest::TestServerFailSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - test::EchoRequest::set_server_fail
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    - LOG
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestServerFailSelective(bool single_server, bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1585,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1585,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1586,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1587,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1589,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1592,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1593,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1594,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1596,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1596,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1596,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1597,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1597,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1597,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1599,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1600,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1601,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1601,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1602,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1605,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1606
      start: 1581
    functionDepth: 2
    functionLinenumber: 1581
    functionLinenumberEnd: 1606
    functionName: ChannelTest::TestDestroyChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::StopAndJoin
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - butil::gettimeofday_us
    - test::EchoRequest::set_sleep_us
    - std::string
    - brpc::Controller::ErrorText
    - bthread_usleep
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - ConnectionCount
    - brpc::Controller::ErrorCode
    - EXPECT_LT
    - test::EchoResponse::message
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: void TestDestroyChannel(bool single_server, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1613,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1613,1
    - Dst: brpc::ParallelChannel::ParallelChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1614,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1616,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1618,1
    - Dst: brpc::ParallelChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1618,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1622,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1625,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1626,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1627,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1629,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1629,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1629,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1632,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1633,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1634,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1634,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1635,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1638
      start: 1608
    functionDepth: 2
    functionLinenumber: 1608
    functionLinenumberEnd: 1638
    functionName: ChannelTest::TestDestroyChannelParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::ParallelChannel::ParallelChannel
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - std::string
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::ParallelChannel*::AddChannel
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TestDestroyChannelParallel(bool single_server, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1645,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1645,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1647,1
    - Dst: brpc::SelectiveChannel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1647,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1649,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1650,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1651,1
    - Dst: brpc::SelectiveChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1651,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1654,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1657,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1658,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1662,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1662,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1663,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1664,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1665,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1665,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1668,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1669,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1670,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1670,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1671,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1673,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1640
    functionDepth: 2
    functionLinenumber: 1640
    functionLinenumberEnd: 1674
    functionName: ChannelTest::TestDestroyChannelSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::remote_side
    - bthread_usleep
    - brpc::Controller::sub
    - ConnectionCount
    - brpc::Controller::sub_count
    - brpc::SelectiveChannel*::Init
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - std::string
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::SelectiveChannel*::AddChannel
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - test::EchoResponse::message
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TestDestroyChannelSelective(bool single_server, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1677,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1680,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1683,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1683,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1683,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - channel
    - async
    argTypes:
    - brpc::ChannelBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1685
      start: 1676
    functionDepth: 2
    functionLinenumber: 1676
    functionLinenumberEnd: 1685
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::EchoResponse::message
    - EXPECT_EQ
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void RPCThread(brpc::ChannelBase* channel, bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1692,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1695,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1695,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1696,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1696,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1696,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1697,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - channel
    - async
    - count
    argTypes:
    - brpc::ChannelBase*
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1699
      start: 1687
    functionDepth: 2
    functionLinenumber: 1687
    functionLinenumberEnd: 1699
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - brpc::Controller::ErrorCode
    - test::EchoResponse::message
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void RPCThread(brpc::ChannelBase* channel, bool async, int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1703,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1704,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1705,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1709,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1714,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 5
    argNames:
    - single_server
    - async
    - short_connection
    - auth
    - count
    argTypes:
    - bool
    - bool
    - bool
    - brpc::Authenticator*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1716
      start: 1701
    functionDepth: 2
    functionLinenumber: 1701
    functionLinenumberEnd: 1716
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - brpc::Controller::ErrorCode
    - test::EchoResponse::message
    - test::EchoRequest::set_message
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void RPCThread(bool single_server, bool async, bool short_connection,\n
      \                  const brpc::Authenticator* auth, int count)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1724,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1724,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1725,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1726,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1727,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1733,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1735,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1735,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1743,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1743,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1745,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1745,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1747,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1748
      start: 1718
    functionDepth: 2
    functionLinenumber: 1718
    functionLinenumberEnd: 1748
    functionName: ChannelTest::TestAuthentication
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::count::load
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - pthread_join
    - pthread_create
    - brpc::NewCallback
    - brpc::Channel::Channel
    - EXPECT_EQ
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestAuthentication(bool single_server, \n                            bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1756,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1756,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1757,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1764,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1764,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1775,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1775,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1779,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1783,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1783,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1785,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1785,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1787,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1788
      start: 1750
    functionDepth: 2
    functionLinenumber: 1750
    functionLinenumberEnd: 1788
    functionName: ChannelTest::TestAuthenticationParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::count::load
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - pthread_join
    - pthread_create
    - brpc::ParallelChannel::AddChannel
    - brpc::NewCallback
    - EXPECT_EQ
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::SetUpChannel
    linkageType: ''
    returnType: void
    signature: "void TestAuthenticationParallel(bool single_server, \n                                    bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1796,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1796,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1797,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1800,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1801,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1801,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1803,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1812,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1814,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1814,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1818,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1822,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1822,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1824,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1824,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1827
      start: 1790
    functionDepth: 2
    functionLinenumber: 1790
    functionLinenumberEnd: 1827
    functionName: ChannelTest::TestAuthenticationSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyAuthenticator::count::load
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - pthread_join
    - pthread_create
    - brpc::NewCallback
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::Init
    - brpc::SelectiveChannel::AddChannel
    - EXPECT_EQ
    - ChannelTest::SetUpChannel
    - MyAuthenticator::MyAuthenticator
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: "void TestAuthenticationSelective(bool single_server, \n                                    bool
      async, bool short_connection)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1834,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1834,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1835,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1836,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1841,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1842,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1845,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1846,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1847,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1848,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1849,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1849,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1849,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1850,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1850,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1851,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1854,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1857,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1858,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1862,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1862,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1862,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1863,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1863,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1865,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1866,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1867,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1867,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1868,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1872,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1873,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1873,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1874,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1874,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1876,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1876,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1879,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1880,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1883,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1884,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1885,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1887,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1887,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 39
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1888
      start: 1829
    functionDepth: 2
    functionLinenumber: 1829
    functionLinenumberEnd: 1888
    functionName: ChannelTest::TestRetry
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::Controller::Failed
    - ConnectionCount
    - brpc::Controller::Reset
    - brpc::Controller::set_timeout_ms
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - brpc::Controller::set_max_retry
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - brpc::Controller::retried_count
    linkageType: ''
    returnType: void
    signature: void TestRetry(bool single_server, bool async, bool short_connection)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1891,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1891,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1893,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1894,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1899,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1900,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1900,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1903,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1904,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1905,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1911,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1912,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1913,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1914,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1916,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1916,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1918
      start: 1890
    functionDepth: 2
    functionLinenumber: 1890
    functionLinenumberEnd: 1918
    functionName: ChannelTest::TestRetryOtherServer
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::TempFile::save_format
    - ASSERT_EQ
    - ChannelTest::StartAccept
    - endpoint2str
    - ChannelTest::StopAndJoin
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - butil::TempFile::TempFile
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - brpc::Controller::set_max_retry
    linkageType: ''
    returnType: void
    signature: void TestRetryOtherServer(bool async, bool short_connection)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - channel_test_param
    - async_param
    - short_connection_param
    - fixed_backoff_param
    argTypes:
    - ChannelTest*
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1928
      start: 1921
    functionDepth: 0
    functionLinenumber: 1921
    functionLinenumberEnd: 1928
    functionName: ChannelTest::TestRetryBackoffInfo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TestRetryBackoffInfo(ChannelTest* channel_test_param,\n                             bool
      async_param,\n                             bool short_connection_param,\n                             bool
      fixed_backoff_param)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TestRetryBackoffInfo*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1937,1
    - Dst: auto::channel_test::TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1938,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1941
      start: 1936
    functionDepth: 0
    functionLinenumber: 1936
    functionLinenumberEnd: 1941
    functionName: ChannelTest::TestRetryBackoffBthread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TestRetryBackoffInfo*>
    - auto::channel_test::TestRetryBackoff
    linkageType: ''
    returnType: void
    signature: void * TestRetryBackoffBthread(void* void_args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1945,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1945,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1949,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1951,1
    - Dst: brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1952,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1956,1
    - Dst: brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1957,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1963,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1964,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1966,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1970,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1971,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1971,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1974,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1975,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1982,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1983,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1984,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1985,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1986,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1987,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1987,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1987,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1988,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1988,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1991,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1991,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 4
    argNames:
    - async
    - short_connection
    - fixed_backoff
    - retry_backoff_in_pthread
    argTypes:
    - bool
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1993
      start: 1943
    functionDepth: 2
    functionLinenumber: 1943
    functionLinenumberEnd: 1993
    functionName: ChannelTest::TestRetryBackoff
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::unique_ptr::reset
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_GT
    - std::string
    - std::string::c_str
    - brpc::Channel::Channel
    - butil::TempFile::TempFile
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::TempFile::fname
    - ChannelTest::CallMethod
    - brpc::Controller::latency_us
    - brpc::Channel::Init
    - brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
    - brpc::Controller::set_max_retry
    - butil::TempFile::save_format
    - ChannelTest::StartAccept
    - endpoint2str
    - brpc::Controller::Controller
    - std::unique_ptr::unique_ptr
    - brpc::Controller::retried_count
    - std::unique_ptr::get
    - brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
    linkageType: ''
    returnType: void
    signature: "void TestRetryBackoff(bool async, bool short_connection, bool fixed_backoff,\n
      \                         bool retry_backoff_in_pthread)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2001,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2001,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2002,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2003,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2008,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2009,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2011,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2012,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2013,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2014,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2016,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2016,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2016,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2018,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2018,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2019,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2023,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2024,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2025,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2025,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2026,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2031,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2032
      start: 1995
    functionDepth: 2
    functionLinenumber: 1995
    functionLinenumberEnd: 2032
    functionName: ChannelTest::TestBackupRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - brpc::Controller::set_backup_request_ms
    - ConnectionCount
    - brpc::Controller::set_timeout_ms
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::Controller::has_backup_request
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - EXPECT_LT
    - brpc::Controller::set_max_retry
    - ChannelTest::StartAccept
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - brpc::Controller::retried_count
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: "void TestBackupRequest(bool single_server, bool async,\n                           bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2038
      start: 2036
    functionDepth: 0
    functionLinenumber: 2036
    functionLinenumberEnd: 2038
    functionName: ChannelTest::BackupRequestPolicyImpl::GetBackupRequestMs
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBackupRequestMs(const brpc::Controller*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2043
      start: 2041
    functionDepth: 0
    functionLinenumber: 2041
    functionLinenumberEnd: 2043
    functionName: ChannelTest::BackupRequestPolicyImpl::DoBackup
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool DoBackup(const brpc::Controller*) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2045
      start: 2045
    functionDepth: 0
    functionLinenumber: 2045
    functionLinenumberEnd: 2045
    functionName: ChannelTest::BackupRequestPolicyImpl::OnRPCEnd
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnRPCEnd(const brpc::Controller*) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2053,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2053,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2062,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2063,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2068,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2069,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2072,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2073,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2074,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2076,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2076,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2076,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2077,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2077,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2078,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2078,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2079,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2083,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2084,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2085,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2085,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2086,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2089,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2089,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2093,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2094
      start: 2051
    functionDepth: 2
    functionLinenumber: 2051
    functionLinenumberEnd: 2094
    functionName: ChannelTest::TestBackupRequestPolicy
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_usleep
    - ConnectionCount
    - brpc::Controller::set_timeout_ms
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - brpc::Controller::has_backup_request
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::gettimeofday_us
    - brpc::Controller::ErrorText
    - ASSERT_GE
    - ChannelTest::CallMethod
    - brpc::Controller::set_max_retry
    - ChannelTest::StartAccept
    - brpc::Controller::Controller
    - brpc::Controller::retried_count
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: "void TestBackupRequestPolicy(bool single_server, bool async,\n                                 bool
      short_connection)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2113
      start: 2113
    functionDepth: 0
    functionLinenumber: 2113
    functionLinenumberEnd: 2113
    functionName: MyShared::MyShared
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyShared()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2114
      start: 2114
    functionDepth: 0
    functionLinenumber: 2114
    functionLinenumberEnd: 2114
    functionName: MyShared::MyShared
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyShared(const MyShared&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 2115
    functionDepth: 0
    functionLinenumber: 2115
    functionLinenumberEnd: 2115
    functionName: ~MyShared() override
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MyShared() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyShared::MyShared
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2128,1
    - Dst: MyShared*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2133,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2136,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2140
      start: 2123
    functionDepth: 1
    functionLinenumber: 2123
    functionLinenumberEnd: 2140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MyShared*::ref_count
    - butil::intrusive_ptr::ref_count
    - MyShared::MyShared
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, intrusive_ptr_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2145,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2146,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2147,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2147,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2151,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2152,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2153,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2153,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2156,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2158,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2159,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2160,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2164,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2164,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2170,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2174
      start: 2142
    functionDepth: 1
    functionLinenumber: 2142
    functionLinenumberEnd: 2174
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::SingleServer
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::SocketMapFind
    - brpc::SocketMapKey
    - Init
    - butil::EndPoint::EndPoint
    - brpc::Channel::Channel
    - brpc::Channel::Init
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_as_single_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2178,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2179
      start: 2176
    functionDepth: 1
    functionLinenumber: 2176
    functionLinenumberEnd: 2179
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_unknown_naming_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2183,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2184
      start: 2181
    functionDepth: 1
    functionLinenumber: 2181
    functionLinenumberEnd: 2184
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_unexist_fns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2187,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2189,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2191,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2191,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2192,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2194,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2194,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2196,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2198,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2198,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2199
      start: 2186
    functionDepth: 1
    functionLinenumber: 2186
    functionLinenumberEnd: 2199
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - butil::TempFile::save
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - butil::TempFile::TempFile
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_empty_fns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2202,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2205,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2206,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2207,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2208
      start: 2201
    functionDepth: 1
    functionLinenumber: 2201
    functionLinenumberEnd: 2208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_empty_lns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2211,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2213,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2213,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2214,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2217,1
    - Dst: brpc::Channel*::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2217,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: brpc::Channel*::_lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2221,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2231,1
    - Dst: _lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2231,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2233,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2242,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2243,1
    - Dst: butil::intrusive_ptr::_nref::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2243,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2245
      start: 2210
    functionDepth: 1
    functionLinenumber: 2210
    functionLinenumberEnd: 2245
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - dynamic_cast<brpc::LoadBalancerWithNaming*>
    - butil::intrusive_ptr::get
    - Init
    - ASSERT_FALSE
    - brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
    - _lb::get
    - butil::TempFile::save
    - brpc::Channel::Channel
    - butil::intrusive_ptr::_nref::load
    - butil::TempFile::TempFile
    - brpc::Channel*::SingleServer
    - brpc::Channel*::_lb::get
    - brpc::Channel*::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, init_using_naming_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2248,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2253,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2255,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2258,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2260,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2263,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2265,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2268,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2270,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2272,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2274,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2278,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2280,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2282,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2285,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2287,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2289,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2291,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2293,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2295,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2297,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2299,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2300,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2309,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2311,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2311,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2312,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2315,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2317,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2318,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2319,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2319,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2320,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2247
    functionDepth: 1
    functionLinenumber: 2247
    functionLinenumberEnd: 2321
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - ARRAY_SIZE
    - ASSERT_TRUE
    - std::string
    - std::string::c_str
    - butil::TempFile::fname
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - butil::TempFile::TempFile
    - fprintf
    - fclose
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, parse_hostname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2331
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2331
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectionFailed
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, connection_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2336,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2339,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2340,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2342
      start: 2333
    functionDepth: 1
    functionLinenumber: 2333
    functionLinenumberEnd: 2342
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::ErrorText
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, empty_parallel_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2346,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2346,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2348,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2351,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2352,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2353,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2353,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2354
      start: 2344
    functionDepth: 1
    functionLinenumber: 2344
    functionLinenumberEnd: 2354
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    - brpc::SelectiveChannel::SelectiveChannel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, empty_selective_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Bad
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2362
      start: 2357
    functionDepth: 1
    functionLinenumber: 2357
    functionLinenumberEnd: 2362
    functionName: BadCall::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Bad
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    const google::protobuf::Message*,\n                     google::protobuf::Message*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2369,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2371,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2371,1
    - Dst: BadCall::BadCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2375,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2378,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2379,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2380,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2380,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2381
      start: 2365
    functionDepth: 1
    functionLinenumber: 2365
    functionLinenumberEnd: 2381
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetUpChannel
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - BadCall::BadCall
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, returns_bad_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Skip
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2389
      start: 2384
    functionDepth: 1
    functionLinenumber: 2384
    functionLinenumberEnd: 2389
    functionName: SkipCall::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Skip
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    const google::protobuf::Message*,\n                     google::protobuf::Message*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2396,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2398,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2398,1
    - Dst: SkipCall::SkipCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2399,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2402,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2405,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2406,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2409,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2409,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2410,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2413
      start: 2392
    functionDepth: 1
    functionLinenumber: 2392
    functionLinenumberEnd: 2413
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - EXPECT_TRUE
    - SetUpChannel
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::sub
    - brpc::Channel::Channel
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - CallMethod
    - SkipCall::SkipCall
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, skip_all_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailedParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2419,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2423
      start: 2415
    functionDepth: 0
    functionLinenumber: 2415
    functionLinenumberEnd: 2423
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectionFailedParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, connection_failed_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailedSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2429,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2433
      start: 2425
    functionDepth: 0
    functionLinenumber: 2425
    functionLinenumberEnd: 2433
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectionFailedSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, connection_failed_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccess
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2443
      start: 2435
    functionDepth: 0
    functionLinenumber: 2435
    functionLinenumberEnd: 2443
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccess
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2449,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2453
      start: 2445
    functionDepth: 0
    functionLinenumber: 2445
    functionLinenumberEnd: 2453
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessDuplicatedParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2459,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2463
      start: 2455
    functionDepth: 0
    functionLinenumber: 2455
    functionLinenumberEnd: 2463
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessDuplicatedParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_duplicated_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2469,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2473
      start: 2465
    functionDepth: 0
    functionLinenumber: 2465
    functionLinenumberEnd: 2473
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSkipParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2483
      start: 2475
    functionDepth: 0
    functionLinenumber: 2475
    functionLinenumberEnd: 2483
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSkipParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, skip_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessParallel2
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2489,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2493
      start: 2485
    functionDepth: 0
    functionLinenumber: 2485
    functionLinenumberEnd: 2493
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessParallel2
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_parallel2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSuccessLimitParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2499,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2503
      start: 2495
    functionDepth: 0
    functionLinenumber: 2495
    functionLinenumberEnd: 2503
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSuccessLimitParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, success_limit_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelBeforeCallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2509,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2513
      start: 2505
    functionDepth: 0
    functionLinenumber: 2505
    functionLinenumberEnd: 2513
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelBeforeCallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_before_callmethod)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelBeforeCallMethodParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2519,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2523
      start: 2515
    functionDepth: 0
    functionLinenumber: 2515
    functionLinenumberEnd: 2523
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelBeforeCallMethodParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_before_callmethod_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelBeforeCallMethodSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2529,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2533
      start: 2525
    functionDepth: 0
    functionLinenumber: 2525
    functionLinenumberEnd: 2533
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelBeforeCallMethodSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_before_callmethod_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelDuringCallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2539,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2543
      start: 2535
    functionDepth: 0
    functionLinenumber: 2535
    functionLinenumberEnd: 2543
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelDuringCallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_during_callmethod)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelDuringCallMethodParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2549,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2553
      start: 2545
    functionDepth: 0
    functionLinenumber: 2545
    functionLinenumberEnd: 2553
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelDuringCallMethodParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_during_callmethod_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelDuringCallMethodSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2563
      start: 2555
    functionDepth: 0
    functionLinenumber: 2555
    functionLinenumberEnd: 2563
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelDuringCallMethodSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_during_callmethod_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelAfterCallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2569,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2573
      start: 2565
    functionDepth: 0
    functionLinenumber: 2565
    functionLinenumberEnd: 2573
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelAfterCallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_after_callmethod)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CancelAfterCallMethodParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2579,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2583
      start: 2575
    functionDepth: 0
    functionLinenumber: 2575
    functionLinenumberEnd: 2583
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CancelAfterCallMethodParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, cancel_after_callmethod_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRequestNotInit
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2589,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2593
      start: 2585
    functionDepth: 0
    functionLinenumber: 2585
    functionLinenumberEnd: 2593
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRequestNotInit
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, request_not_init)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRequestNotInitParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2599,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2603
      start: 2595
    functionDepth: 0
    functionLinenumber: 2595
    functionLinenumberEnd: 2603
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRequestNotInitParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, request_not_init_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRequestNotInitSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2613
      start: 2605
    functionDepth: 0
    functionLinenumber: 2605
    functionLinenumberEnd: 2613
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRequestNotInitSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, request_not_init_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRPCTimeout
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2619,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2623
      start: 2615
    functionDepth: 0
    functionLinenumber: 2615
    functionLinenumberEnd: 2623
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRPCTimeout
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRPCTimeoutParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2629,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2633
      start: 2625
    functionDepth: 0
    functionLinenumber: 2625
    functionLinenumberEnd: 2633
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRPCTimeoutParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeoutStillChecksSubChannelsParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2643
      start: 2635
    functionDepth: 0
    functionLinenumber: 2635
    functionLinenumberEnd: 2643
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TimeoutStillChecksSubChannelsParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout_still_checks_sub_channels_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRPCTimeoutSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2649,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2653
      start: 2645
    functionDepth: 0
    functionLinenumber: 2645
    functionLinenumberEnd: 2653
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRPCTimeoutSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, timeout_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFD
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2659,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2663
      start: 2655
    functionDepth: 0
    functionLinenumber: 2655
    functionLinenumberEnd: 2663
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestCloseFD
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, close_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFDParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2669,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2673
      start: 2665
    functionDepth: 0
    functionLinenumber: 2665
    functionLinenumberEnd: 2673
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestCloseFDParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, close_fd_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFDSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2679,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2683
      start: 2675
    functionDepth: 0
    functionLinenumber: 2675
    functionLinenumberEnd: 2683
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestCloseFDSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, close_fd_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestServerFail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2689,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2693
      start: 2685
    functionDepth: 0
    functionLinenumber: 2685
    functionLinenumberEnd: 2693
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestServerFail
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, server_fail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestServerFailParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2699,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2703
      start: 2695
    functionDepth: 0
    functionLinenumber: 2695
    functionLinenumberEnd: 2703
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestServerFailParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, server_fail_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestServerFailSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2709,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2713
      start: 2705
    functionDepth: 0
    functionLinenumber: 2705
    functionLinenumberEnd: 2713
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestServerFailSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, server_fail_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAuthentication
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2719,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2723
      start: 2715
    functionDepth: 0
    functionLinenumber: 2715
    functionLinenumberEnd: 2723
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAuthentication
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, authentication)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAuthenticationParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2729,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2733
      start: 2725
    functionDepth: 0
    functionLinenumber: 2725
    functionLinenumberEnd: 2733
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAuthenticationParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, authentication_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAuthenticationSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2739,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2743
      start: 2735
    functionDepth: 0
    functionLinenumber: 2735
    functionLinenumberEnd: 2743
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAuthenticationSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, authentication_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRetry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2749,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2753
      start: 2745
    functionDepth: 0
    functionLinenumber: 2745
    functionLinenumberEnd: 2753
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRetry
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRetryOtherServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2758,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2761
      start: 2755
    functionDepth: 0
    functionLinenumber: 2755
    functionLinenumberEnd: 2761
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRetryOtherServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry_other_servers)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TestRetryBackoffInfo::TestRetryBackoffInfo
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2772,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2774,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2774,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2775,1
    - Dst: TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2778,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2784
      start: 2763
    functionDepth: 1
    functionLinenumber: 2763
    functionLinenumberEnd: 2784
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRetryBackoffInfo::TestRetryBackoffInfo
    - bthread_start_background
    - bthread_join
    - TestRetryBackoff
    - std::unique_ptr::get
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry_backoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequest
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2790,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2794
      start: 2786
    functionDepth: 0
    functionLinenumber: 2786
    functionLinenumberEnd: 2794
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequest
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backup_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequestPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2800,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2804
      start: 2796
    functionDepth: 0
    functionLinenumber: 2796
    functionLinenumberEnd: 2804
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequestPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backup_request_policy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2807,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2808,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2808,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2809,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2823,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2824,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2828,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2832,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2832,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2836,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2841
      start: 2806
    functionDepth: 1
    functionLinenumber: 2806
    functionLinenumberEnd: 2841
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetUpChannel
    - StartAccept
    - pthread_join
    - pthread_create
    - brpc::NewCallback
    - brpc::Channel::Channel
    - EXPECT_EQ
    - time
    - MyAuthenticator::MyAuthenticator
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, multiple_threads_single_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2844,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2845,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2845,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2846,1
    - Dst: "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n
        \                       bool, bool, bool, const brpc::Authenticator*, int>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2863,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2868,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2868,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2872,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2877
      start: 2843
    functionDepth: 0
    functionLinenumber: 2843
    functionLinenumberEnd: 2877
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - StartAccept
    - pthread_join
    - "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n                        bool,
      bool, bool, const brpc::Authenticator*, int>"
    - pthread_create
    - EXPECT_EQ
    - time
    - MyAuthenticator::MyAuthenticator
    - srand
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, multiple_threads_multiple_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAttachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2882,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2885
      start: 2879
    functionDepth: 0
    functionLinenumber: 2879
    functionLinenumberEnd: 2885
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestAttachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, clear_attachment_after_retry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestDestroyChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2890,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2893
      start: 2887
    functionDepth: 0
    functionLinenumber: 2887
    functionLinenumberEnd: 2893
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDestroyChannel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, destroy_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestDestroyChannelParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2898,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2901
      start: 2895
    functionDepth: 0
    functionLinenumber: 2895
    functionLinenumberEnd: 2901
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDestroyChannelParallel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, destroy_channel_parallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestDestroyChannelSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2906,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2909
      start: 2903
    functionDepth: 0
    functionLinenumber: 2903
    functionLinenumberEnd: 2909
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDestroyChannelSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, destroy_channel_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2912,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2916
      start: 2911
    functionDepth: 1
    functionLinenumber: 2911
    functionLinenumberEnd: 2916
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, sizeof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2922
      start: 2920
    functionDepth: 0
    functionLinenumber: 2920
    functionLinenumberEnd: 2922
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, global_channel_should_quit_successfully)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2926,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2929,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2930,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2934,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2935,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2937,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2937,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2941,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2942,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2943,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2944,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2944,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2946
      start: 2924
    functionDepth: 1
    functionLinenumber: 2924
    functionLinenumberEnd: 2946
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, unused_call_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AdaptiveConnectionType::AdaptiveConnectionType
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2949,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2950,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2951,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2951,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2952,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2952,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2955,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2956,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2956,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2959,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2960,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2963,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2964,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2967,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2968,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2968,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2969,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2972,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2973,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2973,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2974,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2974,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2977,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2978,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2978,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2979,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2979,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2980
      start: 2948
    functionDepth: 1
    functionLinenumber: 2948
    functionLinenumberEnd: 2980
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::AdaptiveConnectionType::has_error
    - ASSERT_TRUE
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::AdaptiveConnectionType::name
    - brpc::AdaptiveConnectionType::AdaptiveConnectionType
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, adaptive_connection_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AdaptiveProtocolType::AdaptiveProtocolType
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2983,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2984,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2985,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2985,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2986,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2987,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2987,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2990,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2991,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2991,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2992,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2993,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2993,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2996,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2997,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2997,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2998,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2999,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2999,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3002,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3003,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3003,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3004,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3005,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3005,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3008,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3009,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3009,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3010,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3011,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3011,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3014,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3015,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3015,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3017,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3017,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3018
      start: 2982
    functionDepth: 1
    functionLinenumber: 2982
    functionLinenumberEnd: 3018
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::AdaptiveProtocolType::has_param
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - ASSERT_STREQ
    - ASSERT_FALSE
    - brpc::AdaptiveProtocolType::param
    - brpc::AdaptiveProtocolType::name
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, adaptive_protocol_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 56
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: arraysize
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 121
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - arraysize
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NoArguments)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:128,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 185
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, OneArgument)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 196
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, MissingArg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 211
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - scoped_ptr::get
    - static_cast<ssize_t>
    - char::char
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, ASANFriendlyBufferTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 267
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NArgs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:330,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:333,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:335,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:342,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:345,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:346,1
    - Dst: memmove
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:348,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 351
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - strlen
    - memset
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - memmove
    - sprintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, DataTypes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:475,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:476,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:489,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:506,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 469
    functionDepth: 2
    functionLinenumber: 469
    functionLinenumberEnd: 508
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::PrintLongString
    - std::string
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Truncation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:524,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:554,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:560,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:592,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:594,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:624,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:628,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:630,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:652,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:656,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:658,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:680,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:684,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:686,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 137
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 510
    functionDepth: 1
    functionLinenumber: 510
    functionLinenumberEnd: 694
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - static_cast<size_t>
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:699,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:700,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:701,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:702,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 696
    functionDepth: 1
    functionLinenumber: 696
    functionLinenumberEnd: 717
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmbeddedNul)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 719
    functionDepth: 1
    functionLinenumber: 719
    functionLinenumberEnd: 739
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmitNULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char *>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 754
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    - reinterpret_cast<char *>
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, PointerSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 56
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: arraysize
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 121
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - arraysize
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NoArguments)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:128,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 185
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, OneArgument)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 196
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, MissingArg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 211
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - scoped_ptr::get
    - static_cast<ssize_t>
    - char::char
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, ASANFriendlyBufferTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 267
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NArgs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:330,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:333,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:335,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:342,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:345,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:346,1
    - Dst: memmove
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:348,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 351
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - strlen
    - memset
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - memmove
    - sprintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, DataTypes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 1
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 1
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:475,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:476,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:489,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:506,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 469
    functionDepth: 2
    functionLinenumber: 469
    functionLinenumberEnd: 508
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::PrintLongString
    - std::string
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Truncation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:524,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:554,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:560,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:592,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:594,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:624,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:628,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:630,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:652,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:656,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:658,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:680,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:684,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:686,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 137
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 510
    functionDepth: 1
    functionLinenumber: 510
    functionLinenumberEnd: 694
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - static_cast<size_t>
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:699,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:700,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:701,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:702,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 696
    functionDepth: 1
    functionLinenumber: 696
    functionLinenumberEnd: 717
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmbeddedNul)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 719
    functionDepth: 1
    functionLinenumber: 719
    functionLinenumberEnd: 739
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmitNULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char *>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 754
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    - reinterpret_cast<char *>
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, PointerSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 56
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: arraysize
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 121
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - arraysize
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NoArguments)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:128,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 185
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, OneArgument)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 196
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, MissingArg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 211
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - scoped_ptr::get
    - static_cast<ssize_t>
    - char::char
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, ASANFriendlyBufferTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 267
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NArgs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:330,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:333,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:335,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:342,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:345,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:346,1
    - Dst: memmove
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:348,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 351
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - strlen
    - memset
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - memmove
    - sprintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, DataTypes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 2
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 2
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:475,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:476,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:489,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:506,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 469
    functionDepth: 2
    functionLinenumber: 469
    functionLinenumberEnd: 508
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::PrintLongString
    - std::string
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Truncation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:524,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:554,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:560,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:592,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:594,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:624,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:628,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:630,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:652,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:656,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:658,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:680,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:684,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:686,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 137
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 510
    functionDepth: 1
    functionLinenumber: 510
    functionLinenumberEnd: 694
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - static_cast<size_t>
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:699,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:700,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:701,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:702,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 696
    functionDepth: 1
    functionLinenumber: 696
    functionLinenumberEnd: 717
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmbeddedNul)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 719
    functionDepth: 1
    functionLinenumber: 719
    functionLinenumberEnd: 739
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmitNULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char *>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 754
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    - reinterpret_cast<char *>
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, PointerSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:30,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 56
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: arraysize
      Src: /src/brpc/test/safe_sprintf_unittest.cc:64,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:78,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:86,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:91,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:94,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:100,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:101,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:106,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:111,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:114,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:116,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:117,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:118,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 121
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - arraysize
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NoArguments)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:128,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:136,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:140,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:143,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:148,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:152,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:157,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:160,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcmp
      Src: /src/brpc/test/safe_sprintf_unittest.cc:167,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:180,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:182,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 185
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - memset
    - butil::strings::SafeSPrintf
    - static_cast<ssize_t>
    - memcpy
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, OneArgument)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:191,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 196
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, MissingArg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:205,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:208,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 211
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - scoped_ptr::get
    - static_cast<ssize_t>
    - char::char
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, ASANFriendlyBufferTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:227,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:244,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:250,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:255,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:260,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:263,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 267
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, NArgs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:273,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:278,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:290,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:294,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:310,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:311,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:313,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:315,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:319,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:320,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:325,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:326,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:330,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:332,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:333,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:334,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:335,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:337,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:342,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:344,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:345,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:346,1
    - Dst: memmove
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:347,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:348,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 351
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - strlen
    - memset
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - memmove
    - sprintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, DataTypes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 3
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:357,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:361,1
    - Dst: memset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:362,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:372,1
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/test/safe_sprintf_unittest.cc:375,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:376,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:382,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:383,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:388,1
    - Dst: CHECK_GE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:389,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/safe_sprintf_unittest.cc:393,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:397,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:404,1
    - Dst: std::min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:405,1
    - Dst: char::char
      Src: /src/brpc/test/safe_sprintf_unittest.cc:406,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/safe_sprintf_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:415,1
    - Dst: CHECK_LE
      Src: /src/brpc/test/safe_sprintf_unittest.cc:426,1
    - Dst: sprintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:427,1
    - Dst: static_cast<long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/safe_sprintf_unittest.cc:428,1
    - Dst: static_cast<unsigned long long>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:429,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:430,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:434,1
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:440,1
    - Dst: memcpy
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/test/safe_sprintf_unittest.cc:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - buf
    - sz
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 446
    functionName: butil::strings::PrintLongString
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 3
    functionsReached:
    - static_cast<size_t>
    - CHECK_GT
    - sprintf
    - std::string
    - static_cast<char*>
    - static_cast<long long>
    - EXPECT_FALSE
    - EXPECT_EQ
    - memcpy
    - reinterpret_cast<uintptr_t>
    - strlen
    - butil::BaseIteratorRangeToNumberTraits::max
    - memset
    - CHECK_LE
    - scoped_ptr::scoped_ptr
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::reset
    - CHECK_GE
    - std::min
    - static_cast<unsigned long long>
    - brpc::GetJsService::jquery_min
    - scoped_ptr::get
    - CHECK_LT
    linkageType: ''
    returnType: void
    signature: void PrintLongString(char* buf, size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:452,1
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sz
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::strings::ScopedSafeSPrintfSSizeMaxSetter::ScopedSafeSPrintfSSizeMaxSetter
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ScopedSafeSPrintfSSizeMaxSetter(size_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
      Src: /src/brpc/test/safe_sprintf_unittest.cc:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: ~ScopedSafeSPrintfSSizeMaxSetter()
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::internal::SetSafeSPrintfSSizeMaxForTest
    linkageType: ''
    returnType: void
    signature: void ~ScopedSafeSPrintfSSizeMaxSetter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:475,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:476,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:479,1
    - Dst: strlen
      Src: /src/brpc/test/safe_sprintf_unittest.cc:489,1
    - Dst: butil::strings::PrintLongString
      Src: /src/brpc/test/safe_sprintf_unittest.cc:492,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:501,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:506,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 469
    functionDepth: 2
    functionLinenumber: 469
    functionLinenumberEnd: 508
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::strings::PrintLongString
    - std::string
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - EXPECT_EQ
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Truncation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:514,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:516,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:517,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:519,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:520,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:521,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:522,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:523,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:524,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:525,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:527,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:528,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:534,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:535,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:536,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:538,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:539,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:540,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:541,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:542,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:544,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:545,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:546,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:547,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:548,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:549,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:550,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:551,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:552,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:553,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:554,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:555,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:556,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:557,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:559,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:560,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:561,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:563,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:564,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:566,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:570,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:571,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:572,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:573,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:574,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:577,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:578,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:579,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:580,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:581,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:582,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:583,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:584,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:585,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:586,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:587,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:588,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:589,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:590,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:591,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:592,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:593,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:594,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:595,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:597,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:598,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:600,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:604,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:605,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:606,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:607,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:608,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:609,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:610,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:611,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:612,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:613,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:614,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:615,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:616,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:617,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:618,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:619,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:620,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:621,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:622,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:623,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:624,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:625,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:626,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:627,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:628,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:629,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:630,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:631,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:633,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:634,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:640,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:641,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:642,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:643,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:644,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:645,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:646,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:647,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:648,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:649,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:651,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:652,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:653,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:654,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:655,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:656,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:657,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:658,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:662,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:668,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:669,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:671,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:672,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:675,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:676,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:677,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:678,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:679,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:680,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:681,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:682,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:683,1
    - Dst: butil::strings::SafeSNPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:684,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:685,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:686,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/safe_sprintf_unittest.cc:687,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:690,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:692,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 137
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 510
    functionDepth: 1
    functionLinenumber: 510
    functionLinenumberEnd: 694
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string
    - static_cast<size_t>
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::strings::SafeSNPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, Padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:698,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:699,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:700,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:701,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:702,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:709,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:710,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:711,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:712,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:714,1
    - Dst: EXPECT_DEATH
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 696
    functionDepth: 1
    functionLinenumber: 696
    functionLinenumberEnd: 717
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_DEATH
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmbeddedNul)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:728,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:729,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:730,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:731,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:732,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 719
    functionDepth: 1
    functionLinenumber: 719
    functionLinenumberEnd: 739
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, EmitNULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char *>
      Src: /src/brpc/test/safe_sprintf_unittest.cc:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:750,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:751,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/test/safe_sprintf_unittest.cc:752,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    - Dst: std::string
      Src: /src/brpc/test/safe_sprintf_unittest.cc:753,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 754
    functionName: butil::strings::TEST
    functionSourceFile: /src/brpc/test/safe_sprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    - std::string
    - reinterpret_cast<char *>
    linkageType: ''
    returnType: void
    signature: void TEST(SafeSPrintfTest, PointerSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: ~Observer()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Observer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnLifeCycleDestroy
      Src: /src/brpc/test/scoped_vector_unittest.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 26
    functionName: ~LifeCycleObject()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - OnLifeCycleDestroy
    linkageType: ''
    returnType: void
    signature: void ~LifeCycleObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnLifeCycleConstruct
      Src: /src/brpc/test/scoped_vector_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - observer
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: LifeCycleObject::LifeCycleObject
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - OnLifeCycleConstruct
    linkageType: ''
    returnType: void
    signature: void LifeCycleObject(Observer* observer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: LifeCycleWatcher::LifeCycleWatcher
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LifeCycleWatcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~LifeCycleWatcher()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LifeCycleWatcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:69,1
    - Dst: get
      Src: /src/brpc/test/scoped_vector_unittest.cc:69,1
    - Dst: reset
      Src: /src/brpc/test/scoped_vector_unittest.cc:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - object
    argTypes:
    - LifeCycleObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: LifeCycleWatcher::OnLifeCycleConstruct
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - reset
    - get
    linkageType: ''
    returnType: void
    signature: void OnLifeCycleConstruct(LifeCycleObject* object)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:77,1
    - Dst: release
      Src: /src/brpc/test/scoped_vector_unittest.cc:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - object
    argTypes:
    - LifeCycleObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: LifeCycleWatcher::OnLifeCycleDestroy
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - release
    linkageType: ''
    returnType: void
    signature: void OnLifeCycleDestroy(LifeCycleObject* object)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: LifeCycleWatcher::life_cycle_state
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LifeCycleState
    signature: LifeCycleState life_cycle_state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleObject::LifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: LifeCycleWatcher::NewLifeCycleObject
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - LifeCycleObject::LifeCycleObject
    linkageType: ''
    returnType: LifeCycleObject
    signature: LifeCycleObject * NewLifeCycleObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/test/scoped_vector_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - object
    argTypes:
    - LifeCycleObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: LifeCycleWatcher::IsWatching
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool IsWatching(LifeCycleObject* object) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:106,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:106,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:108,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:110,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 111
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, LifeCycleWatcher)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:115,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:115,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:116,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:117,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:118,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:118,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:119,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:119,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:119,1
    - Dst: butil::ScopedVector::pop_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:121,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:122,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 2
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    - butil::ScopedVector::pop_back
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, PopBack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:127,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:127,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:128,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:129,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:130,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:130,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:131,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:131,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:131,1
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/test/scoped_vector_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:133,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:134,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Clear)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:139,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:139,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:140,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:141,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:142,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:143,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:143,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:143,1
    - Dst: butil::ScopedVector::weak_clear
      Src: /src/brpc/test/scoped_vector_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:145,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:146,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 137
    functionDepth: 2
    functionLinenumber: 137
    functionLinenumberEnd: 147
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::weak_clear
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, WeakClear)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:151,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:151,1
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:153,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:153,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:154,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:156,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:157,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:158,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:159,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:159,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:160,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:160,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:162,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:163,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:164,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:164,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:165,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:166,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:166,1
    - Dst: butil::ScopedVector::resize
      Src: /src/brpc/test/scoped_vector_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:170,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:171,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:172,1
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/test/scoped_vector_unittest.cc:172,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:173,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 174
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::resize
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - butil::ScopedVector::size
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, ResizeShrink)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:178,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:178,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:179,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:180,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:181,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:181,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:182,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:182,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:182,1
    - Dst: butil::ScopedVector::resize
      Src: /src/brpc/test/scoped_vector_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:185,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:186,1
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/test/scoped_vector_unittest.cc:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:187,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:187,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:188,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:188,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:189,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:189,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:190,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:190,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:191,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 192
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::resize
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - butil::ScopedVector::size
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, ResizeGrow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:196,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:196,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:198,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:199,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:200,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:200,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:201,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:201,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:203,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 194
    functionDepth: 2
    functionLinenumber: 194
    functionLinenumberEnd: 204
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Scope)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:208,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:208,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:211,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:211,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:212,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:212,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:214,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 206
    functionDepth: 2
    functionLinenumber: 206
    functionLinenumberEnd: 215
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Scope2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:219,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:219,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:221,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:222,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:222,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:223,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:223,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:224,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:224,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:224,1
    - Dst: butil::ScopedVector::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:226,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:227,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:228,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:228,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:229,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:229,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:231,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:233,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 217
    functionDepth: 2
    functionLinenumber: 217
    functionLinenumberEnd: 234
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::Pass
    - butil::ScopedVector::push_back
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, MoveConstruct)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:238,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:238,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:240,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:241,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:241,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:242,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:243,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:243,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:244,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:244,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:244,1
    - Dst: butil::ScopedVector::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:247,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:248,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:248,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:249,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:249,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:251,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:253,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 236
    functionDepth: 2
    functionLinenumber: 236
    functionLinenumberEnd: 254
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::Pass
    - butil::ScopedVector::push_back
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, MoveAssign)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - deletes
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: DeleteCounter::DeleteCounter
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteCounter(int* deletes)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 264
    functionName: ~DeleteCounter()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DeleteCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 266
    functionName: DeleteCounter::VoidMethod0
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VoidMethod0()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector<T>::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - scoper
    argTypes:
    - butil::ScopedVector<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 275
    functionDepth: 0
    functionLinenumber: 275
    functionLinenumberEnd: 277
    functionName: PassThru
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::ScopedVector<T>::Pass
    linkageType: ''
    returnType: butil::ScopedVector<T>
    signature: butil::ScopedVector<T> PassThru(butil::ScopedVector<T> scoper)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:281,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:282,1
    - Dst: DeleteCounter::DeleteCounter
      Src: /src/brpc/test/scoped_vector_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:285,1
    - Dst: butil::ScopedVector::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:287,1
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/test/scoped_vector_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 290
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ScopedVector::Pass
    - butil::ScopedVector::ScopedVector
    - butil::ScopedVector::push_back
    - DeleteCounter::DeleteCounter
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Passed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/scoped_vector_unittest.cc:296,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:298,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:298,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:299,1
    - Dst: LifeCycleWatcher*::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:300,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:300,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:304,1
    - Dst: butil::ScopedVector::insert
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: arraysize
      Src: /src/brpc/test/scoped_vector_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:308,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:311,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:311,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:313,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:313,1
    - Dst: arraysize
      Src: /src/brpc/test/scoped_vector_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:316,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:316,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 317
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - LifeCycleWatcher*::NewLifeCycleObject
    - LifeCycleWatcher*::life_cycle_state
    - arraysize
    - butil::ScopedVector::ScopedVector
    - std::vector::begin
    - EXPECT_EQ
    - butil::ScopedVector::insert
    - butil::ScopedVector::end
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, InsertRange)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: ~Observer()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Observer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnLifeCycleDestroy
      Src: /src/brpc/test/scoped_vector_unittest.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 26
    functionName: ~LifeCycleObject()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - OnLifeCycleDestroy
    linkageType: ''
    returnType: void
    signature: void ~LifeCycleObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnLifeCycleConstruct
      Src: /src/brpc/test/scoped_vector_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - observer
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: LifeCycleObject::LifeCycleObject
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 1
    functionsReached:
    - OnLifeCycleConstruct
    linkageType: ''
    returnType: void
    signature: void LifeCycleObject(Observer* observer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: LifeCycleWatcher::LifeCycleWatcher
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LifeCycleWatcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~LifeCycleWatcher()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LifeCycleWatcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:69,1
    - Dst: get
      Src: /src/brpc/test/scoped_vector_unittest.cc:69,1
    - Dst: reset
      Src: /src/brpc/test/scoped_vector_unittest.cc:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - object
    argTypes:
    - LifeCycleObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: LifeCycleWatcher::OnLifeCycleConstruct
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - reset
    - get
    linkageType: ''
    returnType: void
    signature: void OnLifeCycleConstruct(LifeCycleObject* object)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:77,1
    - Dst: release
      Src: /src/brpc/test/scoped_vector_unittest.cc:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - object
    argTypes:
    - LifeCycleObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: LifeCycleWatcher::OnLifeCycleDestroy
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - release
    linkageType: ''
    returnType: void
    signature: void OnLifeCycleDestroy(LifeCycleObject* object)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: LifeCycleWatcher::life_cycle_state
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: LifeCycleState
    signature: LifeCycleState life_cycle_state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleObject::LifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: LifeCycleWatcher::NewLifeCycleObject
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 10
    functionsReached:
    - LifeCycleObject::LifeCycleObject
    linkageType: ''
    returnType: LifeCycleObject
    signature: LifeCycleObject * NewLifeCycleObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/test/scoped_vector_unittest.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - object
    argTypes:
    - LifeCycleObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: LifeCycleWatcher::IsWatching
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 9
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool IsWatching(LifeCycleObject* object) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:106,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:106,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:108,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:110,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 111
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, LifeCycleWatcher)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:115,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:115,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:116,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:117,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:118,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:118,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:119,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:119,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:119,1
    - Dst: butil::ScopedVector::pop_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:121,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:121,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:122,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 2
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    - butil::ScopedVector::pop_back
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, PopBack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:127,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:127,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:128,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:129,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:130,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:130,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:131,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:131,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:131,1
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/test/scoped_vector_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:133,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:134,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Clear)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:139,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:139,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:140,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:141,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:141,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:142,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:143,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:143,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:143,1
    - Dst: butil::ScopedVector::weak_clear
      Src: /src/brpc/test/scoped_vector_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:145,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:146,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 137
    functionDepth: 2
    functionLinenumber: 137
    functionLinenumberEnd: 147
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::weak_clear
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, WeakClear)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:151,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:151,1
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:153,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:153,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:154,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:156,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:157,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:158,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:158,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:159,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:159,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:160,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:160,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:162,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:163,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:164,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:164,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:165,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:166,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:166,1
    - Dst: butil::ScopedVector::resize
      Src: /src/brpc/test/scoped_vector_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:170,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:171,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:172,1
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/test/scoped_vector_unittest.cc:172,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:173,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 174
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::resize
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - butil::ScopedVector::size
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, ResizeShrink)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:177,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:178,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:178,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:179,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:180,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:181,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:181,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:182,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:182,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:182,1
    - Dst: butil::ScopedVector::resize
      Src: /src/brpc/test/scoped_vector_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:185,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:186,1
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/test/scoped_vector_unittest.cc:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:187,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:187,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:188,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:188,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:189,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:189,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:190,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:190,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:191,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 192
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::resize
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - butil::ScopedVector::size
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, ResizeGrow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:196,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:196,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:198,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:199,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:200,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:200,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:201,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:201,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:203,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 194
    functionDepth: 2
    functionLinenumber: 194
    functionLinenumberEnd: 204
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::push_back
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Scope)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:208,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:208,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:211,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:211,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:212,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:212,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:214,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 206
    functionDepth: 2
    functionLinenumber: 206
    functionLinenumberEnd: 215
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Scope2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:219,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:219,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:221,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:222,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:222,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:223,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:223,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:224,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:224,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:224,1
    - Dst: butil::ScopedVector::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:226,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:227,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:228,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:228,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:229,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:229,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:231,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:233,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 217
    functionDepth: 2
    functionLinenumber: 217
    functionLinenumberEnd: 234
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::Pass
    - butil::ScopedVector::push_back
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, MoveConstruct)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LifeCycleWatcher::LifeCycleWatcher
      Src: /src/brpc/test/scoped_vector_unittest.cc:237,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:238,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:238,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:240,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:241,1
    - Dst: LifeCycleWatcher::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:241,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:242,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:243,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:243,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:244,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:244,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:244,1
    - Dst: butil::ScopedVector::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:247,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_vector_unittest.cc:248,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/test/scoped_vector_unittest.cc:248,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_vector_unittest.cc:249,1
    - Dst: LifeCycleWatcher::IsWatching
      Src: /src/brpc/test/scoped_vector_unittest.cc:249,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/test/scoped_vector_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:251,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:253,1
    - Dst: LifeCycleWatcher::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 236
    functionDepth: 2
    functionLinenumber: 236
    functionLinenumberEnd: 254
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::ScopedVector
    - LifeCycleWatcher::NewLifeCycleObject
    - butil::ScopedVector::Pass
    - butil::ScopedVector::push_back
    - EXPECT_FALSE
    - LifeCycleWatcher::LifeCycleWatcher
    - LifeCycleWatcher::life_cycle_state
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, MoveAssign)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - deletes
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: DeleteCounter::DeleteCounter
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteCounter(int* deletes)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 264
    functionName: ~DeleteCounter()
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DeleteCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 266
    functionName: DeleteCounter::VoidMethod0
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VoidMethod0()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector<T>::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - scoper
    argTypes:
    - butil::ScopedVector<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 275
    functionDepth: 0
    functionLinenumber: 275
    functionLinenumberEnd: 277
    functionName: PassThru
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::ScopedVector<T>::Pass
    linkageType: ''
    returnType: butil::ScopedVector<T>
    signature: butil::ScopedVector<T> PassThru(butil::ScopedVector<T> scoper)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:281,1
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:282,1
    - Dst: DeleteCounter::DeleteCounter
      Src: /src/brpc/test/scoped_vector_unittest.cc:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:285,1
    - Dst: butil::ScopedVector::Pass
      Src: /src/brpc/test/scoped_vector_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:287,1
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/test/scoped_vector_unittest.cc:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 290
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ScopedVector::Pass
    - butil::ScopedVector::ScopedVector
    - butil::ScopedVector::push_back
    - DeleteCounter::DeleteCounter
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, Passed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/scoped_vector_unittest.cc:296,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:298,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:298,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/scoped_vector_unittest.cc:299,1
    - Dst: LifeCycleWatcher*::NewLifeCycleObject
      Src: /src/brpc/test/scoped_vector_unittest.cc:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:300,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:300,1
    - Dst: butil::ScopedVector::ScopedVector
      Src: /src/brpc/test/scoped_vector_unittest.cc:304,1
    - Dst: butil::ScopedVector::insert
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/scoped_vector_unittest.cc:305,1
    - Dst: arraysize
      Src: /src/brpc/test/scoped_vector_unittest.cc:306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:308,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:311,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:311,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:313,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:313,1
    - Dst: arraysize
      Src: /src/brpc/test/scoped_vector_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_vector_unittest.cc:316,1
    - Dst: LifeCycleWatcher*::life_cycle_state
      Src: /src/brpc/test/scoped_vector_unittest.cc:316,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 317
    functionName: TEST
    functionSourceFile: /src/brpc/test/scoped_vector_unittest.cc
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - LifeCycleWatcher*::NewLifeCycleObject
    - LifeCycleWatcher*::life_cycle_state
    - arraysize
    - butil::ScopedVector::ScopedVector
    - std::vector::begin
    - EXPECT_EQ
    - butil::ScopedVector::insert
    - butil::ScopedVector::end
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedVectorTest, InsertRange)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtExitManager::AtExitManager
      Src: /src/brpc/test/butil_unittest_main.cpp:28,1
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/butil_unittest_main.cpp:29,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/butil_unittest_main.cpp:31,1
    - Dst: setrlimit
      Src: /src/brpc/test/butil_unittest_main.cpp:36,1
    - Dst: CHECK
      Src: /src/brpc/test/butil_unittest_main.cpp:39,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/butil_unittest_main.cpp:39,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/butil_unittest_main.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 42
    functionName: main
    functionSourceFile: /src/brpc/test/butil_unittest_main.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - butil::AtExitManager::AtExitManager
    - RUN_ALL_TESTS
    - CHECK
    - testing::InitGoogleTest
    - setrlimit
    linkageType: ''
    returnType: int
    signature: int main(int argc, char** argv)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: BaiduStringPrintfTest::BaiduStringPrintfTest
    functionSourceFile: /src/brpc/test/string_printf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduStringPrintfTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~BaiduStringPrintfTest()
    functionSourceFile: /src/brpc/test/string_printf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BaiduStringPrintfTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:40,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:40,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_printf_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:41,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:41,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_printf_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:42,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:42,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_printf_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:47,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:49,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/string_printf_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 52
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_printf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - butil::string_appendf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduStringPrintfTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: BaiduStringPrintfTest::BaiduStringPrintfTest
    functionSourceFile: /src/brpc/test/string_printf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduStringPrintfTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~BaiduStringPrintfTest()
    functionSourceFile: /src/brpc/test/string_printf_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BaiduStringPrintfTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:40,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:40,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_printf_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:41,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:41,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_printf_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:42,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:42,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_printf_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:47,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/string_printf_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:49,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/string_printf_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_printf_unittest.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 52
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_printf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ASSERT_EQ
    - butil::string_appendf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduStringPrintfTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:33,1
    - Dst: bvar::IntRecorder::_get_complement
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:41,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 45
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_get_complement
    - ASSERT_EQ
    - bvar::IntRecorder::_extend_sign_bit
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, test_complement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::_compress
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:51,1
    - Dst: bvar::IntRecorder::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_get_num
    - ASSERT_EQ
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_compress
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, test_compress)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::_get_complement
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:57,1
    - Dst: bvar::IntRecorder::_compress
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:60,1
    - Dst: bvar::IntRecorder::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::IntRecorder::_get_num
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_compress
    - bvar::IntRecorder::_get_complement
    - bvar::IntRecorder::_extend_sign_bit
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, test_compress_negtive_number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:68,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:69,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:73,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:74,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:74,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:77,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:81,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::Variable::list_exposed
    - bvar::IntRecorder::average
    - bvar::Variable::describe_exposed
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - std::vector::size
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:85,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:92,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:98,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:100,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 103
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - ASSERT_TRUE
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:107,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:111,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 112
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::IntRecorder::average
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, negative)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:116,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:116,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:120,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:120,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:120,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:123,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:123,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:124,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:128,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:128,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:128,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:130,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:131,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:131,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:132,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:136,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:136,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:136,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:138,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:139,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:140,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:142,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 144
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::average
    - bvar::LatencyRecorder::expose
    - bvar::IntRecorder::expose
    - bvar::LatencyRecorder::LatencyRecorder
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, positive_overflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:148,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:148,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:152,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:152,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:152,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:154,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:155,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:155,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:156,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:160,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:160,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:160,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:163,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:163,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:164,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:168,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:168,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:168,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:170,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:171,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:172,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:174,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 176
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::average
    - brpc::GetJsService::jquery_min
    - bvar::IntRecorder::expose
    - bvar::LatencyRecorder::LatencyRecorder
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, negtive_overflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:182,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:183,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:187,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: thread_counter
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_counter(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:192,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:193,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:193,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:195,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:199,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:204,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:205,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:205,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ARRAY_SIZE
    - ASSERT_EQ
    - pthread_join
    - bvar::IntRecorder::average
    - pthread_create
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:215,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:222,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:223,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:224,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:225,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:226,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:232,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:232,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:233,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:234,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:237,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:240,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:240,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:241,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:241,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:242,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:242,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:243,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:243,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:245,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:245,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:246,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:246,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:247,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:247,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:248,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:248,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 249
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - fabs
    - ASSERT_GT
    - read
    - EXPECT_LE
    - usleep
    - qps
    - EXPECT_GE
    - write
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, latency_recorder_qps_accuracy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:33,1
    - Dst: bvar::IntRecorder::_get_complement
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:41,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 45
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_get_complement
    - ASSERT_EQ
    - bvar::IntRecorder::_extend_sign_bit
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, test_complement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::_compress
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:51,1
    - Dst: bvar::IntRecorder::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_get_num
    - ASSERT_EQ
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_compress
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, test_compress)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::_get_complement
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:57,1
    - Dst: bvar::IntRecorder::_compress
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:60,1
    - Dst: bvar::IntRecorder::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::IntRecorder::_get_num
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_compress
    - bvar::IntRecorder::_get_complement
    - bvar::IntRecorder::_extend_sign_bit
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, test_compress_negtive_number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:68,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:69,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:73,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:74,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:74,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:77,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:81,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::Variable::list_exposed
    - bvar::IntRecorder::average
    - bvar::Variable::describe_exposed
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - std::vector::size
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:85,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:92,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:98,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:100,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 103
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - ASSERT_TRUE
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:107,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:111,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 112
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::IntRecorder::average
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, negative)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:116,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:116,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:120,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:120,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:120,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:123,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:123,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:124,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:128,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:128,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:128,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:130,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:131,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:131,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:132,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:136,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:136,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:136,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:138,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:139,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:140,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:142,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 144
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::average
    - bvar::LatencyRecorder::expose
    - bvar::IntRecorder::expose
    - bvar::LatencyRecorder::LatencyRecorder
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, positive_overflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:148,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:148,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:152,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:152,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:152,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:154,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:155,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:155,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:156,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:160,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:160,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:160,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:163,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:163,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:164,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:168,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:168,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:168,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:170,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:171,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:172,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:174,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 176
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::average
    - brpc::GetJsService::jquery_min
    - bvar::IntRecorder::expose
    - bvar::LatencyRecorder::LatencyRecorder
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, negtive_overflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:182,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:183,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:187,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: thread_counter
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void *thread_counter(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:192,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:193,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:193,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:195,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:199,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:204,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:205,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:205,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ARRAY_SIZE
    - ASSERT_EQ
    - pthread_join
    - bvar::IntRecorder::average
    - pthread_create
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::valid
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:215,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:222,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:223,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:224,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:225,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:226,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:232,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:232,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:233,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:234,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:237,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:240,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:240,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:241,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:241,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:242,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:242,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:243,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:243,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:245,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:245,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:246,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:246,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:247,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:247,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:248,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:248,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 249
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - fabs
    - ASSERT_GT
    - read
    - EXPECT_LE
    - usleep
    - qps
    - EXPECT_GE
    - write
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, latency_recorder_qps_accuracy)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: dummy
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * dummy(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:40,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:41,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:42,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:43,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:44,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:45,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:46,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:47,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:48,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:49,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:51,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:52,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:53,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:54,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:55,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:56,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 57
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    - bthread_getconcurrency
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, setconcurrency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:68,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:72,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:74,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 78
    functionName: odd_thread
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - fetch_add
    - bthread::butex_wake_all
    linkageType: ''
    returnType: void
    signature: void *odd_thread(void *)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:81,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:85,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:87,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 91
    functionName: even_thread
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - fetch_add
    - bthread::butex_wake_all
    linkageType: ''
    returnType: void
    signature: void *even_thread(void *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:94,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:95,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:96,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:103,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:104,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:105,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:109,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:110,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:110,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:112,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:116,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:117,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:118,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:119,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:125,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 126
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::butex_create_checked<butil::atomic<int> >
    - std::vector::push_back
    - ASSERT_EQ
    - bthread_setconcurrency
    - usleep
    - bthread_start_background
    - bthread_join
    - bthread::butex_wake_all
    - bthread_getconcurrency
    - LOG
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, setconcurrency_with_running_bthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: sleep_proc
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep
    linkageType: ''
    returnType: void
    signature: void * sleep_proc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:135,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: add_concurrency_proc
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void * add_concurrency_proc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:143,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:143,1
    - Dst: std::string::empty
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 145
    functionName: set_min_concurrency
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::stringstream::str
    - std::string::empty
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: bool
    signature: bool set_min_concurrency(int num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:149,1
    - Dst: atoi
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:150,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 151
    functionName: get_min_concurrency
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - atoi
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    linkageType: ''
    returnType: int
    signature: int get_min_concurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:154,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:155,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:156,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:156,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:160,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:161,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:163,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:164,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:166,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:167,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:168,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:169,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:170,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:172,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:173,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:174,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:174,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:179,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:180,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:184,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:185,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:187,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:190,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:191,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:191,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_setconcurrency
    - set_min_concurrency
    - bthread_start_background
    - bthread_join
    - concurrency
    - get_min_concurrency
    - bthread_getconcurrency
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, min_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:197,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:197,1
    - Dst: std::string::empty
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tag
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 199
    functionName: current_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::stringstream::str
    - std::string::empty
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: int
    signature: int current_tag(int tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:202,1
    - Dst: current_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:203,1
    - Dst: current_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:204,1
    - Dst: current_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 205
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - current_tag
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, current_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:211,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:211,1
    - Dst: std::string::empty
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 213
    functionName: concurrency_by_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::stringstream::str
    - std::string::empty
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: int
    signature: int concurrency_by_tag(int num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:216,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:216,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:218,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:219,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:220,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:220,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:222,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 223
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getconcurrency
    - ASSERT_EQ
    - bthread_setconcurrency
    - concurrency_by_tag
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, concurrency_by_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: dummy
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * dummy(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:40,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:41,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:42,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:43,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:44,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:45,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:46,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:47,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:48,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:49,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:51,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:52,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:53,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:54,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:55,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:56,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 57
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    - bthread_getconcurrency
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, setconcurrency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:68,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:72,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:74,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 78
    functionName: odd_thread
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - fetch_add
    - bthread::butex_wake_all
    linkageType: ''
    returnType: void
    signature: void *odd_thread(void *)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:81,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:85,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:87,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 91
    functionName: even_thread
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - fetch_add
    - bthread::butex_wake_all
    linkageType: ''
    returnType: void
    signature: void *even_thread(void *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:94,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:95,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:96,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:103,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:104,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:105,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:109,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:110,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:110,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:112,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:116,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:117,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:118,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:119,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:125,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 126
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bthread::butex_create_checked<butil::atomic<int> >
    - std::vector::push_back
    - ASSERT_EQ
    - bthread_setconcurrency
    - usleep
    - bthread_start_background
    - bthread_join
    - bthread::butex_wake_all
    - bthread_getconcurrency
    - LOG
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, setconcurrency_with_running_bthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: sleep_proc
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep
    linkageType: ''
    returnType: void
    signature: void * sleep_proc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:135,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: add_concurrency_proc
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void * add_concurrency_proc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:143,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:143,1
    - Dst: std::string::empty
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 145
    functionName: set_min_concurrency
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::stringstream::str
    - std::string::empty
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: bool
    signature: bool set_min_concurrency(int num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:149,1
    - Dst: atoi
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:150,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 151
    functionName: get_min_concurrency
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - atoi
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    linkageType: ''
    returnType: int
    signature: int get_min_concurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:154,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:155,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:156,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:156,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:160,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:161,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:163,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:164,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:166,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:167,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:168,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:169,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:170,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:172,1
    - Dst: set_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:173,1
    - Dst: get_min_concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:174,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:174,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:179,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:180,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:184,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:185,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:187,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:190,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:191,1
    - Dst: concurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:191,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_setconcurrency
    - set_min_concurrency
    - bthread_start_background
    - bthread_join
    - concurrency
    - get_min_concurrency
    - bthread_getconcurrency
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, min_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:197,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:197,1
    - Dst: std::string::empty
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tag
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 199
    functionName: current_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::stringstream::str
    - std::string::empty
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: int
    signature: int current_tag(int tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:202,1
    - Dst: current_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:203,1
    - Dst: current_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:204,1
    - Dst: current_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 205
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - current_tag
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, current_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:211,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:211,1
    - Dst: std::string::empty
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 213
    functionName: concurrency_by_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::stringstream::str
    - std::string::empty
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: int
    signature: int concurrency_by_tag(int num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:216,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:216,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:218,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:219,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:220,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:220,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:222,1
    - Dst: concurrency_by_tag
      Src: /src/brpc/test/bthread_setconcurrency_unittest.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 223
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_getconcurrency
    - ASSERT_EQ
    - bthread_setconcurrency
    - concurrency_by_tag
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadTest, concurrency_by_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_list_unittest.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: sleeper
    functionSourceFile: /src/brpc/test/bthread_list_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleeper(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:33,1
    - Dst: bthread_list_init
      Src: /src/brpc/test/bthread_list_unittest.cpp:33,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:37,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_list_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:39,1
    - Dst: bthread_list_add
      Src: /src/brpc/test/bthread_list_unittest.cpp:39,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_list_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:42,1
    - Dst: bthread_list_join
      Src: /src/brpc/test/bthread_list_unittest.cpp:42,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_list_unittest.cpp:43,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_list_unittest.cpp:44,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_list_unittest.cpp:44,1
    - Dst: bthread_list_destroy
      Src: /src/brpc/test/bthread_list_unittest.cpp:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 47
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_list_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_list_join
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_list_add
    - bthread_start_urgent
    - bthread_list_init
    - ASSERT_FALSE
    - bthread::TaskGroup::exists
    - bthread_list_destroy
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ListTest, join_thread_by_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:51,1
    - Dst: bthread_list_init
      Src: /src/brpc/test/bthread_list_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:53,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_list_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:55,1
    - Dst: bthread_list_add
      Src: /src/brpc/test/bthread_list_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:56,1
    - Dst: bthread_list_join
      Src: /src/brpc/test/bthread_list_unittest.cpp:56,1
    - Dst: bthread_list_destroy
      Src: /src/brpc/test/bthread_list_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:58,1
    - Dst: bthread_list_join
      Src: /src/brpc/test/bthread_list_unittest.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_list_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_list_join
    - ASSERT_EQ
    - bthread_list_add
    - bthread_start_urgent
    - bthread_list_init
    - bthread_list_destroy
    linkageType: ''
    returnType: void
    signature: void TEST(ListTest, join_a_destroyed_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_list_unittest.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: sleeper
    functionSourceFile: /src/brpc/test/bthread_list_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * sleeper(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:33,1
    - Dst: bthread_list_init
      Src: /src/brpc/test/bthread_list_unittest.cpp:33,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:37,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_list_unittest.cpp:37,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:39,1
    - Dst: bthread_list_add
      Src: /src/brpc/test/bthread_list_unittest.cpp:39,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_list_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:42,1
    - Dst: bthread_list_join
      Src: /src/brpc/test/bthread_list_unittest.cpp:42,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_list_unittest.cpp:43,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_list_unittest.cpp:44,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_list_unittest.cpp:44,1
    - Dst: bthread_list_destroy
      Src: /src/brpc/test/bthread_list_unittest.cpp:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 47
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_list_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_list_join
    - ASSERT_EQ
    - std::vector::push_back
    - bthread_list_add
    - bthread_start_urgent
    - bthread_list_init
    - ASSERT_FALSE
    - bthread::TaskGroup::exists
    - bthread_list_destroy
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ListTest, join_thread_by_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:51,1
    - Dst: bthread_list_init
      Src: /src/brpc/test/bthread_list_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:53,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_list_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:55,1
    - Dst: bthread_list_add
      Src: /src/brpc/test/bthread_list_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:56,1
    - Dst: bthread_list_join
      Src: /src/brpc/test/bthread_list_unittest.cpp:56,1
    - Dst: bthread_list_destroy
      Src: /src/brpc/test/bthread_list_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_list_unittest.cpp:58,1
    - Dst: bthread_list_join
      Src: /src/brpc/test/bthread_list_unittest.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_list_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_list_join
    - ASSERT_EQ
    - bthread_list_add
    - bthread_start_urgent
    - bthread_list_init
    - bthread_list_destroy
    linkageType: ''
    returnType: void
    signature: void TEST(ListTest, join_a_destroyed_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' ts1'
    - ' ts2'
    argTypes:
    - timespec
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: timespec_diff_us
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: long
    signature: long timespec_diff_us(const timespec& ts1, const timespec& ts2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - run_time
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: TimeKeeper::TimeKeeper
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeKeeper(timespec run_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - run_time
    - name
    argTypes:
    - timespec
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 38
    functionName: TimeKeeper::TimeKeeper
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeKeeper(timespec run_time, const char* name/*must be string
      constant*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - run_time
    - name
    - sleep_ms
    argTypes:
    - timespec
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: TimeKeeper::TimeKeeper
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TimeKeeper(timespec run_time, const char* name/*must be string
      constant*/,\n               int sleep_ms)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread*::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - timer_thread
    argTypes:
    - bthread::TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: TimeKeeper::schedule
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::TimerThread*::schedule
    linkageType: ''
    returnType: void
    signature: void schedule(bthread::TimerThread* timer_thread)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:51,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:55,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:57,1
    - Dst: butil::milliseconds_to_timespec
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:60,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 63
    functionName: TimeKeeper::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    - butil::milliseconds_to_timespec
    - push_back
    - clock_gettime
    - LOG
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 73
    functionName: TimeKeeper::wakeup
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void wakeup()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: TimeKeeper::expect_first_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 1
    functionsReached:
    - TimeKeeper::expect_first_run
    linkageType: ''
    returnType: void
    signature: void expect_first_run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:83,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:83,1
    - Dst: timespec_diff_us
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:84,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:85,1
    - Dst: labs
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - expect_run_time
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 86
    functionName: TimeKeeper::expect_first_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_LE
    - empty
    - timespec_diff_us
    - labs
    linkageType: ''
    returnType: void
    signature: void expect_first_run(timespec expect_run_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:89,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: TimeKeeper::expect_not_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - empty
    linkageType: ''
    returnType: void
    signature: void expect_not_run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeKeeper*::run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: TimeKeeper::routine
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - TimeKeeper*::run
    linkageType: ''
    returnType: void
    signature: void routine(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:109,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:109,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:111,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:113,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:116,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:118,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:120,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:122,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:124,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:130,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:131,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:132,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:133,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:137,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:141,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:143,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:144,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:145,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:146,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:147,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:148,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:148,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:151,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:152,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:153,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:154,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:155,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 157
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::TimerThread::start
    - butil::seconds_from_now
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::m_elapsed
    - TimeKeeper::schedule
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_not_run
    - ASSERT_LE
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::unschedule
    - sleep
    - LOG
    - bthread::TimerThread::stop_and_join
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, RunTasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:162,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:167,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:167,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:168,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:169,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:170,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:171,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:172,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 174
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::TimerThread::start
    - butil::seconds_from_now
    - TimeKeeper::schedule
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_first_run
    - ASSERT_NE
    - sleep
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, start_after_schedule)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - timer_thread
    - keeper1
    - keeper2
    - expected_unschedule_result
    argTypes:
    - bthread::TimerThread*
    - TimeKeeper*
    - TimeKeeper*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 184
    functionName: TestTask::TestTask
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TestTask(bthread::TimerThread* timer_thread, TimeKeeper* keeper1,\n
      \            TimeKeeper* keeper2, int expected_unschedule_result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:189,1
    - Dst: unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:190,1
    - Dst: schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 192
    functionName: TestTask::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - clock_gettime
    - schedule
    - unschedule
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestTask*::run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: TestTask::routine
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestTask*::run
    linkageType: ''
    returnType: void
    signature: void routine(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:210,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:212,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:221,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:221,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:222,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:223,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:224,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:225,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:226,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:229,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:232,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:234,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:236,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:240,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:240,1
    - Dst: TimeKeeper::wakeup
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:243,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:244,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:246,1
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:248,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:250,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:251,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:252,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:253,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 255
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::TimerThread::stop_and_join
    - bthread::TimerThread::start
    - butil::seconds_from_now
    - TimeKeeper::expect_not_run
    - TimeKeeper::schedule
    - bthread::TimerThread::TimerThread
    - TimeKeeper::wakeup
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::unschedule
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - clock_gettime
    - butil::milliseconds_from_now
    - bthread::TimerThread::schedule
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, schedule_and_unschedule_in_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' ts1'
    - ' ts2'
    argTypes:
    - timespec
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: timespec_diff_us
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: long
    signature: long timespec_diff_us(const timespec& ts1, const timespec& ts2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - run_time
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: TimeKeeper::TimeKeeper
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeKeeper(timespec run_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - run_time
    - name
    argTypes:
    - timespec
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 38
    functionName: TimeKeeper::TimeKeeper
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeKeeper(timespec run_time, const char* name/*must be string
      constant*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - run_time
    - name
    - sleep_ms
    argTypes:
    - timespec
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: TimeKeeper::TimeKeeper
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TimeKeeper(timespec run_time, const char* name/*must be string
      constant*/,\n               int sleep_ms)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread*::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - timer_thread
    argTypes:
    - bthread::TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: TimeKeeper::schedule
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 3
    functionsReached:
    - bthread::TimerThread*::schedule
    linkageType: ''
    returnType: void
    signature: void schedule(bthread::TimerThread* timer_thread)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:51,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:55,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:57,1
    - Dst: butil::milliseconds_to_timespec
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:60,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 63
    functionName: TimeKeeper::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    - butil::milliseconds_to_timespec
    - push_back
    - clock_gettime
    - LOG
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 73
    functionName: TimeKeeper::wakeup
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void wakeup()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: TimeKeeper::expect_first_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 5
    functionsReached:
    - TimeKeeper::expect_first_run
    linkageType: ''
    returnType: void
    signature: void expect_first_run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:83,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:83,1
    - Dst: timespec_diff_us
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:84,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:85,1
    - Dst: labs
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - expect_run_time
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 86
    functionName: TimeKeeper::expect_first_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 5
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_LE
    - empty
    - timespec_diff_us
    - labs
    linkageType: ''
    returnType: void
    signature: void expect_first_run(timespec expect_run_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:89,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: TimeKeeper::expect_not_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - empty
    linkageType: ''
    returnType: void
    signature: void expect_not_run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeKeeper*::run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: TimeKeeper::routine
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - TimeKeeper*::run
    linkageType: ''
    returnType: void
    signature: void routine(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:109,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:109,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:111,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:113,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:116,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:118,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:120,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:122,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:124,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:130,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:131,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:132,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:133,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:137,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:141,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:143,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:144,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:145,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:146,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:147,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:148,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:148,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:151,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:152,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:153,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:154,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:155,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 157
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::TimerThread::start
    - butil::seconds_from_now
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::m_elapsed
    - TimeKeeper::schedule
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_not_run
    - ASSERT_LE
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::unschedule
    - sleep
    - LOG
    - bthread::TimerThread::stop_and_join
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, RunTasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:162,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:167,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:167,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:168,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:169,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:170,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:171,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:172,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 174
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::TimerThread::start
    - butil::seconds_from_now
    - TimeKeeper::schedule
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_first_run
    - ASSERT_NE
    - sleep
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, start_after_schedule)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - timer_thread
    - keeper1
    - keeper2
    - expected_unschedule_result
    argTypes:
    - bthread::TimerThread*
    - TimeKeeper*
    - TimeKeeper*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 184
    functionName: TestTask::TestTask
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TestTask(bthread::TimerThread* timer_thread, TimeKeeper* keeper1,\n
      \            TimeKeeper* keeper2, int expected_unschedule_result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:189,1
    - Dst: unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:190,1
    - Dst: schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 192
    functionName: TestTask::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - clock_gettime
    - schedule
    - unschedule
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestTask*::run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: TestTask::routine
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestTask*::run
    linkageType: ''
    returnType: void
    signature: void routine(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:210,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:212,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:221,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:221,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:222,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:223,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:224,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:225,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:226,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:229,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:232,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:234,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:236,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:240,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:240,1
    - Dst: TimeKeeper::wakeup
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:243,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:244,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:246,1
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:248,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:250,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:251,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:252,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:253,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 255
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::TimerThread::stop_and_join
    - bthread::TimerThread::start
    - butil::seconds_from_now
    - TimeKeeper::expect_not_run
    - TimeKeeper::schedule
    - bthread::TimerThread::TimerThread
    - TimeKeeper::wakeup
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::unschedule
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - clock_gettime
    - butil::milliseconds_from_now
    - bthread::TimerThread::schedule
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, schedule_and_unschedule_in_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:43,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:47,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:49,1
    - Dst: butil::ip2int
      Src: /src/brpc/test/endpoint_unittest.cpp:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:51,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 52
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::ip2int
    - butil::int2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, comparisons)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:58,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:58,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:59,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:60,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:61,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:62,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:62,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:63,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:63,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:66,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:67,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:67,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:69,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:70,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:71,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/endpoint_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:73,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:74,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:75,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 77
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_GE
    - ASSERT_STREQ
    - ASSERT_GT
    - butil::str2ip
    - ASSERT_FALSE
    - ASSERT_LE
    - ASSERT_LT
    - butil::ip2str
    - LOG
    - butil::int2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ip_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:80,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/endpoint_unittest.cpp:80,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/test/endpoint_unittest.cpp:81,1
    - Dst: butil::my_hostname
      Src: /src/brpc/test/endpoint_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::my_ip
    - LOG
    - butil::my_ip_cstr
    - butil::my_hostname
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, show_local_info)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:92,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:95,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:96,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:97,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:98,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:98,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:101,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:101,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:102,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:103,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:106,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:107,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:108,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:108,1
    - Dst: berror
      Src: /src/brpc/test/endpoint_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:109,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:109,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:113,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:113,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:114,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - hostname2endpoint
    - ASSERT_STREQ
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - berror
    - butil::ip2str
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:125,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:126,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:126,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:130,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:131,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:134,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:134,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:135,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:136,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 137
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::hash_map::find
    - butil::hash_map::end
    - butil::hash_map::size
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, hash_table)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:141,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/endpoint_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:151,1
    - Dst: butil::ip2int
      Src: /src/brpc/test/endpoint_unittest.cpp:152,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:155,1
    - Dst: butil::FlatMap::bucket_info
      Src: /src/brpc/test/endpoint_unittest.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:160,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 163
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::str2ip
    - butil::ip2int
    - butil::FlatMap::bucket_info
    - butil::FlatMap::size
    - butil::FlatMap::init
    - ASSERT_LT
    - LOG
    - butil::int2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, flat_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: accept
      Src: /src/brpc/test/endpoint_unittest.cpp:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 171
    functionName: server_proc
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - accept
    linkageType: ''
    returnType: void
    signature: void * server_proc(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:176,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:176,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/endpoint_unittest.cpp:178,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:179,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:181,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:183,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:184,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:187,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/endpoint_unittest.cpp:187,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:189,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:193,1
    - Dst: std::string::substr
      Src: /src/brpc/test/endpoint_unittest.cpp:193,1
    - Dst: size
      Src: /src/brpc/test/endpoint_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:195,1
    - Dst: butil::get_remote_side
      Src: /src/brpc/test/endpoint_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:196,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:196,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:197,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:200,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:202,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:203,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 2
    argNames:
    - ' server_addr'
    - ' exp_client_addr'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 205
    functionName: test_listen_connect
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::str2endpoint
    - ASSERT_GT
    - butil::EndPoint::EndPoint
    - butil::tcp_connect
    - size
    - c_str
    - butil::get_remote_side
    - butil::get_local_side
    - close
    - butil::endpoint2str
    - butil::tcp_listen
    - butil::get_endpoint_type
    linkageType: ''
    returnType: void
    signature: void test_listen_connect(const std::string& server_addr, const std::string&
      exp_client_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:211,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:211,1
    - Dst: butil::EndPointStr::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' instr'
    - ' outstr'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 212
    functionName: test_parse_and_serialize
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - butil::EndPointStr::c_str
    - c_str
    - butil::endpoint2str
    linkageType: ''
    returnType: void
    signature: void test_parse_and_serialize(const std::string& instr, const std::string&
      outstr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_listen_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 2
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_listen_connect
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ipv4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:223,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:228,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:229,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:230,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:231,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:232,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:233,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:234,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:235,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 236
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::str2endpoint
    - test_parse_and_serialize
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ipv6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:239,1
    - Dst: test_listen_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:240,1
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:241,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:244,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:245,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:246,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:247,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:248,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:249,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:249,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:249,1
    - Dst: std::string::append
      Src: /src/brpc/test/endpoint_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:254,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:254,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/endpoint_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: snprintf
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 238
    functionDepth: 2
    functionLinenumber: 238
    functionLinenumberEnd: 260
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - std::string::c_str
    - ::unlink
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - snprintf
    - std::string::append
    - test_listen_connect
    - butil::endpoint2str
    - ASSERT_LT
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, unix_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:264,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:265,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:268,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:274,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:276,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 284
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - ASSERT_EQ
    - butil::details::ExtendedEndPoint::is_extended
    - butil::str2endpoint
    - ASSERT_FALSE
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, original_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:288,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:289,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:289,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:292,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:293,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:298,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:299,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:300,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:308,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:309,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:309,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:314,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:317,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:317,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:318,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:323,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:324,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:325,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:328,1
    - Dst: str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:329,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:329,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:330,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:332,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 333
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ExtendedEndPoint*::_ref_count::load
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    - butil::EndPoint
    - butil::str2endpoint
    - ASSERT_FALSE
    - butil::EndPoint::EndPoint
    - ExtendedEndPoint*::family
    - str2endpoint
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, extended_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:340,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:341,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:344,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:346,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:347,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:350,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:351,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:352,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:353,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 355
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - ASSERT_EQ
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:359,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:359,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:362,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:369,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:371,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:374,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:374,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:379,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:381,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:381,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:384,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 388
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - htons
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - memset
    - butil::endpoint2sockaddr
    - bzero
    - butil::sockaddr2endpoint
    - butil::get_endpoint_type
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_sockaddr_conv_ipv4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:395,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:402,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:404,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:408,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:409,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:414,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:416,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:416,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:419,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:419,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:420,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:422,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 390
    functionDepth: 1
    functionLinenumber: 390
    functionLinenumberEnd: 423
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - ASSERT_STREQ
    - htons
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - memset
    - butil::endpoint2sockaddr
    - bzero
    - butil::endpoint2str
    - butil::sockaddr2endpoint
    - butil::get_endpoint_type
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_sockaddr_conv_ipv6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:436,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:436,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:441,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:442,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:443,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:443,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:447,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 450
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - memset
    - butil::endpoint2sockaddr
    - butil::endpoint2str
    - butil::sockaddr2endpoint
    - butil::get_endpoint_type
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_sockaddr_conv_unix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:457,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:457,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:461,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:461,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:464,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:464,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:465,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 468
    functionName: concurrent_proc
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string::c_str
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - butil::endpoint2str
    - std::string::assign
    linkageType: ''
    returnType: void
    signature: void concurrent_proc(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:475,1
    - Dst: concurrent_proc
      Src: /src/brpc/test/endpoint_unittest.cpp:476,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:482,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 470
    functionDepth: 2
    functionLinenumber: 470
    functionLinenumberEnd: 484
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - concurrent_proc
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:489,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:491,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:492,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:492,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:495,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:498,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:499,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:510,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:510,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:511,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:512,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:514,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:516,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:522,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:522,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:523,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:524,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:525,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:527,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:533,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:533,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 488
    functionDepth: 1
    functionLinenumber: 488
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::pthread_timed_connect
    - ASSERT_EQ
    - endpoint2sockaddr
    - butil::tcp_connect
    - socket
    - butil::EndPoint::EndPoint
    - butil::milliseconds_from_now
    - ASSERT_LE
    - butil::hostname2endpoint
    - butil::is_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, tcp_connect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:541,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:545,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:545,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:546,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:547,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:551,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:552,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:554,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:556,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:557,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:566,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/endpoint_unittest.cpp:566,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 567
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 2
    functionsReached:
    - butil::pthread_timed_connect
    - ASSERT_EQ
    - endpoint2sockaddr
    - butil::is_connected
    - socket
    - butil::tcp_connect
    - butil::EndPoint::EndPoint
    - butil::cpuwide_time_ms
    - ASSERT_LE
    - butil::hostname2endpoint
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/endpoint_unittest.cpp:571,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 573
    functionName: ConnectThread
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterruptImpl
    linkageType: ''
    returnType: void
    signature: void * ConnectThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 575
    functionName: do_nothing_handler
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void do_nothing_handler(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/test/endpoint_unittest.cpp:578,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 579
    functionName: register_sigurg
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: void register_sigurg()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:584,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:584,1
    - Dst: usleep
      Src: /src/brpc/test/endpoint_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:590,1
    - Dst: pthread_kill
      Src: /src/brpc/test/endpoint_unittest.cpp:590,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:592,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 581
    functionDepth: 0
    functionLinenumber: 581
    functionLinenumberEnd: 593
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - usleep
    - pthread_create
    - pthread_kill
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: register_sigurg
      Src: /src/brpc/test/endpoint_unittest.cpp:596,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:597,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 595
    functionDepth: 1
    functionLinenumber: 595
    functionLinenumberEnd: 599
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterrupt
    - register_sigurg
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, interrupt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:43,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:47,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:49,1
    - Dst: butil::ip2int
      Src: /src/brpc/test/endpoint_unittest.cpp:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:51,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 52
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::ip2int
    - butil::int2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, comparisons)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:58,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:58,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:59,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:60,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:61,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:62,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:62,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:63,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:63,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:66,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:67,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:67,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:69,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:70,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:71,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/endpoint_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:73,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:74,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:75,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 77
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_GE
    - ASSERT_STREQ
    - ASSERT_GT
    - butil::str2ip
    - ASSERT_FALSE
    - ASSERT_LE
    - ASSERT_LT
    - butil::ip2str
    - LOG
    - butil::int2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ip_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:80,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/endpoint_unittest.cpp:80,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/test/endpoint_unittest.cpp:81,1
    - Dst: butil::my_hostname
      Src: /src/brpc/test/endpoint_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::my_ip
    - LOG
    - butil::my_ip_cstr
    - butil::my_hostname
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, show_local_info)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:92,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:95,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:96,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:97,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:98,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:98,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:101,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:101,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:102,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:103,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:106,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:107,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:108,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:108,1
    - Dst: berror
      Src: /src/brpc/test/endpoint_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:109,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:109,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:113,1
    - Dst: hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:113,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:114,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/endpoint_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - hostname2endpoint
    - ASSERT_STREQ
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - berror
    - butil::ip2str
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:125,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:126,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:126,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:130,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:131,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:134,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:134,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:135,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:136,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 137
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::hash_map::find
    - butil::hash_map::end
    - butil::hash_map::size
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, hash_table)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:141,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/endpoint_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:151,1
    - Dst: butil::ip2int
      Src: /src/brpc/test/endpoint_unittest.cpp:152,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:155,1
    - Dst: butil::FlatMap::bucket_info
      Src: /src/brpc/test/endpoint_unittest.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:160,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 163
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::str2ip
    - butil::ip2int
    - butil::FlatMap::bucket_info
    - butil::FlatMap::size
    - butil::FlatMap::init
    - ASSERT_LT
    - LOG
    - butil::int2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, flat_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: accept
      Src: /src/brpc/test/endpoint_unittest.cpp:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 171
    functionName: server_proc
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - accept
    linkageType: ''
    returnType: void
    signature: void * server_proc(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:176,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:176,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/endpoint_unittest.cpp:178,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:179,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:181,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:183,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:184,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:187,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/endpoint_unittest.cpp:187,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:189,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:193,1
    - Dst: std::string::substr
      Src: /src/brpc/test/endpoint_unittest.cpp:193,1
    - Dst: size
      Src: /src/brpc/test/endpoint_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:195,1
    - Dst: butil::get_remote_side
      Src: /src/brpc/test/endpoint_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:196,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:196,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:197,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:200,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:202,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:203,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 2
    argNames:
    - ' server_addr'
    - ' exp_client_addr'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 205
    functionName: test_listen_connect
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 2
    functionsReached:
    - std::string::substr
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::str2endpoint
    - ASSERT_GT
    - butil::EndPoint::EndPoint
    - butil::tcp_connect
    - size
    - c_str
    - butil::get_remote_side
    - butil::get_local_side
    - close
    - butil::endpoint2str
    - butil::tcp_listen
    - butil::get_endpoint_type
    linkageType: ''
    returnType: void
    signature: void test_listen_connect(const std::string& server_addr, const std::string&
      exp_client_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:211,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:211,1
    - Dst: butil::EndPointStr::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' instr'
    - ' outstr'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 212
    functionName: test_parse_and_serialize
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - std::string
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - butil::EndPointStr::c_str
    - c_str
    - butil::endpoint2str
    linkageType: ''
    returnType: void
    signature: void test_parse_and_serialize(const std::string& instr, const std::string&
      outstr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_listen_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 2
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - test_listen_connect
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ipv4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:223,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:228,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:229,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:230,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:231,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:232,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:233,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:234,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:235,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 236
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::str2endpoint
    - test_parse_and_serialize
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ipv6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:239,1
    - Dst: test_listen_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:240,1
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:241,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:244,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:245,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:246,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:247,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:248,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:249,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:249,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:249,1
    - Dst: std::string::append
      Src: /src/brpc/test/endpoint_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:254,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:254,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/endpoint_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: snprintf
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 238
    functionDepth: 2
    functionLinenumber: 238
    functionLinenumberEnd: 260
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string
    - std::string::c_str
    - ::unlink
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - snprintf
    - std::string::append
    - test_listen_connect
    - butil::endpoint2str
    - ASSERT_LT
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, unix_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:264,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:265,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:268,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:274,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:276,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 284
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - ASSERT_EQ
    - butil::details::ExtendedEndPoint::is_extended
    - butil::str2endpoint
    - ASSERT_FALSE
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, original_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:288,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:289,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:289,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:292,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:293,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:298,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:299,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:300,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:308,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:309,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:309,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:314,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:317,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:317,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:318,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:323,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:324,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:325,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:328,1
    - Dst: str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:329,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:329,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:330,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:332,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 333
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ExtendedEndPoint*::_ref_count::load
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    - butil::EndPoint
    - butil::str2endpoint
    - ASSERT_FALSE
    - butil::EndPoint::EndPoint
    - ExtendedEndPoint*::family
    - str2endpoint
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, extended_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:340,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:341,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:344,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:346,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:347,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:350,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:351,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:352,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:353,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 355
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    - ASSERT_EQ
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:359,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:359,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:362,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:369,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:371,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:374,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:374,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:379,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:381,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:381,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:384,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 388
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - htons
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - memset
    - butil::endpoint2sockaddr
    - bzero
    - butil::sockaddr2endpoint
    - butil::get_endpoint_type
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_sockaddr_conv_ipv4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:395,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:402,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:404,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:408,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:409,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:414,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:416,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:416,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:419,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:419,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:420,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:422,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 390
    functionDepth: 1
    functionLinenumber: 390
    functionLinenumberEnd: 423
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - ASSERT_STREQ
    - htons
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - memset
    - butil::endpoint2sockaddr
    - bzero
    - butil::endpoint2str
    - butil::sockaddr2endpoint
    - butil::get_endpoint_type
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_sockaddr_conv_ipv6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:436,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:436,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:441,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:442,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:443,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:443,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:447,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 450
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - memset
    - butil::endpoint2sockaddr
    - butil::endpoint2str
    - butil::sockaddr2endpoint
    - butil::get_endpoint_type
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_sockaddr_conv_unix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:457,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:457,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:461,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:461,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:464,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:464,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:465,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 468
    functionName: concurrent_proc
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - std::string::c_str
    - butil::str2endpoint
    - butil::EndPoint::EndPoint
    - butil::endpoint2str
    - std::string::assign
    linkageType: ''
    returnType: void
    signature: void concurrent_proc(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:475,1
    - Dst: concurrent_proc
      Src: /src/brpc/test/endpoint_unittest.cpp:476,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:482,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 470
    functionDepth: 2
    functionLinenumber: 470
    functionLinenumberEnd: 484
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - concurrent_proc
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:489,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:491,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:492,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:492,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:495,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:498,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:499,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:510,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:510,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:511,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:512,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:514,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:516,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:522,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:522,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:523,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:524,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:525,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:527,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:533,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:533,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 488
    functionDepth: 1
    functionLinenumber: 488
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::pthread_timed_connect
    - ASSERT_EQ
    - endpoint2sockaddr
    - butil::tcp_connect
    - socket
    - butil::EndPoint::EndPoint
    - butil::milliseconds_from_now
    - ASSERT_LE
    - butil::hostname2endpoint
    - butil::is_blocking
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, tcp_connect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:541,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:545,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:545,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:546,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:547,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:551,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:552,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:554,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:556,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:557,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:566,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/endpoint_unittest.cpp:566,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 567
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 3
    functionsReached:
    - butil::pthread_timed_connect
    - ASSERT_EQ
    - endpoint2sockaddr
    - butil::is_connected
    - socket
    - butil::tcp_connect
    - butil::EndPoint::EndPoint
    - butil::cpuwide_time_ms
    - ASSERT_LE
    - butil::hostname2endpoint
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/endpoint_unittest.cpp:571,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 573
    functionName: ConnectThread
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterruptImpl
    linkageType: ''
    returnType: void
    signature: void * ConnectThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 575
    functionName: do_nothing_handler
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void do_nothing_handler(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/test/endpoint_unittest.cpp:578,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 579
    functionName: register_sigurg
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 1
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: void register_sigurg()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:584,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:584,1
    - Dst: usleep
      Src: /src/brpc/test/endpoint_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:590,1
    - Dst: pthread_kill
      Src: /src/brpc/test/endpoint_unittest.cpp:590,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:592,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 581
    functionDepth: 0
    functionLinenumber: 581
    functionLinenumberEnd: 593
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - usleep
    - pthread_create
    - pthread_kill
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: register_sigurg
      Src: /src/brpc/test/endpoint_unittest.cpp:596,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:597,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 595
    functionDepth: 1
    functionLinenumber: 595
    functionLinenumberEnd: 599
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterrupt
    - register_sigurg
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, interrupt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: ProtobufJsonTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ProtobufJsonTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: gettimeofday_us
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 50
    functionsReached:
    - gettimeofday
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:71,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:72,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:75,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:79,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:80,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:82,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:85,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:90,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:92,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 103
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - gettimeofday_us
    - ASSERT_STREQ
    - std::string::data
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:119,1
    - Dst: JsonContextBody::content_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:120,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:125,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:128,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:130,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:134,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:136,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 142
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_STREQ
    - std::string::data
    - json2pb::JsonToProtoMessage
    - JsonContextBody::content
    - JsonContextBody::content_size
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_base64_string_to_pb_types_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:152,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:153,1
    - Dst: AddressNoMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:156,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:157,1
    - Dst: AddressIntMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:158,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:159,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:160,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:161,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:164,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:165,1
    - Dst: AddressStringMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:166,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:167,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:168,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:169,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:172,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:173,1
    - Dst: AddressComplex::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:174,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:175,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:176,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:176,1
    - Dst: AddressIntMap::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:182,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:183,1
    - Dst: AddressIntMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:184,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:185,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:186,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:187,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 188
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressNoMap::addr
    - ASSERT_TRUE
    - ASSERT_EQ
    - AddressComplex::friends
    - AddressStringMap::addr
    - AddressStringMap::contacts
    - AddressIntMap::addr
    - AddressIntMap::numbers
    - json2pb::JsonToProtoMessage
    - AddressIntMap::Clear
    - AddressComplex::addr
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_map_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:198,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:198,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:202,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:202,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:204,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:207,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:209,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 214
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_STREQ
    - std::string::data
    - printf
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_encode_decode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:219,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:221,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:230,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:231,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:232,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:233,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:234,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:235,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:236,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:237,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:238,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:239,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:240,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:241,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:242,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:243,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:244,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:245,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:252,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:254,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:256,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:258,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:259,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:262,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:263,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:263,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:264,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:266,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:267,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:271,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:275,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:275,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 276
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - butil::IOBuf::IOBuf
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - Person*::set_datafloat
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_datasfix32
    - json2pb::ProtoMessageToJson
    - Person*::set_datau64
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    - json2pb::JsonToProtoMessage
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_unicode_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:284,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:289,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:292,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:296,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:298,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:299,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:301,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:304,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:307,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:308,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:310,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:311,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:312,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:313,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:316,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:319,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:320,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:322,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:323,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:324,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:325,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:328,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:332,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:334,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:335,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:336,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:337,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:341,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:344,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:345,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:347,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:348,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:350,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:358,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:362,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:363,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:363,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:371,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:375,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:376,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:376,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:384,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:388,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:389,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 391
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_STREQ
    - std::string::data
    - std::string::clear
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_edge_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:402,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:403,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:404,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:404,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:411,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:414,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:415,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:416,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:416,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:423,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:426,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:427,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:428,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:428,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:436,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:439,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:440,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:441,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:441,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:449,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:453,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:454,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:454,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:462,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:465,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:466,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:467,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:467,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:470,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:473,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:474,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:475,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:476,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:479,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:482,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:483,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:484,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:485,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:492,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:495,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:496,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:497,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 498
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - ASSERT_FALSE
    - std::string::clear
    - std::string::data
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_expected_failed_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:506,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:510,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:511,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:518,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:519,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:520,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:521,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:522,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:526,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:527,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:528,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:530,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:534,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:535,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:536,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 537
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:544,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:547,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:548,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:555,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:556,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:557,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:558,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:559,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:563,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:564,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:565,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:566,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:567,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:571,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:572,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:573,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 574
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_encode_decode_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:579,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:580,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:581,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:581,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:582,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:584,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:588,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:595,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:599,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:600,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:601,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:602,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:603,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:605,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 608
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - printf
    - std::ifstream::rdbuf
    - std::ifstream::close
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:613,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:614,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:615,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:617,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:621,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:627,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:630,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:631,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:632,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:633,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:634,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:637,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 639
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::stop
    - std::ifstream::close
    - butil::Timer::start
    - std::ifstream::rdbuf
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_to_string_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:644,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:646,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:647,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:648,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:650,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:651,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:652,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:654,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:655,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:656,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:657,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:658,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:659,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:660,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:661,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:662,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:663,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:664,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:665,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:666,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:667,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:668,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:674,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:676,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:676,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:678,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:679,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:681,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:682,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:685,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:692,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:694,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:700,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:703,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:705,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:707,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:709,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:712,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:719,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:721,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:727,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:730,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:732,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:735,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:737,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:740,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:747,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:749,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:755,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:758,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:768,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:769,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:770,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:772,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:775,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:776,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:777,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:778,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:781,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:788,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:790,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:796,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 802
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person::PhoneNumber*::set_type
    - gettimeofday_us
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - ASSERT_STREQ
    - Person*::set_datafloat
    - std::string::data
    - ProtoMessageToJson
    - Person::PhoneNumber*::set_number
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix32
    - std::string::clear
    - json2pb::ProtoMessageToJson
    - Person*::set_datau64
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:813,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:813,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:814,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:814,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:815,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:815,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:817,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:819,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:819,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:820,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:821,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:821,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:822,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:822,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:823,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:823,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:825,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:827,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:827,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:829,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:829,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:830,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:830,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:831,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:831,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:833,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:835,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:835,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:836,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:836,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:837,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:837,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:838,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:838,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 840
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 840
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - std::string::find
    - std::string::clear
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_map_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: JsonContextBodyEncDec::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:844,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:845,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:846,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:847,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:848,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:849,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:850,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:852,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:853,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:854,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:856,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:857,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:858,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:859,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:865,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:867,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:867,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:869,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:870,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:872,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:872,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:874,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:879,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:881,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:886,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:888,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:892,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:893,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:894,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:894,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:894,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:896,1
    - Dst: AddressBookEncDec::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:900,1
    - Dst: auto::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:901,1
    - Dst: auto::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:902,1
    - Dst: auto::mutable_json_body
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:903,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:907,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:909,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:909,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:913,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:913,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:915,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:922,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:924,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:931,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:936,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:936,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:938,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:944,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:946,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:952,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:955,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:960,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:961,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:963,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:963,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:963,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:970,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:971,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:976,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 50
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 842
    functionDepth: 1
    functionLinenumber: 842
    functionLinenumberEnd: 978
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonContextBodyEncDec::add_info
    - JsonContextBodyEncDec::set_judge
    - AddressBookEncDec::add_person
    - ExtEncDec*::set_enum_z045__z045_type
    - printf
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - auto::mutable_json_body
    - auto::set_name
    - ASSERT_STREQ
    - ProtoMessageToJson
    - ContentEncDec*::mutable__ext_z037_t_
    - std::string::data
    - google::protobuf::TextFormat::Printer::PrintToString
    - auto::set_id
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - ContentEncDec*::set_distance_info_
    - JsonContextBodyEncDec::set_type
    - json2pb::ProtoMessageToJson
    - JsonContextBodyEncDec::set_spur
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_TRUE
    - ExtEncDec*::set_aa_ge_z040_
    - ContentEncDec*::set_uid_z042_
    - json2pb::JsonToProtoMessage
    - JsonContextBodyEncDec::add_data_z058_array
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_encode_decode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:983,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:985,1
    - Dst: char::char
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:987,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:988,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:992,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:995,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:997,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:998,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:999,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1001,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1002,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1003,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1005,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1006,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1007,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1008,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1009,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1010,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1011,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1012,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1013,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1014,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1015,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1016,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1017,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1018,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1019,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1025,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1027,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1027,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1030,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1032,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1034,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1035,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1039,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1047,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1049,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1056,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1059,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1061,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1063,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1064,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1068,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1076,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1078,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1085,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1088,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1090,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1093,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1094,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1098,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1106,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1108,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1109,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1119
      start: 980
    functionDepth: 1
    functionLinenumber: 980
    functionLinenumberEnd: 1119
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person::PhoneNumber*::set_type
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - ProtoMessageToJson
    - Person*::set_datafloat
    - std::string::data
    - ASSERT_STREQ
    - Person::PhoneNumber*::set_number
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - memcpy
    - Person*::set_data32
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix32
    - std::string::clear
    - char::char
    - Person*::set_datau64
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_control_char_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1126,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1135,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1136,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1137,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1138,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1139,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1140,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1141,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1142,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1143,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1144,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1145,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1146,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1147,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1148,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1149,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1150,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1157,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1159,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1161,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1162,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1121
    functionDepth: 1
    functionLinenumber: 1121
    functionLinenumberEnd: 1167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - butil::IOBuf::to_string
    - Person*::set_id
    - butil::IOBuf::IOBuf
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - Person*::set_datafloat
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_datasfix32
    - json2pb::ProtoMessageToJson
    - Person*::set_datau64
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_unicode_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1175,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1177,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1178,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1180,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1181,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1183,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1184,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1186,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1187,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1192,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1192,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1197,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1198,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1199,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1199,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1202,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1204,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1169
    functionDepth: 1
    functionLinenumber: 1169
    functionLinenumberEnd: 1205
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Person*::add_phone
    - Person*::set_datafloat
    - std::string::clear
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - AddressBook::add_person
    - Person*::set_datadouble
    - std::string::empty
    - json2pb::JsonToProtoMessage
    - Person*::set_id
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_edge_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1212,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1214,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1215,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1217,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1218,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1219,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1219,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1221,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1222,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1224,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1225,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1227,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1228,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1229,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1229,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1231,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1232,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1234,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1235,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1236,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1238,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1239,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1240,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1241
      start: 1207
    functionDepth: 1
    functionLinenumber: 1207
    functionLinenumberEnd: 1241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - ASSERT_FALSE
    - std::string::data
    - Person*::set_name
    - AddressBook::add_person
    - Person*::set_email
    - AddressBook::clear_person
    - Person*::set_id
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_expected_failed_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1246,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1248,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1249,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1250,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1252,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1253,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1254,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1256,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1258,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1260,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1262,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1264,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1266,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1268,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1270,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1272,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1274,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1276,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1278,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1280,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1282,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1284,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1290,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1292,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1292,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1294,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1296,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1302,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1302,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1306,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1307,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1308,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1309,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1310,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1312,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1313,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1314,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1316,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1320,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1321,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1322,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1243
    functionDepth: 1
    functionLinenumber: 1243
    functionLinenumberEnd: 1323
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person::PhoneNumber*::set_type
    - butil::Timer::start
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - Person*::set_datafloat
    - std::string::data
    - Person::PhoneNumber*::set_number
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_email
    - butil::Timer::Timer
    - butil::Timer::u_elapsed
    - Person*::add_phone
    - Person*::set_datasfix32
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - Person*::set_datau64
    - ASSERT_TRUE
    - butil::Timer::stop
    - Person*::set_name
    - Person*::set_data
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: JsonContextBodyEncDec::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1327,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1328,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1329,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1330,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1331,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1332,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1333,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1335,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1336,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1337,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1339,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1340,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1341,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1342,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1348,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1350,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1350,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1352,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1352,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1354,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1355,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1357,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1365,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1366,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1367,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1368,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1369,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1371,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1372,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1373,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1375,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1379,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1380,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1381,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1325
    functionDepth: 1
    functionLinenumber: 1325
    functionLinenumberEnd: 1382
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonContextBodyEncDec::add_info
    - JsonContextBodyEncDec::set_judge
    - ExtEncDec*::set_enum_z045__z045_type
    - printf
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - butil::Timer::start
    - ContentEncDec*::mutable__ext_z037_t_
    - std::string::data
    - google::protobuf::TextFormat::Printer::PrintToString
    - butil::Timer::Timer
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - butil::Timer::u_elapsed
    - ContentEncDec*::set_distance_info_
    - JsonContextBodyEncDec::set_type
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - JsonContextBodyEncDec::set_spur
    - ASSERT_TRUE
    - ExtEncDec*::set_aa_ge_z040_
    - butil::Timer::stop
    - ContentEncDec*::set_uid_z042_
    - json2pb::JsonToProtoMessage
    - JsonContextBodyEncDec::add_data_z058_array
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_encode_decode_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1388,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1389,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1390,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1392,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1396,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1403,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1404,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1405,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1408,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1409,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1411,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1412,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1413,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1414,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1417,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1419
      start: 1384
    functionDepth: 1
    functionLinenumber: 1384
    functionLinenumberEnd: 1419
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonToProtoMessage
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - std::ifstream::close
    - butil::Timer::start
    - std::ifstream::rdbuf
    - printf
    - butil::IOBuf::IOBuf
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1424,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1425,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1426,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1428,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1432,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1440,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1441,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1445,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1447,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1448,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1449,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1450,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1453,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1454,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1421
    functionDepth: 1
    functionLinenumber: 1421
    functionLinenumberEnd: 1455
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonToProtoMessage
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - std::ifstream::close
    - butil::Timer::start
    - std::ifstream::rdbuf
    - printf
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_to_string_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1461,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1461,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1462,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1462,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1464,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1464,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1465,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1465,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1468,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1469,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1471,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1471,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1471,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1472,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1473,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1477,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1478,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1481,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1482,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1487,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1487,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1488,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1489,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1489,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1490,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1491
      start: 1457
    functionDepth: 1
    functionLinenumber: 1457
    functionLinenumberEnd: 1491
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - strcmp
    - json2pb::decode_name
    - json2pb::encode_name
    - ASSERT_FALSE
    - std::string::clear
    - std::string::data
    - std::string::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, encode_decode_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Person::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1495,1
    - Dst: Person::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1496,1
    - Dst: Person::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1497,1
    - Dst: Person::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1498,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1499,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1505
      start: 1493
    functionDepth: 1
    functionLinenumber: 1493
    functionLinenumberEnd: 1505
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Person::set_name
    - ASSERT_EQ
    - Person::set_datadouble
    - Person::set_id
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    - Person::set_datafloat
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_zero_copy_stream_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1508,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1512,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1512,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1513,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1514,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1515,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1516,1
    - Dst: Person::datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1517
      start: 1507
    functionDepth: 1
    functionLinenumber: 1507
    functionLinenumberEnd: 1517
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_STREQ
    - Person::name
    - Person::datadouble
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - Person::datafloat
    - Person::id
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, zero_copy_stream_to_json_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1522,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1522,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1523,1
    - Dst: Person::GetExtension
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1523,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1525,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1526,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1527
      start: 1519
    functionDepth: 1
    functionLinenumber: 1519
    functionLinenumberEnd: 1527
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_STREQ
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    - Person::GetExtension
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, extension_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1533,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1534,1
    - Dst: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1534,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1536,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1537,1
    - Dst: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1537,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1538
      start: 1529
    functionDepth: 1
    functionLinenumber: 1529
    functionLinenumberEnd: 1538
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - json2pb::JsonToProtoMessage
    - Person::data
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, string_to_int64)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1546,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1549,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1550,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1553,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1554,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1563,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1565,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1567,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1568,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1569,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1569,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1571,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1573,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1578,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1586,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1590,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1591,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1592,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1592,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1594,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1595,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1597,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1602,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1605
      start: 1540
    functionDepth: 1
    functionLinenumber: 1540
    functionLinenumberEnd: 1605
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - std::string::substr
    - ASSERT_EQ
    - Person::Clear
    - Person::ShortDebugString
    - ASSERT_FALSE
    - Person::name
    - butil::IOBuf::copy_to
    - std::string::empty
    - Person::datadouble
    - c_str
    - std::string::append
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - Person::id
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, parse_multiple_json)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1609,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1618,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1618,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1619,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1620,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1621,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1622,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1622,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1624,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1625,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1625,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1627,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1631,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1633,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1634,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1637,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1638,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1638,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1641
      start: 1607
    functionDepth: 1
    functionLinenumber: 1607
    functionLinenumberEnd: 1641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::string::c_str
    - Person::Clear
    - ASSERT_STREQ
    - ASSERT_FALSE
    - Person::name
    - Person::datadouble
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - Person::id
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, parse_multiple_json_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1650,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1650,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1651,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1653,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1654,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1655,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1657,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1657,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1658,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1659,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1663,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1663,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1665,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1666,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1667,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1668,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1668,1
    - Dst: AddressIntMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1670,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1671,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1672,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1674,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1674,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1676,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1677,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1678,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1678,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1679,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1679,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1684,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1685,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1686,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1687,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1688,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1689,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1689,1
    - Dst: AddressStringMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1691,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1692,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1693,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1695,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1696,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1697,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1698,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1699,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1700,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1700,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1701
      start: 1643
    functionDepth: 1
    functionLinenumber: 1643
    functionLinenumberEnd: 1701
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressIntMapStd::has_addr
    - ASSERT_TRUE
    - ASSERT_EQ
    - AddressStringMapStd::addr
    - AddressIntMapStd::numbers
    - AddressStringMapStd::contacts
    - json2pb::ProtoJsonToProtoMessage
    - ASSERT_FALSE
    - std::string::clear
    - AddressIntMapStd::Clear
    - AddressStringMapStd::Clear
    - AddressStringMapStd::has_addr
    - AddressIntMapStd::numbers_size
    - butil::IOBuf::append
    - AddressIntMapStd::addr
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, proto_json_to_pb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressIntMapStd::set_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1708,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1709,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1712,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1712,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1713,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1713,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1714,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1714,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1715,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1715,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1717,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1718,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1721,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1722,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1722,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1723,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1723,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1724,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1724,1
    - Dst: AddressStringMapStd::set_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1727,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1728,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1729,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1731,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1731,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1732,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1732,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1733,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1733,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1734,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1734,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1736,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1737,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1739,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1739,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1740,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1741,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1741,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1744
      start: 1703
    functionDepth: 1
    functionLinenumber: 1703
    functionLinenumberEnd: 1744
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - AddressStringMapStd::set_addr
    - std::string::find
    - AddressIntMapStd::set_addr
    - butil::IOBuf::to_string
    - AddressIntMapStd::mutable_numbers
    - AddressStringMapStd::mutable_contacts
    - butil::IOBuf::append
    - ASSERT_NE
    - butil::IOBuf::IOBuf
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_proto_json)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: ProtobufJsonTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ProtobufJsonTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: gettimeofday_us
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 52
    functionsReached:
    - gettimeofday
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:71,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:72,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:75,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:79,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:80,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:82,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:85,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:90,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:92,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 103
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - gettimeofday_us
    - ASSERT_STREQ
    - std::string::data
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:119,1
    - Dst: JsonContextBody::content_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:120,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:125,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:128,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:130,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:134,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:136,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 142
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_STREQ
    - std::string::data
    - json2pb::JsonToProtoMessage
    - JsonContextBody::content
    - JsonContextBody::content_size
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_base64_string_to_pb_types_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:152,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:153,1
    - Dst: AddressNoMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:156,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:157,1
    - Dst: AddressIntMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:158,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:159,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:160,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:161,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:164,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:165,1
    - Dst: AddressStringMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:166,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:167,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:168,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:169,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:172,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:173,1
    - Dst: AddressComplex::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:174,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:175,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:176,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:176,1
    - Dst: AddressIntMap::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:181,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:182,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:183,1
    - Dst: AddressIntMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:184,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:185,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:186,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:187,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 188
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressNoMap::addr
    - ASSERT_TRUE
    - ASSERT_EQ
    - AddressComplex::friends
    - AddressStringMap::addr
    - AddressStringMap::contacts
    - AddressIntMap::addr
    - AddressIntMap::numbers
    - json2pb::JsonToProtoMessage
    - AddressIntMap::Clear
    - AddressComplex::addr
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_map_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:198,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:198,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:202,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:202,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:204,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:207,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:209,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 214
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_STREQ
    - std::string::data
    - printf
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_encode_decode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:219,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:221,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:230,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:231,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:232,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:233,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:234,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:235,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:236,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:237,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:238,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:239,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:240,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:241,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:242,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:243,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:244,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:245,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:252,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:254,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:256,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:258,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:259,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:262,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:263,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:263,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:264,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:266,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:267,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:271,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:275,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:275,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 276
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - butil::IOBuf::IOBuf
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - Person*::set_datafloat
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_datasfix32
    - json2pb::ProtoMessageToJson
    - Person*::set_datau64
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    - json2pb::JsonToProtoMessage
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_unicode_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:284,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:288,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:289,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:292,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:296,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:298,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:299,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:301,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:304,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:307,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:308,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:310,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:311,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:312,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:313,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:316,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:319,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:320,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:322,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:323,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:324,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:325,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:328,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:332,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:334,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:335,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:336,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:337,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:341,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:344,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:345,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:347,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:348,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:350,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:358,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:362,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:363,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:363,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:371,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:375,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:376,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:376,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:384,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:388,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:389,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 391
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_STREQ
    - std::string::data
    - std::string::clear
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_edge_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:402,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:403,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:404,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:404,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:411,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:414,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:415,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:416,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:416,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:423,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:426,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:427,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:428,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:428,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:436,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:439,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:440,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:441,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:441,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:449,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:453,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:454,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:454,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:462,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:465,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:466,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:467,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:467,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:470,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:473,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:474,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:475,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:476,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:479,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:482,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:483,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:484,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:485,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:492,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:495,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:496,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:497,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 498
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - ASSERT_FALSE
    - std::string::clear
    - std::string::data
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_expected_failed_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:506,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:510,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:511,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:518,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:519,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:520,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:521,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:522,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:526,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:527,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:528,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:530,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:534,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:535,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:536,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 537
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:544,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:547,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:548,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:555,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:556,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:557,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:558,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:559,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:563,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:564,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:565,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:566,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:567,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:571,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:572,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:573,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 574
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_encode_decode_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:579,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:580,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:581,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:581,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:582,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:584,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:588,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:595,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:599,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:600,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:601,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:602,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:603,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:605,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 608
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::stop
    - butil::Timer::start
    - printf
    - std::ifstream::rdbuf
    - std::ifstream::close
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:613,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:614,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:615,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:617,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:621,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:627,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:630,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:631,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:632,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:633,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:634,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:637,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 639
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::stop
    - std::ifstream::close
    - butil::Timer::start
    - std::ifstream::rdbuf
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_to_string_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:644,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:646,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:647,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:648,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:650,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:651,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:652,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:654,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:655,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:656,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:657,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:658,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:659,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:660,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:661,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:662,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:663,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:664,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:665,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:666,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:667,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:668,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:674,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:676,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:676,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:678,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:679,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:681,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:682,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:685,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:692,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:694,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:700,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:703,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:705,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:707,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:709,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:712,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:719,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:721,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:727,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:730,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:732,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:735,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:737,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:740,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:747,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:749,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:755,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:758,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:768,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:769,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:770,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:772,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:775,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:776,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:777,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:778,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:781,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:788,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:790,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:796,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 802
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person::PhoneNumber*::set_type
    - gettimeofday_us
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - ASSERT_STREQ
    - Person*::set_datafloat
    - std::string::data
    - ProtoMessageToJson
    - Person::PhoneNumber*::set_number
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix32
    - std::string::clear
    - json2pb::ProtoMessageToJson
    - Person*::set_datau64
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:813,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:813,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:814,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:814,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:815,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:815,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:817,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:819,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:819,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:820,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:821,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:821,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:822,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:822,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:823,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:823,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:825,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:827,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:827,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:829,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:829,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:830,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:830,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:831,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:831,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:833,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:835,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:835,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:836,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:836,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:837,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:837,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:838,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:838,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 840
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 840
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - std::string::find
    - std::string::clear
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_map_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: JsonContextBodyEncDec::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:844,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:845,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:846,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:847,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:848,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:849,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:850,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:852,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:853,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:854,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:856,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:857,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:858,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:859,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:865,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:867,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:867,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:869,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:870,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:872,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:872,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:874,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:879,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:881,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:886,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:888,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:892,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:893,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:894,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:894,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:894,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:896,1
    - Dst: AddressBookEncDec::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:900,1
    - Dst: auto::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:901,1
    - Dst: auto::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:902,1
    - Dst: auto::mutable_json_body
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:903,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:907,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:909,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:909,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:913,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:913,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:915,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:922,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:924,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:931,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:936,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:936,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:938,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:944,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:946,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:952,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:955,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:960,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:961,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:963,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:963,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:963,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:970,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:971,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:976,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 50
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 842
    functionDepth: 1
    functionLinenumber: 842
    functionLinenumberEnd: 978
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonContextBodyEncDec::add_info
    - JsonContextBodyEncDec::set_judge
    - AddressBookEncDec::add_person
    - ExtEncDec*::set_enum_z045__z045_type
    - printf
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - auto::mutable_json_body
    - auto::set_name
    - ASSERT_STREQ
    - ProtoMessageToJson
    - ContentEncDec*::mutable__ext_z037_t_
    - std::string::data
    - google::protobuf::TextFormat::Printer::PrintToString
    - auto::set_id
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - ContentEncDec*::set_distance_info_
    - JsonContextBodyEncDec::set_type
    - json2pb::ProtoMessageToJson
    - JsonContextBodyEncDec::set_spur
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_TRUE
    - ExtEncDec*::set_aa_ge_z040_
    - ContentEncDec*::set_uid_z042_
    - json2pb::JsonToProtoMessage
    - JsonContextBodyEncDec::add_data_z058_array
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_encode_decode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:983,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:985,1
    - Dst: char::char
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:987,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:988,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:992,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:995,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:997,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:998,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:999,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1001,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1002,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1003,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1005,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1006,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1007,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1008,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1009,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1010,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1011,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1012,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1013,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1014,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1015,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1016,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1017,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1018,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1019,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1025,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1027,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1027,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1030,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1032,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1034,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1035,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1039,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1047,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1049,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1056,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1059,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1061,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1063,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1064,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1068,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1076,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1078,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1085,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1088,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1090,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1093,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1094,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1098,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1106,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1108,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1109,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1119
      start: 980
    functionDepth: 1
    functionLinenumber: 980
    functionLinenumberEnd: 1119
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person::PhoneNumber*::set_type
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - ProtoMessageToJson
    - Person*::set_datafloat
    - std::string::data
    - ASSERT_STREQ
    - Person::PhoneNumber*::set_number
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - memcpy
    - Person*::set_data32
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix32
    - std::string::clear
    - char::char
    - Person*::set_datau64
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_control_char_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1126,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1135,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1136,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1137,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1138,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1139,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1140,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1141,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1142,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1143,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1144,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1145,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1146,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1147,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1148,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1149,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1150,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1157,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1159,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1161,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1162,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1165,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1121
    functionDepth: 1
    functionLinenumber: 1121
    functionLinenumberEnd: 1167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - butil::IOBuf::to_string
    - Person*::set_id
    - butil::IOBuf::IOBuf
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - Person*::set_datafloat
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_datasfix32
    - json2pb::ProtoMessageToJson
    - Person*::set_datau64
    - ASSERT_TRUE
    - Person*::set_name
    - Person*::set_data
    - std::string::compare
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_unicode_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1175,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1177,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1178,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1180,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1181,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1183,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1184,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1186,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1187,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1192,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1192,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1197,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1198,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1199,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1199,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1202,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1204,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1169
    functionDepth: 1
    functionLinenumber: 1169
    functionLinenumberEnd: 1205
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Person*::add_phone
    - Person*::set_datafloat
    - std::string::clear
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - AddressBook::add_person
    - Person*::set_datadouble
    - std::string::empty
    - json2pb::JsonToProtoMessage
    - Person*::set_id
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_edge_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1212,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1214,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1215,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1217,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1218,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1219,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1219,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1221,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1222,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1224,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1225,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1227,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1228,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1229,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1229,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1231,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1232,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1234,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1235,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1236,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1238,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1239,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1240,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1241
      start: 1207
    functionDepth: 1
    functionLinenumber: 1207
    functionLinenumberEnd: 1241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_STREQ
    - ASSERT_FALSE
    - std::string::data
    - Person*::set_name
    - AddressBook::add_person
    - Person*::set_email
    - AddressBook::clear_person
    - Person*::set_id
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_expected_failed_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1246,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1248,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1249,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1250,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1252,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1253,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1254,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1256,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1258,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1260,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1262,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1264,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1266,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1268,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1270,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1272,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1274,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1276,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1278,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1280,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1282,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1284,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1290,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1292,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1292,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1294,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1296,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1302,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1302,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1306,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1307,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1308,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1309,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1310,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1312,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1313,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1314,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1316,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1320,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1321,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1322,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1243
    functionDepth: 1
    functionLinenumber: 1243
    functionLinenumberEnd: 1323
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_databool
    - Person*::set_datafix32
    - Person*::set_datadouble
    - Person*::set_datadouble_scientific
    - Person*::set_datau32
    - printf
    - Person*::set_id
    - Person*::set_datafix64
    - Person*::set_datasfix64
    - Person*::set_databyte
    - Person::PhoneNumber*::set_type
    - butil::Timer::start
    - Person*::set_data64
    - Person*::set_datafloat_scientific
    - Person*::set_datafloat
    - std::string::data
    - Person::PhoneNumber*::set_number
    - AddressBook::add_person
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_data32
    - Person*::set_email
    - butil::Timer::Timer
    - butil::Timer::u_elapsed
    - Person*::add_phone
    - Person*::set_datasfix32
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - Person*::set_datau64
    - ASSERT_TRUE
    - butil::Timer::stop
    - Person*::set_name
    - Person*::set_data
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: JsonContextBodyEncDec::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1327,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1328,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1329,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1330,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1331,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1332,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1333,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1335,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1336,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1337,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1339,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1340,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1341,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1342,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1348,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1350,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1350,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1352,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1352,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1354,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1355,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1357,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1365,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1366,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1367,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1368,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1369,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1371,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1372,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1373,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1375,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1379,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1380,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1381,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1325
    functionDepth: 1
    functionLinenumber: 1325
    functionLinenumberEnd: 1382
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonContextBodyEncDec::add_info
    - JsonContextBodyEncDec::set_judge
    - ExtEncDec*::set_enum_z045__z045_type
    - printf
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - butil::Timer::start
    - ContentEncDec*::mutable__ext_z037_t_
    - std::string::data
    - google::protobuf::TextFormat::Printer::PrintToString
    - butil::Timer::Timer
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - butil::Timer::u_elapsed
    - ContentEncDec*::set_distance_info_
    - JsonContextBodyEncDec::set_type
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - JsonContextBodyEncDec::set_spur
    - ASSERT_TRUE
    - ExtEncDec*::set_aa_ge_z040_
    - butil::Timer::stop
    - ContentEncDec*::set_uid_z042_
    - json2pb::JsonToProtoMessage
    - JsonContextBodyEncDec::add_data_z058_array
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_encode_decode_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1388,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1389,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1390,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1392,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1396,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1403,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1404,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1405,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1408,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1409,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1411,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1412,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1413,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1414,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1417,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1419
      start: 1384
    functionDepth: 1
    functionLinenumber: 1384
    functionLinenumberEnd: 1419
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonToProtoMessage
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - std::ifstream::close
    - butil::Timer::start
    - std::ifstream::rdbuf
    - printf
    - butil::IOBuf::IOBuf
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::rdbuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1424,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1425,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1426,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1428,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1432,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1440,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1441,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1445,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1447,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1448,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1449,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1450,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1453,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1454,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1421
    functionDepth: 1
    functionLinenumber: 1421
    functionLinenumberEnd: 1455
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonToProtoMessage
    - std::ostringstream::str
    - ASSERT_TRUE
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - std::ifstream::close
    - butil::Timer::start
    - std::ifstream::rdbuf
    - printf
    - ProfilerStart
    - json2pb::ProtoMessageToJson
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_to_string_complex_perf_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1461,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1461,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1462,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1462,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1464,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1464,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1465,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1465,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1468,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1469,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1471,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1471,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1471,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1472,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1473,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1477,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1478,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1481,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1482,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1487,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1487,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1488,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1489,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1489,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1490,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1491
      start: 1457
    functionDepth: 1
    functionLinenumber: 1457
    functionLinenumberEnd: 1491
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - strcmp
    - json2pb::decode_name
    - json2pb::encode_name
    - ASSERT_FALSE
    - std::string::clear
    - std::string::data
    - std::string::empty
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, encode_decode_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Person::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1495,1
    - Dst: Person::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1496,1
    - Dst: Person::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1497,1
    - Dst: Person::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1498,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1499,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1505
      start: 1493
    functionDepth: 1
    functionLinenumber: 1493
    functionLinenumberEnd: 1505
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Person::set_name
    - ASSERT_EQ
    - Person::set_datadouble
    - Person::set_id
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    - Person::set_datafloat
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_zero_copy_stream_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1508,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1512,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1512,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1513,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1514,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1515,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1516,1
    - Dst: Person::datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1517
      start: 1507
    functionDepth: 1
    functionLinenumber: 1507
    functionLinenumberEnd: 1517
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_STREQ
    - Person::name
    - Person::datadouble
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - Person::datafloat
    - Person::id
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, zero_copy_stream_to_json_normal_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1522,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1522,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1523,1
    - Dst: Person::GetExtension
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1523,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1525,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1526,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1527
      start: 1519
    functionDepth: 1
    functionLinenumber: 1519
    functionLinenumberEnd: 1527
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_STREQ
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    - Person::GetExtension
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, extension_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1533,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1534,1
    - Dst: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1534,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1536,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1537,1
    - Dst: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1537,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1538
      start: 1529
    functionDepth: 1
    functionLinenumber: 1529
    functionLinenumberEnd: 1538
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - json2pb::JsonToProtoMessage
    - Person::data
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, string_to_int64)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1546,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1549,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1550,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1553,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1554,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1563,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1565,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1567,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1568,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1569,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1569,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1571,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1573,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1578,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1586,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1590,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1591,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1592,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1592,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1594,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1595,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1597,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1602,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1605
      start: 1540
    functionDepth: 1
    functionLinenumber: 1540
    functionLinenumberEnd: 1605
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - std::string::substr
    - ASSERT_EQ
    - Person::Clear
    - Person::ShortDebugString
    - ASSERT_FALSE
    - Person::name
    - butil::IOBuf::copy_to
    - std::string::empty
    - Person::datadouble
    - c_str
    - std::string::append
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - Person::id
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, parse_multiple_json)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1609,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1618,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1618,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1619,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1620,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1621,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1622,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1622,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1624,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1625,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1625,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1627,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1631,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1633,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1634,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1637,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1638,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1638,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1641
      start: 1607
    functionDepth: 1
    functionLinenumber: 1607
    functionLinenumberEnd: 1641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::string::c_str
    - Person::Clear
    - ASSERT_STREQ
    - ASSERT_FALSE
    - Person::name
    - Person::datadouble
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - butil::IOBuf::IOBuf
    - Person::id
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, parse_multiple_json_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1650,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1650,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1651,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1653,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1654,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1655,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1657,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1657,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1658,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1659,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1663,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1663,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1665,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1666,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1667,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1668,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1668,1
    - Dst: AddressIntMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1670,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1671,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1672,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1674,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1674,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1676,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1677,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1678,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1678,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1679,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1679,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1684,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1684,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1685,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1686,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1687,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1688,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1689,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1689,1
    - Dst: AddressStringMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1691,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1692,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1693,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1695,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1696,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1697,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1698,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1699,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1700,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1700,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1701
      start: 1643
    functionDepth: 1
    functionLinenumber: 1643
    functionLinenumberEnd: 1701
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressIntMapStd::has_addr
    - ASSERT_TRUE
    - ASSERT_EQ
    - AddressStringMapStd::addr
    - AddressIntMapStd::numbers
    - AddressStringMapStd::contacts
    - json2pb::ProtoJsonToProtoMessage
    - ASSERT_FALSE
    - std::string::clear
    - AddressIntMapStd::Clear
    - AddressStringMapStd::Clear
    - AddressStringMapStd::has_addr
    - AddressIntMapStd::numbers_size
    - butil::IOBuf::append
    - AddressIntMapStd::addr
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, proto_json_to_pb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddressIntMapStd::set_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1708,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1709,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1712,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1712,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1713,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1713,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1714,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1714,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1715,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1715,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1717,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1718,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1721,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1722,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1722,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1723,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1723,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1724,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1724,1
    - Dst: AddressStringMapStd::set_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1727,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1728,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1729,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1731,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1731,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1732,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1732,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1733,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1733,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1734,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1734,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1736,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1737,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1739,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1739,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1740,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1741,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1741,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1744
      start: 1703
    functionDepth: 1
    functionLinenumber: 1703
    functionLinenumberEnd: 1744
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - AddressStringMapStd::set_addr
    - std::string::find
    - AddressIntMapStd::set_addr
    - butil::IOBuf::to_string
    - AddressIntMapStd::mutable_numbers
    - AddressStringMapStd::mutable_contacts
    - butil::IOBuf::append
    - ASSERT_NE
    - butil::IOBuf::IOBuf
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_proto_json)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Dequeue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:14,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mpsc_queue_unittest.cc:15,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/mpsc_queue_unittest.cc:16,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/test/mpsc_queue_unittest.cc:17,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:20,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - ' q'
    - allow_empty
    argTypes:
    - butil::MPSCQueue<uint>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 9
    functionDepth: 1
    functionLinenumber: 9
    functionLinenumberEnd: 25
    functionName: Consume
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 4
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bthread::TaskGroup::usleep
    - Dequeue
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void Consume(butil::MPSCQueue<uint>& q, bool allow_empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::Enqueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:30,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 33
    functionName: ProduceThread
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - auto::Enqueue
    linkageType: ''
    returnType: void
    signature: void * ProduceThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Consume
      Src: /src/brpc/test/mpsc_queue_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: ConsumeThread1
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - Consume
    linkageType: ''
    returnType: void
    signature: void * ConsumeThread1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:42,1
    - Dst: butil::MPSCQueue::Enqueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:44,1
    - Dst: Consume
      Src: /src/brpc/test/mpsc_queue_unittest.cc:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 2
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - butil::MPSCQueue::Enqueue
    - Consume
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, spsc_single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:52,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:54,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:54,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:56,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, spsc_multi_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/mpsc_queue_unittest.cc:65,1
    - Dst: auto::Enqueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:69,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 72
    functionName: MultiProduceThread
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - fetch_add
    - auto::Enqueue
    linkageType: ''
    returnType: void
    signature: void * MultiProduceThread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Dequeue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:81,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/mpsc_queue_unittest.cc:82,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/test/mpsc_queue_unittest.cc:83,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/mpsc_queue_unittest.cc:86,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/mpsc_queue_unittest.cc:88,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/mpsc_queue_unittest.cc:89,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' q'
    argTypes:
    - butil::MPSCQueue<uint>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 96
    functionName: Consume2
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::usleep
    - ASSERT_FALSE
    - Dequeue
    - BAIDU_SCOPED_LOCK
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void Consume2(butil::MPSCQueue<uint>& q)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Consume2
      Src: /src/brpc/test/mpsc_queue_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 102
    functionName: ConsumeThread2
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - Consume2
    linkageType: ''
    returnType: void
    signature: void * ConsumeThread2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:110,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:114,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:114,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:117,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:119,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 121
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, mpsc_multi_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ObjectPoolAllocator::Alloc
      Src: /src/brpc/test/mpsc_queue_unittest.cc:128,1
    - Dst: butil::describe_objects<butil::MPSCQueueNode<MyObject>>
      Src: /src/brpc/test/mpsc_queue_unittest.cc:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:130,1
    - Dst: butil::ObjectPoolAllocator::Free
      Src: /src/brpc/test/mpsc_queue_unittest.cc:132,1
    - Dst: butil::describe_objects<butil::MPSCQueueNode<MyObject>>
      Src: /src/brpc/test/mpsc_queue_unittest.cc:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:134,1
    - Dst: butil::ObjectPoolAllocator::Alloc
      Src: /src/brpc/test/mpsc_queue_unittest.cc:136,1
    - Dst: butil::describe_objects<butil::MPSCQueueNode<MyObject>>
      Src: /src/brpc/test/mpsc_queue_unittest.cc:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 139
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::ObjectPoolAllocator::Free
    - butil::ObjectPoolAllocator::Alloc
    - butil::describe_objects<butil::MPSCQueueNode<MyObject>>
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, mpsc_test_allocator)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Dequeue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:14,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/mpsc_queue_unittest.cc:15,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/mpsc_queue_unittest.cc:16,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/test/mpsc_queue_unittest.cc:17,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:20,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - ' q'
    - allow_empty
    argTypes:
    - butil::MPSCQueue<uint>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 9
    functionDepth: 1
    functionLinenumber: 9
    functionLinenumberEnd: 25
    functionName: Consume
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 6
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - bthread::TaskGroup::usleep
    - Dequeue
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void Consume(butil::MPSCQueue<uint>& q, bool allow_empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::Enqueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:30,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 33
    functionName: ProduceThread
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - auto::Enqueue
    linkageType: ''
    returnType: void
    signature: void * ProduceThread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Consume
      Src: /src/brpc/test/mpsc_queue_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: ConsumeThread1
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - Consume
    linkageType: ''
    returnType: void
    signature: void * ConsumeThread1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:42,1
    - Dst: butil::MPSCQueue::Enqueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:44,1
    - Dst: Consume
      Src: /src/brpc/test/mpsc_queue_unittest.cc:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 2
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - butil::MPSCQueue::Enqueue
    - Consume
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, spsc_single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:52,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:54,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:54,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:56,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, spsc_multi_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/mpsc_queue_unittest.cc:65,1
    - Dst: auto::Enqueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:69,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 72
    functionName: MultiProduceThread
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - fetch_add
    - auto::Enqueue
    linkageType: ''
    returnType: void
    signature: void * MultiProduceThread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Dequeue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:81,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/mpsc_queue_unittest.cc:82,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/test/mpsc_queue_unittest.cc:83,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/mpsc_queue_unittest.cc:86,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/mpsc_queue_unittest.cc:88,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/mpsc_queue_unittest.cc:89,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' q'
    argTypes:
    - butil::MPSCQueue<uint>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 96
    functionName: Consume2
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::usleep
    - ASSERT_FALSE
    - Dequeue
    - BAIDU_SCOPED_LOCK
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void Consume2(butil::MPSCQueue<uint>& q)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Consume2
      Src: /src/brpc/test/mpsc_queue_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 102
    functionName: ConsumeThread2
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - Consume2
    linkageType: ''
    returnType: void
    signature: void * ConsumeThread2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/test/mpsc_queue_unittest.cc:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:110,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:114,1
    - Dst: pthread_create
      Src: /src/brpc/test/mpsc_queue_unittest.cc:114,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:117,1
    - Dst: pthread_join
      Src: /src/brpc/test/mpsc_queue_unittest.cc:119,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 121
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, mpsc_multi_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ObjectPoolAllocator::Alloc
      Src: /src/brpc/test/mpsc_queue_unittest.cc:128,1
    - Dst: butil::describe_objects<butil::MPSCQueueNode<MyObject>>
      Src: /src/brpc/test/mpsc_queue_unittest.cc:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:130,1
    - Dst: butil::ObjectPoolAllocator::Free
      Src: /src/brpc/test/mpsc_queue_unittest.cc:132,1
    - Dst: butil::describe_objects<butil::MPSCQueueNode<MyObject>>
      Src: /src/brpc/test/mpsc_queue_unittest.cc:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:134,1
    - Dst: butil::ObjectPoolAllocator::Alloc
      Src: /src/brpc/test/mpsc_queue_unittest.cc:136,1
    - Dst: butil::describe_objects<butil::MPSCQueueNode<MyObject>>
      Src: /src/brpc/test/mpsc_queue_unittest.cc:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/mpsc_queue_unittest.cc:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 139
    functionName: TEST
    functionSourceFile: /src/brpc/test/mpsc_queue_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::ObjectPoolAllocator::Free
    - butil::ObjectPoolAllocator::Alloc
    - butil::describe_objects<butil::MPSCQueueNode<MyObject>>
    linkageType: ''
    returnType: void
    signature: void TEST(MPSCQueueTest, mpsc_test_allocator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:22,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:22,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:26,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:27,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:27,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:31,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:32,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:35,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:36,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:36,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:39,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:43,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:45,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:47,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:58,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:58,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:59,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:60,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:60,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:64,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:67,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:67,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:70,1
    - Dst: butil::find
      Src: /src/brpc/test/small_map_unittest.cc:70,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:70,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:71,1
    - Dst: butil::find
      Src: /src/brpc/test/small_map_unittest.cc:71,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 72
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::end
    - SmallMap::begin
    - SmallMap::empty
    - butil::find
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, General)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:83,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 92
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::begin
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, PostFixIteratorIncrement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:100,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:107,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:108,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:115,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:116,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:119,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:120,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:134,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:134,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:135,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:136,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, CopyConstructor)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/test/small_map_unittest.cc:144,1
    - Dst: end
      Src: /src/brpc/test/small_map_unittest.cc:144,1
    - Dst: butil::find
      Src: /src/brpc/test/small_map_unittest.cc:145,1
    - Dst: end
      Src: /src/brpc/test/small_map_unittest.cc:146,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - SmallMap<inner>
    - SmallMap<inner>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 150
    functionName: butil::SmallMapIsSubset
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - end
    - butil::find
    - begin
    linkageType: ''
    returnType: bool
    signature: "bool SmallMapIsSubset(SmallMap<inner> const& a,\n                             SmallMap<inner>
      const& b)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SmallMapIsSubset
      Src: /src/brpc/test/small_map_unittest.cc:155,1
    - Dst: butil::SmallMapIsSubset
      Src: /src/brpc/test/small_map_unittest.cc:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - SmallMap<inner>
    - SmallMap<inner>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: butil::SmallMapEqual
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SmallMapIsSubset
    linkageType: ''
    returnType: bool
    signature: "bool SmallMapEqual(SmallMap<inner> const& a,\n                          SmallMap<inner>
      const& b)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:165,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:173,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:173,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:178,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:179,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:179,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:180,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:184,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:185,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:185,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:190,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:191,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:191,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:195,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:196,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:196,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:197,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:201,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 202
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::UsingFullMap
    - butil::SmallMapEqual
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, AssignmentOperator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VLOG
      Src: /src/brpc/test/small_map_unittest.cc:209,1
    - Dst: SmallMap::insert
      Src: /src/brpc/test/small_map_unittest.cc:213,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:213,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:214,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:215,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:217,1
    - Dst: SmallMap::insert
      Src: /src/brpc/test/small_map_unittest.cc:221,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:222,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:223,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:225,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:229,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:230,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:234,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:234,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/small_map_unittest.cc:234,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:235,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:235,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 237
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::end
    - static_cast<size_t>
    - SmallMap::find
    - EXPECT_EQ
    - SmallMap::empty
    - std::make_pair
    - EXPECT_FALSE
    - VLOG
    - SmallMap::insert
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, Insert)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VLOG
      Src: /src/brpc/test/small_map_unittest.cc:242,1
    - Dst: hash_map::insert
      Src: /src/brpc/test/small_map_unittest.cc:245,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:245,1
    - Dst: SmallMap::insert
      Src: /src/brpc/test/small_map_unittest.cc:249,1
    - Dst: hash_map::begin
      Src: /src/brpc/test/small_map_unittest.cc:249,1
    - Dst: hash_map::end
      Src: /src/brpc/test/small_map_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:250,1
    - Dst: hash_map::size
      Src: /src/brpc/test/small_map_unittest.cc:250,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:250,1
    - Dst: VLOG
      Src: /src/brpc/test/small_map_unittest.cc:252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:253,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:253,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:254,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:255,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:255,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 258
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::end
    - hash_map::size
    - EXPECT_EQ
    - hash_map::end
    - SmallMap::find
    - hash_map::begin
    - std::make_pair
    - VLOG
    - SmallMap::insert
    - hash_map::insert
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, InsertRange)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:268,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:271,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:271,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:272,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:272,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:275,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:277,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:279,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:283,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:285,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:287,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:289,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:293,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:294,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:294,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:297,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:301,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:303,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:305,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:309,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:309,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:310,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:310,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:311,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:311,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:314,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:316,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:317,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:318,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:318,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:319,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:319,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:320,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:320,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:322,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:322,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:323,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:324,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:325,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:326,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:326,1
    - Dst: SmallMap::clear
      Src: /src/brpc/test/small_map_unittest.cc:328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:329,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:329,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:330,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:330,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:331,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 332
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::end
    - SmallMap::begin
    - SmallMap::clear
    - SmallMap::empty
    - SmallMap::erase
    - EXPECT_FALSE
    - EXPECT_EQ
    - SmallMap::count
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, Erase)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:336,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:341,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:343,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:344,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:344,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:345,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:345,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:349,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:350,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:353,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:353,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:354,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:355,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:357,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:357,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:359,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:361,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:367,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:368,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:370,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:371,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:372,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:372,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:373,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:374,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:374,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:377,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:378,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:381,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:381,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:382,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:385,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:385,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:386,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:389,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:390,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:391,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:393,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:393,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:394,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:395,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:397,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:397,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:399,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:399,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:400,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:401,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 334
    functionDepth: 1
    functionLinenumber: 334
    functionLinenumberEnd: 402
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::end
    - SmallMap::begin
    - SmallMap::empty
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, NonHashMap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:408,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:408,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:410,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 411
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - SmallMap::size
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, DefaultEqualKeyWorks)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 417
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/small_map_unittest.cc:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' item'
    argTypes:
    - std::pair<int, int>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - insert
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item(const std::pair<int, int>& item)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 426
    functionName: butil::InitMap
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void InitMap(ManualConstructor<hash_map_add_item>* map_ctor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - item_to_add
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 431
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer(int item_to_add)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 433
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 436
    functionName: operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 417
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/small_map_unittest.cc:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' item'
    argTypes:
    - std::pair<int, int>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - insert
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item(const std::pair<int, int>& item)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 426
    functionName: butil::InitMap
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void InitMap(ManualConstructor<hash_map_add_item>* map_ctor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - item_to_add
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 431
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer(int item_to_add)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 433
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 436
    functionName: operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:447,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:447,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:454,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:455,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:458,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:458,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:460,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 443
    functionDepth: 1
    functionLinenumber: 443
    functionLinenumberEnd: 461
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_EQ
    - SmallMap::count
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, SubclassInitializationWithFunctionPointer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_map_add_item_initializer
      Src: /src/brpc/test/small_map_unittest.cc:465,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:467,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:467,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:474,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:474,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:475,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:475,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:478,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:480,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 463
    functionDepth: 1
    functionLinenumber: 463
    functionLinenumberEnd: 481
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_EQ
    - hash_map_add_item_initializer
    - SmallMap::count
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, SubclassInitializationWithFunctionObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:22,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:22,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:26,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:26,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:27,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:27,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:31,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:32,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:32,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:35,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:36,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:36,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:39,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:43,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:44,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:45,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:47,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:58,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:58,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:59,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:60,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:60,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:64,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:64,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:67,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:67,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:70,1
    - Dst: butil::find
      Src: /src/brpc/test/small_map_unittest.cc:70,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:70,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:71,1
    - Dst: butil::find
      Src: /src/brpc/test/small_map_unittest.cc:71,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 72
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::end
    - SmallMap::begin
    - SmallMap::empty
    - butil::find
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, General)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:83,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:87,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 92
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::begin
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, PostFixIteratorIncrement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:100,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:100,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:107,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:108,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:115,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:116,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:119,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:120,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:134,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:134,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:135,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:136,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, CopyConstructor)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/test/small_map_unittest.cc:144,1
    - Dst: end
      Src: /src/brpc/test/small_map_unittest.cc:144,1
    - Dst: butil::find
      Src: /src/brpc/test/small_map_unittest.cc:145,1
    - Dst: end
      Src: /src/brpc/test/small_map_unittest.cc:146,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - SmallMap<inner>
    - SmallMap<inner>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 150
    functionName: butil::SmallMapIsSubset
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 1
    functionsReached:
    - end
    - butil::find
    - begin
    linkageType: ''
    returnType: bool
    signature: "bool SmallMapIsSubset(SmallMap<inner> const& a,\n                             SmallMap<inner>
      const& b)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SmallMapIsSubset
      Src: /src/brpc/test/small_map_unittest.cc:155,1
    - Dst: butil::SmallMapIsSubset
      Src: /src/brpc/test/small_map_unittest.cc:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - SmallMap<inner>
    - SmallMap<inner>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: butil::SmallMapEqual
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::SmallMapIsSubset
    linkageType: ''
    returnType: bool
    signature: "bool SmallMapEqual(SmallMap<inner> const& a,\n                          SmallMap<inner>
      const& b)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:165,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:173,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:173,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:178,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:179,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:179,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:180,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:184,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:185,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:185,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:186,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:190,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:191,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:191,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:195,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:196,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:196,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:197,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:201,1
    - Dst: butil::SmallMapEqual
      Src: /src/brpc/test/small_map_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 202
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::UsingFullMap
    - butil::SmallMapEqual
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, AssignmentOperator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VLOG
      Src: /src/brpc/test/small_map_unittest.cc:209,1
    - Dst: SmallMap::insert
      Src: /src/brpc/test/small_map_unittest.cc:213,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:213,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:214,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:215,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:217,1
    - Dst: SmallMap::insert
      Src: /src/brpc/test/small_map_unittest.cc:221,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:221,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:222,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:223,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:224,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:225,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:229,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:230,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:232,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:234,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:234,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/small_map_unittest.cc:234,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:235,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:235,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 237
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::end
    - static_cast<size_t>
    - SmallMap::find
    - EXPECT_EQ
    - SmallMap::empty
    - std::make_pair
    - EXPECT_FALSE
    - VLOG
    - SmallMap::insert
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, Insert)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VLOG
      Src: /src/brpc/test/small_map_unittest.cc:242,1
    - Dst: hash_map::insert
      Src: /src/brpc/test/small_map_unittest.cc:245,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:245,1
    - Dst: SmallMap::insert
      Src: /src/brpc/test/small_map_unittest.cc:249,1
    - Dst: hash_map::begin
      Src: /src/brpc/test/small_map_unittest.cc:249,1
    - Dst: hash_map::end
      Src: /src/brpc/test/small_map_unittest.cc:249,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:250,1
    - Dst: hash_map::size
      Src: /src/brpc/test/small_map_unittest.cc:250,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:250,1
    - Dst: VLOG
      Src: /src/brpc/test/small_map_unittest.cc:252,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:253,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:253,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:254,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:255,1
    - Dst: SmallMap::find
      Src: /src/brpc/test/small_map_unittest.cc:255,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 258
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::end
    - hash_map::size
    - EXPECT_EQ
    - hash_map::end
    - SmallMap::find
    - hash_map::begin
    - std::make_pair
    - VLOG
    - SmallMap::insert
    - hash_map::insert
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, InsertRange)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:268,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:271,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:271,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:272,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:272,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:275,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:275,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:277,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:279,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:279,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:283,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:285,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:287,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:289,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:292,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:293,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:293,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:294,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:294,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:297,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:297,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:298,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:301,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:301,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:303,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:305,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:305,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:309,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:309,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:310,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:310,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:311,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:311,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:314,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:314,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:316,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:317,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:317,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:318,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:318,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:319,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:319,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:320,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:320,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:322,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:322,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:323,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:323,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:324,1
    - Dst: SmallMap::erase
      Src: /src/brpc/test/small_map_unittest.cc:324,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:325,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:325,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:326,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:326,1
    - Dst: SmallMap::clear
      Src: /src/brpc/test/small_map_unittest.cc:328,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:329,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:329,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:330,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:330,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:331,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 332
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - EXPECT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::end
    - SmallMap::begin
    - SmallMap::clear
    - SmallMap::empty
    - SmallMap::erase
    - EXPECT_FALSE
    - EXPECT_EQ
    - SmallMap::count
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, Erase)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:336,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:341,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:343,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:343,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:344,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:344,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:345,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:345,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:348,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:349,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:350,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:353,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:353,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:354,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:355,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:357,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:357,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:359,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:361,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:367,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:368,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:370,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:371,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:372,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:372,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/small_map_unittest.cc:373,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:373,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:374,1
    - Dst: SmallMap::UsingFullMap
      Src: /src/brpc/test/small_map_unittest.cc:374,1
    - Dst: SmallMap::begin
      Src: /src/brpc/test/small_map_unittest.cc:376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:377,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:377,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:378,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:381,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:381,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:382,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:385,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:385,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:386,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:389,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:390,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:391,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:393,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:393,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:394,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:395,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:397,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:397,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:399,1
    - Dst: SmallMap::end
      Src: /src/brpc/test/small_map_unittest.cc:399,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:400,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:401,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 334
    functionDepth: 1
    functionLinenumber: 334
    functionLinenumberEnd: 402
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::end
    - SmallMap::begin
    - SmallMap::empty
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, NonHashMap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:408,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:408,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:410,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 411
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - SmallMap::size
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, DefaultEqualKeyWorks)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 417
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/small_map_unittest.cc:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' item'
    argTypes:
    - std::pair<int, int>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - insert
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item(const std::pair<int, int>& item)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 426
    functionName: butil::InitMap
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void InitMap(ManualConstructor<hash_map_add_item>* map_ctor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - item_to_add
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 431
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer(int item_to_add)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 433
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 436
    functionName: operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 417
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/small_map_unittest.cc:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' item'
    argTypes:
    - std::pair<int, int>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: butil::hash_map_add_item::hash_map_add_item
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - insert
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item(const std::pair<int, int>& item)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 426
    functionName: butil::InitMap
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void InitMap(ManualConstructor<hash_map_add_item>* map_ctor)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - item_to_add
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 431
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer(int item_to_add)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 433
    functionName: butil::hash_map_add_item_initializer::hash_map_add_item_initializer
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void hash_map_add_item_initializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ManualConstructor<hash_map_add_item>*::Init
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    - Dst: std::make_pair
      Src: /src/brpc/test/small_map_unittest.cc:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - map_ctor
    argTypes:
    - ManualConstructor<hash_map_add_item>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 436
    functionName: operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - ManualConstructor<hash_map_add_item>*::Init
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void operator()(ManualConstructor<hash_map_add_item>* map_ctor) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:447,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:447,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:454,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:455,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:458,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:458,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:460,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 443
    functionDepth: 1
    functionLinenumber: 443
    functionLinenumberEnd: 461
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_EQ
    - SmallMap::count
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, SubclassInitializationWithFunctionPointer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_map_add_item_initializer
      Src: /src/brpc/test/small_map_unittest.cc:465,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/small_map_unittest.cc:467,1
    - Dst: SmallMap::empty
      Src: /src/brpc/test/small_map_unittest.cc:467,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:474,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:474,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:475,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:475,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:478,1
    - Dst: SmallMap::size
      Src: /src/brpc/test/small_map_unittest.cc:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/small_map_unittest.cc:480,1
    - Dst: SmallMap::count
      Src: /src/brpc/test/small_map_unittest.cc:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 463
    functionDepth: 1
    functionLinenumber: 463
    functionLinenumberEnd: 481
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_EQ
    - hash_map_add_item_initializer
    - SmallMap::count
    linkageType: ''
    returnType: void
    signature: void TEST(SmallMap, SubclassInitializationWithFunctionObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: BlockPoolTest::BlockPoolTest
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BlockPoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ~BlockPoolTest()
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BlockPoolTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: DummyCallback
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t DummyCallback(void*, size_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:57,1
    - Dst: InitBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:57,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:62,1
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:64,1
    - Dst: GetBlockType
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:64,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:67,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:71,1
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:73,1
    - Dst: GetBlockType
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:73,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:76,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:80,1
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:81,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:82,1
    - Dst: GetBlockType
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:82,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:85,1
    - Dst: DestroyBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:89,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 90
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DestroyBlockPool
    - GetBlockSize
    - InitBlockPool
    - GetBlockType
    - DeallocBlock
    - EXPECT_EQ
    - AllocBlock
    linkageType: ''
    returnType: void
    signature: void TEST_F(BlockPoolTest, single_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:94,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:97,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:99,1
    - Dst: GetBlockType
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:99,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 104
    functionName: AllocAndDealloc
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - GetBlockSize
    - GetBlockType
    - DeallocBlock
    - EXPECT_EQ
    - AllocBlock
    linkageType: ''
    returnType: void
    signature: void * AllocAndDealloc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:111,1
    - Dst: InitBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:111,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:118,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:121,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:123,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:123,1
    - Dst: DestroyBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:125,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 126
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ASSERT_EQ
    - DestroyBlockPool
    - butil::cpuwide_time_us
    - InitBlockPool
    - bthread_start_background
    - bthread_join
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(BlockPoolTest, multiple_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:133,1
    - Dst: InitBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:135,1
    - Dst: GetRegionNum
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:135,1
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:136,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:142,1
    - Dst: GetRegionNum
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:142,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:146,1
    - Dst: GetRegionNum
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:146,1
    - Dst: DestroyBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 149
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - GetRegionNum
    - DestroyBlockPool
    - GetBlockSize
    - InitBlockPool
    - DeallocBlock
    - EXPECT_EQ
    - AllocBlock
    linkageType: ''
    returnType: void
    signature: void TEST_F(BlockPoolTest, extend)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:156,1
    - Dst: InitBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:158,1
    - Dst: GetRegionNum
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:158,1
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:159,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:165,1
    - Dst: GetRegionNum
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:165,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:166,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:168,1
    - Dst: GetRegionId
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:168,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:172,1
    - Dst: GetRegionNum
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:172,1
    - Dst: DestroyBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 175
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - GetRegionNum
    - DestroyBlockPool
    - GetBlockSize
    - InitBlockPool
    - DeallocBlock
    - EXPECT_EQ
    - AllocBlock
    - GetRegionId
    linkageType: ''
    returnType: void
    signature: void TEST_F(BlockPoolTest, memory_not_enough)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:182,1
    - Dst: InitBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:182,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:186,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:188,1
    - Dst: GetBlockSize
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:189,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:190,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:194,1
    - Dst: DestroyBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DestroyBlockPool
    - GetBlockSize
    - InitBlockPool
    - DeallocBlock
    - EXPECT_EQ
    - AllocBlock
    linkageType: ''
    returnType: void
    signature: void TEST_F(BlockPoolTest, invalid_use)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:204,1
    - Dst: InitBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:204,1
    - Dst: DumpMemoryPoolInfo
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:205,1
    - Dst: AllocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:206,1
    - Dst: DumpMemoryPoolInfo
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:207,1
    - Dst: DeallocBlock
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:208,1
    - Dst: DumpMemoryPoolInfo
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:209,1
    - Dst: DestroyBlockPool
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 211
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - DestroyBlockPool
    - InitBlockPool
    - DeallocBlock
    - DumpMemoryPoolInfo
    - AllocBlock
    linkageType: ''
    returnType: void
    signature: void TEST_F(BlockPoolTest, dump_info)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:216,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:217,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_block_pool_unittest.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 219
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_block_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: ControllerTest::ControllerTest
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ControllerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: ~ControllerTest()
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ControllerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cancel_flag
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: MyCancelCallback
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyCancelCallback(bool* cancel_flag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_controller_unittest.cpp:46,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_controller_unittest.cpp:46,1
    - Dst: Socket::SetSocketOptions
      Src: /src/brpc/test/brpc_controller_unittest.cpp:46,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_controller_unittest.cpp:48,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:50,1
    - Dst: brpc::Controller::IsCanceled
      Src: /src/brpc/test/brpc_controller_unittest.cpp:50,1
    - Dst: brpc::Controller::NotifyOnCancel
      Src: /src/brpc/test/brpc_controller_unittest.cpp:53,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_controller_unittest.cpp:53,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_controller_unittest.cpp:55,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_controller_unittest.cpp:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:59,1
    - Dst: brpc::Controller::IsCanceled
      Src: /src/brpc/test/brpc_controller_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 60
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - usleep
    - ASSERT_FALSE
    - brpc::Controller::NotifyOnCancel
    - brpc::NewCallback
    - brpc::Controller::Controller
    - Socket::SetFailed
    - brpc::Controller::IsCanceled
    - Socket::SetSocketOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ControllerTest, notify_on_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_controller_unittest.cpp:64,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_controller_unittest.cpp:64,1
    - Dst: Socket::SetSocketOptions
      Src: /src/brpc/test/brpc_controller_unittest.cpp:64,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_controller_unittest.cpp:66,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:68,1
    - Dst: brpc::Controller*::IsCanceled
      Src: /src/brpc/test/brpc_controller_unittest.cpp:68,1
    - Dst: brpc::Controller*::NotifyOnCancel
      Src: /src/brpc/test/brpc_controller_unittest.cpp:71,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_controller_unittest.cpp:71,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 75
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - ASSERT_FALSE
    - brpc::Controller*::NotifyOnCancel
    - brpc::NewCallback
    - brpc::Controller::Controller
    - Socket::SetSocketOptions
    - brpc::Controller*::IsCanceled
    linkageType: ''
    returnType: void
    signature: void TEST_F(ControllerTest, notify_on_destruction)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:80,1
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:80,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_controller_unittest.cpp:83,1
    - Dst: data
      Src: /src/brpc/test/brpc_controller_unittest.cpp:83,1
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:83,1
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:83,1
    - Dst: data
      Src: /src/brpc/test/brpc_controller_unittest.cpp:83,1
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 84
    functionName: endsWith
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - size
    - data
    linkageType: ''
    returnType: bool
    signature: bool endsWith(const std::string& s1, const butil::StringPiece& s2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:86,1
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:86,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_controller_unittest.cpp:89,1
    - Dst: data
      Src: /src/brpc/test/brpc_controller_unittest.cpp:89,1
    - Dst: data
      Src: /src/brpc/test/brpc_controller_unittest.cpp:89,1
    - Dst: size
      Src: /src/brpc/test/brpc_controller_unittest.cpp:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 90
    functionName: startsWith
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - size
    - data
    linkageType: ''
    returnType: bool
    signature: bool startsWith(const std::string& s1, const butil::StringPiece& s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/brpc_controller_unittest.cpp:97,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_controller_unittest.cpp:99,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_controller_unittest.cpp:100,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:102,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:103,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:105,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_controller_unittest.cpp:107,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:108,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_controller_unittest.cpp:110,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:113,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:114,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_controller_unittest.cpp:116,1
    - Dst: brpc::Controller::SessionKV
      Src: /src/brpc/test/brpc_controller_unittest.cpp:118,1
    - Dst: CLOGW
      Src: /src/brpc/test/brpc_controller_unittest.cpp:120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:121,1
    - Dst: endsWith
      Src: /src/brpc/test/brpc_controller_unittest.cpp:121,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:122,1
    - Dst: startsWith
      Src: /src/brpc/test/brpc_controller_unittest.cpp:122,1
    - Dst: logging::StringSink::clear
      Src: /src/brpc/test/brpc_controller_unittest.cpp:123,1
    - Dst: brpc::Controller::set_request_id
      Src: /src/brpc/test/brpc_controller_unittest.cpp:125,1
    - Dst: CLOGE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:126,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:127,1
    - Dst: endsWith
      Src: /src/brpc/test/brpc_controller_unittest.cpp:127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:128,1
    - Dst: startsWith
      Src: /src/brpc/test/brpc_controller_unittest.cpp:128,1
    - Dst: logging::StringSink::clear
      Src: /src/brpc/test/brpc_controller_unittest.cpp:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:133,1
    - Dst: endsWith
      Src: /src/brpc/test/brpc_controller_unittest.cpp:133,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_controller_unittest.cpp:134,1
    - Dst: startsWith
      Src: /src/brpc/test/brpc_controller_unittest.cpp:134,1
    - Dst: logging::SetLogSink
      Src: /src/brpc/test/brpc_controller_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 137
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_controller_unittest.cpp
    functionUses: 0
    functionsReached:
    - CLOGW
    - ASSERT_TRUE
    - ASSERT_EQ
    - startsWith
    - CLOGE
    - logging::StringSink::clear
    - endsWith
    - brpc::Controller::Controller
    - brpc::Controller::set_log_id
    - brpc::Controller::set_request_id
    - logging::SetLogSink
    - brpc::Controller::SessionKV
    linkageType: ''
    returnType: void
    signature: void TEST_F(ControllerTest, SessionKV)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:31,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:40,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:43,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:45,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:47,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:47,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: RemoveMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - snprintf
    - system
    - CHECK
    - usleep
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMemcached()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:57,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:58,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:59,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:65,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:66,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:70,1
    - Dst: fork
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:72,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:74,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:75,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:77,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:81,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:82,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:83,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:87,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 88
    functionName: RunMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - exit
    - system
    - fork
    - execvp
    - usleep
    - puts
    - atexit
    linkageType: ''
    returnType: void
    signature: void RunMemcached()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: MemcacheTest::MemcacheTest
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: MemcacheTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 97
    functionName: MemcacheTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:102,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:105,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:108,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:108,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:109,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:110,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:111,1
    - Dst: brpc::MemcacheRequest::Flush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:115,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:116,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:118,1
    - Dst: brpc::MemcacheResponse::PopFlush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:118,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:120,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:121,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:122,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:123,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:124,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:124,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:128,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:129,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:129,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:131,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:132,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:133,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:134,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:136,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:136,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:137,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:137,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:139,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:140,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:141,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:143,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:144,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:145,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:147,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:150,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:151,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:152,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:154,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:155,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:155,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:157,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:157,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:157,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:159,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:160,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:161,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:163,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:164,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:164,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:164,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:166,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:166,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 169
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheRequest::Set
    - brpc::MemcacheRequest::Get
    - brpc::MemcacheResponse::PopSet
    - ASSERT_FALSE
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::Channel::Channel
    - puts
    - brpc::Controller::ErrorText
    - brpc::MemcacheRequest::Clear
    - brpc::Channel::Init
    - brpc::MemcacheRequest::Flush
    - ASSERT_TRUE
    - brpc::MemcacheResponse::PopFlush
    - brpc::MemcacheResponse::LastError
    - brpc::MemcacheResponse::PopGet
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:173,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:176,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:179,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:179,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:180,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:181,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:182,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:183,1
    - Dst: brpc::MemcacheRequest::Decrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:185,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:186,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:187,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:187,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:190,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:194,1
    - Dst: brpc::MemcacheResponse::PopDecrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:198,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 204
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - brpc::MemcacheResponse::PopDecrement
    - ASSERT_FALSE
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::Decrement
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheRequest::Increment
    - puts
    - brpc::MemcacheResponse::PopIncrement
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, incr_and_decr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:208,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:211,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:214,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:214,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:216,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::MemcacheRequest::Version
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:218,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:219,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:222,1
    - Dst: brpc::MemcacheResponse::PopVersion
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:222,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 224
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - brpc::MemcacheResponse::LastError
    - ASSERT_FALSE
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheRequest::Version
    - puts
    - brpc::MemcacheResponse::PopVersion
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:40,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:43,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:45,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:47,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:47,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: RemoveMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - snprintf
    - system
    - CHECK
    - usleep
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMemcached()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:57,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:58,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:59,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:65,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:66,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:70,1
    - Dst: fork
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:72,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:74,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:75,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:77,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:81,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:82,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:83,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:87,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 88
    functionName: RunMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - exit
    - system
    - fork
    - execvp
    - usleep
    - puts
    - atexit
    linkageType: ''
    returnType: void
    signature: void RunMemcached()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: MemcacheTest::MemcacheTest
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: MemcacheTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 97
    functionName: MemcacheTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:102,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:105,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:108,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:108,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:109,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:110,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:111,1
    - Dst: brpc::MemcacheRequest::Flush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:115,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:116,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:118,1
    - Dst: brpc::MemcacheResponse::PopFlush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:118,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:120,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:121,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:122,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:123,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:124,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:124,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:128,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:129,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:129,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:131,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:132,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:133,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:134,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:136,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:136,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:137,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:137,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:139,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:140,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:141,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:143,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:144,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:145,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:147,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:150,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:151,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:152,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:154,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:155,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:155,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:157,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:157,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:157,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:159,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:160,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:161,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:163,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:164,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:164,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:164,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:166,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:166,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 169
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::Reset
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheRequest::Set
    - brpc::MemcacheRequest::Get
    - brpc::MemcacheResponse::PopSet
    - ASSERT_FALSE
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::Channel::Channel
    - puts
    - brpc::Controller::ErrorText
    - brpc::MemcacheRequest::Clear
    - brpc::Channel::Init
    - brpc::MemcacheRequest::Flush
    - ASSERT_TRUE
    - brpc::MemcacheResponse::PopFlush
    - brpc::MemcacheResponse::LastError
    - brpc::MemcacheResponse::PopGet
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:173,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:176,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:179,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:179,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:180,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:181,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:182,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:183,1
    - Dst: brpc::MemcacheRequest::Decrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:185,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:186,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:187,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:187,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:190,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:194,1
    - Dst: brpc::MemcacheResponse::PopDecrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:198,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 204
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - brpc::MemcacheResponse::PopDecrement
    - ASSERT_FALSE
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::Decrement
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheRequest::Increment
    - puts
    - brpc::MemcacheResponse::PopIncrement
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, incr_and_decr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:208,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:211,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:214,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:214,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:216,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::MemcacheRequest::Version
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:218,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:219,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:222,1
    - Dst: brpc::MemcacheResponse::PopVersion
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:222,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 224
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - ASSERT_TRUE
    - brpc::Controller::ErrorText
    - brpc::MemcacheResponse::LastError
    - ASSERT_FALSE
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::Controller::Failed
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheRequest::Version
    - puts
    - brpc::MemcacheResponse::PopVersion
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:47,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:48,1
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:49,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - brpc::GlobalInitializeOrDie
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 33
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~EchoServiceImpl() override
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:68,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:69,1
    - Dst: brpc::Controller*::is_ssl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:69,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:71,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:73,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:73,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:74,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:75,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 77
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse*::set_message
    - bthread_usleep
    - fetch_add
    - test::EchoRequest*::message
    - brpc::Controller*::request_protocol
    - test::EchoRequest*::sleep_us
    - EXPECT_EQ
    - LOG
    - brpc::Controller*::is_ssl
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      test::EchoRequest* request,\n              test::EchoResponse* response,\n              google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: SSLTest::SSLTest
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SSLTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: ~SSLTest()
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SSLTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: RunClosure
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: void * RunClosure(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:98,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:101,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:105,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:105,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - channel
    - count
    argTypes:
    - brpc::Channel*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 107
    functionName: SendMultipleRPC
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void SendMultipleRPC(brpc::Channel* channel, int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:112,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:113,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:118,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:121,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:123,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:123,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:127,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:129,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:130,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:131,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:133,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:133,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:135,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:138,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:138,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:138,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:146,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:147,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:148,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:150,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:150,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:154,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:154,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:157,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:163,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:165,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:167,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:167,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:171,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:171,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:178,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:179,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:179,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 180
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - pthread_create
    - brpc::ChannelOptions::mutable_ssl_options
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::NewCallback
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - EXPECT_EQ
    - test::EchoRequest::set_message
    - test::EchoService_Stub::Echo
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - test::EchoResponse::message
    - brpc::ServerOptions::mutable_ssl_options
    - pthread_join
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:184,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:185,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:187,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:191,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:191,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:198,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:198,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:201,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:203,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:204,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:205,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:207,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:207,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:209,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:213,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:213,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:213,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:218,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:218,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:220,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:223,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:224,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:227,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:228,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 229
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::ChannelOptions::mutable_ssl_options
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Channel::Channel
    - brpc::ServerOptions::ServerOptions
    - test::EchoService_Stub::Echo
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::ErrorText
    - brpc::Server::Start
    - brpc::Channel::Init
    - brpc::Server::Stop
    - test::EchoResponse::message
    - brpc::ServerOptions::mutable_ssl_options
    - ASSERT_TRUE
    - brpc::Server::Join
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, force_ssl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:235,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:235,1
    - Dst: brpc::policy::RpcMeta::response
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:237,1
    - Dst: brpc::policy::RpcResponseMeta::error_code
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:237,1
    - Dst: brpc::policy::RpcResponseMeta::error_text
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:237,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:239,1
    - Dst: brpc::policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:241,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:241,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:242,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:243,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:243,1
    - Dst: brpc::Controller*::response
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:244,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 245
    functionName: ProcessResponse
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::Controller*::response
    - brpc::policy::RpcResponseMeta::error_text
    - brpc::policy::RpcResponseMeta::error_code
    - brpc::policy::RpcMeta::correlation_id
    - bthread_id_lock
    - brpc::ParsePbFromIOBuf
    - bthread_id_unlock_and_destroy
    - brpc::policy::RpcMeta::response
    - ASSERT_NE
    - static_cast<uint64_t>
    linkageType: ''
    returnType: void
    signature: void ProcessResponse(brpc::InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:253,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:253,1
    - Dst: brpc::InputMessenger::InputMessenger
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:260,1
    - Dst: brpc::InputMessenger::AddHandler
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:260,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:263,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:264,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:270,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:273,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:275,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:275,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:284,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:285,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:286,1
    - Dst: std::make_shared<brpc::SocketSSLContext>
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:293,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:295,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:295,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:298,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:301,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:302,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:303,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:305,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:306,1
    - Dst: brpc::PackRpcRequest
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:307,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:310,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:310,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:312,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:312,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 314
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::InputMessenger::AddHandler
    - RegisterProtocol
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Server::AddService
    - std::make_shared<brpc::SocketSSLContext>
    - brpc::PackRpcRequest
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - brpc::Join
    - brpc::ServerOptions::ServerOptions
    - ASSERT_NE
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - Socket::Create
    - brpc::Server::Start
    - brpc::CreateClientSSLContext
    - brpc::Controller::call_id
    - test::EchoResponse::message
    - brpc::ServerOptions::mutable_ssl_options
    - brpc::SocketUniquePtr::Write
    - brpc::InputMessenger::InputMessenger
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, connect_on_create)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:318,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:319,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:321,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:321,1
    - Dst: SendMultipleRPC
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:323,1
    - Dst: brpc::SocketMapList
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:327,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:329,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:329,1
    - Dst: brpc::SocketUniquePtr::GetPeerCertificate
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:332,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 2
    argNames:
    - cname
    - cert
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 336
    functionName: CheckCert
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::GetPeerCertificate
    - brpc::ChannelOptions::mutable_ssl_options
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::SocketMapList
    - SendMultipleRPC
    - brpc::ExtractHostnames
    - brpc::SetTrackMeAddress
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void CheckCert(const char* cname, const char* cert)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:341,1
    - Dst: fileno
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:341,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - fname
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 345
    functionName: GetRawPemString
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - read
    - fileno
    linkageType: ''
    returnType: std::string
    signature: std::string GetRawPemString(const char* fname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:351,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:352,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:357,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:358,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:362,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:363,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:364,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:365,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:365,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:368,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:370,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:370,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:372,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:373,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:374,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:376,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 349
    functionDepth: 2
    functionLinenumber: 349
    functionLinenumberEnd: 378
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - CheckCert
    - brpc::Server::Join
    - brpc::CertInfo::sni_filters::push_back
    - brpc::Server::Start
    - push_back
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    - GetRawPemString
    - brpc::ServerOptions::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, ssl_sni)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:382,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:383,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:388,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:389,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:392,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:394,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:394,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:396,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:399,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:400,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:402,1
    - Dst: brpc::Server::AddCertificate
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:402,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:404,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:408,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:410,1
    - Dst: brpc::Server::RemoveCertificate
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:410,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:412,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:416,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:417,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:418,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:421,1
    - Dst: brpc::Server::ResetCertificates
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:421,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:423,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:425,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:426,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 380
    functionDepth: 2
    functionLinenumber: 380
    functionLinenumberEnd: 427
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - brpc::Server::RemoveCertificate
    - CheckCert
    - std::vector::push_back
    - brpc::Server::ResetCertificates
    - brpc::Server::Join
    - brpc::CertInfo::sni_filters::push_back
    - brpc::Server::Start
    - brpc::Server::AddCertificate
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::Stop
    - EchoServiceImpl::EchoServiceImpl
    - GetRawPemString
    - brpc::ServerOptions::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, ssl_reload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:436,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:436,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:439,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:440,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:442,1
    - Dst: SSL_write
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:444,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:446,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:447,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:448,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:449,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 452
    functionName: ssl_perf_client
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - butil::Timer::start
    - SSL_do_handshake
    - SSL_write
    - EXPECT_EQ
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ssl_perf_client(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:456,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:456,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:458,1
    - Dst: SSL_read
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:461,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 465
    functionName: ssl_perf_server
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAY_SIZE
    - SSL_read
    - SSL_do_handshake
    linkageType: ''
    returnType: void
    signature: void * ssl_perf_server(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:470,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:471,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:472,1
    - Dst: accept
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:473,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:474,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:476,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:477,1
    - Dst: brpc::CreateServerSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:479,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:480,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:481,1
    - Dst: SSL_set_tlsext_host_name
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:483,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:488,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:489,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:490,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:491,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:491,1
    - Dst: close
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:492,1
    - Dst: close
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:493,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 467
    functionDepth: 1
    functionLinenumber: 467
    functionLinenumberEnd: 494
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateServerSSLContext
    - pthread_join
    - tcp_connect
    - pthread_create
    - ASSERT_GT
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - brpc::CreateSSLSession
    - SSL_set_tlsext_host_name
    - brpc::CreateClientSSLContext
    - close
    - accept
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, ssl_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: FDGuardTest::FDGuardTest
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FDGuardTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~FDGuardTest()
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FDGuardTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fd_guard::fd_guard
      Src: /src/brpc/test/fd_guard_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::fd_guard::fd_guard
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, default_constructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:46,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/fd_guard_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:51,1
    - Dst: write
      Src: /src/brpc/test/fd_guard_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 53
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - open
    - ASSERT_GT
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, destructor_closes_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:56,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/fd_guard_unittest.cpp:57,1
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:59,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/fd_guard_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:62,1
    - Dst: write
      Src: /src/brpc/test/fd_guard_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:63,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/fd_guard_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:65,1
    - Dst: write
      Src: /src/brpc/test/fd_guard_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 67
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::fd_guard::reset
    - open
    - ASSERT_GT
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, reset_closes_previous_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:70,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/fd_guard_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:73,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/test/fd_guard_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:74,1
    - Dst: close
      Src: /src/brpc/test/fd_guard_unittest.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - open
    - ASSERT_GT
    - butil::fd_guard::release
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, release)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: FDGuardTest::FDGuardTest
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FDGuardTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~FDGuardTest()
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FDGuardTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fd_guard::fd_guard
      Src: /src/brpc/test/fd_guard_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::fd_guard::fd_guard
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, default_constructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:46,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/fd_guard_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:51,1
    - Dst: write
      Src: /src/brpc/test/fd_guard_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 53
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - open
    - ASSERT_GT
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, destructor_closes_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:56,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/fd_guard_unittest.cpp:57,1
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:59,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/fd_guard_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:62,1
    - Dst: write
      Src: /src/brpc/test/fd_guard_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:63,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/fd_guard_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:65,1
    - Dst: write
      Src: /src/brpc/test/fd_guard_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 67
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::fd_guard::reset
    - open
    - ASSERT_GT
    - write
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, reset_closes_previous_fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/test/fd_guard_unittest.cpp:70,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/fd_guard_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:73,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/test/fd_guard_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/fd_guard_unittest.cpp:74,1
    - Dst: close
      Src: /src/brpc/test/fd_guard_unittest.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/fd_guard_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - open
    - ASSERT_GT
    - butil::fd_guard::release
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(FDGuardTest, release)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/brpc/test/abalist_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: bthread::exists
    functionSourceFile: /src/brpc/test/abalist_unittest.cc
    functionUses: 0
    functionsReached:
    - count
    linkageType: ''
    returnType: bool
    signature: bool exists(int id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ListOfABAFreeId::get_sizes
      Src: /src/brpc/test/abalist_unittest.cc:30,1
    - Dst: bthread::clear
      Src: /src/brpc/test/abalist_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/abalist_unittest.cc:35,1
    - Dst: ListOfABAFreeId::add
      Src: /src/brpc/test/abalist_unittest.cc:35,1
    - Dst: size
      Src: /src/brpc/test/abalist_unittest.cc:36,1
    - Dst: insert
      Src: /src/brpc/test/abalist_unittest.cc:37,1
    - Dst: ListOfABAFreeId::get_sizes
      Src: /src/brpc/test/abalist_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/abalist_unittest.cc:44,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 45
    functionName: bthread::TEST
    functionSourceFile: /src/brpc/test/abalist_unittest.cc
    functionUses: 0
    functionsReached:
    - bthread::clear
    - ListOfABAFreeId::get_sizes
    - EXPECT_EQ
    - insert
    - size
    - ListOfABAFreeId::add
    linkageType: ''
    returnType: void
    signature: void TEST(AbaListTest, TestGc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/brpc/test/abalist_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: bthread::exists
    functionSourceFile: /src/brpc/test/abalist_unittest.cc
    functionUses: 0
    functionsReached:
    - count
    linkageType: ''
    returnType: bool
    signature: bool exists(int id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ListOfABAFreeId::get_sizes
      Src: /src/brpc/test/abalist_unittest.cc:30,1
    - Dst: bthread::clear
      Src: /src/brpc/test/abalist_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/abalist_unittest.cc:35,1
    - Dst: ListOfABAFreeId::add
      Src: /src/brpc/test/abalist_unittest.cc:35,1
    - Dst: size
      Src: /src/brpc/test/abalist_unittest.cc:36,1
    - Dst: insert
      Src: /src/brpc/test/abalist_unittest.cc:37,1
    - Dst: ListOfABAFreeId::get_sizes
      Src: /src/brpc/test/abalist_unittest.cc:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/abalist_unittest.cc:44,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 45
    functionName: bthread::TEST
    functionSourceFile: /src/brpc/test/abalist_unittest.cc
    functionUses: 0
    functionsReached:
    - bthread::clear
    - ListOfABAFreeId::get_sizes
    - EXPECT_EQ
    - insert
    - size
    - ListOfABAFreeId::add
    linkageType: ''
    returnType: void
    signature: void TEST(AbaListTest, TestGc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/memory_unittest.cc:43,1
    - Dst: ::GetModuleHandle
      Src: /src/brpc/test/memory_unittest.cc:43,1
    - Dst: butil::GetModuleFromAddress
      Src: /src/brpc/test/memory_unittest.cc:44,1
    - Dst: const_cast<int*>
      Src: /src/brpc/test/memory_unittest.cc:45,1
    - Dst: ::GetModuleHandle
      Src: /src/brpc/test/memory_unittest.cc:50,1
    - Dst: butil::GetModuleFromAddress
      Src: /src/brpc/test/memory_unittest.cc:52,1
    - Dst: reinterpret_cast<DWORD*>
      Src: /src/brpc/test/memory_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/memory_unittest.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 54
    functionName: TEST
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ::GetModuleHandle
    - const_cast<int*>
    - butil::GetModuleFromAddress
    - EXPECT_EQ
    - reinterpret_cast<DWORD*>
    linkageType: ''
    returnType: void
    signature: void TEST(ProcessMemoryTest, GetModuleFromAddress)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:57,1
    - Dst: butil::EnableLowFragmentationHeap
      Src: /src/brpc/test/memory_unittest.cc:57,1
    - Dst: IsDebuggerPresent
      Src: /src/brpc/test/memory_unittest.cc:58,1
    - Dst: getenv
      Src: /src/brpc/test/memory_unittest.cc:61,1
    - Dst: strcmp
      Src: /src/brpc/test/memory_unittest.cc:62,1
    - Dst: GetModuleHandle
      Src: /src/brpc/test/memory_unittest.cc:65,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:66,1
    - Dst: reinterpret_cast<HeapQueryFn>
      Src: /src/brpc/test/memory_unittest.cc:67,1
    - Dst: GetProcAddress
      Src: /src/brpc/test/memory_unittest.cc:67,1
    - Dst: GetProcessHeaps
      Src: /src/brpc/test/memory_unittest.cc:78,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/memory_unittest.cc:79,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/memory_unittest.cc:83,1
    - Dst: heap_query
      Src: /src/brpc/test/memory_unittest.cc:83,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/memory_unittest.cc:94,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/memory_unittest.cc:95,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 97
    functionName: TEST
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - strcmp
    - GetProcessHeaps
    - reinterpret_cast<HeapQueryFn>
    - heap_query
    - GetModuleHandle
    - GetProcAddress
    - EXPECT_LE
    - EXPECT_NE
    - butil::EnableLowFragmentationHeap
    - EXPECT_GT
    - getenv
    - IsDebuggerPresent
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(ProcessMemoryTest, EnableLFH)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EXIT
      Src: /src/brpc/test/memory_unittest.cc:117,1
    - Dst: butil::EnableTerminationOnOutOfMemory
      Src: /src/brpc/test/memory_unittest.cc:119,1
    - Dst: malloc
      Src: /src/brpc/test/memory_unittest.cc:121,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/memory_unittest.cc:121,1
    - Dst: testing::KilledBySignal
      Src: /src/brpc/test/memory_unittest.cc:123,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/test/memory_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 127
    functionName: TEST
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - butil::EnableTerminationOnOutOfMemory
    - malloc
    - ASSERT_EXIT
    - butil::BaseIteratorRangeToNumberTraits::max
    - testing::KilledBySignal
    linkageType: ''
    returnType: void
    signature: void TEST(ProcessMemoryTest, MacMallocFailureDoesNotTerminate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:137,1
    - Dst: free
      Src: /src/brpc/test/memory_unittest.cc:137,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:141,1
    - Dst: free
      Src: /src/brpc/test/memory_unittest.cc:141,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:144,1
    - Dst: free
      Src: /src/brpc/test/memory_unittest.cc:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_DEATH
    - free
    linkageType: ''
    returnType: void
    signature: void TEST(ProcessMemoryTest, MacTerminateOnHeapCorruption)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/memory_unittest.cc:171,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/memory_unittest.cc:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 173
    functionName: OutOfMemoryTest::OutOfMemoryTest
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void OutOfMemoryTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tc_set_new_mode
      Src: /src/brpc/test/memory_unittest.cc:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: OutOfMemoryTest::OVERRIDE
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - tc_set_new_mode
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tc_set_new_mode
      Src: /src/brpc/test/memory_unittest.cc:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: OutOfMemoryTest::TearDown
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - tc_set_new_mode
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnableTerminationOnOutOfMemory
      Src: /src/brpc/test/memory_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 200
    functionName: OutOfMemoryDeathTest::SetUpInDeathAssert
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::EnableTerminationOnOutOfMemory
    linkageType: ''
    returnType: void
    signature: void SetUpInDeathAssert()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:204,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:205,1
    - Dst: operator new
      Src: /src/brpc/test/memory_unittest.cc:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_DEATH
    - operator new
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, New)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:211,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:212,1
    - Dst: char::char
      Src: /src/brpc/test/memory_unittest.cc:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 215
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - char::char
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, NewArray)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:218,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:219,1
    - Dst: malloc
      Src: /src/brpc/test/memory_unittest.cc:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 222
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Malloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:225,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:226,1
    - Dst: realloc
      Src: /src/brpc/test/memory_unittest.cc:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 229
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - realloc
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Realloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:232,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:233,1
    - Dst: calloc
      Src: /src/brpc/test/memory_unittest.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 236
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - calloc
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Calloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:239,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:240,1
    - Dst: valloc
      Src: /src/brpc/test/memory_unittest.cc:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 243
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - valloc
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Valloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:250,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:251,1
    - Dst: pvalloc
      Src: /src/brpc/test/memory_unittest.cc:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - pvalloc
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Pvalloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:258,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:259,1
    - Dst: memalign
      Src: /src/brpc/test/memory_unittest.cc:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 262
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_DEATH
    - memalign
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Memalign)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:286,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/memory_unittest.cc:288,1
    - Dst: posix_memalign
      Src: /src/brpc/test/memory_unittest.cc:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 290
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_DEATH
    - posix_memalign
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, Posix_memalign)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc_default_purgeable_zone
      Src: /src/brpc/test/memory_unittest.cc:298,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:299,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:300,1
    - Dst: malloc_zone_malloc
      Src: /src/brpc/test/memory_unittest.cc:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 303
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc_zone_malloc
    - malloc_default_purgeable_zone
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, MallocPurgeable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc_default_purgeable_zone
      Src: /src/brpc/test/memory_unittest.cc:306,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:307,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:308,1
    - Dst: malloc_zone_realloc
      Src: /src/brpc/test/memory_unittest.cc:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 311
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc_zone_realloc
    - malloc_default_purgeable_zone
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, ReallocPurgeable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc_default_purgeable_zone
      Src: /src/brpc/test/memory_unittest.cc:314,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:315,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:316,1
    - Dst: malloc_zone_calloc
      Src: /src/brpc/test/memory_unittest.cc:317,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 319
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc_zone_calloc
    - malloc_default_purgeable_zone
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, CallocPurgeable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc_default_purgeable_zone
      Src: /src/brpc/test/memory_unittest.cc:322,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:323,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:324,1
    - Dst: malloc_zone_valloc
      Src: /src/brpc/test/memory_unittest.cc:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 327
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc_zone_valloc
    - malloc_default_purgeable_zone
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, VallocPurgeable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc_default_purgeable_zone
      Src: /src/brpc/test/memory_unittest.cc:330,1
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:331,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:332,1
    - Dst: malloc_zone_memalign
      Src: /src/brpc/test/memory_unittest.cc:333,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 335
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - malloc_zone_memalign
    - malloc_default_purgeable_zone
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, PosixMemalignPurgeable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:345,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:346,1
    - Dst: butil::AllocateViaCFAllocatorSystemDefault
      Src: /src/brpc/test/memory_unittest.cc:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 350
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AllocateViaCFAllocatorSystemDefault
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, CFAllocatorSystemDefault)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:353,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:354,1
    - Dst: butil::AllocateViaCFAllocatorMalloc
      Src: /src/brpc/test/memory_unittest.cc:356,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 352
    functionDepth: 0
    functionLinenumber: 352
    functionLinenumberEnd: 358
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_DEATH
    - butil::AllocateViaCFAllocatorMalloc
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, CFAllocatorMalloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:361,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:362,1
    - Dst: butil::AllocateViaCFAllocatorMallocZone
      Src: /src/brpc/test/memory_unittest.cc:364,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 366
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_DEATH
    - butil::AllocateViaCFAllocatorMallocZone
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, CFAllocatorMallocZone)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_DEATH
      Src: /src/brpc/test/memory_unittest.cc:374,1
    - Dst: SetUpInDeathAssert
      Src: /src/brpc/test/memory_unittest.cc:375,1
    - Dst: butil::AllocatePsychoticallyBigObjCObject
      Src: /src/brpc/test/memory_unittest.cc:376,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 378
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AllocatePsychoticallyBigObjCObject
    - ASSERT_DEATH
    - SetUpInDeathAssert
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryDeathTest, PsychoticallyBigObjCObject)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamingRpcTest::SetUp
      Src: /src/brpc/test/memory_unittest.cc:390,1
    - Dst: butil::EnableTerminationOnOutOfMemory
      Src: /src/brpc/test/memory_unittest.cc:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 396
    functionName: OutOfMemoryHandledTest::SetUp
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - StreamingRpcTest::SetUp
    - butil::EnableTerminationOnOutOfMemory
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:405,1
    - Dst: butil::UncheckedMalloc
      Src: /src/brpc/test/memory_unittest.cc:405,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:406,1
    - Dst: free
      Src: /src/brpc/test/memory_unittest.cc:407,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/memory_unittest.cc:409,1
    - Dst: butil::UncheckedMalloc
      Src: /src/brpc/test/memory_unittest.cc:409,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 411
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::UncheckedMalloc
    - free
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryHandledTest, UncheckedMalloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:414,1
    - Dst: butil::UncheckedCalloc
      Src: /src/brpc/test/memory_unittest.cc:414,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:415,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/memory_unittest.cc:416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/memory_unittest.cc:418,1
    - Dst: free
      Src: /src/brpc/test/memory_unittest.cc:419,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:421,1
    - Dst: butil::UncheckedCalloc
      Src: /src/brpc/test/memory_unittest.cc:422,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:423,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/test/memory_unittest.cc:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/memory_unittest.cc:426,1
    - Dst: free
      Src: /src/brpc/test/memory_unittest.cc:427,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/memory_unittest.cc:429,1
    - Dst: butil::UncheckedCalloc
      Src: /src/brpc/test/memory_unittest.cc:429,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/memory_unittest.cc:430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 413
    functionDepth: 0
    functionLinenumber: 413
    functionLinenumberEnd: 431
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/memory_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - free
    - static_cast<const char*>
    - butil::UncheckedCalloc
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(OutOfMemoryHandledTest, UncheckedCalloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 16
    functionName: IncrementTestCounter1
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTestCounter1(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: IncrementTestCounter2
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTestCounter2(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 25
    functionName: ZeroTestCounters
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroTestCounters()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - unused
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: ExpectCounter1IsZero
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ExpectCounter1IsZero(void* unused)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:32,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/at_exit_unittest.cc:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - param
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: ExpectParamIsNull
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - static_cast<void*>
    linkageType: ''
    returnType: void
    signature: void ExpectParamIsNull(void* param)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - param
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: ExpectParamIsCounter
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ExpectParamIsCounter(void* param)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 16
    functionName: IncrementTestCounter1
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTestCounter1(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: IncrementTestCounter2
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IncrementTestCounter2(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 25
    functionName: ZeroTestCounters
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroTestCounters()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - unused
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: ExpectCounter1IsZero
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ExpectCounter1IsZero(void* unused)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:32,1
    - Dst: static_cast<void*>
      Src: /src/brpc/test/at_exit_unittest.cc:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - param
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: ExpectParamIsNull
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - static_cast<void*>
    linkageType: ''
    returnType: void
    signature: void ExpectParamIsNull(void* param)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - param
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: ExpectParamIsCounter
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ExpectParamIsCounter(void* param)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ZeroTestCounters
      Src: /src/brpc/test/at_exit_unittest.cc:49,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:50,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:51,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:54,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:55,1
    - Dst: butil::AtExitManager::ProcessCallbacksNow
      Src: /src/brpc/test/at_exit_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 59
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::ProcessCallbacksNow
    - EXPECT_EQ
    - butil::AtExitManager::RegisterCallback
    - ZeroTestCounters
    linkageType: ''
    returnType: void
    signature: void TEST_F(AtExitTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ZeroTestCounters
      Src: /src/brpc/test/at_exit_unittest.cc:62,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:63,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:64,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:68,1
    - Dst: butil::AtExitManager::ProcessCallbacksNow
      Src: /src/brpc/test/at_exit_unittest.cc:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/at_exit_unittest.cc:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::ProcessCallbacksNow
    - EXPECT_EQ
    - butil::AtExitManager::RegisterCallback
    - ZeroTestCounters
    linkageType: ''
    returnType: void
    signature: void TEST_F(AtExitTest, LIFOOrder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:75,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/test/at_exit_unittest.cc:76,1
    - Dst: butil::AtExitManager::ProcessCallbacksNow
      Src: /src/brpc/test/at_exit_unittest.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 79
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/at_exit_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::ProcessCallbacksNow
    - butil::AtExitManager::RegisterCallback
    linkageType: ''
    returnType: void
    signature: void TEST_F(AtExitTest, Param)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:40,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:41,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:65,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:76,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:79,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 85
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:91,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:91,1
    - Dst: brpc::policy::PublicPbrpcServiceAdaptor::PublicPbrpcServiceAdaptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:100,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:100,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:105,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:106,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 107
    functionName: PublicPbrpcTest::PublicPbrpcTest
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - brpc::policy::PublicPbrpcServiceAdaptor::PublicPbrpcServiceAdaptor
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void PublicPbrpcTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: ~PublicPbrpcTest()
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PublicPbrpcTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:118,1
    - Dst: brpc::policy::VerifyNsheadRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: PublicPbrpcTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - EXPECT_TRUE
    - brpc::policy::VerifyNsheadRequest
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:124,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:127,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 132
    functionName: PublicPbrpcTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:137,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:139,1
    - Dst: brpc::policy::PublicPbrpcRequest*::requestbody_size
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:141,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:144,1
    - Dst: test::EchoRequest::SerializeToString
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:144,1
    - Dst: brpc::policy::PublicPbrpcRequest*::mutable_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:148,1
    - Dst: brpc::policy::PublicPbrpcRequest*::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - meta
    argTypes:
    - brpc::policy::PublicPbrpcRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 150
    functionName: PublicPbrpcTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - brpc::policy::PublicPbrpcRequest*::requestbody_size
    - test::EchoRequest::SerializeToString
    - brpc::policy::PublicPbrpcRequest*::mutable_requestbody
    - brpc::policy::PublicPbrpcRequest*::SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        brpc::policy::PublicPbrpcRequest*
      meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:155,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:157,1
    - Dst: brpc::policy::PublicPbrpcResponse*::responsebody_size
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:159,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:161,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:162,1
    - Dst: test::EchoResponse::SerializeToString
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:162,1
    - Dst: brpc::policy::PublicPbrpcResponse*::mutable_responsebody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:163,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:166,1
    - Dst: brpc::policy::PublicPbrpcResponse*::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - meta
    argTypes:
    - brpc::policy::PublicPbrpcResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 168
    functionName: PublicPbrpcTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - brpc::policy::PublicPbrpcResponse*::SerializeToZeroCopyStream
    - test::EchoResponse::set_message
    - brpc::policy::PublicPbrpcResponse*::responsebody_size
    - brpc::policy::PublicPbrpcResponse*::mutable_responsebody
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::SerializeToString
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeResponseMessage(\n        brpc::policy::PublicPbrpcResponse*
      meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:174,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:178,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:180,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:181,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:183,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:183,1
    - Dst: static_cast<brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:185,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:185,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:189,1
    - Dst: brpc::policy::PublicPbrpcResponse::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:189,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:190,1
    - Dst: brpc::policy::PublicPbrpcResponse::responsehead
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:190,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 191
    functionName: PublicPbrpcTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - static_cast<brpc::policy::MostCommonMessage*>
    - ioctl
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::policy::PublicPbrpcResponse::ParseFromZeroCopyStream
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::PublicPbrpcResponse::responsehead
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:203,1
    - Dst: brpc::policy::RequestBody*::set_service
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:204,1
    - Dst: brpc::policy::RequestBody*::set_method_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:205,1
    - Dst: brpc::policy::RequestBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:206,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:207,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:208,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:210,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:210,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 212
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    - brpc::policy::RequestBody*::set_service
    - brpc::policy::RequestBody*::set_id
    - SetFailed
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:216,1
    - Dst: brpc::policy::RequestBody*::set_service
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:217,1
    - Dst: brpc::policy::RequestBody*::set_method_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:218,1
    - Dst: brpc::policy::RequestBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:219,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:220,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:223,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:223,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 225
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    - brpc::policy::RequestBody*::set_service
    - brpc::policy::RequestBody*::set_id
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:229,1
    - Dst: brpc::policy::RequestBody*::set_service
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:230,1
    - Dst: brpc::policy::RequestBody*::set_method_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:231,1
    - Dst: brpc::policy::RequestBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:232,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:233,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:235,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:235,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:236,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:236,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 237
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    - brpc::policy::RequestBody*::set_service
    - ASSERT_FALSE
    - brpc::policy::RequestBody*::set_id
    - Failed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:242,1
    - Dst: brpc::policy::PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:243,1
    - Dst: brpc::policy::ResponseBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:244,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:244,1
    - Dst: brpc::policy::PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:245,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:247,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:249,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:250,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 251
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - test::EchoResponse::message
    - Failed
    - brpc::policy::ResponseBody*::set_id
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:256,1
    - Dst: brpc::policy::PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:257,1
    - Dst: brpc::policy::ResponseBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:258,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:258,1
    - Dst: brpc::policy::PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:259,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:260,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:262,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - MakeResponseMessage
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - brpc::policy::ResponseBody*::set_id
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:266,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:267,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:268,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:274,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:275,1
    - Dst: brpc::policy::SerializePublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:276,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:277,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:277,1
    - Dst: brpc::policy::PackPublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:278,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:279,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:280,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:281,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:281,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:286,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:286,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:287,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:288,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:289,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:292,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:293,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:296,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:296,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:297,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:298,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:300,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:301,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 302
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::PackPublicPbrpcRequest
    - brpc::Controller::Failed
    - brpc::policy::ParseNsheadMessage
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - ASSERT_FALSE
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::call_id
    - brpc::Controller::set_request_compress_type
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:305,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:306,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:307,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:311,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:312,1
    - Dst: brpc::policy::SerializePublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:313,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:314,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:314,1
    - Dst: brpc::policy::PackPublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:315,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:316,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:317,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:318,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:318,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:323,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:323,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:324,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:325,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:328,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 304
    functionDepth: 1
    functionLinenumber: 304
    functionLinenumberEnd: 329
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::policy::PackPublicPbrpcRequest
    - ASSERT_TRUE
    - Failed
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:65,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:76,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:79,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 85
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:91,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:91,1
    - Dst: brpc::policy::PublicPbrpcServiceAdaptor::PublicPbrpcServiceAdaptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:100,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:100,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:105,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:105,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:106,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 107
    functionName: PublicPbrpcTest::PublicPbrpcTest
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - brpc::policy::PublicPbrpcServiceAdaptor::PublicPbrpcServiceAdaptor
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void PublicPbrpcTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: ~PublicPbrpcTest()
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PublicPbrpcTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:118,1
    - Dst: brpc::policy::VerifyNsheadRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: PublicPbrpcTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - EXPECT_TRUE
    - brpc::policy::VerifyNsheadRequest
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:124,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:127,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 132
    functionName: PublicPbrpcTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:137,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:139,1
    - Dst: brpc::policy::PublicPbrpcRequest*::requestbody_size
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:141,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:144,1
    - Dst: test::EchoRequest::SerializeToString
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:144,1
    - Dst: brpc::policy::PublicPbrpcRequest*::mutable_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:145,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:148,1
    - Dst: brpc::policy::PublicPbrpcRequest*::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - meta
    argTypes:
    - brpc::policy::PublicPbrpcRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 150
    functionName: PublicPbrpcTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - brpc::policy::PublicPbrpcRequest*::requestbody_size
    - test::EchoRequest::SerializeToString
    - brpc::policy::PublicPbrpcRequest*::mutable_requestbody
    - brpc::policy::PublicPbrpcRequest*::SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        brpc::policy::PublicPbrpcRequest*
      meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:155,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:157,1
    - Dst: brpc::policy::PublicPbrpcResponse*::responsebody_size
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:159,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:161,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:162,1
    - Dst: test::EchoResponse::SerializeToString
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:162,1
    - Dst: brpc::policy::PublicPbrpcResponse*::mutable_responsebody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:163,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:166,1
    - Dst: brpc::policy::PublicPbrpcResponse*::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - meta
    argTypes:
    - brpc::policy::PublicPbrpcResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 168
    functionName: PublicPbrpcTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - brpc::policy::PublicPbrpcResponse*::SerializeToZeroCopyStream
    - test::EchoResponse::set_message
    - brpc::policy::PublicPbrpcResponse*::responsebody_size
    - brpc::policy::PublicPbrpcResponse*::mutable_responsebody
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::SerializeToString
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeResponseMessage(\n        brpc::policy::PublicPbrpcResponse*
      meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:174,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:178,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:180,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:181,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:183,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:183,1
    - Dst: static_cast<brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:185,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:185,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:189,1
    - Dst: brpc::policy::PublicPbrpcResponse::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:189,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:190,1
    - Dst: brpc::policy::PublicPbrpcResponse::responsehead
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:190,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 191
    functionName: PublicPbrpcTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - static_cast<brpc::policy::MostCommonMessage*>
    - ioctl
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::policy::PublicPbrpcResponse::ParseFromZeroCopyStream
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::PublicPbrpcResponse::responsehead
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:203,1
    - Dst: brpc::policy::RequestBody*::set_service
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:204,1
    - Dst: brpc::policy::RequestBody*::set_method_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:205,1
    - Dst: brpc::policy::RequestBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:206,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:207,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:208,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:210,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:210,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 212
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    - brpc::policy::RequestBody*::set_service
    - brpc::policy::RequestBody*::set_id
    - SetFailed
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:216,1
    - Dst: brpc::policy::RequestBody*::set_service
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:217,1
    - Dst: brpc::policy::RequestBody*::set_method_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:218,1
    - Dst: brpc::policy::RequestBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:219,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:220,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:223,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:223,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 225
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    - brpc::policy::RequestBody*::set_service
    - brpc::policy::RequestBody*::set_id
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:229,1
    - Dst: brpc::policy::RequestBody*::set_service
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:230,1
    - Dst: brpc::policy::RequestBody*::set_method_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:231,1
    - Dst: brpc::policy::RequestBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:232,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:233,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:235,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:235,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:236,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:236,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 237
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    - brpc::policy::RequestBody*::set_service
    - ASSERT_FALSE
    - brpc::policy::RequestBody*::set_id
    - Failed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:242,1
    - Dst: brpc::policy::PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:243,1
    - Dst: brpc::policy::ResponseBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:244,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:244,1
    - Dst: brpc::policy::PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:245,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:247,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:249,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:249,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:250,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 251
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - test::EchoResponse::message
    - Failed
    - brpc::policy::ResponseBody*::set_id
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:256,1
    - Dst: brpc::policy::PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:257,1
    - Dst: brpc::policy::ResponseBody*::set_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:258,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:258,1
    - Dst: brpc::policy::PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:259,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:260,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:262,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - MakeResponseMessage
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - brpc::policy::ResponseBody*::set_id
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:266,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:267,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:268,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:274,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:275,1
    - Dst: brpc::policy::SerializePublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:276,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:277,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:277,1
    - Dst: brpc::policy::PackPublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:278,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:279,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:280,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:281,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:281,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:286,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:286,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:287,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:288,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:289,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:292,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:293,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:296,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:296,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:297,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:298,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:300,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:301,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 302
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::PackPublicPbrpcRequest
    - brpc::Controller::Failed
    - brpc::policy::ParseNsheadMessage
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - ASSERT_FALSE
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::call_id
    - brpc::Controller::set_request_compress_type
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:305,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:306,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:307,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:311,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:312,1
    - Dst: brpc::policy::SerializePublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:313,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:314,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:314,1
    - Dst: brpc::policy::PackPublicPbrpcRequest
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:315,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:316,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:317,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:318,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:318,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:323,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:323,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:324,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:325,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:328,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 304
    functionDepth: 1
    functionLinenumber: 304
    functionLinenumberEnd: 329
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_public_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::policy::PackPublicPbrpcRequest
    - ASSERT_TRUE
    - Failed
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(PublicPbrpcTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: StringSplitterTest::StringSplitterTest
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringSplitterTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~StringSplitterTest()
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StringSplitterTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/string_splitter_unittest.cpp:28,1
    - Dst: time
      Src: /src/brpc/test/string_splitter_unittest.cpp:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: StringSplitterTest::SetUp
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:40,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:41,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:41,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/string_splitter_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:46,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:47,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:47,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:52,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:53,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:53,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:56,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:57,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:58,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:58,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:65,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:65,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:71,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:71,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:77,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:78,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:83,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:84,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:84,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:89,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:90,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:90,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:94,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:95,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 96
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    - ASSERT_NE
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:105,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:106,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:106,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:110,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:111,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 112
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, single_word)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:119,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:119,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:124,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:125,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:125,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:130,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:131,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:136,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:137,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:142,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:147,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:148,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:148,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 149
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, starting_with_separator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:155,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:155,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:160,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:160,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:165,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:165,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:170,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:170,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:175,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:175,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:180,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:181,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:181,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 182
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, site_id_as_example)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:188,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:188,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:193,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:193,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:198,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:198,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:203,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:203,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:208,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:208,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:213,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:214,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:214,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:220,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:220,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:225,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:225,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:230,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:230,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:235,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:235,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:240,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:240,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:245,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:246,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 247
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    - ASSERT_FALSE
    - strncmp
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, number_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:263,1
    - Dst: butil::StringSplitter::to_int
      Src: /src/brpc/test/string_splitter_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:267,1
    - Dst: butil::StringSplitter::to_uint
      Src: /src/brpc/test/string_splitter_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:271,1
    - Dst: butil::StringSplitter::to_long
      Src: /src/brpc/test/string_splitter_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:276,1
    - Dst: butil::StringSplitter::to_ulong
      Src: /src/brpc/test/string_splitter_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:277,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:280,1
    - Dst: butil::StringSplitter::to_longlong
      Src: /src/brpc/test/string_splitter_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:284,1
    - Dst: butil::StringSplitter::to_ulonglong
      Src: /src/brpc/test/string_splitter_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:285,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:288,1
    - Dst: butil::StringSplitter::to_float
      Src: /src/brpc/test/string_splitter_unittest.cpp:288,1
    - Dst: ASSERT_FLOAT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:292,1
    - Dst: butil::StringSplitter::to_double
      Src: /src/brpc/test/string_splitter_unittest.cpp:292,1
    - Dst: ASSERT_DOUBLE_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:293,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:297,1
    - Dst: butil::StringSplitter::to_int8
      Src: /src/brpc/test/string_splitter_unittest.cpp:297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:298,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:302,1
    - Dst: butil::StringSplitter::to_uint8
      Src: /src/brpc/test/string_splitter_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:303,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:306,1
    - Dst: butil::StringSplitter::to_uint8
      Src: /src/brpc/test/string_splitter_unittest.cpp:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 307
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_DOUBLE_EQ
    - butil::StringSplitter::to_double
    - butil::StringSplitter::to_uint8
    - butil::StringSplitter::to_float
    - butil::StringSplitter::to_uint
    - ASSERT_FLOAT_EQ
    - butil::StringSplitter::to_ulong
    - butil::StringSplitter::to_int8
    - butil::StringSplitter::to_int
    - butil::StringSplitter::to_longlong
    - butil::StringSplitter::to_long
    - butil::StringSplitter::to_ulonglong
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, cast_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:314,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:314,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:319,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:319,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:323,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:329,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:329,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:334,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:334,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:345,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:345,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:350,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:350,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 355
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, split_limit_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:359,1
    - Dst: char::char
      Src: /src/brpc/test/string_splitter_unittest.cpp:360,1
    - Dst: memcpy
      Src: /src/brpc/test/string_splitter_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:367,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:368,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:368,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:373,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:374,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:379,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:380,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:380,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:385,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:386,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:386,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:391,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:392,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:392,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:396,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:397,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 400
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - memcpy
    - char::char
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, non_null_terminated_string)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
      Src: /src/brpc/test/string_splitter_unittest.cpp:408,1
    - Dst: std::string::data
      Src: /src/brpc/test/string_splitter_unittest.cpp:411,1
    - Dst: std::string::data
      Src: /src/brpc/test/string_splitter_unittest.cpp:411,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_splitter_unittest.cpp:411,1
    - Dst: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
      Src: /src/brpc/test/string_splitter_unittest.cpp:410,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/string_splitter_unittest.cpp:413,1
    - Dst: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
      Src: /src/brpc/test/string_splitter_unittest.cpp:413,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:418,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:419,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:419,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:422,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:423,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:423,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:426,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:427,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:427,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:430,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:431,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:431,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:434,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:435,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:435,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:438,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:439,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:442,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:443,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:443,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 449
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - value
    - std::string::c_str
    - butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    - std::string::data
    - ASSERT_FALSE
    - key
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, key_value_pairs_splitter_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: StringSplitterTest::StringSplitterTest
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringSplitterTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: ~StringSplitterTest()
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StringSplitterTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/string_splitter_unittest.cpp:28,1
    - Dst: time
      Src: /src/brpc/test/string_splitter_unittest.cpp:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: StringSplitterTest::SetUp
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - time
    - srand
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:40,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:41,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:41,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/string_splitter_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:46,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:47,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:47,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:52,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:53,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:53,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:56,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:57,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:58,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:58,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:65,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:65,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:66,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:71,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:71,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:77,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:78,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:78,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:83,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:84,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:84,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:89,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:90,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:90,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:94,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:95,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 96
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    - ASSERT_NE
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:105,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:106,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:106,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:110,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:111,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 112
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, single_word)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:119,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:119,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:120,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:124,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:125,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:125,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:130,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:131,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:136,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:137,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:142,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:142,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:143,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:147,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:148,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:148,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 149
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, starting_with_separator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:155,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:155,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:160,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:160,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:165,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:165,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:170,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:170,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:175,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:175,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:176,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:180,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:181,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:181,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 182
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, site_id_as_example)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:188,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:188,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:193,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:193,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:198,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:198,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:203,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:203,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:208,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:208,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:209,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:213,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:214,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:214,1
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:220,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:220,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:225,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:225,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:230,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:230,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:231,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:235,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:235,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:240,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:240,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:241,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:245,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:246,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 247
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    - ASSERT_FALSE
    - strncmp
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, number_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:263,1
    - Dst: butil::StringSplitter::to_int
      Src: /src/brpc/test/string_splitter_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:267,1
    - Dst: butil::StringSplitter::to_uint
      Src: /src/brpc/test/string_splitter_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:271,1
    - Dst: butil::StringSplitter::to_long
      Src: /src/brpc/test/string_splitter_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:276,1
    - Dst: butil::StringSplitter::to_ulong
      Src: /src/brpc/test/string_splitter_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:277,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:280,1
    - Dst: butil::StringSplitter::to_longlong
      Src: /src/brpc/test/string_splitter_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:284,1
    - Dst: butil::StringSplitter::to_ulonglong
      Src: /src/brpc/test/string_splitter_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:285,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:288,1
    - Dst: butil::StringSplitter::to_float
      Src: /src/brpc/test/string_splitter_unittest.cpp:288,1
    - Dst: ASSERT_FLOAT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:292,1
    - Dst: butil::StringSplitter::to_double
      Src: /src/brpc/test/string_splitter_unittest.cpp:292,1
    - Dst: ASSERT_DOUBLE_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:293,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:297,1
    - Dst: butil::StringSplitter::to_int8
      Src: /src/brpc/test/string_splitter_unittest.cpp:297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:298,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:302,1
    - Dst: butil::StringSplitter::to_uint8
      Src: /src/brpc/test/string_splitter_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:303,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:306,1
    - Dst: butil::StringSplitter::to_uint8
      Src: /src/brpc/test/string_splitter_unittest.cpp:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 307
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_DOUBLE_EQ
    - butil::StringSplitter::to_double
    - butil::StringSplitter::to_uint8
    - butil::StringSplitter::to_float
    - butil::StringSplitter::to_uint
    - ASSERT_FLOAT_EQ
    - butil::StringSplitter::to_ulong
    - butil::StringSplitter::to_int8
    - butil::StringSplitter::to_int
    - butil::StringSplitter::to_longlong
    - butil::StringSplitter::to_long
    - butil::StringSplitter::to_ulonglong
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, cast_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:314,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:314,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:319,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:319,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:320,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:323,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:329,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:329,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:330,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:334,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:334,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:335,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:345,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:345,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:346,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:350,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:350,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: strncmp
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:351,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 355
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - strncmp
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, split_limit_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/test/string_splitter_unittest.cpp:359,1
    - Dst: char::char
      Src: /src/brpc/test/string_splitter_unittest.cpp:360,1
    - Dst: memcpy
      Src: /src/brpc/test/string_splitter_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:367,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:368,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:368,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:373,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:374,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:379,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:380,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:380,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:385,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:386,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:386,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:391,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:392,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:392,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:396,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/test/string_splitter_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:397,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/test/string_splitter_unittest.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 400
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::StringSplitter::length
    - ASSERT_FALSE
    - butil::StringSplitter::field
    - memcpy
    - char::char
    - strlen
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, non_null_terminated_string)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
      Src: /src/brpc/test/string_splitter_unittest.cpp:408,1
    - Dst: std::string::data
      Src: /src/brpc/test/string_splitter_unittest.cpp:411,1
    - Dst: std::string::data
      Src: /src/brpc/test/string_splitter_unittest.cpp:411,1
    - Dst: std::string::size
      Src: /src/brpc/test/string_splitter_unittest.cpp:411,1
    - Dst: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
      Src: /src/brpc/test/string_splitter_unittest.cpp:410,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/string_splitter_unittest.cpp:413,1
    - Dst: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
      Src: /src/brpc/test/string_splitter_unittest.cpp:413,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:418,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:419,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:419,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:422,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:423,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:423,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:426,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:427,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:427,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:430,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:431,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:431,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:434,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:435,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:435,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:438,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:439,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/string_splitter_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:442,1
    - Dst: key
      Src: /src/brpc/test/string_splitter_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_splitter_unittest.cpp:443,1
    - Dst: value
      Src: /src/brpc/test/string_splitter_unittest.cpp:443,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/string_splitter_unittest.cpp:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 449
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/string_splitter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - value
    - std::string::c_str
    - butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    - std::string::data
    - ASSERT_FALSE
    - key
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(StringSplitterTest, key_value_pairs_splitter_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: TempFileTest::TempFileTest
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TempFileTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~TempFileTest()
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TempFileTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:39,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:39,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::TempFile::TempFile
    - stat
    - butil::TempFile::fname
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_create_tmp_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:46,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/temp_file_unittest.cpp:46,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:48,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:48,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:49,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:52,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:53,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 56
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - butil::TempFile::fname
    - butil::TempFile::save
    - butil::TempFile::TempFile
    - fclose
    - EXPECT_STREQ
    - ASSERT_NE
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_write_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:62,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/temp_file_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:64,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:64,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:64,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:66,1
    - Dst: strrchr
      Src: /src/brpc/test/temp_file_unittest.cpp:66,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:66,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:67,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:67,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:68,1
    - Dst: strerror
      Src: /src/brpc/test/temp_file_unittest.cpp:68,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:71,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:72,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 75
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - butil::TempFile::fname
    - ASSERT_STREQ
    - strerror
    - butil::TempFile::save
    - fclose
    - stat
    - EXPECT_STREQ
    - ASSERT_NE
    - strrchr
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, temp_with_specific_ext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:84,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:84,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:84,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:89,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:89,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/temp_file_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 91
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string::c_str
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    - stat
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_delete_when_exit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:95,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/temp_file_unittest.cpp:96,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:98,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:98,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:99,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:102,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:103,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 106
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::TempFile::save_format
    - fopen
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    - fclose
    - EXPECT_STREQ
    - ASSERT_NE
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_save_with_format)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/temp_file_unittest.cpp:111,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:114,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/temp_file_unittest.cpp:115,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:117,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:117,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:118,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:121,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:122,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 124
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::TempFile::save_format
    - fopen
    - butil::TempFile::fname
    - memset
    - butil::TempFile::TempFile
    - fclose
    - EXPECT_STREQ
    - ASSERT_NE
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_save_with_format_in_long_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:136,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/temp_file_unittest.cpp:136,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:138,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:138,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:139,1
    - Dst: bzero
      Src: /src/brpc/test/temp_file_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:142,1
    - Dst: fread
      Src: /src/brpc/test/temp_file_unittest.cpp:142,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:145,1
    - Dst: memcmp
      Src: /src/brpc/test/temp_file_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:149,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/temp_file_unittest.cpp:149,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:151,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:151,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:152,1
    - Dst: bzero
      Src: /src/brpc/test/temp_file_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:154,1
    - Dst: fread
      Src: /src/brpc/test/temp_file_unittest.cpp:154,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:157,1
    - Dst: memcmp
      Src: /src/brpc/test/temp_file_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 159
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - fopen
    - butil::TempFile::fname
    - fread
    - butil::TempFile::save_bin
    - bzero
    - butil::TempFile::TempFile
    - fclose
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, save_binary_twice)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: TempFileTest::TempFileTest
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TempFileTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~TempFileTest()
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TempFileTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:36,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:39,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:39,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::TempFile::TempFile
    - stat
    - butil::TempFile::fname
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_create_tmp_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:46,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/temp_file_unittest.cpp:46,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:48,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:48,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:49,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:52,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:53,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 56
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - butil::TempFile::fname
    - butil::TempFile::save
    - butil::TempFile::TempFile
    - fclose
    - EXPECT_STREQ
    - ASSERT_NE
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_write_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:62,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/temp_file_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:64,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:64,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:64,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:66,1
    - Dst: strrchr
      Src: /src/brpc/test/temp_file_unittest.cpp:66,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:66,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:67,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:67,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:68,1
    - Dst: strerror
      Src: /src/brpc/test/temp_file_unittest.cpp:68,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:71,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:72,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 75
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fopen
    - butil::TempFile::fname
    - ASSERT_STREQ
    - strerror
    - butil::TempFile::save
    - fclose
    - stat
    - EXPECT_STREQ
    - ASSERT_NE
    - strrchr
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, temp_with_specific_ext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:84,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:84,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:84,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:89,1
    - Dst: stat
      Src: /src/brpc/test/temp_file_unittest.cpp:89,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/temp_file_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 91
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::string::c_str
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    - stat
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_delete_when_exit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:95,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/temp_file_unittest.cpp:96,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:98,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:98,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:99,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:102,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:103,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 106
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::TempFile::save_format
    - fopen
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    - fclose
    - EXPECT_STREQ
    - ASSERT_NE
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_save_with_format)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/temp_file_unittest.cpp:111,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:114,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/temp_file_unittest.cpp:115,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:117,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:117,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:118,1
    - Dst: fgets
      Src: /src/brpc/test/temp_file_unittest.cpp:121,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:122,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/temp_file_unittest.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 124
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::TempFile::save_format
    - fopen
    - butil::TempFile::fname
    - memset
    - butil::TempFile::TempFile
    - fclose
    - EXPECT_STREQ
    - ASSERT_NE
    - fgets
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, should_save_with_format_in_long_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/temp_file_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:136,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/temp_file_unittest.cpp:136,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:138,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:138,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:139,1
    - Dst: bzero
      Src: /src/brpc/test/temp_file_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:142,1
    - Dst: fread
      Src: /src/brpc/test/temp_file_unittest.cpp:142,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:145,1
    - Dst: memcmp
      Src: /src/brpc/test/temp_file_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:149,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/temp_file_unittest.cpp:149,1
    - Dst: fopen
      Src: /src/brpc/test/temp_file_unittest.cpp:151,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/temp_file_unittest.cpp:151,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/temp_file_unittest.cpp:152,1
    - Dst: bzero
      Src: /src/brpc/test/temp_file_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:154,1
    - Dst: fread
      Src: /src/brpc/test/temp_file_unittest.cpp:154,1
    - Dst: fclose
      Src: /src/brpc/test/temp_file_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/temp_file_unittest.cpp:157,1
    - Dst: memcmp
      Src: /src/brpc/test/temp_file_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 159
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/temp_file_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - fopen
    - butil::TempFile::fname
    - fread
    - butil::TempFile::save_bin
    - bzero
    - butil::TempFile::TempFile
    - fclose
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(TempFileTest, save_binary_twice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: IntSingleton::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: IntSingleton
    signature: IntSingleton * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: Init5Singleton::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: Init5Singleton
    signature: Init5Singleton * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init5Singleton::Init5Singleton
      Src: /src/brpc/test/singleton_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: New
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 17
    functionsReached:
    - Init5Singleton::Init5Singleton
    linkageType: ''
    returnType: Init5Singleton
    signature: Init5Singleton * New()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IntSingleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: SingletonInt
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - IntSingleton::GetInstance
    linkageType: ''
    returnType: int
    signature: int * SingletonInt()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init5Singleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: SingletonInt5
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - Init5Singleton::GetInstance
    linkageType: ''
    returnType: int
    signature: int * SingletonInt5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/test/singleton_unittest.cc:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: Delete
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 18
    functionsReached:
    - Delete
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: CallbackSingleton::CallbackSingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: CallbackSingletonWithNoLeakTrait::CallbackSingletonWithNoLeakTrait
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingletonWithNoLeakTrait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: CallbackSingletonWithNoLeakTrait::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: CallbackSingletonWithNoLeakTrait
    signature: CallbackSingletonWithNoLeakTrait * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: CallbackSingletonWithLeakTrait::CallbackSingletonWithLeakTrait
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingletonWithLeakTrait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: CallbackSingletonWithLeakTrait::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: CallbackSingletonWithLeakTrait
    signature: CallbackSingletonWithLeakTrait * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: CallbackSingletonWithStaticTrait::CallbackSingletonWithStaticTrait
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingletonWithStaticTrait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: CallbackSingletonWithStaticTrait::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: CallbackSingletonWithStaticTrait
    signature: CallbackSingletonWithStaticTrait * GetInstance()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/test/singleton_unittest.cc:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - instance
    argTypes:
    - CallbackSingletonWithStaticTrait*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 108
    functionName: Delete
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 19
    functionsReached:
    - Delete
    linkageType: ''
    returnType: void
    signature: void Delete(CallbackSingletonWithStaticTrait* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: AlignedTestSingleton::AlignedTestSingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AlignedTestSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~AlignedTestSingleton()
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedTestSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 119
    functionName: AlignedTestSingleton::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: AlignedTestSingleton
    signature: AlignedTestSingleton * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithNoLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - CallOnQuit
    argTypes:
    - CallbackFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: SingletonNoLeak
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithNoLeakTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void SingletonNoLeak(CallbackFunc CallOnQuit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - CallOnQuit
    argTypes:
    - CallbackFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 131
    functionName: SingletonLeak
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithLeakTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void SingletonLeak(CallbackFunc CallOnQuit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: GetLeakySingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithLeakTrait::GetInstance
    linkageType: ''
    returnType: CallbackFunc
    signature: CallbackFunc * GetLeakySingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/test/singleton_unittest.cc:138,1
    - Dst: CallbackSingletonWithLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: DeleteLeakySingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - Delete
    - CallbackSingletonWithLeakTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void DeleteLeakySingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithStaticTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - CallOnQuit
    argTypes:
    - CallbackFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: SingletonStatic
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithStaticTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void SingletonStatic(CallbackFunc CallOnQuit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithStaticTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: GetStaticSingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithStaticTrait::GetInstance
    linkageType: ''
    returnType: CallbackFunc
    signature: CallbackFunc * GetStaticSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: IntSingleton::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 1
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: IntSingleton
    signature: IntSingleton * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: Init5Singleton::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 1
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: Init5Singleton
    signature: Init5Singleton * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init5Singleton::Init5Singleton
      Src: /src/brpc/test/singleton_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: New
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 17
    functionsReached:
    - Init5Singleton::Init5Singleton
    linkageType: ''
    returnType: Init5Singleton
    signature: Init5Singleton * New()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IntSingleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: SingletonInt
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - IntSingleton::GetInstance
    linkageType: ''
    returnType: int
    signature: int * SingletonInt()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init5Singleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: SingletonInt5
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - Init5Singleton::GetInstance
    linkageType: ''
    returnType: int
    signature: int * SingletonInt5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/test/singleton_unittest.cc:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: Delete
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 21
    functionsReached:
    - Delete
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: CallbackSingleton::CallbackSingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: CallbackSingletonWithNoLeakTrait::CallbackSingletonWithNoLeakTrait
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingletonWithNoLeakTrait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: CallbackSingletonWithNoLeakTrait::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 1
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: CallbackSingletonWithNoLeakTrait
    signature: CallbackSingletonWithNoLeakTrait * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: CallbackSingletonWithLeakTrait::CallbackSingletonWithLeakTrait
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingletonWithLeakTrait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: CallbackSingletonWithLeakTrait::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 3
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: CallbackSingletonWithLeakTrait
    signature: CallbackSingletonWithLeakTrait * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: CallbackSingletonWithStaticTrait::CallbackSingletonWithStaticTrait
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackSingletonWithStaticTrait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: CallbackSingletonWithStaticTrait::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 2
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: CallbackSingletonWithStaticTrait
    signature: CallbackSingletonWithStaticTrait * GetInstance()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/test/singleton_unittest.cc:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - instance
    argTypes:
    - CallbackSingletonWithStaticTrait*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 108
    functionName: Delete
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 22
    functionsReached:
    - Delete
    linkageType: ''
    returnType: void
    signature: void Delete(CallbackSingletonWithStaticTrait* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: AlignedTestSingleton::AlignedTestSingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AlignedTestSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~AlignedTestSingleton()
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedTestSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/test/singleton_unittest.cc:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 119
    functionName: AlignedTestSingleton::GetInstance
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: AlignedTestSingleton
    signature: AlignedTestSingleton * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithNoLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - CallOnQuit
    argTypes:
    - CallbackFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: SingletonNoLeak
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithNoLeakTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void SingletonNoLeak(CallbackFunc CallOnQuit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - CallOnQuit
    argTypes:
    - CallbackFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 131
    functionName: SingletonLeak
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithLeakTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void SingletonLeak(CallbackFunc CallOnQuit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: GetLeakySingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithLeakTrait::GetInstance
    linkageType: ''
    returnType: CallbackFunc
    signature: CallbackFunc * GetLeakySingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/test/singleton_unittest.cc:138,1
    - Dst: CallbackSingletonWithLeakTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: DeleteLeakySingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - Delete
    - CallbackSingletonWithLeakTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void DeleteLeakySingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithStaticTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - CallOnQuit
    argTypes:
    - CallbackFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: SingletonStatic
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithStaticTrait::GetInstance
    linkageType: ''
    returnType: void
    signature: void SingletonStatic(CallbackFunc CallOnQuit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallbackSingletonWithStaticTrait::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: GetStaticSingleton
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackSingletonWithStaticTrait::GetInstance
    linkageType: ''
    returnType: CallbackFunc
    signature: CallbackFunc * GetStaticSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: SingletonTest::SingletonTest
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SingletonTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 160
    functionName: SingletonTest::OVERRIDE
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/singleton_unittest.cc:164,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/singleton_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/singleton_unittest.cc:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 170
    functionName: SingletonTest::VerifiesCallbacks
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void VerifiesCallbacks()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/singleton_unittest.cc:173,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/singleton_unittest.cc:174,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/singleton_unittest.cc:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 179
    functionName: SingletonTest::VerifiesCallbacksNotCalled
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void VerifiesCallbacksNotCalled()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 183
    functionName: SingletonTest::CallbackNoLeak
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackNoLeak()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 187
    functionName: SingletonTest::CallbackLeak
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackLeak()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: SingletonTest::CallbackStatic
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CallbackStatic()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ShadowingAtExitManager::ShadowingAtExitManager
      Src: /src/brpc/test/singleton_unittest.cc:210,1
    - Dst: SingletonInt
      Src: /src/brpc/test/singleton_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:218,1
    - Dst: SingletonInt
      Src: /src/brpc/test/singleton_unittest.cc:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:219,1
    - Dst: SingletonInt5
      Src: /src/brpc/test/singleton_unittest.cc:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:225,1
    - Dst: SingletonNoLeak
      Src: /src/brpc/test/singleton_unittest.cc:227,1
    - Dst: SingletonLeak
      Src: /src/brpc/test/singleton_unittest.cc:228,1
    - Dst: SingletonStatic
      Src: /src/brpc/test/singleton_unittest.cc:229,1
    - Dst: GetStaticSingleton
      Src: /src/brpc/test/singleton_unittest.cc:230,1
    - Dst: GetLeakySingleton
      Src: /src/brpc/test/singleton_unittest.cc:231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/singleton_unittest.cc:232,1
    - Dst: VerifiesCallbacks
      Src: /src/brpc/test/singleton_unittest.cc:236,1
    - Dst: DeleteLeakySingleton
      Src: /src/brpc/test/singleton_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:241,1
    - Dst: GetStaticSingleton
      Src: /src/brpc/test/singleton_unittest.cc:241,1
    - Dst: butil::ShadowingAtExitManager::ShadowingAtExitManager
      Src: /src/brpc/test/singleton_unittest.cc:244,1
    - Dst: SingletonInt
      Src: /src/brpc/test/singleton_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:248,1
    - Dst: SingletonInt5
      Src: /src/brpc/test/singleton_unittest.cc:251,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:252,1
    - Dst: Resurrect
      Src: /src/brpc/test/singleton_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/singleton_unittest.cc:258,1
    - Dst: GetStaticSingleton
      Src: /src/brpc/test/singleton_unittest.cc:258,1
    - Dst: VerifiesCallbacksNotCalled
      Src: /src/brpc/test/singleton_unittest.cc:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - GetLeakySingleton
    - EXPECT_TRUE
    - VerifiesCallbacksNotCalled
    - SingletonStatic
    - VerifiesCallbacks
    - SingletonInt
    - SingletonLeak
    - GetStaticSingleton
    - Resurrect
    - EXPECT_EQ
    - DeleteLeakySingleton
    - SingletonInt5
    - SingletonNoLeak
    linkageType: ''
    returnType: void
    signature: void TEST_F(SingletonTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - ptr
    - ','
    - align
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: EXPECT_ALIGNED
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXPECT_ALIGNED(ptr, align)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IntSingleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:275,1
    - Dst: IntSingleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:277,1
    - Dst: IntSingleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:279,1
    - Dst: IntSingleton::GetInstance
      Src: /src/brpc/test/singleton_unittest.cc:281,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/singleton_unittest.cc:283,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/singleton_unittest.cc:284,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/singleton_unittest.cc:285,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/singleton_unittest.cc:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 287
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/singleton_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_ALIGNED
    - IntSingleton::GetInstance
    linkageType: ''
    returnType: void
    signature: void TEST_F(SingletonTest, Alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: quit_handler
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void quit_handler(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: AlignedIntWrapper
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT AlignedIntWrapper
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: PlayerArg
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PlayerArg
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PlayerArg*>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:60,1
    - Dst: read
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:63,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:66,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:66,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:70,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:70,1
    - Dst: write
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:75,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:76,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:76,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 82
    functionName: pipe_player
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_numeric_id
    - read
    - printf
    - write
    - static_cast<PlayerArg*>
    linkageType: ''
    returnType: void
    signature: void * pipe_player(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PlayerArg*>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:87,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:90,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 98
    functionName: futex_player
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wake_private
    - bthread::futex_wait_private
    - static_cast<PlayerArg*>
    linkageType: ''
    returnType: void
    signature: void * futex_player(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PlayerArg*>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:101,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:104,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 112
    functionName: butex_player
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - bthread::butex_wake
    - static_cast<PlayerArg*>
    linkageType: ''
    returnType: void
    signature: void * butex_player(void* void_arg)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:123,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:124,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:124,1
    - Dst: PlayerArg::PlayerArg
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:127,1
    - Dst: AlignedIntWrapper::AlignedIntWrapper
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:132,1
    - Dst: AlignedIntWrapper::AlignedIntWrapper
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:134,1
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:139,1
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:144,1
    - Dst: PlayerArg::PlayerArg
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:164,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:165,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:167,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:168,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:170,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:171,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:179,1
    - Dst: write
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:179,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:182,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:185,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:187,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:194,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:195,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:196,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:197,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:205,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:206,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:207,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:209,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:210,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 86
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 220
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pipe
    - signal
    - butil::Timer::stop
    - butil::Timer::m_elapsed
    - butil::Timer::start
    - bthread::butex_wake
    - pthread_create
    - bthread_start_background
    - printf
    - PlayerArg::PlayerArg
    - AlignedIntWrapper::AlignedIntWrapper
    - bthread::futex_wake_private
    - sleep
    - bthread::butex_create_checked<int>
    - write
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(PingPongTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: quit_handler
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void quit_handler(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: AlignedIntWrapper
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT AlignedIntWrapper
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: PlayerArg
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PlayerArg
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PlayerArg*>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:60,1
    - Dst: read
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:63,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:66,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:66,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:70,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:70,1
    - Dst: write
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:75,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:76,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:76,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 82
    functionName: pipe_player
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_numeric_id
    - read
    - printf
    - write
    - static_cast<PlayerArg*>
    linkageType: ''
    returnType: void
    signature: void * pipe_player(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PlayerArg*>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:87,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:90,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 98
    functionName: futex_player
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wake_private
    - bthread::futex_wait_private
    - static_cast<PlayerArg*>
    linkageType: ''
    returnType: void
    signature: void * futex_player(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PlayerArg*>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:101,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:104,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 112
    functionName: butex_player
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - bthread::butex_wake
    - static_cast<PlayerArg*>
    linkageType: ''
    returnType: void
    signature: void * butex_player(void* void_arg)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:123,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:124,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:124,1
    - Dst: PlayerArg::PlayerArg
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:127,1
    - Dst: AlignedIntWrapper::AlignedIntWrapper
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:132,1
    - Dst: AlignedIntWrapper::AlignedIntWrapper
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:134,1
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:139,1
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:141,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:144,1
    - Dst: PlayerArg::PlayerArg
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:164,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:165,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:167,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:168,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:170,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:171,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:179,1
    - Dst: write
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:179,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:182,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:185,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:187,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:194,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:195,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:196,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:197,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:205,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:206,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:207,1
    - Dst: printf
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:209,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_ping_pong_unittest.cpp:210,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 86
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 220
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_ping_pong_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pipe
    - signal
    - butil::Timer::stop
    - butil::Timer::m_elapsed
    - butil::Timer::start
    - bthread::butex_wake
    - pthread_create
    - bthread_start_background
    - printf
    - PlayerArg::PlayerArg
    - AlignedIntWrapper::AlignedIntWrapper
    - bthread::futex_wake_private
    - sleep
    - bthread::butex_create_checked<int>
    - write
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST(PingPongTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:23,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:25,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:25,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:26,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:26,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:27,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:27,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:28,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:28,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:29,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:29,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:30,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:30,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:31,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:31,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:32,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:32,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:33,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:33,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:34,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:34,1
    - Dst: brpc::ParseURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:39,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:40,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 43
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::user_info
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - std::string::c_str
    - brpc::URI::port
    - brpc::URI::SetHttpURL
    - ASSERT_FALSE
    - brpc::ParseURL
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::fragment
    - brpc::URI::host
    - brpc::URI::scheme
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, everything)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:47,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:48,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:49,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:50,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:51,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:52,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:53,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:53,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:54,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:54,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:55,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:56,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:57,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:57,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:58,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:60,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:61,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:62,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:63,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:64,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:65,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:66,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:67,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:68,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:69,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:69,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:70,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:71,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:73,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:74,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:75,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:76,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:76,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:77,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:78,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:79,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:80,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:82,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:83,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:84,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:85,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:86,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:87,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:88,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:89,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 90
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::user_info
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - brpc::URI::port
    - brpc::URI::SetHttpURL
    - brpc::URI::QueryCount
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::fragment
    - brpc::URI::host
    - brpc::URI::scheme
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, only_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:94,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:95,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:96,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:97,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:98,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:99,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:100,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:100,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:101,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:102,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:103,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:104,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 105
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::user_info
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - brpc::URI::port
    - brpc::URI::SetHttpURL
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::fragment
    - brpc::URI::host
    - brpc::URI::scheme
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, no_scheme)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:109,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:110,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:111,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:112,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:113,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:114,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:115,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:116,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:117,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:117,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:118,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:119,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 120
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::user_info
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - brpc::URI::port
    - brpc::URI::SetHttpURL
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::fragment
    - brpc::URI::host
    - brpc::URI::scheme
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, no_scheme_and_user_info)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:124,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:124,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:125,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:126,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:127,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:128,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:129,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:130,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:130,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:131,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:132,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:132,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:133,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:133,1
    - Dst: brpc::URI::set_path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:137,1
    - Dst: brpc::URI::scheme
      Src: /src/brpc/test/brpc_uri_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:138,1
    - Dst: brpc::URI::port
      Src: /src/brpc/test/brpc_uri_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:139,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:140,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:141,1
    - Dst: brpc::URI::user_info
      Src: /src/brpc/test/brpc_uri_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:142,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:142,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:143,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:144,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:144,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:145,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 146
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::user_info
    - brpc::URI::scheme
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - brpc::URI::port
    - brpc::URI::SetHttpURL
    - ASSERT_FALSE
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::fragment
    - brpc::URI::set_path
    - brpc::URI::host
    - brpc::URI::status
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, no_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:151,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:151,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:152,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:152,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:153,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:154,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:155,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 156
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::URI::GetQuery
    - ASSERT_FALSE
    - brpc::URI::URI
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, consecutive_ampersand)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:161,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:162,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:163,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:164,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:165,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:166,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 167
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::URI::URI
    - ASSERT_EQ
    - brpc::URI::GetQuery
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, only_equality)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:172,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:173,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:174,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:175,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:175,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:178,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:178,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:181,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:182,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::URI::GetQuery
    - brpc::URI::SetQuery
    - brpc::URI::URI
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, set_query)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:186,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:188,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:188,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:189,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:189,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:190,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:191,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:192,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:192,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:195,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:196,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:196,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:197,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:197,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:198,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:199,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:199,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:202,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:202,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:203,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:204,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:205,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:206,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:207,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - brpc::URI::SetH2Path
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::fragment
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, set_h2_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:211,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:214,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:215,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:216,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:216,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:217,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:218,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:219,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:219,1
    - Dst: brpc::URI::GenerateH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:222,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:225,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:226,1
    - Dst: brpc::URI::RemoveQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:227,1
    - Dst: brpc::URI::QueryCount
      Src: /src/brpc/test/brpc_uri_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:228,1
    - Dst: brpc::URI::query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:228,1
    - Dst: brpc::URI::GenerateH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:230,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:234,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:234,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:235,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:236,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:237,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:238,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:239,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:239,1
    - Dst: brpc::URI::GenerateH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:242,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:246,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:247,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:247,1
    - Dst: brpc::URI::GenerateH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:250,1
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:254,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:254,1
    - Dst: brpc::URI::GenerateH2Path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 258
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::GenerateH2Path
    - ASSERT_EQ
    - ASSERT_TRUE
    - brpc::URI::GetQuery
    - brpc::URI::RemoveQuery
    - brpc::URI::SetQuery
    - brpc::URI::SetH2Path
    - brpc::URI::QueryCount
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::query
    - brpc::URI::fragment
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, generate_h2_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:263,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:264,1
    - Dst: brpc::URI::GetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 265
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::URI::URI
    - ASSERT_EQ
    - brpc::URI::GetQuery
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, only_one_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:269,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:270,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:271,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::SetHttpURL
    - brpc::URI::URI
    - brpc::URI::path
    - brpc::URI::host
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, empty_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:276,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:276,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:277,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:278,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:278,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:279,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:280,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:280,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:281,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:282,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:282,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:283,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:284,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:284,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:285,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:286,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:286,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:287,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:288,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:288,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:289,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:290,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:290,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:291,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:292,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:292,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:293,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:294,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:294,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:295,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:296,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:296,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:297,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 298
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::URI::SetHttpURL
    - ASSERT_STREQ
    - brpc::URI::URI
    - brpc::URI::status
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, invalid_spaces)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:302,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:303,1
    - Dst: brpc::URI::query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 300
    functionDepth: 1
    functionLinenumber: 300
    functionLinenumberEnd: 304
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::SetHttpURL
    - ASSERT_EQ
    - brpc::URI::URI
    - brpc::URI::query
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, invalid_query)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:310,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:310,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_uri_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:313,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:313,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:314,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/test/brpc_uri_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:316,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:319,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:319,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:320,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_uri_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:322,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:322,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:323,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/test/brpc_uri_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:325,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:325,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:327,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:329,1
    - Dst: brpc::URI::RemoveQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:329,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:330,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_uri_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:332,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:332,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:333,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/test/brpc_uri_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:335,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 336
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::ostringstream::str
    - brpc::URI::RemoveQuery
    - brpc::URI::SetQuery
    - brpc::URI::SetHttpURL
    - brpc::URI::Print
    - brpc::URI::PrintWithoutHost
    - brpc::URI::URI
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, print_url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:341,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 343
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::SetHttpURL
    - ASSERT_EQ
    - brpc::URI::URI
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, copy_and_assign)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:349,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:350,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:352,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:353,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:355,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:356,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:356,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 359
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::key
    - ASSERT_FALSE
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:364,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:366,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:366,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:367,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:368,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:370,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:372,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:372,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:374,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:376,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:376,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 379
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_remove_current_key_and_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:388,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:389,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:393,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 394
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_random_remove)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:400,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:404,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:407,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:412,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 396
    functionDepth: 1
    functionLinenumber: 396
    functionLinenumberEnd: 413
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_onekey_remove)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:418,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:420,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:420,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:423,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:423,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:426,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:426,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:428,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 429
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_consecutive_ampersand)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:435,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:436,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:438,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:439,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:441,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:442,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:442,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:445,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:446,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:446,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:449,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:449,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 450
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - brpc::QueryRemover::key
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_only_equality)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:456,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:457,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:457,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:458,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:461,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:461,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 462
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - brpc::QueryRemover::key
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_only_one_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:468,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:469,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:469,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:474,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 464
    functionDepth: 1
    functionLinenumber: 464
    functionLinenumberEnd: 475
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::key
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_no_modify)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:482,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:483,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:483,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:484,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:487,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:488,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 477
    functionDepth: 1
    functionLinenumber: 477
    functionLinenumberEnd: 489
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - brpc::QueryRemover::key
    - brpc::QueryRemover::modified_query
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, query_remover_key_value_not_changed_after_modified_query)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:493,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 491
    functionDepth: 1
    functionLinenumber: 491
    functionLinenumberEnd: 494
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::SetHttpURL
    - ASSERT_EQ
    - brpc::URI::URI
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, valid_character)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Simple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::Reset
      Src: /src/brpc/test/string_tokenizer_unittest.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 54
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::Reset
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, RetDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 102
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ManyDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 151
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token_is_delim
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseHeader)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:156,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 171
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 185
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Malformed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 202
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Multiple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:221,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 230
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Simple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::Reset
      Src: /src/brpc/test/string_tokenizer_unittest.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 54
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::Reset
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, RetDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 102
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ManyDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 151
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token_is_delim
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseHeader)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:156,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 171
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 185
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Malformed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 202
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Multiple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:221,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 230
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Simple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::Reset
      Src: /src/brpc/test/string_tokenizer_unittest.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 54
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::Reset
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, RetDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 102
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ManyDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 151
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token_is_delim
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseHeader)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:156,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 171
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 185
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Malformed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 202
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Multiple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:221,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 230
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:29,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 32
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Simple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:39,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:40,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:43,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:46,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:49,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:51,1
    - Dst: StringTokenizer::Reset
      Src: /src/brpc/test/string_tokenizer_unittest.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 54
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::Reset
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, Reset)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:59,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:61,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:62,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:64,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:65,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:68,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:74,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:80,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, RetDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:90,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:92,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:99,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 102
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ManyDelims)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_options
      Src: /src/brpc/test/string_tokenizer_unittest.cc:107,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:111,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:119,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:121,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:125,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:127,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:129,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:131,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:133,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:137,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:139,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:143,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:145,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:147,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:149,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    - Dst: StringTokenizer::token_is_delim
      Src: /src/brpc/test/string_tokenizer_unittest.cc:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 151
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - StringTokenizer::set_options
    - string
    - StringTokenizer::token_is_delim
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseHeader)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:156,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:167,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:168,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 171
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:178,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:182,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 185
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Malformed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:190,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:193,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:195,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 202
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_Multiple)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:212,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:213,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringTokenizer::set_quote_chars
      Src: /src/brpc/test/string_tokenizer_unittest.cc:221,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:224,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: string
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: StringTokenizer::token
      Src: /src/brpc/test/string_tokenizer_unittest.cc:227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    - Dst: StringTokenizer::GetNext
      Src: /src/brpc/test/string_tokenizer_unittest.cc:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 230
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_tokenizer_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string
    - StringTokenizer::set_quote_chars
    - StringTokenizer::token
    - EXPECT_FALSE
    - EXPECT_EQ
    - StringTokenizer::GetNext
    linkageType: ''
    returnType: void
    signature: void TEST(StringTokenizerTest, ParseQuotedString_EscapedQuotes2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:40,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:41,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:65,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:76,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:79,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 85
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:91,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:98,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:103,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:104,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 105
    functionName: SofaTest::SofaTest
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void SofaTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: ~SofaTest()
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SofaTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:116,1
    - Dst: brpc::policy::VerifySofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: SofaTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - brpc::policy::VerifySofaRequest
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:122,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:125,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 130
    functionName: SofaTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:137,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:137,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:140,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:142,1
    - Dst: test::EchoRequest::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::SofaRpcMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 144
    functionName: SofaTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoRequest::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        const
      brpc::policy::SofaRpcMeta& meta)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:151,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:151,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:154,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:156,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::SofaRpcMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 158
    functionName: SofaTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeResponseMessage(\n        const
      brpc::policy::SofaRpcMeta& meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:164,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:168,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:170,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:171,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:173,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:173,1
    - Dst: static_cast<brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:175,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:175,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:179,1
    - Dst: brpc::policy::SofaRpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:180,1
    - Dst: brpc::policy::SofaRpcMeta::error_code
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 181
    functionName: SofaTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::SofaRpcMeta::error_code
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::policy::ParseSofaMessage
    - ioctl
    - brpc::ParseResult::message
    - brpc::policy::SofaRpcMeta::ParseFromZeroCopyStream
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:184,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:185,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:186,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:191,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:192,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:193,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:194,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:194,1
    - Dst: brpc::policy::PackSofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:195,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:196,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:197,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:199,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:199,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:203,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:203,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:204,1
    - Dst: SofaTest::ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:205,1
    - Dst: SofaTest::CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - type
    argTypes:
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 183
    functionDepth: 2
    functionLinenumber: 183
    functionLinenumberEnd: 207
    functionName: SofaTest::TestSofaCompress
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SofaTest::ProcessMessage
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackSofaRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::policy::ParseSofaMessage
    - SofaTest::CheckResponseCode
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - brpc::Controller::set_request_compress_type
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TestSofaCompress(brpc::CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:219,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:220,1
    - Dst: brpc::policy::SofaRpcMeta::set_method
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:221,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:222,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:223,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:225,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:225,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 227
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - SetFailed
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:231,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:232,1
    - Dst: brpc::policy::SofaRpcMeta::set_method
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:233,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:234,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:237,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:237,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 239
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:243,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:244,1
    - Dst: brpc::policy::SofaRpcMeta::set_method
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:245,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:246,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:248,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:248,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 250
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:255,1
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:256,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:257,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:257,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:259,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:261,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:262,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - test::EchoResponse::message
    - Failed
    - brpc::policy::SofaRpcMeta::set_type
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:268,1
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:269,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:270,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:270,1
    - Dst: brpc::policy::SofaRpcMeta::set_error_code
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:271,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:272,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:274,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 275
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_error_code
    - MakeResponseMessage
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::Controller::ErrorCode
    - brpc::policy::SofaRpcMeta::set_type
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:278,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:279,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:280,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:286,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:287,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:288,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:288,1
    - Dst: brpc::policy::PackSofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:289,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:290,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:291,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:292,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:292,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:297,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:297,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:298,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:299,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:300,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:303,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:304,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:307,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:307,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:308,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:311,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:312,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 313
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - VerifyMessage
    - brpc::SerializeRequestDefault
    - ASSERT_FALSE
    - test::EchoRequest::set_message
    - brpc::policy::PackSofaRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:316,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:317,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:318,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:322,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:323,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:324,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:325,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:325,1
    - Dst: brpc::policy::PackSofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:326,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:327,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:328,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:329,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:329,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:334,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:334,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:335,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:336,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:339,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 340
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackSofaRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSofaCompress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:343,1
    - Dst: TestSofaCompress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:344,1
    - Dst: TestSofaCompress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 346
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSofaCompress
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, sofa_compress)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:65,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:76,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:79,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:83,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 85
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:91,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:98,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:103,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:104,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 105
    functionName: SofaTest::SofaTest
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void SofaTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: ~SofaTest()
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SofaTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:116,1
    - Dst: brpc::policy::VerifySofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: SofaTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - brpc::policy::VerifySofaRequest
    - EXPECT_TRUE
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:122,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:125,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 130
    functionName: SofaTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:137,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:137,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:140,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:142,1
    - Dst: test::EchoRequest::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::SofaRpcMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 144
    functionName: SofaTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoRequest::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        const
      brpc::policy::SofaRpcMeta& meta)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:151,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:151,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:154,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:156,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' meta'
    argTypes:
    - brpc::policy::SofaRpcMeta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 158
    functionName: SofaTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - SerializeToZeroCopyStream
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeResponseMessage(\n        const
      brpc::policy::SofaRpcMeta& meta)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:164,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:168,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:170,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:171,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:173,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:173,1
    - Dst: static_cast<brpc::policy::MostCommonMessage*>
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:175,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:175,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:179,1
    - Dst: brpc::policy::SofaRpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:180,1
    - Dst: brpc::policy::SofaRpcMeta::error_code
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 181
    functionName: SofaTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - brpc::policy::SofaRpcMeta::error_code
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::policy::ParseSofaMessage
    - ioctl
    - brpc::ParseResult::message
    - brpc::policy::SofaRpcMeta::ParseFromZeroCopyStream
    - butil::IOPortal::IOPortal
    - EXPECT_GT
    - EXPECT_EQ
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void CheckResponseCode(bool expect_empty, int expect_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:184,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:185,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:186,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:191,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:192,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:193,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:194,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:194,1
    - Dst: brpc::policy::PackSofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:195,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:196,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:197,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:199,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:199,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:203,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:203,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:204,1
    - Dst: SofaTest::ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:205,1
    - Dst: SofaTest::CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - type
    argTypes:
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 183
    functionDepth: 2
    functionLinenumber: 183
    functionLinenumberEnd: 207
    functionName: SofaTest::TestSofaCompress
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SofaTest::ProcessMessage
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackSofaRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::policy::ParseSofaMessage
    - SofaTest::CheckResponseCode
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - brpc::Controller::set_request_compress_type
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TestSofaCompress(brpc::CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:219,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:220,1
    - Dst: brpc::policy::SofaRpcMeta::set_method
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:221,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:222,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:223,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:225,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:225,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 227
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - SetFailed
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:231,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:232,1
    - Dst: brpc::policy::SofaRpcMeta::set_method
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:233,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:234,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:237,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:237,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 239
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:243,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:244,1
    - Dst: brpc::policy::SofaRpcMeta::set_method
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:245,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:246,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:248,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:248,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 250
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - CheckResponseCode
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:255,1
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:256,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:257,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:257,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:259,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:261,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:262,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - test::EchoResponse::message
    - Failed
    - brpc::policy::SofaRpcMeta::set_type
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:268,1
    - Dst: brpc::policy::SofaRpcMeta::set_type
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:269,1
    - Dst: brpc::policy::SofaRpcMeta::set_sequence_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:270,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:270,1
    - Dst: brpc::policy::SofaRpcMeta::set_error_code
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:271,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:272,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:274,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 275
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::SofaRpcMeta::set_error_code
    - MakeResponseMessage
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::Controller::ErrorCode
    - brpc::policy::SofaRpcMeta::set_type
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, process_response_error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:278,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:279,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:280,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:286,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:287,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:288,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:288,1
    - Dst: brpc::policy::PackSofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:289,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:290,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:291,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:292,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:292,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:297,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:297,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:298,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:299,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:300,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:303,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:304,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:307,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:307,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:308,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:309,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:311,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:312,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 313
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - VerifyMessage
    - brpc::SerializeRequestDefault
    - ASSERT_FALSE
    - test::EchoRequest::set_message
    - brpc::policy::PackSofaRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - butil::IOPortal::IOPortal
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:316,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:317,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:318,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:322,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:323,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:324,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:325,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:325,1
    - Dst: brpc::policy::PackSofaRequest
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:326,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:327,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:328,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:329,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:329,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:334,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:334,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:335,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:336,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:339,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 340
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_message
    - ASSERT_FALSE
    - brpc::policy::PackSofaRequest
    - brpc::Controller::Failed
    - brpc::Controller::call_id
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestSofaCompress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:343,1
    - Dst: TestSofaCompress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:344,1
    - Dst: TestSofaCompress
      Src: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 346
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_sofa_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestSofaCompress
    linkageType: ''
    returnType: void
    signature: void TEST_F(SofaTest, sofa_compress)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 16
    functionName: butil::TrivialThread::TrivialThread
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TrivialThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: butil::TrivialThread::ThreadMain
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: butil::TrivialThread::did_run
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool did_run() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:34,1
    - Dst: TrivialThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:34,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:35,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:35,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:36,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:37,1
    - Dst: TrivialThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 38
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - TrivialThread::did_run
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, Trivial)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:42,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:44,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:45,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:45,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:47,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:47,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:48,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:49,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:51,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:51,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 52
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_FALSE
    - arraysize
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - did_run
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, TrivialTimesTen)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::FunctionTestThread::FunctionTestThread
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FunctionTestThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:61,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/test/platform_thread_unittest.cc:62,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/platform_thread_unittest.cc:63,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/platform_thread_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/platform_thread_unittest.cc:66,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:66,1
    - Dst: butil::TrivialThread::ThreadMain
      Src: /src/brpc/test/platform_thread_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 69
    functionName: butil::FunctionTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::YieldCurrentThread
    - butil::TrivialThread::ThreadMain
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: butil::FunctionTestThread::thread_id
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PlatformThreadId
    signature: PlatformThreadId thread_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:80,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:85,1
    - Dst: FunctionTestThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:85,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:86,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:86,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:87,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:88,1
    - Dst: FunctionTestThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:88,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/platform_thread_unittest.cc:89,1
    - Dst: FunctionTestThread::thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/platform_thread_unittest.cc:92,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 93
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - FunctionTestThread::did_run
    - butil::PlatformThread::CurrentId
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - EXPECT_NE
    - butil::PlatformThread::Create
    - EXPECT_EQ
    - FunctionTestThread::thread_id
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, Function)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:96,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:99,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:102,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:102,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:104,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:104,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:105,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:106,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:107,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:108,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:108,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/platform_thread_unittest.cc:109,1
    - Dst: thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:109,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/platform_thread_unittest.cc:113,1
    - Dst: thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:113,1
    - Dst: thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/platform_thread_unittest.cc:118,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:118,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 119
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - thread_id
    - butil::PlatformThread::CurrentId
    - ASSERT_FALSE
    - arraysize
    - butil::PlatformThread::Join
    - EXPECT_NE
    - butil::PlatformThread::Create
    - EXPECT_EQ
    - did_run
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, FunctionTimesTen)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 16
    functionName: butil::TrivialThread::TrivialThread
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TrivialThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: butil::TrivialThread::ThreadMain
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: butil::TrivialThread::did_run
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool did_run() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:34,1
    - Dst: TrivialThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:34,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:35,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:35,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:36,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:37,1
    - Dst: TrivialThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 38
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - TrivialThread::did_run
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, Trivial)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:42,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:44,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:45,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:45,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:47,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:47,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:48,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:49,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:50,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:51,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:51,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 52
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_FALSE
    - arraysize
    - butil::PlatformThread::Join
    - butil::PlatformThread::Create
    - did_run
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, TrivialTimesTen)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::FunctionTestThread::FunctionTestThread
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FunctionTestThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:61,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/test/platform_thread_unittest.cc:62,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/platform_thread_unittest.cc:63,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/platform_thread_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/platform_thread_unittest.cc:66,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:66,1
    - Dst: butil::TrivialThread::ThreadMain
      Src: /src/brpc/test/platform_thread_unittest.cc:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 69
    functionName: butil::FunctionTestThread::ThreadMain
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::YieldCurrentThread
    - butil::TrivialThread::ThreadMain
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: butil::FunctionTestThread::thread_id
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PlatformThreadId
    signature: PlatformThreadId thread_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:80,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:85,1
    - Dst: FunctionTestThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:85,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:86,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:86,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:87,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:88,1
    - Dst: FunctionTestThread::did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:88,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/platform_thread_unittest.cc:89,1
    - Dst: FunctionTestThread::thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/platform_thread_unittest.cc:92,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 93
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - FunctionTestThread::did_run
    - butil::PlatformThread::CurrentId
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - EXPECT_NE
    - butil::PlatformThread::Create
    - EXPECT_EQ
    - FunctionTestThread::thread_id
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, Function)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:96,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:99,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/platform_thread_unittest.cc:102,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:102,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:104,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/test/platform_thread_unittest.cc:104,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:105,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/test/platform_thread_unittest.cc:106,1
    - Dst: arraysize
      Src: /src/brpc/test/platform_thread_unittest.cc:107,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/platform_thread_unittest.cc:108,1
    - Dst: did_run
      Src: /src/brpc/test/platform_thread_unittest.cc:108,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/platform_thread_unittest.cc:109,1
    - Dst: thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:109,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/platform_thread_unittest.cc:113,1
    - Dst: thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:113,1
    - Dst: thread_id
      Src: /src/brpc/test/platform_thread_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/platform_thread_unittest.cc:118,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/test/platform_thread_unittest.cc:118,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 119
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/platform_thread_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - thread_id
    - butil::PlatformThread::CurrentId
    - ASSERT_FALSE
    - arraysize
    - butil::PlatformThread::Join
    - EXPECT_NE
    - butil::PlatformThread::Create
    - EXPECT_EQ
    - did_run
    linkageType: ''
    returnType: void
    signature: void TEST(PlatformThreadTest, FunctionTimesTen)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:58,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:70,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:73,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:77,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:77,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 79
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:85,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:85,1
    - Dst: brpc::policy::NovaServiceAdaptor::NovaServiceAdaptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:93,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:98,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:99,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 100
    functionName: NovaTest::NovaTest
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - brpc::policy::NovaServiceAdaptor::NovaServiceAdaptor
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void NovaTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: ~NovaTest()
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NovaTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:108,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:111,1
    - Dst: brpc::policy::VerifyNsheadRequest
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 112
    functionName: NovaTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - EXPECT_TRUE
    - brpc::policy::VerifyNsheadRequest
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:117,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:120,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 125
    functionName: NovaTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:130,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:131,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:134,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:136,1
    - Dst: test::EchoRequest::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' head'
    argTypes:
    - brpc::nshead_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 138
    functionName: NovaTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - test::EchoRequest::SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        const
      brpc::nshead_t& head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:142,1
    - Dst: memset
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:144,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:145,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:150,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 152
    functionName: NovaTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - memset
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: brpc::policy::MostCommonMessage * MakeResponseMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: NovaTest::CheckEmptyResponse
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ioctl
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckEmptyResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:170,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:171,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:172,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:174,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:174,1
    - Dst: CheckEmptyResponse
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - CheckEmptyResponse
    - memset
    - SetFailed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:181,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:184,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:185,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:185,1
    - Dst: CheckEmptyResponse
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:186,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 187
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - CheckEmptyResponse
    - Failed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:192,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:194,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:195,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:195,1
    - Dst: CheckEmptyResponse
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - CheckEmptyResponse
    - Failed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:201,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:203,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:204,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:204,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:206,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:206,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:207,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:211,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:212,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:218,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:218,1
    - Dst: id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:218,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:221,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:222,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:223,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:223,1
    - Dst: brpc::policy::PackNovaRequest
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:224,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:225,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:226,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:227,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:227,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:232,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:232,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:233,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:234,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:235,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:238,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:239,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:242,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:242,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:243,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:246,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:246,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:247,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 248
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::Controller::Failed
    - brpc::policy::ParseNsheadMessage
    - brpc::SetTrackMeAddress
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - id
    - ASSERT_FALSE
    - brpc::policy::PackNovaRequest
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::ErrorText
    - brpc::Controller::call_id
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:251,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:252,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:256,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:256,1
    - Dst: id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:256,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:259,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:260,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:261,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:262,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:262,1
    - Dst: brpc::policy::PackNovaRequest
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:263,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:264,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:265,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:266,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:266,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:271,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:271,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:272,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:276,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::Controller::Failed
    - brpc::policy::ParseNsheadMessage
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - id
    - ASSERT_FALSE
    - brpc::policy::PackNovaRequest
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - brpc::Controller::call_id
    - Failed
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 53
    functionName: MyAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:58,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - brpc::AuthContext*::set_user
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string& auth_str,\n                         const
      butil::EndPoint&,\n                         brpc::AuthContext* ctx) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:70,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:73,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:77,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:77,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 79
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::close_fd
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    - EXPECT_EQ
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse* res,\n              ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:85,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:85,1
    - Dst: brpc::policy::NovaServiceAdaptor::NovaServiceAdaptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:93,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:98,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:98,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:99,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 100
    functionName: NovaTest::NovaTest
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - brpc::policy::NovaServiceAdaptor::NovaServiceAdaptor
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void NovaTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: ~NovaTest()
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NovaTest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:108,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:111,1
    - Dst: brpc::policy::VerifyNsheadRequest
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 112
    functionName: NovaTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - EXPECT_TRUE
    - brpc::policy::VerifyNsheadRequest
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:117,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:120,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 125
    functionName: NovaTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:130,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:131,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:134,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:136,1
    - Dst: test::EchoRequest::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' head'
    argTypes:
    - brpc::nshead_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 138
    functionName: NovaTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - test::EchoRequest::SerializeToZeroCopyStream
    - test::EchoRequest::set_message
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        const
      brpc::nshead_t& head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:142,1
    - Dst: memset
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:144,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:145,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:150,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 152
    functionName: NovaTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MostCommonMessage*::meta::append
    - EXPECT_TRUE
    - test::EchoResponse::set_message
    - test::EchoResponse::SerializeToZeroCopyStream
    - memset
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: brpc::policy::MostCommonMessage * MakeResponseMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:156,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: NovaTest::CheckEmptyResponse
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ioctl
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckEmptyResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:170,1
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:171,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:172,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:174,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:174,1
    - Dst: CheckEmptyResponse
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - CheckEmptyResponse
    - memset
    - SetFailed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:181,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:184,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:185,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:185,1
    - Dst: CheckEmptyResponse
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:186,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 187
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - CheckEmptyResponse
    - Failed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeRequestMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:192,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:194,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:195,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:195,1
    - Dst: CheckEmptyResponse
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - CheckEmptyResponse
    - Failed
    - _nerror_bvar::get_value
    - MakeRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_request_wrong_method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:201,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:203,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:204,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:204,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:206,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:206,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:207,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 208
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ProcessMessage
    - ASSERT_TRUE
    - MakeResponseMessage
    - set_correlation_id
    - brpc::Controller::call_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - Failed
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, process_response_after_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:211,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:212,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:218,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:218,1
    - Dst: id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:218,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:221,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:222,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:223,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:223,1
    - Dst: brpc::policy::PackNovaRequest
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:224,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:225,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:226,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:227,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:227,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:232,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:232,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:233,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:234,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:235,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:238,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:239,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:242,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:242,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:243,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:246,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:246,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:247,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 248
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::Controller::Failed
    - brpc::policy::ParseNsheadMessage
    - brpc::SetTrackMeAddress
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - id
    - ASSERT_FALSE
    - brpc::policy::PackNovaRequest
    - butil::IOPortal::IOPortal
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - ProcessMessage
    - brpc::Controller::ErrorText
    - brpc::Controller::call_id
    - test::EchoResponse::message
    - butil::IOPortal::append_from_file_descriptor
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:251,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:252,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:256,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:256,1
    - Dst: id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:256,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:259,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:260,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:261,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:262,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:262,1
    - Dst: brpc::policy::PackNovaRequest
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:263,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:264,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:265,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:266,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:266,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:271,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:271,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:272,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:276,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 277
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_nova_pbrpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::SerializeRequestDefault
    - brpc::Controller::Failed
    - brpc::policy::ParseNsheadMessage
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - id
    - ASSERT_FALSE
    - brpc::policy::PackNovaRequest
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - test::EchoRequest::set_close_fd
    - ProcessMessage
    - brpc::Controller::call_id
    - Failed
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::ParseResult::message
    linkageType: ''
    returnType: void
    signature: void TEST_F(NovaTest, close_in_callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: StringReader::StringReader
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void StringReader(const std::string& str,\n                 bool report_eagain_on_end
      = false)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:40,1
    - Dst: std::min
      Src: /src/brpc/test/recordio_unittest.cpp:41,1
    - Dst: memcpy
      Src: /src/brpc/test/recordio_unittest.cpp:42,1
    - Dst: data
      Src: /src/brpc/test/recordio_unittest.cpp:42,1
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:45,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 54
    functionName: StringReader::ReadV
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - std::min
    - data
    - memcpy
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadV(const iovec* iov, int iovcnt) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:64,1
    - Dst: append
      Src: /src/brpc/test/recordio_unittest.cpp:66,1
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: StringWriter::WriteV
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - size
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t WriteV(const iovec* iov, int iovcnt) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: '& str() const'
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:77,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:78,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:78,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/recordio_unittest.cpp:79,1
    - Dst: butil::Record::RemoveMeta
      Src: /src/brpc/test/recordio_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:80,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:81,1
    - Dst: butil::Record::MutablePayload
      Src: /src/brpc/test/recordio_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Record::MetaCount
    - ASSERT_TRUE
    - butil::Record::RemoveMeta
    - butil::Record::Meta
    - ASSERT_FALSE
    - butil::Record::MutablePayload
    - butil::Record::Payload
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, empty_record)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:86,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:86,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:88,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:88,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:89,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/test/recordio_unittest.cpp:89,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:91,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:92,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:94,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:94,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:97,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:97,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:98,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/test/recordio_unittest.cpp:98,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:100,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:101,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:103,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:107,1
    - Dst: butil::Record::RemoveMeta
      Src: /src/brpc/test/recordio_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:108,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:108,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:109,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:111,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Record::MetaCount
    - ASSERT_TRUE
    - butil::IOBuf*::empty
    - butil::Record::RemoveMeta
    - butil::Record::Meta
    - butil::Record::MutableMeta
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, manipulate_record)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:122,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Record::MutableMeta
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, invalid_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:130,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:130,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:132,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:134,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:134,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:136,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:138,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:138,1
    - Dst: butil::Record::MutablePayload
      Src: /src/brpc/test/recordio_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:141,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:143,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/test/recordio_unittest.cpp:143,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:144,1
    - Dst: butil::PrintedAsBinary
      Src: /src/brpc/test/recordio_unittest.cpp:145,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:145,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:150,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:151,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:152,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:153,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:156,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:157,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:158,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:159,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:160,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:161,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:164,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:165,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:166,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:167,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:168,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:169,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:170,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:171,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:174,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:175,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:176,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:177,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:178,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:179,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:180,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:181,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:181,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/recordio_unittest.cpp:183,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:184,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:185,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:185,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/test/recordio_unittest.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 186
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::RecordReader::offset
    - ASSERT_EQ
    - butil::RecordWriter::Flush
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::Record::MetaCount
    - butil::PrintedAsBinary
    - butil::Record::MutableMeta
    - butil::IOBuf*::append
    - butil::RecordWriter::Write
    - ASSERT_FALSE
    - butil::Record::Payload
    - butil::Record::MetaAt
    - butil::RecordReader::ReadNext
    - butil::Record::MutablePayload
    - StringWriter::str
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, write_read_basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:193,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:195,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:195,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:197,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:199,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:201,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/test/recordio_unittest.cpp:201,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:202,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:203,1
    - Dst: butil::PrintedAsBinary
      Src: /src/brpc/test/recordio_unittest.cpp:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:210,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:211,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:212,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:213,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:214,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:215,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:218,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:219,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:220,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:221,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:222,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:223,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:224,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:225,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:225,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/recordio_unittest.cpp:227,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:228,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:229,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:229,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/test/recordio_unittest.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 230
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::RecordReader::offset
    - ASSERT_EQ
    - butil::RecordWriter::Flush
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::Record::MetaCount
    - butil::PrintedAsBinary
    - butil::Record::MutableMeta
    - butil::IOBuf*::append
    - butil::RecordWriter::Write
    - ASSERT_FALSE
    - butil::Record::Payload
    - butil::Record::MetaAt
    - butil::RecordReader::ReadNext
    - std::string::size
    - StringWriter::str
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, incomplete_reader)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/recordio_unittest.cpp:233,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/recordio_unittest.cpp:235,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/recordio_unittest.cpp:237,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/recordio_unittest.cpp:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - min_len
    - max_len
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 240
    functionName: rand_string
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand_in
    - std::string::push_back
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string rand_string(int min_len, int max_len)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: rand_string
      Src: /src/brpc/test/recordio_unittest.cpp:252,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/recordio_unittest.cpp:253,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:255,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:255,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/recordio_unittest.cpp:256,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/recordio_unittest.cpp:259,1
    - Dst: std::make_pair
      Src: /src/brpc/test/recordio_unittest.cpp:259,1
    - Dst: butil::Record::ByteSize
      Src: /src/brpc/test/recordio_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:263,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/test/recordio_unittest.cpp:263,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:265,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:265,1
    - Dst: std::map::begin
      Src: /src/brpc/test/recordio_unittest.cpp:268,1
    - Dst: std::map::end
      Src: /src/brpc/test/recordio_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:304,1
    - Dst: std::map::size
      Src: /src/brpc/test/recordio_unittest.cpp:304,1
    - Dst: std::vector::size
      Src: /src/brpc/test/recordio_unittest.cpp:304,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:305,1
    - Dst: std::map::size
      Src: /src/brpc/test/recordio_unittest.cpp:306,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: std::string::data
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:313,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/recordio_unittest.cpp:314,1
    - Dst: std::vector::size
      Src: /src/brpc/test/recordio_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:315,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:316,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:317,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:319,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:320,1
    - Dst: std::vector::size
      Src: /src/brpc/test/recordio_unittest.cpp:320,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/recordio_unittest.cpp:321,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:321,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/test/recordio_unittest.cpp:321,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 242
    functionDepth: 2
    functionLinenumber: 242
    functionLinenumberEnd: 322
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::RecordReader::offset
    - ASSERT_EQ
    - butil::Record::MetaCount
    - butil::RecordReader::ReadNext
    - std::string::size
    - rand_string
    - butil::RecordReader::last_error
    - std::string::data
    - std::map::begin
    - ASSERT_LE
    - butil::string_printf
    - butil::RecordWriter::Write
    - butil::Record::ByteSize
    - std::make_pair
    - butil::FilePath
    - butil::Record::MetaAt
    - std::map::size
    - StringWriter::str
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::RecordWriter::Flush
    - butil::WriteFile
    - butil::fast_rand_less_than
    - butil::Record::MutableMeta
    - ASSERT_LT
    - std::vector::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, write_read_random)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: StringReader::StringReader
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void StringReader(const std::string& str,\n                 bool report_eagain_on_end
      = false)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:40,1
    - Dst: std::min
      Src: /src/brpc/test/recordio_unittest.cpp:41,1
    - Dst: memcpy
      Src: /src/brpc/test/recordio_unittest.cpp:42,1
    - Dst: data
      Src: /src/brpc/test/recordio_unittest.cpp:42,1
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:45,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 54
    functionName: StringReader::ReadV
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - std::min
    - data
    - memcpy
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadV(const iovec* iov, int iovcnt) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:64,1
    - Dst: append
      Src: /src/brpc/test/recordio_unittest.cpp:66,1
    - Dst: size
      Src: /src/brpc/test/recordio_unittest.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: StringWriter::WriteV
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - append
    - size
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t WriteV(const iovec* iov, int iovcnt) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: '& str() const'
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:77,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:77,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:78,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:78,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/recordio_unittest.cpp:79,1
    - Dst: butil::Record::RemoveMeta
      Src: /src/brpc/test/recordio_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:80,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:81,1
    - Dst: butil::Record::MutablePayload
      Src: /src/brpc/test/recordio_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Record::MetaCount
    - ASSERT_TRUE
    - butil::Record::RemoveMeta
    - butil::Record::Meta
    - ASSERT_FALSE
    - butil::Record::MutablePayload
    - butil::Record::Payload
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, empty_record)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:86,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:86,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:88,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:88,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:89,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/test/recordio_unittest.cpp:89,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:91,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:91,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:92,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:94,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:94,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:97,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:97,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:98,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/test/recordio_unittest.cpp:98,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:100,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:101,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:103,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:107,1
    - Dst: butil::Record::RemoveMeta
      Src: /src/brpc/test/recordio_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:108,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:108,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:109,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:111,1
    - Dst: butil::Record::Meta
      Src: /src/brpc/test/recordio_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Record::MetaCount
    - ASSERT_TRUE
    - butil::IOBuf*::empty
    - butil::Record::RemoveMeta
    - butil::Record::Meta
    - butil::Record::MutableMeta
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, manipulate_record)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:122,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::Record::MutableMeta
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, invalid_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:130,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:130,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:132,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:134,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:134,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:136,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:138,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:138,1
    - Dst: butil::Record::MutablePayload
      Src: /src/brpc/test/recordio_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:141,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:143,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/test/recordio_unittest.cpp:143,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:144,1
    - Dst: butil::PrintedAsBinary
      Src: /src/brpc/test/recordio_unittest.cpp:145,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:145,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:150,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:151,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:152,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:153,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:156,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:157,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:158,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:159,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:160,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:161,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:164,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:165,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:166,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:167,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:168,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:169,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:170,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:171,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:174,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:174,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:175,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:176,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:177,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:178,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:179,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:180,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:181,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:181,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/recordio_unittest.cpp:183,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:184,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:185,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:185,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/test/recordio_unittest.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 186
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::RecordReader::offset
    - ASSERT_EQ
    - butil::RecordWriter::Flush
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::Record::MetaCount
    - butil::PrintedAsBinary
    - butil::Record::MutableMeta
    - butil::IOBuf*::append
    - butil::RecordWriter::Write
    - ASSERT_FALSE
    - butil::Record::Payload
    - butil::Record::MetaAt
    - butil::RecordReader::ReadNext
    - butil::Record::MutablePayload
    - StringWriter::str
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, write_read_basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:193,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:195,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:195,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:197,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/recordio_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:199,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:201,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/test/recordio_unittest.cpp:201,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:202,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:203,1
    - Dst: butil::PrintedAsBinary
      Src: /src/brpc/test/recordio_unittest.cpp:204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:210,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:211,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:212,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:213,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:214,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:215,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:218,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:219,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:220,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:221,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:222,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:223,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:224,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:225,1
    - Dst: butil::Record::Payload
      Src: /src/brpc/test/recordio_unittest.cpp:225,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/recordio_unittest.cpp:227,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:228,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:229,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:229,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/test/recordio_unittest.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 230
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::RecordReader::offset
    - ASSERT_EQ
    - butil::RecordWriter::Flush
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::Record::MetaCount
    - butil::PrintedAsBinary
    - butil::Record::MutableMeta
    - butil::IOBuf*::append
    - butil::RecordWriter::Write
    - ASSERT_FALSE
    - butil::Record::Payload
    - butil::Record::MetaAt
    - butil::RecordReader::ReadNext
    - std::string::size
    - StringWriter::str
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, incomplete_reader)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/recordio_unittest.cpp:233,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/recordio_unittest.cpp:235,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/recordio_unittest.cpp:237,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/recordio_unittest.cpp:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - min_len
    - max_len
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 240
    functionName: rand_string
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::fast_rand_in
    - std::string::push_back
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string rand_string(int min_len, int max_len)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: rand_string
      Src: /src/brpc/test/recordio_unittest.cpp:252,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/recordio_unittest.cpp:253,1
    - Dst: butil::Record::MutableMeta
      Src: /src/brpc/test/recordio_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:255,1
    - Dst: butil::RecordWriter::Write
      Src: /src/brpc/test/recordio_unittest.cpp:255,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/recordio_unittest.cpp:256,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/recordio_unittest.cpp:259,1
    - Dst: std::make_pair
      Src: /src/brpc/test/recordio_unittest.cpp:259,1
    - Dst: butil::Record::ByteSize
      Src: /src/brpc/test/recordio_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:263,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/test/recordio_unittest.cpp:263,1
    - Dst: StringWriter::str
      Src: /src/brpc/test/recordio_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:265,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:265,1
    - Dst: std::map::begin
      Src: /src/brpc/test/recordio_unittest.cpp:268,1
    - Dst: std::map::end
      Src: /src/brpc/test/recordio_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/recordio_unittest.cpp:301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:304,1
    - Dst: std::map::size
      Src: /src/brpc/test/recordio_unittest.cpp:304,1
    - Dst: std::vector::size
      Src: /src/brpc/test/recordio_unittest.cpp:304,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:305,1
    - Dst: std::map::size
      Src: /src/brpc/test/recordio_unittest.cpp:306,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: butil::WriteFile
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: std::string::data
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:309,1
    - Dst: butil::RecordReader::ReadNext
      Src: /src/brpc/test/recordio_unittest.cpp:313,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/recordio_unittest.cpp:314,1
    - Dst: std::vector::size
      Src: /src/brpc/test/recordio_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:315,1
    - Dst: butil::Record::MetaCount
      Src: /src/brpc/test/recordio_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:316,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:317,1
    - Dst: butil::Record::MetaAt
      Src: /src/brpc/test/recordio_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:319,1
    - Dst: butil::RecordReader::last_error
      Src: /src/brpc/test/recordio_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/recordio_unittest.cpp:320,1
    - Dst: std::vector::size
      Src: /src/brpc/test/recordio_unittest.cpp:320,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/recordio_unittest.cpp:321,1
    - Dst: std::string::size
      Src: /src/brpc/test/recordio_unittest.cpp:321,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/test/recordio_unittest.cpp:321,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 242
    functionDepth: 2
    functionLinenumber: 242
    functionLinenumberEnd: 322
    functionName: TEST
    functionSourceFile: /src/brpc/test/recordio_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::RecordReader::offset
    - ASSERT_EQ
    - butil::Record::MetaCount
    - butil::RecordReader::ReadNext
    - std::string::size
    - rand_string
    - butil::RecordReader::last_error
    - std::string::data
    - std::map::begin
    - ASSERT_LE
    - butil::string_printf
    - butil::RecordWriter::Write
    - butil::Record::ByteSize
    - std::make_pair
    - butil::FilePath
    - butil::Record::MetaAt
    - std::map::size
    - StringWriter::str
    - ASSERT_TRUE
    - std::vector::push_back
    - butil::RecordWriter::Flush
    - butil::WriteFile
    - butil::fast_rand_less_than
    - butil::Record::MutableMeta
    - ASSERT_LT
    - std::vector::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: void TEST(RecordIOTest, write_read_random)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:41,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:42,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:58,1
    - Dst: ::brpc::policy::MongoRequest*::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:58,1
    - Dst: ::brpc::policy::MongoResponse*::mutable_header
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:60,1
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:62,1
    - Dst: ::brpc::policy::MongoResponse*::set_message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - req
    - res
    - done
    argTypes:
    - ::brpc::policy::MongoRequest*
    - ::brpc::policy::MongoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 64
    functionName: MyEchoService::default_method
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::brpc::policy::MongoResponse*::mutable_header
    - ::brpc::policy::MongoResponse*::set_message
    - length
    - EXPECT_EQ
    - ::brpc::policy::MongoRequest*::message
    linkageType: ''
    returnType: void
    signature: "void default_method(::google::protobuf::RpcController*,\n                        const
      ::brpc::policy::MongoRequest* req,\n                        ::brpc::policy::MongoResponse*
      res,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:75,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:77,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:77,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:82,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:83,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:84,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - out_buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 87
    functionName: MyMongoAdaptor::SerializeError
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - length
    - static_cast<const void*>
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void SerializeError(int /*response_to*/, butil::IOBuf* out_buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyContext::MyContext
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: MyMongoAdaptor::CreateSocketContext
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyContext::MyContext
    linkageType: ''
    returnType: ::brpc::MongoContext
    signature: ::brpc::MongoContext * CreateSocketContext() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:97,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:103,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:108,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:109,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 110
    functionName: MongoTest::MongoTest
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void MongoTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 112
    functionName: ~MongoTest()
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MongoTest()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:119,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:122,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 127
    functionName: MongoTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:131,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:134,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:135,1
    - Dst: brpc::policy::MostCommonMessage*::payload::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - head
    argTypes:
    - brpc::mongo_head_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: MongoTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - length
    - brpc::policy::MostCommonMessage*::payload::append
    - TestRpcPBMessageFactory::Get
    - brpc::policy::MostCommonMessage*::meta::append
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        brpc::mongo_head_t*
      head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: MongoTest::CheckEmptyResponse
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ioctl
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckEmptyResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:157,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:158,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:159,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:159,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:160,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:161,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:163,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:163,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:165,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:166,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::ParseMongoMessage
    - butil::IOBuf::append
    - get
    - brpc::ParseResult::message
    - length
    - butil::IOBuf::IOBuf
    - _nerror_bvar::get_value
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(MongoTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:172,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:173,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:174,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:174,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:175,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:176,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:178,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:178,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:179,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:180,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:181,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 182
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::ParseMongoMessage
    - butil::IOBuf::append
    - get
    - brpc::ParseResult::message
    - length
    - SetFailed
    - butil::IOBuf::IOBuf
    - _nerror_bvar::get_value
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(MongoTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:185,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:186,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:187,1
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:195,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:196,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:198,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:201,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:203,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:205,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:205,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:207,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:208,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:208,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:209,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:210,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:211,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:211,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:212,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:213,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:216,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:217,1
    - Dst: static_cast<const brpc::mongo_head_t*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:219,1
    - Dst: butil::IOPortal::fetch
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:220,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:221,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:222,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:223,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:224,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:225,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:229,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:232,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:232,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:233,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 234
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - ASSERT_EQ
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ASSERT_STREQ
    - ASSERT_FALSE
    - get
    - butil::IOPortal::IOPortal
    - brpc::ParseResult::error
    - ProcessMessage
    - butil::IOBuf::size
    - butil::IOPortal::fetch
    - static_cast<const brpc::mongo_head_t*>
    - butil::IOPortal::append_from_file_descriptor
    - butil::IOPortal::cutn
    - brpc::Controller::Controller
    - brpc::policy::ParseMongoMessage
    - brpc::ParseResult::message
    - c_str
    - length
    linkageType: ''
    returnType: void
    signature: void TEST_F(MongoTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:58,1
    - Dst: ::brpc::policy::MongoRequest*::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:58,1
    - Dst: ::brpc::policy::MongoResponse*::mutable_header
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:60,1
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:62,1
    - Dst: ::brpc::policy::MongoResponse*::set_message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - req
    - res
    - done
    argTypes:
    - ::brpc::policy::MongoRequest*
    - ::brpc::policy::MongoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 64
    functionName: MyEchoService::default_method
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::brpc::policy::MongoResponse*::mutable_header
    - ::brpc::policy::MongoResponse*::set_message
    - length
    - EXPECT_EQ
    - ::brpc::policy::MongoRequest*::message
    linkageType: ''
    returnType: void
    signature: "void default_method(::google::protobuf::RpcController*,\n                        const
      ::brpc::policy::MongoRequest* req,\n                        ::brpc::policy::MongoResponse*
      res,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:75,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:77,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:77,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:82,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:83,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:84,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - out_buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 87
    functionName: MyMongoAdaptor::SerializeError
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - length
    - static_cast<const void*>
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void SerializeError(int /*response_to*/, butil::IOBuf* out_buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyContext::MyContext
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: MyMongoAdaptor::CreateSocketContext
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyContext::MyContext
    linkageType: ''
    returnType: ::brpc::MongoContext
    signature: ::brpc::MongoContext * CreateSocketContext() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:97,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:103,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:108,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:109,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 110
    functionName: MongoTest::MongoTest
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - pipe
    - AddService
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void MongoTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 112
    functionName: ~MongoTest()
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MongoTest()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:119,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:122,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 127
    functionName: MongoTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - PostponeEOF
    - ReAddress
    - SetEOF
    linkageType: ''
    returnType: void
    signature: "void ProcessMessage(void (*process)(brpc::InputMessageBase*),\n                        brpc::InputMessageBase*
      msg, bool set_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:131,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:134,1
    - Dst: brpc::policy::MostCommonMessage*::meta::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:135,1
    - Dst: brpc::policy::MostCommonMessage*::payload::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - head
    argTypes:
    - brpc::mongo_head_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: MongoTest::MakeRequestMessage
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - length
    - brpc::policy::MostCommonMessage*::payload::append
    - TestRpcPBMessageFactory::Get
    - brpc::policy::MostCommonMessage*::meta::append
    linkageType: ''
    returnType: brpc::policy::MostCommonMessage
    signature: "brpc::policy::MostCommonMessage * MakeRequestMessage(\n        brpc::mongo_head_t*
      head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: MongoTest::CheckEmptyResponse
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ioctl
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckEmptyResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:157,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:158,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:159,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:159,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:160,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:161,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:163,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:163,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:165,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:166,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::ParseMongoMessage
    - butil::IOBuf::append
    - get
    - brpc::ParseResult::message
    - length
    - butil::IOBuf::IOBuf
    - _nerror_bvar::get_value
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(MongoTest, process_request_logoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:172,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:173,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:174,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:174,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:175,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:176,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:178,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:178,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:179,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:180,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:181,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 182
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - ASSERT_EQ
    - ProcessMessage
    - brpc::policy::ParseMongoMessage
    - butil::IOBuf::append
    - get
    - brpc::ParseResult::message
    - length
    - SetFailed
    - butil::IOBuf::IOBuf
    - _nerror_bvar::get_value
    - brpc::ParseResult::error
    linkageType: ''
    returnType: void
    signature: void TEST_F(MongoTest, process_request_failed_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:185,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:186,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:187,1
    - Dst: length
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:195,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:196,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:198,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:201,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:203,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:205,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:205,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:207,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:208,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:208,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:209,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:210,1
    - Dst: get
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:211,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:211,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:212,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:213,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:216,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:217,1
    - Dst: static_cast<const brpc::mongo_head_t*>
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:219,1
    - Dst: butil::IOPortal::fetch
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:220,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:221,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:222,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:223,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:224,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:225,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:229,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:232,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:232,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:233,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mongo_protocol_unittest.cpp:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 234
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mongo_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - ASSERT_EQ
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ASSERT_STREQ
    - ASSERT_FALSE
    - get
    - butil::IOPortal::IOPortal
    - brpc::ParseResult::error
    - ProcessMessage
    - butil::IOBuf::size
    - butil::IOPortal::fetch
    - static_cast<const brpc::mongo_head_t*>
    - butil::IOPortal::append_from_file_descriptor
    - butil::IOPortal::cutn
    - brpc::Controller::Controller
    - brpc::policy::ParseMongoMessage
    - brpc::ParseResult::message
    - c_str
    - length
    linkageType: ''
    returnType: void
    signature: void TEST_F(MongoTest, complete_flow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: A
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void A()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: ~A()
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ~A()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 1
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: Use
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void Use()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: B
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 12
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void B()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ~B()
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ~B()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: OVERRIDE
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: A
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void A()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: ~A()
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ~A()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 1
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: Use
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void Use()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: B
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 12
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void B()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ~B()
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ~B()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/linked_ptr_unittest.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: OVERRIDE
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr::linked_ptr
      Src: /src/brpc/test/linked_ptr_unittest.cc:38,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/linked_ptr_unittest.cc:41,1
    - Dst: linked_ptr::get
      Src: /src/brpc/test/linked_ptr_unittest.cc:41,1
    - Dst: static_cast<A*>
      Src: /src/brpc/test/linked_ptr_unittest.cc:41,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/linked_ptr_unittest.cc:42,1
    - Dst: get
      Src: /src/brpc/test/linked_ptr_unittest.cc:42,1
    - Dst: static_cast<A*>
      Src: /src/brpc/test/linked_ptr_unittest.cc:42,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/linked_ptr_unittest.cc:43,1
    - Dst: get
      Src: /src/brpc/test/linked_ptr_unittest.cc:43,1
    - Dst: static_cast<A*>
      Src: /src/brpc/test/linked_ptr_unittest.cc:43,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:44,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:45,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:46,1
    - Dst: A::A
      Src: /src/brpc/test/linked_ptr_unittest.cc:49,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:51,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:52,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:53,1
    - Dst: linked_ptr::get
      Src: /src/brpc/test/linked_ptr_unittest.cc:53,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:54,1
    - Dst: linked_ptr::get
      Src: /src/brpc/test/linked_ptr_unittest.cc:54,1
    - Dst: A::A
      Src: /src/brpc/test/linked_ptr_unittest.cc:57,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:58,1
    - Dst: linked_ptr::get
      Src: /src/brpc/test/linked_ptr_unittest.cc:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:59,1
    - Dst: linked_ptr::get
      Src: /src/brpc/test/linked_ptr_unittest.cc:59,1
    - Dst: B::B
      Src: /src/brpc/test/linked_ptr_unittest.cc:61,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/linked_ptr_unittest.cc:65,1
    - Dst: linked_ptr::Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:68,1
    - Dst: linked_ptr::Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:69,1
    - Dst: linked_ptr::Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:70,1
    - Dst: linked_ptr::Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:71,1
    - Dst: linked_ptr::Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:72,1
    - Dst: Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:73,1
    - Dst: linked_ptr::get
      Src: /src/brpc/test/linked_ptr_unittest.cc:74,1
    - Dst: linked_ptr::Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:77,1
    - Dst: Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:78,1
    - Dst: Use
      Src: /src/brpc/test/linked_ptr_unittest.cc:79,1
    - Dst: reset
      Src: /src/brpc/test/linked_ptr_unittest.cc:82,1
    - Dst: A::A
      Src: /src/brpc/test/linked_ptr_unittest.cc:82,1
    - Dst: linked_ptr::reset
      Src: /src/brpc/test/linked_ptr_unittest.cc:83,1
    - Dst: linked_ptr::linked_ptr
      Src: /src/brpc/test/linked_ptr_unittest.cc:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/linked_ptr_unittest.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 110
    functionName: TEST
    functionSourceFile: /src/brpc/test/linked_ptr_unittest.cc
    functionUses: 0
    functionsReached:
    - linked_ptr::get
    - ASSERT_EQ
    - ASSERT_TRUE
    - reset
    - linked_ptr::linked_ptr
    - B::B
    - static_cast<A*>
    - A::A
    - Use
    - get
    - linked_ptr::Use
    - linked_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LinkedPtrTest, Test)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:26,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:27,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:28,1
    - Dst: printf
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 33
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    - printf
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: Trace::Trace
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Trace(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: ~Trace()
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~Trace()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 38
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~EchoServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Coroutine
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:67,1
    - Dst: EchoServiceImpl::EchoAsync
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 68
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - Coroutine
    - EchoServiceImpl::EchoAsync
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n                      const
      test::EchoRequest* request,\n                      test::EchoResponse* response,\n
      \                     google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: test::EchoRequest*::has_sleep_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:76,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:77,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:77,1
    - Dst: brpc::experimental::Coroutine::usleep
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:78,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:78,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:80,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - request
    - response
    - done
    argTypes:
    - test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 81
    functionName: EchoServiceImpl::EchoAsync
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 1
    functionsReached:
    - test::EchoResponse*::set_message
    - test::EchoRequest*::has_sleep_us
    - brpc::experimental::Coroutine::usleep
    - test::EchoRequest*::message
    - test::EchoRequest*::sleep_us
    - LOG
    linkageType: ''
    returnType: Awaitable<void>
    signature: "Awaitable<void> EchoAsync(const test::EchoRequest* request,\n                                   test::EchoResponse*
      response,\n                                   google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: CoroutineTest::CoroutineTest
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CoroutineTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: ~CoroutineTest()
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CoroutineTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 98
    functionName: inplace_func
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Awaitable<std::string>
    signature: Awaitable<std::string> inplace_func(const std::string& input)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: inplace_func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: inplace_func2
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - inplace_func
    linkageType: ''
    returnType: Awaitable<double>
    signature: Awaitable<double> inplace_func2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:108,1
    - Dst: brpc::experimental::Coroutine::usleep
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:109,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:110,1
    - Dst: butil::monotonic_time_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:112,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 116
    functionName: sleep_func
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::monotonic_time_us
    - brpc::experimental::Coroutine::usleep
    - usleep
    - EXPECT_GE
    - LOG
    linkageType: ''
    returnType: Awaitable<int>
    signature: Awaitable<int> sleep_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: exception_func
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    linkageType: ''
    returnType: Awaitable<float>
    signature: Awaitable<float> exception_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:127,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:131,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:134,1
    - Dst: Coroutine::awaitable
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:137,1
    - Dst: inplace_func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:140,1
    - Dst: exception_func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:146,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:152,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:154,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:155,1
    - Dst: AwaitableDone::awaitable
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:157,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:158,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:158,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:158,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:159,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:159,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:161,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:164,1
    - Dst: butil::monotonic_time_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:165,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:167,1
    - Dst: AwaitableDone::awaitable
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:168,1
    - Dst: butil::monotonic_time_us
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:170,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:171,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:172,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:172,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:172,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:173,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 34
    argCount: 2
    argNames:
    - ' channel'
    - out
    argTypes:
    - brpc::Channel
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 176
    functionName: func
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 7
    functionsReached:
    - butil::monotonic_time_us
    - exception_func
    - test::EchoService_Stub::Echo
    - AwaitableDone::awaitable
    - inplace_func
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_sleep_us
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - brpc::Controller::Reset
    - EXPECT_FALSE
    - usleep
    - test::EchoResponse::message
    - Coroutine::awaitable
    - test::EchoRequest::set_message
    - LOG
    - EXPECT_GE
    linkageType: ''
    returnType: Awaitable<void>
    signature: Awaitable<void> func(brpc::Channel& channel, int* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:180,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:180,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:182,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:183,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:185,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:185,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:187,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:189,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:189,1
    - Dst: func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:192,1
    - Dst: Coroutine::join
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:194,1
    - Dst: func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:198,1
    - Dst: Coroutine::join
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:200,1
    - Dst: Coroutine::join
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:205,1
    - Dst: inplace_func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:207,1
    - Dst: Coroutine::join
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:208,1
    - Dst: Coroutine::join
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:211,1
    - Dst: inplace_func
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:214,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_coroutine_unittest.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 219
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_coroutine_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Server::AddService
    - inplace_func
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - str2endpoint
    - brpc::Channel::Init
    - usleep
    - func
    - EchoServiceImpl::EchoServiceImpl
    - LOG
    - Coroutine::join
    linkageType: ''
    returnType: void
    signature: void TEST_F(CoroutineTest, coroutine)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::testing::InitGoogleTest
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:34,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:35,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - ::testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 39
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EchoServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: ~EchoServiceImpl() override
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EchoServiceImpl() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:55,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:55,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ::test::EchoRequest*::message
    - ::test::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* request,\n              ::test::EchoResponse* response,\n
      \             google::protobuf::Closure* done) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:74,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:75,1
    - Dst: brpc::Controller*::ErrorCode
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:75,1
    - Dst: brpc::NsheadMessage*::body::append
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:76,1
    - Dst: brpc::NsheadMessage*::body::append
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 4
    argNames:
    - cntl
    - ' request'
    - response
    - done
    argTypes:
    - brpc::Controller*
    - brpc::NsheadMessage
    - brpc::NsheadMessage*
    - brpc::NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 80
    functionName: MyNsheadProtocol::ProcessNsheadRequest
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ErrorCode
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::NsheadMessage*::body::append
    - brpc::Controller*::Failed
    linkageType: ''
    returnType: void
    signature: "void ProcessNsheadRequest(const brpc::Server&,\n                              brpc::Controller*
      cntl,\n                              const brpc::NsheadMessage& request,\n                              brpc::NsheadMessage*
      response,\n                              brpc::NsheadClosure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: MyInterceptor::MyInterceptor
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyInterceptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: ~MyInterceptor() override
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MyInterceptor() override
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - controller
    - ' error_code'
    - ' error_txt'
    argTypes:
    - brpc::Controller*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 99
    functionName: MyInterceptor::Accept
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool Accept(const brpc::Controller* controller,\n                int&
      error_code,\n                std::string& error_txt) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:105,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:105,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:107,1
    - Dst: MyInterceptor::MyInterceptor
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:108,1
    - Dst: MyNsheadProtocol::MyNsheadProtocol
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:111,1
    - Dst: Start
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 112
    functionName: InterceptorTest::InterceptorTest
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached:
    - MyNsheadProtocol::MyNsheadProtocol
    - MyInterceptor::MyInterceptor
    - brpc::ServerOptions::ServerOptions
    - AddService
    - Start
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void InterceptorTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: ~InterceptorTest() override
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~InterceptorTest() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:120,1
    - Dst: Echo
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:121,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:123,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:124,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:126,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:127,1
    - Dst: message
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:127,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' stub'
    - ' req'
    - ' res'
    argTypes:
    - test::EchoService_Stub
    - ::test::EchoRequest
    - ::test::EchoResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 130
    functionName: InterceptorTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - Echo
    - ASSERT_EQ
    - message
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Failed
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: "void CallMethod(test::EchoService_Stub& stub,\n                           ::test::EchoRequest&
      req,\n                           ::test::EchoResponse& res)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:140,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:144,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:146,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:146,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:148,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:153,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:156,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:156,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:160,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:165,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:168,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:168,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:170,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:175,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:178,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:178,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:180,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:185,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:188,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:188,1
    - Dst: brpc::NsheadMessage::NsheadMessage
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:189,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:191,1
    - Dst: brpc::NsheadMessage::NsheadMessage
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:192,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:195,1
    - Dst: brpc::NsheadMessage::body::to_string
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:197,1
    - Dst: brpc::NsheadMessage::body::to_string
      Src: /src/brpc/test/brpc_interceptor_unittest.cpp:197,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 201
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_interceptor_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::EchoRequest::set_message
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::NsheadMessage::body::to_string
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - CallMethod
    - brpc::NsheadMessage::NsheadMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(InterceptorTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' duration'
    - ' thread_watched_name'
    - enabled
    argTypes:
    - TimeDelta
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: butil::WatchdogCounter::WatchdogCounter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void WatchdogCounter(const TimeDelta& duration,\n                  const
      std::string& thread_watched_name,\n                  bool enabled)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~WatchdogCounter()
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WatchdogCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::Alarm
      Src: /src/brpc/test/watchdog_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: butil::WatchdogCounter::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::Alarm
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::WatchdogCounter::alarm_counter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int alarm_counter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ResetStaticData
      Src: /src/brpc/test/watchdog_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::WatchdogTest::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::ResetStaticData
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' duration'
    - ' thread_watched_name'
    - enabled
    argTypes:
    - TimeDelta
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: butil::WatchdogCounter::WatchdogCounter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void WatchdogCounter(const TimeDelta& duration,\n                  const
      std::string& thread_watched_name,\n                  bool enabled)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~WatchdogCounter()
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WatchdogCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::Alarm
      Src: /src/brpc/test/watchdog_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: butil::WatchdogCounter::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::Alarm
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::WatchdogCounter::alarm_counter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int alarm_counter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ResetStaticData
      Src: /src/brpc/test/watchdog_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::WatchdogTest::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::ResetStaticData
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:58,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, StartupShutdownTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:64,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:65,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:66,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:67,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:68,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:70,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:71,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:72,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:73,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 75
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - Watchdog::Disarm
    - butil::TimeDelta::FromMilliseconds
    - Watchdog::Arm
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, ArmDisarmTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:79,1
    - Dst: WatchdogCounter::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:80,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/watchdog_unittest.cc:81,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/watchdog_unittest.cc:81,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:83,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 84
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::Arm
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMilliseconds
    - butil::TimeDelta::FromMinutes
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, AlarmTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta
      Src: /src/brpc/test/watchdog_unittest.cc:88,1
    - Dst: WatchdogCounter::ArmSomeTimeDeltaAgo
      Src: /src/brpc/test/watchdog_unittest.cc:90,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:90,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/watchdog_unittest.cc:92,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/watchdog_unittest.cc:92,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:95,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 96
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - butil::TimeDelta
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, AlarmPriorTimeTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:100,1
    - Dst: WatchdogCounter::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:101,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/watchdog_unittest.cc:103,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:104,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::Arm
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, ConstructorDisabledTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:109,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/watchdog_unittest.cc:111,1
    - Dst: WatchdogCounter::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:112,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/watchdog_unittest.cc:114,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:114,1
    - Dst: WatchdogCounter::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:115,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/watchdog_unittest.cc:116,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:118,1
    - Dst: LOG
      Src: /src/brpc/test/watchdog_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:125,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:125,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/watchdog_unittest.cc:129,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:130,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:130,1
    - Dst: WatchdogCounter::ArmSomeTimeDeltaAgo
      Src: /src/brpc/test/watchdog_unittest.cc:134,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:134,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/watchdog_unittest.cc:136,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/watchdog_unittest.cc:136,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:139,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 140
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - WatchdogCounter::Arm
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - WatchdogCounter::Disarm
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    - butil::TimeTicks::Now
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, DisarmTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' duration'
    - ' thread_watched_name'
    - enabled
    argTypes:
    - TimeDelta
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: butil::WatchdogCounter::WatchdogCounter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void WatchdogCounter(const TimeDelta& duration,\n                  const
      std::string& thread_watched_name,\n                  bool enabled)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~WatchdogCounter()
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WatchdogCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::Alarm
      Src: /src/brpc/test/watchdog_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: butil::WatchdogCounter::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::Alarm
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::WatchdogCounter::alarm_counter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int alarm_counter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ResetStaticData
      Src: /src/brpc/test/watchdog_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::WatchdogTest::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::ResetStaticData
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' duration'
    - ' thread_watched_name'
    - enabled
    argTypes:
    - TimeDelta
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: butil::WatchdogCounter::WatchdogCounter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void WatchdogCounter(const TimeDelta& duration,\n                  const
      std::string& thread_watched_name,\n                  bool enabled)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~WatchdogCounter()
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WatchdogCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::Alarm
      Src: /src/brpc/test/watchdog_unittest.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: butil::WatchdogCounter::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::Alarm
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::WatchdogCounter::alarm_counter
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int alarm_counter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ResetStaticData
      Src: /src/brpc/test/watchdog_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::WatchdogTest::OVERRIDE
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::Watchdog::ResetStaticData
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:58,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::TimeDelta::FromMilliseconds
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, StartupShutdownTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:64,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:65,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:66,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:67,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:68,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:70,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:71,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:72,1
    - Dst: Watchdog::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:73,1
    - Dst: Watchdog::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 75
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - Watchdog::Disarm
    - butil::TimeDelta::FromMilliseconds
    - Watchdog::Arm
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, ArmDisarmTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:79,1
    - Dst: WatchdogCounter::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:80,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/watchdog_unittest.cc:81,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/watchdog_unittest.cc:81,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:83,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 84
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::Arm
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMilliseconds
    - butil::TimeDelta::FromMinutes
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, AlarmTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta
      Src: /src/brpc/test/watchdog_unittest.cc:88,1
    - Dst: WatchdogCounter::ArmSomeTimeDeltaAgo
      Src: /src/brpc/test/watchdog_unittest.cc:90,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:90,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/watchdog_unittest.cc:92,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/watchdog_unittest.cc:92,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:95,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 96
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - butil::TimeDelta
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, AlarmPriorTimeTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:100,1
    - Dst: WatchdogCounter::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:101,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/watchdog_unittest.cc:103,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:103,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:104,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::Arm
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, ConstructorDisabledTest)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:109,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/watchdog_unittest.cc:111,1
    - Dst: WatchdogCounter::Arm
      Src: /src/brpc/test/watchdog_unittest.cc:112,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/watchdog_unittest.cc:114,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:114,1
    - Dst: WatchdogCounter::Disarm
      Src: /src/brpc/test/watchdog_unittest.cc:115,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/test/watchdog_unittest.cc:116,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/test/watchdog_unittest.cc:118,1
    - Dst: LOG
      Src: /src/brpc/test/watchdog_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:125,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:125,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/watchdog_unittest.cc:129,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:130,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:130,1
    - Dst: WatchdogCounter::ArmSomeTimeDeltaAgo
      Src: /src/brpc/test/watchdog_unittest.cc:134,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/watchdog_unittest.cc:134,1
    - Dst: SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
      Src: /src/brpc/test/watchdog_unittest.cc:136,1
    - Dst: butil::TimeDelta::FromMinutes
      Src: /src/brpc/test/watchdog_unittest.cc:136,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/watchdog_unittest.cc:139,1
    - Dst: WatchdogCounter::alarm_counter
      Src: /src/brpc/test/watchdog_unittest.cc:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 140
    functionName: butil::TEST_F
    functionSourceFile: /src/brpc/test/watchdog_unittest.cc
    functionUses: 0
    functionsReached:
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - WatchdogCounter::Arm
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromMilliseconds
    - WatchdogCounter::Disarm
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    - butil::TimeTicks::Now
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, DisarmTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 26
    functionName: empty_optional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::optional<int>
    signature: butil::optional<int> empty_optional()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:30,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:31,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:36,1
    - Dst: empty_optional
      Src: /src/brpc/test/optional_unittest.cpp:40,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:47,1
    - Dst: butil::optional::has_value
      Src: /src/brpc/test/optional_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:48,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 54
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - empty_optional
    - butil::optional::has_value
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_FALSE
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:62,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 66
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, nullopt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:71,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:74,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:77,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:80,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 89
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:92,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:93,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:96,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:99,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:103,1
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:105,1
    - Dst: std::move
      Src: /src/brpc/test/optional_unittest.cpp:106,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 108
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, move)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 114
    functionName: Convert
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Convert()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    functionName: Convert
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Convert(const Obj&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 118
    functionName: Convert
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Convert(Obj&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional(const Obj&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional(Obj&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ConvertFromOptional(\n        const butil::optional<Obj>&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 135
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional(butil::optional<Obj>&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:143,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:146,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:151,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:152,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:157,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:167,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:168,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:170,1
    - Dst: butil::optional<Obj>
      Src: /src/brpc/test/optional_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 177
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::optional::optional
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::optional<Obj>
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, convert)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:180,1
    - Dst: ASSERT_THROW
      Src: /src/brpc/test/optional_unittest.cpp:182,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:183,1
    - Dst: butil::optional::value_or
      Src: /src/brpc/test/optional_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:184,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:185,1
    - Dst: butil::optional::value_or
      Src: /src/brpc/test/optional_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:186,1
    - Dst: butil::optional<double>
      Src: /src/brpc/test/optional_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:187,1
    - Dst: butil::optional<double>
      Src: /src/brpc/test/optional_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 188
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::optional<double>
    - butil::optional::value
    - butil::optional::value_or
    - ASSERT_THROW
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:192,1
    - Dst: butil::optional::emplace
      Src: /src/brpc/test/optional_unittest.cpp:192,1
    - Dst: butil::optional::emplace
      Src: /src/brpc/test/optional_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:194,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 195
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::optional::value
    - butil::optional::emplace
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, emplace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:198,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:201,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:201,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:203,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:203,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:204,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:205,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:207,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:209,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:209,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:210,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:211,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:213,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:213,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:215,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:215,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:219,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:219,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:221,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:223,1
    - Dst: noexcept
      Src: /src/brpc/test/optional_unittest.cpp:223,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:223,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:224,1
    - Dst: noexcept
      Src: /src/brpc/test/optional_unittest.cpp:224,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 225
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - value
    - swap
    - butil::optional::value
    - ASSERT_FALSE
    - noexcept
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, swap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::make_optional
      Src: /src/brpc/test/optional_unittest.cpp:228,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 231
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::make_optional
    - ASSERT_TRUE
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, make_optional)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:234,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:237,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:238,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:240,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:241,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:243,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:245,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:249,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:250,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:253,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:254,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:255,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:257,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:258,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:259,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:260,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:262,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:264,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:265,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:272,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:274,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:275,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:277,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:278,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:279,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:280,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:281,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:282,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:283,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:284,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:285,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:287,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:288,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:291,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:293,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:294,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 296
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::optional::optional
    - ASSERT_FALSE
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, comparison)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 26
    functionName: empty_optional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: butil::optional<int>
    signature: butil::optional<int> empty_optional()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:30,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:31,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:36,1
    - Dst: empty_optional
      Src: /src/brpc/test/optional_unittest.cpp:40,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:41,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:46,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:47,1
    - Dst: butil::optional::has_value
      Src: /src/brpc/test/optional_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:48,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 54
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - empty_optional
    - butil::optional::has_value
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_FALSE
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:58,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:62,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 66
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, nullopt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:71,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:74,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:77,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:80,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 89
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:92,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:93,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:96,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:99,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:103,1
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:105,1
    - Dst: std::move
      Src: /src/brpc/test/optional_unittest.cpp:106,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 108
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - ASSERT_EQ
    - ASSERT_TRUE
    - ASSERT_FALSE
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, move)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 114
    functionName: Convert
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Convert()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    functionName: Convert
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Convert(const Obj&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 118
    functionName: Convert
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Convert(Obj&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional(const Obj&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional(Obj&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ConvertFromOptional(\n        const butil::optional<Obj>&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 135
    functionName: ConvertFromOptional
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConvertFromOptional(butil::optional<Obj>&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:143,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:146,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:151,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:152,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:157,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:167,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:168,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:170,1
    - Dst: butil::optional<Obj>
      Src: /src/brpc/test/optional_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 177
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::optional::optional
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::optional<Obj>
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, convert)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:180,1
    - Dst: ASSERT_THROW
      Src: /src/brpc/test/optional_unittest.cpp:182,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:183,1
    - Dst: butil::optional::value_or
      Src: /src/brpc/test/optional_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:184,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:185,1
    - Dst: butil::optional::value_or
      Src: /src/brpc/test/optional_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:186,1
    - Dst: butil::optional<double>
      Src: /src/brpc/test/optional_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:187,1
    - Dst: butil::optional<double>
      Src: /src/brpc/test/optional_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 188
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::optional<double>
    - butil::optional::value
    - butil::optional::value_or
    - ASSERT_THROW
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:192,1
    - Dst: butil::optional::emplace
      Src: /src/brpc/test/optional_unittest.cpp:192,1
    - Dst: butil::optional::emplace
      Src: /src/brpc/test/optional_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:194,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 195
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::optional::value
    - butil::optional::emplace
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, emplace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:198,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:201,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:201,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:203,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:203,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:204,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:205,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:207,1
    - Dst: butil::optional::value
      Src: /src/brpc/test/optional_unittest.cpp:207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:209,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:209,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:210,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:211,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:213,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:213,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:215,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:215,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:219,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:219,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:221,1
    - Dst: value
      Src: /src/brpc/test/optional_unittest.cpp:221,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:223,1
    - Dst: noexcept
      Src: /src/brpc/test/optional_unittest.cpp:223,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:223,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:224,1
    - Dst: noexcept
      Src: /src/brpc/test/optional_unittest.cpp:224,1
    - Dst: swap
      Src: /src/brpc/test/optional_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 225
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - value
    - swap
    - butil::optional::value
    - ASSERT_FALSE
    - noexcept
    - butil::optional::optional
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, swap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::make_optional
      Src: /src/brpc/test/optional_unittest.cpp:228,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/optional_unittest.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 231
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::make_optional
    - ASSERT_TRUE
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, make_optional)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::optional::optional
      Src: /src/brpc/test/optional_unittest.cpp:234,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:237,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:238,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:240,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:241,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:242,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:243,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:245,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:249,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:250,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:252,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:253,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:254,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:255,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:257,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:258,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:259,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:260,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:261,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:262,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:264,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:265,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:267,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:272,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:274,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:275,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:277,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:278,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:279,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:280,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:281,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:282,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:283,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:284,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:285,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:287,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:288,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:291,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/optional_unittest.cpp:292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:293,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:294,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/optional_unittest.cpp:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 296
    functionName: TEST
    functionSourceFile: /src/brpc/test/optional_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::optional::optional
    - ASSERT_FALSE
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST(OptionalTest, comparison)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/test/stringprintf_unittest.cc:21,1
    - Dst: butil::StringAppendV
      Src: /src/brpc/test/stringprintf_unittest.cc:22,1
    - Dst: va_end
      Src: /src/brpc/test/stringprintf_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - out
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 24
    functionName: butil::StringAppendVTestHelper
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - va_start
    - butil::StringAppendV
    - va_end
    linkageType: ''
    returnType: void
    signature: void StringAppendVTestHelper(std::string* out, const char* format,
      ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/test/stringprintf_unittest.cc:21,1
    - Dst: butil::StringAppendV
      Src: /src/brpc/test/stringprintf_unittest.cc:22,1
    - Dst: va_end
      Src: /src/brpc/test/stringprintf_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - out
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 24
    functionName: butil::StringAppendVTestHelper
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - va_start
    - butil::StringAppendV
    - va_end
    linkageType: ''
    returnType: void
    signature: void StringAppendVTestHelper(std::string* out, const char* format,
      ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:29,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:33,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:35,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfMisc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:42,1
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendfEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:54,1
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendfString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:66,1
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 73
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendfInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/stringprintf_unittest.cc:80,1
    - Dst: arraysize
      Src: /src/brpc/test/stringprintf_unittest.cc:84,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:90,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:91,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:91,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:96,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:97,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:97,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 100
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - arraysize
    - butil::SStringPrintf
    - std::wstring::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfBounds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/stringprintf_unittest.cc:105,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:112,1
    - Dst: char::char
      Src: /src/brpc/test/stringprintf_unittest.cc:115,1
    - Dst: sprintf_s
      Src: /src/brpc/test/stringprintf_unittest.cc:117,1
    - Dst: butil::snprintf
      Src: /src/brpc/test/stringprintf_unittest.cc:119,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:122,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 124
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - sprintf_s
    - std::string::c_str
    - butil::snprintf
    - arraysize
    - butil::SStringPrintf
    - char::char
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, Grow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendVTestHelper
      Src: /src/brpc/test/stringprintf_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringAppendVTestHelper
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendV)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:145,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:147,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 148
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SStringPrintf
    - std::string::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, GrowBoundary)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:160,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:161,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 162
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SStringPrintf
    - std::wstring::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, Invalid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:168,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:169,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:169,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:173,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:174,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 176
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::c_str
    - butil::SStringPrintf
    - std::string::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, PositionalParameters)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:181,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:182,1
    - Dst: butil::StringAppendVTestHelper
      Src: /src/brpc/test/stringprintf_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 179
    functionDepth: 2
    functionLinenumber: 179
    functionLinenumberEnd: 186
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringPrintf
    - butil::StringAppendVTestHelper
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfErrno)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/test/stringprintf_unittest.cc:21,1
    - Dst: butil::StringAppendV
      Src: /src/brpc/test/stringprintf_unittest.cc:22,1
    - Dst: va_end
      Src: /src/brpc/test/stringprintf_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - out
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 24
    functionName: butil::StringAppendVTestHelper
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 2
    functionsReached:
    - va_start
    - butil::StringAppendV
    - va_end
    linkageType: ''
    returnType: void
    signature: void StringAppendVTestHelper(std::string* out, const char* format,
      ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/test/stringprintf_unittest.cc:21,1
    - Dst: butil::StringAppendV
      Src: /src/brpc/test/stringprintf_unittest.cc:22,1
    - Dst: va_end
      Src: /src/brpc/test/stringprintf_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - out
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 24
    functionName: butil::StringAppendVTestHelper
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 2
    functionsReached:
    - va_start
    - butil::StringAppendV
    - va_end
    linkageType: ''
    returnType: void
    signature: void StringAppendVTestHelper(std::string* out, const char* format,
      ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:29,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:33,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:33,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:35,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfMisc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:42,1
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendfEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:54,1
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendfString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:66,1
    - Dst: butil::StringAppendF
      Src: /src/brpc/test/stringprintf_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 73
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendfInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/stringprintf_unittest.cc:80,1
    - Dst: arraysize
      Src: /src/brpc/test/stringprintf_unittest.cc:84,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:90,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:91,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:91,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:96,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:97,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:97,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 100
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - arraysize
    - butil::SStringPrintf
    - std::wstring::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfBounds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/test/stringprintf_unittest.cc:105,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:112,1
    - Dst: char::char
      Src: /src/brpc/test/stringprintf_unittest.cc:115,1
    - Dst: sprintf_s
      Src: /src/brpc/test/stringprintf_unittest.cc:117,1
    - Dst: butil::snprintf
      Src: /src/brpc/test/stringprintf_unittest.cc:119,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:122,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 124
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - sprintf_s
    - std::string::c_str
    - butil::snprintf
    - arraysize
    - butil::SStringPrintf
    - char::char
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, Grow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendVTestHelper
      Src: /src/brpc/test/stringprintf_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringAppendVTestHelper
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringAppendV)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:145,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:147,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 148
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SStringPrintf
    - std::string::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, GrowBoundary)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:160,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:161,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 162
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::SStringPrintf
    - std::wstring::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, Invalid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:168,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:169,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:169,1
    - Dst: butil::SStringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:173,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/stringprintf_unittest.cc:174,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/test/stringprintf_unittest.cc:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 176
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - std::wstring::c_str
    - butil::SStringPrintf
    - std::string::c_str
    - EXPECT_STREQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, PositionalParameters)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:181,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/stringprintf_unittest.cc:181,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:182,1
    - Dst: butil::StringAppendVTestHelper
      Src: /src/brpc/test/stringprintf_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/stringprintf_unittest.cc:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 179
    functionDepth: 2
    functionLinenumber: 179
    functionLinenumberEnd: 186
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/stringprintf_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::StringPrintf
    - butil::StringAppendVTestHelper
    linkageType: ''
    returnType: void
    signature: void TEST(StringPrintfTest, StringPrintfErrno)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - freed
    argTypes:
    - std::vector<int>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 15
    functionName: butil::IntTraits
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IntTraits(std::vector<int>* freed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: butil::InvalidValue
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int InvalidValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/scoped_generic_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::Free
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 2
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void Free(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - freed
    argTypes:
    - std::vector<int>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 15
    functionName: butil::IntTraits
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IntTraits(std::vector<int>* freed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: butil::InvalidValue
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int InvalidValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/scoped_generic_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::Free
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 2
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void Free(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:39,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:46,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:47,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/scoped_generic_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:53,1
    - Dst: ScopedInt::release
      Src: /src/brpc/test/scoped_generic_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:56,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/test/scoped_generic_unittest.cc:56,1
    - Dst: ScopedInt::release
      Src: /src/brpc/test/scoped_generic_unittest.cc:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:58,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:58,1
    - Dst: ScopedInt::reset
      Src: /src/brpc/test/scoped_generic_unittest.cc:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:66,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:69,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:70,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/scoped_generic_unittest.cc:71,1
    - Dst: ScopedInt::swap
      Src: /src/brpc/test/scoped_generic_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:78,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:79,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:80,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:83,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:85,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/scoped_generic_unittest.cc:86,1
    - Dst: ScopedInt::Pass
      Src: /src/brpc/test/scoped_generic_unittest.cc:91,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:92,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:93,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/test/scoped_generic_unittest.cc:93,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:94,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:96,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 98
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached:
    - ScopedInt::release
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - ScopedInt::reset
    - ScopedInt::swap
    - ScopedInt::Pass
    - std::vector::empty
    - butil::InvalidValue
    - ScopedInt::get
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGenericTest, ScopedGeneric)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:110,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:111,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:113,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:114,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:122,1
    - Dst: ScopedInt::is_valid
      Src: /src/brpc/test/scoped_generic_unittest.cc:122,1
    - Dst: ScopedInt::reset
      Src: /src/brpc/test/scoped_generic_unittest.cc:123,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:124,1
    - Dst: ScopedInt::is_valid
      Src: /src/brpc/test/scoped_generic_unittest.cc:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 126
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ScopedInt::is_valid
    - ScopedInt::reset
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGenericTest, Operators)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGenericTest, NoCompile)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - freed
    argTypes:
    - std::vector<int>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 15
    functionName: butil::IntTraits
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IntTraits(std::vector<int>* freed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: butil::InvalidValue
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int InvalidValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/scoped_generic_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::Free
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 2
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void Free(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - freed
    argTypes:
    - std::vector<int>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 15
    functionName: butil::IntTraits
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IntTraits(std::vector<int>* freed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: butil::InvalidValue
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int InvalidValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/scoped_generic_unittest.cc:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: butil::Free
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 2
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void Free(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:39,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:39,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:46,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:47,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/scoped_generic_unittest.cc:48,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:53,1
    - Dst: ScopedInt::release
      Src: /src/brpc/test/scoped_generic_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:56,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/test/scoped_generic_unittest.cc:56,1
    - Dst: ScopedInt::release
      Src: /src/brpc/test/scoped_generic_unittest.cc:56,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:58,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:58,1
    - Dst: ScopedInt::reset
      Src: /src/brpc/test/scoped_generic_unittest.cc:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:66,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:69,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:70,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/scoped_generic_unittest.cc:71,1
    - Dst: ScopedInt::swap
      Src: /src/brpc/test/scoped_generic_unittest.cc:77,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:78,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:79,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:79,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:80,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:83,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:84,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:85,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/scoped_generic_unittest.cc:86,1
    - Dst: ScopedInt::Pass
      Src: /src/brpc/test/scoped_generic_unittest.cc:91,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:92,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/scoped_generic_unittest.cc:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:93,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/test/scoped_generic_unittest.cc:93,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:94,1
    - Dst: ScopedInt::get
      Src: /src/brpc/test/scoped_generic_unittest.cc:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:96,1
    - Dst: std::vector::size
      Src: /src/brpc/test/scoped_generic_unittest.cc:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/scoped_generic_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 98
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached:
    - ScopedInt::release
    - EXPECT_TRUE
    - ASSERT_EQ
    - ASSERT_TRUE
    - ScopedInt::reset
    - ScopedInt::swap
    - ScopedInt::Pass
    - std::vector::empty
    - butil::InvalidValue
    - ScopedInt::get
    - std::vector::clear
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGenericTest, ScopedGeneric)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:108,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:110,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:111,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:113,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:114,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:116,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/scoped_generic_unittest.cc:122,1
    - Dst: ScopedInt::is_valid
      Src: /src/brpc/test/scoped_generic_unittest.cc:122,1
    - Dst: ScopedInt::reset
      Src: /src/brpc/test/scoped_generic_unittest.cc:123,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/scoped_generic_unittest.cc:124,1
    - Dst: ScopedInt::is_valid
      Src: /src/brpc/test/scoped_generic_unittest.cc:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 126
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - ScopedInt::is_valid
    - ScopedInt::reset
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGenericTest, Operators)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 150
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TEST(ScopedGenericTest, NoCompile)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 22
    functionName: DFAKE_MUTEX
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_MUTEX(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: AssertReporter::AssertReporter
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertReporter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: AssertReporter::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~AssertReporter()
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AssertReporter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: AssertReporter::fail_state
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool fail_state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: AssertReporter::reset
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: AssertReporter::AssertReporter
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertReporter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: AssertReporter::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~AssertReporter()
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AssertReporter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: AssertReporter::fail_state
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool fail_state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: AssertReporter::reset
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:60,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:63,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:63,1
    - Dst: DFAKE_SCOPED_LOCK_THREAD_LOCKED
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:66,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:67,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:67,1
    - Dst: DFAKE_SCOPED_LOCK_THREAD_LOCKED
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:69,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:70,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 73
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_LOCK_THREAD_LOCKED
    - AssertReporter::AssertReporter
    - AssertReporter*::fail_state
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, BookCriticalSection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:76,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:79,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:79,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:82,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:83,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:83,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:85,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:86,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:86,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:93,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 95
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertReporter::AssertReporter
    - AssertReporter*::fail_state
    - DFAKE_SCOPED_LOCK
    - EXPECT_FALSE
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, ScopedRecursiveBookCriticalSection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:98,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:101,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:101,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:104,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:105,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:105,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:109,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:110,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:110,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:113,1
    - Dst: EXPECT_NDEBUG_FALSE_DEBUG_TRUE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:114,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:114,1
    - Dst: AssertReporter*::reset
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:116,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:122,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:123,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 125
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertReporter::AssertReporter
    - AssertReporter*::fail_state
    - EXPECT_NDEBUG_FALSE_DEBUG_TRUE
    - AssertReporter*::reset
    - DFAKE_SCOPED_LOCK
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, ScopedBookCriticalSection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK_THREAD_LOCKED
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:135,1
    - Dst: DFAKE_SCOPED_LOCK_THREAD_LOCKED
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:139,1
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:155,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:156,1
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:163,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:173,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:174,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:176,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:177,1
    - Dst: EXPECT_NDEBUG_FALSE_DEBUG_TRUE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:179,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 180
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertReporter::AssertReporter
    - butil::DelegateSimpleThread::Start
    - AssertReporter*::fail_state
    - butil::DelegateSimpleThread::Join
    - EXPECT_NDEBUG_FALSE_DEBUG_TRUE
    - push
    - DFAKE_SCOPED_LOCK_THREAD_LOCKED
    - pop
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, MTBookCriticalSectionTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - asserter
    argTypes:
    - butil::AsserterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: NonThreadSafeQueue::NonThreadSafeQueue
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeQueue(butil::AsserterBase* asserter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK_THREAD_LOCKED
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: NonThreadSafeQueue::push
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_LOCK_THREAD_LOCKED
    linkageType: ''
    returnType: void
    signature: void push(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK_THREAD_LOCKED
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: NonThreadSafeQueue::pop
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_LOCK_THREAD_LOCKED
    linkageType: ''
    returnType: int
    signature: int pop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' queue'
    argTypes:
    - NonThreadSafeQueue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 152
    functionName: QueueUser::QueueUser
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QueueUser(NonThreadSafeQueue& queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:155,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 157
    functionName: QueueUser::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - pop
    - push
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:192,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:193,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:193,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:197,1
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:213,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:214,1
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:221,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:231,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:232,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:234,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:235,1
    - Dst: EXPECT_NDEBUG_FALSE_DEBUG_TRUE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:237,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 238
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertReporter::AssertReporter
    - butil::DelegateSimpleThread::Start
    - AssertReporter*::fail_state
    - butil::DelegateSimpleThread::Join
    - butil::PlatformThread::Sleep
    - EXPECT_NDEBUG_FALSE_DEBUG_TRUE
    - push
    - DFAKE_SCOPED_LOCK
    - pop
    - butil::TimeDelta::FromSeconds
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, MTScopedBookCriticalSectionTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - asserter
    argTypes:
    - butil::AsserterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: NonThreadSafeQueue::NonThreadSafeQueue
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeQueue(butil::AsserterBase* asserter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:192,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:193,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 194
    functionName: NonThreadSafeQueue::push
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromSeconds
    - DFAKE_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void push(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 199
    functionName: NonThreadSafeQueue::pop
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int pop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' queue'
    argTypes:
    - NonThreadSafeQueue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 210
    functionName: QueueUser::QueueUser
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QueueUser(NonThreadSafeQueue& queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:213,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: QueueUser::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - pop
    - push
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:250,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:251,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:251,1
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:255,1
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:276,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:280,1
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:288,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:300,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:301,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:303,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:304,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:306,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 307
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertReporter::AssertReporter
    - butil::DelegateSimpleThread::Start
    - AssertReporter*::fail_state
    - butil::DelegateSimpleThread::Join
    - butil::PlatformThread::Sleep
    - push
    - DFAKE_SCOPED_LOCK
    - pop
    - butil::TimeDelta::FromSeconds
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, MTSynchedScopedBookCriticalSectionTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - asserter
    argTypes:
    - butil::AsserterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: NonThreadSafeQueue::NonThreadSafeQueue
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeQueue(butil::AsserterBase* asserter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:250,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:251,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 252
    functionName: NonThreadSafeQueue::push
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromSeconds
    - DFAKE_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void push(int value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 257
    functionName: NonThreadSafeQueue::pop
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int pop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' queue'
    - ' lock'
    argTypes:
    - NonThreadSafeQueue
    - butil::Lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: QueueUser::QueueUser
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QueueUser(NonThreadSafeQueue& queue, butil::Lock& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:276,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 282
    functionName: QueueUser::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - pop
    - push
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:319,1
    - Dst: bar
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:320,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:321,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:321,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:325,1
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:330,1
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:350,1
    - Dst: bar
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:354,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:358,1
    - Dst: AssertReporter::AssertReporter
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:366,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:378,1
    - Dst: butil::DelegateSimpleThread::Start
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:379,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:381,1
    - Dst: butil::DelegateSimpleThread::Join
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:382,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:384,1
    - Dst: AssertReporter*::fail_state
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 385
    functionName: TEST
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - AssertReporter::AssertReporter
    - bar
    - butil::DelegateSimpleThread::Start
    - AssertReporter*::fail_state
    - butil::DelegateSimpleThread::Join
    - butil::PlatformThread::Sleep
    - push
    - pop
    - butil::TimeDelta::FromSeconds
    - EXPECT_FALSE
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadCollisionTest, MTSynchedScopedRecursiveBookCriticalSectionTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - asserter
    argTypes:
    - butil::AsserterBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 316
    functionName: NonThreadSafeQueue::NonThreadSafeQueue
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeQueue(butil::AsserterBase* asserter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:319,1
    - Dst: NonThreadSafeQueue::bar
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:320,1
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:321,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: NonThreadSafeQueue::push
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - NonThreadSafeQueue::bar
    - butil::TimeDelta::FromSeconds
    - butil::PlatformThread::Sleep
    linkageType: ''
    returnType: void
    signature: void push(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 327
    functionName: NonThreadSafeQueue::pop
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: int
    signature: int pop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DFAKE_SCOPED_RECURSIVE_LOCK
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 331
    functionName: NonThreadSafeQueue::bar
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 1
    functionsReached:
    - DFAKE_SCOPED_RECURSIVE_LOCK
    linkageType: ''
    returnType: void
    signature: void bar()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' queue'
    - ' lock'
    argTypes:
    - NonThreadSafeQueue
    - butil::Lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 345
    functionName: QueueUser::QueueUser
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QueueUser(NonThreadSafeQueue& queue, butil::Lock& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:350,1
    - Dst: bar
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:354,1
    - Dst: pop
      Src: /src/brpc/test/thread_collision_warner_unittest.cc:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 360
    functionName: QueueUser::OVERRIDE
    functionSourceFile: /src/brpc/test/thread_collision_warner_unittest.cc
    functionUses: 0
    functionsReached:
    - pop
    - bar
    - push
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:28,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:29,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:32,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:33,1
    - Dst: ClassB::ClassB
      Src: /src/brpc/test/leak_tracker_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:36,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 38
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    - butil::debug::LeakTracker::NumLiveInstances
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NotEnabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:53,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:58,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:62,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 68
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:73,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:75,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:76,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:77,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:80,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:84,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:88,1
    - Dst: ClassA::ClassA
      Src: /src/brpc/test/leak_tracker_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:92,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:94,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:95,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:97,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/test/leak_tracker_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    - Dst: butil::debug::LeakTracker::NumLiveInstances
      Src: /src/brpc/test/leak_tracker_unittest.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 101
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ClassA::ClassA
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, LinkedList)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::CheckForLeaks
      Src: /src/brpc/test/leak_tracker_unittest.cc:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::debug::TEST
    functionSourceFile: /src/brpc/test/leak_tracker_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::CheckForLeaks
    linkageType: ''
    returnType: void
    signature: void TEST(LeakTrackerTest, NoOpCheckForLeaks)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: KEY_UNUSED
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_UNUSED(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: KEY_USABLE
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_USABLE(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:57,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadLocal::get
    - butil::thread_setspecific
    - ThreadKeyData::ThreadKeyData
    - butil::thread_key_delete
    - ThreadLocal::reset
    - ASSERT_NE
    - butil::thread_getspecific
    - std::unique_ptr::get
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:89,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:90,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:104,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 112
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - std::vector::back
    - butil::fast_rand_less_than
    - std::vector::erase
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::begin
    - KEY_UNUSED
    - std::vector::size
    - std::vector::resize
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 122
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_key_create
    - EXPECT_TRUE
    - butil::thread_key_delete
    - EXPECT_EQ
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:132,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 137
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_create_and_delete)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:153,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 156
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::get
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocal<int>::ThreadLocal<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:172,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:175,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_join
    - pthread_create
    - ThreadLocal<int>::ThreadLocal<int>
    - sleep
    - butil::get
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_multi_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadLocal<butil::atomic<int>>*>
      Src: /src/brpc/test/thread_key_unittest.cpp:185,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:186,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:190,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 199
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::store
    - butil::fast_rand_less_than
    - auto::load
    - EXPECT_NE
    - butil::atomic<int>::atomic<int>
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - auto::get
    - auto::reset
    - butil::fetch_add
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:211,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:214,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:217,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 221
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::load
    - sleep
    - ThreadLocal::for_each
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_for_each)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 226
    functionName: butil::ThreadKeyArg
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyArg
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:243,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:256,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 259
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::thread_setspecific
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:283,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 310
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadKey::ThreadKey
    - std::vector::back
    - butil::thread_setspecific
    - pthread_create
    - pthread_join
    - butil::thread_key_delete
    - usleep
    - sleep
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_multi_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 326
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 325
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfArgs()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:331,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:337,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:347,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:353,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::thread_setspecific
    - butil::Timer::n_elapsed
    - int::int
    - pthread_setspecific
    - pthread_getspecific
    - butil::thread_getspecific
    - std::unique_ptr::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyPerfFunc(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:392,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:396,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:410,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 414
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - pthread_join
    - pthread_create
    - butil::thread_key_delete
    - pthread_key_delete
    - butil::ThreadKey::ThreadKey
    - usleep
    - pthread_key_create
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfTest(int thread_num, bool test_pthread_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 425
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadLocalPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:431,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:436,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:440,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:444,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 446
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - auto::tl::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPerfFunc(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:469,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:473,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:482,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 485
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:490,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:491,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:494,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:495,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:499,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:500,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 487
    functionDepth: 2
    functionLinenumber: 487
    functionLinenumberEnd: 503
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::ThreadKeyPerfTest
    - butil::ThreadLocalPerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: KEY_UNUSED
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_UNUSED(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: KEY_USABLE
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_USABLE(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:57,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadLocal::get
    - butil::thread_setspecific
    - ThreadKeyData::ThreadKeyData
    - butil::thread_key_delete
    - ThreadLocal::reset
    - ASSERT_NE
    - butil::thread_getspecific
    - std::unique_ptr::get
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:89,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:90,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:104,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 112
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - std::vector::back
    - butil::fast_rand_less_than
    - std::vector::erase
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::begin
    - KEY_UNUSED
    - std::vector::size
    - std::vector::resize
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 122
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_key_create
    - EXPECT_TRUE
    - butil::thread_key_delete
    - EXPECT_EQ
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:132,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 137
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_create_and_delete)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:153,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 156
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::get
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocal<int>::ThreadLocal<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:172,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:175,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_join
    - pthread_create
    - ThreadLocal<int>::ThreadLocal<int>
    - sleep
    - butil::get
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_multi_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadLocal<butil::atomic<int>>*>
      Src: /src/brpc/test/thread_key_unittest.cpp:185,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:186,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:190,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 199
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::store
    - butil::fast_rand_less_than
    - auto::load
    - EXPECT_NE
    - butil::atomic<int>::atomic<int>
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - auto::get
    - auto::reset
    - butil::fetch_add
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:211,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:214,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:217,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 221
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::load
    - sleep
    - ThreadLocal::for_each
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_for_each)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 226
    functionName: butil::ThreadKeyArg
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyArg
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:243,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:256,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 259
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::thread_setspecific
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:283,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 310
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadKey::ThreadKey
    - std::vector::back
    - butil::thread_setspecific
    - pthread_create
    - pthread_join
    - butil::thread_key_delete
    - usleep
    - sleep
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_multi_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 326
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 325
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfArgs()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:331,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:337,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:347,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:353,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::thread_setspecific
    - butil::Timer::n_elapsed
    - int::int
    - pthread_setspecific
    - pthread_getspecific
    - butil::thread_getspecific
    - std::unique_ptr::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyPerfFunc(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:392,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:396,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:410,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 414
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - pthread_join
    - pthread_create
    - butil::thread_key_delete
    - pthread_key_delete
    - butil::ThreadKey::ThreadKey
    - usleep
    - pthread_key_create
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfTest(int thread_num, bool test_pthread_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 425
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadLocalPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:431,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:436,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:440,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:444,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 446
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - auto::tl::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPerfFunc(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:469,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:473,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:482,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 485
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:490,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:491,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:494,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:495,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:499,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:500,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 487
    functionDepth: 2
    functionLinenumber: 487
    functionLinenumberEnd: 503
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::ThreadKeyPerfTest
    - butil::ThreadLocalPerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: KEY_UNUSED
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_UNUSED(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: KEY_USABLE
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_USABLE(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:57,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadLocal::get
    - butil::thread_setspecific
    - ThreadKeyData::ThreadKeyData
    - butil::thread_key_delete
    - ThreadLocal::reset
    - ASSERT_NE
    - butil::thread_getspecific
    - std::unique_ptr::get
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:89,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:90,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:104,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 112
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - std::vector::back
    - butil::fast_rand_less_than
    - std::vector::erase
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::begin
    - KEY_UNUSED
    - std::vector::size
    - std::vector::resize
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 122
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_key_create
    - EXPECT_TRUE
    - butil::thread_key_delete
    - EXPECT_EQ
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:132,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 137
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_create_and_delete)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:153,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 156
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::get
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocal<int>::ThreadLocal<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:172,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:175,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_join
    - pthread_create
    - ThreadLocal<int>::ThreadLocal<int>
    - sleep
    - butil::get
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_multi_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadLocal<butil::atomic<int>>*>
      Src: /src/brpc/test/thread_key_unittest.cpp:185,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:186,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:190,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 199
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::store
    - butil::fast_rand_less_than
    - auto::load
    - EXPECT_NE
    - butil::atomic<int>::atomic<int>
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - auto::get
    - auto::reset
    - butil::fetch_add
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:211,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:214,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:217,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 221
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::load
    - sleep
    - ThreadLocal::for_each
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_for_each)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 226
    functionName: butil::ThreadKeyArg
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyArg
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:243,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:256,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 259
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::thread_setspecific
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:283,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 310
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadKey::ThreadKey
    - std::vector::back
    - butil::thread_setspecific
    - pthread_create
    - pthread_join
    - butil::thread_key_delete
    - usleep
    - sleep
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_multi_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 326
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 325
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfArgs()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:331,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:337,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:347,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:353,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::thread_setspecific
    - butil::Timer::n_elapsed
    - int::int
    - pthread_setspecific
    - pthread_getspecific
    - butil::thread_getspecific
    - std::unique_ptr::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyPerfFunc(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:392,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:396,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:410,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 414
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - pthread_join
    - pthread_create
    - butil::thread_key_delete
    - pthread_key_delete
    - butil::ThreadKey::ThreadKey
    - usleep
    - pthread_key_create
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfTest(int thread_num, bool test_pthread_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 425
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadLocalPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:431,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:436,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:440,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:444,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 446
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - auto::tl::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPerfFunc(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:469,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:473,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:482,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 485
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:490,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:491,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:494,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:495,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:499,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:500,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 487
    functionDepth: 2
    functionLinenumber: 487
    functionLinenumberEnd: 503
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::ThreadKeyPerfTest
    - butil::ThreadLocalPerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: KEY_UNUSED
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_UNUSED(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: KEY_USABLE
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_USABLE(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:57,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:58,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 83
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadLocal::get
    - butil::thread_setspecific
    - ThreadKeyData::ThreadKeyData
    - butil::thread_key_delete
    - ThreadLocal::reset
    - ASSERT_NE
    - butil::thread_getspecific
    - std::unique_ptr::get
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:89,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:90,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:99,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:101,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:104,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 112
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - ASSERT_TRUE
    - std::vector::back
    - butil::fast_rand_less_than
    - std::vector::erase
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::begin
    - KEY_UNUSED
    - std::vector::size
    - std::vector::resize
    - std::vector::emplace_back
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_seq)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:117,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 122
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_key_create
    - EXPECT_TRUE
    - butil::thread_key_delete
    - EXPECT_EQ
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:130,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:132,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 137
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::BaseIteratorRangeToNumberTraits::max
    - sleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_create_and_delete)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:141,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:143,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:148,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:153,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 156
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::get
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocal<int>::ThreadLocal<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:169,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:172,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:175,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - pthread_join
    - pthread_create
    - ThreadLocal<int>::ThreadLocal<int>
    - sleep
    - butil::get
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_multi_thread)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadLocal<butil::atomic<int>>*>
      Src: /src/brpc/test/thread_key_unittest.cpp:185,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:186,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:190,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 199
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::store
    - butil::fast_rand_less_than
    - auto::load
    - EXPECT_NE
    - butil::atomic<int>::atomic<int>
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - auto::get
    - auto::reset
    - butil::fetch_add
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:207,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:211,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:214,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:217,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 221
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::load
    - sleep
    - ThreadLocal::for_each
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_local_for_each)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 226
    functionName: butil::ThreadKeyArg
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyArg
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:236,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:241,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:243,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:251,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:256,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 259
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - butil::thread_setspecific
    - butil::fast_rand_less_than
    - auto::size
    - EXPECT_EQ
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:268,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:283,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:305,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 310
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - butil::thread_key_create
    - ASSERT_TRUE
    - ThreadKey::ThreadKey
    - std::vector::back
    - butil::thread_setspecific
    - pthread_create
    - pthread_join
    - butil::thread_key_delete
    - usleep
    - sleep
    - butil::thread_getspecific
    - static_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_multi_thread)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 326
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadKeyPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 325
    functionName: butil::ThreadKeyPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfArgs()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:331,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:333,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:335,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:337,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:347,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:353,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::thread_setspecific
    - butil::Timer::n_elapsed
    - int::int
    - pthread_setspecific
    - pthread_getspecific
    - butil::thread_getspecific
    - std::unique_ptr::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyPerfFunc(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:379,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:392,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:396,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:410,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 414
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - butil::thread_key_create
    - pthread_join
    - pthread_create
    - butil::thread_key_delete
    - pthread_key_delete
    - butil::ThreadKey::ThreadKey
    - usleep
    - pthread_key_create
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadKeyPerfTest(int thread_num, bool test_pthread_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 425
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadLocalPerfArgs
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::ThreadLocalPerfArgs
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfArgs()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:430,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:431,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:436,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:440,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:444,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 446
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - auto::tl::get
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPerfFunc(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:456,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:469,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:473,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:482,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 485
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - usleep
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:490,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:491,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:494,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:495,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:499,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:500,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 487
    functionDepth: 2
    functionLinenumber: 487
    functionLinenumberEnd: 503
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::ThreadKeyPerfTest
    - butil::ThreadLocalPerfTest
    linkageType: ''
    returnType: void
    signature: void TEST(ThreadLocalTest, thread_key_performance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:35,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/string_number_conversions_unittest.cc:36,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:41,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/string_number_conversions_unittest.cc:44,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:49,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:51,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:52,1
    - Dst: butil::IntToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:52,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:53,1
    - Dst: butil::UintToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:54,1
    - Dst: butil::UintToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:54,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:54,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:58,1
    - Dst: butil::Int64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:59,1
    - Dst: butil::Int64ToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:59,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:60,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:61,1
    - Dst: butil::Uint64ToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:61,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 63
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - butil::Int64ToString
    - butil::UintToString16
    - butil::Uint64ToString16
    - arraysize
    - butil::UTF8ToUTF16
    - brpc::GetJsService::jquery_min
    - butil::UintToString
    - butil::Uint64ToString
    - butil::IntToString16
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::Int64ToString16
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, IntToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:77,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 78
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Uint64ToString
    - ARRAYSIZE_UNSAFE
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, Uint64ToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:81,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/string_number_conversions_unittest.cc:82,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:100,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 101
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::Uint64ToString
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, SizeTToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:137,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:138,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:142,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:143,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:152,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:153,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:155,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:157,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:158,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:162,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:162,1
    - Dst: string16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 164
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - ARRAYSIZE_UNSAFE
    - arraysize
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::StringToInt
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:201,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:202,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:206,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:207,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:214,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:216,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:217,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:219,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:221,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:222,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:226,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:226,1
    - Dst: string16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 228
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - ARRAYSIZE_UNSAFE
    - arraysize
    - butil::UTF8ToUTF16
    - butil::StringToUint
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToUint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:240,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:241,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:242,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:243,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:271,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:272,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:276,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:277,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:286,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:287,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:289,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:291,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 293
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::StringToInt64
    - butil::UTF8ToUTF16
    - arraysize
    - GG_INT64_C
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToInt64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:307,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:308,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:330,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:338,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:338,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:339,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:341,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:343,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:344,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:351,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:353,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:353,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:354,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:356,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:358,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:358,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 295
    functionDepth: 1
    functionLinenumber: 295
    functionLinenumberEnd: 360
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::UTF8ToUTF16
    - arraysize
    - GG_UINT64_C
    - butil::StringToUint64
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToUint64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:363,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/string_number_conversions_unittest.cc:364,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:405,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:407,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:408,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:412,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:413,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:420,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:422,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:423,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:425,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:427,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:427,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 429
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::StringToSizeT
    - butil::UTF8ToUTF16
    - arraysize
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToSizeT)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:468,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:470,1
    - Dst: butil::HexStringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:470,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:471,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:477,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:479,1
    - Dst: butil::HexStringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:479,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:480,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 481
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::HexStringToInt
    - ARRAYSIZE_UNSAFE
    - arraysize
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:528,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:530,1
    - Dst: butil::HexStringToUInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:531,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:537,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:539,1
    - Dst: butil::HexStringToUInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:539,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:540,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 541
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::HexStringToUInt
    - arraysize
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToUInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:553,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:561,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:585,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:587,1
    - Dst: butil::HexStringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:587,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:588,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:594,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:596,1
    - Dst: butil::HexStringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:596,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:597,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 543
    functionDepth: 1
    functionLinenumber: 543
    functionLinenumberEnd: 598
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - arraysize
    - butil::HexStringToInt64
    - GG_INT64_C
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToInt64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:610,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:618,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:625,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:647,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:649,1
    - Dst: butil::HexStringToUInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:649,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:650,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:656,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:658,1
    - Dst: butil::HexStringToUInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:658,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 660
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - arraysize
    - GG_INT64_C
    - GG_UINT64_C
    - butil::HexStringToUInt64
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToUInt64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:692,1
    - Dst: butil::HexStringToBytes
      Src: /src/brpc/test/string_number_conversions_unittest.cc:692,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_number_conversions_unittest.cc:695,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/string_number_conversions_unittest.cc:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:696,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_number_conversions_unittest.cc:696,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_number_conversions_unittest.cc:696,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::equal
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::vector::end
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 700
      start: 662
    functionDepth: 1
    functionLinenumber: 662
    functionLinenumberEnd: 700
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - EXPECT_TRUE
    - butil::HexStringToBytes
    - ARRAYSIZE_UNSAFE
    - std::vector::end
    - std::equal
    - std::vector::begin
    - static_cast<uint8_t>
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToBytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:738,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:741,1
    - Dst: butil::StringToDouble
      Src: /src/brpc/test/string_number_conversions_unittest.cc:741,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:743,1
    - Dst: EXPECT_DOUBLE_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:745,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:752,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:754,1
    - Dst: butil::StringToDouble
      Src: /src/brpc/test/string_number_conversions_unittest.cc:754,1
    - Dst: EXPECT_DOUBLE_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:755,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 702
    functionDepth: 1
    functionLinenumber: 702
    functionLinenumberEnd: 756
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringToDouble
    - ARRAYSIZE_UNSAFE
    - arraysize
    - EXPECT_DOUBLE_EQ
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToDouble)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:773,1
    - Dst: butil::DoubleToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:773,1
    - Dst: memcpy
      Src: /src/brpc/test/string_number_conversions_unittest.cc:779,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:779,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:780,1
    - Dst: butil::DoubleToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:780,1
    - Dst: memcpy
      Src: /src/brpc/test/string_number_conversions_unittest.cc:784,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:784,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:785,1
    - Dst: butil::DoubleToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 758
    functionDepth: 1
    functionLinenumber: 758
    functionLinenumberEnd: 786
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::DoubleToString
    - arraysize
    - memcpy
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, DoubleToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HexEncode
      Src: /src/brpc/test/string_number_conversions_unittest.cc:789,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:790,1
    - Dst: std::string::length
      Src: /src/brpc/test/string_number_conversions_unittest.cc:790,1
    - Dst: butil::HexEncode
      Src: /src/brpc/test/string_number_conversions_unittest.cc:792,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:793,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_number_conversions_unittest.cc:793,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 794
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::compare
    - butil::HexEncode
    - std::string::length
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexEncode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:35,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/string_number_conversions_unittest.cc:36,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:41,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/string_number_conversions_unittest.cc:44,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:49,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:51,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:52,1
    - Dst: butil::IntToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:52,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:53,1
    - Dst: butil::UintToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:54,1
    - Dst: butil::UintToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:54,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:54,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:58,1
    - Dst: butil::Int64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:59,1
    - Dst: butil::Int64ToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:59,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:60,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:60,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:61,1
    - Dst: butil::Uint64ToString16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:61,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 63
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - butil::Int64ToString
    - butil::UintToString16
    - butil::Uint64ToString16
    - arraysize
    - butil::UTF8ToUTF16
    - brpc::GetJsService::jquery_min
    - butil::UintToString
    - butil::Uint64ToString
    - butil::IntToString16
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::Int64ToString16
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, IntToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:77,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 78
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Uint64ToString
    - ARRAYSIZE_UNSAFE
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, Uint64ToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:81,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/string_number_conversions_unittest.cc:82,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:99,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:100,1
    - Dst: butil::Uint64ToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 101
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::Uint64ToString
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, SizeTToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:137,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:138,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:142,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:143,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:150,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:152,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:153,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:155,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:157,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:158,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:162,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:162,1
    - Dst: string16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 164
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - ARRAYSIZE_UNSAFE
    - arraysize
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::StringToInt
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:201,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:202,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:204,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:206,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:207,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:214,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:216,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:216,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:217,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:219,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:221,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:221,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:222,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:226,1
    - Dst: butil::StringToUint
      Src: /src/brpc/test/string_number_conversions_unittest.cc:226,1
    - Dst: string16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 228
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - string16
    - ARRAYSIZE_UNSAFE
    - arraysize
    - butil::UTF8ToUTF16
    - butil::StringToUint
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToUint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:240,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:241,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:242,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:243,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:271,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:271,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:272,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:274,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:276,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:277,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:284,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:286,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:286,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:287,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:289,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:291,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:291,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 293
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::StringToInt64
    - butil::UTF8ToUTF16
    - arraysize
    - GG_INT64_C
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToInt64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:307,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:308,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:330,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:336,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:338,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:338,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:339,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:341,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:343,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:343,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:344,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:351,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:353,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:353,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:354,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:356,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:358,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:358,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 295
    functionDepth: 1
    functionLinenumber: 295
    functionLinenumberEnd: 360
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::UTF8ToUTF16
    - arraysize
    - GG_UINT64_C
    - butil::StringToUint64
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToUint64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/string_number_conversions_unittest.cc:363,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/test/string_number_conversions_unittest.cc:364,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:405,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:407,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:407,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:408,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:410,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:412,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:413,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:420,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:422,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:423,1
    - Dst: butil::UTF8ToUTF16
      Src: /src/brpc/test/string_number_conversions_unittest.cc:425,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:427,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/test/string_number_conversions_unittest.cc:427,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 429
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::StringToSizeT
    - butil::UTF8ToUTF16
    - arraysize
    - EXPECT_FALSE
    - butil::BaseIteratorRangeToNumberTraits::max
    - EXPECT_EQ
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToSizeT)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:468,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:470,1
    - Dst: butil::HexStringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:470,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:471,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:477,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:479,1
    - Dst: butil::HexStringToInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:479,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:480,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 481
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::HexStringToInt
    - ARRAYSIZE_UNSAFE
    - arraysize
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:528,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:530,1
    - Dst: butil::HexStringToUInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:531,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:537,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:539,1
    - Dst: butil::HexStringToUInt
      Src: /src/brpc/test/string_number_conversions_unittest.cc:539,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:540,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 541
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::HexStringToUInt
    - arraysize
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToUInt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:553,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:561,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:585,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:587,1
    - Dst: butil::HexStringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:587,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:588,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:594,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:596,1
    - Dst: butil::HexStringToInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:596,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:597,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 543
    functionDepth: 1
    functionLinenumber: 543
    functionLinenumberEnd: 598
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - arraysize
    - butil::HexStringToInt64
    - GG_INT64_C
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToInt64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:610,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:618,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/test/string_number_conversions_unittest.cc:625,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:647,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:649,1
    - Dst: butil::HexStringToUInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:649,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:650,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:656,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:658,1
    - Dst: butil::HexStringToUInt64
      Src: /src/brpc/test/string_number_conversions_unittest.cc:658,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 660
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - arraysize
    - GG_INT64_C
    - GG_UINT64_C
    - butil::HexStringToUInt64
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToUInt64)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:689,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:692,1
    - Dst: butil::HexStringToBytes
      Src: /src/brpc/test/string_number_conversions_unittest.cc:692,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/string_number_conversions_unittest.cc:695,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/string_number_conversions_unittest.cc:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:696,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_number_conversions_unittest.cc:696,1
    - Dst: std::vector::size
      Src: /src/brpc/test/string_number_conversions_unittest.cc:696,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::equal
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::vector::end
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/string_number_conversions_unittest.cc:697,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 700
      start: 662
    functionDepth: 1
    functionLinenumber: 662
    functionLinenumberEnd: 700
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - EXPECT_TRUE
    - butil::HexStringToBytes
    - ARRAYSIZE_UNSAFE
    - std::vector::end
    - std::equal
    - std::vector::begin
    - static_cast<uint8_t>
    - EXPECT_EQ
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexStringToBytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:738,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:741,1
    - Dst: butil::StringToDouble
      Src: /src/brpc/test/string_number_conversions_unittest.cc:741,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:743,1
    - Dst: EXPECT_DOUBLE_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:745,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:752,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:754,1
    - Dst: butil::StringToDouble
      Src: /src/brpc/test/string_number_conversions_unittest.cc:754,1
    - Dst: EXPECT_DOUBLE_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:755,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 702
    functionDepth: 1
    functionLinenumber: 702
    functionLinenumberEnd: 756
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::StringToDouble
    - ARRAYSIZE_UNSAFE
    - arraysize
    - EXPECT_DOUBLE_EQ
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, StringToDouble)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/string_number_conversions_unittest.cc:772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:773,1
    - Dst: butil::DoubleToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:773,1
    - Dst: memcpy
      Src: /src/brpc/test/string_number_conversions_unittest.cc:779,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:779,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:780,1
    - Dst: butil::DoubleToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:780,1
    - Dst: memcpy
      Src: /src/brpc/test/string_number_conversions_unittest.cc:784,1
    - Dst: arraysize
      Src: /src/brpc/test/string_number_conversions_unittest.cc:784,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:785,1
    - Dst: butil::DoubleToString
      Src: /src/brpc/test/string_number_conversions_unittest.cc:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 758
    functionDepth: 1
    functionLinenumber: 758
    functionLinenumberEnd: 786
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - ARRAYSIZE_UNSAFE
    - butil::DoubleToString
    - arraysize
    - memcpy
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, DoubleToString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HexEncode
      Src: /src/brpc/test/string_number_conversions_unittest.cc:789,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:790,1
    - Dst: std::string::length
      Src: /src/brpc/test/string_number_conversions_unittest.cc:790,1
    - Dst: butil::HexEncode
      Src: /src/brpc/test/string_number_conversions_unittest.cc:792,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/string_number_conversions_unittest.cc:793,1
    - Dst: std::string::compare
      Src: /src/brpc/test/string_number_conversions_unittest.cc:793,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 794
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_number_conversions_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::compare
    - butil::HexEncode
    - std::string::length
    linkageType: ''
    returnType: void
    signature: void TEST(StringNumberConversionsTest, HexEncode)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: PrometheusMetricsDumperTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: PrometheusMetricsDumperTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:35,1
    - Dst: brpc::GetMetricsName
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:37,1
    - Dst: brpc::GetMetricsName
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:39,1
    - Dst: brpc::GetMetricsName
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::GetMetricsName
    linkageType: ''
    returnType: void
    signature: void TEST_F(PrometheusMetricsDumperTest, GetMetricsName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: PrometheusMetricsDumperTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: PrometheusMetricsDumperTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:35,1
    - Dst: brpc::GetMetricsName
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:37,1
    - Dst: brpc::GetMetricsName
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:39,1
    - Dst: brpc::GetMetricsName
      Src: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_prometheus_metrics_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::GetMetricsName
    linkageType: ''
    returnType: void
    signature: void TEST_F(PrometheusMetricsDumperTest, GetMetricsName)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_socket_unittest.cpp:68,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_socket_unittest.cpp:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:77,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_socket_unittest.cpp:77,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_socket_unittest.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 79
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - RUN_ALL_TESTS
    - RegisterProtocol
    - EXPECT_EQ
    - testing::InitGoogleTest
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: WaitData
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WaitData()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WaitData*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:90,1
    - Dst: static_cast<WaitData*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:91,1
    - Dst: static_cast<WaitData*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:92,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 94
    functionName: OnWaitIdReset
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<WaitData*>
    linkageType: ''
    returnType: int
    signature: "int OnWaitIdReset(bthread_id_t id, void* data, int error_code,\n                  const
      std::string& error_text)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 99
    functionName: SocketTest::SocketTest
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~SocketTest()
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 115
    functionName: CheckRecycle::BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:121,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:121,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:124,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:124,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:129,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:132,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:132,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:133,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:134,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:135,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:136,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:137,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:138,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:139,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:141,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:145,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 146
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - socketpair
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - CheckRecycle::CheckRecycle
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::get
    - str2endpoint
    - close
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, not_recycle_until_zero_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:152,1
    - Dst: brpc::Socket*::FightAuthentication
      Src: /src/brpc/test/brpc_socket_unittest.cpp:155,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_socket_unittest.cpp:156,1
    - Dst: brpc::Socket*::SetAuthentication
      Src: /src/brpc/test/brpc_socket_unittest.cpp:157,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: auth_fighter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Socket*::SetAuthentication
    - bthread_usleep
    - fetch_add
    - brpc::Socket*::FightAuthentication
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * auth_fighter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:167,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:169,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:169,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:173,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/brpc_socket_unittest.cpp:173,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:173,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:176,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:179,1
    - Dst: load
      Src: /src/brpc/test/brpc_socket_unittest.cpp:179,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:183,1
    - Dst: brpc::SocketUniquePtr::FightAuthentication
      Src: /src/brpc/test/brpc_socket_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:184,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:186,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:186,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 187
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - Socket::Create
    - ASSERT_TRUE
    - bthread_start_urgent
    - brpc::SocketUniquePtr::id
    - load
    - bthread_join
    - brpc::SocketUniquePtr::FightAuthentication
    - brpc::SocketUniquePtr::get
    - ASSERT_NE
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, authentication)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 193
    functionName: MyMessage::MyMessage
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyMessage(const char* str, size_t len, int* called = NULL)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:196,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_socket_unittest.cpp:198,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/brpc_socket_unittest.cpp:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - out_buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 202
    functionName: MyMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - fetch_add
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AppendAndDestroySelf(butil::IOBuf* out_buf, brpc::Socket*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: MyErrorMessage::MyErrorMessage
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyErrorMessage(const butil::Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: MyErrorMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AppendAndDestroySelf(butil::IOBuf*, brpc::Socket*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:220,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:220,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:223,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:223,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:228,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:231,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:231,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:232,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:233,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:234,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:235,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:236,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:236,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:240,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:243,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:243,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/test/brpc_socket_unittest.cpp:246,1
    - Dst: MyErrorMessage::MyErrorMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:249,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:252,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:253,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:256,1
    - Dst: reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:266,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:266,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:268,1
    - Dst: reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:270,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:275,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:275,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:278,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:281,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:283,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:284,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:284,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:285,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:288,1
    - Dst: read
      Src: /src/brpc/test/brpc_socket_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:289,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_socket_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:291,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:293,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:294,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 295
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_id_create2
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - read
    - brpc::SocketUniquePtr::get
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - reset
    - brpc::SocketUniquePtr::id
    - bthread_id_join
    - butil::IOBuf::empty
    - BuiltinServiceTest::TestStatus
    - socketpair
    - Socket::Create
    - MyErrorMessage::MyErrorMessage
    - butil::IOBuf::length
    - snprintf
    - MyMessage::MyMessage
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Write
    - brpc::SocketUniquePtr::remote_side
    - str2endpoint
    - close
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, single_threaded_write)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:300,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:301,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:302,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:303,1
    - Dst: brpc::DestroyingPtr::socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 304
    functionName: EchoProcessHuluRequest
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::DestroyingPtr::socket
    linkageType: ''
    returnType: void
    signature: void EchoProcessHuluRequest(brpc::InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 308
    functionName: MyConnect::MyConnect
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyConnect()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 316
    functionName: MyConnect::StartConnect
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: "void StartConnect(const brpc::Socket*,\n                      void
      (*done)(int err, void* data),\n                      void* data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 319
    functionName: MyConnect::StopConnect
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void StopConnect(brpc::Socket*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/test/brpc_socket_unittest.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    functionName: MyConnect::MakeConnectDone
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void MakeConnectDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    functionName: MyConnect::is_start_connect_called
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_start_connect_called() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::Acceptor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:332,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:342,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:347,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:348,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:349,1
    - Dst: brpc::Acceptor*::AddHandler
      Src: /src/brpc/test/brpc_socket_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:350,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:350,1
    - Dst: std::make_shared<MyConnect>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:355,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:358,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:361,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:361,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:362,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:363,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:364,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:365,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:365,1
    - Dst: brpc::SocketUniquePtr::local_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:366,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:367,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:367,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:372,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:375,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:384,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:386,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:388,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:389,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:389,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:390,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:390,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:395,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:396,1
    - Dst: std::shared_ptr::is_start_connect_called
      Src: /src/brpc/test/brpc_socket_unittest.cpp:396,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:397,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:398,1
    - Dst: std::shared_ptr::MakeConnectDone
      Src: /src/brpc/test/brpc_socket_unittest.cpp:399,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:400,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:402,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:403,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:404,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:405,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:408,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_socket_unittest.cpp:408,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:410,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_socket_unittest.cpp:410,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:413,1
    - Dst: read
      Src: /src/brpc/test/brpc_socket_unittest.cpp:413,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:414,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_socket_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:416,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:421,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:421,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:423,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:425,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:426,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:431,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:433,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:433,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:434,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:435,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:436,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:436,1
    - Dst: brpc::SocketUniquePtr::local_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:437,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:437,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 330
    functionDepth: 1
    functionLinenumber: 330
    functionLinenumberEnd: 438
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_usleep
    - brpc::Acceptor*::Join
    - brpc::SocketUniquePtr::SetFailed
    - read
    - brpc::Acceptor*::StopAccept
    - brpc::SocketUniquePtr::get
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::id
    - fcntl
    - std::shared_ptr::is_start_connect_called
    - memcpy
    - bthread_fd_wait
    - butil::IOBuf::empty
    - Socket::Create
    - butil::gettimeofday_us
    - brpc::Acceptor*::listened_fd
    - butil::EndPoint
    - std::make_shared<MyConnect>
    - butil::IOBuf::length
    - snprintf
    - std::shared_ptr::MakeConnectDone
    - tcp_listen
    - MyMessage::MyMessage
    - berror
    - brpc::Acceptor::Acceptor
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Write
    - ASSERT_GT
    - brpc::SocketUniquePtr::remote_side
    - brpc::Acceptor*::StartAccept
    - brpc::Acceptor*::AddHandler
    - ASSERT_LT
    - butil::make_non_blocking
    - brpc::SocketUniquePtr::local_side
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, single_threaded_connect_and_write)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriterArg*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:449,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:451,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:452,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:458,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:458,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:459,1
    - Dst: BAIDU_SYMBOLSTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:459,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:461,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:462,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:465,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:466,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:466,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 472
    functionName: FailedWriter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SYMBOLSTR
    - brpc::SocketUniquePtr::Write
    - bthread_id_create
    - EXPECT_EQ
    - static_cast<WriterArg*>
    - bthread_id_join
    - snprintf
    - printf
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void * FailedWriter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:481,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:484,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:484,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:485,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:486,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:487,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:488,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:489,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:489,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:491,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:496,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:496,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:499,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:501,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:502,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:502,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:505,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:507,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:508,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:510,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:513,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:513,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 514
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - ARRAY_SIZE
    - CheckRecycle::CheckRecycle
    - pthread_join
    - brpc::SocketUniquePtr::id
    - butil::gettimeofday_us
    - pthread_create
    - brpc::SocketUniquePtr::SetFailed
    - bthread_usleep
    - brpc::SocketUniquePtr::remote_side
    - Socket::Status
    - brpc::SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, fail_to_connect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:523,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:523,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:526,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:526,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:527,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:528,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:529,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:530,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:531,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:531,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:536,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:539,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:543,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:545,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:549,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:552,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:553,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:555,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:556,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_socket_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:559,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:560,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:562,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:563,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:563,1
    - Dst: brpc::SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/test/brpc_socket_unittest.cpp:564,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:570,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:572,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:573,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:575,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 576
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_usleep
    - bthread_id_create2
    - Socket::Status
    - brpc::SocketUniquePtr::get
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::id
    - bthread_id_join
    - memcpy
    - butil::IOBuf::empty
    - brpc::SocketUniquePtr::ReleaseHCRelatedReference
    - Socket::Create
    - butil::gettimeofday_us
    - butil::IOBuf::length
    - snprintf
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Write
    - brpc::SocketUniquePtr::remote_side
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, not_health_check_when_nref_hits_0)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 580
    functionDepth: 0
    functionLinenumber: 580
    functionLinenumberEnd: 581
    functionName: HealthCheckTestServiceImpl::HealthCheckTestServiceImpl
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckTestServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 582
    functionName: ~HealthCheckTestServiceImpl()
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HealthCheckTestServiceImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:591,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_socket_unittest.cpp:594,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - test::HealthCheckRequest*
    - test::HealthCheckResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 584
    functionDepth: 1
    functionLinenumber: 584
    functionLinenumberEnd: 595
    functionName: HealthCheckTestServiceImpl::default_method
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::response_attachment
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: "void default_method(google::protobuf::RpcController* cntl_base,\n
      \                               const test::HealthCheckRequest* request,\n                                test::HealthCheckResponse*
      response,\n                                google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:602,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:603,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_socket_unittest.cpp:606,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_socket_unittest.cpp:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:610,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_socket_unittest.cpp:610,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_socket_unittest.cpp:612,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_socket_unittest.cpp:613,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_socket_unittest.cpp:614,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:615,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:616,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_socket_unittest.cpp:616,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:622,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:623,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:627,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:628,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_socket_unittest.cpp:630,1
    - Dst: HealthCheckTestServiceImpl::HealthCheckTestServiceImpl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:632,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_socket_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:633,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_socket_unittest.cpp:633,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_socket_unittest.cpp:638,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_socket_unittest.cpp:639,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_socket_unittest.cpp:640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:641,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_socket_unittest.cpp:641,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:642,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:645,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_socket_unittest.cpp:648,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_socket_unittest.cpp:649,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_socket_unittest.cpp:650,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:651,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:651,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:652,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_socket_unittest.cpp:652,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:655,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:657,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:658,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 659
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - bthread_usleep
    - brpc::Controller::Failed
    - brpc::Controller::response_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - HealthCheckTestServiceImpl::HealthCheckTestServiceImpl
    - ASSERT_FALSE
    - brpc::Channel::Channel
    - brpc::Controller::ErrorCode
    - EXPECT_TRUE
    - snprintf
    - brpc::Server::Start
    - brpc::Channel::Init
    - tcp_listen
    - brpc::Controller::http_request
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_GT
    - brpc::Controller::Controller
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, app_level_health_check)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::Acceptor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:663,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:672,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:676,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:676,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:677,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:680,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:681,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:682,1
    - Dst: brpc::Socket*::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:683,1
    - Dst: brpc::Socket*::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:685,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:686,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:691,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:694,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_socket_unittest.cpp:698,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:701,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:703,1
    - Dst: brpc::SocketMessagePtr::reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:704,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:704,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:707,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:712,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:716,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:718,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:720,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:722,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:723,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_socket_unittest.cpp:723,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:726,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:730,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:730,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:732,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:732,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:734,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:736,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:736,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:737,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:737,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:738,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:740,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:741,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:741,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:748,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:749,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:750,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:751,1
    - Dst: brpc::Acceptor*::AddHandler
      Src: /src/brpc/test/brpc_socket_unittest.cpp:751,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:752,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:752,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:754,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:756,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:757,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:758,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:758,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:767,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:767,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:768,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:768,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:769,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:773,1
    - Dst: brpc::Socket*::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:774,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:774,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:775,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:776,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:777,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:778,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:778,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:784,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:784,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:785,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:785,1
    - Dst: brpc::Socket*::ReleaseHCRelatedReference
      Src: /src/brpc/test/brpc_socket_unittest.cpp:788,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:792,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:793,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:794,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:795,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:795,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:796,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:798,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:798,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:800,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:802,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:803,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:803,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:806,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:809,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:809,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 91
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 661
    functionDepth: 1
    functionLinenumber: 661
    functionLinenumberEnd: 810
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_usleep
    - brpc::Acceptor*::Join
    - bthread_id_create2
    - brpc::Acceptor*::StopAccept
    - brpc::Socket*::ReleaseHCRelatedReference
    - Socket::Status
    - brpc::SocketUniquePtr::get
    - brpc::Socket*::id
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Socket*::Write
    - fcntl
    - bthread_id_join
    - ASSERT_NE
    - memcpy
    - brpc::Socket*::fd
    - butil::IOBuf::empty
    - LOG
    - Socket::Create
    - butil::gettimeofday_us
    - brpc::Acceptor*::listened_fd
    - brpc::Socket*::SetFailed
    - butil::IOBuf::length
    - snprintf
    - tcp_listen
    - MyMessage::MyMessage
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::Acceptor::Acceptor
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SocketMessagePtr::reset
    - butil::fast_rand_less_than
    - brpc::Socket*::remote_side
    - brpc::Acceptor*::StartAccept
    - Socket::SetFailed
    - brpc::Acceptor*::AddHandler
    - ASSERT_LT
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, health_check)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriterArg*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:813,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:815,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:816,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:821,1
    - Dst: BAIDU_SYMBOLSTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:821,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:823,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:824,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:825,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:828,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:832,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:833,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 838
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 838
    functionName: Writer
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SYMBOLSTR
    - brpc::SocketUniquePtr::Write
    - bthread_usleep
    - static_cast<WriterArg*>
    - snprintf
    - printf
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - berror
    linkageType: ''
    returnType: void
    signature: void * Writer(void* void_arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:845,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:845,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:847,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_socket_unittest.cpp:849,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:849,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:853,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:853,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:857,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:858,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:858,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:860,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:860,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:862,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:863,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:864,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:865,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:865,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:866,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:866,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:867,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:869,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:873,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:873,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:877,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:878,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_socket_unittest.cpp:881,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:882,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:884,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:890,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:890,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:892,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:893,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:894,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:899,1
    - Dst: butil::IOPortal::copy_to
      Src: /src/brpc/test/brpc_socket_unittest.cpp:901,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_socket_unittest.cpp:903,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_socket_unittest.cpp:903,1
    - Dst: butil::IOPortal::pop_front
      Src: /src/brpc/test/brpc_socket_unittest.cpp:904,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:906,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:906,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:910,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:911,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:911,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:913,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:913,1
    - Dst: print_rq_sizes
      Src: /src/brpc/test/brpc_socket_unittest.cpp:914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:917,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:917,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:917,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_socket_unittest.cpp:919,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:919,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_socket_unittest.cpp:919,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/brpc_socket_unittest.cpp:920,1
    - Dst: std::unique
      Src: /src/brpc/test/brpc_socket_unittest.cpp:920,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:920,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_socket_unittest.cpp:921,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:922,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:922,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:922,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:923,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:924,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:924,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_socket_unittest.cpp:924,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:926,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:926,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:928,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:929,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 70
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 840
    functionDepth: 1
    functionLinenumber: 840
    functionLinenumberEnd: 931
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_usleep
    - pthread_create
    - brpc::SocketUniquePtr::SetFailed
    - strtol
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - brpc::SocketUniquePtr::get
    - printf
    - brpc::SetTrackMeAddress
    - ARRAY_SIZE
    - butil::IOPortal::empty
    - brpc::SocketUniquePtr::id
    - std::unique
    - butil::IOPortal::IOPortal
    - LOG
    - std::vector::resize
    - butil::IOPortal::copy_to
    - socketpair
    - Socket::Create
    - butil::gettimeofday_us
    - butil::IOPortal::pop_front
    - std::sort
    - brpc::SocketUniquePtr::release
    - berror
    - std::vector::reserve
    - butil::IOPortal::append_from_file_descriptor
    - print_rq_sizes
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - std::vector::push_back
    - pthread_join
    - std::vector::end
    - butil::IOPortal::length
    - brpc::SocketUniquePtr::remote_side
    - str2endpoint
    - close
    - butil::make_non_blocking
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, multi_threaded_write)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriterArg*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:934,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:936,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:937,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:941,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:945,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:946,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:947,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:950,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:955,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:956,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:960,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:962,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 965
    functionName: FastWriter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - brpc::SocketUniquePtr::Write
    - bthread_usleep
    - static_cast<WriterArg*>
    - printf
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - berror
    linkageType: ''
    returnType: void
    signature: void * FastWriter(void* void_arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReaderArg*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:973,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_socket_unittest.cpp:975,1
    - Dst: read
      Src: /src/brpc/test/brpc_socket_unittest.cpp:977,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:979,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:982,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 988
      start: 972
    functionDepth: 0
    functionLinenumber: 972
    functionLinenumberEnd: 988
    functionName: reader
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - static_cast<ReaderArg*>
    - read
    - printf
    linkageType: ''
    returnType: void
    signature: void * reader(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:993,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:993,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:995,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:999,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:999,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1003,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1004,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1006,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1006,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1008,1
    - Dst: brpc::NRefOfVRef
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1008,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1009,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1010,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1011,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1011,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1012,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1012,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1013,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1013,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1015,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1019,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1024,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1026,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1027,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1029,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1030,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1031,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1033,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1035,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1035,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1037,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1040,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1041,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1041,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1043,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1043,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1044,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1045,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1046,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1047,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1048
      start: 990
    functionDepth: 1
    functionLinenumber: 990
    functionLinenumberEnd: 1048
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - pthread_create
    - bthread_start_background
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - bthread_join
    - brpc::SocketUniquePtr::get
    - printf
    - brpc::SetTrackMeAddress
    - sleep
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::id
    - butil::Timer::start
    - butil::Timer::Timer
    - socketpair
    - Socket::Create
    - butil::Timer::u_elapsed
    - brpc::NRefOfVRef
    - brpc::SocketUniquePtr::release
    - ProfilerStart
    - ProfilerStop
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - butil::Timer::stop
    - pthread_join
    - brpc::SocketUniquePtr::remote_side
    - str2endpoint
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, multi_threaded_write_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1057,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1064,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1066,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1073,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1075,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1082,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1082,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1084,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1084,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 5
    argNames:
    - fd
    - ' keepalive'
    - ' keepalive_idle'
    - ' keepalive_interval'
    - ' keepalive_count'
    argTypes:
    - int
    - int
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1087
      start: 1050
    functionDepth: 0
    functionLinenumber: 1050
    functionLinenumberEnd: 1087
    functionName: GetKeepaliveValue
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - getsockopt
    linkageType: ''
    returnType: void
    signature: "void GetKeepaliveValue(int fd,\n                       int& keepalive,\n
      \                      int& keepalive_idle,\n                       int& keepalive_interval,\n
      \                      int& keepalive_count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1092,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1092,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1093,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1094
      start: 1089
    functionDepth: 0
    functionLinenumber: 1089
    functionLinenumberEnd: 1094
    functionName: CheckNoKeepalive
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - getsockopt
    linkageType: ''
    returnType: void
    signature: void CheckNoKeepalive(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetKeepaliveValue
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1106,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 5
    argNames:
    - fd
    - expected_keepalive
    - expected_keepalive_idle
    - expected_keepalive_interval
    - expected_keepalive_count
    argTypes:
    - int
    - bool
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1117
      start: 1096
    functionDepth: 1
    functionLinenumber: 1096
    functionLinenumberEnd: 1117
    functionName: CheckKeepalive
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_LT
    - GetKeepaliveValue
    linkageType: ''
    returnType: void
    signature: "void CheckKeepalive(int fd,\n                    bool expected_keepalive,\n
      \                   int expected_keepalive_idle,\n                    int expected_keepalive_interval,\n
      \                   int expected_keepalive_count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1125,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1126,1
    - Dst: GetKeepaliveValue
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1127,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1133,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1138,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1140,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1140,1
    - Dst: CheckNoKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1141,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1142,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1142,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1150,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1151,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1156,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1158,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1158,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1159,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1161,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1161,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1166,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1167,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1173,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1175,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1175,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1176,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1179,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1179,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1184,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1185,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1191,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1193,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1193,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1194,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1196,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1196,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1201,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1202,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1208,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1210,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1210,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1211,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1213,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1213,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1218,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1219,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1227,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1229,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1229,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1230,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1232,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1234
      start: 1119
    functionDepth: 2
    functionLinenumber: 1119
    functionLinenumberEnd: 1234
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - brpc::SocketUniquePtr::fd
    - CheckNoKeepalive
    - std::make_shared<brpc::SocketKeepaliveOptions>
    - socket
    - brpc::SocketUniquePtr::SetFailed
    - ASSERT_GT
    - brpc::SetTrackMeAddress
    - GetKeepaliveValue
    - CheckKeepalive
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, keepalive)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::Acceptor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1237,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1242,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1247,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1248,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1249,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1249,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1256,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1257,1
    - Dst: GetKeepaliveValue
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1268,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1270,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1270,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1271,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1271,1
    - Dst: CheckNoKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1272,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1273,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1283,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1285,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1285,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1286,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1286,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1287,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1289,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1299,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1301,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1301,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1302,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1302,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1303,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1305,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1315,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1317,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1317,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1318,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1318,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1319,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1321,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1331,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1333,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1333,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1334,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1334,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1335,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1338,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1338,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1352,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1354,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1354,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1355,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1355,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1356,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1359,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1359,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1369,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1371,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1371,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1372,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1372,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1373,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1375,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1375,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1385,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1387,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1387,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1388,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1388,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1389,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1391,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1391,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1403,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1405,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1405,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1406,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1406,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1407,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1409,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1409,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1412,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1414,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1415,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1416,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 105
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1417
      start: 1236
    functionDepth: 2
    functionLinenumber: 1236
    functionLinenumberEnd: 1417
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Acceptor*::Join
    - brpc::SocketUniquePtr::SetFailed
    - brpc::Acceptor*::StopAccept
    - brpc::SetTrackMeAddress
    - GetKeepaliveValue
    - CheckKeepalive
    - fcntl
    - brpc::Acceptor*::listened_fd
    - std::make_shared<brpc::SocketKeepaliveOptions>
    - tcp_listen
    - berror
    - brpc::Acceptor::Acceptor
    - brpc::SocketUniquePtr::fd
    - brpc::get_or_new_client_side_messenger
    - CheckNoKeepalive
    - socket
    - ASSERT_GT
    - brpc::Acceptor*::StartAccept
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, keepalive_input_message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1423,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - fd
    - expect_tcp_user_timeout
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1425
      start: 1420
    functionDepth: 0
    functionLinenumber: 1420
    functionLinenumberEnd: 1425
    functionName: CheckTCPUserTimeout
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - getsockopt
    linkageType: ''
    returnType: void
    signature: void CheckTCPUserTimeout(int fd, int expect_tcp_user_timeout)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::Acceptor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1428,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1433,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1438,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1439,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1440,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1447,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1449,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1449,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1450,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1460,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1462,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1462,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1463,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1472,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1474,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1474,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1475,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1484,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1486,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1486,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1487,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1487,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1490,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1492,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1493,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1494,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1495
      start: 1427
    functionDepth: 1
    functionLinenumber: 1427
    functionLinenumberEnd: 1495
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Socket::Create
    - brpc::SocketUniquePtr::fd
    - brpc::Acceptor*::listened_fd
    - brpc::get_or_new_client_side_messenger
    - brpc::Acceptor*::Join
    - fcntl
    - ASSERT_GT
    - brpc::Acceptor*::StopAccept
    - brpc::Acceptor*::StartAccept
    - CheckTCPUserTimeout
    - tcp_listen
    - berror
    - brpc::SetTrackMeAddress
    - butil::make_non_blocking
    - brpc::Acceptor::Acceptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, tcp_user_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1500,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1501,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1502,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1504,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1506
      start: 1498
    functionDepth: 1
    functionLinenumber: 1498
    functionLinenumberEnd: 1506
    functionName: HandleSocketSuccessWrite
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - bthread_id_unlock_and_destroy
    - static_cast<size_t*>
    - CHECK_EQ
    - EXPECT_EQ
    linkageType: ''
    returnType: int
    signature: "int HandleSocketSuccessWrite(bthread_id_t id, void* data, int error_code,\n
      \   const std::string& error_text)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1511,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1511,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1515,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1515,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1519,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1520,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1522,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1524,1
    - Dst: brpc::NRefOfVRef
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1524,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1526,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1527,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1528,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1529,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1529,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1539,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1539,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1544,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1545,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1546,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1549,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1553,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1559,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1559,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1560,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1563,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1564,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1565
      start: 1508
    functionDepth: 1
    functionLinenumber: 1508
    functionLinenumberEnd: 1565
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_usleep
    - pthread_create
    - bthread_id_create2
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - brpc::SocketUniquePtr::get
    - butil::IOBuf::append
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::id
    - PLOG
    - socketpair
    - Socket::Create
    - brpc::NRefOfVRef
    - brpc::SocketUniquePtr::release
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Write
    - pthread_join
    - brpc::SocketUniquePtr::remote_side
    - str2endpoint
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, notify_on_success)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ShutdownWriterArg*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1576,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1577,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1578,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1583,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1583,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1585
      start: 1574
    functionDepth: 1
    functionLinenumber: 1574
    functionLinenumberEnd: 1585
    functionName: HandleSocketShutdownWrite
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_NE
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - static_cast<ShutdownWriterArg*>
    linkageType: ''
    returnType: int
    signature: "int HandleSocketShutdownWrite(bthread_id_t id, void* data, int error_code,\n
      \   const std::string& error_text)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ShutdownWriterArg*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1588,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1590,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1591,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1596,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1596,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1602,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1603,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1604,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1607,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1587
    functionDepth: 1
    functionLinenumber: 1587
    functionLinenumberEnd: 1614
    functionName: ShutdownWriter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::Write
    - bthread_usleep
    - bthread_id_create2
    - EXPECT_EQ
    - butil::IOBuf::push_back
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - LOG
    - static_cast<ShutdownWriterArg*>
    linkageType: ''
    returnType: void
    signature: void * ShutdownWriter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1619,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1619,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1623,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1623,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1627,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1628,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1630,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1630,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1632,1
    - Dst: brpc::NRefOfVRef
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1632,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1633,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1634,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1635,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1636,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1636,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1637,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1637,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1638,1
    - Dst: brpc::SocketUniquePtr::IsWriteShutdown
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1638,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1642,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1645,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1646,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1651,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1655,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1655,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1657,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1659,1
    - Dst: brpc::SocketUniquePtr::IsWriteShutdown
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1659,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1660,1
    - Dst: brpc::SocketUniquePtr::Failed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1660,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1661,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1661,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1662,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1663,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1664,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1673,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1673,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1675,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1676
      start: 1616
    functionDepth: 1
    functionLinenumber: 1616
    functionLinenumberEnd: 1676
    functionName: TestShutdownWrite
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - bthread_usleep
    - pthread_create
    - bthread_start_background
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - bthread_join
    - brpc::SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::id
    - ASSERT_FALSE
    - EXPECT_EQ
    - brpc::SocketUniquePtr::IsWriteShutdown
    - socketpair
    - Socket::Create
    - brpc::NRefOfVRef
    - brpc::SocketUniquePtr::release
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SocketUniquePtr::Failed
    - pthread_join
    - brpc::SocketUniquePtr::remote_side
    - str2endpoint
    - close
    linkageType: ''
    returnType: void
    signature: void TestShutdownWrite()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestShutdownWrite
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1680,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1682
      start: 1678
    functionDepth: 2
    functionLinenumber: 1678
    functionLinenumberEnd: 1682
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestShutdownWrite
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, shutdown_write)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PackedPtr::PackedPtr
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1686,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1687,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1687,1
    - Dst: brpc::PackedPtr::set
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1692,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1692,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1694,1
    - Dst: brpc::PackedPtr::set_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1696,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1696,1
    - Dst: brpc::PackedPtr::reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1697,1
    - Dst: brpc::PackedPtr::reset_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1699,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1700,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1700,1
    - Dst: brpc::PackedPtr::set_ptr_and_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1705,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1706,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1706,1
    - Dst: brpc::PackedPtr::reset_ptr_and_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1708,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1709,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1709,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1710
      start: 1684
    functionDepth: 1
    functionLinenumber: 1684
    functionLinenumberEnd: 1710
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::PackedPtr::reset
    - ASSERT_EQ
    - brpc::PackedPtr::reset_extra
    - brpc::PackedPtr::extra
    - brpc::PackedPtr::get
    - brpc::PackedPtr::set_ptr_and_extra
    - brpc::PackedPtr::set_extra
    - brpc::PackedPtr::reset_ptr_and_extra
    - brpc::PackedPtr::set
    - brpc::PackedPtr::PackedPtr
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, packed_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:32,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:32,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:34,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:34,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:38,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:40,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:41,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:43,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:43,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:43,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:49,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:49,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:51,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:52,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:53,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:53,1
    - Dst: tolower
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:55,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:56,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 58
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HPacker::Encode
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - brpc::HPacker::Decode
    - butil::IOBufAppender::IOBufAppender
    - brpc::HPackOptions::HPackOptions
    - butil::ToPrintable::ToPrintable
    - LOG
    - tolower
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, header_with_indexing)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:62,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:62,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:64,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:64,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:68,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:70,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:71,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:73,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:73,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:79,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:79,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:81,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:82,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:83,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:83,1
    - Dst: tolower
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 88
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HPacker::Encode
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - brpc::HPacker::Decode
    - butil::IOBufAppender::IOBufAppender
    - brpc::HPackOptions::HPackOptions
    - butil::ToPrintable::ToPrintable
    - LOG
    - tolower
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, header_without_indexing)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:92,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:94,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:94,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:98,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:100,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:101,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:103,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:103,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:103,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:109,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:109,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:111,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:112,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:113,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 116
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HPacker::Encode
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - brpc::HPacker::Decode
    - butil::IOBufAppender::IOBufAppender
    - brpc::HPackOptions::HPackOptions
    - butil::ToPrintable::ToPrintable
    - LOG
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, header_never_indexed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:120,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:122,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:122,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:126,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:128,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:129,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:131,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:131,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:136,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:136,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:138,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:140,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 143
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HPacker::Encode
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - brpc::HPacker::Decode
    - butil::IOBufAppender::IOBufAppender
    - brpc::HPackOptions::HPackOptions
    - butil::ToPrintable::ToPrintable
    - LOG
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, indexed_header)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:152,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:154,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:154,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:162,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:163,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:167,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:175,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:175,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:175,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:176,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:178,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:178,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:182,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:182,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:192,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:196,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:198,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:204,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:204,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:205,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:207,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:207,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:209,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:211,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:211,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:220,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:224,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:233,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:233,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:233,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:234,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:236,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:236,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:238,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:240,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:240,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - brpc::HPacker::Encode
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - ASSERT_GT
    - brpc::HPacker::Decode
    - brpc::HPackOptions::HPackOptions
    - butil::IOBufAppender::IOBufAppender
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, requests_without_huffman)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:245,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:247,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:247,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:255,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:256,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:260,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:270,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:270,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:271,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:271,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:271,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:272,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:274,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:274,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:276,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:278,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:278,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:288,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:292,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:301,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:301,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:301,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:302,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:304,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:304,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:308,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:308,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:317,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:321,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:325,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:331,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:331,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:331,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:332,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:334,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:334,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:336,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:338,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:338,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 339
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - brpc::HPacker::Encode
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - ASSERT_GT
    - brpc::HPacker::Decode
    - brpc::HPackOptions::HPackOptions
    - butil::IOBufAppender::IOBufAppender
    - butil::ToPrintable::ToPrintable
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, requests_with_huffman)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:344,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:346,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:346,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:354,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:355,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:359,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:361,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:371,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:371,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:371,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:372,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:372,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:372,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:373,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:375,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:375,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:377,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:379,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:379,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:388,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:392,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:399,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:399,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:399,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:400,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:402,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:402,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:404,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:406,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:406,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:416,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:420,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:422,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:435,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:435,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:435,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:436,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:438,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:438,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:442,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:442,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 443
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - brpc::HPacker::Encode
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - ASSERT_GT
    - brpc::HPacker::Decode
    - brpc::HPackOptions::HPackOptions
    - butil::IOBufAppender::IOBufAppender
    - butil::ToPrintable::ToPrintable
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, responses_without_huffman)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:448,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:450,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:450,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:458,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:459,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:463,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:476,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:476,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:476,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:477,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:477,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:477,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:478,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:480,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:480,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:482,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:484,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:484,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:493,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:497,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:501,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:506,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:506,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:506,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:507,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:509,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:509,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:511,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:513,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:513,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:523,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:527,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:531,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:542,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:542,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:542,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:543,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:545,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:545,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:547,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:549,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:549,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 550
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - brpc::HPacker::Encode
    - ASSERT_TRUE
    - butil::IOBufAppender::buf
    - ASSERT_GT
    - brpc::HPacker::Decode
    - brpc::HPackOptions::HPackOptions
    - butil::IOBufAppender::IOBufAppender
    - butil::ToPrintable::ToPrintable
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    - brpc::HPacker::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, responses_with_huffman)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: Bar
    functionSourceFile: /src/brpc/test/cacheline_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Bar
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 50
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/cacheline_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(CachelineTest, cacheline_alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: Bar
    functionSourceFile: /src/brpc/test/cacheline_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Bar
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:44,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:45,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:46,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:47,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:48,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/cacheline_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 50
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/cacheline_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(CachelineTest, cacheline_alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:44,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:46,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 50
    functionName: signaler
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread_cond_signal
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * signaler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:54,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:56,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:58,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:59,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_cond_unittest.cpp:59,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:60,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:60,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 64
    functionName: waiter
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - BAIDU_SCOPED_LOCK
    - push_back
    - bthread_mutex_lock
    - bthread_self
    - bthread_cond_wait
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void * waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:68,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:69,1
    - Dst: bthread_cond_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:71,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:71,1
    - Dst: resize
      Src: /src/brpc/test/bthread_cond_unittest.cpp:74,1
    - Dst: clear
      Src: /src/brpc/test/bthread_cond_unittest.cpp:75,1
    - Dst: resize
      Src: /src/brpc/test/bthread_cond_unittest.cpp:76,1
    - Dst: clear
      Src: /src/brpc/test/bthread_cond_unittest.cpp:77,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:82,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:86,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:86,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:88,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:90,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:91,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:92,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:96,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:99,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:101,1
    - Dst: printf
      Src: /src/brpc/test/bthread_cond_unittest.cpp:104,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:104,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/bthread_cond_unittest.cpp:111,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_cond_unittest.cpp:113,1
    - Dst: labs
      Src: /src/brpc/test/bthread_cond_unittest.cpp:113,1
    - Dst: printf
      Src: /src/brpc/test/bthread_cond_unittest.cpp:116,1
    - Dst: sqrt
      Src: /src/brpc/test/bthread_cond_unittest.cpp:116,1
    - Dst: std::max
      Src: /src/brpc/test/bthread_cond_unittest.cpp:116,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:123,1
    - Dst: std::map::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:123,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:124,1
    - Dst: std::map::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:124,1
    - Dst: std::map::begin
      Src: /src/brpc/test/bthread_cond_unittest.cpp:126,1
    - Dst: std::map::end
      Src: /src/brpc/test/bthread_cond_unittest.cpp:126,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:127,1
    - Dst: abs
      Src: /src/brpc/test/bthread_cond_unittest.cpp:127,1
    - Dst: printf
      Src: /src/brpc/test/bthread_cond_unittest.cpp:131,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:134,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:135,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 136
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::max
    - bthread_cond_destroy
    - bthread_start_urgent
    - bthread_usleep
    - bthread_join
    - pthread_mutex_lock
    - bthread_cond_signal
    - printf
    - labs
    - EXPECT_GT
    - ARRAY_SIZE
    - std::map::begin
    - ASSERT_LE
    - bthread_cond_init
    - clear
    - size
    - EXPECT_EQ
    - sqrt
    - pthread_mutex_unlock
    - EXPECT_LT
    - std::map::size
    - bthread_mutex_destroy
    - resize
    - bthread_mutex_init
    - std::map::end
    - abs
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:145,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:147,1
    - Dst: WrapperArg*::cond::notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 151
    functionName: cv_signaler
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - WrapperArg*::cond::notify_one
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * cv_signaler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WrapperArg*::mutex::native_handler
      Src: /src/brpc/test/bthread_cond_unittest.cpp:155,1
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 160
    functionName: cv_bmutex_waiter
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::mutex::native_handler
    - WrapperArg*::cond::wait
    linkageType: ''
    returnType: void
    signature: void * cv_bmutex_waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 169
    functionName: cv_mutex_waiter
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::cond::wait
    linkageType: ''
    returnType: void
    signature: void * cv_mutex_waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:186,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:188,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:191,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:191,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:192,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:194,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:197,1
    - Dst: WrapperArg::cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:198,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:199,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:200,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 203
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_usleep
    - pthread_join
    - pthread_create
    - BAIDU_SCOPED_LOCK
    - WrapperArg::cond::notify_all
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, cpp_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 212
    functionName: Signal::Signal
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Signal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:214,1
    - Dst: notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: Signal::notify
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - notify_one
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void notify()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Signal::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - old_signal
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 225
    functionName: Signal::wait
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 1
    functionsReached:
    - Signal::wait
    linkageType: ''
    returnType: int
    signature: int wait(int old_signal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PingPongArg*::nthread::fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:244,1
    - Dst: PingPongArg*::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:248,1
    - Dst: PingPongArg*::sig2::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:249,1
    - Dst: PingPongArg*::sig1::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:251,1
    - Dst: PingPongArg*::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:252,1
    - Dst: PingPongArg*::total_count::fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:256,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 258
    functionName: ping_pong_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - PingPongArg*::total_count::fetch_add
    - PingPongArg*::sig2::notify
    - PingPongArg*::sig1::wait
    - PingPongArg*::nthread::fetch_add
    - PingPongArg*::sig2::wait
    - PingPongArg*::sig1::notify
    linkageType: ''
    returnType: void
    signature: void *ping_pong_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_cond_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:267,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:267,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:269,1
    - Dst: PingPongArg::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:271,1
    - Dst: PingPongArg::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:274,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:274,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:276,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:277,1
    - Dst: PingPongArg::total_count::load
      Src: /src/brpc/test/bthread_cond_unittest.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 278
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - PingPongArg::total_count::load
    - bthread_join
    - PingPongArg::sig1::notify
    - usleep
    - PingPongArg::sig2::notify
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, ping_pong)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BroadcastArg*::broadcast_cond::notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:298,1
    - Dst: BroadcastArg*::wait_cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 304
    functionName: wait_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BroadcastArg*::wait_cond::wait
    - BroadcastArg*::broadcast_cond::notify_one
    linkageType: ''
    returnType: void
    signature: void * wait_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BroadcastArg*::broadcast_cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:312,1
    - Dst: BroadcastArg*::wait_cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:316,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 319
    functionName: broadcast_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BroadcastArg*::wait_cond::notify_all
    - BroadcastArg*::broadcast_cond::wait
    linkageType: ''
    returnType: void
    signature: void * broadcast_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:325,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:326,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 329
    functionName: disturb_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void * disturb_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:341,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:345,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:350,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:351,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:351,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:353,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:354,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:356,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:357,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 358
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, mixed_usage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:363,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 366
    functionName: BthreadCond::BthreadCond
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_cond_init
    - bthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void BthreadCond()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:368,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:369,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 370
    functionName: ~BthreadCond()
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    - bthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void ~BthreadCond()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 374
    functionName: BthreadCond::Init
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Init(int count = 1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:378,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:380,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 383
    functionName: BthreadCond::Signal
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - bthread_cond_signal
    linkageType: ''
    returnType: int
    signature: int Signal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:387,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:389,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:391,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 393
    functionName: BthreadCond::Wait
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_unlock
    - bthread_mutex_lock
    - bthread_cond_wait
    linkageType: ''
    returnType: int
    signature: int Wait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:407,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 410
    functionName: usleep_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * usleep_thread(void *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BthreadCond*::Wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 418
    functionName: wait_cond_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BthreadCond*::Wait
    linkageType: ''
    returnType: void
    signature: void * wait_cond_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BthreadCond::BthreadCond
      Src: /src/brpc/test/bthread_cond_unittest.cpp:423,1
    - Dst: BthreadCond::Init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:424,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_cond_unittest.cpp:425,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:426,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_cond_unittest.cpp:428,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_cond_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:432,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_cond_unittest.cpp:432,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:433,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:435,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:436,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_cond_unittest.cpp:436,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:437,1
    - Dst: BthreadCond::Signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:438,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:440,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:441,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:442,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:443,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:445,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:445,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 420
    functionDepth: 2
    functionLinenumber: 420
    functionLinenumberEnd: 446
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 2
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - butil::Timer::u_elapsed
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - LOG_EVERY_SECOND
    - bthread_start_background
    - BthreadCond::Init
    - BthreadCond::Signal
    - bthread_join
    - BthreadCond::BthreadCond
    - usleep
    - std::vector::reserve
    - LOG
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void launch_many_bthreads()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_cond_unittest.cpp:449,1
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_cond_unittest.cpp:450,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 451
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - launch_many_bthreads
    - bthread_setconcurrency
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, too_many_bthreads_from_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_cond_unittest.cpp:454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 456
    functionName: run_launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - launch_many_bthreads
    linkageType: ''
    returnType: void
    signature: void * run_launch_many_bthreads(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_cond_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:461,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:461,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:462,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 458
    functionDepth: 1
    functionLinenumber: 458
    functionLinenumberEnd: 463
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, too_many_bthreads_from_bthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:44,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:46,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 50
    functionName: signaler
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread_cond_signal
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * signaler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:54,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:56,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:58,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:59,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_cond_unittest.cpp:59,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:60,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:60,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 64
    functionName: waiter
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - BAIDU_SCOPED_LOCK
    - push_back
    - bthread_mutex_lock
    - bthread_self
    - bthread_cond_wait
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void * waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:68,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:68,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:69,1
    - Dst: bthread_cond_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:71,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:71,1
    - Dst: resize
      Src: /src/brpc/test/bthread_cond_unittest.cpp:74,1
    - Dst: clear
      Src: /src/brpc/test/bthread_cond_unittest.cpp:75,1
    - Dst: resize
      Src: /src/brpc/test/bthread_cond_unittest.cpp:76,1
    - Dst: clear
      Src: /src/brpc/test/bthread_cond_unittest.cpp:77,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:80,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:82,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:86,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:86,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:88,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:90,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:91,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:92,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:96,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:99,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:101,1
    - Dst: printf
      Src: /src/brpc/test/bthread_cond_unittest.cpp:104,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:104,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/bthread_cond_unittest.cpp:111,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_cond_unittest.cpp:113,1
    - Dst: labs
      Src: /src/brpc/test/bthread_cond_unittest.cpp:113,1
    - Dst: printf
      Src: /src/brpc/test/bthread_cond_unittest.cpp:116,1
    - Dst: sqrt
      Src: /src/brpc/test/bthread_cond_unittest.cpp:116,1
    - Dst: std::max
      Src: /src/brpc/test/bthread_cond_unittest.cpp:116,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:123,1
    - Dst: std::map::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:123,1
    - Dst: size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:124,1
    - Dst: std::map::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:124,1
    - Dst: std::map::begin
      Src: /src/brpc/test/bthread_cond_unittest.cpp:126,1
    - Dst: std::map::end
      Src: /src/brpc/test/bthread_cond_unittest.cpp:126,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:127,1
    - Dst: abs
      Src: /src/brpc/test/bthread_cond_unittest.cpp:127,1
    - Dst: printf
      Src: /src/brpc/test/bthread_cond_unittest.cpp:131,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:134,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:135,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 136
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::max
    - bthread_cond_destroy
    - bthread_start_urgent
    - bthread_usleep
    - bthread_join
    - pthread_mutex_lock
    - bthread_cond_signal
    - printf
    - labs
    - EXPECT_GT
    - ARRAY_SIZE
    - std::map::begin
    - ASSERT_LE
    - bthread_cond_init
    - clear
    - size
    - EXPECT_EQ
    - sqrt
    - pthread_mutex_unlock
    - EXPECT_LT
    - std::map::size
    - bthread_mutex_destroy
    - resize
    - bthread_mutex_init
    - std::map::end
    - abs
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:145,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:147,1
    - Dst: WrapperArg*::cond::notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 151
    functionName: cv_signaler
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - WrapperArg*::cond::notify_one
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * cv_signaler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WrapperArg*::mutex::native_handler
      Src: /src/brpc/test/bthread_cond_unittest.cpp:155,1
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 160
    functionName: cv_bmutex_waiter
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::mutex::native_handler
    - WrapperArg*::cond::wait
    linkageType: ''
    returnType: void
    signature: void * cv_bmutex_waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 169
    functionName: cv_mutex_waiter
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::cond::wait
    linkageType: ''
    returnType: void
    signature: void * cv_mutex_waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:186,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:188,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:191,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:191,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:192,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:194,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:197,1
    - Dst: WrapperArg::cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:198,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:199,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:200,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 203
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_usleep
    - pthread_join
    - pthread_create
    - BAIDU_SCOPED_LOCK
    - WrapperArg::cond::notify_all
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, cpp_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 212
    functionName: Signal::Signal
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Signal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:214,1
    - Dst: notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: Signal::notify
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - notify_one
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void notify()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Signal::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - old_signal
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 225
    functionName: Signal::wait
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 2
    functionsReached:
    - Signal::wait
    linkageType: ''
    returnType: int
    signature: int wait(int old_signal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PingPongArg*::nthread::fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:244,1
    - Dst: PingPongArg*::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:248,1
    - Dst: PingPongArg*::sig2::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:249,1
    - Dst: PingPongArg*::sig1::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:251,1
    - Dst: PingPongArg*::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:252,1
    - Dst: PingPongArg*::total_count::fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:256,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 258
    functionName: ping_pong_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - PingPongArg*::total_count::fetch_add
    - PingPongArg*::sig2::notify
    - PingPongArg*::sig1::wait
    - PingPongArg*::nthread::fetch_add
    - PingPongArg*::sig2::wait
    - PingPongArg*::sig1::notify
    linkageType: ''
    returnType: void
    signature: void *ping_pong_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_cond_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:267,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:267,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:269,1
    - Dst: PingPongArg::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:271,1
    - Dst: PingPongArg::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:274,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:274,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:276,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:277,1
    - Dst: PingPongArg::total_count::load
      Src: /src/brpc/test/bthread_cond_unittest.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 278
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - PingPongArg::total_count::load
    - bthread_join
    - PingPongArg::sig1::notify
    - usleep
    - PingPongArg::sig2::notify
    - ProfilerStart
    - LOG
    - ProfilerStop
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, ping_pong)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BroadcastArg*::broadcast_cond::notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:298,1
    - Dst: BroadcastArg*::wait_cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 304
    functionName: wait_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BroadcastArg*::wait_cond::wait
    - BroadcastArg*::broadcast_cond::notify_one
    linkageType: ''
    returnType: void
    signature: void * wait_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BroadcastArg*::broadcast_cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:312,1
    - Dst: BroadcastArg*::wait_cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:316,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 319
    functionName: broadcast_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BroadcastArg*::wait_cond::notify_all
    - BroadcastArg*::broadcast_cond::wait
    linkageType: ''
    returnType: void
    signature: void * broadcast_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:325,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:326,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 329
    functionName: disturb_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void * disturb_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:341,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:345,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:350,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:351,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:351,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:353,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:354,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:356,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:357,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 358
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_start_urgent
    - pthread_join
    - pthread_create
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, mixed_usage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:363,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 366
    functionName: BthreadCond::BthreadCond
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_cond_init
    - bthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void BthreadCond()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:368,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:369,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 370
    functionName: ~BthreadCond()
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    - bthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void ~BthreadCond()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 374
    functionName: BthreadCond::Init
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Init(int count = 1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:378,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:380,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 383
    functionName: BthreadCond::Signal
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - bthread_cond_signal
    linkageType: ''
    returnType: int
    signature: int Signal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:387,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:389,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:391,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 393
    functionName: BthreadCond::Wait
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_unlock
    - bthread_mutex_lock
    - bthread_cond_wait
    linkageType: ''
    returnType: int
    signature: int Wait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:407,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 410
    functionName: usleep_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * usleep_thread(void *)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BthreadCond*::Wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 418
    functionName: wait_cond_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BthreadCond*::Wait
    linkageType: ''
    returnType: void
    signature: void * wait_cond_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BthreadCond::BthreadCond
      Src: /src/brpc/test/bthread_cond_unittest.cpp:423,1
    - Dst: BthreadCond::Init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:424,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_cond_unittest.cpp:425,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:426,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_cond_unittest.cpp:428,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_cond_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:432,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_cond_unittest.cpp:432,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:433,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:435,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:436,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_cond_unittest.cpp:436,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:437,1
    - Dst: BthreadCond::Signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:438,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:440,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:441,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:442,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:443,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:445,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:445,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 420
    functionDepth: 2
    functionLinenumber: 420
    functionLinenumberEnd: 446
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 4
    functionsReached:
    - ASSERT_EQ
    - std::vector::push_back
    - butil::Timer::u_elapsed
    - bthread_start_urgent
    - butil::Timer::stop
    - butil::Timer::start
    - LOG_EVERY_SECOND
    - bthread_start_background
    - BthreadCond::Init
    - BthreadCond::Signal
    - bthread_join
    - BthreadCond::BthreadCond
    - usleep
    - std::vector::reserve
    - LOG
    - std::vector::size
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void launch_many_bthreads()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_cond_unittest.cpp:449,1
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_cond_unittest.cpp:450,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 451
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - launch_many_bthreads
    - bthread_setconcurrency
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, too_many_bthreads_from_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_cond_unittest.cpp:454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 456
    functionName: run_launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - launch_many_bthreads
    linkageType: ''
    returnType: void
    signature: void * run_launch_many_bthreads(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_cond_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:461,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:461,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:462,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 458
    functionDepth: 1
    functionLinenumber: 458
    functionLinenumberEnd: 463
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_join
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, too_many_bthreads_from_bthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:21,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:22,1
    - Dst: BigEndianReader::ptr
      Src: /src/brpc/test/big_endian_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:23,1
    - Dst: BigEndianReader::remaining
      Src: /src/brpc/test/big_endian_unittest.cc:23,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/big_endian_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:24,1
    - Dst: BigEndianReader::ReadBytes
      Src: /src/brpc/test/big_endian_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:27,1
    - Dst: BigEndianReader::ReadU8
      Src: /src/brpc/test/big_endian_unittest.cc:27,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:29,1
    - Dst: BigEndianReader::ReadU16
      Src: /src/brpc/test/big_endian_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:30,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:31,1
    - Dst: BigEndianReader::ReadU32
      Src: /src/brpc/test/big_endian_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:32,1
    - Dst: BigEndianReader::ptr
      Src: /src/brpc/test/big_endian_unittest.cc:33,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:34,1
    - Dst: BigEndianReader::ReadPiece
      Src: /src/brpc/test/big_endian_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:35,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/test/big_endian_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:36,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/big_endian_unittest.cc:36,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/big_endian_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 37
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - BigEndianReader::ReadBytes
    - BigEndianReader::Skip
    - BigEndianReader::ReadU16
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadPiece
    - BigEndianReader::ptr
    - butil::StringPiece::data
    - static_cast<int>
    - BigEndianReader::ReadU8
    - EXPECT_EQ
    - butil::StringPiece::size
    - BigEndianReader::remaining
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianReaderTest, ReadsValues)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:48,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:48,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:49,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:49,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:51,1
    - Dst: BigEndianReader::ReadU32
      Src: /src/brpc/test/big_endian_unittest.cc:51,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:52,1
    - Dst: BigEndianReader::ReadPiece
      Src: /src/brpc/test/big_endian_unittest.cc:52,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:53,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:53,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:55,1
    - Dst: BigEndianReader::ReadU16
      Src: /src/brpc/test/big_endian_unittest.cc:55,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:56,1
    - Dst: BigEndianReader::ReadBytes
      Src: /src/brpc/test/big_endian_unittest.cc:56,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:57,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:57,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:59,1
    - Dst: BigEndianReader::ReadU8
      Src: /src/brpc/test/big_endian_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:60,1
    - Dst: BigEndianReader::remaining
      Src: /src/brpc/test/big_endian_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - BigEndianReader::ReadBytes
    - BigEndianReader::Skip
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadU16
    - BigEndianReader::ReadPiece
    - EXPECT_FALSE
    - BigEndianReader::ReadU8
    - EXPECT_EQ
    - BigEndianReader::remaining
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianReaderTest, RespectsLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/big_endian_unittest.cc:67,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:70,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:70,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:71,1
    - Dst: BigEndianWriter::WriteBytes
      Src: /src/brpc/test/big_endian_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:72,1
    - Dst: BigEndianWriter::WriteU8
      Src: /src/brpc/test/big_endian_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:73,1
    - Dst: BigEndianWriter::WriteU16
      Src: /src/brpc/test/big_endian_unittest.cc:73,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:74,1
    - Dst: BigEndianWriter::WriteU32
      Src: /src/brpc/test/big_endian_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:75,1
    - Dst: memcmp
      Src: /src/brpc/test/big_endian_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 76
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - BigEndianWriter::Skip
    - BigEndianWriter::WriteU32
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU8
    - memset
    - BigEndianWriter::WriteU16
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianWriterTest, WritesValues)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:86,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:87,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:87,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:89,1
    - Dst: BigEndianWriter::WriteU32
      Src: /src/brpc/test/big_endian_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:90,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:90,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:92,1
    - Dst: BigEndianWriter::WriteU16
      Src: /src/brpc/test/big_endian_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:93,1
    - Dst: BigEndianWriter::WriteBytes
      Src: /src/brpc/test/big_endian_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:94,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:94,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:96,1
    - Dst: BigEndianWriter::WriteU8
      Src: /src/brpc/test/big_endian_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:97,1
    - Dst: BigEndianWriter::remaining
      Src: /src/brpc/test/big_endian_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 98
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - BigEndianWriter::Skip
    - BigEndianWriter::WriteU32
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU8
    - BigEndianWriter::WriteU16
    - EXPECT_FALSE
    - BigEndianWriter::remaining
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianWriterTest, RespectsLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:21,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:21,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:22,1
    - Dst: BigEndianReader::ptr
      Src: /src/brpc/test/big_endian_unittest.cc:22,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:23,1
    - Dst: BigEndianReader::remaining
      Src: /src/brpc/test/big_endian_unittest.cc:23,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/big_endian_unittest.cc:23,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:24,1
    - Dst: BigEndianReader::ReadBytes
      Src: /src/brpc/test/big_endian_unittest.cc:24,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:25,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:26,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:27,1
    - Dst: BigEndianReader::ReadU8
      Src: /src/brpc/test/big_endian_unittest.cc:27,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:28,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:29,1
    - Dst: BigEndianReader::ReadU16
      Src: /src/brpc/test/big_endian_unittest.cc:29,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:30,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:31,1
    - Dst: BigEndianReader::ReadU32
      Src: /src/brpc/test/big_endian_unittest.cc:31,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:32,1
    - Dst: BigEndianReader::ptr
      Src: /src/brpc/test/big_endian_unittest.cc:33,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:34,1
    - Dst: BigEndianReader::ReadPiece
      Src: /src/brpc/test/big_endian_unittest.cc:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:35,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/test/big_endian_unittest.cc:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:36,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/big_endian_unittest.cc:36,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/big_endian_unittest.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 37
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - BigEndianReader::ReadBytes
    - BigEndianReader::Skip
    - BigEndianReader::ReadU16
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadPiece
    - BigEndianReader::ptr
    - butil::StringPiece::data
    - static_cast<int>
    - BigEndianReader::ReadU8
    - EXPECT_EQ
    - butil::StringPiece::size
    - BigEndianReader::remaining
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianReaderTest, ReadsValues)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:48,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:48,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:49,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:49,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:51,1
    - Dst: BigEndianReader::ReadU32
      Src: /src/brpc/test/big_endian_unittest.cc:51,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:52,1
    - Dst: BigEndianReader::ReadPiece
      Src: /src/brpc/test/big_endian_unittest.cc:52,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:53,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:53,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:55,1
    - Dst: BigEndianReader::ReadU16
      Src: /src/brpc/test/big_endian_unittest.cc:55,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:56,1
    - Dst: BigEndianReader::ReadBytes
      Src: /src/brpc/test/big_endian_unittest.cc:56,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:57,1
    - Dst: BigEndianReader::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:57,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:59,1
    - Dst: BigEndianReader::ReadU8
      Src: /src/brpc/test/big_endian_unittest.cc:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:60,1
    - Dst: BigEndianReader::remaining
      Src: /src/brpc/test/big_endian_unittest.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 61
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - BigEndianReader::ReadBytes
    - BigEndianReader::Skip
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadU16
    - BigEndianReader::ReadPiece
    - EXPECT_FALSE
    - BigEndianReader::ReadU8
    - EXPECT_EQ
    - BigEndianReader::remaining
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianReaderTest, RespectsLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/big_endian_unittest.cc:67,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:70,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:70,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:71,1
    - Dst: BigEndianWriter::WriteBytes
      Src: /src/brpc/test/big_endian_unittest.cc:71,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:72,1
    - Dst: BigEndianWriter::WriteU8
      Src: /src/brpc/test/big_endian_unittest.cc:72,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:73,1
    - Dst: BigEndianWriter::WriteU16
      Src: /src/brpc/test/big_endian_unittest.cc:73,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:74,1
    - Dst: BigEndianWriter::WriteU32
      Src: /src/brpc/test/big_endian_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:75,1
    - Dst: memcmp
      Src: /src/brpc/test/big_endian_unittest.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 76
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - EXPECT_TRUE
    - BigEndianWriter::Skip
    - BigEndianWriter::WriteU32
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU8
    - memset
    - BigEndianWriter::WriteU16
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianWriterTest, WritesValues)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:86,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:86,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:87,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:87,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:89,1
    - Dst: BigEndianWriter::WriteU32
      Src: /src/brpc/test/big_endian_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:90,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:90,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:92,1
    - Dst: BigEndianWriter::WriteU16
      Src: /src/brpc/test/big_endian_unittest.cc:92,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:93,1
    - Dst: BigEndianWriter::WriteBytes
      Src: /src/brpc/test/big_endian_unittest.cc:93,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/big_endian_unittest.cc:94,1
    - Dst: BigEndianWriter::Skip
      Src: /src/brpc/test/big_endian_unittest.cc:94,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/big_endian_unittest.cc:96,1
    - Dst: BigEndianWriter::WriteU8
      Src: /src/brpc/test/big_endian_unittest.cc:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/big_endian_unittest.cc:97,1
    - Dst: BigEndianWriter::remaining
      Src: /src/brpc/test/big_endian_unittest.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 98
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/big_endian_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - BigEndianWriter::Skip
    - BigEndianWriter::WriteU32
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU8
    - BigEndianWriter::WriteU16
    - EXPECT_FALSE
    - BigEndianWriter::remaining
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(BigEndianWriterTest, RespectsLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/version_unittest.cc:13,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:13,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 14
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - Version::IsValid
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, DefaultConstructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:18,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:18,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/version_unittest.cc:20,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:24,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:24,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:25,1
    - Dst: Version::Equals
      Src: /src/brpc/test/version_unittest.cc:25,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:27,1
    - Dst: Version::Equals
      Src: /src/brpc/test/version_unittest.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 28
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Version::Equals
    - EXPECT_FALSE
    - Version::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, ValueSemantics)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:58,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:60,1
    - Dst: Version::components
      Src: /src/brpc/test/version_unittest.cc:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Version::components
    - ARRAYSIZE_UNSAFE
    - Version::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, GetVersionFromString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:85,1
    - Dst: Version::CompareTo
      Src: /src/brpc/test/version_unittest.cc:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:88,1
    - Dst: Version::IsOlderThan
      Src: /src/brpc/test/version_unittest.cc:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 90
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Version::IsOlderThan
    - ARRAYSIZE_UNSAFE
    - Version::CompareTo
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, Compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:112,1
    - Dst: Version::CompareToWildcardString
      Src: /src/brpc/test/version_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Version::CompareToWildcardString
    - ARRAYSIZE_UNSAFE
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, CompareToWildcardString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:137,1
    - Dst: butil::Version::IsValidWildcardString
      Src: /src/brpc/test/version_unittest.cc:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 140
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::Version::IsValidWildcardString
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, IsValidWildcardString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/version_unittest.cc:13,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:13,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 14
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - Version::IsValid
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, DefaultConstructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:18,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:18,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/version_unittest.cc:20,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:20,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:24,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:24,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:25,1
    - Dst: Version::Equals
      Src: /src/brpc/test/version_unittest.cc:25,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/version_unittest.cc:27,1
    - Dst: Version::Equals
      Src: /src/brpc/test/version_unittest.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 28
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - Version::Equals
    - EXPECT_FALSE
    - Version::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, ValueSemantics)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:56,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:58,1
    - Dst: Version::IsValid
      Src: /src/brpc/test/version_unittest.cc:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:60,1
    - Dst: Version::components
      Src: /src/brpc/test/version_unittest.cc:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Version::components
    - ARRAYSIZE_UNSAFE
    - Version::IsValid
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, GetVersionFromString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:85,1
    - Dst: Version::CompareTo
      Src: /src/brpc/test/version_unittest.cc:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:88,1
    - Dst: Version::IsOlderThan
      Src: /src/brpc/test/version_unittest.cc:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 90
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Version::IsOlderThan
    - ARRAYSIZE_UNSAFE
    - Version::CompareTo
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, Compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:112,1
    - Dst: Version::CompareToWildcardString
      Src: /src/brpc/test/version_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 117
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Version::CompareToWildcardString
    - ARRAYSIZE_UNSAFE
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, CompareToWildcardString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/test/version_unittest.cc:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/version_unittest.cc:137,1
    - Dst: butil::Version::IsValidWildcardString
      Src: /src/brpc/test/version_unittest.cc:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 140
    functionName: TEST
    functionSourceFile: /src/brpc/test/version_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ARRAYSIZE_UNSAFE
    - butil::Version::IsValidWildcardString
    linkageType: ''
    returnType: void
    signature: void TEST(VersionTest, IsValidWildcardString)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: FileDumperTest::SetUp
    functionSourceFile: /src/brpc/test/bvar_file_dumper_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: FileDumperTest::TearDown
    functionSourceFile: /src/brpc/test/bvar_file_dumper_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_file_dumper_unittest.cpp:37,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_file_dumper_unittest.cpp:38,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_file_dumper_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_file_dumper_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileDumperTest, filters)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:34,1
    - Dst: brpc::AdaptiveMaxConcurrency::type
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:34,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:35,1
    - Dst: brpc::AdaptiveMaxConcurrency::value
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:35,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:36,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:37,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:40,1
    - Dst: brpc::AdaptiveMaxConcurrency::type
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:41,1
    - Dst: brpc::AdaptiveMaxConcurrency::value
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:41,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:42,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:43,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:46,1
    - Dst: brpc::AdaptiveMaxConcurrency::type
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:47,1
    - Dst: brpc::AdaptiveMaxConcurrency::value
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:48,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 50
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_adaptive_class_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AdaptiveMaxConcurrency::type
    - EXPECT_EQ
    - EXPECT_TRUE
    - brpc::AdaptiveMaxConcurrency::value
    linkageType: ''
    returnType: void
    signature: void TEST(AdaptiveMaxConcurrencyTest, ShouldConvertCorrectly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AdaptiveProtocolType::AdaptiveProtocolType
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:53,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:56,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:60,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_adaptive_class_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - EXPECT_EQ
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    linkageType: ''
    returnType: void
    signature: void TEST(AdaptiveProtocolTypeTest, ShouldConvertCorrectly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AdaptiveConnectionType::AdaptiveConnectionType
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:68,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:69,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:72,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_adaptive_class_unittest.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 74
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_adaptive_class_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - EXPECT_EQ
    - brpc::AdaptiveConnectionType::AdaptiveConnectionType
    linkageType: ''
    returnType: void
    signature: void TEST(AdaptiveConnectionTypeTest, ShouldConvertCorrectly)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: get_version
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_version(bthread_id_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:44,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:48,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:52,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:52,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_id_unittest.cpp:55,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 58
    functionName: signaller
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - bthread_id_unlock_and_destroy
    - bthread_id_trylock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * signaller(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:63,1
    - Dst: bthread_id_create_ranged
      Src: /src/brpc/test/bthread_id_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:65,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:65,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:66,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:66,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:66,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:68,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:73,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:73,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:75,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:78,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:82,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:83,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:85,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:85,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:86,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:86,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 87
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - bthread::id_value
    - pthread_create
    - bthread_id_join
    - bthread_id_create_ranged
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, join_after_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:92,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:93,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:93,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:93,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:95,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:100,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:102,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:104,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:104,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:104,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:106,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:109,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - bthread::id_value
    - pthread_create
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, join_before_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<OnResetArg*>
      Src: /src/brpc/test/bthread_id_unittest.cpp:121,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 125
    functionName: on_reset
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<OnResetArg*>
    linkageType: ''
    returnType: int
    signature: int on_reset(bthread_id_t id, void* data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:130,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:131,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:131,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:132,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:135,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:135,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 136
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_error
    - bthread_id_create
    - bthread::id_value
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, error_is_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:141,1
    - Dst: bthread_id_create_ranged
      Src: /src/brpc/test/bthread_id_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:143,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:143,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:144,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:147,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:147,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, error_is_destroy_ranged)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:152,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:153,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:153,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:154,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:155,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:155,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_error
    - bthread_id_create
    - bthread::id_value
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, default_error_is_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:160,1
    - Dst: bthread_id_create_ranged
      Src: /src/brpc/test/bthread_id_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:162,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:162,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:163,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:163,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:164,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:165,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:165,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:166,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:166,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:167,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:168,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 169
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, doubly_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::vector<int>*>
      Src: /src/brpc/test/bthread_id_unittest.cpp:172,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_id_unittest.cpp:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:174,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 176
    functionName: on_numeric_error
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock
    - std::vector*::push_back
    - static_cast<std::vector<int>*>
    - EXPECT_EQ
    linkageType: ''
    returnType: int
    signature: int on_numeric_error(bthread_id_t id, void* data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:181,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:182,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:182,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:186,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:188,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_id_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:192,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:193,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:193,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:195,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:197,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_id_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:198,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:199,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:199,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:200,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_id_unittest.cpp:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:202,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/bthread_id_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:206,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:207,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:207,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:209,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:211,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:211,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_id_unittest.cpp:212,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/bthread_id_unittest.cpp:212,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 213
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_id_error
    - bthread_id_create
    - bthread::id_value
    - EXPECT_EQ
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - std::vector::empty
    - get_version
    - std::vector::clear
    - bthread_id_trylock
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, many_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_id_unittest.cpp:217,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_id_unittest.cpp:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:219,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:219,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:221,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:221,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_id_unittest.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_id_unittest.cpp:223,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_id_unittest.cpp:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 225
    functionName: locker
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - bthread_id_lock
    - bthread_id_unlock
    - EXPECT_EQ
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * locker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:229,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:230,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:230,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:230,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:233,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:233,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:237,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:237,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 239
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - bthread::id_value
    - pthread_create
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, id_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:243,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:246,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:249,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 252
    functionName: failed_locker
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - EXPECT_EQ
    - bthread_usleep
    - bthread_id_lock
    linkageType: ''
    returnType: void
    signature: void * failed_locker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:256,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:257,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:257,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:257,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:260,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:260,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:266,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 270
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - bthread::id_value
    - pthread_create
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, id_lock_and_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:275,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:276,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:276,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:276,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:278,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:283,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:283,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:287,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:289,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:289,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:289,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:291,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:294,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 298
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - bthread_usleep
    - bthread::id_value
    - pthread_create
    - pthread_join
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, join_after_destroy_before_unlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:308,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:309,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:309,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 311
    functionName: stopped_waiter
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread::id_value
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void * stopped_waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:316,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:317,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:317,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:319,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:320,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:322,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:326,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_id_unittest.cpp:326,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:329,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_id_unittest.cpp:330,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:332,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_id_unittest.cpp:334,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_id_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:337,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:337,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:339,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:339,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 313
    functionDepth: 1
    functionLinenumber: 313
    functionLinenumberEnd: 341
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - ASSERT_TRUE
    - bthread_start_urgent
    - bthread_id_create
    - bthread_usleep
    - bthread::id_value
    - bthread::TaskGroup::exists
    - bthread_join
    - get_version
    - bthread_id_unlock_and_destroy
    - bthread_id_trylock
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, stop_a_wait_after_fight_before_signal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:345,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:346,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:346,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 343
    functionDepth: 1
    functionLinenumber: 343
    functionLinenumberEnd: 348
    functionName: waiter
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread::id_value
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void * waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:351,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:353,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 355
    functionName: handle_data
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int handle_data(bthread_id_t id, void* data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:359,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/test/bthread_id_unittest.cpp:359,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:361,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:364,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:365,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:365,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:366,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/test/bthread_id_unittest.cpp:366,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:368,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:370,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:370,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:373,1
    - Dst: bthread_id_list_reset
      Src: /src/brpc/test/bthread_id_unittest.cpp:373,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:377,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:379,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:382,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 383
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - bthread_id_list_add
    - bthread_id_create
    - bthread_usleep
    - bthread::id_value
    - pthread_create
    - pthread_join
    - bthread_id_list_init
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, list_signal)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 387
    functionName: error_without_unlock
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int error_without_unlock(bthread_id_t, void *, int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:391,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:392,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:393,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:394,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:395,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:396,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:397,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:398,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:399,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:400,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:401,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:402,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:403,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:404,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:405,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_create
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread::id_status
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:411,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:412,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/test/bthread_id_unittest.cpp:412,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:413,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:415,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/test/bthread_id_unittest.cpp:415,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:416,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 409
    functionDepth: 1
    functionLinenumber: 409
    functionLinenumberEnd: 418
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread::id_status
    - bthread_id_lock_and_reset_range
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, reset_range)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_id_unittest.cpp:429,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:430,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 433
    functionName: fail_to_lock_id
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_lock
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * fail_to_lock_id(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:437,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:438,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:439,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:443,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:444,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_id_unittest.cpp:444,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:446,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:447,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:449,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:449,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 450
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - pthread_create
    - bthread_id_about_to_destroy
    - bthread_start_background
    - bthread_join
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread::id_status
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, about_to_destroy_before_locking)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:454,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:455,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:455,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 457
    functionName: succeed_to_lock_id
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_unlock
    - bthread_id_lock
    linkageType: ''
    returnType: void
    signature: void * succeed_to_lock_id(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:461,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:462,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:463,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:464,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:467,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:468,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_id_unittest.cpp:468,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:470,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:471,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:473,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:474,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 475
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - pthread_create
    - bthread_id_about_to_destroy
    - bthread_start_background
    - bthread_join
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread::id_status
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, about_to_destroy_cancelled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:479,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:480,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:485,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:486,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_id_unittest.cpp:486,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_id_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:490,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:490,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:493,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:494,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:496,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 477
    functionDepth: 1
    functionLinenumber: 477
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - pthread_create
    - bthread_start_background
    - ASSERT_FALSE
    - bthread_id_about_to_destroy
    - bthread_join
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread::id_status
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, about_to_destroy_during_locking)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:506,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:507,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:510,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:513,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 505
    functionDepth: 1
    functionLinenumber: 505
    functionLinenumberEnd: 515
    functionName: handler_without_desc
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_unlock
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int handler_without_desc(bthread_id_t id, void* data, int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:519,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:520,1
    - Dst: c_str
      Src: /src/brpc/test/bthread_id_unittest.cpp:520,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:523,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:526,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 528
    functionName: handler_with_desc
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - c_str
    - EXPECT_EQ
    - EXPECT_STREQ
    linkageType: ''
    returnType: int
    signature: "int handler_with_desc(bthread_id_t id, void* data, int error_code,\n
      \                     const std::string& error_text)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:532,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:534,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/bthread_id_unittest.cpp:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:540,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:547,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:555,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:560,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:567,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:568,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:569,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:576,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:577,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:578,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:586,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:587,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:588,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:592,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:593,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:594,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 596
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - bthread_id_error2
    - bthread_id_create2
    - bthread_id_lock
    - bthread_id_unlock
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, error_with_descriptions)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: get_version
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_version(bthread_id_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:44,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:48,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:51,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:52,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:52,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_id_unittest.cpp:55,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 58
    functionName: signaller
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - bthread_usleep
    - bthread_id_unlock_and_destroy
    - bthread_id_trylock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * signaller(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:63,1
    - Dst: bthread_id_create_ranged
      Src: /src/brpc/test/bthread_id_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:65,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:65,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:65,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:66,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:66,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:66,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:68,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:69,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:73,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:73,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:75,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:78,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:81,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:82,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:82,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:83,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:85,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:85,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:85,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:86,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:86,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 87
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - pthread_join
    - bthread::id_value
    - pthread_create
    - bthread_id_join
    - bthread_id_create_ranged
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, join_after_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:92,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:93,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:93,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:93,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:95,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:100,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:102,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:104,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:104,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:104,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:106,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:109,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 113
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - bthread::id_value
    - pthread_create
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, join_before_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<OnResetArg*>
      Src: /src/brpc/test/bthread_id_unittest.cpp:121,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 125
    functionName: on_reset
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<OnResetArg*>
    linkageType: ''
    returnType: int
    signature: int on_reset(bthread_id_t id, void* data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:130,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:131,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:131,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:132,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:135,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:135,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 136
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_error
    - bthread_id_create
    - bthread::id_value
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, error_is_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:141,1
    - Dst: bthread_id_create_ranged
      Src: /src/brpc/test/bthread_id_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:143,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:143,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:144,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:147,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:147,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, error_is_destroy_ranged)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:152,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:153,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:153,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:154,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:155,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:155,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_error
    - bthread_id_create
    - bthread::id_value
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, default_error_is_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:160,1
    - Dst: bthread_id_create_ranged
      Src: /src/brpc/test/bthread_id_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:162,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:162,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:163,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:163,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:164,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:165,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:165,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:166,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:166,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:167,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:168,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 169
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, doubly_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::vector<int>*>
      Src: /src/brpc/test/bthread_id_unittest.cpp:172,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_id_unittest.cpp:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:174,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 176
    functionName: on_numeric_error
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock
    - std::vector*::push_back
    - static_cast<std::vector<int>*>
    - EXPECT_EQ
    linkageType: ''
    returnType: int
    signature: int on_numeric_error(bthread_id_t id, void* data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:181,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:182,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:182,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:186,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:188,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_id_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:192,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:193,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:193,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:195,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:197,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_id_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:198,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:199,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:199,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:200,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_id_unittest.cpp:200,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:202,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/bthread_id_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:206,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:207,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:207,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:209,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:211,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:211,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_id_unittest.cpp:212,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/bthread_id_unittest.cpp:212,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 213
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - bthread_id_error
    - bthread_id_create
    - bthread::id_value
    - EXPECT_EQ
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - std::vector::empty
    - get_version
    - std::vector::clear
    - bthread_id_trylock
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, many_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_id_unittest.cpp:217,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_id_unittest.cpp:218,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:219,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:219,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:221,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:221,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_id_unittest.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_id_unittest.cpp:223,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_id_unittest.cpp:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 225
    functionName: locker
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - butil::Timer::stop
    - bthread_usleep
    - butil::Timer::start
    - bthread_id_lock
    - bthread_id_unlock
    - EXPECT_EQ
    - LOG
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * locker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:229,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:230,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:230,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:230,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:233,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:233,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:237,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:237,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 239
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - bthread::id_value
    - pthread_create
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, id_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:243,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:245,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:246,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:249,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 252
    functionName: failed_locker
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - EXPECT_EQ
    - bthread_usleep
    - bthread_id_lock
    linkageType: ''
    returnType: void
    signature: void * failed_locker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:256,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:257,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:257,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:257,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:260,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:260,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:266,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 270
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - bthread::id_value
    - pthread_create
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, id_lock_and_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:275,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:276,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:276,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:276,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:278,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:283,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:283,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:287,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:289,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:289,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:289,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:291,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:294,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 298
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - bthread_id_create
    - bthread_usleep
    - bthread::id_value
    - pthread_create
    - pthread_join
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, join_after_destroy_before_unlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:308,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:309,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:309,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 311
    functionName: stopped_waiter
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread::id_value
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void * stopped_waiter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:316,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:317,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:317,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:319,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/test/bthread_id_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:320,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:322,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:326,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_id_unittest.cpp:326,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:329,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_id_unittest.cpp:330,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:332,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_id_unittest.cpp:334,1
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/test/bthread_id_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:337,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:337,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:339,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:339,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 313
    functionDepth: 1
    functionLinenumber: 313
    functionLinenumberEnd: 341
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - ASSERT_TRUE
    - bthread_start_urgent
    - bthread_id_create
    - bthread_usleep
    - bthread::id_value
    - bthread::TaskGroup::exists
    - bthread_join
    - get_version
    - bthread_id_unlock_and_destroy
    - bthread_id_trylock
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, stop_a_wait_after_fight_before_signal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:345,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:345,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:346,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:346,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 343
    functionDepth: 1
    functionLinenumber: 343
    functionLinenumberEnd: 348
    functionName: waiter
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread::id_value
    - bthread_id_join
    - get_version
    linkageType: ''
    returnType: void
    signature: void * waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:351,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:353,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 355
    functionName: handle_data
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int handle_data(bthread_id_t id, void* data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:359,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/test/bthread_id_unittest.cpp:359,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:361,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:364,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:365,1
    - Dst: get_version
      Src: /src/brpc/test/bthread_id_unittest.cpp:365,1
    - Dst: bthread::id_value
      Src: /src/brpc/test/bthread_id_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:366,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/test/bthread_id_unittest.cpp:366,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:368,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:369,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:370,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:370,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:373,1
    - Dst: bthread_id_list_reset
      Src: /src/brpc/test/bthread_id_unittest.cpp:373,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_id_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:377,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:379,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:382,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 383
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ARRAY_SIZE
    - bthread_id_list_add
    - bthread_id_create
    - bthread_usleep
    - bthread::id_value
    - pthread_create
    - pthread_join
    - bthread_id_list_init
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - get_version
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, list_signal)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 387
    functionName: error_without_unlock
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int error_without_unlock(bthread_id_t, void *, int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:391,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:392,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:393,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:394,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:395,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:396,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:397,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:398,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:399,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:400,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:401,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:402,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:403,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:404,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:405,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_create
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread::id_status
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, status)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:411,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:412,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/test/bthread_id_unittest.cpp:412,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:413,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:415,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/test/bthread_id_unittest.cpp:415,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:416,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 409
    functionDepth: 1
    functionLinenumber: 409
    functionLinenumberEnd: 418
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread::id_status
    - bthread_id_lock_and_reset_range
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, reset_range)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_id_unittest.cpp:429,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:430,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 433
    functionName: fail_to_lock_id
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_lock
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void * fail_to_lock_id(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:437,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:438,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:439,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:443,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:444,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_id_unittest.cpp:444,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:446,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:447,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:449,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:449,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 450
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - pthread_create
    - bthread_id_about_to_destroy
    - bthread_start_background
    - bthread_join
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread::id_status
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, about_to_destroy_before_locking)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:454,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:455,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:455,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 457
    functionName: succeed_to_lock_id
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_unlock
    - bthread_id_lock
    linkageType: ''
    returnType: void
    signature: void * succeed_to_lock_id(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:461,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:462,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:463,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:464,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:467,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:468,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_id_unittest.cpp:468,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:470,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:471,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:473,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:474,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 475
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - pthread_create
    - bthread_id_about_to_destroy
    - bthread_start_background
    - bthread_join
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread::id_status
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, about_to_destroy_cancelled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:479,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:480,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:485,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:486,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_id_unittest.cpp:486,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_id_unittest.cpp:488,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bthread_id_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:490,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:490,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:493,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_id_unittest.cpp:494,1
    - Dst: bthread::id_status
      Src: /src/brpc/test/bthread_id_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:496,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 477
    functionDepth: 1
    functionLinenumber: 477
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - pthread_join
    - pthread_create
    - bthread_start_background
    - ASSERT_FALSE
    - bthread_id_about_to_destroy
    - bthread_join
    - bthread_id_lock
    - bthread_id_unlock_and_destroy
    - bthread::id_status
    - usleep
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, about_to_destroy_during_locking)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:506,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:507,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:510,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:513,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 505
    functionDepth: 1
    functionLinenumber: 505
    functionLinenumberEnd: 515
    functionName: handler_without_desc
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_id_unlock
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int handler_without_desc(bthread_id_t id, void* data, int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:518,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:519,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:520,1
    - Dst: c_str
      Src: /src/brpc/test/bthread_id_unittest.cpp:520,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/bthread_id_unittest.cpp:523,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:526,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 528
    functionName: handler_with_desc
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - c_str
    - EXPECT_EQ
    - EXPECT_STREQ
    linkageType: ''
    returnType: int
    signature: "int handler_with_desc(bthread_id_t id, void* data, int error_code,\n
      \                     const std::string& error_text)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:532,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/bthread_id_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:534,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/bthread_id_unittest.cpp:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:540,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:547,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:555,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:560,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:567,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:568,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:569,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:576,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:577,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:578,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:586,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:587,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/bthread_id_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:588,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:592,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/bthread_id_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:593,1
    - Dst: bthread_id_error2
      Src: /src/brpc/test/bthread_id_unittest.cpp:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:594,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/test/bthread_id_unittest.cpp:594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_id_unittest.cpp:595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 596
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_id_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_id_create
    - bthread_id_error2
    - bthread_id_create2
    - bthread_id_lock
    - bthread_id_unlock
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadIdTest, error_with_descriptions)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/nullable_string16_unittest.cc:13,1
    - Dst: NullableString16::is_null
      Src: /src/brpc/test/nullable_string16_unittest.cc:13,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/nullable_string16_unittest.cc:14,1
    - Dst: string16
      Src: /src/brpc/test/nullable_string16_unittest.cc:14,1
    - Dst: NullableString16::string
      Src: /src/brpc/test/nullable_string16_unittest.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 15
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - NullableString16::is_null
    - EXPECT_EQ
    - NullableString16::string
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, DefaultConstructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:18,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/nullable_string16_unittest.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 21
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:24,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:25,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/nullable_string16_unittest.cc:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 27
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, NotEquals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:30,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/nullable_string16_unittest.cc:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, NotEqualsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/nullable_string16_unittest.cc:13,1
    - Dst: NullableString16::is_null
      Src: /src/brpc/test/nullable_string16_unittest.cc:13,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/nullable_string16_unittest.cc:14,1
    - Dst: string16
      Src: /src/brpc/test/nullable_string16_unittest.cc:14,1
    - Dst: NullableString16::string
      Src: /src/brpc/test/nullable_string16_unittest.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 15
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - string16
    - NullableString16::is_null
    - EXPECT_EQ
    - NullableString16::string
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, DefaultConstructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:18,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:19,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/nullable_string16_unittest.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 21
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, Equals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:24,1
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:25,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/nullable_string16_unittest.cc:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 27
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, NotEquals)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ASCIIToUTF16
      Src: /src/brpc/test/nullable_string16_unittest.cc:30,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/nullable_string16_unittest.cc:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/nullable_string16_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::ASCIIToUTF16
    linkageType: ''
    returnType: void
    signature: void TEST(NullableString16Test, NotEqualsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: ConstructAndDestructLogger::ConstructAndDestructLogger
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void ConstructAndDestructLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: ~ConstructAndDestructLogger()
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void ~ConstructAndDestructLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lazy_instance_unittest.cc:31,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/lazy_instance_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: SlowConstructor::SlowConstructor
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromSeconds
    linkageType: ''
    returnType: void
    signature: void SlowConstructor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: SlowConstructor::some_int
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int some_int() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - lazy
    argTypes:
    - butil::LazyInstance<SlowConstructor>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 47
    functionName: SlowDelegate::SlowDelegate
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SlowDelegate(butil::LazyInstance<SlowConstructor>* lazy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:50,1
    - Dst: Get
      Src: /src/brpc/test/lazy_instance_unittest.cc:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:51,1
    - Dst: Pointer
      Src: /src/brpc/test/lazy_instance_unittest.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: SlowDelegate::OVERRIDE
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Pointer
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: ConstructAndDestructLogger::ConstructAndDestructLogger
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void ConstructAndDestructLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: ~ConstructAndDestructLogger()
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - GetNext
    linkageType: ''
    returnType: void
    signature: void ~ConstructAndDestructLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Sleep
      Src: /src/brpc/test/lazy_instance_unittest.cc:31,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/test/lazy_instance_unittest.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: SlowConstructor::SlowConstructor
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Sleep
    - butil::TimeDelta::FromSeconds
    linkageType: ''
    returnType: void
    signature: void SlowConstructor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: SlowConstructor::some_int
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int some_int() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - lazy
    argTypes:
    - butil::LazyInstance<SlowConstructor>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 47
    functionName: SlowDelegate::SlowDelegate
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SlowDelegate(butil::LazyInstance<SlowConstructor>* lazy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:50,1
    - Dst: Get
      Src: /src/brpc/test/lazy_instance_unittest.cc:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:51,1
    - Dst: Pointer
      Src: /src/brpc/test/lazy_instance_unittest.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: SlowDelegate::OVERRIDE
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Pointer
    - Get
    linkageType: ''
    returnType: void
    signature: void OVERRIDE
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ShadowingAtExitManager::ShadowingAtExitManager
      Src: /src/brpc/test/lazy_instance_unittest.cc:65,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:67,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:67,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:68,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:68,1
    - Dst: Get
      Src: /src/brpc/test/lazy_instance_unittest.cc:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:71,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:72,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:72,1
    - Dst: Pointer
      Src: /src/brpc/test/lazy_instance_unittest.cc:74,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:75,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:75,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:76,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:76,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:78,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:78,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:79,1
    - Dst: GetNext
      Src: /src/brpc/test/lazy_instance_unittest.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 80
    functionName: TEST
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - GetNext
    - Pointer
    - EXPECT_EQ
    - Get
    linkageType: ''
    returnType: void
    signature: void TEST(LazyInstanceTest, Basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ShadowingAtExitManager::ShadowingAtExitManager
      Src: /src/brpc/test/lazy_instance_unittest.cc:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:90,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/test/lazy_instance_unittest.cc:93,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:94,1
    - Dst: butil::DelegateSimpleThreadPool::Start
      Src: /src/brpc/test/lazy_instance_unittest.cc:96,1
    - Dst: butil::DelegateSimpleThreadPool::JoinAll
      Src: /src/brpc/test/lazy_instance_unittest.cc:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/lazy_instance_unittest.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 100
    functionName: TEST
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - butil::DelegateSimpleThreadPool::JoinAll
    - butil::DelegateSimpleThreadPool::Start
    - butil::DelegateSimpleThreadPool::AddWork
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(LazyInstanceTest, ConstructorThreadSafety)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: DeleteLogger::DeleteLogger
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: ~DeleteLogger()
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DeleteLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - deleted
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: DeleteLogger::SetDeletedPtr
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetDeletedPtr(bool* deleted)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: DeleteLogger::DeleteLogger
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: ~DeleteLogger()
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DeleteLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - deleted
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: DeleteLogger::SetDeletedPtr
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetDeletedPtr(bool* deleted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ShadowingAtExitManager::ShadowingAtExitManager
      Src: /src/brpc/test/lazy_instance_unittest.cc:126,1
    - Dst: butil::LazyInstance::Get
      Src: /src/brpc/test/lazy_instance_unittest.cc:128,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/lazy_instance_unittest.cc:130,1
    - Dst: butil::ShadowingAtExitManager::ShadowingAtExitManager
      Src: /src/brpc/test/lazy_instance_unittest.cc:136,1
    - Dst: butil::LazyInstance<DeleteLogger>::Leaky::Get
      Src: /src/brpc/test/lazy_instance_unittest.cc:139,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/lazy_instance_unittest.cc:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 142
    functionName: TEST
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - EXPECT_TRUE
    - butil::LazyInstance<DeleteLogger>::Leaky::Get
    - butil::LazyInstance::Get
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LazyInstanceTest, LeakyLazyInstance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: AlignedData::AlignedData
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 150
    functionName: ~AlignedData()
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: AlignedData::AlignedData
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 150
    functionName: ~AlignedData()
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AlignedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - ptr
    - ','
    - align
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 158
    functionName: EXPECT_ALIGNED
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXPECT_ALIGNED(ptr, align)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/lazy_instance_unittest.cc:169,1
    - Dst: LazyInstance::Pointer
      Src: /src/brpc/test/lazy_instance_unittest.cc:169,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/lazy_instance_unittest.cc:170,1
    - Dst: LazyInstance::Pointer
      Src: /src/brpc/test/lazy_instance_unittest.cc:170,1
    - Dst: EXPECT_ALIGNED
      Src: /src/brpc/test/lazy_instance_unittest.cc:171,1
    - Dst: LazyInstance::Pointer
      Src: /src/brpc/test/lazy_instance_unittest.cc:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 172
    functionName: TEST
    functionSourceFile: /src/brpc/test/lazy_instance_unittest.cc
    functionUses: 0
    functionsReached:
    - LazyInstance::Pointer
    - EXPECT_ALIGNED
    linkageType: ''
    returnType: void
    signature: void TEST(LazyInstanceTest, Alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - in_type
    - in_fd1
    argTypes:
    - Type
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: butil::Action
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Action(Type in_type, int in_fd1, int in_fd2 = -1)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Action
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: operator==(const Action& other) const
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const Action& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::InjectionTracer::InjectionTracer
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InjectionTracer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:49,1
    - Dst: Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - result
    - fd
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: butil::InjectionTracer::Duplicate
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - push_back
    - Action
    linkageType: ''
    returnType: bool
    signature: bool Duplicate(int* result, int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:54,1
    - Dst: Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - src
    - dest
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: butil::InjectionTracer::Move
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - push_back
    - Action
    linkageType: ''
    returnType: bool
    signature: bool Move(int src, int dest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:59,1
    - Dst: Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: butil::InjectionTracer::Close
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - push_back
    - Action
    linkageType: ''
    returnType: void
    signature: void Close(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: '& actions() const'
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<Action>
    signature: std::vector<Action> & actions() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:73,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:74,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 75
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - InjectionTracer::actions
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:80,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:82,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:83,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 84
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - InjectionTracer::actions
    - EXPECT_EQ
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Noop)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:89,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:91,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:92,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - InjectionTracer::actions
    - EXPECT_EQ
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, NoopAndClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:98,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:100,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:101,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:102,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:102,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 103
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:108,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:108,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:109,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:111,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:112,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:112,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:113,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:113,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:114,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:114,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 115
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:120,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:120,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:122,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:123,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:124,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:124,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:124,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:125,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:125,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 126
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:131,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:131,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:132,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:134,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:135,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:136,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:136,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:136,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:137,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:137,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:143,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:143,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:144,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:146,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:147,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:148,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:148,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:150,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:150,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:151,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:151,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:152,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:152,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 153
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Cycle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:158,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:158,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:159,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:161,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:162,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:163,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:163,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:164,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:165,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:165,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:166,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:166,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:167,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:167,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 168
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, CycleAndClose1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:173,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:173,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:174,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:174,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:176,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:177,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:177,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:178,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:178,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:180,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:180,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:180,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:181,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:181,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:181,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:182,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:182,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 183
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, CycleAndClose2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:188,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:188,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:189,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:189,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:191,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:192,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:193,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:193,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:194,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:195,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:195,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:195,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:196,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:196,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:197,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:197,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 198
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, CycleAndClose3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:203,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:203,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:204,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:206,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:207,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:208,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:208,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:209,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:209,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 210
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Fanout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:215,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:215,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:216,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:218,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:219,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:219,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:220,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:220,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:220,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:221,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:221,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:221,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:222,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:222,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 223
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, FanoutAndClose1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:228,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:228,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:229,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:229,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:231,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:232,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:233,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:233,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:233,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:234,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:234,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:234,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:235,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:235,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 236
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, FanoutAndClose2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:241,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:241,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:242,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:242,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:244,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:245,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:245,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:246,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:246,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:247,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:247,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:247,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:248,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:248,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 249
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, FanoutAndClose3)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - result
    - fd
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 255
    functionName: butil::FailingDelegate::Duplicate
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Duplicate(int* result, int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - src
    - dest
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 259
    functionName: butil::FailingDelegate::Move
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Move(int src, int dest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: butil::FailingDelegate::Close
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Close(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:268,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 269
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, EmptyWithFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:274,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:274,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:276,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 277
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, NoopWithFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:282,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:282,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:284,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 285
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    - EXPECT_FALSE
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple1WithFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - in_type
    - in_fd1
    argTypes:
    - Type
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: butil::Action
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Action(Type in_type, int in_fd1, int in_fd2 = -1)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Action
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: operator==(const Action& other) const
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const Action& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::InjectionTracer::InjectionTracer
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InjectionTracer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:49,1
    - Dst: Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - result
    - fd
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: butil::InjectionTracer::Duplicate
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - push_back
    - Action
    linkageType: ''
    returnType: bool
    signature: bool Duplicate(int* result, int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:54,1
    - Dst: Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - src
    - dest
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: butil::InjectionTracer::Move
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - push_back
    - Action
    linkageType: ''
    returnType: bool
    signature: bool Move(int src, int dest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:59,1
    - Dst: Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: butil::InjectionTracer::Close
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - push_back
    - Action
    linkageType: ''
    returnType: void
    signature: void Close(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: '& actions() const'
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<Action>
    signature: std::vector<Action> & actions() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:73,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:74,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 75
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - InjectionTracer::actions
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:80,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:80,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:82,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:82,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:83,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 84
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - InjectionTracer::actions
    - EXPECT_EQ
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Noop)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:89,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:89,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:91,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:91,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:92,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - InjectionTracer::actions
    - EXPECT_EQ
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, NoopAndClose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:98,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:98,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:100,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:101,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:101,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:102,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:102,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 103
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:108,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:108,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:109,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:109,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:111,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:112,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:112,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:113,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:113,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:113,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:114,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:114,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 115
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:120,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:120,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:122,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:123,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:123,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:124,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:124,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:124,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:125,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:125,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 126
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:131,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:131,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:132,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:132,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:134,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:135,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:135,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:136,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:136,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:136,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:137,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:137,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:143,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:143,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:144,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:144,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:146,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:147,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:148,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:148,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:150,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:150,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:150,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:151,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:151,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:151,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:152,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:152,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 153
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Cycle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:158,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:158,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:159,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:159,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:161,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:162,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:162,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:163,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:163,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:164,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:165,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:165,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:165,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:166,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:166,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:167,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:167,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 168
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, CycleAndClose1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:173,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:173,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:174,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:174,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:176,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:177,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:177,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:178,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:178,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:179,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:180,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:180,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:180,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:181,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:181,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:181,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:182,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:182,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 183
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, CycleAndClose2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:188,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:188,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:189,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:189,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:191,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:192,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:192,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:193,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:193,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:194,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:195,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:195,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:195,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:196,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:196,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:196,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:197,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:197,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 198
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, CycleAndClose3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:203,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:203,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:204,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:206,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:207,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:208,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:208,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:209,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:209,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 210
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Fanout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:215,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:215,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:216,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:216,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:218,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:219,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:219,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:220,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:220,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:220,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:221,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:221,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:221,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:222,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:222,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 223
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, FanoutAndClose1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:228,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:228,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:229,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:229,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:231,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:232,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:232,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:233,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:233,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:233,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:234,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:234,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:234,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:235,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:235,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 236
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, FanoutAndClose2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:241,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:241,1
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:242,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:242,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:244,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:245,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:245,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:246,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:246,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:246,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:247,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:247,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:247,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:248,1
    - Dst: InjectionTracer::actions
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:248,1
    - Dst: butil::Action
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 249
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - EXPECT_TRUE
    - ASSERT_EQ
    - butil::Action
    - InjectionTracer::actions
    - InjectiveMultimap::push_back
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, FanoutAndClose3)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - result
    - fd
    argTypes:
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 255
    functionName: butil::FailingDelegate::Duplicate
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Duplicate(int* result, int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - src
    - dest
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 259
    functionName: butil::FailingDelegate::Move
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Move(int src, int dest)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: butil::FailingDelegate::Close
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Close(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:268,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 269
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, EmptyWithFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:274,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:274,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:276,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 277
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, NoopWithFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InjectiveMultimap::push_back
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:282,1
    - Dst: butil::InjectionArc
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:282,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:284,1
    - Dst: butil::PerformInjectiveMultimap
      Src: /src/brpc/test/file_descriptor_shuffle_unittest.cc:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 285
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/file_descriptor_shuffle_unittest.cc
    functionUses: 0
    functionsReached:
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    - EXPECT_FALSE
    - butil::PerformInjectiveMultimap
    linkageType: ''
    returnType: void
    signature: void TEST(FileDescriptorShuffleTest, Simple1WithFailure)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: EmptyProcessHuluRequest
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EmptyProcessHuluRequest(brpc::InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:40,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:48,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:48,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached:
    - RegisterProtocol
    - EXPECT_EQ
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: MessengerTest::MessengerTest
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MessengerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~MessengerTest()
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MessengerTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 77
    functionName: fmix32
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t fmix32 ( uint32_t h )
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: ClientMeta
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ClientMeta
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:94,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:96,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:102,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:104,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:108,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:115,1
    - Dst: write
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:123,1
    - Dst: writev
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:130,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:134,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 147
    functionName: client_thread
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached:
    - writev
    - fetch_add
    - snprintf
    - malloc
    - memcpy
    - PLOG
    - write
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:164,1
    - Dst: butil::unix_socket_listen
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:165,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:167,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:167,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:169,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:171,1
    - Dst: AddHandler
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:172,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:172,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:179,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:179,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:185,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:186,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:192,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:193,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:195,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:197,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:207,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:207,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:209,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:213,1
    - Dst: printf
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:214,1
    - Dst: StopAccept
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:217,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:220,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 221
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - AddHandler
    - pthread_create
    - printf
    - sleep
    - StopAccept
    - StartAccept
    - butil::Timer::start
    - LOG
    - butil::Timer::Timer
    - butil::unix_socket_listen
    - butil::Timer::u_elapsed
    - butil::EndPoint
    - snprintf
    - tcp_listen
    - ProfilerStart
    - ProfilerStop
    - ASSERT_TRUE
    - butil::Timer::stop
    - ClientMeta::ClientMeta
    - pthread_join
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void TEST_F(MessengerTest, dispatch_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:34,1
    - Dst: ::GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:35,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:48,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:48,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:50,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:51,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: EchoServerImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse*::set_message
    - brpc::Controller*::request_protocol
    - ::test::EchoRequest*::message
    - LOG
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* controller,\n                        const
      ::test::EchoRequest* request,\n                        test::EchoResponse* response,\n
      \                       google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ALPNTest::ALPNTest
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ALPNTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: ~ALPNTest()
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ALPNTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:62,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:68,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:70,1
    - Dst: Start
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:70,1
    - Dst: data
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: ALPNTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ServerOptions::ServerOptions
    - AddService
    - data
    - Start
    - EXPECT_EQ
    - brpc::ServerOptions::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:74,1
    - Dst: Join
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: ALPNTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:80,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:81,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:82,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:86,1
    - Dst: brpc::ALPNProtocolToString
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:86,1
    - Dst: brpc::AdaptiveProtocolType::AdaptiveProtocolType
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:86,1
    - Dst: SSL_CTX_set_alpn_protos
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:89,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:89,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:89,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:92,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:93,1
    - Dst: data
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:93,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:95,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:97,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:100,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:102,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:102,1
    - Dst: SSL_get0_alpn_selected
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:107,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:108,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - alpns
    argTypes:
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 109
    functionName: ALPNTest::HandshakeWithServer
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SSL_do_handshake
    - butil::tcp_connect
    - butil::EndPoint::EndPoint
    - brpc::ALPNProtocolToString
    - std::string
    - std::string::data
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - std::string::append
    - reinterpret_cast<const unsigned char*>
    - EXPECT_EQ
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - brpc::CreateClientSSLContext
    - reinterpret_cast<const char*>
    - SSL_CTX_set_alpn_protos
    - butil::str2endpoint
    - brpc::CreateSSLSession
    - EXPECT_NE
    - data
    - SSL_get0_alpn_selected
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: std::string HandshakeWithServer(std::vector<std::string> alpns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:122,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:123,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:124,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 2
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ALPNTest::HandshakeWithServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ALPNTest, Server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:48,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:48,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:50,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:51,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: EchoServerImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse*::set_message
    - brpc::Controller*::request_protocol
    - ::test::EchoRequest*::message
    - LOG
    - static_cast<brpc::Controller*>
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* controller,\n                        const
      ::test::EchoRequest* request,\n                        test::EchoResponse* response,\n
      \                       google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ALPNTest::ALPNTest
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ALPNTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: ~ALPNTest()
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ALPNTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:62,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:63,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:68,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:70,1
    - Dst: Start
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:70,1
    - Dst: data
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: ALPNTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ServerOptions::ServerOptions
    - AddService
    - data
    - Start
    - EXPECT_EQ
    - brpc::ServerOptions::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:74,1
    - Dst: Join
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: ALPNTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:80,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:81,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:82,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:86,1
    - Dst: brpc::ALPNProtocolToString
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:86,1
    - Dst: brpc::AdaptiveProtocolType::AdaptiveProtocolType
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:86,1
    - Dst: SSL_CTX_set_alpn_protos
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:89,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:89,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:89,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:92,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:93,1
    - Dst: data
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:93,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:95,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:97,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:100,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:102,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:102,1
    - Dst: SSL_get0_alpn_selected
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:107,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:108,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - alpns
    argTypes:
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 109
    functionName: ALPNTest::HandshakeWithServer
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - SSL_do_handshake
    - butil::tcp_connect
    - butil::EndPoint::EndPoint
    - brpc::ALPNProtocolToString
    - std::string
    - std::string::data
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - std::string::append
    - reinterpret_cast<const unsigned char*>
    - EXPECT_EQ
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - brpc::CreateClientSSLContext
    - reinterpret_cast<const char*>
    - SSL_CTX_set_alpn_protos
    - butil::str2endpoint
    - brpc::CreateSSLSession
    - EXPECT_NE
    - data
    - SSL_get0_alpn_selected
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: std::string HandshakeWithServer(std::vector<std::string> alpns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:122,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:123,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:124,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 2
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ALPNTest::HandshakeWithServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(ALPNTest, Server)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - Type
    - ','
    - value1
    - ','
    - value2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 21
    functionName: INSERT_PAIR_TEST
    functionSourceFile: /src/brpc/test/hash_tables_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: INSERT_PAIR_TEST(Type, value1, value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:29,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:30,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:31,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:32,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:32,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:38,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:39,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:40,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:41,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:41,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:47,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:48,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:49,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:50,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 51
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/hash_tables_unittest.cc
    functionUses: 0
    functionsReached:
    - INSERT_PAIR_TEST
    - GG_INT64_C
    linkageType: ''
    returnType: void
    signature: void TEST_F(HashPairTest, IntegerPairs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - Type
    - ','
    - value1
    - ','
    - value2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 21
    functionName: INSERT_PAIR_TEST
    functionSourceFile: /src/brpc/test/hash_tables_unittest.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: INSERT_PAIR_TEST(Type, value1, value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:29,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:30,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:31,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:32,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:32,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:38,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:39,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:40,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:41,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:41,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:47,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:48,1
    - Dst: INSERT_PAIR_TEST
      Src: /src/brpc/test/hash_tables_unittest.cc:49,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:50,1
    - Dst: GG_INT64_C
      Src: /src/brpc/test/hash_tables_unittest.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 51
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/hash_tables_unittest.cc
    functionUses: 0
    functionsReached:
    - INSERT_PAIR_TEST
    - GG_INT64_C
    linkageType: ''
    returnType: void
    signature: void TEST_F(HashPairTest, IntegerPairs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: std::lock_guard<DummyMutex>::lock_guard
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock_guard(DummyMutex&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: std::unique_lock<DummyMutex>::unique_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: std::unique_lock<DummyMutex>::unique_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(DummyMutex&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: std::unique_lock<DummyMutex>::unique_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(DummyMutex&, T)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: std::unique_lock<DummyMutex>::try_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: std::unique_lock<DummyMutex>::lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: std::unique_lock<DummyMutex>::unlock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: std::lock_guard<DummyMutex>::lock_guard
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock_guard(DummyMutex&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: std::unique_lock<DummyMutex>::unique_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: std::unique_lock<DummyMutex>::unique_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(DummyMutex&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: std::unique_lock<DummyMutex>::unique_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(DummyMutex&, T)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: std::unique_lock<DummyMutex>::try_lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: std::unique_lock<DummyMutex>::lock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: std::unique_lock<DummyMutex>::unlock
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:68,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:69,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:72,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:74,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:75,1
    - Dst: std::condition_variable::wait_for
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:77,1
    - Dst: butil::timespec_to_milliseconds
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:79,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 80
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::condition_variable::wait_for
    - butil::timespec_to_milliseconds
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::lock
    - IntRecorder::get_value
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, MutexWithRecorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:88,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:88,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:91,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:93,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:94,1
    - Dst: std::condition_variable::wait_for
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:96,1
    - Dst: butil::timespec_to_milliseconds
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:98,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::condition_variable::wait_for
    - butil::timespec_to_milliseconds
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::lock
    - std::unique_lock::unlock
    - LOG
    - LatencyRecorder::count
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, MutexWithLatencyRecorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:108,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:111,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:111,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:114,1
    - Dst: pthread_cond_init
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:114,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:115,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:116,1
    - Dst: MutexWithLatencyRecorder::mutex
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:117,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:119,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 120
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_cond_destroy
    - pthread_cond_init
    - BAIDU_SCOPED_LOCK
    - MutexWithLatencyRecorder::mutex
    - pthread_cond_timedwait
    - LatencyRecorder::count
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, pthread_mutex_and_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 134
    functionName: signal_lock_thread
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep
    linkageType: ''
    returnType: void
    signature: void *signal_lock_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:141,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:141,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:144,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:148,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:148,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:148,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:152,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:152,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:155,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:159,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:159,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:159,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 160
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - LatencyRecorder::count
    - pthread_join
    - pthread_create
    - IntRecorder::get_value
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, signal_lock_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::double_lock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:174,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 178
    functionName: double_lock_thread
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::double_lock
    - usleep
    linkageType: ''
    returnType: void
    signature: void *double_lock_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoubleLockArg::m0::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:186,1
    - Dst: DoubleLockArg::m1::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:187,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:190,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:190,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:193,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:196,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:197,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:199,1
    - Dst: IntRecorder::reset
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:200,1
    - Dst: LatencyRecorder::_latency::reset
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:201,1
    - Dst: DoubleLockArg::m0::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:203,1
    - Dst: DoubleLockArg::m1::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:206,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:206,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:209,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:212,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:212,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:215,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - DoubleLockArg::m1::set_recorder
    - ARRAY_SIZE
    - ASSERT_EQ
    - IntRecorder::reset
    - pthread_join
    - pthread_create
    - DoubleLockArg::m0::set_recorder
    - IntRecorder::get_value
    - LatencyRecorder::_latency::reset
    - LOG
    - LatencyRecorder::count
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, double_lock_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:224,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:225,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:227,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:229,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:231,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:232,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:236,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:237,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:239,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:241,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:243,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:244,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:246,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:247,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:249,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:251,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:253,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:254,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - BAIDU_SCOPED_LOCK
    - ProfilerStart
    - LOG
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, overhead)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:68,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:69,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:72,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:74,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:75,1
    - Dst: std::condition_variable::wait_for
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:77,1
    - Dst: butil::timespec_to_milliseconds
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:79,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 80
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::condition_variable::wait_for
    - butil::timespec_to_milliseconds
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::lock
    - IntRecorder::get_value
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, MutexWithRecorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:88,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:88,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:91,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:93,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:94,1
    - Dst: std::condition_variable::wait_for
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:96,1
    - Dst: butil::timespec_to_milliseconds
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:98,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::condition_variable::wait_for
    - butil::timespec_to_milliseconds
    - BAIDU_SCOPED_LOCK
    - std::unique_lock::lock
    - std::unique_lock::unlock
    - LOG
    - LatencyRecorder::count
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, MutexWithLatencyRecorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:108,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:111,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:111,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:114,1
    - Dst: pthread_cond_init
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:114,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:115,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:116,1
    - Dst: MutexWithLatencyRecorder::mutex
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:117,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:119,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 120
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_cond_destroy
    - pthread_cond_init
    - BAIDU_SCOPED_LOCK
    - MutexWithLatencyRecorder::mutex
    - pthread_cond_timedwait
    - LatencyRecorder::count
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, pthread_mutex_and_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 134
    functionName: signal_lock_thread
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep
    linkageType: ''
    returnType: void
    signature: void *signal_lock_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:141,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:141,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:144,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:148,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:148,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:148,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:152,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:152,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:155,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:159,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:159,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:159,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 160
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - ASSERT_EQ
    - LatencyRecorder::count
    - pthread_join
    - pthread_create
    - IntRecorder::get_value
    - LOG
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, signal_lock_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::double_lock
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:174,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 178
    functionName: double_lock_thread
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::double_lock
    - usleep
    linkageType: ''
    returnType: void
    signature: void *double_lock_thread(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoubleLockArg::m0::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:186,1
    - Dst: DoubleLockArg::m1::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:187,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:190,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:190,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:193,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:196,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:197,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:199,1
    - Dst: IntRecorder::reset
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:200,1
    - Dst: LatencyRecorder::_latency::reset
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:201,1
    - Dst: DoubleLockArg::m0::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:203,1
    - Dst: DoubleLockArg::m1::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:206,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:206,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:209,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:212,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:212,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:215,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - DoubleLockArg::m1::set_recorder
    - ARRAY_SIZE
    - ASSERT_EQ
    - IntRecorder::reset
    - pthread_join
    - pthread_create
    - DoubleLockArg::m0::set_recorder
    - IntRecorder::get_value
    - LatencyRecorder::_latency::reset
    - LOG
    - LatencyRecorder::count
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, double_lock_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:224,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:225,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:227,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:229,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:231,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:232,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:236,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:237,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:239,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:241,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:243,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:244,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:246,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:247,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:249,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:251,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:253,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:254,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 255
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - BAIDU_SCOPED_LOCK
    - ProfilerStart
    - LOG
    - ProfilerStop
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: void TEST_F(LockTimerTest, overhead)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - buffer
    - n
    argTypes:
    - unsigned char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 32
    functionName: Fill
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Fill(unsigned char* buffer, int n)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - buffer
    - n
    argTypes:
    - unsigned char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 43
    functionName: Valid
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 47
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Valid(unsigned char* buffer, int n)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - buffer
    - n
    argTypes:
    - unsigned char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: ALLOW_UNUSED::IsZeroed
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ALLOW_UNUSED IsZeroed(unsigned char* buffer, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:57,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/allocator_unittest.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p
    - align
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: CheckAlignment
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void CheckAlignment(void* p, int align)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/test/allocator_unittest.cc:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts:
    - condition: (size == power)
      pos:
        line_end: 77
        line_start: 77
        source_file: /src/brpc/test/allocator_unittest.cc
    constantsTouched: []
    func_position:
      end: 83
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 83
    functionName: NextSize
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: int
    signature: int NextSize(int size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/allocator_unittest.cc:100,1
    - Dst: memset
      Src: /src/brpc/test/allocator_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:107,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:112,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:117,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:122,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:127,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:132,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:137,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:142,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:147,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 151
    functionName: TestAtomicIncrement
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    - memset
    linkageType: ''
    returnType: void
    signature: void TestAtomicIncrement()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - T
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 155
    functionName: NUM_BITS
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NUM_BITS(T)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:162,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/allocator_unittest.cc:166,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/allocator_unittest.cc:167,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:171,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 177
    functionName: TestCompareAndSwap
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_CompareAndSwap
    - static_cast<uint64_t>
    - NUM_BITS
    linkageType: ''
    returnType: void
    signature: void TestCompareAndSwap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:185,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/allocator_unittest.cc:189,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/allocator_unittest.cc:190,1
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:194,1
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 200
    functionName: TestAtomicExchange
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - static_cast<uint64_t>
    - NUM_BITS
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void TestAtomicExchange()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/allocator_unittest.cc:207,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/allocator_unittest.cc:207,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:211,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 215
    functionName: TestAtomicIncrementBounds
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<uint64_t>
    - NUM_BITS
    linkageType: ''
    returnType: void
    signature: void TestAtomicIncrementBounds()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:221,1
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:222,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/test/allocator_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:227,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/test/allocator_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:229,1
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/test/allocator_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:232,1
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/test/allocator_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:234,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/test/allocator_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:237,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/test/allocator_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 240
    functionName: TestStore
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::subtle::Release_Store
    - butil::subtle::NoBarrier_Store
    - EXPECT_EQ
    - butil::subtle::Acquire_Store
    - static_cast<AtomicType>
    linkageType: ''
    returnType: void
    signature: void TestStore()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:246,1
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:252,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/test/allocator_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:254,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/test/allocator_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:257,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/test/allocator_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:259,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/test/allocator_unittest.cc:259,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:262,1
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/test/allocator_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:264,1
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/test/allocator_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 265
    functionName: TestLoad
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - butil::subtle::Release_Load
    - butil::subtle::Acquire_Load
    - butil::subtle::NoBarrier_Load
    - EXPECT_EQ
    - static_cast<AtomicType>
    linkageType: ''
    returnType: void
    signature: void TestLoad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:269,1
    - Dst: TestAtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:270,1
    - Dst: TestAtomicIncrementBounds
      Src: /src/brpc/test/allocator_unittest.cc:271,1
    - Dst: TestStore
      Src: /src/brpc/test/allocator_unittest.cc:272,1
    - Dst: TestLoad
      Src: /src/brpc/test/allocator_unittest.cc:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 274
    functionName: TestAtomicOps
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - TestAtomicIncrementBounds
    - TestAtomicExchange
    - TestLoad
    - TestStore
    - TestCompareAndSwap
    linkageType: ''
    returnType: void
    signature: void TestAtomicOps()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/allocator_unittest.cc:277,1
    - Dst: calloc
      Src: /src/brpc/test/allocator_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:279,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/allocator_unittest.cc:281,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/allocator_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:284,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - n
    - s
    - ok
    argTypes:
    - size_t
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 288
    functionName: TestCalloc
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - free
    - reinterpret_cast<char*>
    - calloc
    - EXPECT_NE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TestCalloc(size_t n, size_t s, bool ok)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::bad_alloc
      Src: /src/brpc/test/allocator_unittest.cc:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 296
    functionName: TestNewHandler
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - std::bad_alloc
    linkageType: ''
    returnType: void
    signature: void TestNewHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/allocator_unittest.cc:304,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/allocator_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:313,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/allocator_unittest.cc:314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:316,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - (*func)(size_t)
    - should_throw
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 318
    functionName: TestOneNewWithoutExceptions
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - EXPECT_TRUE
    - EXPECT_NE
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: "void TestOneNewWithoutExceptions(void* (*func)(size_t),\n                                        bool
      should_throw)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set_new_handler
      Src: /src/brpc/test/allocator_unittest.cc:324,1
    - Dst: TestOneNewWithoutExceptions
      Src: /src/brpc/test/allocator_unittest.cc:325,1
    - Dst: std::set_new_handler
      Src: /src/brpc/test/allocator_unittest.cc:328,1
    - Dst: TestOneNewWithoutExceptions
      Src: /src/brpc/test/allocator_unittest.cc:329,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:330,1
    - Dst: std::set_new_handler
      Src: /src/brpc/test/allocator_unittest.cc:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - (*func)(size_t)
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 332
    functionName: TestNothrowNew
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::set_new_handler
    - TestOneNewWithoutExceptions
    linkageType: ''
    returnType: void
    signature: void TestNothrowNew(void* (*func)(size_t))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - buffer
    - n
    argTypes:
    - unsigned char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 32
    functionName: Fill
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Fill(unsigned char* buffer, int n)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - buffer
    - n
    argTypes:
    - unsigned char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 43
    functionName: Valid
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 47
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Valid(unsigned char* buffer, int n)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - buffer
    - n
    argTypes:
    - unsigned char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: ALLOW_UNUSED::IsZeroed
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ALLOW_UNUSED IsZeroed(unsigned char* buffer, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:57,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/allocator_unittest.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p
    - align
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: CheckAlignment
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void CheckAlignment(void* p, int align)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/test/allocator_unittest.cc:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts:
    - condition: (size == power)
      pos:
        line_end: 77
        line_start: 77
        source_file: /src/brpc/test/allocator_unittest.cc
    constantsTouched: []
    func_position:
      end: 83
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 83
    functionName: NextSize
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: int
    signature: int NextSize(int size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/allocator_unittest.cc:100,1
    - Dst: memset
      Src: /src/brpc/test/allocator_unittest.cc:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:107,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:109,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:110,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:112,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:114,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:115,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:117,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:120,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:122,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:122,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:123,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:125,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:127,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:128,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:132,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:133,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:134,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:137,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:139,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:142,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:142,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:143,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:144,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:147,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:148,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 151
    functionName: TestAtomicIncrement
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    - memset
    linkageType: ''
    returnType: void
    signature: void TestAtomicIncrement()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - T
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 155
    functionName: NUM_BITS
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NUM_BITS(T)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:162,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/allocator_unittest.cc:166,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/allocator_unittest.cc:167,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:171,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 177
    functionName: TestCompareAndSwap
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_CompareAndSwap
    - static_cast<uint64_t>
    - NUM_BITS
    linkageType: ''
    returnType: void
    signature: void TestCompareAndSwap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:183,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:185,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/allocator_unittest.cc:189,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/allocator_unittest.cc:190,1
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:192,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:193,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:194,1
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:197,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:198,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 200
    functionName: TestAtomicExchange
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - static_cast<uint64_t>
    - NUM_BITS
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void TestAtomicExchange()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/allocator_unittest.cc:207,1
    - Dst: NUM_BITS
      Src: /src/brpc/test/allocator_unittest.cc:207,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:210,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:211,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:213,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 215
    functionName: TestAtomicIncrementBounds
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<uint64_t>
    - NUM_BITS
    linkageType: ''
    returnType: void
    signature: void TestAtomicIncrementBounds()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:221,1
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:222,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/test/allocator_unittest.cc:226,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:227,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/test/allocator_unittest.cc:228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:229,1
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/test/allocator_unittest.cc:231,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:232,1
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/test/allocator_unittest.cc:233,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:234,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/test/allocator_unittest.cc:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:237,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/test/allocator_unittest.cc:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 240
    functionName: TestStore
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::subtle::Release_Store
    - butil::subtle::NoBarrier_Store
    - EXPECT_EQ
    - butil::subtle::Acquire_Store
    - static_cast<AtomicType>
    linkageType: ''
    returnType: void
    signature: void TestStore()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:246,1
    - Dst: static_cast<AtomicType>
      Src: /src/brpc/test/allocator_unittest.cc:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:252,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/test/allocator_unittest.cc:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:254,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/test/allocator_unittest.cc:254,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:257,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/test/allocator_unittest.cc:257,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:259,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/test/allocator_unittest.cc:259,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:262,1
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/test/allocator_unittest.cc:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:264,1
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/test/allocator_unittest.cc:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 265
    functionName: TestLoad
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - butil::subtle::Release_Load
    - butil::subtle::Acquire_Load
    - butil::subtle::NoBarrier_Load
    - EXPECT_EQ
    - static_cast<AtomicType>
    linkageType: ''
    returnType: void
    signature: void TestLoad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCompareAndSwap
      Src: /src/brpc/test/allocator_unittest.cc:269,1
    - Dst: TestAtomicExchange
      Src: /src/brpc/test/allocator_unittest.cc:270,1
    - Dst: TestAtomicIncrementBounds
      Src: /src/brpc/test/allocator_unittest.cc:271,1
    - Dst: TestStore
      Src: /src/brpc/test/allocator_unittest.cc:272,1
    - Dst: TestLoad
      Src: /src/brpc/test/allocator_unittest.cc:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 274
    functionName: TestAtomicOps
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - TestAtomicIncrementBounds
    - TestAtomicExchange
    - TestLoad
    - TestStore
    - TestCompareAndSwap
    linkageType: ''
    returnType: void
    signature: void TestAtomicOps()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/allocator_unittest.cc:277,1
    - Dst: calloc
      Src: /src/brpc/test/allocator_unittest.cc:277,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:279,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/allocator_unittest.cc:281,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/allocator_unittest.cc:281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:284,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - n
    - s
    - ok
    argTypes:
    - size_t
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 288
    functionName: TestCalloc
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - free
    - reinterpret_cast<char*>
    - calloc
    - EXPECT_NE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TestCalloc(size_t n, size_t s, bool ok)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::bad_alloc
      Src: /src/brpc/test/allocator_unittest.cc:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 296
    functionName: TestNewHandler
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - std::bad_alloc
    linkageType: ''
    returnType: void
    signature: void TestNewHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/allocator_unittest.cc:304,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/test/allocator_unittest.cc:304,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:313,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/allocator_unittest.cc:314,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:316,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - (*func)(size_t)
    - should_throw
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 318
    functionName: TestOneNewWithoutExceptions
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 1
    functionsReached:
    - reinterpret_cast<void*>
    - EXPECT_TRUE
    - EXPECT_NE
    - EXPECT_FALSE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: "void TestOneNewWithoutExceptions(void* (*func)(size_t),\n                                        bool
      should_throw)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::set_new_handler
      Src: /src/brpc/test/allocator_unittest.cc:324,1
    - Dst: TestOneNewWithoutExceptions
      Src: /src/brpc/test/allocator_unittest.cc:325,1
    - Dst: std::set_new_handler
      Src: /src/brpc/test/allocator_unittest.cc:328,1
    - Dst: TestOneNewWithoutExceptions
      Src: /src/brpc/test/allocator_unittest.cc:329,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:330,1
    - Dst: std::set_new_handler
      Src: /src/brpc/test/allocator_unittest.cc:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - (*func)(size_t)
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 332
    functionName: TestNothrowNew
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::set_new_handler
    - TestOneNewWithoutExceptions
    linkageType: ''
    returnType: void
    signature: void TestNothrowNew(void* (*func)(size_t))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 340
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - TestAtomicIncrement
    linkageType: ''
    returnType: void
    signature: void TEST(Atomics, AtomicIncrementWord)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 344
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - TestAtomicIncrement
    linkageType: ''
    returnType: void
    signature: void TEST(Atomics, AtomicIncrement32)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 348
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - TestAtomicIncrement
    linkageType: ''
    returnType: void
    signature: void TEST(Atomics, AtomicOpsWord)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestAtomicIncrement
      Src: /src/brpc/test/allocator_unittest.cc:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 352
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - TestAtomicIncrement
    linkageType: ''
    returnType: void
    signature: void TEST(Atomics, AtomicOps32)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:357,1
    - Dst: malloc
      Src: /src/brpc/test/allocator_unittest.cc:357,1
    - Dst: CheckAlignment
      Src: /src/brpc/test/allocator_unittest.cc:358,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:359,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:360,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:360,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:361,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 363
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - free
    - CheckAlignment
    - reinterpret_cast<unsigned char*>
    - Valid
    - malloc
    - Fill
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, Malloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:366,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:367,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:368,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:369,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:370,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:371,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:372,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:373,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:374,1
    - Dst: TestCalloc
      Src: /src/brpc/test/allocator_unittest.cc:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 365
    functionDepth: 1
    functionLinenumber: 365
    functionLinenumberEnd: 385
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - TestCalloc
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, Calloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestNothrowNew
      Src: /src/brpc/test/allocator_unittest.cc:388,1
    - Dst: TestNothrowNew
      Src: /src/brpc/test/allocator_unittest.cc:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 387
    functionDepth: 2
    functionLinenumber: 387
    functionLinenumberEnd: 390
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - TestNothrowNew
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, New)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/allocator_unittest.cc:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:400,1
    - Dst: realloc
      Src: /src/brpc/test/allocator_unittest.cc:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:404,1
    - Dst: realloc
      Src: /src/brpc/test/allocator_unittest.cc:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:409,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 413
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - free
    - realloc
    - malloc
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, Realloc1)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NextSize
      Src: /src/brpc/test/allocator_unittest.cc:416,1
    - Dst: NextSize
      Src: /src/brpc/test/allocator_unittest.cc:417,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:418,1
    - Dst: malloc
      Src: /src/brpc/test/allocator_unittest.cc:418,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:419,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:421,1
    - Dst: realloc
      Src: /src/brpc/test/allocator_unittest.cc:421,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:422,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:422,1
    - Dst: min
      Src: /src/brpc/test/allocator_unittest.cc:422,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:423,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:424,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:424,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:425,1
    - Dst: reinterpret_cast<int**>
      Src: /src/brpc/test/allocator_unittest.cc:433,1
    - Dst: malloc
      Src: /src/brpc/test/allocator_unittest.cc:433,1
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/allocator_unittest.cc:437,1
    - Dst: malloc
      Src: /src/brpc/test/allocator_unittest.cc:437,1
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/test/allocator_unittest.cc:441,1
    - Dst: realloc
      Src: /src/brpc/test/allocator_unittest.cc:441,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:445,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/allocator_unittest.cc:447,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:448,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 449
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - reinterpret_cast<int*>
    - free
    - reinterpret_cast<int**>
    - reinterpret_cast<unsigned char*>
    - realloc
    - NextSize
    - Valid
    - malloc
    - Fill
    - min
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, Realloc2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NextSize
      Src: /src/brpc/test/allocator_unittest.cc:453,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/allocator_unittest.cc:454,1
    - Dst: malloc
      Src: /src/brpc/test/allocator_unittest.cc:454,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/allocator_unittest.cc:455,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/allocator_unittest.cc:455,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/test/allocator_unittest.cc:456,1
    - Dst: realloc
      Src: /src/brpc/test/allocator_unittest.cc:456,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/allocator_unittest.cc:457,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/allocator_unittest.cc:457,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:459,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 461
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - free
    - static_cast<char*>
    - reinterpret_cast<char*>
    - realloc
    - EXPECT_NE
    - malloc
    - NextSize
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, ReallocZero)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NextSize
      Src: /src/brpc/test/allocator_unittest.cc:466,1
    - Dst: NextSize
      Src: /src/brpc/test/allocator_unittest.cc:467,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:469,1
    - Dst: _recalloc
      Src: /src/brpc/test/allocator_unittest.cc:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:470,1
    - Dst: IsZeroed
      Src: /src/brpc/test/allocator_unittest.cc:470,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:471,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:473,1
    - Dst: _recalloc
      Src: /src/brpc/test/allocator_unittest.cc:473,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:474,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:474,1
    - Dst: min
      Src: /src/brpc/test/allocator_unittest.cc:474,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:475,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:476,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:476,1
    - Dst: free
      Src: /src/brpc/test/allocator_unittest.cc:478,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 465
    functionDepth: 1
    functionLinenumber: 465
    functionLinenumberEnd: 481
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - free
    - reinterpret_cast<unsigned char*>
    - Valid
    - NextSize
    - min
    - Fill
    - IsZeroed
    - _recalloc
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, Recalloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NextSize
      Src: /src/brpc/test/allocator_unittest.cc:487,1
    - Dst: ARRAYSIZE
      Src: /src/brpc/test/allocator_unittest.cc:488,1
    - Dst: static_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:489,1
    - Dst: _aligned_malloc
      Src: /src/brpc/test/allocator_unittest.cc:490,1
    - Dst: CheckAlignment
      Src: /src/brpc/test/allocator_unittest.cc:491,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:492,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:493,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:493,1
    - Dst: static_cast<unsigned char*>
      Src: /src/brpc/test/allocator_unittest.cc:501,1
    - Dst: _aligned_malloc
      Src: /src/brpc/test/allocator_unittest.cc:502,1
    - Dst: CheckAlignment
      Src: /src/brpc/test/allocator_unittest.cc:503,1
    - Dst: Fill
      Src: /src/brpc/test/allocator_unittest.cc:504,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/allocator_unittest.cc:505,1
    - Dst: Valid
      Src: /src/brpc/test/allocator_unittest.cc:505,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/allocator_unittest.cc:508,1
    - Dst: _aligned_free
      Src: /src/brpc/test/allocator_unittest.cc:509,1
    - Dst: _aligned_free
      Src: /src/brpc/test/allocator_unittest.cc:510,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 513
    functionName: TEST
    functionSourceFile: /src/brpc/test/allocator_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_TRUE
    - CheckAlignment
    - Valid
    - _aligned_free
    - static_cast<unsigned char*>
    - _aligned_malloc
    - NextSize
    - ARRAYSIZE
    - Fill
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST(Allocators, AlignedMalloc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: YellObj
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:45,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: check_global_variable
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void check_global_variable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: BaiduThreadLocalTest::BaiduThreadLocalTest
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_atexit
    linkageType: ''
    returnType: void
    signature: void BaiduThreadLocalTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: ~BaiduThreadLocalTest()
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BaiduThreadLocalTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:71,1
    - Dst: printf
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 74
    functionName: foo
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 6
    functionsReached:
    - printf
    - usleep
    linkageType: ''
    returnType: void
    signature: void * foo(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:78,1
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:79,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:80,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, thread_local_keyword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:89,1
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 93
    functionName: yell
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::get_thread_local<YellObj>
    linkageType: ''
    returnType: void
    signature: void * yell(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:98,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:102,1
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:106,1
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:106,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 110
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::get_thread_local<YellObj>
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, get_thread_local)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 120
    functionName: delete_dummy
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: void delete_dummy(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:125,1
    - Dst: int::int
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:126,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 129
    functionName: proc_dummy
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::thread_atexit
    - int::int
    linkageType: ''
    returnType: void
    signature: void * proc_dummy(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:133,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:134,1
    - Dst: proc_dummy
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:144,1
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:147,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 131
    functionDepth: 2
    functionLinenumber: 131
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::thread_atexit
    - pthread_join
    - pthread_create
    - proc_dummy
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::ostringstream
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 159
    functionName: get_oss
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::ostringstream
    linkageType: ''
    returnType: std::ostringstream
    signature: std::ostringstream & get_oss()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: fun1
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: fun2
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: fun3
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun3(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: fun4
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun4(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:180,1
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts:
    - condition: (get_oss().str() == "fun4(0)\nfun3(2)\nfun2\n")
      pos:
        line_end: 179
        line_start: 179
        source_file: /src/brpc/test/baidu_thread_local_unittest.cpp
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: check_result
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    - assert
    linkageType: ''
    returnType: void
    signature: void check_result()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:184,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:187,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:189,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:190,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:191,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:192,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:193,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:194,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:195,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:195,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:197,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:198,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:199,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:200,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_atexit_cancel
    - ASSERT_EQ
    - butil::thread_atexit
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, call_order_and_cancel)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: YellObj
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:45,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:46,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:47,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: check_global_variable
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void check_global_variable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: BaiduThreadLocalTest::BaiduThreadLocalTest
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_atexit
    linkageType: ''
    returnType: void
    signature: void BaiduThreadLocalTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: ~BaiduThreadLocalTest()
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BaiduThreadLocalTest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:71,1
    - Dst: printf
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 74
    functionName: foo
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 6
    functionsReached:
    - printf
    - usleep
    linkageType: ''
    returnType: void
    signature: void * foo(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:78,1
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:79,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:80,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, thread_local_keyword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:85,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:89,1
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:90,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 93
    functionName: yell
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - EXPECT_EQ
    - butil::get_thread_local<YellObj>
    linkageType: ''
    returnType: void
    signature: void * yell(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:98,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:102,1
    - Dst: butil::get_thread_local<YellObj>
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:106,1
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:106,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:108,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 110
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - pthread_join
    - pthread_create
    - butil::get_thread_local<YellObj>
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, get_thread_local)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 120
    functionName: delete_dummy
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: void delete_dummy(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:125,1
    - Dst: int::int
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:126,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 129
    functionName: proc_dummy
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 1
    functionsReached:
    - EXPECT_TRUE
    - butil::thread_atexit
    - int::int
    linkageType: ''
    returnType: void
    signature: void * proc_dummy(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:133,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:134,1
    - Dst: proc_dummy
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:144,1
    - Dst: pthread_create
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:147,1
    - Dst: pthread_join
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 131
    functionDepth: 2
    functionLinenumber: 131
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::thread_atexit
    - pthread_join
    - pthread_create
    - proc_dummy
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::ostringstream
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 159
    functionName: get_oss
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 5
    functionsReached:
    - std::ostringstream::ostringstream
    linkageType: ''
    returnType: std::ostringstream
    signature: std::ostringstream & get_oss()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: fun1
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: fun2
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: fun3
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun3(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: fun4
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    linkageType: ''
    returnType: void
    signature: void fun4(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:180,1
    - Dst: get_oss
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts:
    - condition: (get_oss().str() == "fun4(0)\nfun3(2)\nfun2\n")
      pos:
        line_end: 179
        line_start: 179
        source_file: /src/brpc/test/baidu_thread_local_unittest.cpp
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: check_result
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_oss
    - assert
    linkageType: ''
    returnType: void
    signature: void check_result()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:184,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:187,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:189,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:190,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:191,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:192,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:193,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:194,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:195,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:195,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:197,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:198,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:199,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:200,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/test/baidu_thread_local_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/baidu_thread_local_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_atexit_cancel
    - ASSERT_EQ
    - butil::thread_atexit
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduThreadLocalTest, call_order_and_cancel)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:33,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:35,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:36,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:38,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:41,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/fuzzing/fuzz_redis.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 47
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_redis.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply::ConsumePartialIOBuf
    - brpc::RedisCommandParser::Consume
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::Arena::Arena
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_hpack.cpp:33,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/fuzzing/fuzz_hpack.cpp:37,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_hpack.cpp:38,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/fuzzing/fuzz_hpack.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 43
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HPacker::Decode
    - brpc::HPacker::Init
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/fuzzing/fuzz_json.cpp:34,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 37
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_json.cpp
    functionUses: 0
    functionsReached:
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/fuzzing/fuzz_uri.cpp:31,1
    - Dst: memcpy
      Src: /src/brpc/test/fuzzing/fuzz_uri.cpp:32,1
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/fuzzing/fuzz_uri.cpp:38,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/fuzzing/fuzz_uri.cpp:39,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/fuzzing/fuzz_uri.cpp:48,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 52
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_uri.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParseRtmpURL
    - brpc::URI::SetHttpURL
    - malloc
    - brpc::URI::URI
    - memcpy
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_http.cpp:34,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_http.cpp:35,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/fuzzing/fuzz_http.cpp:36,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/fuzzing/fuzz_http.cpp:37,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/fuzzing/fuzz_http.cpp:40,1
    - Dst: brpc::HttpMessage::ParseFromArray
      Src: /src/brpc/test/fuzzing/fuzz_http.cpp:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 45
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::HttpMessage::ParseFromArray
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:34,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:35,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 39
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_sofa.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:33,1
    - Dst: brpc::policy::ParseEspMessage
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 38
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_esp.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - brpc::policy::ParseEspMessage
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:33,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 38
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_shead.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseNsheadMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/fuzzing/fuzz_butil.cpp:38,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/test/fuzzing/fuzz_butil.cpp:39,1
    - Dst: butil::crc32c::Value
      Src: /src/brpc/test/fuzzing/fuzz_butil.cpp:42,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/fuzzing/fuzz_butil.cpp:42,1
    - Dst: butil::Hash
      Src: /src/brpc/test/fuzzing/fuzz_butil.cpp:45,1
    - Dst: butil::SHA1HashString
      Src: /src/brpc/test/fuzzing/fuzz_butil.cpp:48,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 52
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_butil.cpp
    functionUses: 0
    functionsReached:
    - butil::SHA1HashString
    - butil::Base64Decode
    - butil::Base64Encode
    - butil::crc32c::Value
    - butil::Hash
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:33,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 38
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_hulu.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseHuluMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Importer*::pool
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:40,1
    - Dst: ServiceDescriptor*::FindMethodByName
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' service_name'
    - ' method_name'
    - importer
    argTypes:
    - string
    - string
    - Importer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 44
    functionName: pbrpcframework::find_method_by_name
    functionSourceFile: /src/brpc/tools/rpc_press/pb_util.cpp
    functionUses: 0
    functionsReached:
    - Importer*::pool
    - ServiceDescriptor*::FindMethodByName
    - LOG
    linkageType: ''
    returnType: MethodDescriptor
    signature: "MethodDescriptor * find_method_by_name(const string& service_name,
      \n                                            const string& method_name, \n
      \                                           Importer* importer)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:51,1
    - Dst: MethodDescriptor*::input_type
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:56,1
    - Dst: MethodDescriptor*::output_type
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:58,1
    - Dst: DynamicMessageFactory*::GetPrototype
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - descripter
    - is_input
    - factory
    argTypes:
    - MethodDescriptor*
    - bool
    - DynamicMessageFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 61
    functionName: pbrpcframework::get_prototype_by_method_descriptor
    functionSourceFile: /src/brpc/tools/rpc_press/pb_util.cpp
    functionUses: 35
    functionsReached:
    - MethodDescriptor*::input_type
    - MethodDescriptor*::output_type
    - LOG
    - DynamicMessageFactory*::GetPrototype
    linkageType: ''
    returnType: Message
    signature: "Message * get_prototype_by_method_descriptor(\n    const MethodDescriptor*
      descripter,\n    bool is_input, \n    DynamicMessageFactory* factory)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::find_method_by_name
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:67,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' service_name'
    - ' method_name'
    - is_input
    - importer
    - factory
    argTypes:
    - string
    - string
    - bool
    - Importer*
    - DynamicMessageFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 63
    functionDepth: 2
    functionLinenumber: 63
    functionLinenumberEnd: 70
    functionName: pbrpcframework::get_prototype_by_name
    functionSourceFile: /src/brpc/tools/rpc_press/pb_util.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - pbrpcframework::find_method_by_name
    linkageType: ''
    returnType: Message
    signature: "Message * get_prototype_by_name(const string& service_name,\n                                     const
      string& method_name, bool is_input, \n                                     Importer*
      importer,\n                                     DynamicMessageFactory* factory)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Importer*::pool
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:40,1
    - Dst: ServiceDescriptor*::FindMethodByName
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' service_name'
    - ' method_name'
    - importer
    argTypes:
    - string
    - string
    - Importer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 44
    functionName: pbrpcframework::find_method_by_name
    functionSourceFile: /src/brpc/tools/rpc_press/pb_util.cpp
    functionUses: 1
    functionsReached:
    - Importer*::pool
    - ServiceDescriptor*::FindMethodByName
    - LOG
    linkageType: ''
    returnType: MethodDescriptor
    signature: "MethodDescriptor * find_method_by_name(const string& service_name,
      \n                                            const string& method_name, \n
      \                                           Importer* importer)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:51,1
    - Dst: MethodDescriptor*::input_type
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:56,1
    - Dst: MethodDescriptor*::output_type
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:58,1
    - Dst: DynamicMessageFactory*::GetPrototype
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - descripter
    - is_input
    - factory
    argTypes:
    - MethodDescriptor*
    - bool
    - DynamicMessageFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 61
    functionName: pbrpcframework::get_prototype_by_method_descriptor
    functionSourceFile: /src/brpc/tools/rpc_press/pb_util.cpp
    functionUses: 36
    functionsReached:
    - MethodDescriptor*::input_type
    - MethodDescriptor*::output_type
    - LOG
    - DynamicMessageFactory*::GetPrototype
    linkageType: ''
    returnType: Message
    signature: "Message * get_prototype_by_method_descriptor(\n    const MethodDescriptor*
      descripter,\n    bool is_input, \n    DynamicMessageFactory* factory)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::find_method_by_name
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:67,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/tools/rpc_press/pb_util.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' service_name'
    - ' method_name'
    - is_input
    - importer
    - factory
    argTypes:
    - string
    - string
    - bool
    - Importer*
    - DynamicMessageFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 63
    functionDepth: 2
    functionLinenumber: 63
    functionLinenumberEnd: 70
    functionName: pbrpcframework::get_prototype_by_name
    functionSourceFile: /src/brpc/tools/rpc_press/pb_util.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - pbrpcframework::find_method_by_name
    linkageType: ''
    returnType: Message
    signature: "Message * get_prototype_by_name(const string& service_name,\n                                     const
      string& method_name, bool is_input, \n                                     Importer*
      importer,\n                                     DynamicMessageFactory* factory)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~JsonLoader()
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~JsonLoader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~JsonLoader()
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~JsonLoader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::InfoThreadOptions
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InfoThreadOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::InfoThreadOptions
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InfoThreadOptions()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: find_last_of
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:49,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:51,1
    - Dst: substr
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:54,1
    - Dst: substr
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:55,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:77,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 42
    argCount: 1
    argNames:
    - options
    argTypes:
    - pbrpcframework::PressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 96
    functionName: set_press_options
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - find_last_of
    - substr
    linkageType: ''
    returnType: bool
    signature: bool set_press_options(pbrpcframework::PressOptions* options)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:100,1
    - Dst: StartDummyServerAt
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:104,1
    - Dst: set_press_options
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:108,1
    - Dst: pbrpcframework::RpcPress::RpcPress
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:111,1
    - Dst: pbrpcframework::RpcPress*::init
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:112,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:113,1
    - Dst: pbrpcframework::RpcPress*::start
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:117,1
    - Dst: brpc::IsAskedToQuit
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:119,1
    - Dst: sleep
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:120,1
    - Dst: sleep
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:123,1
    - Dst: pbrpcframework::RpcPress*::stop
      Src: /src/brpc/tools/rpc_press/rpc_press.cpp:125,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 129
    functionName: main
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - pbrpcframework::RpcPress*::stop
    - pbrpcframework::RpcPress*::start
    - brpc::IsAskedToQuit
    - StartDummyServerAt
    - set_press_options
    - pbrpcframework::RpcPress::RpcPress
    - sleep
    - pbrpcframework::RpcPress*::init
    - LOG
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_AT
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:47,1
    - Dst: c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' filename'
    - line
    - ' message'
    argTypes:
    - std::string
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: pbrpcframework::ImportErrorPrinter::AddError
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - LOG_AT
    - c_str
    linkageType: ''
    returnType: void
    signature: "void AddError(const std::string& filename, int line,\n                          int
      /*column*/, const std::string& message)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_AT
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:53,1
    - Dst: absl::string_view::data
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - filename
    - line
    - column
    - message
    argTypes:
    - absl::string_view
    - int
    - int
    - absl::string_view
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: pbrpcframework::ImportErrorPrinter::RecordError
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - LOG_AT
    - absl::string_view::data
    linkageType: ''
    returnType: void
    signature: "void RecordError(absl::string_view filename, int line, int column,\n
      \                    absl::string_view message) override"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:59,1
    - Dst: clear
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:66,1
    - Dst: assign
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:67,1
    - Dst: Init
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:69,1
    - Dst: host::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:69,1
    - Dst: lb_policy::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:71,1
    - Dst: find_method_by_name
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:77,1
    - Dst: get_prototype_by_method_descriptor
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:81,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 84
    functionName: pbrpcframework::PressClient::init
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - find_method_by_name
    - Init
    - assign
    - brpc::ChannelOptions::ChannelOptions
    - clear
    - lb_policy::c_str
    - host::c_str
    - LOG
    - get_prototype_by_method_descriptor
    linkageType: ''
    returnType: int
    signature: int PressClient::init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:88,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:89,1
    - Dst: CallMethod
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:91,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - done
    argTypes:
    - brpc::Controller*
    - Message*
    - Message*
    - Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: pbrpcframework::PressClient::call_method
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - empty
    - brpc::Controller*::request_attachment
    linkageType: ''
    returnType: void
    signature: "void PressClient::call_method(brpc::Controller* cntl, Message* request,\n
      \                             Message* response, Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 99
    functionName: pbrpcframework::RpcPress::RpcPress
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RpcPress::RpcPress()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    functionName: RpcPress::~RpcPress()
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: void RpcPress::~RpcPress()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:111,1
    - Dst: proto_file::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:118,1
    - Dst: proto_file::find_last_of
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:121,1
    - Dst: proto_file::substr
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:122,1
    - Dst: proto_file::substr
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:123,1
    - Dst: google::protobuf::compiler::DiskSourceTree::MapPath
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:126,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:126,1
    - Dst: proto_includes::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:128,1
    - Dst: proto_includes::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:129,1
    - Dst: google::protobuf::compiler::DiskSourceTree::MapPath
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: std::string
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: google::protobuf::compiler::Importer::Importer
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:135,1
    - Dst: Import
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:136,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:137,1
    - Dst: PressClient::PressClient
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:141,1
    - Dst: output::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:143,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:146,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:148,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:148,1
    - Dst: fopen
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:152,1
    - Dst: output::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:152,1
    - Dst: LOG_IF
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:153,1
    - Dst: pbrpcframework::RpcPress::init
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:158,1
    - Dst: input::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:163,1
    - Dst: butil::PathExists
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:168,1
    - Dst: butil::FilePath
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:168,1
    - Dst: open
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:169,1
    - Dst: input::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:169,1
    - Dst: PLOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:171,1
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:174,1
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:176,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:182,1
    - Dst: size
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:182,1
    - Dst: expose
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:183,1
    - Dst: expose
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:184,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 55
    argCount: 1
    argNames:
    - options
    argTypes:
    - PressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 186
    functionName: pbrpcframework::RpcPress::init
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 1
    functionsReached:
    - butil::StringSplitter::length
    - open
    - output::c_str
    - pbrpcframework::RpcPress::init
    - std::string::c_str
    - std::string
    - brpc::JsonLoader::load_messages
    - expose
    - butil::PathExists
    - output::empty
    - size
    - PLOG
    - LOG
    - LOG_IF
    - proto_includes::c_str
    - google::protobuf::compiler::Importer::Importer
    - PressClient::PressClient
    - input::empty
    - butil::FilePath::DirName
    - input::c_str
    - butil::FilePath
    - proto_includes::empty
    - fopen
    - butil::CreateDirectoryAndGetError
    - proto_file::find_last_of
    - proto_file::empty
    - google::protobuf::compiler::DiskSourceTree::MapPath
    - proto_file::substr
    - butil::StringSplitter::field
    - Import
    - butil::FilePath::value
    - empty
    linkageType: ''
    returnType: int
    signature: int RpcPress::init(const PressOptions* options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::RpcPress::sync_client
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: pbrpcframework::RpcPress::sync_call_thread
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::RpcPress::sync_client
    linkageType: ''
    returnType: void
    signature: void * RpcPress::sync_call_thread(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:197,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:198,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:205,1
    - Dst: fprintf
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:207,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:210,1
    - Dst: brpc::Controller*::ErrorCode
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:210,1
    - Dst: brpc::Controller*::ErrorText
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - start_time
    argTypes:
    - brpc::Controller*
    - Message*
    - Message*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 216
    functionName: pbrpcframework::RpcPress::handle_response
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ErrorCode
    - butil::gettimeofday_us
    - brpc::Controller*::ErrorText
    - std::string::c_str
    - json2pb::ProtoMessageToJson
    - brpc::Controller*::Failed
    - fprintf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void RpcPress::handle_response(brpc::Controller* cntl, \n                               Message*
      request,\n                               Message* response, \n                               int64_t
      start_time)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:224,1
    - Dst: fetch_add
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:227,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:229,1
    - Dst: std::max
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:232,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:234,1
    - Dst: size
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:235,1
    - Dst: get_output_message
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:237,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:238,1
    - Dst: "brpc::NewCallback<\n            RpcPress, \n            RpcPress*, \n
        \           brpc::Controller*, \n            Message*, \n            Message*,
        int64_t>"
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:239,1
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:246,1
    - Dst: call_method
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:247,1
    - Dst: brpc::Join
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:251,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:253,1
    - Dst: usleep
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:256,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 264
    functionName: pbrpcframework::RpcPress::sync_client
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 1
    functionsReached:
    - std::max
    - butil::gettimeofday_us
    - "brpc::NewCallback<\n            RpcPress, \n            RpcPress*, \n            brpc::Controller*,
      \n            Message*, \n            Message*, int64_t>"
    - fetch_add
    - brpc::Controller*::call_id
    - butil::monotonic_time_ns
    - get_output_message
    - call_method
    - brpc::Join
    - brpc::Controller::Controller
    - empty
    - usleep
    - size
    - LOG
    linkageType: ''
    returnType: void
    signature: void RpcPress::sync_client()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resize
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:267,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:271,1
    - Dst: pbrpcframework::RpcPress::start
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:279,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 285
    functionName: pbrpcframework::RpcPress::start
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - LOG
    - pbrpcframework::RpcPress::start
    - resize
    linkageType: ''
    returnType: int
    signature: int RpcPress::start()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:291,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:292,1
    - Dst: pbrpcframework::RpcPress::stop
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:294,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 296
    functionName: pbrpcframework::RpcPress::stop
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 1
    functionsReached:
    - size
    - pbrpcframework::RpcPress::stop
    - pthread_join
    linkageType: ''
    returnType: int
    signature: int RpcPress::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_AT
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:47,1
    - Dst: c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' filename'
    - line
    - ' message'
    argTypes:
    - std::string
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: pbrpcframework::ImportErrorPrinter::AddError
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - LOG_AT
    - c_str
    linkageType: ''
    returnType: void
    signature: "void AddError(const std::string& filename, int line,\n                          int
      /*column*/, const std::string& message)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_AT
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:53,1
    - Dst: absl::string_view::data
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - filename
    - line
    - column
    - message
    argTypes:
    - absl::string_view
    - int
    - int
    - absl::string_view
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: pbrpcframework::ImportErrorPrinter::RecordError
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - LOG_AT
    - absl::string_view::data
    linkageType: ''
    returnType: void
    signature: "void RecordError(absl::string_view filename, int line, int column,\n
      \                    absl::string_view message) override"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:59,1
    - Dst: clear
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:66,1
    - Dst: assign
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:67,1
    - Dst: Init
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:69,1
    - Dst: host::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:69,1
    - Dst: lb_policy::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:71,1
    - Dst: find_method_by_name
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:77,1
    - Dst: get_prototype_by_method_descriptor
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:81,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 84
    functionName: pbrpcframework::PressClient::init
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - find_method_by_name
    - Init
    - assign
    - brpc::ChannelOptions::ChannelOptions
    - clear
    - lb_policy::c_str
    - host::c_str
    - LOG
    - get_prototype_by_method_descriptor
    linkageType: ''
    returnType: int
    signature: int PressClient::init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:88,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:89,1
    - Dst: CallMethod
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:91,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - done
    argTypes:
    - brpc::Controller*
    - Message*
    - Message*
    - Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: pbrpcframework::PressClient::call_method
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - empty
    - brpc::Controller*::request_attachment
    linkageType: ''
    returnType: void
    signature: "void PressClient::call_method(brpc::Controller* cntl, Message* request,\n
      \                             Message* response, Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 99
    functionName: pbrpcframework::RpcPress::RpcPress
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RpcPress::RpcPress()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    functionName: RpcPress::~RpcPress()
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: void RpcPress::~RpcPress()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:111,1
    - Dst: proto_file::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:118,1
    - Dst: proto_file::find_last_of
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:121,1
    - Dst: proto_file::substr
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:122,1
    - Dst: proto_file::substr
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:123,1
    - Dst: google::protobuf::compiler::DiskSourceTree::MapPath
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:126,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:126,1
    - Dst: proto_includes::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:128,1
    - Dst: proto_includes::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:129,1
    - Dst: google::protobuf::compiler::DiskSourceTree::MapPath
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: std::string
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:131,1
    - Dst: google::protobuf::compiler::Importer::Importer
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:135,1
    - Dst: Import
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:136,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:137,1
    - Dst: PressClient::PressClient
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:141,1
    - Dst: output::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:143,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:146,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:148,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:148,1
    - Dst: fopen
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:152,1
    - Dst: output::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:152,1
    - Dst: LOG_IF
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:153,1
    - Dst: pbrpcframework::RpcPress::init
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:158,1
    - Dst: input::empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:163,1
    - Dst: butil::PathExists
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:168,1
    - Dst: butil::FilePath
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:168,1
    - Dst: open
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:169,1
    - Dst: input::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:169,1
    - Dst: PLOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:171,1
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:174,1
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:176,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:182,1
    - Dst: size
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:182,1
    - Dst: expose
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:183,1
    - Dst: expose
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:184,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 55
    argCount: 1
    argNames:
    - options
    argTypes:
    - PressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 186
    functionName: pbrpcframework::RpcPress::init
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - open
    - output::c_str
    - pbrpcframework::RpcPress::init
    - std::string::c_str
    - std::string
    - brpc::JsonLoader::load_messages
    - expose
    - butil::PathExists
    - output::empty
    - size
    - PLOG
    - LOG
    - LOG_IF
    - proto_includes::c_str
    - google::protobuf::compiler::Importer::Importer
    - PressClient::PressClient
    - input::empty
    - butil::FilePath::DirName
    - input::c_str
    - butil::FilePath
    - proto_includes::empty
    - fopen
    - butil::CreateDirectoryAndGetError
    - proto_file::find_last_of
    - proto_file::empty
    - google::protobuf::compiler::DiskSourceTree::MapPath
    - proto_file::substr
    - butil::StringSplitter::field
    - Import
    - butil::FilePath::value
    - empty
    linkageType: ''
    returnType: int
    signature: int RpcPress::init(const PressOptions* options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::RpcPress::sync_client
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 2
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: pbrpcframework::RpcPress::sync_call_thread
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::RpcPress::sync_client
    linkageType: ''
    returnType: void
    signature: void * RpcPress::sync_call_thread(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:197,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:198,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:205,1
    - Dst: fprintf
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:207,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:210,1
    - Dst: brpc::Controller*::ErrorCode
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:210,1
    - Dst: brpc::Controller*::ErrorText
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - start_time
    argTypes:
    - brpc::Controller*
    - Message*
    - Message*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 216
    functionName: pbrpcframework::RpcPress::handle_response
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ErrorCode
    - butil::gettimeofday_us
    - brpc::Controller*::ErrorText
    - std::string::c_str
    - json2pb::ProtoMessageToJson
    - brpc::Controller*::Failed
    - fprintf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void RpcPress::handle_response(brpc::Controller* cntl, \n                               Message*
      request,\n                               Message* response, \n                               int64_t
      start_time)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:224,1
    - Dst: fetch_add
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:227,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:229,1
    - Dst: std::max
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:232,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:234,1
    - Dst: size
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:235,1
    - Dst: get_output_message
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:237,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:238,1
    - Dst: "brpc::NewCallback<\n            RpcPress, \n            RpcPress*, \n
        \           brpc::Controller*, \n            Message*, \n            Message*,
        int64_t>"
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:239,1
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:246,1
    - Dst: call_method
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:247,1
    - Dst: brpc::Join
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:251,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:253,1
    - Dst: usleep
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:256,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 264
    functionName: pbrpcframework::RpcPress::sync_client
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 2
    functionsReached:
    - std::max
    - butil::gettimeofday_us
    - "brpc::NewCallback<\n            RpcPress, \n            RpcPress*, \n            brpc::Controller*,
      \n            Message*, \n            Message*, int64_t>"
    - fetch_add
    - brpc::Controller*::call_id
    - butil::monotonic_time_ns
    - get_output_message
    - call_method
    - brpc::Join
    - brpc::Controller::Controller
    - empty
    - usleep
    - size
    - LOG
    linkageType: ''
    returnType: void
    signature: void RpcPress::sync_client()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resize
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:267,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:271,1
    - Dst: pbrpcframework::RpcPress::start
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:279,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 285
    functionName: pbrpcframework::RpcPress::start
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 2
    functionsReached:
    - pthread_create
    - LOG
    - pbrpcframework::RpcPress::start
    - resize
    linkageType: ''
    returnType: int
    signature: int RpcPress::start()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:291,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:292,1
    - Dst: pbrpcframework::RpcPress::stop
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.cpp:294,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 296
    functionName: pbrpcframework::RpcPress::stop
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.cpp
    functionUses: 2
    functionsReached:
    - size
    - pbrpcframework::RpcPress::stop
    - pthread_join
    linkageType: ''
    returnType: int
    signature: int RpcPress::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::JsonLoader::Reader::Reader
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Reader(int fd2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' jsons'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::JsonLoader::Reader::Reader
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void Reader(const std::string& jsons)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: append_from_file_descriptor
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:61,1
    - Dst: read_some
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:64,1
    - Dst: PLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:66,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 73
    functionName: JsonLoader::Reader::read_some()
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - append_from_file_descriptor
    - read_some
    linkageType: ''
    returnType: bool
    signature: bool JsonLoader::Reader::read_some()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:79,1
    - Dst: isspace
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - ' json'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 88
    functionName: brpc::possibly_valid_json
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - isspace
    linkageType: ''
    returnType: bool
    signature: bool possibly_valid_json(const butil::IOBuf& json)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:92,1
    - Dst: read_some
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:93,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:97,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:104,1
    - Dst: VLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:119,1
    - Dst: cutn
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:127,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:128,1
    - Dst: possibly_valid_json
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:131,1
    - Dst: VLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:135,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:164,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:165,1
    - Dst: clear
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:166,1
    - Dst: read_some
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:168,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:169,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:170,1
    - Dst: possibly_valid_json
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:171,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 78
    argCount: 1
    argNames:
    - json1
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 177
    functionName: JsonLoader::Reader::get_next_json(butil::IOBuf* json1)
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::empty
    - butil::IOBuf*::append
    - possibly_valid_json
    - read_some
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::clear
    - empty
    - cutn
    - clear
    - butil::IOBufAsZeroCopyInputStream::Next
    - VLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool JsonLoader::Reader::get_next_json(butil::IOBuf* json1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_name
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - importer
    - factory
    - ' service_name'
    - ' method_name'
    argTypes:
    - google::protobuf::compiler::Importer*
    - google::protobuf::DynamicMessageFactory*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 179
    functionDepth: 3
    functionLinenumber: 179
    functionLinenumberEnd: 190
    functionName: brpc::JsonLoader::JsonLoader
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_name
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::JsonLoader(google::protobuf::compiler::Importer*
      importer, \n           google::protobuf::DynamicMessageFactory* factory,\n           const
      std::string& service_name,\n           const std::string& method_name)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::deque<google::protobuf::Message*>*::clear
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:195,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:196,1
    - Dst: JsonLoader::Reader*::get_next_json
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:197,1
    - Dst: VLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:198,1
    - Dst: std::deque<google::protobuf::Message*>*::size
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:198,1
    - Dst: New
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:201,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:204,1
    - Dst: std::deque<google::protobuf::Message*>*::push_back
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:209,1
    - Dst: LOG_IF
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:210,1
    - Dst: std::deque<google::protobuf::Message*>*::size
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:210,1
    - Dst: std::deque<google::protobuf::Message*>*::size
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ctx
    - out_msgs
    argTypes:
    - JsonLoader::Reader*
    - std::deque<google::protobuf::Message*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 213
    functionName: brpc::JsonLoader::load_messages
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 2
    functionsReached:
    - std::deque<google::protobuf::Message*>*::push_back
    - std::deque<google::protobuf::Message*>*::clear
    - json2pb::JsonToProtoMessage
    - New
    - JsonLoader::Reader*::get_next_json
    - VLOG
    - butil::IOBuf::IOBuf
    - LOG
    - LOG_IF
    - std::deque<google::protobuf::Message*>*::size
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::load_messages(\n    JsonLoader::Reader* ctx,\n    std::deque<google::protobuf::Message*>*
      out_msgs)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - out_msgs
    argTypes:
    - int
    - std::deque<google::protobuf::Message*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 220
    functionName: brpc::JsonLoader::load_messages
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 3
    functionsReached:
    - brpc::JsonLoader::load_messages
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::load_messages(\n    int fd,\n    std::deque<google::protobuf::Message*>*
      out_msgs)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' jsons'
    - out_msgs
    argTypes:
    - std::string
    - std::deque<google::protobuf::Message*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 227
    functionName: brpc::JsonLoader::load_messages
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 4
    functionsReached:
    - brpc::JsonLoader::load_messages
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::load_messages(\n    const std::string& jsons,\n    std::deque<google::protobuf::Message*>*
      out_msgs)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd2
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::JsonLoader::Reader::Reader
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Reader(int fd2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' jsons'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::JsonLoader::Reader::Reader
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void Reader(const std::string& jsons)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: append_from_file_descriptor
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:61,1
    - Dst: read_some
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:64,1
    - Dst: PLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:66,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 73
    functionName: JsonLoader::Reader::read_some()
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - append_from_file_descriptor
    - read_some
    linkageType: ''
    returnType: bool
    signature: bool JsonLoader::Reader::read_some()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:79,1
    - Dst: isspace
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - ' json'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 88
    functionName: brpc::possibly_valid_json
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - isspace
    linkageType: ''
    returnType: bool
    signature: bool possibly_valid_json(const butil::IOBuf& json)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:92,1
    - Dst: read_some
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:93,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:97,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:104,1
    - Dst: VLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:119,1
    - Dst: cutn
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:127,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:128,1
    - Dst: possibly_valid_json
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:131,1
    - Dst: VLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:135,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:164,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:165,1
    - Dst: clear
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:166,1
    - Dst: read_some
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:168,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:169,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:170,1
    - Dst: possibly_valid_json
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:171,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 78
    argCount: 1
    argNames:
    - json1
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 177
    functionName: JsonLoader::Reader::get_next_json(butil::IOBuf* json1)
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::empty
    - butil::IOBuf*::append
    - possibly_valid_json
    - read_some
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::clear
    - empty
    - cutn
    - clear
    - butil::IOBufAsZeroCopyInputStream::Next
    - VLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool JsonLoader::Reader::get_next_json(butil::IOBuf* json1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_name
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - importer
    - factory
    - ' service_name'
    - ' method_name'
    argTypes:
    - google::protobuf::compiler::Importer*
    - google::protobuf::DynamicMessageFactory*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 179
    functionDepth: 3
    functionLinenumber: 179
    functionLinenumberEnd: 190
    functionName: brpc::JsonLoader::JsonLoader
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_name
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::JsonLoader(google::protobuf::compiler::Importer*
      importer, \n           google::protobuf::DynamicMessageFactory* factory,\n           const
      std::string& service_name,\n           const std::string& method_name)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::deque<google::protobuf::Message*>*::clear
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:195,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:196,1
    - Dst: JsonLoader::Reader*::get_next_json
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:197,1
    - Dst: VLOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:198,1
    - Dst: std::deque<google::protobuf::Message*>*::size
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:198,1
    - Dst: New
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:201,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:204,1
    - Dst: std::deque<google::protobuf::Message*>*::push_back
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:209,1
    - Dst: LOG_IF
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:210,1
    - Dst: std::deque<google::protobuf::Message*>*::size
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:210,1
    - Dst: std::deque<google::protobuf::Message*>*::size
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ctx
    - out_msgs
    argTypes:
    - JsonLoader::Reader*
    - std::deque<google::protobuf::Message*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 213
    functionName: brpc::JsonLoader::load_messages
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 4
    functionsReached:
    - std::deque<google::protobuf::Message*>*::push_back
    - std::deque<google::protobuf::Message*>*::clear
    - json2pb::JsonToProtoMessage
    - New
    - JsonLoader::Reader*::get_next_json
    - VLOG
    - butil::IOBuf::IOBuf
    - LOG
    - LOG_IF
    - std::deque<google::protobuf::Message*>*::size
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::load_messages(\n    JsonLoader::Reader* ctx,\n    std::deque<google::protobuf::Message*>*
      out_msgs)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - out_msgs
    argTypes:
    - int
    - std::deque<google::protobuf::Message*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 220
    functionName: brpc::JsonLoader::load_messages
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 5
    functionsReached:
    - brpc::JsonLoader::load_messages
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::load_messages(\n    int fd,\n    std::deque<google::protobuf::Message*>*
      out_msgs)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::JsonLoader::load_messages
      Src: /src/brpc/tools/rpc_press/json_loader.cpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' jsons'
    - out_msgs
    argTypes:
    - std::string
    - std::deque<google::protobuf::Message*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 227
    functionName: brpc::JsonLoader::load_messages
    functionSourceFile: /src/brpc/tools/rpc_press/json_loader.cpp
    functionUses: 6
    functionsReached:
    - brpc::JsonLoader::load_messages
    linkageType: ''
    returnType: void
    signature: "void JsonLoader::load_messages(\n    const std::string& jsons,\n    std::deque<google::protobuf::Message*>*
      out_msgs)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: pbrpcframework::PressOptions
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PressOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - options
    - importer
    - factory
    argTypes:
    - PressOptions*
    - google::protobuf::compiler::Importer*
    - google::protobuf::DynamicMessageFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 85
    functionName: pbrpcframework::PressClient::PressClient
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PressClient(const PressOptions* options,\n                     google::protobuf::compiler::Importer*
      importer,\n                     google::protobuf::DynamicMessageFactory* factory)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: pbrpcframework::PressClient::get_output_message
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached:
    - New
    linkageType: ''
    returnType: google::protobuf::Message
    signature: google::protobuf::Message * get_output_message()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: pbrpcframework::RpcPress::options
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PressOptions
    signature: PressOptions * options()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: pbrpcframework::PressOptions
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PressOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - options
    - importer
    - factory
    argTypes:
    - PressOptions*
    - google::protobuf::compiler::Importer*
    - google::protobuf::DynamicMessageFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 85
    functionName: pbrpcframework::PressClient::PressClient
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PressClient(const PressOptions* options,\n                     google::protobuf::compiler::Importer*
      importer,\n                     google::protobuf::DynamicMessageFactory* factory)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/tools/rpc_press/rpc_press_impl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: pbrpcframework::PressClient::get_output_message
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached:
    - New
    linkageType: ''
    returnType: google::protobuf::Message
    signature: google::protobuf::Message * get_output_message()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: pbrpcframework::RpcPress::options
    functionSourceFile: /src/brpc/tools/rpc_press/rpc_press_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PressOptions
    signature: PressOptions * options()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:25,1
    - Dst: pthread_cond_init
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: brpc::InfoThread::InfoThread
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - pthread_cond_init
    linkageType: ''
    returnType: void
    signature: void InfoThread::InfoThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:30,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: InfoThread::~InfoThread()
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:39,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:43,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:44,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:46,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:47,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:50,1
    - Dst: strftime
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:54,1
    - Dst: localtime_r
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:55,1
    - Dst: sent_count::get_value
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:57,1
    - Dst: latency_recorder::count
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:58,1
    - Dst: error_count::get_value
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:59,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:60,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:72,1
    - Dst: latency_recorder::latency
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:83,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:84,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:85,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:86,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:87,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:88,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:89,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:90,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:91,1
    - Dst: latency_recorder::max_latency
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:92,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 95
    functionName: brpc::InfoThread::run
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - butil::gettimeofday_us
    - sent_count::get_value
    - printf
    - BAIDU_SCOPED_LOCK
    - butil::microseconds_to_timespec
    - latency_recorder::latency
    - latency_recorder::max_latency
    - localtime_r
    - latency_recorder::count
    - pthread_cond_timedwait
    - error_count::get_value
    - latency_recorder::latency_percentile
    linkageType: ''
    returnType: void
    signature: void InfoThread::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: brpc::run_info_thread
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - run
    linkageType: ''
    returnType: void
    signature: void * run_info_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:106,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:111,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:112,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - InfoThreadOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 116
    functionName: brpc::InfoThread::start
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InfoThread::start(const InfoThreadOptions& options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:120,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:125,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 128
    functionName: brpc::InfoThread::stop
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_join
    - pthread_cond_signal
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void InfoThread::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:25,1
    - Dst: pthread_cond_init
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: brpc::InfoThread::InfoThread
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - pthread_cond_init
    linkageType: ''
    returnType: void
    signature: void InfoThread::InfoThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:30,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: InfoThread::~InfoThread()
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:39,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:43,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:44,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:46,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:47,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:50,1
    - Dst: strftime
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:54,1
    - Dst: localtime_r
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:55,1
    - Dst: sent_count::get_value
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:57,1
    - Dst: latency_recorder::count
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:58,1
    - Dst: error_count::get_value
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:59,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:60,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:72,1
    - Dst: latency_recorder::latency
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:83,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:84,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:85,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:86,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:87,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:88,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:89,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:90,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:91,1
    - Dst: latency_recorder::max_latency
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:92,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 95
    functionName: brpc::InfoThread::run
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - butil::gettimeofday_us
    - sent_count::get_value
    - printf
    - BAIDU_SCOPED_LOCK
    - butil::microseconds_to_timespec
    - latency_recorder::latency
    - latency_recorder::max_latency
    - localtime_r
    - latency_recorder::count
    - pthread_cond_timedwait
    - error_count::get_value
    - latency_recorder::latency_percentile
    linkageType: ''
    returnType: void
    signature: void InfoThread::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: brpc::run_info_thread
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - run
    linkageType: ''
    returnType: void
    signature: void * run_info_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:106,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:111,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:112,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - InfoThreadOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 116
    functionName: brpc::InfoThread::start
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InfoThread::start(const InfoThreadOptions& options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:120,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:125,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 128
    functionName: brpc::InfoThread::stop
    functionSourceFile: /src/brpc/tools/rpc_press/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_join
    - pthread_cond_signal
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void InfoThread::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::InfoThreadOptions
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InfoThreadOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::InfoThreadOptions
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InfoThreadOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - brpc::ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: ChannelGroup::channel
    functionSourceFile: /src/brpc/tools/rpc_replay/rpc_replay.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: brpc::Channel
    signature: brpc::Channel * channel(brpc::ProtocolType type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:75,1
    - Dst: brpc::ListProtocols
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:78,1
    - Dst: std::vector::size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:80,1
    - Dst: std::max
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:81,1
    - Dst: resize
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:84,1
    - Dst: std::vector::size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:85,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:88,1
    - Dst: brpc::Protocol::support_client
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:95,1
    - Dst: brpc::Protocol::support_server
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:96,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:97,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:98,1
    - Dst: c_str
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:98,1
    - Dst: c_str
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:100,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 108
    functionName: ChannelGroup::Init
    functionSourceFile: /src/brpc/tools/rpc_replay/rpc_replay.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - resize
    - brpc::Protocol::support_client
    - brpc::ListProtocols
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Protocol::support_server
    - c_str
    - LOG
    - std::vector::size
    - brpc::Channel*::Init
    linkageType: ''
    returnType: int
    signature: int ChannelGroup::Init()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:111,1
    - Dst: clear
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 115
    functionName: ChannelGroup::~ChannelGroup()
    functionSourceFile: /src/brpc/tools/rpc_replay/rpc_replay.cpp
    functionUses: 0
    functionsReached:
    - size
    - clear
    linkageType: ''
    returnType: void
    signature: void ChannelGroup::~ChannelGroup()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:122,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:124,1
    - Dst: bthread_usleep
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - cntl
    - start_time
    - sleep_on_error
    argTypes:
    - brpc::Controller*
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 133
    functionName: handle_response
    functionSourceFile: /src/brpc/tools/rpc_replay/rpc_replay.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread_usleep
    - brpc::Controller*::Failed
    linkageType: ''
    returnType: void
    signature: "void handle_response(brpc::Controller* cntl, int64_t start_time,\n
      \                           bool sleep_on_error/*note*/)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelGroup*>
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:138,1
    - Dst: fetch_add
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:139,1
    - Dst: brpc::SerializedRequest::SerializedRequest
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:141,1
    - Dst: brpc::NsheadMessage::NsheadMessage
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:142,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:143,1
    - Dst: std::max
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:146,1
    - Dst: brpc::IsAskedToQuit
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:147,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:150,1
    - Dst: brpc::IsAskedToQuit
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:151,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:151,1
    - Dst: ChannelGroup*::channel
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:157,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:157,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:159,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:160,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:164,1
    - Dst: brpc::SerializedRequest::Clear
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:165,1
    - Dst: brpc::Controller*::reset_sampled_request
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:168,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:168,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:169,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:170,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:171,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:172,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:172,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:173,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:175,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:177,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:177,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:179,1
    - Dst: brpc::NsheadMessage::Clear
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:180,1
    - Dst: memcpy
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:181,1
    - Dst: brpc::SampledRequest*::meta::nshead
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:181,1
    - Dst: brpc::SampledRequest*::meta::nshead
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:181,1
    - Dst: brpc::SampledRequest*::meta::attachment_size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:184,1
    - Dst: brpc::SampledRequest*::request::cutn
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:185,1
    - Dst: brpc::SerializedRequest::serialized_data
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:186,1
    - Dst: brpc::SampledRequest*::request::size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:187,1
    - Dst: brpc::SampledRequest*::meta::attachment_size
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:187,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:188,1
    - Dst: brpc::SampledRequest*::request::movable
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:188,1
    - Dst: brpc::SerializedRequest::serialized_data
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:190,1
    - Dst: brpc::SampledRequest*::request::movable
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:190,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:193,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:195,1
    - Dst: handle_response
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:197,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:200,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:201,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:203,1
    - Dst: usleep
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:206,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 50
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 216
    functionName: replay_thread
    functionSourceFile: /src/brpc/tools/rpc_replay/rpc_replay.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - brpc::SampledRequest*::request::cutn
    - brpc::SerializedRequest::Clear
    - brpc::HttpMessage::ParseFromIOBuf
    - fetch_add
    - butil::monotonic_time_ns
    - brpc::SerializedRequest::SerializedRequest
    - brpc::SampledRequest*::meta::nshead
    - brpc::IsAskedToQuit
    - static_cast<ChannelGroup*>
    - brpc::NewCallback
    - std::unique_ptr::release
    - brpc::Controller*::request_attachment
    - usleep
    - memcpy
    - LOG
    - brpc::Controller*::http_request
    - brpc::NsheadMessage::NsheadMessage
    - butil::gettimeofday_us
    - brpc::HttpMessage::body
    - brpc::SerializedRequest::serialized_data
    - brpc::HttpMessage::header
    - brpc::SampleIterator::Next
    - brpc::HttpMessage::HttpMessage
    - brpc::NsheadMessage::Clear
    - brpc::Controller*::reset_sampled_request
    - brpc::SampledRequest*::meta::protocol_type
    - brpc::SampledRequest*::request::movable
    - brpc::Channel*::CallMethod
    - brpc::SampledRequest*::request::size
    - brpc::Controller::Controller
    - ChannelGroup*::channel
    - empty
    - brpc::SampledRequest*::meta::attachment_size
    - handle_response
    linkageType: ''
    returnType: void
    signature: void * replay_thread(void* arg)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:220,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:222,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:223,1
    - Dst: butil::FilePath
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:224,1
    - Dst: StartDummyServerAt
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:229,1
    - Dst: ChannelGroup::Init
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:255,1
    - Dst: std::vector::resize
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:263,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:266,1
    - Dst: std::vector::resize
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:271,1
    - Dst: bthread_start_background
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:275,1
    - Dst: brpc::InfoThread::InfoThread
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:280,1
    - Dst: brpc::InfoThread::start
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:286,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:287,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:293,1
    - Dst: bthread_join
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:295,1
    - Dst: brpc::InfoThread::stop
      Src: /src/brpc/tools/rpc_replay/rpc_replay.cpp:298,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 63
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 301
    functionName: main
    functionSourceFile: /src/brpc/tools/rpc_replay/rpc_replay.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - brpc::InfoThread::stop
    - pthread_join
    - pthread_create
    - ChannelGroup::Init
    - bthread_start_background
    - StartDummyServerAt
    - bthread_join
    - empty
    - brpc::InfoThread::InfoThread
    - butil::FilePath
    - LOG
    - brpc::InfoThread::start
    - butil::DirectoryExists
    - std::vector::resize
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:25,1
    - Dst: pthread_cond_init
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: brpc::InfoThread::InfoThread
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_mutex_init
    - pthread_cond_init
    linkageType: ''
    returnType: void
    signature: void InfoThread::InfoThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:30,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: InfoThread::~InfoThread()
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:39,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:43,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:44,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:46,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:47,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:50,1
    - Dst: strftime
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:54,1
    - Dst: localtime_r
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:55,1
    - Dst: sent_count::get_value
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:57,1
    - Dst: latency_recorder::count
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:58,1
    - Dst: error_count::get_value
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:59,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:60,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:72,1
    - Dst: latency_recorder::latency
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:83,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:84,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:85,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:86,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:87,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:88,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:89,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:90,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:91,1
    - Dst: latency_recorder::max_latency
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:92,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 95
    functionName: brpc::InfoThread::run
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - butil::gettimeofday_us
    - sent_count::get_value
    - printf
    - BAIDU_SCOPED_LOCK
    - butil::microseconds_to_timespec
    - latency_recorder::latency
    - latency_recorder::max_latency
    - localtime_r
    - latency_recorder::count
    - pthread_cond_timedwait
    - error_count::get_value
    - latency_recorder::latency_percentile
    linkageType: ''
    returnType: void
    signature: void InfoThread::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: brpc::run_info_thread
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 0
    functionsReached:
    - run
    linkageType: ''
    returnType: void
    signature: void * run_info_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:106,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:111,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:112,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - InfoThreadOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 116
    functionName: brpc::InfoThread::start
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InfoThread::start(const InfoThreadOptions& options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:120,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:125,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 128
    functionName: brpc::InfoThread::stop
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_join
    - pthread_cond_signal
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void InfoThread::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:25,1
    - Dst: pthread_cond_init
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 27
    functionName: brpc::InfoThread::InfoThread
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_mutex_init
    - pthread_cond_init
    linkageType: ''
    returnType: void
    signature: void InfoThread::InfoThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:30,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: InfoThread::~InfoThread()
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:39,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:43,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:44,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:46,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:47,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:50,1
    - Dst: strftime
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:54,1
    - Dst: localtime_r
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:55,1
    - Dst: sent_count::get_value
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:57,1
    - Dst: latency_recorder::count
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:58,1
    - Dst: error_count::get_value
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:59,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:60,1
    - Dst: printf
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:72,1
    - Dst: latency_recorder::latency
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:83,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:84,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:85,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:86,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:87,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:88,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:89,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:90,1
    - Dst: latency_recorder::latency_percentile
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:91,1
    - Dst: latency_recorder::max_latency
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:92,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 95
    functionName: brpc::InfoThread::run
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - butil::gettimeofday_us
    - sent_count::get_value
    - printf
    - BAIDU_SCOPED_LOCK
    - butil::microseconds_to_timespec
    - latency_recorder::latency
    - latency_recorder::max_latency
    - localtime_r
    - latency_recorder::count
    - pthread_cond_timedwait
    - error_count::get_value
    - latency_recorder::latency_percentile
    linkageType: ''
    returnType: void
    signature: void InfoThread::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: brpc::run_info_thread
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 0
    functionsReached:
    - run
    linkageType: ''
    returnType: void
    signature: void * run_info_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:106,1
    - Dst: pthread_create
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:111,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:112,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - InfoThreadOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 116
    functionName: brpc::InfoThread::start
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InfoThread::start(const InfoThreadOptions& options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:120,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:125,1
    - Dst: pthread_join
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 128
    functionName: brpc::InfoThread::stop
    functionSourceFile: /src/brpc/tools/rpc_replay/info_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_join
    - pthread_cond_signal
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void InfoThread::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - bugs
    argTypes:
    - BugsLoader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 62
    functionName: TrackMeServiceImpl::TrackMeServiceImpl
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TrackMeServiceImpl(BugsLoader* bugs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~TrackMeServiceImpl()
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TrackMeServiceImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TrackMeResponse*::set_severity
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:71,1
    - Dst: brpc::TrackMeRequest*::has_rpc_version
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:73,1
    - Dst: find
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:74,1
    - Dst: brpc::TrackMeRequest*::rpc_version
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:74,1
    - Dst: brpc::TrackMeResponse*::set_new_interval
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:76,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:77,1
    - Dst: CHECK_EQ
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:78,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:78,1
    - Dst: brpc::TrackMeRequest*::server_addr
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:78,1
    - Dst: brpc::Controller*::remote_side
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:82,1
    - Dst: brpc::TrackMeRequest*::rpc_version
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::RpcController*
    - brpc::TrackMeRequest*
    - brpc::TrackMeResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 84
    functionName: TrackMeServiceImpl::TrackMe
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 0
    functionsReached:
    - brpc::TrackMeRequest*::server_addr
    - find
    - butil::str2endpoint
    - brpc::TrackMeRequest*::has_rpc_version
    - butil::EndPoint::EndPoint
    - brpc::Controller*::remote_side
    - brpc::TrackMeRequest*::rpc_version
    - brpc::TrackMeResponse*::set_severity
    - CHECK_EQ
    - brpc::TrackMeResponse*::set_new_interval
    - LOG
    linkageType: ''
    returnType: void
    signature: "void TrackMe(google::protobuf::RpcController* cntl_base,\n                 const
      brpc::TrackMeRequest* request,\n                 brpc::TrackMeResponse* response,\n
      \                google::protobuf::Closure* done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:91,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:93,1
    - Dst: brpc::Server::set_version
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:94,1
    - Dst: BugsLoader::BugsLoader
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:95,1
    - Dst: BugsLoader::start
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:97,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:103,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:106,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:111,1
    - Dst: brpc::Server::RunUntilAskedToQuit
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:114,1
    - Dst: BugsLoader::stop
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:115,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 117
    functionName: main
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - brpc::Server::AddService
    - brpc::Server::set_version
    - BugsLoader::start
    - brpc::Server::RunUntilAskedToQuit
    - brpc::Server::Start
    - brpc::ServerOptions::ServerOptions
    - BugsLoader::stop
    - LOG
    - BugsLoader::BugsLoader
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 123
    functionName: BugsLoader::BugsLoader
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BugsLoader::BugsLoader()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' bugs_file'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 133
    functionName: BugsLoader::start
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool BugsLoader::start(const std::string& bugs_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: BugsLoader::stop
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 1
    functionsReached:
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void BugsLoader::stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BugsLoader::run
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: BugsLoader::run_this
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 0
    functionsReached:
    - BugsLoader::run
    linkageType: ''
    returnType: void
    signature: void * BugsLoader::run_this(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:150,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:151,1
    - Dst: c_str
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:152,1
    - Dst: BugsLoader::load_bugs
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:156,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:158,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:163,1
    - Dst: sleep
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:165,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 169
    functionName: BugsLoader::run
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 1
    functionsReached:
    - BugsLoader::load_bugs
    - butil::FileWatcher::FileWatcher
    - butil::FileWatcher::check_and_consume
    - c_str
    - sleep
    - LOG
    - butil::FileWatcher::init
    linkageType: ''
    returnType: void
    signature: void BugsLoader::run()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:172,1
    - Dst: c_str
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:172,1
    - Dst: PLOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:174,1
    - Dst: BugList::BugList
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:182,1
    - Dst: getline
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:183,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:183,1
    - Dst: butil::StringMultiSplitter::to_longlong
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:196,1
    - Dst: butil::StringMultiSplitter::to_longlong
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:206,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:212,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:216,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:227,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:232,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:232,1
    - Dst: RevisionInfo::error_text::assign
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:237,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:237,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:237,1
    - Dst: std::unique_ptr::push_back
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:240,1
    - Dst: std::unique_ptr::size
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:240,1
    - Dst: free
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:241,1
    - Dst: reset
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:244,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:244,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 245
    functionName: BugsLoader::load_bugs
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 1
    functionsReached:
    - fopen
    - RevisionInfo::error_text::assign
    - butil::StringPiece::size
    - reset
    - free
    - butil::StringMultiSplitter::to_longlong
    - butil::StringMultiSplitter::field
    - butil::StringMultiSplitter::length
    - std::unique_ptr::push_back
    - BugList::BugList
    - std::unique_ptr::release
    - c_str
    - butil::StringPiece::data
    - std::unique_ptr::size
    - getline
    - PLOG
    - LOG
    - butil::ScopedFILE::get
    linkageType: ''
    returnType: void
    signature: void BugsLoader::load_bugs()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::shared_ptr::get
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:250,1
    - Dst: std::shared_ptr::size
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:256,1
    - Dst: brpc::TrackMeResponse*::severity
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:260,1
    - Dst: brpc::TrackMeResponse*::set_severity
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:261,1
    - Dst: brpc::TrackMeResponse*::mutable_error_text
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:264,1
    - Dst: snprintf
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:267,1
    - Dst: snprintf
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:270,1
    - Dst: std::string*::append
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:273,1
    - Dst: std::string*::append
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:274,1
    - Dst: std::string*::append
      Src: /src/brpc/tools/trackme_server/trackme_server.cpp:275,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - revision
    - response
    argTypes:
    - int64_t
    - brpc::TrackMeResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 280
    functionName: BugsLoader::find
    functionSourceFile: /src/brpc/tools/trackme_server/trackme_server.cpp
    functionUses: 0
    functionsReached:
    - brpc::TrackMeResponse*::mutable_error_text
    - brpc::TrackMeResponse*::severity
    - std::shared_ptr::size
    - std::shared_ptr::get
    - snprintf
    - brpc::TrackMeResponse*::set_severity
    - std::string*::append
    linkageType: ''
    returnType: bool
    signature: bool BugsLoader::find(int64_t revision, brpc::TrackMeResponse* response)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:57,1
    - Dst: Failed
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:58,1
    - Dst: output_queue::push_back
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:59,1
    - Dst: std::make_pair
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:59,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:59,1
    - Dst: output_queue::push_back
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:61,1
    - Dst: std::make_pair
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:62,1
    - Dst: response_attachment
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:62,1
    - Dst: current_concurrency::fetch_sub
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 54
    functionDepth: 2
    functionLinenumber: 54
    functionLinenumberEnd: 66
    functionName: OnHttpCallEnd::Run
    functionSourceFile: /src/brpc/tools/parallel_http/parallel_http.cpp
    functionUses: 0
    functionsReached:
    - response_attachment
    - BAIDU_SCOPED_LOCK
    - SnappyDecompressIOBuf
    - current_concurrency::fetch_sub
    - std::make_pair
    - output_queue::push_back
    - Failed
    linkageType: ''
    returnType: void
    signature: void OnHttpCallEnd::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:70,1
    - Dst: AccessThreadArgs*::url_list::size
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:77,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:79,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:80,1
    - Dst: c_str
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:81,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:82,1
    - Dst: AccessThreadArgs*::output_queue::push_back
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:83,1
    - Dst: std::make_pair
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:83,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:83,1
    - Dst: AccessThreadArgs*::current_concurrency::fetch_add
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:86,1
    - Dst: AccessThreadArgs*::current_concurrency::fetch_sub
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:88,1
    - Dst: bthread_usleep
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:89,1
    - Dst: OnHttpCallEnd::OnHttpCallEnd
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:91,1
    - Dst: OnHttpCallEnd*::cntl::http_request
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:92,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 68
    functionDepth: 2
    functionLinenumber: 68
    functionLinenumberEnd: 98
    functionName: access_thread
    functionSourceFile: /src/brpc/tools/parallel_http/parallel_http.cpp
    functionUses: 0
    functionsReached:
    - OnHttpCallEnd::OnHttpCallEnd
    - AccessThreadArgs*::output_queue::push_back
    - brpc::Channel::CallMethod
    - OnHttpCallEnd*::cntl::http_request
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - SnappyDecompressIOBuf
    - AccessThreadArgs*::url_list::size
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Channel::Init
    - c_str
    - std::make_pair
    - AccessThreadArgs*::current_concurrency::fetch_add
    - AccessThreadArgs*::current_concurrency::fetch_sub
    - LOG
    linkageType: ''
    returnType: void
    signature: void * access_thread(void* void_args)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:102,1
    - Dst: butil::ScopedFILE::ScopedFILE
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:108,1
    - Dst: empty
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:110,1
    - Dst: butil::ScopedFILE::reset
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:111,1
    - Dst: fopen
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:111,1
    - Dst: c_str
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:111,1
    - Dst: PLOG
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:113,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:116,1
    - Dst: getline
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:124,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:130,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:131,1
    - Dst: std::deque::push_back
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:132,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:132,1
    - Dst: std::deque::empty
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:135,1
    - Dst: AccessThreadArgs::AccessThreadArgs
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:138,1
    - Dst: current_concurrency::store
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:142,1
    - Dst: std::vector::resize
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:145,1
    - Dst: CHECK_EQ
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:147,1
    - Dst: bthread_start_background
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:147,1
    - Dst: std::deque::size
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:151,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:154,1
    - Dst: std::deque::swap
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:155,1
    - Dst: std::deque::size
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:157,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:160,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:161,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:163,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:165,1
    - Dst: second::empty
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:175,1
    - Dst: second::empty
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:189,1
    - Dst: std::deque::size
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:196,1
    - Dst: std::deque::clear
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:197,1
    - Dst: usleep
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:199,1
    - Dst: bthread_join
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:203,1
    - Dst: current_concurrency::load
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:206,1
    - Dst: usleep
      Src: /src/brpc/tools/parallel_http/parallel_http.cpp:207,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 87
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 211
    functionName: main
    functionSourceFile: /src/brpc/tools/parallel_http/parallel_http.cpp
    functionUses: 0
    functionsReached:
    - current_concurrency::store
    - bthread_start_background
    - bthread_join
    - CHECK_EQ
    - std::deque::swap
    - butil::ScopedFILE::get
    - butil::StringPiece::starts_with
    - butil::StringPiece::substr
    - butil::ScopedFILE::ScopedFILE
    - butil::ScopedFILE::reset
    - usleep
    - butil::StringPiece::empty
    - PLOG
    - current_concurrency::load
    - std::vector::resize
    - std::deque::push_back
    - butil::StringPiece::remove_prefix
    - BAIDU_SCOPED_LOCK
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::find
    - std::deque::clear
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - fopen
    - std::deque::size
    - butil::StringPiece::as_string
    - std::deque::empty
    - c_str
    - empty
    - AccessThreadArgs::AccessThreadArgs
    - second::empty
    - getline
    linkageType: ''
    returnType: int
    signature: int main(int argc, char** argv)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:35,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:35,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:37,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:37,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:40,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:41,1
    - Dst: cut_until
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:42,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:43,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:49,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:50,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:51,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:57,1
    - Dst: brpc::Controller*::ErrorCode
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:58,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:59,1
    - Dst: brpc::Controller*::ErrorCode
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:59,1
    - Dst: brpc::Controller*::ErrorText
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:60,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:63,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - client_cntl
    - target
    - server_cntl
    - server_done
    argTypes:
    - brpc::Controller*
    - std::string
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 64
    functionName: handle_response
    functionSourceFile: /src/brpc/tools/rpc_view/rpc_view.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller*::ErrorCode
    - brpc::Controller*::ErrorText
    - google::protobuf::Closure*::Run
    - brpc::Controller*::SetFailed
    - brpc::Controller*::http_response
    - brpc::Controller*::Failed
    - cut_until
    - butil::IOBuf::append
    - brpc::Controller*::response_attachment
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: "void handle_response(brpc::Controller* client_cntl,\n                            std::string
      target,\n                            brpc::Controller* server_cntl,\n                            google::protobuf::Closure*
      server_done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: ViewServiceImpl::ViewServiceImpl
    functionSourceFile: /src/brpc/tools/rpc_view/rpc_view.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ViewServiceImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: ~ViewServiceImpl()
    functionSourceFile: /src/brpc/tools/rpc_view/rpc_view.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ViewServiceImpl()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:77,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:83,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:85,1
    - Dst: std::string*::c_str
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:85,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:86,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:91,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:92,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:101,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:102,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:104,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:104,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:105,1
    - Dst: std::string::c_str
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:106,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:114,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:116,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:117,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:117,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:120,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:123,1
    - Dst: path
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:124,1
    - Dst: query
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:125,1
    - Dst: std::string::push_back
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:126,1
    - Dst: std::string::append
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:127,1
    - Dst: query
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:127,1
    - Dst: fragment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:129,1
    - Dst: std::string::push_back
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:130,1
    - Dst: std::string::append
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:131,1
    - Dst: fragment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:131,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:133,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:138,1
    - Dst: atoll
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:141,1
    - Dst: std::string*::c_str
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:141,1
    - Dst: brpc::Controller*::set_timeout_ms
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:143,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:146,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:146,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:148,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:149,1
    - Dst: brpc::ClosureGuard::release
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:151,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 152
    functionName: ViewServiceImpl::default_method
    functionSourceFile: /src/brpc/tools/rpc_view/rpc_view.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::CallMethod
    - brpc::Controller*::SetFailed
    - brpc::ClosureGuard::release
    - path
    - query
    - brpc::ChannelOptions::ChannelOptions
    - std::string*::c_str
    - std::string::c_str
    - brpc::NewCallback
    - brpc::Channel::Channel
    - std::string::append
    - brpc::Controller*::request_attachment
    - static_cast<brpc::Controller*>
    - std::string::push_back
    - brpc::Controller*::http_request
    - fragment
    - brpc::Channel::Init
    - atoll
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - brpc::Controller*::set_timeout_ms
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: "void default_method(google::protobuf::RpcController* cntl_base,\n
      \                               const HttpRequest*,\n                                HttpResponse*,\n
      \                               google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:156,1
    - Dst: empty
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:157,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:160,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:164,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:166,1
    - Dst: brpc::Server::set_version
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:167,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:168,1
    - Dst: ViewServiceImpl::ViewServiceImpl
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:169,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:171,1
    - Dst: brpc::Server::RunUntilAskedToQuit
      Src: /src/brpc/tools/rpc_view/rpc_view.cpp:174,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 176
    functionName: main
    functionSourceFile: /src/brpc/tools/rpc_view/rpc_view.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ViewServiceImpl::ViewServiceImpl
    - brpc::Server::set_version
    - brpc::Server::RunUntilAskedToQuit
    - brpc::Server::Start
    - empty
    - brpc::ServerOptions::ServerOptions
    - LOG
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: ~Dumper()
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Dumper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' description'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: bvar::Dumper::dump_mvar
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool dump_mvar(const std::string& name,\n                           const
      butil::StringPiece& description)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: bvar::Dumper::dump_comment
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool dump_comment(const std::string&, const std::string& /*type*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: bvar::SeriesOptions
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: bvar::Variable::Variable
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Variable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    functionName: bvar::Variable::describe_series
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream&, const SeriesOptions&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/variable.h:141,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: bvar::Variable::expose
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose(const butil::StringPiece& name,\n               DisplayFilter
      display_filter = DISPLAY_ON_ALL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/variable.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 163
    functionName: bvar::Variable::expose_as
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_as(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name,\n                  DisplayFilter display_filter =
      DISPLAY_ON_ALL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: '& name() const'
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: ~Dumper()
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Dumper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' description'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: bvar::Dumper::dump_mvar
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool dump_mvar(const std::string& name,\n                           const
      butil::StringPiece& description)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: bvar::Dumper::dump_comment
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool dump_comment(const std::string&, const std::string& /*type*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: bvar::SeriesOptions
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: bvar::Variable::Variable
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Variable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    functionName: bvar::Variable::describe_series
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream&, const SeriesOptions&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/variable.h:141,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: bvar::Variable::expose
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose(const butil::StringPiece& name,\n               DisplayFilter
      display_filter = DISPLAY_ON_ALL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/variable.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 163
    functionName: bvar::Variable::expose_as
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_as(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name,\n                  DisplayFilter display_filter =
      DISPLAY_ON_ALL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: '& name() const'
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::bvar::Variable::describe
      Src: /src/brpc/src/bvar/variable.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - var
    argTypes:
    - ostream
    - ::bvar::Variable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 252
    functionName: '& operator<<(ostream &os, const ::bvar::Variable &var)'
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - ::bvar::Variable::describe
    linkageType: ''
    returnType: ostream
    signature: ostream & operator<<(ostream &os, const ::bvar::Variable &var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::bvar::Variable::describe
      Src: /src/brpc/src/bvar/variable.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - var
    argTypes:
    - ostream
    - ::bvar::Variable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 252
    functionName: '& operator<<(ostream &os, const ::bvar::Variable &var)'
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - ::bvar::Variable::describe
    linkageType: ''
    returnType: ostream
    signature: ostream & operator<<(ostream &os, const ::bvar::Variable &var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_range
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: bvar::is_sampling_range_valid
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_sampling_range_valid(size_t sampling_range)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~CollectorPreprocessor()
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CollectorPreprocessor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: ~Collected()
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Collected()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Collected::submit
      Src: /src/brpc/src/bvar/collector.h:79,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: bvar::Collected::submit
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 1
    functionsReached:
    - butil::cpuwide_time_us
    - bvar::Collected::submit
    linkageType: ''
    returnType: void
    signature: void submit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: bvar::Collected::preprocessor
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CollectorPreprocessor
    signature: CollectorPreprocessor * preprocessor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/bvar/collector.h:123,1
    - Dst: bvar::is_collectable_before_first_time_grabbed
      Src: /src/brpc/src/bvar/collector.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - speed_limit
    argTypes:
    - CollectorSpeedLimit*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 132
    functionName: bvar::is_collectable
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    - bvar::is_collectable_before_first_time_grabbed
    linkageType: ''
    returnType: size_t
    signature: size_t is_collectable(CollectorSpeedLimit* speed_limit)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_range
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: bvar::is_sampling_range_valid
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_sampling_range_valid(size_t sampling_range)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~CollectorPreprocessor()
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CollectorPreprocessor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: ~Collected()
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Collected()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Collected::submit
      Src: /src/brpc/src/bvar/collector.h:79,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: bvar::Collected::submit
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 2
    functionsReached:
    - butil::cpuwide_time_us
    - bvar::Collected::submit
    linkageType: ''
    returnType: void
    signature: void submit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: bvar::Collected::preprocessor
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CollectorPreprocessor
    signature: CollectorPreprocessor * preprocessor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/bvar/collector.h:123,1
    - Dst: bvar::is_collectable_before_first_time_grabbed
      Src: /src/brpc/src/bvar/collector.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - speed_limit
    argTypes:
    - CollectorSpeedLimit*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 132
    functionName: bvar::is_collectable
    functionSourceFile: /src/brpc/src/bvar/collector.h
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    - bvar::is_collectable_before_first_time_grabbed
    linkageType: ''
    returnType: size_t
    signature: size_t is_collectable(CollectorSpeedLimit* speed_limit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash<butil::StringPiece>
      Src: /src/brpc/src/bvar/multi_dimension.h:56,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/multi_dimension.h:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 60
    functionName: operator() (const K& key) const
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - BUTIL_HASH_NAMESPACE::hash<butil::StringPiece>
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: size_t
    signature: size_t operator() (const K& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension.h:66,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension.h:66,1
    - Dst: std::equal
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - key_type
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: operator()(const key_type& k1, const K& k2) const
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - size
    - cend
    - cbegin
    - std::equal
    linkageType: ''
    returnType: bool
    signature: bool operator()(const key_type& k1, const K& k2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dump_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: bvar::MultiDimension::dump
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - dump_impl
    linkageType: ''
    returnType: size_t
    signature: size_t dump(Dumper* dumper, const DumpOptions* options) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: bvar::MultiDimension::get_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 16
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: T
    signature: T * get_stats(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: bvar::MultiDimension::get_stats_read_only
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: T
    signature: T * get_stats_read_only(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: bvar::MultiDimension::get_stats_read_or_insert
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: T
    signature: T * get_stats_read_or_insert(const K& labels_value, bool* do_write
      = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' bg'
    - ' labels_value'
    - metric
    argTypes:
    - MetricMap
    - K
    - op_value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: bvar::MultiDimension::insert_metrics_map
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - insert
    linkageType: ''
    returnType: typename std::enable_if<butil::is_same<K, key_type>::value>::type
    signature: typename std::enable_if<butil::is_same<K, key_type>::value>::type insert_metrics_map(MetricMap&
      bg, const K& labels_value, op_value_type metric)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_type::push_back
      Src: /src/brpc/src/bvar/multi_dimension.h:164,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/multi_dimension.h:164,1
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' bg'
    - ' labels_value'
    - metric
    argTypes:
    - MetricMap
    - K
    - op_value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 167
    functionName: bvar::MultiDimension::insert_metrics_map
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - key_type::push_back
    - insert
    - std::string
    linkageType: ''
    returnType: typename std::enable_if<!butil::is_same<K, key_type>::value>::type
    signature: typename std::enable_if<!butil::is_same<K, key_type>::value>::type
      insert_metrics_map(MetricMap& bg, const K& labels_value, op_value_type metric)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - max_stats_count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    functionName: bvar::MultiDimension::set_max_stats_count
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_max_stats_count(size_t max_stats_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash<butil::StringPiece>
      Src: /src/brpc/src/bvar/multi_dimension.h:56,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/multi_dimension.h:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 60
    functionName: operator() (const K& key) const
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - BUTIL_HASH_NAMESPACE::hash<butil::StringPiece>
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: size_t
    signature: size_t operator() (const K& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension.h:66,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension.h:66,1
    - Dst: std::equal
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - key_type
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: operator()(const key_type& k1, const K& k2) const
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - size
    - cend
    - cbegin
    - std::equal
    linkageType: ''
    returnType: bool
    signature: bool operator()(const key_type& k1, const K& k2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dump_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: bvar::MultiDimension::dump
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - dump_impl
    linkageType: ''
    returnType: size_t
    signature: size_t dump(Dumper* dumper, const DumpOptions* options) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: bvar::MultiDimension::get_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 16
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: T
    signature: T * get_stats(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: bvar::MultiDimension::get_stats_read_only
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: T
    signature: T * get_stats_read_only(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: bvar::MultiDimension::get_stats_read_or_insert
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: T
    signature: T * get_stats_read_or_insert(const K& labels_value, bool* do_write
      = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' bg'
    - ' labels_value'
    - metric
    argTypes:
    - MetricMap
    - K
    - op_value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: bvar::MultiDimension::insert_metrics_map
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - insert
    linkageType: ''
    returnType: typename std::enable_if<butil::is_same<K, key_type>::value>::type
    signature: typename std::enable_if<butil::is_same<K, key_type>::value>::type insert_metrics_map(MetricMap&
      bg, const K& labels_value, op_value_type metric)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_type::push_back
      Src: /src/brpc/src/bvar/multi_dimension.h:164,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/multi_dimension.h:164,1
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' bg'
    - ' labels_value'
    - metric
    argTypes:
    - MetricMap
    - K
    - op_value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 167
    functionName: bvar::MultiDimension::insert_metrics_map
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - key_type::push_back
    - insert
    - std::string
    linkageType: ''
    returnType: typename std::enable_if<!butil::is_same<K, key_type>::value>::type
    signature: typename std::enable_if<!butil::is_same<K, key_type>::value>::type
      insert_metrics_map(MetricMap& bg, const K& labels_value, op_value_type metric)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - max_stats_count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    functionName: bvar::MultiDimension::set_max_stats_count
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_max_stats_count(size_t max_stats_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/gflag.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~GFlag()
    functionSourceFile: /src/brpc/src/bvar/gflag.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~GFlag()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/gflag.h:56,1
    - Dst: name
      Src: /src/brpc/src/bvar/gflag.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: '& gflag_name() const'
    functionSourceFile: /src/brpc/src/bvar/gflag.h
    functionUses: 0
    functionsReached:
    - name
    - empty
    linkageType: ''
    returnType: std::string
    signature: std::string & gflag_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/gflag.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~GFlag()
    functionSourceFile: /src/brpc/src/bvar/gflag.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~GFlag()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/gflag.h:56,1
    - Dst: name
      Src: /src/brpc/src/bvar/gflag.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: '& gflag_name() const'
    functionSourceFile: /src/brpc/src/bvar/gflag.h
    functionUses: 0
    functionsReached:
    - name
    - empty
    linkageType: ''
    returnType: std::string
    signature: std::string & gflag_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: bvar::MVariableBase::MVariableBase
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MVariableBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: '& name() const'
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::expose_impl
      Src: /src/brpc/src/bvar/mvariable.h:56,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/mvariable.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: bvar::MVariableBase::expose
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::MVariableBase::expose_impl
    linkageType: ''
    returnType: int
    signature: int expose(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::expose_impl
      Src: /src/brpc/src/bvar/mvariable.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: bvar::MVariableBase::expose_as
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - bvar::MVariableBase::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_as(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cbegin
      Src: /src/brpc/src/bvar/mvariable.h:119,1
    - Dst: cend
      Src: /src/brpc/src/bvar/mvariable.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' labels'
    argTypes:
    - KeyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: bvar::MVariable::MVariable
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - cbegin
    - cend
    linkageType: ''
    returnType: void
    signature: void MVariable(const KeyType& labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: '& labels() const'
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: KeyType
    signature: KeyType & labels() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: bvar::MVariable::count_labels
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t count_labels() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: bvar::MVariableBase::MVariableBase
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MVariableBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: '& name() const'
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::expose_impl
      Src: /src/brpc/src/bvar/mvariable.h:56,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/mvariable.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: bvar::MVariableBase::expose
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::MVariableBase::expose_impl
    linkageType: ''
    returnType: int
    signature: int expose(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::expose_impl
      Src: /src/brpc/src/bvar/mvariable.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: bvar::MVariableBase::expose_as
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - bvar::MVariableBase::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_as(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cbegin
      Src: /src/brpc/src/bvar/mvariable.h:119,1
    - Dst: cend
      Src: /src/brpc/src/bvar/mvariable.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' labels'
    argTypes:
    - KeyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: bvar::MVariable::MVariable
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - cbegin
    - cend
    linkageType: ''
    returnType: void
    signature: void MVariable(const KeyType& labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: '& labels() const'
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: KeyType
    signature: KeyType & labels() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: bvar::MVariable::count_labels
    functionSourceFile: /src/brpc/src/bvar/mvariable.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t count_labels() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: bvar::validator_bvar_max_multi_dimension_metric_number
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validator_bvar_max_multi_dimension_metric_number(const char*,
      int32_t v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 55
    functionName: bvar::validator_bvar_max_dump_multi_dimension_metric_number
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validator_bvar_max_dump_multi_dimension_metric_number(const char*,
      int32_t v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: bvar::validator_max_multi_dimension_stats_count
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validator_max_multi_dimension_stats_count(const char*, uint32_t
      v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: bvar::MVarEntry::MVarEntry
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MVarEntry()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/bvar/mvariable.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:86,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/mvariable.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: bvar::MVarMapWithLock
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void MVarMapWithLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MVarMapWithLock::MVarMapWithLock
      Src: /src/brpc/src/bvar/mvariable.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: bvar::init_mvar_map
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - MVarMapWithLock::MVarMapWithLock
    linkageType: ''
    returnType: void
    signature: void init_mvar_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/mvariable.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: bvar::get_mvar_map
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: MVarMapWithLock
    signature: MVarMapWithLock & get_mvar_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/mvariable.cpp:109,1
    - Dst: hide
      Src: /src/brpc/src/bvar/mvariable.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: MVariableBase::~MVariableBase()
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - hide
    linkageType: ''
    returnType: void
    signature: void MVariableBase::~MVariableBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: describe
      Src: /src/brpc/src/bvar/mvariable.cpp:115,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/mvariable.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: bvar::MVariableBase::get_description
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - describe
    - std::ostringstream::str
    linkageType: ''
    returnType: std::string
    signature: std::string MVariableBase::get_description()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:121,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:122,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:123,1
    - Dst: MVarEntry*::var::describe
      Src: /src/brpc/src/bvar/mvariable.cpp:127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - ' os'
    argTypes:
    - std::string
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 129
    functionName: bvar::MVariableBase::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 1
    functionsReached:
    - get_mvar_map
    - seek
    - MVarEntry*::var::describe
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int MVariableBase::describe_exposed(const std::string& name,\n                                std::ostream&
      os)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::describe_exposed
      Src: /src/brpc/src/bvar/mvariable.cpp:133,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/mvariable.cpp:134,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/mvariable.cpp:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 137
    functionName: bvar::MVariableBase::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 2
    functionsReached:
    - std::ostringstream::str
    - std::string
    - bvar::MVariableBase::describe_exposed
    linkageType: ''
    returnType: std::string
    signature: std::string MVariableBase::describe_exposed(const std::string& name)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:142,1
    - Dst: bvar::MVariableBase::hide
      Src: /src/brpc/src/bvar/mvariable.cpp:153,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:156,1
    - Dst: reserve
      Src: /src/brpc/src/bvar/mvariable.cpp:157,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:157,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:157,1
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:158,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/mvariable.cpp:159,1
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:160,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/mvariable.cpp:160,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/mvariable.cpp:161,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/mvariable.cpp:164,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/src/bvar/mvariable.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:167,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:171,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:173,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:174,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bvar/mvariable.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:191,1
    - Dst: bvar::MVariableBase::get_description
      Src: /src/brpc/src/bvar/mvariable.cpp:192,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:193,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 195
    functionName: bvar::MVariableBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 4
    functionsReached:
    - bvar::MVariableBase::count_exposed
    - get_mvar_map
    - butil::back_char
    - size
    - RELEASE_ASSERT_VERBOSE
    - BAIDU_SCOPED_LOCK
    - bvar::MVariableBase::hide
    - push_back
    - seek
    - empty
    - clear
    - bvar::MVariableBase::get_description
    - reserve
    - LOG
    - to_underscored_name
    linkageType: ''
    returnType: int
    signature: "int MVariableBase::expose_impl(const butil::StringPiece& prefix,\n
      \                              const butil::StringPiece& name)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:198,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:202,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:203,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:204,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/mvariable.cpp:206,1
    - Dst: erase
      Src: /src/brpc/src/bvar/mvariable.cpp:206,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/mvariable.cpp:208,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 212
    functionName: bvar::MVariableBase::hide
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 1
    functionsReached:
    - get_mvar_map
    - BAIDU_SCOPED_LOCK
    - CHECK_EQ
    - erase
    - empty
    - CHECK
    - clear
    - seek
    linkageType: ''
    returnType: bool
    signature: bool MVariableBase::hide()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:216,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:217,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 219
    functionName: bvar::MVariableBase::hide_all
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - get_mvar_map
    - clear
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void MVariableBase::hide_all()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:223,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:224,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 226
    functionName: bvar::MVariableBase::count_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 2
    functionsReached:
    - get_mvar_map
    - size
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: size_t
    signature: size_t MVariableBase::count_exposed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<std::string>*::clear
      Src: /src/brpc/src/bvar/mvariable.cpp:233,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:235,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:236,1
    - Dst: std::vector<std::string>*::reserve
      Src: /src/brpc/src/bvar/mvariable.cpp:237,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:237,1
    - Dst: begin
      Src: /src/brpc/src/bvar/mvariable.cpp:238,1
    - Dst: end
      Src: /src/brpc/src/bvar/mvariable.cpp:238,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/bvar/mvariable.cpp:239,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - names
    argTypes:
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: bvar::MVariableBase::list_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 1
    functionsReached:
    - end
    - std::vector<std::string>*::push_back
    - get_mvar_map
    - BAIDU_SCOPED_LOCK
    - std::vector<std::string>*::clear
    - begin
    - std::vector<std::string>*::reserve
    - size
    linkageType: ''
    returnType: void
    signature: void MVariableBase::list_exposed(std::vector<std::string>* names)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:245,1
    - Dst: bvar::MVariableBase::list_exposed
      Src: /src/brpc/src/bvar/mvariable.cpp:253,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:256,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:257,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:258,1
    - Dst: MVarEntry*::var::dump
      Src: /src/brpc/src/bvar/mvariable.cpp:260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/bvar/mvariable.cpp:262,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:263,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 243
    functionDepth: 2
    functionLinenumber: 243
    functionLinenumberEnd: 269
    functionName: bvar::MVariableBase::dump_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - MVarEntry*::var::dump
    - get_mvar_map
    - static_cast<size_t>
    - BAIDU_SCOPED_LOCK
    - bvar::MVariableBase::list_exposed
    - seek
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t MVariableBase::dump_exposed(Dumper* dumper, const DumpOptions*
      options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: bvar::validator_bvar_max_multi_dimension_metric_number
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validator_bvar_max_multi_dimension_metric_number(const char*,
      int32_t v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 55
    functionName: bvar::validator_bvar_max_dump_multi_dimension_metric_number
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validator_bvar_max_dump_multi_dimension_metric_number(const char*,
      int32_t v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: bvar::validator_max_multi_dimension_stats_count
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validator_max_multi_dimension_stats_count(const char*, uint32_t
      v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: bvar::MVarEntry::MVarEntry
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MVarEntry()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/bvar/mvariable.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:86,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/mvariable.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: bvar::MVarMapWithLock
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void MVarMapWithLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MVarMapWithLock::MVarMapWithLock
      Src: /src/brpc/src/bvar/mvariable.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: bvar::init_mvar_map
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - MVarMapWithLock::MVarMapWithLock
    linkageType: ''
    returnType: void
    signature: void init_mvar_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/mvariable.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: bvar::get_mvar_map
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: MVarMapWithLock
    signature: MVarMapWithLock & get_mvar_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/mvariable.cpp:109,1
    - Dst: hide
      Src: /src/brpc/src/bvar/mvariable.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: MVariableBase::~MVariableBase()
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - hide
    linkageType: ''
    returnType: void
    signature: void MVariableBase::~MVariableBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: describe
      Src: /src/brpc/src/bvar/mvariable.cpp:115,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/mvariable.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: bvar::MVariableBase::get_description
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 1
    functionsReached:
    - describe
    - std::ostringstream::str
    linkageType: ''
    returnType: std::string
    signature: std::string MVariableBase::get_description()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:121,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:122,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:123,1
    - Dst: MVarEntry*::var::describe
      Src: /src/brpc/src/bvar/mvariable.cpp:127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - ' os'
    argTypes:
    - std::string
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 129
    functionName: bvar::MVariableBase::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 2
    functionsReached:
    - get_mvar_map
    - seek
    - MVarEntry*::var::describe
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int MVariableBase::describe_exposed(const std::string& name,\n                                std::ostream&
      os)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MVariableBase::describe_exposed
      Src: /src/brpc/src/bvar/mvariable.cpp:133,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/mvariable.cpp:134,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/mvariable.cpp:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 137
    functionName: bvar::MVariableBase::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 3
    functionsReached:
    - std::ostringstream::str
    - std::string
    - bvar::MVariableBase::describe_exposed
    linkageType: ''
    returnType: std::string
    signature: std::string MVariableBase::describe_exposed(const std::string& name)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:142,1
    - Dst: bvar::MVariableBase::hide
      Src: /src/brpc/src/bvar/mvariable.cpp:153,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:156,1
    - Dst: reserve
      Src: /src/brpc/src/bvar/mvariable.cpp:157,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:157,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:157,1
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:158,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/mvariable.cpp:159,1
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:160,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/mvariable.cpp:160,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/mvariable.cpp:161,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/mvariable.cpp:164,1
    - Dst: bvar::MVariableBase::count_exposed
      Src: /src/brpc/src/bvar/mvariable.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:167,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:171,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:173,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:174,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bvar/mvariable.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:191,1
    - Dst: bvar::MVariableBase::get_description
      Src: /src/brpc/src/bvar/mvariable.cpp:192,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:193,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 195
    functionName: bvar::MVariableBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 4
    functionsReached:
    - bvar::MVariableBase::count_exposed
    - get_mvar_map
    - butil::back_char
    - size
    - RELEASE_ASSERT_VERBOSE
    - BAIDU_SCOPED_LOCK
    - bvar::MVariableBase::hide
    - push_back
    - seek
    - empty
    - clear
    - bvar::MVariableBase::get_description
    - reserve
    - LOG
    - to_underscored_name
    linkageType: ''
    returnType: int
    signature: "int MVariableBase::expose_impl(const butil::StringPiece& prefix,\n
      \                              const butil::StringPiece& name)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/mvariable.cpp:198,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:202,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:203,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:204,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/mvariable.cpp:206,1
    - Dst: erase
      Src: /src/brpc/src/bvar/mvariable.cpp:206,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/mvariable.cpp:208,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 212
    functionName: bvar::MVariableBase::hide
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 2
    functionsReached:
    - get_mvar_map
    - BAIDU_SCOPED_LOCK
    - CHECK_EQ
    - erase
    - empty
    - CHECK
    - clear
    - seek
    linkageType: ''
    returnType: bool
    signature: bool MVariableBase::hide()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:216,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:217,1
    - Dst: clear
      Src: /src/brpc/src/bvar/mvariable.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 219
    functionName: bvar::MVariableBase::hide_all
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - get_mvar_map
    - clear
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void MVariableBase::hide_all()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:223,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:224,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 226
    functionName: bvar::MVariableBase::count_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 3
    functionsReached:
    - get_mvar_map
    - size
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: size_t
    signature: size_t MVariableBase::count_exposed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<std::string>*::clear
      Src: /src/brpc/src/bvar/mvariable.cpp:233,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:235,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:236,1
    - Dst: std::vector<std::string>*::reserve
      Src: /src/brpc/src/bvar/mvariable.cpp:237,1
    - Dst: size
      Src: /src/brpc/src/bvar/mvariable.cpp:237,1
    - Dst: begin
      Src: /src/brpc/src/bvar/mvariable.cpp:238,1
    - Dst: end
      Src: /src/brpc/src/bvar/mvariable.cpp:238,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/bvar/mvariable.cpp:239,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - names
    argTypes:
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: bvar::MVariableBase::list_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 2
    functionsReached:
    - end
    - std::vector<std::string>*::push_back
    - get_mvar_map
    - BAIDU_SCOPED_LOCK
    - std::vector<std::string>*::clear
    - begin
    - std::vector<std::string>*::reserve
    - size
    linkageType: ''
    returnType: void
    signature: void MVariableBase::list_exposed(std::vector<std::string>* names)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:245,1
    - Dst: bvar::MVariableBase::list_exposed
      Src: /src/brpc/src/bvar/mvariable.cpp:253,1
    - Dst: get_mvar_map
      Src: /src/brpc/src/bvar/mvariable.cpp:256,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/mvariable.cpp:257,1
    - Dst: seek
      Src: /src/brpc/src/bvar/mvariable.cpp:258,1
    - Dst: MVarEntry*::var::dump
      Src: /src/brpc/src/bvar/mvariable.cpp:260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/bvar/mvariable.cpp:262,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/mvariable.cpp:263,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 243
    functionDepth: 2
    functionLinenumber: 243
    functionLinenumberEnd: 269
    functionName: bvar::MVariableBase::dump_exposed
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - MVarEntry*::var::dump
    - get_mvar_map
    - static_cast<size_t>
    - BAIDU_SCOPED_LOCK
    - bvar::MVariableBase::list_exposed
    - seek
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t MVariableBase::dump_exposed(Dumper* dumper, const DumpOptions*
      options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::expose
      Src: /src/brpc/src/bvar/status.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached:
    - bvar::Status::expose
    linkageType: ''
    returnType: void
    signature: void Status(const butil::StringPiece& name, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/src/bvar/status.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached:
    - bvar::Status::expose_as
    linkageType: ''
    returnType: void
    signature: "void Status(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, const T& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/status.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/status.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: bvar::Status::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: bvar::Status::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    functionName: bvar::Status::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: bvar::Status::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: operator()(T&, const T&) const
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(T&, const T&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/status.h:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - Status*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 99
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(Status* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/status.h:100,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/status.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::describe
      Src: /src/brpc/src/bvar/status.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 1
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose
      Src: /src/brpc/src/bvar/status.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose
    linkageType: ''
    returnType: void
    signature: void Status(const butil::StringPiece& name, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose_as
      Src: /src/brpc/src/bvar/status.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 118
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose_as
    linkageType: ''
    returnType: void
    signature: "void Status(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, const T& value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/status.h:120,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/status.h:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 125
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
      Src: /src/brpc/src/bvar/status.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 129
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
      Src: /src/brpc/src/bvar/status.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 2
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bvar/status.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bvar/status.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void set_value(const T& value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe
      Src: /src/brpc/src/bvar/status.h:150,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 153
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe_series
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/status.h:159,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/status.h:163,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/status.h:164,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 167
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose_impl
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 178
    functionName: bvar::Status<std::string, void>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/bvar/status.h:182,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/bvar/status.h:183,1
    - Dst: va_end
      Src: /src/brpc/src/bvar/status.h:184,1
    - Dst: expose
      Src: /src/brpc/src/bvar/status.h:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - fmt
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 187
    functionName: bvar::Status<std::string, void>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - expose
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: void
    signature: void Status(const butil::StringPiece& name, const char* fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/bvar/status.h:192,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/bvar/status.h:193,1
    - Dst: va_end
      Src: /src/brpc/src/bvar/status.h:194,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/status.h:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - fmt
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 197
    functionName: bvar::Status<std::string, void>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - va_start
    - expose_as
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: void
    signature: "void Status(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, const char* fmt, ...)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/status.h:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<std::string, void>::get_value
      Src: /src/brpc/src/bvar/status.h:203,1
    - Dst: bvar::Status<std::string, void>::get_value
      Src: /src/brpc/src/bvar/status.h:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 207
    functionName: bvar::Status<std::string, void>::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<std::string, void>::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 212
    functionName: bvar::Status<std::string, void>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<std::string, void>::get_value
      Src: /src/brpc/src/bvar/status.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: bvar::Status<std::string, void>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 2
    functionsReached:
    - bvar::Status<std::string, void>::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/bvar/status.h:222,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/bvar/status.h:225,1
    - Dst: va_end
      Src: /src/brpc/src/bvar/status.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 228
    functionName: bvar::Status<std::string, void>::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: void
    signature: void set_value(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: bvar::Status<std::string, void>::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::expose
      Src: /src/brpc/src/bvar/status.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached:
    - bvar::Status::expose
    linkageType: ''
    returnType: void
    signature: void Status(const butil::StringPiece& name, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::expose_as
      Src: /src/brpc/src/bvar/status.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: bvar::Status::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached:
    - bvar::Status::expose_as
    linkageType: ''
    returnType: void
    signature: "void Status(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, const T& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/status.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/status.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: bvar::Status::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: bvar::Status::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    functionName: bvar::Status::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: bvar::Status::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: operator()(T&, const T&) const
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(T&, const T&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/status.h:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - Status*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 99
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(Status* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/status.h:100,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/status.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::describe
      Src: /src/brpc/src/bvar/status.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 2
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose
      Src: /src/brpc/src/bvar/status.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose
    linkageType: ''
    returnType: void
    signature: void Status(const butil::StringPiece& name, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose_as
      Src: /src/brpc/src/bvar/status.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 118
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose_as
    linkageType: ''
    returnType: void
    signature: "void Status(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, const T& value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/status.h:120,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/status.h:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 125
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
      Src: /src/brpc/src/bvar/status.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 2
    functionLinenumber: 127
    functionLinenumberEnd: 129
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 1
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
      Src: /src/brpc/src/bvar/status.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 4
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bvar/status.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 4
    functionsReached:
    - load
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bvar/status.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void set_value(const T& value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe
      Src: /src/brpc/src/bvar/status.h:150,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 153
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe_series
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/status.h:159,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/status.h:163,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/status.h:164,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 167
    functionName: bvar::Status<T, typename butil::enable_if<detail::is_atomical<T>::value>::type>::expose_impl
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 178
    functionName: bvar::Status<std::string, void>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/bvar/status.h:182,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/bvar/status.h:183,1
    - Dst: va_end
      Src: /src/brpc/src/bvar/status.h:184,1
    - Dst: expose
      Src: /src/brpc/src/bvar/status.h:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - fmt
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 187
    functionName: bvar::Status<std::string, void>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - expose
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: void
    signature: void Status(const butil::StringPiece& name, const char* fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/bvar/status.h:192,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/bvar/status.h:193,1
    - Dst: va_end
      Src: /src/brpc/src/bvar/status.h:194,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/status.h:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - fmt
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 197
    functionName: bvar::Status<std::string, void>::Status
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - va_start
    - expose_as
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: void
    signature: "void Status(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, const char* fmt, ...)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/status.h:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<std::string, void>::get_value
      Src: /src/brpc/src/bvar/status.h:203,1
    - Dst: bvar::Status<std::string, void>::get_value
      Src: /src/brpc/src/bvar/status.h:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 207
    functionName: bvar::Status<std::string, void>::describe
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - bvar::Status<std::string, void>::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 212
    functionName: bvar::Status<std::string, void>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status<std::string, void>::get_value
      Src: /src/brpc/src/bvar/status.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: bvar::Status<std::string, void>::get_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 4
    functionsReached:
    - bvar::Status<std::string, void>::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/bvar/status.h:222,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/bvar/status.h:225,1
    - Dst: va_end
      Src: /src/brpc/src/bvar/status.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 228
    functionName: bvar::Status<std::string, void>::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached:
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: void
    signature: void set_value(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: bvar::Status<std::string, void>::set_value
    functionSourceFile: /src/brpc/src/bvar/status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/src/bvar/vector.h:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: bvar::Vector::Vector
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached:
    - T
    linkageType: ''
    returnType: void
    signature: void Vector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' initial_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 46
    functionName: bvar::Vector::Vector
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Vector(const T& initial_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: operator+=(const Vector& rhs)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const Vector& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: operator-=(const Vector& rhs)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator-=(const Vector& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' scalar'
    argTypes:
    - S
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: operator*=(const S& scalar)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator*=(const S& scalar)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' scalar'
    argTypes:
    - S
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: operator/=(const S& scalar)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator/=(const S& scalar)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: operator==(const Vector& rhs) const
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const Vector& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: operator!=(const Vector& rhs) const
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const Vector& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: '& operator[](int index)'
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator[](int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: '& operator[](int index) const'
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator[](int index) const
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' vec'
    argTypes:
    - std::ostream
    - Vector<T, N>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 111
    functionName: '& operator<<(std::ostream& os, const Vector<T, N>& vec)'
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Vector<T, N>& vec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/src/bvar/vector.h:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: bvar::Vector::Vector
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached:
    - T
    linkageType: ''
    returnType: void
    signature: void Vector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' initial_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 46
    functionName: bvar::Vector::Vector
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Vector(const T& initial_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: operator+=(const Vector& rhs)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const Vector& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: operator-=(const Vector& rhs)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator-=(const Vector& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' scalar'
    argTypes:
    - S
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: operator*=(const S& scalar)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator*=(const S& scalar)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' scalar'
    argTypes:
    - S
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: operator/=(const S& scalar)
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator/=(const S& scalar)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: operator==(const Vector& rhs) const
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const Vector& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Vector
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: operator!=(const Vector& rhs) const
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const Vector& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: '& operator[](int index)'
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator[](int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: '& operator[](int index) const'
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator[](int index) const
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' vec'
    argTypes:
    - std::ostream
    - Vector<T, N>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 111
    functionName: '& operator<<(std::ostream& os, const Vector<T, N>& vec)'
    functionSourceFile: /src/brpc/src/bvar/vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Vector<T, N>& vec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::LatencyRecorderBase::window_size
      Src: /src/brpc/src/bvar/latency_recorder.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: bvar::detail::LatencyRecorderBase::window_size
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 1
    functionsReached:
    - bvar::detail::LatencyRecorderBase::window_size
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::LatencyRecorderBase::window_size
      Src: /src/brpc/src/bvar/latency_recorder.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: bvar::detail::LatencyRecorderBase::window_size
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 2
    functionsReached:
    - bvar::detail::LatencyRecorderBase::window_size
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 82
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - window_size
    argTypes:
    - butil::StringPiece
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: "void LatencyRecorder(const butil::StringPiece& prefix,\n                    time_t
      window_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix1'
    - ' prefix2'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: "void LatencyRecorder(const butil::StringPiece& prefix1,\n                    const
      butil::StringPiece& prefix2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix1'
    - ' prefix2'
    - window_size
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: "void LatencyRecorder(const butil::StringPiece& prefix1,\n                    const
      butil::StringPiece& prefix2,\n                    time_t window_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/latency_recorder.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: ~LatencyRecorder()
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~LatencyRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:115,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/latency_recorder.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: bvar::LatencyRecorder::expose
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 11
    functionsReached:
    - bvar::LatencyRecorder::expose
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: int
    signature: int expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: bvar::LatencyRecorder::latency
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t latency(time_t window_size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: bvar::LatencyRecorder::latency
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t latency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: bvar::LatencyRecorder::max_latency
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t max_latency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: bvar::LatencyRecorder::count
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 2
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: bvar::LatencyRecorder::qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t qps() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 150
    functionName: '& latency_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & latency_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 152
    functionName: '& latency_percentiles_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & latency_percentiles_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: '& latency_cdf_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & latency_cdf_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 155
    functionName: '& max_latency_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & max_latency_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& count_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & count_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: '& qps_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & qps_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::LatencyRecorderBase::window_size
      Src: /src/brpc/src/bvar/latency_recorder.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: bvar::detail::LatencyRecorderBase::window_size
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 3
    functionsReached:
    - bvar::detail::LatencyRecorderBase::window_size
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::LatencyRecorderBase::window_size
      Src: /src/brpc/src/bvar/latency_recorder.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: bvar::detail::LatencyRecorderBase::window_size
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 4
    functionsReached:
    - bvar::detail::LatencyRecorderBase::window_size
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 82
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - window_size
    argTypes:
    - butil::StringPiece
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: "void LatencyRecorder(const butil::StringPiece& prefix,\n                    time_t
      window_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix1'
    - ' prefix2'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: "void LatencyRecorder(const butil::StringPiece& prefix1,\n                    const
      butil::StringPiece& prefix2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix1'
    - ' prefix2'
    - window_size
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: bvar::LatencyRecorder::LatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 6
    functionsReached:
    - bvar::LatencyRecorder::expose
    linkageType: ''
    returnType: void
    signature: "void LatencyRecorder(const butil::StringPiece& prefix1,\n                    const
      butil::StringPiece& prefix2,\n                    time_t window_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/latency_recorder.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: ~LatencyRecorder()
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~LatencyRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/src/bvar/latency_recorder.h:115,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/latency_recorder.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: bvar::LatencyRecorder::expose
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 16
    functionsReached:
    - bvar::LatencyRecorder::expose
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: int
    signature: int expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: bvar::LatencyRecorder::latency
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t latency(time_t window_size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: bvar::LatencyRecorder::latency
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t latency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: bvar::LatencyRecorder::max_latency
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t max_latency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: bvar::LatencyRecorder::count
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 2
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_value
      Src: /src/brpc/src/bvar/latency_recorder.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: bvar::LatencyRecorder::qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t qps() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 150
    functionName: '& latency_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & latency_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 152
    functionName: '& latency_percentiles_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & latency_percentiles_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: '& latency_cdf_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & latency_cdf_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 155
    functionName: '& max_latency_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & max_latency_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& count_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & count_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/bvar/latency_recorder.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: '& qps_name() const'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.h
    functionUses: 0
    functionsReached:
    - name
    linkageType: ''
    returnType: std::string
    signature: std::string & qps_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/scoped_timer.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' bvar'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: bvar::ScopedTimer::ScopedTimer
    functionSourceFile: /src/brpc/src/bvar/scoped_timer.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void ScopedTimer(T& bvar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/scoped_timer.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: ~ScopedTimer()
    functionSourceFile: /src/brpc/src/bvar/scoped_timer.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void ~ScopedTimer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/scoped_timer.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: bvar::ScopedTimer::reset
    functionSourceFile: /src/brpc/src/bvar/scoped_timer.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/scoped_timer.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' bvar'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: bvar::ScopedTimer::ScopedTimer
    functionSourceFile: /src/brpc/src/bvar/scoped_timer.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void ScopedTimer(T& bvar)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/scoped_timer.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: ~ScopedTimer()
    functionSourceFile: /src/brpc/src/bvar/scoped_timer.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void ~ScopedTimer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/scoped_timer.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: bvar::ScopedTimer::reset
    functionSourceFile: /src/brpc/src/bvar/scoped_timer.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: bvar::Stat
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Stat()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - sum2
    - num2
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: bvar::Stat
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Stat(int64_t sum2, int64_t num2)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: bvar::get_average_int
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_average_int() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: bvar::get_average_double
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double get_average_double() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Stat
      Src: /src/brpc/src/bvar/recorder.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: operator-(const Stat& rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - bvar::Stat
    linkageType: ''
    returnType: Stat
    signature: Stat operator-(const Stat& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: operator-=(const Stat& rhs)
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator-=(const Stat& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Stat
      Src: /src/brpc/src/bvar/recorder.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: operator+(const Stat& rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - bvar::Stat
    linkageType: ''
    returnType: Stat
    signature: Stat operator+(const Stat& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: operator+=(const Stat& rhs)
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const Stat& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_average_int
      Src: /src/brpc/src/bvar/recorder.h:71,1
    - Dst: get_average_double
      Src: /src/brpc/src/bvar/recorder.h:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 77
    functionName: '& operator<<(std::ostream& os, const Stat& s)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - get_average_int
    - get_average_double
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Stat& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - Stat
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: operator()(Stat& s1, const Stat& s2) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(Stat& s1, const Stat& s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - Stat
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: operator()(Stat& s1, const Stat& s2) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(Stat& s1, const Stat& s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _extend_sign_bit
      Src: /src/brpc/src/bvar/recorder.h:110,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:110,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Stat
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 112
    functionName: operator()(Stat& lhs, uint64_t rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - _get_num
    - _extend_sign_bit
    - _get_sum
    linkageType: ''
    returnType: void
    signature: void operator()(Stat& lhs, uint64_t rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/recorder.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 119
    functionName: bvar::IntRecorder::IntRecorder
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - std::make_shared<combiner_type>
    linkageType: ''
    returnType: void
    signature: void IntRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/recorder.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: bvar::IntRecorder::IntRecorder
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: void IntRecorder(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/bvar/recorder.h:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: bvar::IntRecorder::IntRecorder
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - expose_as
    linkageType: ''
    returnType: void
    signature: void IntRecorder(const butil::StringPiece& prefix, const butil::StringPiece&
      name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/recorder.h:131,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/recorder.h:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 136
    functionName: ~IntRecorder() override
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~IntRecorder() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/recorder.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: int64_t
    signature: int64_t average() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/recorder.h:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: double
    signature: double average(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/recorder.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 151
    functionName: bvar::IntRecorder::get_value
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: Stat
    signature: Stat get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/recorder.h:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 155
    functionName: bvar::IntRecorder::reset
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: Stat
    signature: Stat reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddStat
      Src: /src/brpc/src/bvar/recorder.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: bvar::IntRecorder::op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - AddStat
    linkageType: ''
    returnType: AddStat
    signature: AddStat op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MinusStat
      Src: /src/brpc/src/bvar/recorder.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: bvar::IntRecorder::inv_op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - MinusStat
    linkageType: ''
    returnType: MinusStat
    signature: MinusStat inv_op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 162
    functionName: bvar::IntRecorder::describe
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/src/bvar/recorder.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 164
    functionName: bvar::IntRecorder::valid
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/recorder.h:168,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/recorder.h:169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 172
    functionName: bvar::IntRecorder::get_sampler
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/bvar/recorder.h:177,1
    - Dst: data
      Src: /src/brpc/src/bvar/recorder.h:177,1
    - Dst: size
      Src: /src/brpc/src/bvar/recorder.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: bvar::IntRecorder::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached:
    - size
    - assign
    - data
    linkageType: ''
    returnType: void
    signature: void set_debug_name(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: bvar::IntRecorder::_get_sum
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _get_sum(const uint64_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: bvar::IntRecorder::_get_num
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _get_num(const uint64_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sum
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: bvar::IntRecorder::_extend_sign_bit
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t _extend_sign_bit(const uint64_t sum)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: bvar::IntRecorder::_get_complement
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _get_complement(int64_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - num
    - sum
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 212
    functionName: bvar::IntRecorder::_compress
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _compress(const uint64_t num, const uint64_t sum)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - int64_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 231
    functionName: bvar::IntRecorder::_will_overflow
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool _will_overflow(const int64_t lhs, const int rhs)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:240,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:242,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:244,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/recorder.h:247,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:251,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:252,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:252,1
    - Dst: empty
      Src: /src/brpc/src/bvar/recorder.h:254,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:255,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:258,1
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/recorder.h:262,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:263,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:264,1
    - Dst: agent_type*::element::load
      Src: /src/brpc/src/bvar/recorder.h:268,1
    - Dst: _get_complement
      Src: /src/brpc/src/bvar/recorder.h:269,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:273,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:274,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:275,1
    - Dst: _will_overflow
      Src: /src/brpc/src/bvar/recorder.h:276,1
    - Dst: _extend_sign_bit
      Src: /src/brpc/src/bvar/recorder.h:276,1
    - Dst: commit_and_clear
      Src: /src/brpc/src/bvar/recorder.h:280,1
    - Dst: agent_type*::element::compare_exchange_weak
      Src: /src/brpc/src/bvar/recorder.h:285,1
    - Dst: _compress
      Src: /src/brpc/src/bvar/recorder.h:286,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 1
    argNames:
    - sample
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 288
    functionName: '& IntRecorder::operator<<(int64_t sample)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - name
    - butil::BaseIteratorRangeToNumberTraits::max
    - _get_sum
    - _get_num
    - _extend_sign_bit
    - agent_type*::element::compare_exchange_weak
    - brpc::GetJsService::jquery_min
    - commit_and_clear
    - agent_type*::element::load
    - empty
    - get_or_create_tls_agent
    - _compress
    - BAIDU_UNLIKELY
    - _will_overflow
    - LOG
    - _get_complement
    linkageType: ''
    returnType: IntRecorder
    signature: IntRecorder & IntRecorder::operator<<(int64_t sample)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: bvar::Stat
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Stat()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - sum2
    - num2
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: bvar::Stat
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Stat(int64_t sum2, int64_t num2)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: bvar::get_average_int
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_average_int() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: bvar::get_average_double
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double get_average_double() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stat
      Src: /src/brpc/src/bvar/recorder.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: operator-(const Stat& rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - Stat
    linkageType: ''
    returnType: Stat
    signature: Stat operator-(const Stat& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: operator-=(const Stat& rhs)
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator-=(const Stat& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stat
      Src: /src/brpc/src/bvar/recorder.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: operator+(const Stat& rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - Stat
    linkageType: ''
    returnType: Stat
    signature: Stat operator+(const Stat& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: operator+=(const Stat& rhs)
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const Stat& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_average_int
      Src: /src/brpc/src/bvar/recorder.h:71,1
    - Dst: get_average_double
      Src: /src/brpc/src/bvar/recorder.h:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 77
    functionName: '& operator<<(std::ostream& os, const Stat& s)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - get_average_int
    - get_average_double
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Stat& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - Stat
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: operator()(Stat& s1, const Stat& s2) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(Stat& s1, const Stat& s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - Stat
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: operator()(Stat& s1, const Stat& s2) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(Stat& s1, const Stat& s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _extend_sign_bit
      Src: /src/brpc/src/bvar/recorder.h:110,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:110,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Stat
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 112
    functionName: operator()(Stat& lhs, uint64_t rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - _get_num
    - _extend_sign_bit
    - _get_sum
    linkageType: ''
    returnType: void
    signature: void operator()(Stat& lhs, uint64_t rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/recorder.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 119
    functionName: bvar::IntRecorder::IntRecorder
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - std::make_shared<combiner_type>
    linkageType: ''
    returnType: void
    signature: void IntRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/recorder.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: bvar::IntRecorder::IntRecorder
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: void IntRecorder(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/bvar/recorder.h:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: bvar::IntRecorder::IntRecorder
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached:
    - expose_as
    linkageType: ''
    returnType: void
    signature: void IntRecorder(const butil::StringPiece& prefix, const butil::StringPiece&
      name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/recorder.h:131,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/recorder.h:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 136
    functionName: ~IntRecorder() override
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~IntRecorder() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/recorder.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: int64_t
    signature: int64_t average() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/recorder.h:146,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: double
    signature: double average(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/recorder.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 151
    functionName: bvar::IntRecorder::get_value
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 1
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: Stat
    signature: Stat get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/recorder.h:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 155
    functionName: bvar::IntRecorder::reset
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: Stat
    signature: Stat reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddStat
      Src: /src/brpc/src/bvar/recorder.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: bvar::IntRecorder::op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - AddStat
    linkageType: ''
    returnType: AddStat
    signature: AddStat op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MinusStat
      Src: /src/brpc/src/bvar/recorder.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: bvar::IntRecorder::inv_op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - MinusStat
    linkageType: ''
    returnType: MinusStat
    signature: MinusStat inv_op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 162
    functionName: bvar::IntRecorder::describe
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/src/bvar/recorder.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 164
    functionName: bvar::IntRecorder::valid
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 14
    functionsReached:
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/recorder.h:168,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/recorder.h:169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 172
    functionName: bvar::IntRecorder::get_sampler
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/bvar/recorder.h:177,1
    - Dst: data
      Src: /src/brpc/src/bvar/recorder.h:177,1
    - Dst: size
      Src: /src/brpc/src/bvar/recorder.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: bvar::IntRecorder::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached:
    - size
    - assign
    - data
    linkageType: ''
    returnType: void
    signature: void set_debug_name(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: bvar::IntRecorder::_get_sum
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _get_sum(const uint64_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: bvar::IntRecorder::_get_num
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _get_num(const uint64_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sum
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: bvar::IntRecorder::_extend_sign_bit
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t _extend_sign_bit(const uint64_t sum)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: bvar::IntRecorder::_get_complement
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _get_complement(int64_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - num
    - sum
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 212
    functionName: bvar::IntRecorder::_compress
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _compress(const uint64_t num, const uint64_t sum)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - int64_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 231
    functionName: bvar::IntRecorder::_will_overflow
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool _will_overflow(const int64_t lhs, const int rhs)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:240,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:242,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:244,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/recorder.h:247,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:251,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:252,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:252,1
    - Dst: empty
      Src: /src/brpc/src/bvar/recorder.h:254,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:255,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:258,1
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/recorder.h:262,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:263,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:264,1
    - Dst: agent_type*::element::load
      Src: /src/brpc/src/bvar/recorder.h:268,1
    - Dst: _get_complement
      Src: /src/brpc/src/bvar/recorder.h:269,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:273,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:274,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:275,1
    - Dst: _will_overflow
      Src: /src/brpc/src/bvar/recorder.h:276,1
    - Dst: _extend_sign_bit
      Src: /src/brpc/src/bvar/recorder.h:276,1
    - Dst: commit_and_clear
      Src: /src/brpc/src/bvar/recorder.h:280,1
    - Dst: agent_type*::element::compare_exchange_weak
      Src: /src/brpc/src/bvar/recorder.h:285,1
    - Dst: _compress
      Src: /src/brpc/src/bvar/recorder.h:286,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 1
    argNames:
    - sample
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 288
    functionName: '& IntRecorder::operator<<(int64_t sample)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - name
    - butil::BaseIteratorRangeToNumberTraits::max
    - _get_sum
    - _get_num
    - _extend_sign_bit
    - agent_type*::element::compare_exchange_weak
    - brpc::GetJsService::jquery_min
    - commit_and_clear
    - agent_type*::element::load
    - empty
    - get_or_create_tls_agent
    - _compress
    - BAIDU_UNLIKELY
    - _will_overflow
    - LOG
    - _get_complement
    linkageType: ''
    returnType: IntRecorder
    signature: IntRecorder & IntRecorder::operator<<(int64_t sample)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - member
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 46
    functionName: BVAR_MEMBER_TYPE
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_MEMBER_TYPE(member)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ProcStat
      Src: /src/brpc/src/bvar/default_variables.cpp:75,1
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:82,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:85,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:95,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:101,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:102,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:105,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:109,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:112,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:113,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:113,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:117,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 124
    functionName: bvar::read_proc_status
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - ProcStat
    - memset
    - fscanf
    - PLOG_ONCE
    - getpid
    - snprintf
    - sscanf
    - c_str
    - butil::read_command_output
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool read_proc_status(ProcStat &stat)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/default_variables.cpp:131,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/default_variables.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: bvar::CachedReader::CachedReader
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void CachedReader()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/default_variables.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: ~CachedReader()
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~CachedReader()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<CachedReader>
      Src: /src/brpc/src/bvar/default_variables.cpp:144,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/default_variables.cpp:145,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:147,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:150,1
    - Dst: fn
      Src: /src/brpc/src/bvar/default_variables.cpp:154,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:155,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:158,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - ReadFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 164
    functionName: bvar::CachedReader::get_value
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - fn
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::get_leaky_singleton<CachedReader>
    linkageType: ''
    returnType: T
    signature: T & get_value(const ReadFn& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::read_proc_status
      Src: /src/brpc/src/bvar/default_variables.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 174
    functionDepth: 2
    functionLinenumber: 174
    functionLinenumberEnd: 176
    functionName: operator()(ProcStat* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_proc_status
    linkageType: ''
    returnType: bool
    signature: bool operator()(ProcStat* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:179,1
    - Dst: ProcStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 181
    functionName: bvar::ProcStatReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - ProcStatReader
    - bvar::Status::get_value
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 188
    functionName: BVAR_DEFINE_PROC_STAT_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_STAT_FIELD(field)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 194
    functionName: BVAR_DEFINE_PROC_STAT_FIELD2
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_STAT_FIELD2(field, name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ProcMemory
      Src: /src/brpc/src/bvar/default_variables.cpp:208,1
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:213,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:216,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:219,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:225,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:226,1
    - Dst: getpagesize
      Src: /src/brpc/src/bvar/default_variables.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:230,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:232,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:235,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:236,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:236,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:237,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - m
    argTypes:
    - ProcMemory
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 247
    functionName: bvar::read_proc_memory
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - ProcMemory
    - memset
    - fscanf
    - PLOG_ONCE
    - getpid
    - snprintf
    - sscanf
    - c_str
    - butil::read_command_output
    - getpagesize
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool read_proc_memory(ProcMemory &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::read_proc_memory
      Src: /src/brpc/src/bvar/default_variables.cpp:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcMemory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 251
    functionDepth: 2
    functionLinenumber: 251
    functionLinenumberEnd: 253
    functionName: operator()(ProcMemory* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_proc_memory
    linkageType: ''
    returnType: bool
    signature: bool operator()(ProcMemory* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: getpagesize
      Src: /src/brpc/src/bvar/default_variables.cpp:256,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:257,1
    - Dst: ProcMemoryReader
      Src: /src/brpc/src/bvar/default_variables.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 259
    functionName: bvar::ProcMemoryReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - ProcMemoryReader
    - bvar::Status::get_value
    - getpagesize
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 267
    functionName: BVAR_DEFINE_PROC_MEMORY_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_MEMORY_FIELD(field, name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:280,1
    - Dst: LoadAverage
      Src: /src/brpc/src/bvar/default_variables.cpp:283,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:285,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:287,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:294,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:297,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:298,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:298,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:300,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - m
    argTypes:
    - LoadAverage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 308
    functionName: bvar::read_load_average
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - fscanf
    - PLOG_ONCE
    - sscanf
    - c_str
    - butil::read_command_output
    - LoadAverage
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool read_load_average(LoadAverage &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::read_load_average
      Src: /src/brpc/src/bvar/default_variables.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - LoadAverage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 312
    functionDepth: 2
    functionLinenumber: 312
    functionLinenumberEnd: 314
    functionName: operator()(LoadAverage* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_load_average
    linkageType: ''
    returnType: bool
    signature: bool operator()(LoadAverage* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:317,1
    - Dst: LoadAverageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 319
    functionName: bvar::LoadAverageReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - LoadAverageReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 327
    functionName: BVAR_DEFINE_LOAD_AVERAGE_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_LOAD_AVERAGE_FIELD(field, name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::DirReaderPosix::IsValid
      Src: /src/brpc/src/bvar/default_variables.cpp:334,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:335,1
    - Dst: butil::DirReaderPosix::Next
      Src: /src/brpc/src/bvar/default_variables.cpp:340,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - limit
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 330
    functionDepth: 1
    functionLinenumber: 330
    functionLinenumberEnd: 369
    functionName: bvar::get_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::DirReaderPosix::IsValid
    - PLOG
    - butil::DirReaderPosix::Next
    linkageType: ''
    returnType: int
    signature: int get_fd_count(int limit)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bvar/default_variables.cpp:378,1
    - Dst: bvar::get_fd_count
      Src: /src/brpc/src/bvar/default_variables.cpp:382,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/default_variables.cpp:387,1
    - Dst: hide
      Src: /src/brpc/src/bvar/default_variables.cpp:390,1
    - Dst: expose
      Src: /src/brpc/src/bvar/default_variables.cpp:391,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 395
    functionName: operator()(int* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::get_fd_count
    - load
    - expose
    - hide
    - exchange
    linkageType: ''
    returnType: bool
    signature: bool operator()(int* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:399,1
    - Dst: FdReader
      Src: /src/brpc/src/bvar/default_variables.cpp:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 400
    functionName: bvar::print_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - FdReader
    linkageType: ''
    returnType: int
    signature: int print_fd_count(void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:433,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:437,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:441,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:448,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:449,1
    - Dst: proc_pid_rusage
      Src: /src/brpc/src/bvar/default_variables.cpp:451,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:452,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 1
    argNames:
    - s
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 461
    functionName: bvar::read_proc_io
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - proc_pid_rusage
    - memset
    - fscanf
    - PLOG_ONCE
    - getpid
    - PLOG
    linkageType: ''
    returnType: bool
    signature: bool read_proc_io(ProcIO* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::read_proc_io
      Src: /src/brpc/src/bvar/default_variables.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 465
    functionDepth: 2
    functionLinenumber: 465
    functionLinenumberEnd: 467
    functionName: operator()(ProcIO* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_proc_io
    linkageType: ''
    returnType: bool
    signature: bool operator()(ProcIO* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:470,1
    - Dst: ProcIOReader
      Src: /src/brpc/src/bvar/default_variables.cpp:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 472
    functionName: bvar::ProcIOReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - ProcIOReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 479
    functionName: BVAR_DEFINE_PROC_IO_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_IO_FIELD(field)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:541,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:545,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:561,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 537
    functionDepth: 1
    functionLinenumber: 537
    functionLinenumberEnd: 571
    functionName: bvar::read_disk_stat
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - PLOG_ONCE
    - PLOG
    - fscanf
    linkageType: ''
    returnType: bool
    signature: bool read_disk_stat(DiskStat* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::read_disk_stat
      Src: /src/brpc/src/bvar/default_variables.cpp:576,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 575
    functionDepth: 2
    functionLinenumber: 575
    functionLinenumberEnd: 577
    functionName: operator()(DiskStat* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_disk_stat
    linkageType: ''
    returnType: bool
    signature: bool operator()(DiskStat* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:580,1
    - Dst: DiskStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:581,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 582
    functionName: bvar::DiskStatReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - DiskStatReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 589
    functionName: BVAR_DEFINE_DISK_STAT_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_DISK_STAT_FIELD(field)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadCommandLine
      Src: /src/brpc/src/bvar/default_variables.cpp:596,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:597,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 598
    functionName: bvar::ReadSelfCmdline
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::ReadCommandLine
    linkageType: ''
    returnType: void
    signature: void ReadSelfCmdline()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ReadSelfCmdline>
      Src: /src/brpc/src/bvar/default_variables.cpp:601,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 602
    functionName: bvar::get_cmdline
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ReadSelfCmdline>
    linkageType: ''
    returnType: void
    signature: void get_cmdline(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:608,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:609,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:612,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:612,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 613
    functionName: bvar::ReadVersion
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - append
    - std::ostringstream::str
    - butil::read_command_output
    - LOG
    linkageType: ''
    returnType: void
    signature: void ReadVersion()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ReadVersion>
      Src: /src/brpc/src/bvar/default_variables.cpp:616,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 617
    functionName: bvar::get_kernel_version
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ReadVersion>
    linkageType: ''
    returnType: void
    signature: void get_kernel_version(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/default_variables.cpp:624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 629
    functionName: bvar::get_uptime
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: timeval
    signature: timeval get_uptime(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getrusage
      Src: /src/brpc/src/bvar/default_variables.cpp:636,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - stat
    argTypes:
    - rusage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 635
    functionDepth: 1
    functionLinenumber: 635
    functionLinenumberEnd: 642
    functionName: operator()(rusage* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - getrusage
    linkageType: ''
    returnType: bool
    signature: bool operator()(rusage* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:645,1
    - Dst: RUsageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:646,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 647
    functionName: bvar::RUsageReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - RUsageReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 655
    functionName: BVAR_DEFINE_RUSAGE_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_RUSAGE_FIELD(field)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 661
    functionName: BVAR_DEFINE_RUSAGE_FIELD2
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_RUSAGE_FIELD2(field, name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getlogin_r
      Src: /src/brpc/src/bvar/default_variables.cpp:669,1
    - Dst: berror
      Src: /src/brpc/src/bvar/default_variables.cpp:673,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 667
    functionDepth: 1
    functionLinenumber: 667
    functionLinenumberEnd: 675
    functionName: bvar::get_username
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - berror
    - getlogin_r
    linkageType: ''
    returnType: void
    signature: void get_username(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sysconf
      Src: /src/brpc/src/bvar/default_variables.cpp:727,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 728
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 728
    functionName: bvar::get_core_num
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - sysconf
    linkageType: ''
    returnType: int
    signature: int get_core_num(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 738
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 738
    functionName: operator-=(const TimePercent& rhs)
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator-=(const TimePercent& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 742
    functionName: operator+=(const TimePercent& rhs)
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const TimePercent& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::setprecision
      Src: /src/brpc/src/bvar/default_variables.cpp:748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' tp'
    argTypes:
    - std::ostream
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 744
    functionDepth: 0
    functionLinenumber: 744
    functionLinenumberEnd: 751
    functionName: '& operator<<(std::ostream& os, const TimePercent& tp)'
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::setprecision
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const TimePercent& tp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:754,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:754,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:755,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:755,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:756,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:756,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 758
    functionName: bvar::get_cputime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_value
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: TimePercent
    signature: TimePercent get_cputime_percent(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:764,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:764,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:765,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:765,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 763
    functionDepth: 1
    functionLinenumber: 763
    functionLinenumberEnd: 767
    functionName: bvar::get_stime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_value
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: TimePercent
    signature: TimePercent get_stime_percent(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:773,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:773,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:774,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:774,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 772
    functionDepth: 1
    functionLinenumber: 772
    functionLinenumberEnd: 776
    functionName: bvar::get_utime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_value
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: TimePercent
    signature: TimePercent get_utime_percent(void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/bvar/default_variables.cpp:828,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:846,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 808
    functionDepth: 0
    functionLinenumber: 808
    functionLinenumberEnd: 848
    functionName: bvar::gen_gcc_version
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - std::string::string
    linkageType: ''
    returnType: void
    signature: void gen_gcc_version()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/default_variables.cpp:851,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 853
    functionName: bvar::get_gcc_version
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void get_gcc_version(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::FilePath
      Src: /src/brpc/src/bvar/default_variables.cpp:859,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/bvar/default_variables.cpp:860,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bvar/default_variables.cpp:861,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bvar/default_variables.cpp:862,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 863
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 863
    functionName: bvar::get_work_dir
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::FilePath::FilePath
    - butil::GetCurrentDirectory
    - LOG_IF
    - butil::FilePath::value
    linkageType: ''
    returnType: void
    signature: void get_work_dir(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - member
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 46
    functionName: BVAR_MEMBER_TYPE
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_MEMBER_TYPE(member)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ProcStat
      Src: /src/brpc/src/bvar/default_variables.cpp:75,1
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:82,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:85,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:95,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:101,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:102,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:105,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:109,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:112,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:113,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:113,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:117,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 124
    functionName: bvar::read_proc_status
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - ProcStat
    - memset
    - fscanf
    - PLOG_ONCE
    - getpid
    - snprintf
    - sscanf
    - c_str
    - butil::read_command_output
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool read_proc_status(ProcStat &stat)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/default_variables.cpp:131,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/default_variables.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: bvar::CachedReader::CachedReader
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void CachedReader()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/default_variables.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: ~CachedReader()
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~CachedReader()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<CachedReader>
      Src: /src/brpc/src/bvar/default_variables.cpp:144,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/default_variables.cpp:145,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:147,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:150,1
    - Dst: fn
      Src: /src/brpc/src/bvar/default_variables.cpp:154,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:155,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:158,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - ReadFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 164
    functionName: bvar::CachedReader::get_value
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - fn
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::get_leaky_singleton<CachedReader>
    linkageType: ''
    returnType: T
    signature: T & get_value(const ReadFn& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_proc_status
      Src: /src/brpc/src/bvar/default_variables.cpp:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 176
    functionName: operator()(ProcStat* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - read_proc_status
    linkageType: ''
    returnType: bool
    signature: bool operator()(ProcStat* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:179,1
    - Dst: ProcStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 181
    functionName: bvar::ProcStatReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - ProcStatReader
    - bvar::Status::get_value
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 188
    functionName: BVAR_DEFINE_PROC_STAT_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_STAT_FIELD(field)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 194
    functionName: BVAR_DEFINE_PROC_STAT_FIELD2
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_STAT_FIELD2(field, name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ProcMemory
      Src: /src/brpc/src/bvar/default_variables.cpp:208,1
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:213,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:216,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:219,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:225,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:226,1
    - Dst: getpagesize
      Src: /src/brpc/src/bvar/default_variables.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:230,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:232,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:235,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:236,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:236,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:237,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - m
    argTypes:
    - ProcMemory
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 247
    functionName: bvar::read_proc_memory
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - ProcMemory
    - memset
    - fscanf
    - PLOG_ONCE
    - getpid
    - snprintf
    - sscanf
    - c_str
    - butil::read_command_output
    - getpagesize
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool read_proc_memory(ProcMemory &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_proc_memory
      Src: /src/brpc/src/bvar/default_variables.cpp:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcMemory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 253
    functionName: operator()(ProcMemory* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - read_proc_memory
    linkageType: ''
    returnType: bool
    signature: bool operator()(ProcMemory* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: getpagesize
      Src: /src/brpc/src/bvar/default_variables.cpp:256,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:257,1
    - Dst: ProcMemoryReader
      Src: /src/brpc/src/bvar/default_variables.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 259
    functionName: bvar::ProcMemoryReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - ProcMemoryReader
    - bvar::Status::get_value
    - getpagesize
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 267
    functionName: BVAR_DEFINE_PROC_MEMORY_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_MEMORY_FIELD(field, name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:280,1
    - Dst: LoadAverage
      Src: /src/brpc/src/bvar/default_variables.cpp:283,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:285,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:287,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:294,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:297,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:298,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:298,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:300,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - m
    argTypes:
    - LoadAverage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 308
    functionName: bvar::read_load_average
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - fscanf
    - PLOG_ONCE
    - sscanf
    - c_str
    - butil::read_command_output
    - LoadAverage
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool read_load_average(LoadAverage &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_load_average
      Src: /src/brpc/src/bvar/default_variables.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - LoadAverage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 314
    functionName: operator()(LoadAverage* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - read_load_average
    linkageType: ''
    returnType: bool
    signature: bool operator()(LoadAverage* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:317,1
    - Dst: LoadAverageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 319
    functionName: bvar::LoadAverageReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - LoadAverageReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 327
    functionName: BVAR_DEFINE_LOAD_AVERAGE_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_LOAD_AVERAGE_FIELD(field, name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::DirReaderPosix::IsValid
      Src: /src/brpc/src/bvar/default_variables.cpp:334,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:335,1
    - Dst: butil::DirReaderPosix::Next
      Src: /src/brpc/src/bvar/default_variables.cpp:340,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - limit
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 330
    functionDepth: 1
    functionLinenumber: 330
    functionLinenumberEnd: 369
    functionName: bvar::get_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - butil::DirReaderPosix::IsValid
    - PLOG
    - butil::DirReaderPosix::Next
    linkageType: ''
    returnType: int
    signature: int get_fd_count(int limit)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bvar/default_variables.cpp:378,1
    - Dst: get_fd_count
      Src: /src/brpc/src/bvar/default_variables.cpp:382,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/default_variables.cpp:387,1
    - Dst: hide
      Src: /src/brpc/src/bvar/default_variables.cpp:390,1
    - Dst: expose
      Src: /src/brpc/src/bvar/default_variables.cpp:391,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 395
    functionName: operator()(int* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_fd_count
    - load
    - expose
    - hide
    - exchange
    linkageType: ''
    returnType: bool
    signature: bool operator()(int* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:399,1
    - Dst: FdReader
      Src: /src/brpc/src/bvar/default_variables.cpp:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 400
    functionName: bvar::print_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - FdReader
    linkageType: ''
    returnType: int
    signature: int print_fd_count(void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:433,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:437,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:441,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:448,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:449,1
    - Dst: proc_pid_rusage
      Src: /src/brpc/src/bvar/default_variables.cpp:451,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:452,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 1
    argNames:
    - s
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 461
    functionName: bvar::read_proc_io
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - proc_pid_rusage
    - memset
    - fscanf
    - PLOG_ONCE
    - getpid
    - PLOG
    linkageType: ''
    returnType: bool
    signature: bool read_proc_io(ProcIO* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_proc_io
      Src: /src/brpc/src/bvar/default_variables.cpp:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 467
    functionName: operator()(ProcIO* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - read_proc_io
    linkageType: ''
    returnType: bool
    signature: bool operator()(ProcIO* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:470,1
    - Dst: ProcIOReader
      Src: /src/brpc/src/bvar/default_variables.cpp:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 472
    functionName: bvar::ProcIOReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - ProcIOReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 479
    functionName: BVAR_DEFINE_PROC_IO_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_PROC_IO_FIELD(field)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:541,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:545,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:561,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 537
    functionDepth: 1
    functionLinenumber: 537
    functionLinenumberEnd: 571
    functionName: bvar::read_disk_stat
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - PLOG_ONCE
    - PLOG
    - fscanf
    linkageType: ''
    returnType: bool
    signature: bool read_disk_stat(DiskStat* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_disk_stat
      Src: /src/brpc/src/bvar/default_variables.cpp:576,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 577
    functionName: operator()(DiskStat* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - read_disk_stat
    linkageType: ''
    returnType: bool
    signature: bool operator()(DiskStat* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:580,1
    - Dst: DiskStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:581,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 582
    functionName: bvar::DiskStatReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - DiskStatReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 589
    functionName: BVAR_DEFINE_DISK_STAT_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_DISK_STAT_FIELD(field)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadCommandLine
      Src: /src/brpc/src/bvar/default_variables.cpp:596,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:597,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 598
    functionName: bvar::ReadSelfCmdline
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::ReadCommandLine
    linkageType: ''
    returnType: void
    signature: void ReadSelfCmdline()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ReadSelfCmdline>
      Src: /src/brpc/src/bvar/default_variables.cpp:601,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 602
    functionName: bvar::get_cmdline
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ReadSelfCmdline>
    linkageType: ''
    returnType: void
    signature: void get_cmdline(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:608,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:609,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:612,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:612,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 613
    functionName: bvar::ReadVersion
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - append
    - std::ostringstream::str
    - butil::read_command_output
    - LOG
    linkageType: ''
    returnType: void
    signature: void ReadVersion()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ReadVersion>
      Src: /src/brpc/src/bvar/default_variables.cpp:616,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 617
    functionName: bvar::get_kernel_version
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ReadVersion>
    linkageType: ''
    returnType: void
    signature: void get_kernel_version(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/default_variables.cpp:624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 629
    functionName: bvar::get_uptime
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: timeval
    signature: timeval get_uptime(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getrusage
      Src: /src/brpc/src/bvar/default_variables.cpp:636,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - stat
    argTypes:
    - rusage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 635
    functionDepth: 1
    functionLinenumber: 635
    functionLinenumberEnd: 642
    functionName: operator()(rusage* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - getrusage
    linkageType: ''
    returnType: bool
    signature: bool operator()(rusage* stat) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:645,1
    - Dst: RUsageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:646,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 647
    functionName: bvar::RUsageReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - RUsageReader
    linkageType: ''
    returnType: T
    signature: T get_field(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 655
    functionName: BVAR_DEFINE_RUSAGE_FIELD
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_RUSAGE_FIELD(field)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - field
    - ','
    - name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 661
    functionName: BVAR_DEFINE_RUSAGE_FIELD2
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_DEFINE_RUSAGE_FIELD2(field, name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getlogin_r
      Src: /src/brpc/src/bvar/default_variables.cpp:669,1
    - Dst: berror
      Src: /src/brpc/src/bvar/default_variables.cpp:673,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 667
    functionDepth: 1
    functionLinenumber: 667
    functionLinenumberEnd: 675
    functionName: bvar::get_username
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - berror
    - getlogin_r
    linkageType: ''
    returnType: void
    signature: void get_username(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sysconf
      Src: /src/brpc/src/bvar/default_variables.cpp:727,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 728
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 728
    functionName: bvar::get_core_num
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - sysconf
    linkageType: ''
    returnType: int
    signature: int get_core_num(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 738
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 738
    functionName: operator-=(const TimePercent& rhs)
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator-=(const TimePercent& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 742
    functionName: operator+=(const TimePercent& rhs)
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator+=(const TimePercent& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::setprecision
      Src: /src/brpc/src/bvar/default_variables.cpp:748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' tp'
    argTypes:
    - std::ostream
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 744
    functionDepth: 0
    functionLinenumber: 744
    functionLinenumberEnd: 751
    functionName: '& operator<<(std::ostream& os, const TimePercent& tp)'
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::setprecision
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const TimePercent& tp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:754,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:754,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:755,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:755,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:756,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:756,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 758
    functionName: bvar::get_cputime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_value
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: TimePercent
    signature: TimePercent get_cputime_percent(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:764,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:764,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:765,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:765,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 763
    functionDepth: 1
    functionLinenumber: 763
    functionLinenumberEnd: 767
    functionName: bvar::get_stime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_value
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: TimePercent
    signature: TimePercent get_stime_percent(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:773,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:773,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:774,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:774,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 772
    functionDepth: 1
    functionLinenumber: 772
    functionLinenumberEnd: 776
    functionName: bvar::get_utime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - get_value
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: TimePercent
    signature: TimePercent get_utime_percent(void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/bvar/default_variables.cpp:828,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:846,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 808
    functionDepth: 0
    functionLinenumber: 808
    functionLinenumberEnd: 848
    functionName: bvar::gen_gcc_version
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - std::string::string
    linkageType: ''
    returnType: void
    signature: void gen_gcc_version()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/default_variables.cpp:851,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 853
    functionName: bvar::get_gcc_version
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void get_gcc_version(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::FilePath
      Src: /src/brpc/src/bvar/default_variables.cpp:859,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/bvar/default_variables.cpp:860,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bvar/default_variables.cpp:861,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bvar/default_variables.cpp:862,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 863
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 863
    functionName: bvar::get_work_dir
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::FilePath::FilePath
    - butil::GetCurrentDirectory
    - LOG_IF
    - butil::FilePath::value
    linkageType: ''
    returnType: void
    signature: void get_work_dir(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::setw
      Src: /src/brpc/src/bvar/default_variables.cpp:877,1
    - Dst: std::setfill
      Src: /src/brpc/src/bvar/default_variables.cpp:877,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' tm'
    argTypes:
    - std::ostream
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 878
      start: 876
    functionDepth: 0
    functionLinenumber: 876
    functionLinenumberEnd: 878
    functionName: '& operator<<(std::ostream& os, const timeval& tm)'
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::setw
    - std::setfill
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const timeval& tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels'
    argTypes:
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: bvar::MultiDimension<T, KeyType>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::MultiDimension(const key_type& labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::expose
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' labels'
    argTypes:
    - butil::StringPiece
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: bvar::MultiDimension<T, KeyType>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::expose
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::MultiDimension(const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::expose_as
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - ' labels'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 57
    functionName: bvar::MultiDimension<T, KeyType>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::expose_as
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::MultiDimension(const butil::StringPiece&
      prefix,\n                                           const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiDimension<T, KeyType>::hide
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:61,1
    - Dst: delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: MultiDimension<T, KeyType>::~MultiDimension()
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - delete_stats
    - MultiDimension<T, KeyType>::hide
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::~MultiDimension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:68,1
    - Dst: init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' bg'
    argTypes:
    - MetricMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: bvar::MultiDimension<T, KeyType>::init_flatmap
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - init
    linkageType: ''
    returnType: size_t
    signature: size_t MultiDimension<T, KeyType>::init_flatmap(MetricMap& bg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:75,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:76,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: bvar::MultiDimension<T, KeyType>::count_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - MetricMapScopedPtr::size
    - Read
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t MultiDimension<T, KeyType>::count_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:85,1
    - Dst: erase
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:92,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 99
    functionName: bvar::MultiDimension<T, KeyType>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - Modify
    - erase
    - bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::delete_stats(const K& labels_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:108,1
    - Dst: MetricMap::init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:108,1
    - Dst: MetricMap::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:110,1
    - Dst: MetricMap::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:111,1
    - Dst: MetricMap::swap
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:113,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:116,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 121
    functionName: bvar::MultiDimension<T, KeyType>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - MetricMap::clear
    - Modify
    - CHECK_EQ
    - MetricMap::init
    - MetricMap::swap
    - MetricMap::empty
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::delete_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<key_type>*::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:128,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:130,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:131,1
    - Dst: std::vector<key_type>*::reserve
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:134,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:134,1
    - Dst: MetricMapScopedPtr::begin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: MetricMapScopedPtr::end
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: std::vector<key_type>*::emplace_back
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:136,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - names
    argTypes:
    - std::vector<key_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 138
    functionName: bvar::MultiDimension<T, KeyType>::list_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - MetricMapScopedPtr::end
    - std::vector<key_type>*::clear
    - std::vector<key_type>*::reserve
    - MetricMapScopedPtr::size
    - std::vector<key_type>*::emplace_back
    - MetricMapScopedPtr::begin
    - Read
    - LOG
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::list_stats(std::vector<key_type>*
      names)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:143,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:147,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:148,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:152,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 157
    functionName: bvar::MultiDimension<T, KeyType>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - MetricMapScopedPtr::seek
    - Read
    - LOG
    - bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    linkageType: ''
    returnType: T
    signature: T * MultiDimension<T, KeyType>::get_stats_impl(const K& labels_value)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:163,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:168,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:169,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:173,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:180,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:181,1
    - Dst: seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:192,1
    - Dst: T::T
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:202,1
    - Dst: insert_metrics_map
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:204,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:207,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 3
    argNames:
    - ' labels_value'
    - stats_op
    - do_write
    argTypes:
    - K
    - STATS_OP
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 209
    functionName: bvar::MultiDimension<T, KeyType>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    - MetricMapScopedPtr::seek
    - insert_metrics_map
    - Modify
    - MetricMapScopedPtr::size
    - T::T
    - seek
    - Read
    - LOG
    linkageType: ''
    returnType: T
    signature: "T * MultiDimension<T, KeyType>::get_stats_impl(\n    const K& labels_value,
      STATS_OP stats_op, bool* do_write)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: bvar::MultiDimension<T, KeyType>::clear_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::delete_stats
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::clear_stats()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: bvar::MultiDimension<T, KeyType>::has_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::get_stats_impl
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType>::has_stats(const K& labels_value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:227,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:228,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:228,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:228,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:233,1
    - Dst: T*::describe
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:238,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:240,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 224
    functionDepth: 2
    functionLinenumber: 224
    functionLinenumberEnd: 247
    functionName: bvar::MultiDimension<T, KeyType>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - T*::describe
    - bvar::MultiDimension<T, KeyType>::list_stats
    - Dumper*::dump_mvar
    - bvar::MultiDimension<T, KeyType>::name
    - std::vector::empty
    - bvar::MultiDimension<T, KeyType>::make_dump_key
    - bvar::MultiDimension<T, KeyType>::get_stats_impl
    - Dumper*::dump_comment
    linkageType: ''
    returnType: typename std::enable_if<!butil::is_same<LatencyRecorder, U>::value,
      size_t>::type
    signature: typename std::enable_if<!butil::is_same<LatencyRecorder, U>::value,
      size_t>::type MultiDimension<T, KeyType>::dump_impl(Dumper* dumper, const DumpOptions*
      options)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:254,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:255,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:262,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:262,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:264,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:271,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: bvar::LatencyRecorder*::latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:280,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:287,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:293,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:300,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:300,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:302,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:307,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: bvar::LatencyRecorder*::max_latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:314,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:314,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:316,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:321,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: bvar::LatencyRecorder*::qps
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:328,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:328,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:330,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:335,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    - Dst: bvar::LatencyRecorder*::count
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 55
    argCount: 1
    argNames:
    - dumper
    argTypes:
    - Dumper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 251
    functionDepth: 2
    functionLinenumber: 251
    functionLinenumberEnd: 341
    functionName: bvar::MultiDimension<T, KeyType>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - bvar::MultiDimension<T, KeyType>::list_stats
    - bvar::LatencyRecorder*::latency_percentile
    - Dumper*::dump_mvar
    - bvar::MultiDimension<T, KeyType>::name
    - std::vector::empty
    - bvar::MultiDimension<T, KeyType>::make_dump_key
    - bvar::MultiDimension<T, KeyType>::get_stats_impl
    - Dumper*::dump_comment
    - bvar::LatencyRecorder*::qps
    - std::to_string
    - bvar::LatencyRecorder*::max_latency
    - bvar::LatencyRecorder*::count
    - bvar::LatencyRecorder*::latency
    linkageType: ''
    returnType: typename std::enable_if<butil::is_same<LatencyRecorder, U>::value,
      size_t>::type
    signature: typename std::enable_if<butil::is_same<LatencyRecorder, U>::value,
      size_t>::type MultiDimension<T, KeyType>::dump_impl(Dumper* dumper, const DumpOptions*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:346,1
    - Dst: empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:347,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_labels_kvpair_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:350,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' os'
    - ' labels_value'
    - ' suffix'
    - quantile
    argTypes:
    - std::ostream
    - key_type
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 351
    functionName: bvar::MultiDimension<T, KeyType>::make_dump_key
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 2
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::make_labels_kvpair_string
    - bvar::MultiDimension<T, KeyType>::name
    - empty
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::make_dump_key(std::ostream& os, const
      key_type& labels_value,\n                                               const
      std::string& suffix, int quantile)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::_labels::cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:357,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:358,1
    - Dst: bvar::MultiDimension<T, KeyType>::_labels::cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:360,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:360,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:362,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:362,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - ' os'
    - ' labels_value'
    - quantile
    argTypes:
    - std::ostream
    - key_type
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 369
    functionName: bvar::MultiDimension<T, KeyType>::make_labels_kvpair_string
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - cbegin
    - cend
    - bvar::MultiDimension<T, KeyType>::_labels::cend
    - bvar::MultiDimension<T, KeyType>::_labels::cbegin
    - auto::c_str
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::make_labels_kvpair_string(\n    std::ostream&
      os, const key_type& labels_value, int quantile)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:374,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:374,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:375,1
    - Dst: bvar::MultiDimension<T, KeyType>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:375,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:376,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 380
    functionName: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 3
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::count_labels
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType>::is_valid_lables_value(const K& labels_value)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:384,1
    - Dst: bvar::MultiDimension<T, KeyType>::count_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 391
    functionName: bvar::MultiDimension<T, KeyType>::describe
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::name
    - bvar::MultiDimension<T, KeyType>::count_stats
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels'
    argTypes:
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: bvar::MultiDimension<T, KeyType>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::MultiDimension(const key_type& labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::expose
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' labels'
    argTypes:
    - butil::StringPiece
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: bvar::MultiDimension<T, KeyType>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::expose
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::MultiDimension(const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::expose_as
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - ' labels'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 57
    functionName: bvar::MultiDimension<T, KeyType>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::expose_as
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::MultiDimension(const butil::StringPiece&
      prefix,\n                                           const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiDimension<T, KeyType>::hide
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:61,1
    - Dst: delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: MultiDimension<T, KeyType>::~MultiDimension()
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - delete_stats
    - MultiDimension<T, KeyType>::hide
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::~MultiDimension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:68,1
    - Dst: init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' bg'
    argTypes:
    - MetricMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: bvar::MultiDimension<T, KeyType>::init_flatmap
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - init
    linkageType: ''
    returnType: size_t
    signature: size_t MultiDimension<T, KeyType>::init_flatmap(MetricMap& bg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:75,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:76,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: bvar::MultiDimension<T, KeyType>::count_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - MetricMapScopedPtr::size
    - Read
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t MultiDimension<T, KeyType>::count_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:85,1
    - Dst: erase
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:92,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 99
    functionName: bvar::MultiDimension<T, KeyType>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - Modify
    - erase
    - bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::delete_stats(const K& labels_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:108,1
    - Dst: MetricMap::init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:108,1
    - Dst: MetricMap::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:110,1
    - Dst: MetricMap::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:111,1
    - Dst: MetricMap::swap
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:113,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:116,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 121
    functionName: bvar::MultiDimension<T, KeyType>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - MetricMap::clear
    - Modify
    - CHECK_EQ
    - MetricMap::init
    - MetricMap::swap
    - MetricMap::empty
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::delete_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<key_type>*::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:128,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:130,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:131,1
    - Dst: std::vector<key_type>*::reserve
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:134,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:134,1
    - Dst: MetricMapScopedPtr::begin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: MetricMapScopedPtr::end
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: std::vector<key_type>*::emplace_back
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:136,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - names
    argTypes:
    - std::vector<key_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 138
    functionName: bvar::MultiDimension<T, KeyType>::list_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 2
    functionsReached:
    - MetricMapScopedPtr::end
    - std::vector<key_type>*::clear
    - std::vector<key_type>*::reserve
    - MetricMapScopedPtr::size
    - std::vector<key_type>*::emplace_back
    - MetricMapScopedPtr::begin
    - Read
    - LOG
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::list_stats(std::vector<key_type>*
      names)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:143,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:147,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:148,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:152,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 157
    functionName: bvar::MultiDimension<T, KeyType>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 3
    functionsReached:
    - MetricMapScopedPtr::seek
    - Read
    - LOG
    - bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    linkageType: ''
    returnType: T
    signature: T * MultiDimension<T, KeyType>::get_stats_impl(const K& labels_value)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:163,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:168,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:169,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:173,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:180,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:181,1
    - Dst: seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:192,1
    - Dst: T::T
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:202,1
    - Dst: insert_metrics_map
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:204,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:207,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 3
    argNames:
    - ' labels_value'
    - stats_op
    - do_write
    argTypes:
    - K
    - STATS_OP
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 209
    functionName: bvar::MultiDimension<T, KeyType>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 3
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    - MetricMapScopedPtr::seek
    - insert_metrics_map
    - Modify
    - MetricMapScopedPtr::size
    - T::T
    - seek
    - Read
    - LOG
    linkageType: ''
    returnType: T
    signature: "T * MultiDimension<T, KeyType>::get_stats_impl(\n    const K& labels_value,
      STATS_OP stats_op, bool* do_write)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: bvar::MultiDimension<T, KeyType>::clear_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::delete_stats
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::clear_stats()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 2
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: bvar::MultiDimension<T, KeyType>::has_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::get_stats_impl
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType>::has_stats(const K& labels_value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:227,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:228,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:228,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:228,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:233,1
    - Dst: T*::describe
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:238,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:240,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 224
    functionDepth: 2
    functionLinenumber: 224
    functionLinenumberEnd: 247
    functionName: bvar::MultiDimension<T, KeyType>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - T*::describe
    - bvar::MultiDimension<T, KeyType>::list_stats
    - Dumper*::dump_mvar
    - bvar::MultiDimension<T, KeyType>::name
    - std::vector::empty
    - bvar::MultiDimension<T, KeyType>::make_dump_key
    - bvar::MultiDimension<T, KeyType>::get_stats_impl
    - Dumper*::dump_comment
    linkageType: ''
    returnType: typename std::enable_if<!butil::is_same<LatencyRecorder, U>::value,
      size_t>::type
    signature: typename std::enable_if<!butil::is_same<LatencyRecorder, U>::value,
      size_t>::type MultiDimension<T, KeyType>::dump_impl(Dumper* dumper, const DumpOptions*
      options)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:254,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:255,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:262,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:262,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:264,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:271,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: bvar::LatencyRecorder*::latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:272,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:280,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:281,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:287,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:288,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:293,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:294,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:300,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:300,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:302,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:307,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: bvar::LatencyRecorder*::max_latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:308,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:314,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:314,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:316,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:321,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: bvar::LatencyRecorder*::qps
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:322,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:328,1
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:328,1
    - Dst: bvar::MultiDimension<T, KeyType>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:330,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:335,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    - Dst: bvar::LatencyRecorder*::count
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:336,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 55
    argCount: 1
    argNames:
    - dumper
    argTypes:
    - Dumper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 251
    functionDepth: 2
    functionLinenumber: 251
    functionLinenumberEnd: 341
    functionName: bvar::MultiDimension<T, KeyType>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - bvar::MultiDimension<T, KeyType>::list_stats
    - bvar::LatencyRecorder*::latency_percentile
    - Dumper*::dump_mvar
    - bvar::MultiDimension<T, KeyType>::name
    - std::vector::empty
    - bvar::MultiDimension<T, KeyType>::make_dump_key
    - bvar::MultiDimension<T, KeyType>::get_stats_impl
    - Dumper*::dump_comment
    - bvar::LatencyRecorder*::qps
    - std::to_string
    - bvar::LatencyRecorder*::max_latency
    - bvar::LatencyRecorder*::count
    - bvar::LatencyRecorder*::latency
    linkageType: ''
    returnType: typename std::enable_if<butil::is_same<LatencyRecorder, U>::value,
      size_t>::type
    signature: typename std::enable_if<butil::is_same<LatencyRecorder, U>::value,
      size_t>::type MultiDimension<T, KeyType>::dump_impl(Dumper* dumper, const DumpOptions*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:346,1
    - Dst: empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:347,1
    - Dst: bvar::MultiDimension<T, KeyType>::make_labels_kvpair_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:350,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' os'
    - ' labels_value'
    - ' suffix'
    - quantile
    argTypes:
    - std::ostream
    - key_type
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 351
    functionName: bvar::MultiDimension<T, KeyType>::make_dump_key
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 4
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::make_labels_kvpair_string
    - bvar::MultiDimension<T, KeyType>::name
    - empty
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::make_dump_key(std::ostream& os, const
      key_type& labels_value,\n                                               const
      std::string& suffix, int quantile)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::_labels::cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:357,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:358,1
    - Dst: bvar::MultiDimension<T, KeyType>::_labels::cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:360,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:360,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:362,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:362,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - ' os'
    - ' labels_value'
    - quantile
    argTypes:
    - std::ostream
    - key_type
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 369
    functionName: bvar::MultiDimension<T, KeyType>::make_labels_kvpair_string
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 2
    functionsReached:
    - cbegin
    - cend
    - bvar::MultiDimension<T, KeyType>::_labels::cend
    - bvar::MultiDimension<T, KeyType>::_labels::cbegin
    - auto::c_str
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType>::make_labels_kvpair_string(\n    std::ostream&
      os, const key_type& labels_value, int quantile)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:374,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:374,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:375,1
    - Dst: bvar::MultiDimension<T, KeyType>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:375,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:376,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 380
    functionName: bvar::MultiDimension<T, KeyType>::is_valid_lables_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 6
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::count_labels
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType>::is_valid_lables_value(const K& labels_value)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:384,1
    - Dst: bvar::MultiDimension<T, KeyType>::count_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 391
    functionName: bvar::MultiDimension<T, KeyType>::describe
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType>::name
    - bvar::MultiDimension<T, KeyType>::count_stats
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType>::describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/gflag.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' gflag_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: bvar::GFlag::GFlag
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: void GFlag::GFlag(const butil::StringPiece& gflag_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/bvar/gflag.cpp:32,1
    - Dst: size
      Src: /src/brpc/src/bvar/gflag.cpp:32,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/gflag.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' gflag_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: bvar::GFlag::GFlag
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - size
    - expose_as
    - data
    linkageType: ''
    returnType: void
    signature: "void GFlag::GFlag(const butil::StringPiece& prefix,\n      const butil::StringPiece&
      gflag_name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/bvar/gflag.cpp:38,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:38,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 53
    functionName: bvar::GFlag::describe
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - gflag_name
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    linkageType: ''
    returnType: void
    signature: void GFlag::describe(std::ostream& os, bool quote_string) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/bvar/gflag.cpp:58,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:58,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:59,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/bvar/gflag.cpp:63,1
    - Dst: atoi
      Src: /src/brpc/src/bvar/gflag.cpp:63,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:63,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bvar/gflag.cpp:65,1
    - Dst: atoll
      Src: /src/brpc/src/bvar/gflag.cpp:65,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:65,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/bvar/gflag.cpp:67,1
    - Dst: strtoull
      Src: /src/brpc/src/bvar/gflag.cpp:68,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:68,1
    - Dst: strtod
      Src: /src/brpc/src/bvar/gflag.cpp:72,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:72,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:74,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 76
    functionName: bvar::GFlag::get_value
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - atoi
    - static_cast<int64_t>
    - GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
    - gflag_name
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - strtoull
    - strtod
    - static_cast<int>
    - static_cast<uint64_t>
    - atoll
    linkageType: ''
    returnType: void
    signature: void GFlag::get_value(boost::any* value) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/gflag.cpp:81,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:81,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bvar::GFlag::get_value
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - gflag_name
    linkageType: ''
    returnType: std::string
    signature: std::string GFlag::get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/bvar/gflag.cpp:88,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: bvar::GFlag::set_value
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - gflag_name
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: bool
    signature: bool GFlag::set_value(const char* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/gflag.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' gflag_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: bvar::GFlag::GFlag
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: void GFlag::GFlag(const butil::StringPiece& gflag_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/bvar/gflag.cpp:32,1
    - Dst: size
      Src: /src/brpc/src/bvar/gflag.cpp:32,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/gflag.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' gflag_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: bvar::GFlag::GFlag
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - size
    - expose_as
    - data
    linkageType: ''
    returnType: void
    signature: "void GFlag::GFlag(const butil::StringPiece& prefix,\n      const butil::StringPiece&
      gflag_name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/bvar/gflag.cpp:38,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:38,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 53
    functionName: bvar::GFlag::describe
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - gflag_name
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    linkageType: ''
    returnType: void
    signature: void GFlag::describe(std::ostream& os, bool quote_string) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/bvar/gflag.cpp:58,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:58,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:59,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/bvar/gflag.cpp:63,1
    - Dst: atoi
      Src: /src/brpc/src/bvar/gflag.cpp:63,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:63,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bvar/gflag.cpp:65,1
    - Dst: atoll
      Src: /src/brpc/src/bvar/gflag.cpp:65,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:65,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/bvar/gflag.cpp:67,1
    - Dst: strtoull
      Src: /src/brpc/src/bvar/gflag.cpp:68,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:68,1
    - Dst: strtod
      Src: /src/brpc/src/bvar/gflag.cpp:72,1
    - Dst: GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
      Src: /src/brpc/src/bvar/gflag.cpp:72,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:74,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 76
    functionName: bvar::GFlag::get_value
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - atoi
    - static_cast<int64_t>
    - GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
    - gflag_name
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - strtoull
    - strtod
    - static_cast<int>
    - static_cast<uint64_t>
    - atoll
    linkageType: ''
    returnType: void
    signature: void GFlag::get_value(boost::any* value) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/gflag.cpp:81,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:81,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bvar::GFlag::get_value
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - gflag_name
    linkageType: ''
    returnType: std::string
    signature: std::string GFlag::get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/bvar/gflag.cpp:88,1
    - Dst: gflag_name
      Src: /src/brpc/src/bvar/gflag.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: bvar::GFlag::set_value
    functionSourceFile: /src/brpc/src/bvar/gflag.cpp
    functionUses: 0
    functionsReached:
    - gflag_name
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: bool
    signature: bool GFlag::set_value(const char* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - ' op'
    argTypes:
    - Reducer*
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 78
    functionName: bvar::Reducer::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(Reducer* owner, const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/reducer.h:79,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/reducer.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: bvar::Reducer::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::SeriesSampler::describe
      Src: /src/brpc/src/bvar/reducer.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: bvar::Reducer::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 1
    functionsReached:
    - bvar::Reducer::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/src/bvar/reducer.h:88,1
    - Dst: Op
      Src: /src/brpc/src/bvar/reducer.h:89,1
    - Dst: InvOp
      Src: /src/brpc/src/bvar/reducer.h:89,1
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/reducer.h:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 91
    functionName: bvar::Reducer::Reducer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - InvOp
    - std::make_shared<combiner_type>
    - Op
    - T
    linkageType: ''
    returnType: void
    signature: "void Reducer(typename butil::add_cr_non_integral<T>::type identity
      = T(),\n                     const Op& op = Op(), const InvOp& inv_op = InvOp())"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/reducer.h:95,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:97,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 104
    functionName: ~Reducer() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Reducer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/reducer.h:114,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:115,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:116,1
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/reducer.h:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: bvar::Reducer::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str<T>
    - CHECK
    - combine_agents
    - butil::class_name_str<Op>
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/reducer.h:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: bvar::Reducer::reset
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: T
    signature: T reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:128,1
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:130,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 132
    functionName: bvar::Reducer::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Reducer::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: bvar::Reducer::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - bvar::Reducer::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::valid
      Src: /src/brpc/src/bvar/reducer.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: bvar::Reducer::valid
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 1
    functionsReached:
    - bvar::Reducer::valid
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - op
    linkageType: ''
    returnType: Op
    signature: Op & op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: '& inv_op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InvOp
    signature: InvOp & inv_op() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/reducer.h:147,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: bvar::Reducer::get_sampler
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::describe
      Src: /src/brpc/src/bvar/reducer.h:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 161
    functionName: bvar::Reducer::describe_series
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Reducer::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:167,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:173,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/reducer.h:173,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 177
    functionName: bvar::Reducer::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - op
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/reducer.h:190,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/reducer.h:191,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/reducer.h:192,1
    - Dst: agent_type*::element::modify
      Src: /src/brpc/src/bvar/reducer.h:195,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - value
    argTypes:
    - typename butil::add_cr_non_integral<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 197
    functionName: "& Reducer<T, Op, InvOp>::operator<<(\n    typename butil::add_cr_non_integral<T>::type
      value)"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - op
    - __builtin_expect
    - get_or_create_tls_agent
    - agent_type*::element::modify
    - LOG
    linkageType: ''
    returnType: Reducer<T, Op, InvOp>
    signature: "Reducer<T, Op, InvOp> & Reducer<T, Op, InvOp>::operator<<(\n    typename
      butil::add_cr_non_integral<T>::type value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 210
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 210
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: bvar::Adder::Adder
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::expose
      Src: /src/brpc/src/bvar/reducer.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: bvar::Adder::Adder
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 14
    functionsReached:
    - bvar::Adder::expose
    linkageType: ''
    returnType: void
    signature: void Adder(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::expose_as
      Src: /src/brpc/src/bvar/reducer.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: bvar::Adder::Adder
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 14
    functionsReached:
    - bvar::Adder::expose_as
    linkageType: ''
    returnType: void
    signature: "void Adder(const butil::StringPiece& prefix,\n          const butil::StringPiece&
      name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/reducer.h:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 234
    functionName: ~Adder()
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Adder()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 249
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 249
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/reducer.h:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 260
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void Maxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/reducer.h:262,1
    - Dst: bvar::Maxer::expose
      Src: /src/brpc/src/bvar/reducer.h:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 264
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void Maxer(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/reducer.h:266,1
    - Dst: bvar::Maxer::expose_as
      Src: /src/brpc/src/bvar/reducer.h:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 268
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose_as
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void Maxer(const butil::StringPiece& prefix, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/reducer.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 269
    functionName: ~Maxer()
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Maxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 275
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Maxer::expose_as
      Src: /src/brpc/src/bvar/reducer.h:279,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - default_value
    - ' prefix'
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose_as
    linkageType: ''
    returnType: void
    signature: "void Maxer(T default_value, const butil::StringPiece& prefix,\n          const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Maxer::expose
      Src: /src/brpc/src/bvar/reducer.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - default_value
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 283
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value, const butil::StringPiece& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 298
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 298
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/reducer.h:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 310
    functionDepth: 1
    functionLinenumber: 310
    functionLinenumberEnd: 310
    functionName: bvar::Miner::Miner
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void Miner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/reducer.h:312,1
    - Dst: bvar::Miner::expose
      Src: /src/brpc/src/bvar/reducer.h:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 314
    functionName: bvar::Miner::Miner
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::Miner::expose
    linkageType: ''
    returnType: void
    signature: void Miner(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/reducer.h:316,1
    - Dst: bvar::Miner::expose_as
      Src: /src/brpc/src/bvar/reducer.h:317,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 318
    functionName: bvar::Miner::Miner
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::Miner::expose_as
    linkageType: ''
    returnType: void
    signature: void Miner(const butil::StringPiece& prefix, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/reducer.h:319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 319
    functionName: ~Miner()
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Miner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - ' op'
    argTypes:
    - Reducer*
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 78
    functionName: bvar::Reducer::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(Reducer* owner, const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/reducer.h:79,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/reducer.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: bvar::Reducer::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::SeriesSampler::describe
      Src: /src/brpc/src/bvar/reducer.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: bvar::Reducer::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - bvar::Reducer::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/src/bvar/reducer.h:88,1
    - Dst: Op
      Src: /src/brpc/src/bvar/reducer.h:89,1
    - Dst: InvOp
      Src: /src/brpc/src/bvar/reducer.h:89,1
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/reducer.h:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 91
    functionName: bvar::Reducer::Reducer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - InvOp
    - std::make_shared<combiner_type>
    - Op
    - T
    linkageType: ''
    returnType: void
    signature: "void Reducer(typename butil::add_cr_non_integral<T>::type identity
      = T(),\n                     const Op& op = Op(), const InvOp& inv_op = InvOp())"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/reducer.h:95,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:97,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 104
    functionName: ~Reducer() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~Reducer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/reducer.h:114,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:115,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:116,1
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/reducer.h:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: bvar::Reducer::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - butil::class_name_str<T>
    - CHECK
    - combine_agents
    - butil::class_name_str<Op>
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/reducer.h:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: bvar::Reducer::reset
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: T
    signature: T reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:128,1
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:130,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 132
    functionName: bvar::Reducer::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 1
    functionsReached:
    - bvar::Reducer::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: bvar::Reducer::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 4
    functionsReached:
    - bvar::Reducer::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::valid
      Src: /src/brpc/src/bvar/reducer.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: bvar::Reducer::valid
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - bvar::Reducer::valid
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - op
    linkageType: ''
    returnType: Op
    signature: Op & op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: '& inv_op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InvOp
    signature: InvOp & inv_op() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/reducer.h:147,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: bvar::Reducer::get_sampler
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Reducer::describe
      Src: /src/brpc/src/bvar/reducer.h:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 161
    functionName: bvar::Reducer::describe_series
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Reducer::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:167,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:173,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/reducer.h:173,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 177
    functionName: bvar::Reducer::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - op
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/reducer.h:190,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/reducer.h:191,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/reducer.h:192,1
    - Dst: agent_type*::element::modify
      Src: /src/brpc/src/bvar/reducer.h:195,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - value
    argTypes:
    - typename butil::add_cr_non_integral<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 197
    functionName: "& Reducer<T, Op, InvOp>::operator<<(\n    typename butil::add_cr_non_integral<T>::type
      value)"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - op
    - __builtin_expect
    - get_or_create_tls_agent
    - agent_type*::element::modify
    - LOG
    linkageType: ''
    returnType: Reducer<T, Op, InvOp>
    signature: "Reducer<T, Op, InvOp> & Reducer<T, Op, InvOp>::operator<<(\n    typename
      butil::add_cr_non_integral<T>::type value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 210
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 210
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: bvar::Adder::Adder
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Adder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::expose
      Src: /src/brpc/src/bvar/reducer.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: bvar::Adder::Adder
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 14
    functionsReached:
    - bvar::Adder::expose
    linkageType: ''
    returnType: void
    signature: void Adder(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder::expose_as
      Src: /src/brpc/src/bvar/reducer.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: bvar::Adder::Adder
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 14
    functionsReached:
    - bvar::Adder::expose_as
    linkageType: ''
    returnType: void
    signature: "void Adder(const butil::StringPiece& prefix,\n          const butil::StringPiece&
      name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/reducer.h:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 234
    functionName: ~Adder()
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Adder()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 249
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 249
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/reducer.h:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 260
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void Maxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/reducer.h:262,1
    - Dst: bvar::Maxer::expose
      Src: /src/brpc/src/bvar/reducer.h:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 264
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void Maxer(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/reducer.h:266,1
    - Dst: bvar::Maxer::expose_as
      Src: /src/brpc/src/bvar/reducer.h:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 268
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose_as
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void Maxer(const butil::StringPiece& prefix, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/reducer.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 269
    functionName: ~Maxer()
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Maxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 275
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Maxer::expose_as
      Src: /src/brpc/src/bvar/reducer.h:279,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - default_value
    - ' prefix'
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose_as
    linkageType: ''
    returnType: void
    signature: "void Maxer(T default_value, const butil::StringPiece& prefix,\n          const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Maxer::expose
      Src: /src/brpc/src/bvar/reducer.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - default_value
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 283
    functionName: bvar::Maxer::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - bvar::Maxer::expose
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value, const butil::StringPiece& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 298
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Tp
    - typename butil::add_cr_non_integral<Tp>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 298
    functionName: "operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void operator()(Tp & lhs, \n                    typename butil::add_cr_non_integral<Tp>::type
      rhs) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/reducer.h:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 310
    functionDepth: 1
    functionLinenumber: 310
    functionLinenumberEnd: 310
    functionName: bvar::Miner::Miner
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void Miner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/reducer.h:312,1
    - Dst: bvar::Miner::expose
      Src: /src/brpc/src/bvar/reducer.h:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 314
    functionName: bvar::Miner::Miner
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::Miner::expose
    linkageType: ''
    returnType: void
    signature: void Miner(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/reducer.h:316,1
    - Dst: bvar::Miner::expose_as
      Src: /src/brpc/src/bvar/reducer.h:317,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 318
    functionName: bvar::Miner::Miner
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 5
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::Miner::expose_as
    linkageType: ''
    returnType: void
    signature: void Miner(const butil::StringPiece& prefix, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/reducer.h:319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 319
    functionName: ~Miner()
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Miner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: bvar::valid_percentile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid_percentile(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bvar::detail::CDF::CDF
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::CDF(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: CDF::~CDF()
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void CDF::~CDF()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: bvar::detail::CDF::describe
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::describe(std::ostream& os, bool) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:64,1
    - Dst: get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:66,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:67,1
    - Dst: std::unique_ptr::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    - Dst: arraysize
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 90
    functionName: bvar::detail::CDF::describe_series
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - get_samples
    - std::vector::end
    - std::unique_ptr::combine_of
    - CombinedPercentileSamples::CombinedPercentileSamples
    - arraysize
    - std::vector::begin
    - CHECK_EQ
    - std::make_pair
    - std::unique_ptr::get_number
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: "int CDF::describe_series(\n    std::ostream& os, const SeriesOptions&
      options) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:94,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/src/bvar/latency_recorder.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - dval
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: bvar::detail::double_to_random_int
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int64_t>
    - butil::fast_rand_double
    linkageType: ''
    returnType: int64_t
    signature: int64_t double_to_random_int(double dval)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RecorderWindow*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:103,1
    - Dst: bvar::detail::double_to_random_int
      Src: /src/brpc/src/bvar/latency_recorder.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 109
    functionName: bvar::detail::get_window_recorder_qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::double_to_random_int
    - static_cast<RecorderWindow*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_window_recorder_qps(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<IntRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: bvar::detail::get_recorder_count
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - static_cast<IntRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_recorder_count(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:117,1
    - Dst: PercentileWindow*::get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:119,1
    - Dst: CombinedPercentileSamples*::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - std::vector::end
    - CombinedPercentileSamples::CombinedPercentileSamples
    - CombinedPercentileSamples*::combine_of
    - std::vector::begin
    - PercentileWindow*::get_samples
    linkageType: ''
    returnType: CombinedPercentileSamples
    signature: CombinedPercentileSamples * combine(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: bvar::detail::get_percetile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - latency_percentile
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_percetile(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:131,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: bvar::detail::get_p1
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:135,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: bvar::detail::get_p2
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:139,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: bvar::detail::get_p3
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p3(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::combine
      Src: /src/brpc/src/bvar/latency_recorder.cpp:145,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:150,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:151,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:152,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 143
    functionDepth: 2
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get_number
    - bvar::detail::combine
    linkageType: ''
    returnType: Vector<int64_t, 4>
    signature: Vector<int64_t, 4> get_latencies(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 171
    functionName: bvar::detail::LatencyRecorderBase::LatencyRecorderBase
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorderBase::LatencyRecorderBase(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bvar::detail::CDF::CDF
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::CDF(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: CDF::~CDF()
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void CDF::~CDF()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: bvar::detail::CDF::describe
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::describe(std::ostream& os, bool) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:64,1
    - Dst: get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:66,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:67,1
    - Dst: std::unique_ptr::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    - Dst: arraysize
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 90
    functionName: bvar::detail::CDF::describe_series
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - get_samples
    - std::vector::end
    - std::unique_ptr::combine_of
    - CombinedPercentileSamples::CombinedPercentileSamples
    - arraysize
    - std::vector::begin
    - CHECK_EQ
    - std::make_pair
    - std::unique_ptr::get_number
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: "int CDF::describe_series(\n    std::ostream& os, const SeriesOptions&
      options) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:94,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/src/bvar/latency_recorder.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - dval
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: bvar::detail::double_to_random_int
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - static_cast<int64_t>
    - butil::fast_rand_double
    linkageType: ''
    returnType: int64_t
    signature: int64_t double_to_random_int(double dval)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RecorderWindow*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:103,1
    - Dst: bvar::detail::double_to_random_int
      Src: /src/brpc/src/bvar/latency_recorder.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 109
    functionName: bvar::detail::get_window_recorder_qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::double_to_random_int
    - static_cast<RecorderWindow*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_window_recorder_qps(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<IntRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: bvar::detail::get_recorder_count
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - static_cast<IntRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_recorder_count(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:117,1
    - Dst: PercentileWindow*::get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:119,1
    - Dst: CombinedPercentileSamples*::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - std::vector::end
    - CombinedPercentileSamples::CombinedPercentileSamples
    - CombinedPercentileSamples*::combine_of
    - std::vector::begin
    - PercentileWindow*::get_samples
    linkageType: ''
    returnType: CombinedPercentileSamples
    signature: CombinedPercentileSamples * combine(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: bvar::detail::get_percetile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - latency_percentile
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_percetile(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:131,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: bvar::detail::get_p1
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:135,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: bvar::detail::get_p2
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:139,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: bvar::detail::get_p3
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p3(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::combine
      Src: /src/brpc/src/bvar/latency_recorder.cpp:145,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:150,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:151,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:152,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 143
    functionDepth: 2
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get_number
    - bvar::detail::combine
    linkageType: ''
    returnType: Vector<int64_t, 4>
    signature: Vector<int64_t, 4> get_latencies(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 171
    functionName: bvar::detail::LatencyRecorderBase::LatencyRecorderBase
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorderBase::LatencyRecorderBase(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::get_latencies
      Src: /src/brpc/src/bvar/latency_recorder.cpp:177,1
    - Dst: const_cast<detail::PercentileWindow*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 175
    functionDepth: 3
    functionLinenumber: 175
    functionLinenumberEnd: 179
    functionName: bvar::LatencyRecorder::latency_percentiles
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - const_cast<detail::PercentileWindow*>
    - bvar::detail::get_latencies
    linkageType: ''
    returnType: Vector<int64_t, 4>
    signature: Vector<int64_t, 4> LatencyRecorder::latency_percentiles() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_span
      Src: /src/brpc/src/bvar/latency_recorder.cpp:183,1
    - Dst: bvar::detail::double_to_random_int
      Src: /src/brpc/src/bvar/latency_recorder.cpp:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: bvar::LatencyRecorder::qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::double_to_random_int
    - get_span
    linkageType: ''
    returnType: int64_t
    signature: int64_t LatencyRecorder::qps(time_t window_size) const
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/latency_recorder.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/latency_recorder.cpp:194,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/bvar/latency_recorder.cpp:199,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/bvar/latency_recorder.cpp:199,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/bvar/latency_recorder.cpp:200,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/bvar/latency_recorder.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/latency_recorder.cpp:202,1
    - Dst: empty
      Src: /src/brpc/src/bvar/latency_recorder.cpp:207,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/bvar/latency_recorder.cpp:208,1
    - Dst: size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:208,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:208,1
    - Dst: std::string::append
      Src: /src/brpc/src/bvar/latency_recorder.cpp:209,1
    - Dst: data
      Src: /src/brpc/src/bvar/latency_recorder.cpp:209,1
    - Dst: size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:209,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/bvar/latency_recorder.cpp:210,1
    - Dst: std::string::append
      Src: /src/brpc/src/bvar/latency_recorder.cpp:211,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/latency_recorder.cpp:211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:211,1
    - Dst: set_debug_name
      Src: /src/brpc/src/bvar/latency_recorder.cpp:216,1
    - Dst: set_debug_name
      Src: /src/brpc/src/bvar/latency_recorder.cpp:217,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:219,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:222,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:225,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:228,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:232,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:233,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:236,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:237,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:240,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:241,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:244,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:247,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:250,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:253,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:257,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/latency_recorder.cpp:260,1
    - Dst: set_vector_names
      Src: /src/brpc/src/bvar/latency_recorder.cpp:260,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 62
    argCount: 2
    argNames:
    - ' prefix1'
    - ' prefix2'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 263
    functionName: bvar::LatencyRecorder::expose
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 16
    functionsReached:
    - set_vector_names
    - std::string::push_back
    - std::string::reserve
    - snprintf
    - butil::StringPiece::remove_suffix
    - set_debug_name
    - CHECK_EQ
    - std::string::append
    - empty
    - butil::StringPiece::data
    - data
    - size
    - expose_as
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: int
    signature: "int LatencyRecorder::expose(const butil::StringPiece& prefix1,\n                            const
      butil::StringPiece& prefix2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine
      Src: /src/brpc/src/bvar/latency_recorder.cpp:267,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ratio
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::LatencyRecorder::latency_percentile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get_number
    - combine
    linkageType: ''
    returnType: int64_t
    signature: int64_t LatencyRecorder::latency_percentile(double ratio) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:272,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:273,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:274,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:275,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:276,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:277,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:278,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:279,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:280,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:281,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 283
    functionName: bvar::LatencyRecorder::hide
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - bvar::LatencyRecorder::hide
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder::hide()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 293
    functionName: '& LatencyRecorder::operator<<(int64_t latency)'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LatencyRecorder
    signature: LatencyRecorder & LatencyRecorder::operator<<(int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency
      Src: /src/brpc/src/bvar/latency_recorder.cpp:296,1
    - Dst: window_size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:297,1
    - Dst: max_latency
      Src: /src/brpc/src/bvar/latency_recorder.cpp:297,1
    - Dst: qps
      Src: /src/brpc/src/bvar/latency_recorder.cpp:298,1
    - Dst: count
      Src: /src/brpc/src/bvar/latency_recorder.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' rec'
    argTypes:
    - std::ostream
    - LatencyRecorder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 300
    functionName: '& operator<<(std::ostream& os, const LatencyRecorder& rec)'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - latency
    - window_size
    - count
    - max_latency
    - qps
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const LatencyRecorder&
      rec)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: bvar::valid_percentile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid_percentile(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bvar::detail::CDF::CDF
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::CDF(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: CDF::~CDF()
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void CDF::~CDF()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: bvar::detail::CDF::describe
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::describe(std::ostream& os, bool) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:64,1
    - Dst: get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:66,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:67,1
    - Dst: std::unique_ptr::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    - Dst: arraysize
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 90
    functionName: bvar::detail::CDF::describe_series
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - get_samples
    - std::vector::end
    - std::unique_ptr::combine_of
    - CombinedPercentileSamples::CombinedPercentileSamples
    - arraysize
    - std::vector::begin
    - CHECK_EQ
    - std::make_pair
    - std::unique_ptr::get_number
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: "int CDF::describe_series(\n    std::ostream& os, const SeriesOptions&
      options) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:94,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/src/bvar/latency_recorder.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - dval
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: bvar::detail::double_to_random_int
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 3
    functionsReached:
    - static_cast<int64_t>
    - butil::fast_rand_double
    linkageType: ''
    returnType: int64_t
    signature: int64_t double_to_random_int(double dval)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RecorderWindow*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:103,1
    - Dst: bvar::detail::double_to_random_int
      Src: /src/brpc/src/bvar/latency_recorder.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 109
    functionName: bvar::detail::get_window_recorder_qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::double_to_random_int
    - static_cast<RecorderWindow*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_window_recorder_qps(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<IntRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: bvar::detail::get_recorder_count
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - static_cast<IntRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_recorder_count(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:117,1
    - Dst: PercentileWindow*::get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:119,1
    - Dst: CombinedPercentileSamples*::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 2
    functionsReached:
    - std::vector::end
    - CombinedPercentileSamples::CombinedPercentileSamples
    - CombinedPercentileSamples*::combine_of
    - std::vector::begin
    - PercentileWindow*::get_samples
    linkageType: ''
    returnType: CombinedPercentileSamples
    signature: CombinedPercentileSamples * combine(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: bvar::detail::get_percetile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - latency_percentile
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_percetile(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:131,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: bvar::detail::get_p1
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:135,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: bvar::detail::get_p2
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:139,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: bvar::detail::get_p3
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p3(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::combine
      Src: /src/brpc/src/bvar/latency_recorder.cpp:145,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:150,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:151,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:152,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 143
    functionDepth: 2
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - std::unique_ptr::get_number
    - bvar::detail::combine
    linkageType: ''
    returnType: Vector<int64_t, 4>
    signature: Vector<int64_t, 4> get_latencies(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 171
    functionName: bvar::detail::LatencyRecorderBase::LatencyRecorderBase
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorderBase::LatencyRecorderBase(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bvar::detail::CDF::CDF
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::CDF(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: CDF::~CDF()
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void CDF::~CDF()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: bvar::detail::CDF::describe
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CDF::describe(std::ostream& os, bool) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:64,1
    - Dst: get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:66,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:67,1
    - Dst: std::unique_ptr::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:68,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:73,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:76,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:78,1
    - Dst: std::make_pair
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:79,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    - Dst: arraysize
      Src: /src/brpc/src/bvar/latency_recorder.cpp:80,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 90
    functionName: bvar::detail::CDF::describe_series
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - get_samples
    - std::vector::end
    - std::unique_ptr::combine_of
    - CombinedPercentileSamples::CombinedPercentileSamples
    - arraysize
    - std::vector::begin
    - CHECK_EQ
    - std::make_pair
    - std::unique_ptr::get_number
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: "int CDF::describe_series(\n    std::ostream& os, const SeriesOptions&
      options) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:94,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/src/bvar/latency_recorder.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - dval
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: bvar::detail::double_to_random_int
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 4
    functionsReached:
    - static_cast<int64_t>
    - butil::fast_rand_double
    linkageType: ''
    returnType: int64_t
    signature: int64_t double_to_random_int(double dval)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RecorderWindow*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:103,1
    - Dst: bvar::detail::double_to_random_int
      Src: /src/brpc/src/bvar/latency_recorder.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 109
    functionName: bvar::detail::get_window_recorder_qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::double_to_random_int
    - static_cast<RecorderWindow*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_window_recorder_qps(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<IntRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: bvar::detail::get_recorder_count
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - static_cast<IntRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_recorder_count(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CombinedPercentileSamples::CombinedPercentileSamples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:117,1
    - Dst: PercentileWindow*::get_samples
      Src: /src/brpc/src/bvar/latency_recorder.cpp:119,1
    - Dst: CombinedPercentileSamples*::combine_of
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/latency_recorder.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - w
    argTypes:
    - PercentileWindow*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 3
    functionsReached:
    - std::vector::end
    - CombinedPercentileSamples::CombinedPercentileSamples
    - CombinedPercentileSamples*::combine_of
    - std::vector::begin
    - PercentileWindow*::get_samples
    linkageType: ''
    returnType: CombinedPercentileSamples
    signature: CombinedPercentileSamples * combine(PercentileWindow* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: bvar::detail::get_percetile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - latency_percentile
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_percetile(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:131,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: bvar::detail::get_p1
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p1(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:135,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: bvar::detail::get_p2
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<LatencyRecorder*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:139,1
    - Dst: LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/latency_recorder.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: bvar::detail::get_p3
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - LatencyRecorder*::latency_percentile
    - static_cast<LatencyRecorder*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_p3(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::combine
      Src: /src/brpc/src/bvar/latency_recorder.cpp:145,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:150,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:151,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:152,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 143
    functionDepth: 2
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - std::unique_ptr::get_number
    - bvar::detail::combine
    linkageType: ''
    returnType: Vector<int64_t, 4>
    signature: Vector<int64_t, 4> get_latencies(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 171
    functionName: bvar::detail::LatencyRecorderBase::LatencyRecorderBase
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LatencyRecorderBase::LatencyRecorderBase(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::get_latencies
      Src: /src/brpc/src/bvar/latency_recorder.cpp:177,1
    - Dst: const_cast<detail::PercentileWindow*>
      Src: /src/brpc/src/bvar/latency_recorder.cpp:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 175
    functionDepth: 3
    functionLinenumber: 175
    functionLinenumberEnd: 179
    functionName: bvar::LatencyRecorder::latency_percentiles
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - const_cast<detail::PercentileWindow*>
    - bvar::detail::get_latencies
    linkageType: ''
    returnType: Vector<int64_t, 4>
    signature: Vector<int64_t, 4> LatencyRecorder::latency_percentiles() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_span
      Src: /src/brpc/src/bvar/latency_recorder.cpp:183,1
    - Dst: bvar::detail::double_to_random_int
      Src: /src/brpc/src/bvar/latency_recorder.cpp:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: bvar::LatencyRecorder::qps
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::double_to_random_int
    - get_span
    linkageType: ''
    returnType: int64_t
    signature: int64_t LatencyRecorder::qps(time_t window_size) const
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/latency_recorder.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/latency_recorder.cpp:194,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/bvar/latency_recorder.cpp:199,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/bvar/latency_recorder.cpp:199,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/bvar/latency_recorder.cpp:200,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/bvar/latency_recorder.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/latency_recorder.cpp:202,1
    - Dst: empty
      Src: /src/brpc/src/bvar/latency_recorder.cpp:207,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/bvar/latency_recorder.cpp:208,1
    - Dst: size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:208,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:208,1
    - Dst: std::string::append
      Src: /src/brpc/src/bvar/latency_recorder.cpp:209,1
    - Dst: data
      Src: /src/brpc/src/bvar/latency_recorder.cpp:209,1
    - Dst: size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:209,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/bvar/latency_recorder.cpp:210,1
    - Dst: std::string::append
      Src: /src/brpc/src/bvar/latency_recorder.cpp:211,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/latency_recorder.cpp:211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:211,1
    - Dst: set_debug_name
      Src: /src/brpc/src/bvar/latency_recorder.cpp:216,1
    - Dst: set_debug_name
      Src: /src/brpc/src/bvar/latency_recorder.cpp:217,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:219,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:222,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:225,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:228,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:232,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:233,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:236,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:237,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:240,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:241,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:244,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:247,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:250,1
    - Dst: expose_as
      Src: /src/brpc/src/bvar/latency_recorder.cpp:253,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/latency_recorder.cpp:257,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/latency_recorder.cpp:260,1
    - Dst: set_vector_names
      Src: /src/brpc/src/bvar/latency_recorder.cpp:260,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 62
    argCount: 2
    argNames:
    - ' prefix1'
    - ' prefix2'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 263
    functionName: bvar::LatencyRecorder::expose
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 16
    functionsReached:
    - set_vector_names
    - std::string::push_back
    - std::string::reserve
    - snprintf
    - butil::StringPiece::remove_suffix
    - set_debug_name
    - CHECK_EQ
    - std::string::append
    - empty
    - butil::StringPiece::data
    - data
    - size
    - expose_as
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: int
    signature: "int LatencyRecorder::expose(const butil::StringPiece& prefix1,\n                            const
      butil::StringPiece& prefix2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine
      Src: /src/brpc/src/bvar/latency_recorder.cpp:267,1
    - Dst: std::unique_ptr::get_number
      Src: /src/brpc/src/bvar/latency_recorder.cpp:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ratio
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::LatencyRecorder::latency_percentile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get_number
    - combine
    linkageType: ''
    returnType: int64_t
    signature: int64_t LatencyRecorder::latency_percentile(double ratio) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:272,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:273,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:274,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:275,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:276,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:277,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:278,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:279,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:280,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:281,1
    - Dst: bvar::LatencyRecorder::hide
      Src: /src/brpc/src/bvar/latency_recorder.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 283
    functionName: bvar::LatencyRecorder::hide
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 2
    functionsReached:
    - bvar::LatencyRecorder::hide
    linkageType: ''
    returnType: void
    signature: void LatencyRecorder::hide()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 293
    functionName: '& LatencyRecorder::operator<<(int64_t latency)'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LatencyRecorder
    signature: LatencyRecorder & LatencyRecorder::operator<<(int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency
      Src: /src/brpc/src/bvar/latency_recorder.cpp:296,1
    - Dst: window_size
      Src: /src/brpc/src/bvar/latency_recorder.cpp:297,1
    - Dst: max_latency
      Src: /src/brpc/src/bvar/latency_recorder.cpp:297,1
    - Dst: qps
      Src: /src/brpc/src/bvar/latency_recorder.cpp:298,1
    - Dst: count
      Src: /src/brpc/src/bvar/latency_recorder.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' rec'
    argTypes:
    - std::ostream
    - LatencyRecorder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 300
    functionName: '& operator<<(std::ostream& os, const LatencyRecorder& rec)'
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - latency
    - window_size
    - count
    - max_latency
    - qps
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const LatencyRecorder&
      rec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bvar/variable.cpp:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: bvar::validate_bvar_abort_on_same_name
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    linkageType: ''
    returnType: bool
    signature: bool validate_bvar_abort_on_same_name(const char*, bool v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: bvar::VarEntry::VarEntry
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VarEntry()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/bvar/variable.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:80,1
    - Dst: pthread_mutexattr_init
      Src: /src/brpc/src/bvar/variable.cpp:84,1
    - Dst: pthread_mutexattr_settype
      Src: /src/brpc/src/bvar/variable.cpp:85,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/variable.cpp:86,1
    - Dst: pthread_mutexattr_destroy
      Src: /src/brpc/src/bvar/variable.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 88
    functionName: bvar::VarMapWithLock
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutexattr_settype
    - pthread_mutexattr_init
    - pthread_mutexattr_destroy
    - pthread_mutex_init
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void VarMapWithLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VarMapWithLock::VarMapWithLock
      Src: /src/brpc/src/bvar/variable.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 100
    functionName: bvar::init_var_maps
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - VarMapWithLock::VarMapWithLock
    linkageType: ''
    returnType: void
    signature: void init_var_maps()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:103,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 112
    functionName: bvar::sub_map_index
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - c_str
    - empty
    linkageType: ''
    returnType: size_t
    signature: size_t sub_map_index(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/variable.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: bvar::get_var_maps
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: VarMapWithLock
    signature: VarMapWithLock * get_var_maps()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_var_maps
      Src: /src/brpc/src/bvar/variable.cpp:120,1
    - Dst: bvar::sub_map_index
      Src: /src/brpc/src/bvar/variable.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 2
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: bvar::get_var_map
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - bvar::sub_map_index
    - bvar::get_var_maps
    linkageType: ''
    returnType: VarMapWithLock
    signature: VarMapWithLock & get_var_map(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/variable.cpp:125,1
    - Dst: hide
      Src: /src/brpc/src/bvar/variable.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 127
    functionName: Variable::~Variable()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - hide
    linkageType: ''
    returnType: void
    signature: void Variable::~Variable()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:133,1
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/variable.cpp:144,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:147,1
    - Dst: reserve
      Src: /src/brpc/src/bvar/variable.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:148,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:149,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:150,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:151,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:151,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/variable.cpp:152,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:155,1
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:157,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:159,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:160,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bvar/variable.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:177,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:178,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:179,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 181
    functionName: bvar::Variable::expose_impl
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 8
    functionsReached:
    - get_var_map
    - butil::back_char
    - size
    - RELEASE_ASSERT_VERBOSE
    - bvar::Variable::describe_exposed
    - BAIDU_SCOPED_LOCK
    - push_back
    - seek
    - bvar::Variable::hide
    - empty
    - clear
    - reserve
    - LOG
    - to_underscored_name
    linkageType: ''
    returnType: int
    signature: "int Variable::expose_impl(const butil::StringPiece& prefix,\n                          const
      butil::StringPiece& name,\n                          DisplayFilter display_filter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 185
    functionName: bvar::Variable::is_hidden
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool Variable::is_hidden() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:188,1
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:191,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:192,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:193,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/variable.cpp:195,1
    - Dst: erase
      Src: /src/brpc/src/bvar/variable.cpp:195,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/variable.cpp:197,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 201
    functionName: bvar::Variable::hide
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 7
    functionsReached:
    - get_var_map
    - BAIDU_SCOPED_LOCK
    - CHECK_EQ
    - erase
    - empty
    - CHECK
    - clear
    - seek
    linkageType: ''
    returnType: bool
    signature: bool Variable::hide()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<std::string>*::clear
      Src: /src/brpc/src/bvar/variable.cpp:208,1
    - Dst: std::vector<std::string>*::capacity
      Src: /src/brpc/src/bvar/variable.cpp:209,1
    - Dst: std::vector<std::string>*::reserve
      Src: /src/brpc/src/bvar/variable.cpp:210,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/src/bvar/variable.cpp:210,1
    - Dst: get_var_maps
      Src: /src/brpc/src/bvar/variable.cpp:212,1
    - Dst: begin
      Src: /src/brpc/src/bvar/variable.cpp:217,1
    - Dst: end
      Src: /src/brpc/src/bvar/variable.cpp:217,1
    - Dst: save_iterator
      Src: /src/brpc/src/bvar/variable.cpp:220,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bvar/variable.cpp:222,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/bvar/variable.cpp:223,1
    - Dst: restore_iterator
      Src: /src/brpc/src/bvar/variable.cpp:224,1
    - Dst: begin
      Src: /src/brpc/src/bvar/variable.cpp:225,1
    - Dst: std::vector<std::string>*::clear
      Src: /src/brpc/src/bvar/variable.cpp:226,1
    - Dst: end
      Src: /src/brpc/src/bvar/variable.cpp:228,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:233,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - names
    - display_filter
    argTypes:
    - std::vector<std::string>*
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 237
    functionName: bvar::Variable::list_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 10
    functionsReached:
    - end
    - std::vector<std::string>*::push_back
    - get_var_maps
    - std::vector<std::string>*::clear
    - std::unique_lock::lock
    - save_iterator
    - std::vector<std::string>*::capacity
    - std::vector<std::string>*::reserve
    - begin
    - std::unique_lock::unlock
    - restore_iterator
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: "void Variable::list_exposed(std::vector<std::string>* names,\n                            DisplayFilter
      display_filter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_var_maps
      Src: /src/brpc/src/bvar/variable.cpp:241,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:243,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 246
    functionName: bvar::Variable::count_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 15
    functionsReached:
    - size
    - get_var_maps
    linkageType: ''
    returnType: size_t
    signature: size_t Variable::count_exposed()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:251,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:252,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:253,1
    - Dst: VarEntry*::var::describe
      Src: /src/brpc/src/bvar/variable.cpp:260,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - ' name'
    - ' os'
    - quote_string
    - display_filter
    argTypes:
    - std::string
    - std::ostream
    - bool
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 262
    functionName: bvar::Variable::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 9
    functionsReached:
    - get_var_map
    - seek
    - VarEntry*::var::describe
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int Variable::describe_exposed(const std::string& name, std::ostream&
      os,\n                               bool quote_string,\n                               DisplayFilter
      display_filter)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:268,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:269,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/variable.cpp:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' name'
    - quote_string
    - display_filter
    argTypes:
    - std::string
    - bool
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 272
    functionName: bvar::Variable::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 10
    functionsReached:
    - bvar::Variable::describe_exposed
    - std::string
    - std::ostringstream::str
    linkageType: ''
    returnType: std::string
    signature: "std::string Variable::describe_exposed(const std::string& name,\n
      \                                      bool quote_string,\n                                       DisplayFilter
      display_filter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: describe
      Src: /src/brpc/src/bvar/variable.cpp:276,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: bvar::Variable::get_description
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - describe
    - std::ostringstream::str
    linkageType: ''
    returnType: std::string
    signature: std::string Variable::get_description() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: describe
      Src: /src/brpc/src/bvar/variable.cpp:283,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: bvar::Variable::get_value
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - describe
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void Variable::get_value(boost::any* value) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:291,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:292,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:293,1
    - Dst: VarEntry*::var::describe_series
      Src: /src/brpc/src/bvar/variable.cpp:297,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' name'
    - ' os'
    - ' options'
    argTypes:
    - std::string
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 298
    functionName: bvar::Variable::describe_series_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - get_var_map
    - seek
    - VarEntry*::var::describe_series
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int Variable::describe_series_exposed(const std::string& name,\n                                      std::ostream&
      os,\n                                      const SeriesOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:302,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:303,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:304,1
    - Dst: VarEntry*::var::get_value
      Src: /src/brpc/src/bvar/variable.cpp:308,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - std::string
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 310
    functionName: bvar::Variable::get_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - get_var_map
    - seek
    - VarEntry*::var::get_value
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int Variable::get_exposed(const std::string& name, boost::any* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 320
    functionName: bvar::CharArrayStreamBuf::CharArrayStreamBuf
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    - Dst: pbase
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    - Dst: pptr
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    - Dst: pbase
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 328
    functionName: bvar::CharArrayStreamBuf::data
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - pbase
    - pptr
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/bvar/variable.cpp:336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 337
    functionName: CharArrayStreamBuf::~CharArrayStreamBuf()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::~CharArrayStreamBuf()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/bvar/variable.cpp:340,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/variable.cpp:343,1
    - Dst: malloc
      Src: /src/brpc/src/bvar/variable.cpp:344,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/variable.cpp:345,1
    - Dst: setp
      Src: /src/brpc/src/bvar/variable.cpp:346,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/bvar/variable.cpp:347,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/variable.cpp:349,1
    - Dst: free
      Src: /src/brpc/src/bvar/variable.cpp:350,1
    - Dst: setp
      Src: /src/brpc/src/bvar/variable.cpp:354,1
    - Dst: pbump
      Src: /src/brpc/src/bvar/variable.cpp:355,1
    - Dst: sputc
      Src: /src/brpc/src/bvar/variable.cpp:357,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 358
    functionName: bvar::CharArrayStreamBuf::overflow
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - free
    - sputc
    - pbump
    - malloc
    - memcpy
    - BAIDU_UNLIKELY
    - setp
    - brpc::http_message_needs_eof
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::overflow(int ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 363
    functionName: bvar::CharArrayStreamBuf::sync
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::sync()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setp
      Src: /src/brpc/src/bvar/variable.cpp:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 367
    functionName: bvar::CharArrayStreamBuf::reset
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - setp
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::reset()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 3
    argNames:
    - wild
    - str
    - question_mark
    argTypes:
    - char*
    - char*
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 404
    functionName: bvar::wildcmp
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool wildcmp(const char* wild, const char* str, char question_mark)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:413,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:418,1
    - Dst: std::string::assign
      Src: /src/brpc/src/bvar/variable.cpp:420,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/bvar/variable.cpp:420,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/bvar/variable.cpp:420,1
    - Dst: std::string::find_first_of
      Src: /src/brpc/src/bvar/variable.cpp:421,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:422,1
    - Dst: reserve
      Src: /src/brpc/src/bvar/variable.cpp:423,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/variable.cpp:425,1
    - Dst: insert
      Src: /src/brpc/src/bvar/variable.cpp:427,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 3
    argNames:
    - ' wildcards'
    - question_mark
    - on_both_empty
    argTypes:
    - std::string
    - char
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 408
    functionDepth: 1
    functionLinenumber: 408
    functionLinenumberEnd: 430
    functionName: bvar::WildcardMatcher::WildcardMatcher
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    - std::string::find_first_of
    - push_back
    - c_str
    - empty
    - insert
    - reserve
    - std::string::assign
    linkageType: ''
    returnType: void
    signature: "void WildcardMatcher(const std::string& wildcards,\n                    char
      question_mark,\n                    bool on_both_empty)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:433,1
    - Dst: find
      Src: /src/brpc/src/bvar/variable.cpp:434,1
    - Dst: end
      Src: /src/brpc/src/bvar/variable.cpp:434,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:437,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:440,1
    - Dst: wildcmp
      Src: /src/brpc/src/bvar/variable.cpp:441,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:441,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:441,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 446
    functionName: bvar::WildcardMatcher::match
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - end
    - find
    - c_str
    - empty
    - wildcmp
    - size
    linkageType: ''
    returnType: bool
    signature: bool match(const std::string& name) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 448
    functionName: '& wildcards() const'
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> & wildcards() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 449
    functionName: '& exact_names() const'
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::set<std::string>
    signature: std::set<std::string> & exact_names() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 462
    functionName: bvar::DumpOptions::DumpOptions
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DumpOptions::DumpOptions()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:466,1
    - Dst: WildcardMatcher::wildcards
      Src: /src/brpc/src/bvar/variable.cpp:486,1
    - Dst: WildcardMatcher::exact_names
      Src: /src/brpc/src/bvar/variable.cpp:487,1
    - Dst: WildcardMatcher::exact_names
      Src: /src/brpc/src/bvar/variable.cpp:489,1
    - Dst: WildcardMatcher::exact_names
      Src: /src/brpc/src/bvar/variable.cpp:490,1
    - Dst: WildcardMatcher::match
      Src: /src/brpc/src/bvar/variable.cpp:492,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:493,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:498,1
    - Dst: Dumper*::dump
      Src: /src/brpc/src/bvar/variable.cpp:500,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:500,1
    - Dst: CharArrayStreamBuf::reset
      Src: /src/brpc/src/bvar/variable.cpp:503,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/src/bvar/variable.cpp:510,1
    - Dst: std::sort
      Src: /src/brpc/src/bvar/variable.cpp:512,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/variable.cpp:512,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/variable.cpp:512,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/variable.cpp:514,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/variable.cpp:514,1
    - Dst: WildcardMatcher::match
      Src: /src/brpc/src/bvar/variable.cpp:516,1
    - Dst: WildcardMatcher::match
      Src: /src/brpc/src/bvar/variable.cpp:516,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:517,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:522,1
    - Dst: Dumper*::dump
      Src: /src/brpc/src/bvar/variable.cpp:524,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:524,1
    - Dst: CharArrayStreamBuf::reset
      Src: /src/brpc/src/bvar/variable.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:533,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:533,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 47
    argCount: 2
    argNames:
    - dumper
    - poptions
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 536
    functionName: bvar::Variable::dump_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 2
    functionsReached:
    - std::ostringstream::str
    - bvar::Variable::list_exposed
    - Dumper*::dump
    - WildcardMatcher::wildcards
    - std::vector::end
    - WildcardMatcher::exact_names
    - bvar::Variable::describe_exposed
    - std::sort
    - std::vector::begin
    - CharArrayStreamBuf::data
    - CharArrayStreamBuf::reset
    - WildcardMatcher::match
    - LOG
    linkageType: ''
    returnType: int
    signature: int Variable::dump_exposed(Dumper* dumper, const DumpOptions* poptions)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/bvar/variable.cpp:543,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/variable.cpp:544,1
    - Dst: std::ifstream::good
      Src: /src/brpc/src/bvar/variable.cpp:549,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/variable.cpp:550,1
    - Dst: std::string::size
      Src: /src/brpc/src/bvar/variable.cpp:555,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:556,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:558,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.cpp:559,1
    - Dst: std::string::data
      Src: /src/brpc/src/bvar/variable.cpp:559,1
    - Dst: std::string::size
      Src: /src/brpc/src/bvar/variable.cpp:560,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:562,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 541
    functionDepth: 1
    functionLinenumber: 541
    functionLinenumberEnd: 565
    functionName: bvar::read_command_name
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::string::size
    - std::string
    - butil::back_char
    - std::string::data
    - bvar::to_underscored_name
    - butil::BasicStringPiece::BasicStringPiece
    - std::ifstream::good
    - std::ifstream::is_open
    linkageType: ''
    returnType: std::string
    signature: std::string read_command_name()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/variable.cpp:573,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/variable.cpp:573,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/variable.cpp:574,1
    - Dst: isspace
      Src: /src/brpc/src/bvar/variable.cpp:574,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/bvar/variable.cpp:575,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/variable.cpp:575,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/variable.cpp:575,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/bvar/variable.cpp:577,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:578,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:579,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/variable.cpp:580,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - ' filename'
    - s
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 583
    functionName: bvar::FileDumper::FileDumper
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - isspace
    - butil::back_char
    - butil::StringPiece::remove_suffix
    - push_back
    - butil::StringPiece::data
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - to_underscored_name
    linkageType: ''
    returnType: void
    signature: void FileDumper(const std::string& filename, butil::StringPiece s/*prefix*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/bvar/variable.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 587
    functionName: ~FileDumper()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void ~FileDumper()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/src/bvar/variable.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 593
    functionName: bvar::FileDumper::close
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: void close()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath
      Src: /src/brpc/src/bvar/variable.cpp:599,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/bvar/variable.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:601,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bvar/variable.cpp:601,1
    - Dst: fopen
      Src: /src/brpc/src/bvar/variable.cpp:605,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:605,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:607,1
    - Dst: fprintf
      Src: /src/brpc/src/bvar/variable.cpp:611,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:612,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:612,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:613,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:613,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:614,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:614,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:615,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:615,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/variable.cpp:616,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - ' name'
    - ' desc'
    - ' separator'
    argTypes:
    - std::string
    - butil::StringPiece
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 596
    functionDepth: 1
    functionLinenumber: 596
    functionLinenumberEnd: 620
    functionName: bvar::FileDumper::dump_impl
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::value
    - c_str
    - fprintf
    - data
    - butil::FilePath
    - size
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool dump_impl(const std::string& name, const butil::StringPiece& desc,
      const std::string& separator)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' filename'
    - prefix
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 631
    functionName: bvar::CommonFileDumper::CommonFileDumper
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CommonFileDumper(const std::string& filename, butil::StringPiece
      prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dump_impl
      Src: /src/brpc/src/bvar/variable.cpp:633,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 634
    functionName: bvar::CommonFileDumper::dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - dump_impl
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' filename'
    - prefix
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: bvar::PrometheusFileDumper::PrometheusFileDumper
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrometheusFileDumper(const std::string& filename, butil::StringPiece
      prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dump_impl
      Src: /src/brpc/src/bvar/variable.cpp:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 646
    functionName: bvar::PrometheusFileDumper::dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - dump_impl
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::FinalExtension
      Src: /src/brpc/src/bvar/variable.cpp:656,1
    - Dst: butil::FilePath::RemoveFinalExtension
      Src: /src/brpc/src/bvar/variable.cpp:658,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/bvar/variable.cpp:662,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/bvar/variable.cpp:663,1
    - Dst: butil::FilePath::AddExtension
      Src: /src/brpc/src/bvar/variable.cpp:665,1
    - Dst: CommonFileDumper::CommonFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:664,1
    - Dst: WildcardMatcher::WildcardMatcher
      Src: /src/brpc/src/bvar/variable.cpp:666,1
    - Dst: emplace_back
      Src: /src/brpc/src/bvar/variable.cpp:667,1
    - Dst: emplace_back
      Src: /src/brpc/src/bvar/variable.cpp:669,1
    - Dst: butil::FilePath::AddExtension
      Src: /src/brpc/src/bvar/variable.cpp:670,1
    - Dst: CommonFileDumper::CommonFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:670,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - tabs
    - filename
    - s
    argTypes:
    - std::string
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 653
    functionDepth: 1
    functionLinenumber: 653
    functionLinenumberEnd: 672
    functionName: bvar::FileDumperGroup::FileDumperGroup
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - CommonFileDumper::CommonFileDumper
    - WildcardMatcher::WildcardMatcher
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - emplace_back
    - butil::FilePath::RemoveFinalExtension
    - butil::FilePath::FinalExtension
    - butil::FilePath::AddExtension
    linkageType: ''
    returnType: void
    signature: "void FileDumperGroup(std::string tabs, std::string filename, \n                     butil::StringPiece
      s/*prefix*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:674,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:678,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 679
      start: 673
    functionDepth: 1
    functionLinenumber: 673
    functionLinenumberEnd: 679
    functionName: ~FileDumperGroup()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - size
    - clear
    linkageType: ''
    returnType: void
    signature: void ~FileDumperGroup()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:682,1
    - Dst: second::match
      Src: /src/brpc/src/bvar/variable.cpp:683,1
    - Dst: first::dump
      Src: /src/brpc/src/bvar/variable.cpp:684,1
    - Dst: back
      Src: /src/brpc/src/bvar/variable.cpp:688,1
    - Dst: bvar::FileDumperGroup::dump
      Src: /src/brpc/src/bvar/variable.cpp:688,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 681
    functionDepth: 1
    functionLinenumber: 681
    functionLinenumberEnd: 689
    functionName: bvar::FileDumperGroup::dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 1
    functionsReached:
    - back
    - first::dump
    - bvar::FileDumperGroup::dump
    - second::match
    - size
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
      override
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/variable.cpp:733,1
    - Dst: bvar::read_command_name
      Src: /src/brpc/src/bvar/variable.cpp:734,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:746,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:747,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:752,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:757,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:760,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:761,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:764,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:765,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:770,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:771,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:774,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:775,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:778,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:779,1
    - Dst: std::string::empty
      Src: /src/brpc/src/bvar/variable.cpp:783,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:789,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:791,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:795,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:798,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:800,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/src/bvar/variable.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:805,1
    - Dst: std::string::empty
      Src: /src/brpc/src/bvar/variable.cpp:810,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:816,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:818,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:822,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:825,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:827,1
    - Dst: CommonFileDumper::CommonFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:832,1
    - Dst: PrometheusFileDumper::PrometheusFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:834,1
    - Dst: bvar::MVariableBase::dump_exposed
      Src: /src/brpc/src/bvar/variable.cpp:836,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:838,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:851,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/bvar/variable.cpp:854,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/variable.cpp:855,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/src/bvar/variable.cpp:856,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/variable.cpp:857,1
    - Dst: usleep
      Src: /src/brpc/src/bvar/variable.cpp:858,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 82
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 860
      start: 730
    functionDepth: 3
    functionLinenumber: 730
    functionLinenumberEnd: 860
    functionName: bvar::dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - butil::PlatformThread::SetName
    - bvar::Variable::dump_exposed
    - std::string::find
    - std::string::replace
    - CommonFileDumper::CommonFileDumper
    - usleep
    - std::string::empty
    - PrometheusFileDumper::PrometheusFileDumper
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bvar::MVariableBase::dump_exposed
    - bvar::read_command_name
    - pthread_cond_timedwait
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void * dumping_thread(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/variable.cpp:864,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:866,1
    - Dst: berror
      Src: /src/brpc/src/bvar/variable.cpp:866,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/variable.cpp:870,1
    - Dst: pthread_detach
      Src: /src/brpc/src/bvar/variable.cpp:870,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 862
    functionDepth: 1
    functionLinenumber: 862
    functionLinenumberEnd: 872
    functionName: bvar::launch_dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - pthread_detach
    - CHECK_EQ
    - berror
    - LOG
    linkageType: ''
    returnType: void
    signature: void launch_dumping_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/variable.cpp:876,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 878
      start: 875
    functionDepth: 0
    functionLinenumber: 875
    functionLinenumberEnd: 878
    functionName: bvar::enable_dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool enable_dumping_thread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::enable_dumping_thread
      Src: /src/brpc/src/bvar/variable.cpp:882,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - enabled
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 885
      start: 880
    functionDepth: 1
    functionLinenumber: 880
    functionLinenumberEnd: 885
    functionName: bvar::validate_bvar_dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - bvar::enable_dumping_thread
    linkageType: ''
    returnType: bool
    signature: bool validate_bvar_dump(const char*, bool enabled)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:895,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 899
      start: 889
    functionDepth: 1
    functionLinenumber: 889
    functionLinenumberEnd: 899
    functionName: bvar::validate_bvar_dump_interval
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validate_bvar_dump_interval(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/variable.cpp:905,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 907
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 907
    functionName: bvar::wakeup_dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_cond_signal
    linkageType: ''
    returnType: bool
    signature: bool wakeup_dumping_thread(const char*, const std::string&)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:929,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/variable.cpp:935,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' format'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 926
    functionDepth: 1
    functionLinenumber: 926
    functionLinenumberEnd: 937
    functionName: bvar::validate_mbvar_dump_format
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_cond_signal
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validate_mbvar_dump_format(const char*, const std::string& format)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::reserve
      Src: /src/brpc/src/bvar/variable.cpp:943,1
    - Dst: std::string*::size
      Src: /src/brpc/src/bvar/variable.cpp:943,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:943,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:944,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:944,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:944,1
    - Dst: isalpha
      Src: /src/brpc/src/bvar/variable.cpp:945,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:947,1
    - Dst: isupper
      Src: /src/brpc/src/bvar/variable.cpp:947,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:948,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:949,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:951,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:953,1
    - Dst: isdigit
      Src: /src/brpc/src/bvar/variable.cpp:955,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:956,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/bvar/variable.cpp:957,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:957,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:958,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - name
    - ' src'
    argTypes:
    - std::string*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 942
    functionDepth: 1
    functionLinenumber: 942
    functionLinenumberEnd: 961
    functionName: bvar::to_underscored_name
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 1
    functionsReached:
    - std::string*::size
    - std::string*::reserve
    - isalpha
    - isupper
    - butil::back_char
    - isdigit
    - std::string*::push_back
    - data
    - size
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: void to_underscored_name(std::string* name, const butil::StringPiece&
      src)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bvar/variable.cpp:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: bvar::validate_bvar_abort_on_same_name
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    linkageType: ''
    returnType: bool
    signature: bool validate_bvar_abort_on_same_name(const char*, bool v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: bvar::VarEntry::VarEntry
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VarEntry()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/bvar/variable.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:80,1
    - Dst: pthread_mutexattr_init
      Src: /src/brpc/src/bvar/variable.cpp:84,1
    - Dst: pthread_mutexattr_settype
      Src: /src/brpc/src/bvar/variable.cpp:85,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/variable.cpp:86,1
    - Dst: pthread_mutexattr_destroy
      Src: /src/brpc/src/bvar/variable.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 88
    functionName: bvar::VarMapWithLock
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutexattr_settype
    - pthread_mutexattr_init
    - pthread_mutexattr_destroy
    - pthread_mutex_init
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void VarMapWithLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VarMapWithLock::VarMapWithLock
      Src: /src/brpc/src/bvar/variable.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 100
    functionName: bvar::init_var_maps
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - VarMapWithLock::VarMapWithLock
    linkageType: ''
    returnType: void
    signature: void init_var_maps()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:103,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 112
    functionName: bvar::sub_map_index
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 1
    functionsReached:
    - c_str
    - empty
    linkageType: ''
    returnType: size_t
    signature: size_t sub_map_index(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/variable.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: bvar::get_var_maps
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: VarMapWithLock
    signature: VarMapWithLock * get_var_maps()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_var_maps
      Src: /src/brpc/src/bvar/variable.cpp:120,1
    - Dst: bvar::sub_map_index
      Src: /src/brpc/src/bvar/variable.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 2
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: bvar::get_var_map
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - bvar::sub_map_index
    - bvar::get_var_maps
    linkageType: ''
    returnType: VarMapWithLock
    signature: VarMapWithLock & get_var_map(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/variable.cpp:125,1
    - Dst: hide
      Src: /src/brpc/src/bvar/variable.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 127
    functionName: Variable::~Variable()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - hide
    linkageType: ''
    returnType: void
    signature: void Variable::~Variable()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:133,1
    - Dst: bvar::Variable::hide
      Src: /src/brpc/src/bvar/variable.cpp:144,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:147,1
    - Dst: reserve
      Src: /src/brpc/src/bvar/variable.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:148,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:149,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:150,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:151,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:151,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/variable.cpp:152,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:155,1
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:157,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:159,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:160,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bvar/variable.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:177,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:178,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:179,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 129
    functionDepth: 2
    functionLinenumber: 129
    functionLinenumberEnd: 181
    functionName: bvar::Variable::expose_impl
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 8
    functionsReached:
    - get_var_map
    - butil::back_char
    - size
    - RELEASE_ASSERT_VERBOSE
    - bvar::Variable::describe_exposed
    - BAIDU_SCOPED_LOCK
    - push_back
    - seek
    - bvar::Variable::hide
    - empty
    - clear
    - reserve
    - LOG
    - to_underscored_name
    linkageType: ''
    returnType: int
    signature: "int Variable::expose_impl(const butil::StringPiece& prefix,\n                          const
      butil::StringPiece& name,\n                          DisplayFilter display_filter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 185
    functionName: bvar::Variable::is_hidden
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool Variable::is_hidden() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:188,1
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:191,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:192,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:193,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/variable.cpp:195,1
    - Dst: erase
      Src: /src/brpc/src/bvar/variable.cpp:195,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/variable.cpp:197,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 201
    functionName: bvar::Variable::hide
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 8
    functionsReached:
    - get_var_map
    - BAIDU_SCOPED_LOCK
    - CHECK_EQ
    - erase
    - empty
    - CHECK
    - clear
    - seek
    linkageType: ''
    returnType: bool
    signature: bool Variable::hide()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<std::string>*::clear
      Src: /src/brpc/src/bvar/variable.cpp:208,1
    - Dst: std::vector<std::string>*::capacity
      Src: /src/brpc/src/bvar/variable.cpp:209,1
    - Dst: std::vector<std::string>*::reserve
      Src: /src/brpc/src/bvar/variable.cpp:210,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/src/bvar/variable.cpp:210,1
    - Dst: get_var_maps
      Src: /src/brpc/src/bvar/variable.cpp:212,1
    - Dst: begin
      Src: /src/brpc/src/bvar/variable.cpp:217,1
    - Dst: end
      Src: /src/brpc/src/bvar/variable.cpp:217,1
    - Dst: save_iterator
      Src: /src/brpc/src/bvar/variable.cpp:220,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bvar/variable.cpp:222,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/bvar/variable.cpp:223,1
    - Dst: restore_iterator
      Src: /src/brpc/src/bvar/variable.cpp:224,1
    - Dst: begin
      Src: /src/brpc/src/bvar/variable.cpp:225,1
    - Dst: std::vector<std::string>*::clear
      Src: /src/brpc/src/bvar/variable.cpp:226,1
    - Dst: end
      Src: /src/brpc/src/bvar/variable.cpp:228,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:233,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - names
    - display_filter
    argTypes:
    - std::vector<std::string>*
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 237
    functionName: bvar::Variable::list_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 11
    functionsReached:
    - end
    - std::vector<std::string>*::push_back
    - get_var_maps
    - std::vector<std::string>*::clear
    - std::unique_lock::lock
    - save_iterator
    - std::vector<std::string>*::capacity
    - std::vector<std::string>*::reserve
    - begin
    - std::unique_lock::unlock
    - restore_iterator
    - bvar::Variable::count_exposed
    linkageType: ''
    returnType: void
    signature: "void Variable::list_exposed(std::vector<std::string>* names,\n                            DisplayFilter
      display_filter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_var_maps
      Src: /src/brpc/src/bvar/variable.cpp:241,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:243,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 246
    functionName: bvar::Variable::count_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 16
    functionsReached:
    - size
    - get_var_maps
    linkageType: ''
    returnType: size_t
    signature: size_t Variable::count_exposed()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:251,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:252,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:253,1
    - Dst: VarEntry*::var::describe
      Src: /src/brpc/src/bvar/variable.cpp:260,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - ' name'
    - ' os'
    - quote_string
    - display_filter
    argTypes:
    - std::string
    - std::ostream
    - bool
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 262
    functionName: bvar::Variable::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 12
    functionsReached:
    - get_var_map
    - seek
    - VarEntry*::var::describe
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int Variable::describe_exposed(const std::string& name, std::ostream&
      os,\n                               bool quote_string,\n                               DisplayFilter
      display_filter)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:268,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:269,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/variable.cpp:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' name'
    - quote_string
    - display_filter
    argTypes:
    - std::string
    - bool
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 272
    functionName: bvar::Variable::describe_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 13
    functionsReached:
    - bvar::Variable::describe_exposed
    - std::string
    - std::ostringstream::str
    linkageType: ''
    returnType: std::string
    signature: "std::string Variable::describe_exposed(const std::string& name,\n
      \                                      bool quote_string,\n                                       DisplayFilter
      display_filter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: describe
      Src: /src/brpc/src/bvar/variable.cpp:276,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: bvar::Variable::get_description
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - describe
    - std::ostringstream::str
    linkageType: ''
    returnType: std::string
    signature: std::string Variable::get_description() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: describe
      Src: /src/brpc/src/bvar/variable.cpp:283,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: bvar::Variable::get_value
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - describe
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void Variable::get_value(boost::any* value) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:291,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:292,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:293,1
    - Dst: VarEntry*::var::describe_series
      Src: /src/brpc/src/bvar/variable.cpp:297,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' name'
    - ' os'
    - ' options'
    argTypes:
    - std::string
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 298
    functionName: bvar::Variable::describe_series_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - get_var_map
    - seek
    - VarEntry*::var::describe_series
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int Variable::describe_series_exposed(const std::string& name,\n                                      std::ostream&
      os,\n                                      const SeriesOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_var_map
      Src: /src/brpc/src/bvar/variable.cpp:302,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/variable.cpp:303,1
    - Dst: seek
      Src: /src/brpc/src/bvar/variable.cpp:304,1
    - Dst: VarEntry*::var::get_value
      Src: /src/brpc/src/bvar/variable.cpp:308,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - std::string
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 310
    functionName: bvar::Variable::get_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - get_var_map
    - seek
    - VarEntry*::var::get_value
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int Variable::get_exposed(const std::string& name, boost::any* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 320
    functionName: bvar::CharArrayStreamBuf::CharArrayStreamBuf
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    - Dst: pbase
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    - Dst: pptr
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    - Dst: pbase
      Src: /src/brpc/src/bvar/variable.cpp:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 328
    functionName: bvar::CharArrayStreamBuf::data
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - pbase
    - pptr
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/bvar/variable.cpp:336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 337
    functionName: CharArrayStreamBuf::~CharArrayStreamBuf()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::~CharArrayStreamBuf()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/bvar/variable.cpp:340,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/variable.cpp:343,1
    - Dst: malloc
      Src: /src/brpc/src/bvar/variable.cpp:344,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/variable.cpp:345,1
    - Dst: setp
      Src: /src/brpc/src/bvar/variable.cpp:346,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/bvar/variable.cpp:347,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/variable.cpp:349,1
    - Dst: free
      Src: /src/brpc/src/bvar/variable.cpp:350,1
    - Dst: setp
      Src: /src/brpc/src/bvar/variable.cpp:354,1
    - Dst: pbump
      Src: /src/brpc/src/bvar/variable.cpp:355,1
    - Dst: sputc
      Src: /src/brpc/src/bvar/variable.cpp:357,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 358
    functionName: bvar::CharArrayStreamBuf::overflow
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - free
    - sputc
    - pbump
    - malloc
    - memcpy
    - BAIDU_UNLIKELY
    - setp
    - brpc::http_message_needs_eof
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::overflow(int ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 363
    functionName: bvar::CharArrayStreamBuf::sync
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::sync()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setp
      Src: /src/brpc/src/bvar/variable.cpp:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 367
    functionName: bvar::CharArrayStreamBuf::reset
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - setp
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::reset()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 3
    argNames:
    - wild
    - str
    - question_mark
    argTypes:
    - char*
    - char*
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 404
    functionName: bvar::wildcmp
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool wildcmp(const char* wild, const char* str, char question_mark)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:413,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:418,1
    - Dst: std::string::assign
      Src: /src/brpc/src/bvar/variable.cpp:420,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/bvar/variable.cpp:420,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/bvar/variable.cpp:420,1
    - Dst: std::string::find_first_of
      Src: /src/brpc/src/bvar/variable.cpp:421,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:422,1
    - Dst: reserve
      Src: /src/brpc/src/bvar/variable.cpp:423,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/variable.cpp:425,1
    - Dst: insert
      Src: /src/brpc/src/bvar/variable.cpp:427,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 3
    argNames:
    - ' wildcards'
    - question_mark
    - on_both_empty
    argTypes:
    - std::string
    - char
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 408
    functionDepth: 1
    functionLinenumber: 408
    functionLinenumberEnd: 430
    functionName: bvar::WildcardMatcher::WildcardMatcher
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    - std::string::find_first_of
    - push_back
    - c_str
    - empty
    - insert
    - reserve
    - std::string::assign
    linkageType: ''
    returnType: void
    signature: "void WildcardMatcher(const std::string& wildcards,\n                    char
      question_mark,\n                    bool on_both_empty)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:433,1
    - Dst: find
      Src: /src/brpc/src/bvar/variable.cpp:434,1
    - Dst: end
      Src: /src/brpc/src/bvar/variable.cpp:434,1
    - Dst: empty
      Src: /src/brpc/src/bvar/variable.cpp:437,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:440,1
    - Dst: wildcmp
      Src: /src/brpc/src/bvar/variable.cpp:441,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:441,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:441,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 446
    functionName: bvar::WildcardMatcher::match
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - end
    - find
    - c_str
    - empty
    - wildcmp
    - size
    linkageType: ''
    returnType: bool
    signature: bool match(const std::string& name) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 448
    functionName: '& wildcards() const'
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> & wildcards() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 449
    functionName: '& exact_names() const'
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::set<std::string>
    signature: std::set<std::string> & exact_names() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 462
    functionName: bvar::DumpOptions::DumpOptions
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DumpOptions::DumpOptions()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:466,1
    - Dst: WildcardMatcher::wildcards
      Src: /src/brpc/src/bvar/variable.cpp:486,1
    - Dst: WildcardMatcher::exact_names
      Src: /src/brpc/src/bvar/variable.cpp:487,1
    - Dst: WildcardMatcher::exact_names
      Src: /src/brpc/src/bvar/variable.cpp:489,1
    - Dst: WildcardMatcher::exact_names
      Src: /src/brpc/src/bvar/variable.cpp:490,1
    - Dst: WildcardMatcher::match
      Src: /src/brpc/src/bvar/variable.cpp:492,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:493,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:498,1
    - Dst: Dumper*::dump
      Src: /src/brpc/src/bvar/variable.cpp:500,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:500,1
    - Dst: CharArrayStreamBuf::reset
      Src: /src/brpc/src/bvar/variable.cpp:503,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/src/bvar/variable.cpp:510,1
    - Dst: std::sort
      Src: /src/brpc/src/bvar/variable.cpp:512,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/variable.cpp:512,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/variable.cpp:512,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bvar/variable.cpp:514,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bvar/variable.cpp:514,1
    - Dst: WildcardMatcher::match
      Src: /src/brpc/src/bvar/variable.cpp:516,1
    - Dst: WildcardMatcher::match
      Src: /src/brpc/src/bvar/variable.cpp:516,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/src/bvar/variable.cpp:517,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:522,1
    - Dst: Dumper*::dump
      Src: /src/brpc/src/bvar/variable.cpp:524,1
    - Dst: CharArrayStreamBuf::data
      Src: /src/brpc/src/bvar/variable.cpp:524,1
    - Dst: CharArrayStreamBuf::reset
      Src: /src/brpc/src/bvar/variable.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:533,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/variable.cpp:533,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 47
    argCount: 2
    argNames:
    - dumper
    - poptions
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 536
    functionName: bvar::Variable::dump_exposed
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 3
    functionsReached:
    - std::ostringstream::str
    - bvar::Variable::list_exposed
    - Dumper*::dump
    - WildcardMatcher::wildcards
    - std::vector::end
    - WildcardMatcher::exact_names
    - bvar::Variable::describe_exposed
    - std::sort
    - std::vector::begin
    - CharArrayStreamBuf::data
    - CharArrayStreamBuf::reset
    - WildcardMatcher::match
    - LOG
    linkageType: ''
    returnType: int
    signature: int Variable::dump_exposed(Dumper* dumper, const DumpOptions* poptions)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/bvar/variable.cpp:543,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/variable.cpp:544,1
    - Dst: std::ifstream::good
      Src: /src/brpc/src/bvar/variable.cpp:549,1
    - Dst: std::string
      Src: /src/brpc/src/bvar/variable.cpp:550,1
    - Dst: std::string::size
      Src: /src/brpc/src/bvar/variable.cpp:555,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:556,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:558,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.cpp:559,1
    - Dst: std::string::data
      Src: /src/brpc/src/bvar/variable.cpp:559,1
    - Dst: std::string::size
      Src: /src/brpc/src/bvar/variable.cpp:560,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:562,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 541
    functionDepth: 2
    functionLinenumber: 541
    functionLinenumberEnd: 565
    functionName: bvar::read_command_name
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 1
    functionsReached:
    - std::string::size
    - std::string
    - butil::back_char
    - std::string::data
    - bvar::to_underscored_name
    - butil::BasicStringPiece::BasicStringPiece
    - std::ifstream::good
    - std::ifstream::is_open
    linkageType: ''
    returnType: std::string
    signature: std::string read_command_name()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/variable.cpp:573,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/variable.cpp:573,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/variable.cpp:574,1
    - Dst: isspace
      Src: /src/brpc/src/bvar/variable.cpp:574,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/bvar/variable.cpp:575,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/bvar/variable.cpp:575,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/bvar/variable.cpp:575,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/bvar/variable.cpp:577,1
    - Dst: to_underscored_name
      Src: /src/brpc/src/bvar/variable.cpp:578,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:579,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/variable.cpp:580,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - ' filename'
    - s
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 583
    functionName: bvar::FileDumper::FileDumper
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - isspace
    - butil::back_char
    - butil::StringPiece::remove_suffix
    - push_back
    - butil::StringPiece::data
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - to_underscored_name
    linkageType: ''
    returnType: void
    signature: void FileDumper(const std::string& filename, butil::StringPiece s/*prefix*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/bvar/variable.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 587
    functionName: ~FileDumper()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void ~FileDumper()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/src/bvar/variable.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 593
    functionName: bvar::FileDumper::close
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: void close()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath
      Src: /src/brpc/src/bvar/variable.cpp:599,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/bvar/variable.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:601,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bvar/variable.cpp:601,1
    - Dst: fopen
      Src: /src/brpc/src/bvar/variable.cpp:605,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/variable.cpp:605,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:607,1
    - Dst: fprintf
      Src: /src/brpc/src/bvar/variable.cpp:611,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:612,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:612,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:613,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:613,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:614,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:614,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:615,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:615,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/variable.cpp:616,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - ' name'
    - ' desc'
    - ' separator'
    argTypes:
    - std::string
    - butil::StringPiece
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 596
    functionDepth: 1
    functionLinenumber: 596
    functionLinenumberEnd: 620
    functionName: bvar::FileDumper::dump_impl
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::value
    - c_str
    - fprintf
    - data
    - butil::FilePath
    - size
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool dump_impl(const std::string& name, const butil::StringPiece& desc,
      const std::string& separator)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' filename'
    - prefix
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 631
    functionName: bvar::CommonFileDumper::CommonFileDumper
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CommonFileDumper(const std::string& filename, butil::StringPiece
      prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dump_impl
      Src: /src/brpc/src/bvar/variable.cpp:633,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 634
    functionName: bvar::CommonFileDumper::dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - dump_impl
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' filename'
    - prefix
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: bvar::PrometheusFileDumper::PrometheusFileDumper
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrometheusFileDumper(const std::string& filename, butil::StringPiece
      prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dump_impl
      Src: /src/brpc/src/bvar/variable.cpp:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 646
    functionName: bvar::PrometheusFileDumper::dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - dump_impl
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::FinalExtension
      Src: /src/brpc/src/bvar/variable.cpp:656,1
    - Dst: butil::FilePath::RemoveFinalExtension
      Src: /src/brpc/src/bvar/variable.cpp:658,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/bvar/variable.cpp:662,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/bvar/variable.cpp:663,1
    - Dst: butil::FilePath::AddExtension
      Src: /src/brpc/src/bvar/variable.cpp:665,1
    - Dst: CommonFileDumper::CommonFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:664,1
    - Dst: WildcardMatcher::WildcardMatcher
      Src: /src/brpc/src/bvar/variable.cpp:666,1
    - Dst: emplace_back
      Src: /src/brpc/src/bvar/variable.cpp:667,1
    - Dst: emplace_back
      Src: /src/brpc/src/bvar/variable.cpp:669,1
    - Dst: butil::FilePath::AddExtension
      Src: /src/brpc/src/bvar/variable.cpp:670,1
    - Dst: CommonFileDumper::CommonFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:670,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - tabs
    - filename
    - s
    argTypes:
    - std::string
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 653
    functionDepth: 1
    functionLinenumber: 653
    functionLinenumberEnd: 672
    functionName: bvar::FileDumperGroup::FileDumperGroup
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - CommonFileDumper::CommonFileDumper
    - WildcardMatcher::WildcardMatcher
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - emplace_back
    - butil::FilePath::RemoveFinalExtension
    - butil::FilePath::FinalExtension
    - butil::FilePath::AddExtension
    linkageType: ''
    returnType: void
    signature: "void FileDumperGroup(std::string tabs, std::string filename, \n                     butil::StringPiece
      s/*prefix*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:674,1
    - Dst: clear
      Src: /src/brpc/src/bvar/variable.cpp:678,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 679
      start: 673
    functionDepth: 1
    functionLinenumber: 673
    functionLinenumberEnd: 679
    functionName: ~FileDumperGroup()
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - size
    - clear
    linkageType: ''
    returnType: void
    signature: void ~FileDumperGroup()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:682,1
    - Dst: second::match
      Src: /src/brpc/src/bvar/variable.cpp:683,1
    - Dst: first::dump
      Src: /src/brpc/src/bvar/variable.cpp:684,1
    - Dst: back
      Src: /src/brpc/src/bvar/variable.cpp:688,1
    - Dst: bvar::FileDumperGroup::dump
      Src: /src/brpc/src/bvar/variable.cpp:688,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 681
    functionDepth: 1
    functionLinenumber: 681
    functionLinenumberEnd: 689
    functionName: bvar::FileDumperGroup::dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 2
    functionsReached:
    - back
    - first::dump
    - bvar::FileDumperGroup::dump
    - second::match
    - size
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
      override
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/variable.cpp:733,1
    - Dst: bvar::read_command_name
      Src: /src/brpc/src/bvar/variable.cpp:734,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:746,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:747,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:752,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:757,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:760,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:761,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:764,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:765,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:770,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:771,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:774,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:775,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/bvar/variable.cpp:778,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:779,1
    - Dst: std::string::empty
      Src: /src/brpc/src/bvar/variable.cpp:783,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:789,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:791,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:795,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:798,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:800,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/src/bvar/variable.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:805,1
    - Dst: std::string::empty
      Src: /src/brpc/src/bvar/variable.cpp:810,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:816,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:818,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:822,1
    - Dst: std::string::find
      Src: /src/brpc/src/bvar/variable.cpp:825,1
    - Dst: std::string::replace
      Src: /src/brpc/src/bvar/variable.cpp:827,1
    - Dst: CommonFileDumper::CommonFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:832,1
    - Dst: PrometheusFileDumper::PrometheusFileDumper
      Src: /src/brpc/src/bvar/variable.cpp:834,1
    - Dst: bvar::MVariableBase::dump_exposed
      Src: /src/brpc/src/bvar/variable.cpp:836,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:838,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:851,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/bvar/variable.cpp:854,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/variable.cpp:855,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/src/bvar/variable.cpp:856,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/variable.cpp:857,1
    - Dst: usleep
      Src: /src/brpc/src/bvar/variable.cpp:858,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 82
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 860
      start: 730
    functionDepth: 3
    functionLinenumber: 730
    functionLinenumberEnd: 860
    functionName: bvar::dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - butil::PlatformThread::SetName
    - bvar::Variable::dump_exposed
    - std::string::find
    - std::string::replace
    - CommonFileDumper::CommonFileDumper
    - usleep
    - std::string::empty
    - PrometheusFileDumper::PrometheusFileDumper
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bvar::MVariableBase::dump_exposed
    - bvar::read_command_name
    - pthread_cond_timedwait
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: void
    signature: void * dumping_thread(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/variable.cpp:864,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:866,1
    - Dst: berror
      Src: /src/brpc/src/bvar/variable.cpp:866,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/variable.cpp:870,1
    - Dst: pthread_detach
      Src: /src/brpc/src/bvar/variable.cpp:870,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 862
    functionDepth: 1
    functionLinenumber: 862
    functionLinenumberEnd: 872
    functionName: bvar::launch_dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - pthread_detach
    - CHECK_EQ
    - berror
    - LOG
    linkageType: ''
    returnType: void
    signature: void launch_dumping_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bvar/variable.cpp:876,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 878
      start: 875
    functionDepth: 0
    functionLinenumber: 875
    functionLinenumberEnd: 878
    functionName: bvar::enable_dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool enable_dumping_thread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::enable_dumping_thread
      Src: /src/brpc/src/bvar/variable.cpp:882,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - enabled
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 885
      start: 880
    functionDepth: 1
    functionLinenumber: 880
    functionLinenumberEnd: 885
    functionName: bvar::validate_bvar_dump
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - bvar::enable_dumping_thread
    linkageType: ''
    returnType: bool
    signature: bool validate_bvar_dump(const char*, bool enabled)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:895,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 899
      start: 889
    functionDepth: 1
    functionLinenumber: 889
    functionLinenumberEnd: 899
    functionName: bvar::validate_bvar_dump_interval
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validate_bvar_dump_interval(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/variable.cpp:905,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 907
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 907
    functionName: bvar::wakeup_dumping_thread
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_cond_signal
    linkageType: ''
    returnType: bool
    signature: bool wakeup_dumping_thread(const char*, const std::string&)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/variable.cpp:929,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/variable.cpp:935,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' format'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 926
    functionDepth: 1
    functionLinenumber: 926
    functionLinenumberEnd: 937
    functionName: bvar::validate_mbvar_dump_format
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - pthread_cond_signal
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool validate_mbvar_dump_format(const char*, const std::string& format)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::reserve
      Src: /src/brpc/src/bvar/variable.cpp:943,1
    - Dst: std::string*::size
      Src: /src/brpc/src/bvar/variable.cpp:943,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:943,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:944,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:944,1
    - Dst: size
      Src: /src/brpc/src/bvar/variable.cpp:944,1
    - Dst: isalpha
      Src: /src/brpc/src/bvar/variable.cpp:945,1
    - Dst: data
      Src: /src/brpc/src/bvar/variable.cpp:947,1
    - Dst: isupper
      Src: /src/brpc/src/bvar/variable.cpp:947,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:948,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:949,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:951,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:953,1
    - Dst: isdigit
      Src: /src/brpc/src/bvar/variable.cpp:955,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:956,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/bvar/variable.cpp:957,1
    - Dst: butil::back_char
      Src: /src/brpc/src/bvar/variable.cpp:957,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/bvar/variable.cpp:958,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - name
    - ' src'
    argTypes:
    - std::string*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 942
    functionDepth: 1
    functionLinenumber: 942
    functionLinenumberEnd: 961
    functionName: bvar::to_underscored_name
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 2
    functionsReached:
    - std::string*::size
    - std::string*::reserve
    - isalpha
    - isupper
    - butil::back_char
    - isdigit
    - std::string*::push_back
    - data
    - size
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: void to_underscored_name(std::string* name, const butil::StringPiece&
      src)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - Collected*
    - Collected*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: operator()(Collected* & s1, Collected* s2) const
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - InsertBeforeAsList
    linkageType: ''
    returnType: void
    signature: void operator()(Collected* & s1, Collected* s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: bvar::Collector::last_active_cpuwide_us
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_active_cpuwide_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/collector.cpp:80,1
    - Dst: static_cast<Collector*>
      Src: /src/brpc/src/bvar/collector.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: bvar::Collector::run_grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetName
    - static_cast<Collector*>
    linkageType: ''
    returnType: void
    signature: void * run_grab_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/collector.cpp:86,1
    - Dst: static_cast<Collector*>
      Src: /src/brpc/src/bvar/collector.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: bvar::Collector::run_dump_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetName
    - static_cast<Collector*>
    linkageType: ''
    returnType: void
    signature: void * run_dump_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Collector*>
      Src: /src/brpc/src/bvar/collector.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 94
    functionName: bvar::Collector::get_pending_count
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Collector*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_pending_count(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:116,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/collector.cpp:124,1
    - Dst: pthread_cond_init
      Src: /src/brpc/src/bvar/collector.cpp:125,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/collector.cpp:126,1
    - Dst: pthread_cond_init
      Src: /src/brpc/src/bvar/collector.cpp:127,1
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/collector.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/collector.cpp:130,1
    - Dst: berror
      Src: /src/brpc/src/bvar/collector.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 134
    functionName: bvar::Collector::Collector
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - pthread_create
    - pthread_cond_init
    - pthread_mutex_init
    - LOG
    - berror
    linkageType: ''
    returnType: void
    signature: void Collector::Collector()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/collector.cpp:139,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/collector.cpp:142,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/src/bvar/collector.cpp:143,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/collector.cpp:144,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/src/bvar/collector.cpp:145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 146
    functionName: Collector::~Collector()
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void Collector::~Collector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 151
    functionName: bvar::deref_value
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T deref_value(void* arg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:157,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/collector.cpp:164,1
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/collector.cpp:164,1
    - Dst: PreprocessorMap::begin
      Src: /src/brpc/src/bvar/collector.cpp:192,1
    - Dst: PreprocessorMap::end
      Src: /src/brpc/src/bvar/collector.cpp:192,1
    - Dst: PreprocessorMap::iterator::second::clear
      Src: /src/brpc/src/bvar/collector.cpp:194,1
    - Dst: bvar::Collector::reset
      Src: /src/brpc/src/bvar/collector.cpp:198,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/collector.cpp:200,1
    - Dst: butil::LinkNode*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:201,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:205,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/collector.cpp:206,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:207,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/collector.cpp:208,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/collector.cpp:209,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/collector.cpp:209,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/collector.cpp:213,1
    - Dst: PreprocessorMap::begin
      Src: /src/brpc/src/bvar/collector.cpp:214,1
    - Dst: PreprocessorMap::end
      Src: /src/brpc/src/bvar/collector.cpp:215,1
    - Dst: PreprocessorMap::iterator::second::empty
      Src: /src/brpc/src/bvar/collector.cpp:217,1
    - Dst: PreprocessorMap::iterator::first::process
      Src: /src/brpc/src/bvar/collector.cpp:222,1
    - Dst: size
      Src: /src/brpc/src/bvar/collector.cpp:224,1
    - Dst: Collected*::speed_limit
      Src: /src/brpc/src/bvar/collector.cpp:226,1
    - Dst: Collected*::destroy
      Src: /src/brpc/src/bvar/collector.cpp:239,1
    - Dst: Collected*::InsertBefore
      Src: /src/brpc/src/bvar/collector.cpp:241,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:246,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:247,1
    - Dst: butil::LinkNode::RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:248,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/collector.cpp:249,1
    - Dst: butil::LinkNode*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:250,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/collector.cpp:251,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:254,1
    - Dst: GrapMap::begin
      Src: /src/brpc/src/bvar/collector.cpp:257,1
    - Dst: GrapMap::end
      Src: /src/brpc/src/bvar/collector.cpp:258,1
    - Dst: bvar::Collector::update_speed_limit
      Src: /src/brpc/src/bvar/collector.cpp:259,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:263,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bvar/collector.cpp:270,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/collector.cpp:271,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/src/bvar/collector.cpp:272,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/collector.cpp:273,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:275,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/collector.cpp:279,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/collector.cpp:281,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/collector.cpp:283,1
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/collector.cpp:283,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 284
    functionName: bvar::Collector::grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - PreprocessorMap::end
    - bvar::Collector::update_speed_limit
    - pthread_create
    - pthread_cond_signal
    - pthread_mutex_lock
    - PreprocessorMap::iterator::second::clear
    - CHECK_EQ
    - bvar::Collector::reset
    - butil::LinkNode*::value
    - butil::cpuwide_time_us
    - GrapMap::begin
    - GrapMap::end
    - size
    - pthread_cond_timedwait
    - PreprocessorMap::iterator::first::process
    - butil::LinkNode::next
    - Collected*::speed_limit
    - PreprocessorMap::iterator::second::empty
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_unlock
    - push_back
    - Collected*::InsertBefore
    - butil::LinkNode*::next
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - Collected*::destroy
    - pthread_join
    - PreprocessorMap::begin
    - butil::LinkNode*::InsertBeforeAsList
    - butil::LinkNode::RemoveFromList
    - butil::microseconds_from_now
    linkageType: ''
    returnType: void
    signature: void Collector::grab_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/collector.cpp:287,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/collector.cpp:288,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/collector.cpp:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: bvar::Collector::wakeup_grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - pthread_cond_signal
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void Collector::wakeup_grab_thread()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/collector.cpp:309,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 4
    argNames:
    - sl
    - last_ngrab
    - cur_ngrab
    - interval_us
    argTypes:
    - CollectorSpeedLimit*
    - size_t*
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 346
    functionName: bvar::Collector::update_speed_limit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: void
    signature: "void Collector::update_speed_limit(CollectorSpeedLimit* sl,\n                                   size_t*
      last_ngrab, size_t cur_ngrab,\n                                   int64_t interval_us)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CollectorSpeedLimit*::count_before_grabbed::fetch_add
      Src: /src/brpc/src/bvar/collector.cpp:350,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/collector.cpp:353,1
    - Dst: butil::get_leaky_singleton<Collector>
      Src: /src/brpc/src/bvar/collector.cpp:355,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - sl
    argTypes:
    - CollectorSpeedLimit*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 359
    functionName: bvar::is_collectable_before_first_time_grabbed
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    - CollectorSpeedLimit*::count_before_grabbed::fetch_add
    - butil::get_leaky_singleton<Collector>
    linkageType: ''
    returnType: size_t
    signature: size_t is_collectable_before_first_time_grabbed(CollectorSpeedLimit*
      sl)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bvar/collector.cpp:363,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/collector.cpp:375,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/collector.cpp:384,1
    - Dst: next
      Src: /src/brpc/src/bvar/collector.cpp:385,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bvar/collector.cpp:386,1
    - Dst: pthread_cond_wait
      Src: /src/brpc/src/bvar/collector.cpp:388,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bvar/collector.cpp:389,1
    - Dst: next
      Src: /src/brpc/src/bvar/collector.cpp:394,1
    - Dst: RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:395,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/collector.cpp:397,1
    - Dst: butil::LinkNode*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:398,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:401,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/collector.cpp:403,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:404,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/collector.cpp:405,1
    - Dst: Collected*::dump_and_destroy
      Src: /src/brpc/src/bvar/collector.cpp:406,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 411
    functionName: bvar::Collector::dump_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::next
    - butil::LinkNode*::value
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - next
    - BAIDU_SCOPED_LOCK
    - butil::LinkNode*::InsertBeforeAsList
    - butil::cpuwide_time_ns
    - RemoveFromList
    - CHECK
    - pthread_cond_wait
    - butil::LinkNode*::next
    - Collected*::dump_and_destroy
    linkageType: ''
    returnType: void
    signature: void Collector::dump_thread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<Collector>
      Src: /src/brpc/src/bvar/collector.cpp:414,1
    - Dst: Collector*::last_active_cpuwide_us
      Src: /src/brpc/src/bvar/collector.cpp:420,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/collector.cpp:423,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 425
    functionName: bvar::Collected::submit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - Collector*::last_active_cpuwide_us
    - butil::get_leaky_singleton<Collector>
    - destroy
    linkageType: ''
    returnType: void
    signature: void Collected::submit(int64_t cpuwide_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 430
    functionName: bvar::get_sampling_ratio
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double get_sampling_ratio(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - name
    - sl
    argTypes:
    - char*
    - CollectorSpeedLimit*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 435
    functionName: bvar::DisplaySamplingRatio::DisplaySamplingRatio
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DisplaySamplingRatio::DisplaySamplingRatio(const char* name,\n
      \                                          const CollectorSpeedLimit* sl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - Collected*
    - Collected*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: operator()(Collected* & s1, Collected* s2) const
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - InsertBeforeAsList
    linkageType: ''
    returnType: void
    signature: void operator()(Collected* & s1, Collected* s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: bvar::Collector::last_active_cpuwide_us
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_active_cpuwide_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/collector.cpp:80,1
    - Dst: static_cast<Collector*>
      Src: /src/brpc/src/bvar/collector.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: bvar::Collector::run_grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetName
    - static_cast<Collector*>
    linkageType: ''
    returnType: void
    signature: void * run_grab_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/collector.cpp:86,1
    - Dst: static_cast<Collector*>
      Src: /src/brpc/src/bvar/collector.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: bvar::Collector::run_dump_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetName
    - static_cast<Collector*>
    linkageType: ''
    returnType: void
    signature: void * run_dump_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Collector*>
      Src: /src/brpc/src/bvar/collector.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 94
    functionName: bvar::Collector::get_pending_count
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Collector*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_pending_count(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:116,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/collector.cpp:124,1
    - Dst: pthread_cond_init
      Src: /src/brpc/src/bvar/collector.cpp:125,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/collector.cpp:126,1
    - Dst: pthread_cond_init
      Src: /src/brpc/src/bvar/collector.cpp:127,1
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/collector.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/collector.cpp:130,1
    - Dst: berror
      Src: /src/brpc/src/bvar/collector.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 134
    functionName: bvar::Collector::Collector
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - pthread_create
    - pthread_cond_init
    - pthread_mutex_init
    - LOG
    - berror
    linkageType: ''
    returnType: void
    signature: void Collector::Collector()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/collector.cpp:139,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/collector.cpp:142,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/src/bvar/collector.cpp:143,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/collector.cpp:144,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/src/bvar/collector.cpp:145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 146
    functionName: Collector::~Collector()
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void Collector::~Collector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 151
    functionName: bvar::deref_value
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T deref_value(void* arg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:157,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/collector.cpp:164,1
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/collector.cpp:164,1
    - Dst: PreprocessorMap::begin
      Src: /src/brpc/src/bvar/collector.cpp:192,1
    - Dst: PreprocessorMap::end
      Src: /src/brpc/src/bvar/collector.cpp:192,1
    - Dst: PreprocessorMap::iterator::second::clear
      Src: /src/brpc/src/bvar/collector.cpp:194,1
    - Dst: bvar::Collector::reset
      Src: /src/brpc/src/bvar/collector.cpp:198,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/collector.cpp:200,1
    - Dst: butil::LinkNode*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:201,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:205,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/collector.cpp:206,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:207,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/collector.cpp:208,1
    - Dst: push_back
      Src: /src/brpc/src/bvar/collector.cpp:209,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/collector.cpp:209,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/collector.cpp:213,1
    - Dst: PreprocessorMap::begin
      Src: /src/brpc/src/bvar/collector.cpp:214,1
    - Dst: PreprocessorMap::end
      Src: /src/brpc/src/bvar/collector.cpp:215,1
    - Dst: PreprocessorMap::iterator::second::empty
      Src: /src/brpc/src/bvar/collector.cpp:217,1
    - Dst: PreprocessorMap::iterator::first::process
      Src: /src/brpc/src/bvar/collector.cpp:222,1
    - Dst: size
      Src: /src/brpc/src/bvar/collector.cpp:224,1
    - Dst: Collected*::speed_limit
      Src: /src/brpc/src/bvar/collector.cpp:226,1
    - Dst: Collected*::destroy
      Src: /src/brpc/src/bvar/collector.cpp:239,1
    - Dst: Collected*::InsertBefore
      Src: /src/brpc/src/bvar/collector.cpp:241,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:246,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:247,1
    - Dst: butil::LinkNode::RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:248,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/collector.cpp:249,1
    - Dst: butil::LinkNode*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:250,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/collector.cpp:251,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:254,1
    - Dst: GrapMap::begin
      Src: /src/brpc/src/bvar/collector.cpp:257,1
    - Dst: GrapMap::end
      Src: /src/brpc/src/bvar/collector.cpp:258,1
    - Dst: bvar::Collector::update_speed_limit
      Src: /src/brpc/src/bvar/collector.cpp:259,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:263,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bvar/collector.cpp:270,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/collector.cpp:271,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/src/bvar/collector.cpp:272,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/collector.cpp:273,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/collector.cpp:275,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/collector.cpp:279,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/collector.cpp:281,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/collector.cpp:283,1
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/collector.cpp:283,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 284
    functionName: bvar::Collector::grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - PreprocessorMap::end
    - bvar::Collector::update_speed_limit
    - pthread_create
    - pthread_cond_signal
    - pthread_mutex_lock
    - PreprocessorMap::iterator::second::clear
    - CHECK_EQ
    - bvar::Collector::reset
    - butil::LinkNode*::value
    - butil::cpuwide_time_us
    - GrapMap::begin
    - GrapMap::end
    - size
    - pthread_cond_timedwait
    - PreprocessorMap::iterator::first::process
    - butil::LinkNode::next
    - Collected*::speed_limit
    - PreprocessorMap::iterator::second::empty
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_unlock
    - push_back
    - Collected*::InsertBefore
    - butil::LinkNode*::next
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - Collected*::destroy
    - pthread_join
    - PreprocessorMap::begin
    - butil::LinkNode*::InsertBeforeAsList
    - butil::LinkNode::RemoveFromList
    - butil::microseconds_from_now
    linkageType: ''
    returnType: void
    signature: void Collector::grab_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/collector.cpp:287,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bvar/collector.cpp:288,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/collector.cpp:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: bvar::Collector::wakeup_grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - pthread_cond_signal
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void Collector::wakeup_grab_thread()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/collector.cpp:309,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 4
    argNames:
    - sl
    - last_ngrab
    - cur_ngrab
    - interval_us
    argTypes:
    - CollectorSpeedLimit*
    - size_t*
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 346
    functionName: bvar::Collector::update_speed_limit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: void
    signature: "void Collector::update_speed_limit(CollectorSpeedLimit* sl,\n                                   size_t*
      last_ngrab, size_t cur_ngrab,\n                                   int64_t interval_us)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CollectorSpeedLimit*::count_before_grabbed::fetch_add
      Src: /src/brpc/src/bvar/collector.cpp:350,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/collector.cpp:353,1
    - Dst: butil::get_leaky_singleton<Collector>
      Src: /src/brpc/src/bvar/collector.cpp:355,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - sl
    argTypes:
    - CollectorSpeedLimit*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 359
    functionName: bvar::is_collectable_before_first_time_grabbed
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    - CollectorSpeedLimit*::count_before_grabbed::fetch_add
    - butil::get_leaky_singleton<Collector>
    linkageType: ''
    returnType: size_t
    signature: size_t is_collectable_before_first_time_grabbed(CollectorSpeedLimit*
      sl)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bvar/collector.cpp:363,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/collector.cpp:375,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/collector.cpp:384,1
    - Dst: next
      Src: /src/brpc/src/bvar/collector.cpp:385,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bvar/collector.cpp:386,1
    - Dst: pthread_cond_wait
      Src: /src/brpc/src/bvar/collector.cpp:388,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bvar/collector.cpp:389,1
    - Dst: next
      Src: /src/brpc/src/bvar/collector.cpp:394,1
    - Dst: RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:395,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/collector.cpp:397,1
    - Dst: butil::LinkNode*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/collector.cpp:398,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/collector.cpp:401,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/collector.cpp:403,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/collector.cpp:404,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/collector.cpp:405,1
    - Dst: Collected*::dump_and_destroy
      Src: /src/brpc/src/bvar/collector.cpp:406,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 411
    functionName: bvar::Collector::dump_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::next
    - butil::LinkNode*::value
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - next
    - BAIDU_SCOPED_LOCK
    - butil::LinkNode*::InsertBeforeAsList
    - butil::cpuwide_time_ns
    - RemoveFromList
    - CHECK
    - pthread_cond_wait
    - butil::LinkNode*::next
    - Collected*::dump_and_destroy
    linkageType: ''
    returnType: void
    signature: void Collector::dump_thread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<Collector>
      Src: /src/brpc/src/bvar/collector.cpp:414,1
    - Dst: Collector*::last_active_cpuwide_us
      Src: /src/brpc/src/bvar/collector.cpp:420,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/collector.cpp:423,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 425
    functionName: bvar::Collected::submit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - Collector*::last_active_cpuwide_us
    - butil::get_leaky_singleton<Collector>
    - destroy
    linkageType: ''
    returnType: void
    signature: void Collected::submit(int64_t cpuwide_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 430
    functionName: bvar::get_sampling_ratio
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double get_sampling_ratio(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - name
    - sl
    argTypes:
    - char*
    - CollectorSpeedLimit*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 435
    functionName: bvar::DisplaySamplingRatio::DisplaySamplingRatio
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DisplaySamplingRatio::DisplaySamplingRatio(const char* name,\n
      \                                          const CollectorSpeedLimit* sl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: operator()(Tp&, const Tp&) const
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(Tp&, const Tp&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/passive_status.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - PassiveStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: bvar::PassiveStatus::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(PassiveStatus* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: ~SeriesSampler()
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SeriesSampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/passive_status.h:62,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/passive_status.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: bvar::PassiveStatus::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::SeriesSampler::describe
      Src: /src/brpc/src/bvar/passive_status.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: bvar::PassiveStatus::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 1
    functionsReached:
    - bvar::PassiveStatus::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/bvar/passive_status.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' names'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: bvar::PassiveStatus::SeriesSampler::set_vector_names
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - std::string::string
    linkageType: ''
    returnType: void
    signature: void set_vector_names(const std::string& names)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/passive_status.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: bvar::PassiveStatus::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& name,\n                  Tp
      (*getfn)(void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/bvar/passive_status.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 96
    functionName: bvar::PassiveStatus::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose_as
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name,\n                  Tp (*getfn)(void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 103
    functionName: bvar::PassiveStatus::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PassiveStatus(Tp (*getfn)(void*), void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/passive_status.h:106,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/passive_status.h:108,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/passive_status.h:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 115
    functionName: ~PassiveStatus()
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~PassiveStatus()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::set_vector_names
      Src: /src/brpc/src/bvar/passive_status.h:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' names'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 123
    functionName: bvar::PassiveStatus::set_vector_names
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 1
    functionsReached:
    - bvar::PassiveStatus::set_vector_names
    linkageType: ''
    returnType: int
    signature: int set_vector_names(const std::string& names)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::get_value
      Src: /src/brpc/src/bvar/passive_status.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: bvar::PassiveStatus::describe
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - bvar::PassiveStatus::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _getfn
      Src: /src/brpc/src/bvar/passive_status.h:132,1
    - Dst: Tp
      Src: /src/brpc/src/bvar/passive_status.h:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 136
    functionName: bvar::PassiveStatus::get_value
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 1
    functionsReached:
    - Tp
    - _getfn
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _getfn
      Src: /src/brpc/src/bvar/passive_status.h:140,1
    - Dst: Tp
      Src: /src/brpc/src/bvar/passive_status.h:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: bvar::PassiveStatus::get_value
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 1
    functionsReached:
    - Tp
    - _getfn
    linkageType: ''
    returnType: Tp
    signature: Tp get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/passive_status.h:145,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/passive_status.h:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: bvar::PassiveStatus::get_sampler
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::AddTo<Tp>
      Src: /src/brpc/src/bvar/passive_status.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: bvar::PassiveStatus::op
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - detail::AddTo<Tp>
    linkageType: ''
    returnType: detail::AddTo<Tp>
    signature: detail::AddTo<Tp> op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::MinusFrom<Tp>
      Src: /src/brpc/src/bvar/passive_status.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: bvar::PassiveStatus::inv_op
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - detail::MinusFrom<Tp>
    linkageType: ''
    returnType: detail::MinusFrom<Tp>
    signature: detail::MinusFrom<Tp> inv_op() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::describe
      Src: /src/brpc/src/bvar/passive_status.h:159,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 162
    functionName: bvar::PassiveStatus::describe_series
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - bvar::PassiveStatus::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/passive_status.h:165,1
    - Dst: abort
      Src: /src/brpc/src/bvar/passive_status.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 167
    functionName: bvar::PassiveStatus::reset
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: Tp
    signature: Tp reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/passive_status.h:173,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/passive_status.h:178,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/passive_status.h:179,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 182
    functionName: bvar::PassiveStatus::expose_impl
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/passive_status.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    functionName: bvar::PassiveStatus<std::string>::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& name,\n                  void
      (*print)(std::ostream&, void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/bvar/passive_status.h:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: bvar::PassiveStatus<std::string>::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose_as
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name,\n                  void (*print)(std::ostream&, void*),
      void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 216
    functionName: bvar::PassiveStatus<std::string>::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PassiveStatus(void (*print)(std::ostream&, void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/passive_status.h:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: ~PassiveStatus()
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~PassiveStatus()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _print
      Src: /src/brpc/src/bvar/passive_status.h:226,1
    - Dst: _print
      Src: /src/brpc/src/bvar/passive_status.h:233,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 238
    functionName: bvar::PassiveStatus<std::string>::describe
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - _print
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 250
    functionName: bvar::BasicPassiveStatus::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& name,\n                       Tp
      (*getfn)(void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 255
    functionName: bvar::BasicPassiveStatus::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& prefix,\n                       const
      butil::StringPiece& name,\n                       Tp (*getfn)(void*), void*
      arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 258
    functionName: bvar::BasicPassiveStatus::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BasicPassiveStatus(Tp (*getfn)(void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: bvar::BasicPassiveStatus<std::string>::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& name,\n                       void
      (*print)(std::ostream&, void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: bvar::BasicPassiveStatus<std::string>::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& prefix,\n                       const
      butil::StringPiece& name,\n                       void (*print)(std::ostream&,
      void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 274
    functionName: bvar::BasicPassiveStatus<std::string>::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BasicPassiveStatus(void (*print)(std::ostream&, void*), void*
      arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: operator()(Tp&, const Tp&) const
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(Tp&, const Tp&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/passive_status.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - PassiveStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: bvar::PassiveStatus::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(PassiveStatus* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: ~SeriesSampler()
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SeriesSampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/passive_status.h:62,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/passive_status.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: bvar::PassiveStatus::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::SeriesSampler::describe
      Src: /src/brpc/src/bvar/passive_status.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: bvar::PassiveStatus::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 2
    functionsReached:
    - bvar::PassiveStatus::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/bvar/passive_status.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' names'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: bvar::PassiveStatus::SeriesSampler::set_vector_names
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - std::string::string
    linkageType: ''
    returnType: void
    signature: void set_vector_names(const std::string& names)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/passive_status.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: bvar::PassiveStatus::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& name,\n                  Tp
      (*getfn)(void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/bvar/passive_status.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 96
    functionName: bvar::PassiveStatus::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose_as
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name,\n                  Tp (*getfn)(void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 103
    functionName: bvar::PassiveStatus::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PassiveStatus(Tp (*getfn)(void*), void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/passive_status.h:106,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/passive_status.h:108,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/passive_status.h:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 115
    functionName: ~PassiveStatus()
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~PassiveStatus()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::set_vector_names
      Src: /src/brpc/src/bvar/passive_status.h:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' names'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 123
    functionName: bvar::PassiveStatus::set_vector_names
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 2
    functionsReached:
    - bvar::PassiveStatus::set_vector_names
    linkageType: ''
    returnType: int
    signature: int set_vector_names(const std::string& names)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::get_value
      Src: /src/brpc/src/bvar/passive_status.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: bvar::PassiveStatus::describe
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 1
    functionsReached:
    - bvar::PassiveStatus::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool /*quote_string*/) const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _getfn
      Src: /src/brpc/src/bvar/passive_status.h:132,1
    - Dst: Tp
      Src: /src/brpc/src/bvar/passive_status.h:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 136
    functionName: bvar::PassiveStatus::get_value
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 2
    functionsReached:
    - Tp
    - _getfn
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _getfn
      Src: /src/brpc/src/bvar/passive_status.h:140,1
    - Dst: Tp
      Src: /src/brpc/src/bvar/passive_status.h:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: bvar::PassiveStatus::get_value
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 2
    functionsReached:
    - Tp
    - _getfn
    linkageType: ''
    returnType: Tp
    signature: Tp get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/passive_status.h:145,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/passive_status.h:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: bvar::PassiveStatus::get_sampler
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::AddTo<Tp>
      Src: /src/brpc/src/bvar/passive_status.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: bvar::PassiveStatus::op
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - detail::AddTo<Tp>
    linkageType: ''
    returnType: detail::AddTo<Tp>
    signature: detail::AddTo<Tp> op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::MinusFrom<Tp>
      Src: /src/brpc/src/bvar/passive_status.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: bvar::PassiveStatus::inv_op
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - detail::MinusFrom<Tp>
    linkageType: ''
    returnType: detail::MinusFrom<Tp>
    signature: detail::MinusFrom<Tp> inv_op() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PassiveStatus::describe
      Src: /src/brpc/src/bvar/passive_status.h:159,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 162
    functionName: bvar::PassiveStatus::describe_series
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - bvar::PassiveStatus::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/passive_status.h:165,1
    - Dst: abort
      Src: /src/brpc/src/bvar/passive_status.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 167
    functionName: bvar::PassiveStatus::reset
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: Tp
    signature: Tp reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/passive_status.h:173,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/passive_status.h:178,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/passive_status.h:179,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 182
    functionName: bvar::PassiveStatus::expose_impl
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bvar/passive_status.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    functionName: bvar::PassiveStatus<std::string>::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& name,\n                  void
      (*print)(std::ostream&, void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/bvar/passive_status.h:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: bvar::PassiveStatus<std::string>::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - expose_as
    linkageType: ''
    returnType: void
    signature: "void PassiveStatus(const butil::StringPiece& prefix,\n                  const
      butil::StringPiece& name,\n                  void (*print)(std::ostream&, void*),
      void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 216
    functionName: bvar::PassiveStatus<std::string>::PassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PassiveStatus(void (*print)(std::ostream&, void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/passive_status.h:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: ~PassiveStatus()
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~PassiveStatus()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _print
      Src: /src/brpc/src/bvar/passive_status.h:226,1
    - Dst: _print
      Src: /src/brpc/src/bvar/passive_status.h:233,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 238
    functionName: bvar::PassiveStatus<std::string>::describe
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached:
    - _print
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 250
    functionName: bvar::BasicPassiveStatus::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& name,\n                       Tp
      (*getfn)(void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 255
    functionName: bvar::BasicPassiveStatus::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& prefix,\n                       const
      butil::StringPiece& name,\n                       Tp (*getfn)(void*), void*
      arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 258
    functionName: bvar::BasicPassiveStatus::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BasicPassiveStatus(Tp (*getfn)(void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: bvar::BasicPassiveStatus<std::string>::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& name,\n                       void
      (*print)(std::ostream&, void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - arg
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: bvar::BasicPassiveStatus<std::string>::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BasicPassiveStatus(const butil::StringPiece& prefix,\n                       const
      butil::StringPiece& name,\n                       void (*print)(std::ostream&,
      void*), void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 274
    functionName: bvar::BasicPassiveStatus<std::string>::BasicPassiveStatus
    functionSourceFile: /src/brpc/src/bvar/passive_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BasicPassiveStatus(void (*print)(std::ostream&, void*), void*
      arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - var
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: bvar::detail::WindowBase::SeriesSampler::Op
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Op(R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/window.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' v1'
    - ' v2'
    argTypes:
    - value_type
    - value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: operator()(value_type& v1, const value_type& v2) const
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: void operator()(value_type& v1, const value_type& v2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::Op
      Src: /src/brpc/src/bvar/window.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - var
    argTypes:
    - WindowBase*
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: bvar::detail::WindowBase::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(WindowBase* owner, R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~SeriesSampler()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SeriesSampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:70,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: bvar::detail::WindowBase::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::describe
      Src: /src/brpc/src/bvar/window.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: bvar::detail::WindowBase::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: R*::get_sampler
      Src: /src/brpc/src/bvar/window.h:82,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/window.h:84,1
    - Dst: set_window_size
      Src: /src/brpc/src/bvar/window.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bvar::detail::WindowBase::WindowBase
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - set_window_size
    - CHECK_EQ
    - R*::get_sampler
    linkageType: ''
    returnType: void
    signature: void WindowBase(R* var, time_t window_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:88,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/window.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: ~WindowBase()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: bool
    signature: bool get_span(time_t window_size, detail::Sample<value_type>* result)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - result
    argTypes:
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::detail::WindowBase::get_span
    linkageType: ''
    returnType: bool
    signature: bool get_span(detail::Sample<value_type>* result) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:105,1
    - Dst: value_type
      Src: /src/brpc/src/bvar/window.h:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::detail::WindowBase::get_span
    - value_type
    linkageType: ''
    returnType: value_type
    signature: value_type get_value(time_t window_size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:115,1
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 3
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: bvar::detail::WindowBase::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 4
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: bvar::detail::WindowBase::window_size
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::describe
      Src: /src/brpc/src/bvar/window.h:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: bvar::detail::WindowBase::describe_series
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>*::clear
      Src: /src/brpc/src/bvar/window.h:138,1
    - Dst: std::vector<value_type>*::reserve
      Src: /src/brpc/src/bvar/window.h:139,1
    - Dst: bvar::detail::WindowBase::get_samples
      Src: /src/brpc/src/bvar/window.h:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - samples
    argTypes:
    - std::vector<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bvar::detail::WindowBase::get_samples
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - std::vector<value_type>*::clear
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/window.h:147,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/window.h:151,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/window.h:152,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: bvar::detail::WindowBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - var
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: bvar::detail::WindowBase::SeriesSampler::Op
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Op(R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/window.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' v1'
    - ' v2'
    argTypes:
    - value_type
    - value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: operator()(value_type& v1, const value_type& v2) const
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: void operator()(value_type& v1, const value_type& v2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::Op
      Src: /src/brpc/src/bvar/window.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - var
    argTypes:
    - WindowBase*
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: bvar::detail::WindowBase::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(WindowBase* owner, R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~SeriesSampler()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SeriesSampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:70,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: bvar::detail::WindowBase::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::describe
      Src: /src/brpc/src/bvar/window.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: bvar::detail::WindowBase::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: R*::get_sampler
      Src: /src/brpc/src/bvar/window.h:82,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/window.h:84,1
    - Dst: set_window_size
      Src: /src/brpc/src/bvar/window.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bvar::detail::WindowBase::WindowBase
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - set_window_size
    - CHECK_EQ
    - R*::get_sampler
    linkageType: ''
    returnType: void
    signature: void WindowBase(R* var, time_t window_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:88,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/window.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: ~WindowBase()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: bool
    signature: bool get_span(time_t window_size, detail::Sample<value_type>* result)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - result
    argTypes:
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 3
    functionsReached:
    - bvar::detail::WindowBase::get_span
    linkageType: ''
    returnType: bool
    signature: bool get_span(detail::Sample<value_type>* result) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:105,1
    - Dst: value_type
      Src: /src/brpc/src/bvar/window.h:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 5
    functionsReached:
    - bvar::detail::WindowBase::get_span
    - value_type
    linkageType: ''
    returnType: value_type
    signature: value_type get_value(time_t window_size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 6
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:115,1
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 3
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: bvar::detail::WindowBase::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 8
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: bvar::detail::WindowBase::window_size
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::describe
      Src: /src/brpc/src/bvar/window.h:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: bvar::detail::WindowBase::describe_series
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>*::clear
      Src: /src/brpc/src/bvar/window.h:138,1
    - Dst: std::vector<value_type>*::reserve
      Src: /src/brpc/src/bvar/window.h:139,1
    - Dst: bvar::detail::WindowBase::get_samples
      Src: /src/brpc/src/bvar/window.h:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - samples
    argTypes:
    - std::vector<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bvar::detail::WindowBase::get_samples
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached:
    - std::vector<value_type>*::clear
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/window.h:147,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/window.h:151,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/window.h:152,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: bvar::detail::WindowBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 181
    functionName: bvar::Window::Window
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Window(R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Window::expose
      Src: /src/brpc/src/bvar/window.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: bvar::Window::Window
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::Window::expose
    linkageType: ''
    returnType: void
    signature: void Window(const butil::StringPiece& name, R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Window::expose_as
      Src: /src/brpc/src/bvar/window.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' prefix'
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: bvar::Window::Window
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::Window::expose_as
    linkageType: ''
    returnType: void
    signature: "void Window(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, R* var, time_t window_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - var
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerSecond(R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 204
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerSecond(R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose
      Src: /src/brpc/src/bvar/window.h:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - var
    argTypes:
    - butil::StringPiece
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose
    linkageType: ''
    returnType: void
    signature: void PerSecond(const butil::StringPiece& name, R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose
      Src: /src/brpc/src/bvar/window.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 211
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose
    linkageType: ''
    returnType: void
    signature: void PerSecond(const butil::StringPiece& name, R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bvar/window.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - var
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 216
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose_as
    linkageType: ''
    returnType: void
    signature: "void PerSecond(const butil::StringPiece& prefix,\n              const
      butil::StringPiece& name, R* var)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bvar/window.h:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' prefix'
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 221
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose_as
    linkageType: ''
    returnType: void
    signature: "void PerSecond(const butil::StringPiece& prefix,\n              const
      butil::StringPiece& name, R* var, time_t window_size)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::get_span
      Src: /src/brpc/src/bvar/window.h:225,1
    - Dst: static_cast<value_type>
      Src: /src/brpc/src/bvar/window.h:231,1
    - Dst: static_cast<value_type>
      Src: /src/brpc/src/bvar/window.h:234,1
    - Dst: static_cast<value_type>
      Src: /src/brpc/src/bvar/window.h:236,1
    - Dst: round
      Src: /src/brpc/src/bvar/window.h:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 238
    functionName: bvar::PerSecond::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - static_cast<value_type>
    - round
    - bvar::PerSecond::get_span
    linkageType: ''
    returnType: value_type
    signature: value_type get_value(time_t window_size) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 3
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: bvar::PerSecond::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: bvar::adapter::WindowExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: bvar::adapter::PerSecondExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 280
    functionName: bvar::adapter::WindowExAdapter::WindowExAdapter
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExAdapter(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: window::get_value
      Src: /src/brpc/src/bvar/window.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: bvar::adapter::WindowExAdapter::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - window::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - ANT_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 290
    functionName: '& operator<<(ANT_TYPE value)'
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: WindowExAdapter
    signature: WindowExAdapter & operator<<(ANT_TYPE value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:295,1
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 299
    functionName: bvar::adapter::WindowExAdapter::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::adapter::WindowExAdapter::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 303
    functionName: ~WindowExAdapter()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowExAdapter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: bvar::adapter::WindowExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: bvar::adapter::PerSecondExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 280
    functionName: bvar::adapter::WindowExAdapter::WindowExAdapter
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExAdapter(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: window::get_value
      Src: /src/brpc/src/bvar/window.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: bvar::adapter::WindowExAdapter::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - window::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - ANT_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 290
    functionName: '& operator<<(ANT_TYPE value)'
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: WindowExAdapter
    signature: WindowExAdapter & operator<<(ANT_TYPE value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:295,1
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 299
    functionName: bvar::adapter::WindowExAdapter::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::adapter::WindowExAdapter::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 303
    functionName: ~WindowExAdapter()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowExAdapter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    functionName: bvar::WindowEx::WindowEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowEx()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::WindowEx::expose
      Src: /src/brpc/src/bvar/window.h:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 327
    functionName: bvar::WindowEx::WindowEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::WindowEx::expose
    linkageType: ''
    returnType: void
    signature: void WindowEx(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::WindowEx::expose_as
      Src: /src/brpc/src/bvar/window.h:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 333
    functionName: bvar::WindowEx::WindowEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::WindowEx::expose_as
    linkageType: ''
    returnType: void
    signature: "void WindowEx(const butil::StringPiece& prefix,\n             const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: bvar::PerSecondEx::PerSecondEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerSecondEx()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecondEx::expose
      Src: /src/brpc/src/bvar/window.h:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 349
    functionDepth: 0
    functionLinenumber: 349
    functionLinenumberEnd: 351
    functionName: bvar::PerSecondEx::PerSecondEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecondEx::expose
    linkageType: ''
    returnType: void
    signature: void PerSecondEx(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecondEx::expose_as
      Src: /src/brpc/src/bvar/window.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 357
    functionName: bvar::PerSecondEx::PerSecondEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecondEx::expose_as
    linkageType: ''
    returnType: void
    signature: "void PerSecondEx(const butil::StringPiece& prefix,\n                const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - var
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: bvar::detail::WindowBase::SeriesSampler::Op
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Op(R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/window.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' v1'
    - ' v2'
    argTypes:
    - value_type
    - value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: operator()(value_type& v1, const value_type& v2) const
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: void operator()(value_type& v1, const value_type& v2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::Op
      Src: /src/brpc/src/bvar/window.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - var
    argTypes:
    - WindowBase*
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: bvar::detail::WindowBase::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(WindowBase* owner, R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~SeriesSampler()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SeriesSampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:70,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: bvar::detail::WindowBase::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::describe
      Src: /src/brpc/src/bvar/window.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: bvar::detail::WindowBase::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 3
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: R*::get_sampler
      Src: /src/brpc/src/bvar/window.h:82,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/window.h:84,1
    - Dst: set_window_size
      Src: /src/brpc/src/bvar/window.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bvar::detail::WindowBase::WindowBase
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - set_window_size
    - CHECK_EQ
    - R*::get_sampler
    linkageType: ''
    returnType: void
    signature: void WindowBase(R* var, time_t window_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:88,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/window.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: ~WindowBase()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 4
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: bool
    signature: bool get_span(time_t window_size, detail::Sample<value_type>* result)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - result
    argTypes:
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 5
    functionsReached:
    - bvar::detail::WindowBase::get_span
    linkageType: ''
    returnType: bool
    signature: bool get_span(detail::Sample<value_type>* result) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:105,1
    - Dst: value_type
      Src: /src/brpc/src/bvar/window.h:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 10
    functionsReached:
    - bvar::detail::WindowBase::get_span
    - value_type
    linkageType: ''
    returnType: value_type
    signature: value_type get_value(time_t window_size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 11
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:115,1
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 3
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: bvar::detail::WindowBase::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 13
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: bvar::detail::WindowBase::window_size
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::describe
      Src: /src/brpc/src/bvar/window.h:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: bvar::detail::WindowBase::describe_series
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>*::clear
      Src: /src/brpc/src/bvar/window.h:138,1
    - Dst: std::vector<value_type>*::reserve
      Src: /src/brpc/src/bvar/window.h:139,1
    - Dst: bvar::detail::WindowBase::get_samples
      Src: /src/brpc/src/bvar/window.h:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - samples
    argTypes:
    - std::vector<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bvar::detail::WindowBase::get_samples
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 3
    functionsReached:
    - std::vector<value_type>*::clear
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/window.h:147,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/window.h:151,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/window.h:152,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: bvar::detail::WindowBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - var
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: bvar::detail::WindowBase::SeriesSampler::Op
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Op(R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/window.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' v1'
    - ' v2'
    argTypes:
    - value_type
    - value_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: operator()(value_type& v1, const value_type& v2) const
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: void operator()(value_type& v1, const value_type& v2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::Op
      Src: /src/brpc/src/bvar/window.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - var
    argTypes:
    - WindowBase*
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: bvar::detail::WindowBase::SeriesSampler::SeriesSampler
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::Op
    linkageType: ''
    returnType: void
    signature: void SeriesSampler(WindowBase* owner, R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~SeriesSampler()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SeriesSampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:65,1
    - Dst: append
      Src: /src/brpc/src/bvar/window.h:70,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/window.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: bvar::detail::WindowBase::SeriesSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - append
    - get_value
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::SeriesSampler::describe
      Src: /src/brpc/src/bvar/window.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: bvar::detail::WindowBase::SeriesSampler::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 4
    functionsReached:
    - bvar::detail::WindowBase::SeriesSampler::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: R*::get_sampler
      Src: /src/brpc/src/bvar/window.h:82,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/window.h:84,1
    - Dst: set_window_size
      Src: /src/brpc/src/bvar/window.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bvar::detail::WindowBase::WindowBase
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - set_window_size
    - CHECK_EQ
    - R*::get_sampler
    linkageType: ''
    returnType: void
    signature: void WindowBase(R* var, time_t window_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:88,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/window.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: ~WindowBase()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 6
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: bool
    signature: bool get_span(time_t window_size, detail::Sample<value_type>* result)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - result
    argTypes:
    - detail::Sample<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: bvar::detail::WindowBase::get_span
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 7
    functionsReached:
    - bvar::detail::WindowBase::get_span
    linkageType: ''
    returnType: bool
    signature: bool get_span(detail::Sample<value_type>* result) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_span
      Src: /src/brpc/src/bvar/window.h:105,1
    - Dst: value_type
      Src: /src/brpc/src/bvar/window.h:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 14
    functionsReached:
    - bvar::detail::WindowBase::get_span
    - value_type
    linkageType: ''
    returnType: value_type
    signature: value_type get_value(time_t window_size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 15
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:115,1
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 113
    functionDepth: 3
    functionLinenumber: 113
    functionLinenumberEnd: 119
    functionName: bvar::detail::WindowBase::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 3
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: bvar::detail::WindowBase::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 17
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: void
    signature: void get_value(boost::any* value) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: bvar::detail::WindowBase::window_size
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: time_t
    signature: time_t window_size() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::describe
      Src: /src/brpc/src/bvar/window.h:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: bvar::detail::WindowBase::describe_series
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::detail::WindowBase::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<value_type>*::clear
      Src: /src/brpc/src/bvar/window.h:138,1
    - Dst: std::vector<value_type>*::reserve
      Src: /src/brpc/src/bvar/window.h:139,1
    - Dst: bvar::detail::WindowBase::get_samples
      Src: /src/brpc/src/bvar/window.h:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - samples
    argTypes:
    - std::vector<value_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bvar::detail::WindowBase::get_samples
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 4
    functionsReached:
    - std::vector<value_type>*::clear
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_impl
      Src: /src/brpc/src/bvar/window.h:147,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/window.h:151,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/window.h:152,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - display_filter
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - DisplayFilter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: bvar::detail::WindowBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - SeriesSampler::SeriesSampler
    - schedule
    - bvar::Variable::expose_impl
    linkageType: ''
    returnType: int
    signature: "int expose_impl(const butil::StringPiece& prefix,\n                    const
      butil::StringPiece& name,\n                    DisplayFilter display_filter)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 181
    functionName: bvar::Window::Window
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Window(R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Window::expose
      Src: /src/brpc/src/bvar/window.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: bvar::Window::Window
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::Window::expose
    linkageType: ''
    returnType: void
    signature: void Window(const butil::StringPiece& name, R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Window::expose_as
      Src: /src/brpc/src/bvar/window.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' prefix'
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: bvar::Window::Window
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::Window::expose_as
    linkageType: ''
    returnType: void
    signature: "void Window(const butil::StringPiece& prefix,\n           const butil::StringPiece&
      name, R* var, time_t window_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - var
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerSecond(R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - var
    - window_size
    argTypes:
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 204
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerSecond(R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose
      Src: /src/brpc/src/bvar/window.h:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - var
    argTypes:
    - butil::StringPiece
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose
    linkageType: ''
    returnType: void
    signature: void PerSecond(const butil::StringPiece& name, R* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose
      Src: /src/brpc/src/bvar/window.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 211
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose
    linkageType: ''
    returnType: void
    signature: void PerSecond(const butil::StringPiece& name, R* var, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bvar/window.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' prefix'
    - ' name'
    - var
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 216
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose_as
    linkageType: ''
    returnType: void
    signature: "void PerSecond(const butil::StringPiece& prefix,\n              const
      butil::StringPiece& name, R* var)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bvar/window.h:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' prefix'
    - ' name'
    - var
    - window_size
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - R*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 221
    functionName: bvar::PerSecond::PerSecond
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecond::expose_as
    linkageType: ''
    returnType: void
    signature: "void PerSecond(const butil::StringPiece& prefix,\n              const
      butil::StringPiece& name, R* var, time_t window_size)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecond::get_span
      Src: /src/brpc/src/bvar/window.h:225,1
    - Dst: static_cast<value_type>
      Src: /src/brpc/src/bvar/window.h:231,1
    - Dst: static_cast<value_type>
      Src: /src/brpc/src/bvar/window.h:234,1
    - Dst: static_cast<value_type>
      Src: /src/brpc/src/bvar/window.h:236,1
    - Dst: round
      Src: /src/brpc/src/bvar/window.h:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 238
    functionName: bvar::PerSecond::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - static_cast<value_type>
    - round
    - bvar::PerSecond::get_span
    linkageType: ''
    returnType: value_type
    signature: value_type get_value(time_t window_size) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::WindowBase::get_value
      Src: /src/brpc/src/bvar/window.h:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 3
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: bvar::PerSecond::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::detail::WindowBase::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: bvar::adapter::WindowExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: bvar::adapter::PerSecondExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 280
    functionName: bvar::adapter::WindowExAdapter::WindowExAdapter
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExAdapter(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: window::get_value
      Src: /src/brpc/src/bvar/window.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: bvar::adapter::WindowExAdapter::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 2
    functionsReached:
    - window::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - ANT_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 290
    functionName: '& operator<<(ANT_TYPE value)'
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: WindowExAdapter
    signature: WindowExAdapter & operator<<(ANT_TYPE value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:295,1
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 299
    functionName: bvar::adapter::WindowExAdapter::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::adapter::WindowExAdapter::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 303
    functionName: ~WindowExAdapter()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowExAdapter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: bvar::adapter::WindowExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: bvar::adapter::PerSecondExType::WindowExVar
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExVar(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 280
    functionName: bvar::adapter::WindowExAdapter::WindowExAdapter
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowExAdapter(time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: window::get_value
      Src: /src/brpc/src/bvar/window.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: bvar::adapter::WindowExAdapter::get_value
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 3
    functionsReached:
    - window::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - ANT_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 290
    functionName: '& operator<<(ANT_TYPE value)'
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: WindowExAdapter
    signature: WindowExAdapter & operator<<(ANT_TYPE value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:295,1
    - Dst: bvar::adapter::WindowExAdapter::get_value
      Src: /src/brpc/src/bvar/window.h:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 299
    functionName: bvar::adapter::WindowExAdapter::describe
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::adapter::WindowExAdapter::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/window.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 303
    functionName: ~WindowExAdapter()
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - hide
    linkageType: ''
    returnType: void
    signature: void ~WindowExAdapter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    functionName: bvar::WindowEx::WindowEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WindowEx()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::WindowEx::expose
      Src: /src/brpc/src/bvar/window.h:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 327
    functionName: bvar::WindowEx::WindowEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::WindowEx::expose
    linkageType: ''
    returnType: void
    signature: void WindowEx(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::WindowEx::expose_as
      Src: /src/brpc/src/bvar/window.h:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 333
    functionName: bvar::WindowEx::WindowEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 1
    functionsReached:
    - bvar::WindowEx::expose_as
    linkageType: ''
    returnType: void
    signature: "void WindowEx(const butil::StringPiece& prefix,\n             const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: bvar::PerSecondEx::PerSecondEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PerSecondEx()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecondEx::expose
      Src: /src/brpc/src/bvar/window.h:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 349
    functionDepth: 0
    functionLinenumber: 349
    functionLinenumberEnd: 351
    functionName: bvar::PerSecondEx::PerSecondEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecondEx::expose
    linkageType: ''
    returnType: void
    signature: void PerSecondEx(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::PerSecondEx::expose_as
      Src: /src/brpc/src/bvar/window.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 357
    functionName: bvar::PerSecondEx::PerSecondEx
    functionSourceFile: /src/brpc/src/bvar/window.h
    functionUses: 0
    functionsReached:
    - bvar::PerSecondEx::expose_as
    linkageType: ''
    returnType: void
    signature: "void PerSecondEx(const butil::StringPiece& prefix,\n                const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: operator()(Mutex*) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(Mutex*) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: operator()(Mutex*) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(Mutex*) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/utils/lock_timer.h:122,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/utils/lock_timer.h:123,1
    - Dst: berror
      Src: /src/brpc/src/bvar/utils/lock_timer.h:123,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/utils/lock_timer.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: operator()(pthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - CHECK_EQ
    - berror
    linkageType: ''
    returnType: bool
    signature: bool operator()(pthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/utils/lock_timer.h:135,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/utils/lock_timer.h:136,1
    - Dst: berror
      Src: /src/brpc/src/bvar/utils/lock_timer.h:136,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/utils/lock_timer.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 141
    functionName: operator()(pthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - CHECK_EQ
    - berror
    linkageType: ''
    returnType: bool
    signature: bool operator()(pthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - recorder
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase(recorder_type &recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MDtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: ~MutexWithRecorderBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MDtor
    linkageType: ''
    returnType: void
    signature: void ~MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: bvar::detail::MutexWithRecorderBase::set_recorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_recorder(recorder_type& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: '& mutex()'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type & mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: operator mutex_type&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator mutex_type&()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: self_type
    signature: self_type & operator<<(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:196,1
    - Dst: timer::stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: bvar::detail::LockGuardBase::LockGuardBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - timer::stop
    - mutex
    linkageType: ''
    returnType: void
    signature: void LockGuardBase(Mutex& m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - m
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 203
    functionName: bvar::detail::LockGuardBase::TimerAndMutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimerAndMutex(Mutex &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: ~TimerAndMutex()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void ~TimerAndMutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:222,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 225
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    - stop
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:233,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:236,1
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:237,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 240
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:243,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: ~UniqueLockBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - unlock
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void ~UniqueLockBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: operator std::unique_lock<typename Mutex::mutex_type>&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator std::unique_lock<typename Mutex::mutex_type>&()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:250,1
    - Dst: bvar::detail::UniqueLockBase::lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:251,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 253
    functionName: bvar::detail::UniqueLockBase::lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 1
    functionsReached:
    - bvar::detail::UniqueLockBase::lock
    - stop
    - start
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:256,1
    - Dst: bvar::detail::UniqueLockBase::try_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:257,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:258,1
    - Dst: recorder
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 263
    functionName: bvar::detail::UniqueLockBase::try_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 1
    functionsReached:
    - recorder
    - bvar::detail::UniqueLockBase::try_lock
    - stop
    - start
    - u_elapsed
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:266,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::detail::UniqueLockBase::unlock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 1
    functionsReached:
    - u_elapsed
    - bvar::detail::UniqueLockBase::unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:272,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:275,1
    - Dst: bvar::detail::UniqueLockBase::release
      Src: /src/brpc/src/bvar/utils/lock_timer.h:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 281
    functionName: bvar::detail::UniqueLockBase::release
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 1
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::release
    - u_elapsed
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: bvar::detail::UniqueLockBase::mutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 284
    functionName: bvar::detail::UniqueLockBase::owns_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bool>
      Src: /src/brpc/src/bvar/utils/lock_timer.h:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - static_cast<bool>
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:291,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_for
      Src: /src/brpc/src/bvar/utils/lock_timer.h:292,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:293,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_duration'
    argTypes:
    - std::chrono::duration<Rep, Period>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 298
    functionName: bvar::detail::UniqueLockBase::try_lock_for
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 1
    functionsReached:
    - bvar::detail::UniqueLockBase::try_lock_for
    - u_elapsed
    - stop
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_for(\n            const std::chrono::duration<Rep, Period>&
      timeout_duration)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:303,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_until
      Src: /src/brpc/src/bvar/utils/lock_timer.h:304,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:305,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_time'
    argTypes:
    - std::chrono::time_point<Clock,Duration>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 312
    functionName: bvar::detail::UniqueLockBase::try_lock_until
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 1
    functionsReached:
    - stop
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_until(\n            const std::chrono::time_point<Clock,Duration>&
      timeout_time )"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - recorder
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase(recorder_type &recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MDtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: ~MutexWithRecorderBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MDtor
    linkageType: ''
    returnType: void
    signature: void ~MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: bvar::detail::MutexWithRecorderBase::set_recorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_recorder(recorder_type& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: '& mutex()'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type & mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: operator mutex_type&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator mutex_type&()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: self_type
    signature: self_type & operator<<(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:196,1
    - Dst: timer::stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: bvar::detail::LockGuardBase::LockGuardBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - timer::stop
    - mutex
    linkageType: ''
    returnType: void
    signature: void LockGuardBase(Mutex& m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - m
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 203
    functionName: bvar::detail::LockGuardBase::TimerAndMutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimerAndMutex(Mutex &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: ~TimerAndMutex()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void ~TimerAndMutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:222,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 225
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    - stop
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:233,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:236,1
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:237,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 240
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:243,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: ~UniqueLockBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - unlock
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void ~UniqueLockBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: operator std::unique_lock<typename Mutex::mutex_type>&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator std::unique_lock<typename Mutex::mutex_type>&()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:250,1
    - Dst: bvar::detail::UniqueLockBase::lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:251,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 253
    functionName: bvar::detail::UniqueLockBase::lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 2
    functionsReached:
    - bvar::detail::UniqueLockBase::lock
    - stop
    - start
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:256,1
    - Dst: bvar::detail::UniqueLockBase::try_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:257,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:258,1
    - Dst: recorder
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 263
    functionName: bvar::detail::UniqueLockBase::try_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 2
    functionsReached:
    - recorder
    - bvar::detail::UniqueLockBase::try_lock
    - stop
    - start
    - u_elapsed
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:266,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::detail::UniqueLockBase::unlock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 2
    functionsReached:
    - u_elapsed
    - bvar::detail::UniqueLockBase::unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:272,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:275,1
    - Dst: bvar::detail::UniqueLockBase::release
      Src: /src/brpc/src/bvar/utils/lock_timer.h:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 271
    functionDepth: 2
    functionLinenumber: 271
    functionLinenumberEnd: 281
    functionName: bvar::detail::UniqueLockBase::release
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 2
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::release
    - u_elapsed
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: bvar::detail::UniqueLockBase::mutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 284
    functionName: bvar::detail::UniqueLockBase::owns_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 6
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bool>
      Src: /src/brpc/src/bvar/utils/lock_timer.h:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - static_cast<bool>
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:291,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_for
      Src: /src/brpc/src/bvar/utils/lock_timer.h:292,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:293,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_duration'
    argTypes:
    - std::chrono::duration<Rep, Period>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 298
    functionName: bvar::detail::UniqueLockBase::try_lock_for
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 2
    functionsReached:
    - bvar::detail::UniqueLockBase::try_lock_for
    - u_elapsed
    - stop
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_for(\n            const std::chrono::duration<Rep, Period>&
      timeout_duration)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:303,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_until
      Src: /src/brpc/src/bvar/utils/lock_timer.h:304,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:305,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_time'
    argTypes:
    - std::chrono::time_point<Clock,Duration>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 312
    functionName: bvar::detail::UniqueLockBase::try_lock_until
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 2
    functionsReached:
    - stop
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_until(\n            const std::chrono::time_point<Clock,Duration>&
      timeout_time )"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - IntRecorder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 336
    functionName: bvar::MutexWithRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorder(IntRecorder& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 338
    functionName: bvar::MutexWithRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - LatencyRecorder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 352
    functionDepth: 0
    functionLinenumber: 352
    functionLinenumberEnd: 354
    functionName: bvar::MutexWithLatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithLatencyRecorder(LatencyRecorder& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: bvar::MutexWithLatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithLatencyRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: operator()(Mutex*) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(Mutex*) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: operator()(Mutex*) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(Mutex*) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/utils/lock_timer.h:122,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/utils/lock_timer.h:123,1
    - Dst: berror
      Src: /src/brpc/src/bvar/utils/lock_timer.h:123,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/utils/lock_timer.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: operator()(pthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - CHECK_EQ
    - berror
    linkageType: ''
    returnType: bool
    signature: bool operator()(pthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/utils/lock_timer.h:135,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/utils/lock_timer.h:136,1
    - Dst: berror
      Src: /src/brpc/src/bvar/utils/lock_timer.h:136,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/utils/lock_timer.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 141
    functionName: operator()(pthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - CHECK_EQ
    - berror
    linkageType: ''
    returnType: bool
    signature: bool operator()(pthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - recorder
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase(recorder_type &recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MDtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: ~MutexWithRecorderBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MDtor
    linkageType: ''
    returnType: void
    signature: void ~MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: bvar::detail::MutexWithRecorderBase::set_recorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_recorder(recorder_type& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: '& mutex()'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type & mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: operator mutex_type&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator mutex_type&()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: self_type
    signature: self_type & operator<<(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:196,1
    - Dst: timer::stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: bvar::detail::LockGuardBase::LockGuardBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - timer::stop
    - mutex
    linkageType: ''
    returnType: void
    signature: void LockGuardBase(Mutex& m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - m
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 203
    functionName: bvar::detail::LockGuardBase::TimerAndMutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimerAndMutex(Mutex &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: ~TimerAndMutex()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void ~TimerAndMutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:222,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 225
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    - stop
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:233,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:236,1
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:237,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 240
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:243,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: ~UniqueLockBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - unlock
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void ~UniqueLockBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: operator std::unique_lock<typename Mutex::mutex_type>&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator std::unique_lock<typename Mutex::mutex_type>&()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:250,1
    - Dst: bvar::detail::UniqueLockBase::lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:251,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 253
    functionName: bvar::detail::UniqueLockBase::lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::UniqueLockBase::lock
    - stop
    - start
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:256,1
    - Dst: bvar::detail::UniqueLockBase::try_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:257,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:258,1
    - Dst: recorder
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 263
    functionName: bvar::detail::UniqueLockBase::try_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - recorder
    - bvar::detail::UniqueLockBase::try_lock
    - stop
    - start
    - u_elapsed
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:266,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::detail::UniqueLockBase::unlock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - u_elapsed
    - bvar::detail::UniqueLockBase::unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:272,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:275,1
    - Dst: bvar::detail::UniqueLockBase::release
      Src: /src/brpc/src/bvar/utils/lock_timer.h:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 271
    functionDepth: 2
    functionLinenumber: 271
    functionLinenumberEnd: 281
    functionName: bvar::detail::UniqueLockBase::release
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::release
    - u_elapsed
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: bvar::detail::UniqueLockBase::mutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 284
    functionName: bvar::detail::UniqueLockBase::owns_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 9
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bool>
      Src: /src/brpc/src/bvar/utils/lock_timer.h:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - static_cast<bool>
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:291,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_for
      Src: /src/brpc/src/bvar/utils/lock_timer.h:292,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:293,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_duration'
    argTypes:
    - std::chrono::duration<Rep, Period>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 298
    functionName: bvar::detail::UniqueLockBase::try_lock_for
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::UniqueLockBase::try_lock_for
    - u_elapsed
    - stop
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_for(\n            const std::chrono::duration<Rep, Period>&
      timeout_duration)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:303,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_until
      Src: /src/brpc/src/bvar/utils/lock_timer.h:304,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:305,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_time'
    argTypes:
    - std::chrono::time_point<Clock,Duration>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 312
    functionName: bvar::detail::UniqueLockBase::try_lock_until
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 3
    functionsReached:
    - stop
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_until(\n            const std::chrono::time_point<Clock,Duration>&
      timeout_time )"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - recorder
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase(recorder_type &recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MCtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: bvar::detail::MutexWithRecorderBase::MutexWithRecorderBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MCtor
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MDtor
      Src: /src/brpc/src/bvar/utils/lock_timer.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: ~MutexWithRecorderBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - MDtor
    linkageType: ''
    returnType: void
    signature: void ~MutexWithRecorderBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - recorder_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: bvar::detail::MutexWithRecorderBase::set_recorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_recorder(recorder_type& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: '& mutex()'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type & mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: operator mutex_type&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator mutex_type&()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: self_type
    signature: self_type & operator<<(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:196,1
    - Dst: timer::stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: bvar::detail::LockGuardBase::LockGuardBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - timer::stop
    - mutex
    linkageType: ''
    returnType: void
    signature: void LockGuardBase(Mutex& m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - m
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 203
    functionName: bvar::detail::LockGuardBase::TimerAndMutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimerAndMutex(Mutex &m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: ~TimerAndMutex()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void ~TimerAndMutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:222,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 225
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    - stop
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::mutex
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::mutex
      Src: /src/brpc/src/bvar/utils/lock_timer.h:233,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:236,1
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:237,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 240
    functionName: bvar::detail::UniqueLockBase::UniqueLockBase
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - u_elapsed
    linkageType: ''
    returnType: void
    signature: void UniqueLockBase(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:243,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: ~UniqueLockBase()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - unlock
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void ~UniqueLockBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: operator std::unique_lock<typename Mutex::mutex_type>&()
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator std::unique_lock<typename Mutex::mutex_type>&()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:250,1
    - Dst: bvar::detail::UniqueLockBase::lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:251,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 253
    functionName: bvar::detail::UniqueLockBase::lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 4
    functionsReached:
    - bvar::detail::UniqueLockBase::lock
    - stop
    - start
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:256,1
    - Dst: bvar::detail::UniqueLockBase::try_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:257,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:258,1
    - Dst: recorder
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 263
    functionName: bvar::detail::UniqueLockBase::try_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 4
    functionsReached:
    - recorder
    - bvar::detail::UniqueLockBase::try_lock
    - stop
    - start
    - u_elapsed
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::unlock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:266,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::detail::UniqueLockBase::unlock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 4
    functionsReached:
    - u_elapsed
    - bvar::detail::UniqueLockBase::unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:272,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:275,1
    - Dst: bvar::detail::UniqueLockBase::release
      Src: /src/brpc/src/bvar/utils/lock_timer.h:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 271
    functionDepth: 2
    functionLinenumber: 271
    functionLinenumberEnd: 281
    functionName: bvar::detail::UniqueLockBase::release
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 4
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    - bvar::detail::UniqueLockBase::release
    - u_elapsed
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: bvar::detail::UniqueLockBase::mutex
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::UniqueLockBase::owns_lock
      Src: /src/brpc/src/bvar/utils/lock_timer.h:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 284
    functionName: bvar::detail::UniqueLockBase::owns_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 12
    functionsReached:
    - bvar::detail::UniqueLockBase::owns_lock
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bool>
      Src: /src/brpc/src/bvar/utils/lock_timer.h:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached:
    - static_cast<bool>
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:291,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_for
      Src: /src/brpc/src/bvar/utils/lock_timer.h:292,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:293,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_duration'
    argTypes:
    - std::chrono::duration<Rep, Period>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 298
    functionName: bvar::detail::UniqueLockBase::try_lock_for
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 4
    functionsReached:
    - bvar::detail::UniqueLockBase::try_lock_for
    - u_elapsed
    - stop
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_for(\n            const std::chrono::duration<Rep, Period>&
      timeout_duration)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bvar/utils/lock_timer.h:303,1
    - Dst: bvar::detail::UniqueLockBase::try_lock_until
      Src: /src/brpc/src/bvar/utils/lock_timer.h:304,1
    - Dst: stop
      Src: /src/brpc/src/bvar/utils/lock_timer.h:305,1
    - Dst: u_elapsed
      Src: /src/brpc/src/bvar/utils/lock_timer.h:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' timeout_time'
    argTypes:
    - std::chrono::time_point<Clock,Duration>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 312
    functionName: bvar::detail::UniqueLockBase::try_lock_until
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 4
    functionsReached:
    - stop
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    linkageType: ''
    returnType: bool
    signature: "bool try_lock_until(\n            const std::chrono::time_point<Clock,Duration>&
      timeout_time )"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - IntRecorder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 336
    functionName: bvar::MutexWithRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorder(IntRecorder& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 338
    functionName: bvar::MutexWithRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' recorder'
    argTypes:
    - LatencyRecorder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 352
    functionDepth: 0
    functionLinenumber: 352
    functionLinenumberEnd: 354
    functionName: bvar::MutexWithLatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithLatencyRecorder(LatencyRecorder& recorder)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: bvar::MutexWithLatencyRecorder
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MutexWithLatencyRecorder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - ::bvar::MutexWithRecorder<Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 372
    functionName: std::lock_guard<bvar::MutexWithRecorder<Mutex> >::lock_guard
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock_guard(::bvar::MutexWithRecorder<Mutex> &mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - ::bvar::MutexWithLatencyRecorder<Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 384
    functionName: std::lock_guard<bvar::MutexWithLatencyRecorder<Mutex> >::lock_guard
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock_guard(::bvar::MutexWithLatencyRecorder<Mutex> &mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 398
    functionName: std::unique_lock<bvar::MutexWithRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 402
    functionName: std::unique_lock<bvar::MutexWithRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 406
    functionName: std::unique_lock<bvar::MutexWithRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 420
    functionName: std::unique_lock<bvar::MutexWithLatencyRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: std::unique_lock<bvar::MutexWithLatencyRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 428
    functionName: std::unique_lock<bvar::MutexWithLatencyRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - ::bvar::MutexWithRecorder<Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 372
    functionName: std::lock_guard<bvar::MutexWithRecorder<Mutex> >::lock_guard
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock_guard(::bvar::MutexWithRecorder<Mutex> &mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - ::bvar::MutexWithLatencyRecorder<Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 384
    functionName: std::lock_guard<bvar::MutexWithLatencyRecorder<Mutex> >::lock_guard
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void lock_guard(::bvar::MutexWithLatencyRecorder<Mutex> &mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 398
    functionName: std::unique_lock<bvar::MutexWithRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 402
    functionName: std::unique_lock<bvar::MutexWithRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 406
    functionName: std::unique_lock<bvar::MutexWithRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 420
    functionName: std::unique_lock<bvar::MutexWithLatencyRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - defer_lock
    argTypes:
    - mutex_type
    - std::defer_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: std::unique_lock<bvar::MutexWithLatencyRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::defer_lock_t defer_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' mutex'
    - try_to_lock
    argTypes:
    - mutex_type
    - std::try_to_lock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 428
    functionName: std::unique_lock<bvar::MutexWithLatencyRecorder<Mutex> >::unique_lock
    functionSourceFile: /src/brpc/src/bvar/utils/lock_timer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, std::try_to_lock_t try_to_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - a
    - c
    argTypes:
    - agent_type*
    - Combiner*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::GlobalValue::GlobalValue
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GlobalValue(agent_type* a, Combiner* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: element::_lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:55,1
    - Dst: _lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: bvar::detail::GlobalValue::lock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Release
    - _lock::Acquire
    linkageType: ''
    returnType: result_type
    signature: result_type * lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:62,1
    - Dst: element::_lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: bvar::detail::GlobalValue::unlock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Acquire
    - _lock::Release
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: bvar::detail::ElementContainer::load
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' new_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: bvar::detail::ElementContainer::store
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void store(const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - prev
    - ' new_value'
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: bvar::detail::ElementContainer::exchange
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 96
    functionName: bvar::detail::ElementContainer::modify
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:101,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/combiner.h:102,1
    - Dst: Release
      Src: /src/brpc/src/bvar/detail/combiner.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' global_value'
    argTypes:
    - Op
    - GlobalValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: bvar::detail::ElementContainer::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - op
    - Acquire
    - Release
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, GlobalValue & global_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 1
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
      Src: /src/brpc/src/bvar/detail/combiner.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 1
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    linkageType: ''
    returnType: void
    signature: void store(T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
      Src: /src/brpc/src/bvar/detail/combiner.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - prev
    - new_value
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 1
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' expected'
    - new_value
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 1
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& expected, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:137,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:139,1
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:144,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 136
    functionDepth: 2
    functionLinenumber: 136
    functionLinenumberEnd: 149
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::modify"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:169,1
    - Dst: self_shared_type::commit_and_erase
      Src: /src/brpc/src/bvar/detail/combiner.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 173
    functionName: ~Agent()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - self_shared_type::commit_and_erase
    - lock
    linkageType: ''
    returnType: void
    signature: void ~Agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bvar/detail/combiner.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' val'
    - c
    argTypes:
    - ElementTp
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: bvar::detail::AgentCombiner::reset
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void reset(const ElementTp& val, self_shared_type c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:210,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:213,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - op
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 1
    functionsReached:
    - lock
    - get
    - bvar::detail::AgentCombiner::merge_global
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type c = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:228,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 234
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    - ElementTp
    - BinaryOp
    linkageType: ''
    returnType: void
    signature: "void AgentCombiner(const ResultTp result_identity = ResultTp(),\n
      \                          const ElementTp element_identity = ElementTp(),\n
      \                          const BinaryOp& op = BinaryOp())"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_all_agents
      Src: /src/brpc/src/bvar/detail/combiner.h:238,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 242
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - clear_all_agents
    - bvar::detail::AgentGroup::destroy_agent
    linkageType: ''
    returnType: void
    signature: void ~AgentCombiner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:249,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 255
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - load
    - call_op_returning_void
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp combine_agents() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 258
    functionName: bvar::detail::AgentCombiner::element_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ElementTp>::type
    signature: typename butil::add_cr_non_integral<ElementTp>::type element_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 260
    functionName: bvar::detail::AgentCombiner::result_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ResultTp>::type
    signature: typename butil::add_cr_non_integral<ResultTp>::type result_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 274
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - call_op_returning_void
    - head
    - exchange
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:285,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:286,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:287,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 288
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::RemoveFromList
    - call_op_returning_void
    - Agent*::element::load
    linkageType: ''
    returnType: void
    signature: void commit_and_erase(Agent* agent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:297,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 299
    functionName: bvar::detail::AgentCombiner::commit_and_clear
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::exchange
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void commit_and_clear(Agent* agent)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::get_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:303,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:306,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:308,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:312,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 322
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - Agent*::reset
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentCombiner::shared_from_this
    - bvar::detail::AgentGroup::get_tls_agent
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:331,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 335
    functionName: bvar::detail::AgentCombiner::clear_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - butil::LinkNode*::RemoveFromList
    - ElementTp
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: void
    signature: void clear_all_agents()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 337
    functionName: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BinaryOp
    signature: BinaryOp & op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 339
    functionName: bvar::detail::AgentCombiner::valid
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - a
    - c
    argTypes:
    - agent_type*
    - Combiner*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::GlobalValue::GlobalValue
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GlobalValue(agent_type* a, Combiner* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: element::_lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:55,1
    - Dst: _lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: bvar::detail::GlobalValue::lock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Release
    - _lock::Acquire
    linkageType: ''
    returnType: result_type
    signature: result_type * lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:62,1
    - Dst: element::_lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: bvar::detail::GlobalValue::unlock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Acquire
    - _lock::Release
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: bvar::detail::ElementContainer::load
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' new_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: bvar::detail::ElementContainer::store
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void store(const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - prev
    - ' new_value'
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: bvar::detail::ElementContainer::exchange
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 96
    functionName: bvar::detail::ElementContainer::modify
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:101,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/combiner.h:102,1
    - Dst: Release
      Src: /src/brpc/src/bvar/detail/combiner.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' global_value'
    argTypes:
    - Op
    - GlobalValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: bvar::detail::ElementContainer::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - op
    - Acquire
    - Release
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, GlobalValue & global_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 3
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
      Src: /src/brpc/src/bvar/detail/combiner.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 2
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    linkageType: ''
    returnType: void
    signature: void store(T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
      Src: /src/brpc/src/bvar/detail/combiner.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - prev
    - new_value
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 2
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' expected'
    - new_value
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 3
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& expected, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:137,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:139,1
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:144,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 136
    functionDepth: 2
    functionLinenumber: 136
    functionLinenumberEnd: 149
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::modify"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:169,1
    - Dst: self_shared_type::commit_and_erase
      Src: /src/brpc/src/bvar/detail/combiner.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 173
    functionName: ~Agent()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - self_shared_type::commit_and_erase
    - lock
    linkageType: ''
    returnType: void
    signature: void ~Agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bvar/detail/combiner.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' val'
    - c
    argTypes:
    - ElementTp
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: bvar::detail::AgentCombiner::reset
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void reset(const ElementTp& val, self_shared_type c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:210,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:213,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - op
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 2
    functionsReached:
    - lock
    - get
    - bvar::detail::AgentCombiner::merge_global
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type c = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:228,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 234
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    - ElementTp
    - BinaryOp
    linkageType: ''
    returnType: void
    signature: "void AgentCombiner(const ResultTp result_identity = ResultTp(),\n
      \                          const ElementTp element_identity = ElementTp(),\n
      \                          const BinaryOp& op = BinaryOp())"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_all_agents
      Src: /src/brpc/src/bvar/detail/combiner.h:238,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 242
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - clear_all_agents
    - bvar::detail::AgentGroup::destroy_agent
    linkageType: ''
    returnType: void
    signature: void ~AgentCombiner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:249,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 255
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - load
    - call_op_returning_void
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp combine_agents() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 258
    functionName: bvar::detail::AgentCombiner::element_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ElementTp>::type
    signature: typename butil::add_cr_non_integral<ElementTp>::type element_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 260
    functionName: bvar::detail::AgentCombiner::result_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ResultTp>::type
    signature: typename butil::add_cr_non_integral<ResultTp>::type result_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 274
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - call_op_returning_void
    - head
    - exchange
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:285,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:286,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:287,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 288
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::RemoveFromList
    - call_op_returning_void
    - Agent*::element::load
    linkageType: ''
    returnType: void
    signature: void commit_and_erase(Agent* agent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:297,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 299
    functionName: bvar::detail::AgentCombiner::commit_and_clear
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::exchange
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void commit_and_clear(Agent* agent)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::get_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:303,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:306,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:308,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:312,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 322
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - Agent*::reset
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentCombiner::shared_from_this
    - bvar::detail::AgentGroup::get_tls_agent
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:331,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 335
    functionName: bvar::detail::AgentCombiner::clear_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - butil::LinkNode*::RemoveFromList
    - ElementTp
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: void
    signature: void clear_all_agents()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 337
    functionName: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BinaryOp
    signature: BinaryOp & op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 339
    functionName: bvar::detail::AgentCombiner::valid
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - a
    - c
    argTypes:
    - agent_type*
    - Combiner*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::GlobalValue::GlobalValue
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GlobalValue(agent_type* a, Combiner* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: element::_lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:55,1
    - Dst: _lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: bvar::detail::GlobalValue::lock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Release
    - _lock::Acquire
    linkageType: ''
    returnType: result_type
    signature: result_type * lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:62,1
    - Dst: element::_lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: bvar::detail::GlobalValue::unlock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Acquire
    - _lock::Release
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: bvar::detail::ElementContainer::load
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' new_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: bvar::detail::ElementContainer::store
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void store(const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - prev
    - ' new_value'
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: bvar::detail::ElementContainer::exchange
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 96
    functionName: bvar::detail::ElementContainer::modify
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:101,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/combiner.h:102,1
    - Dst: Release
      Src: /src/brpc/src/bvar/detail/combiner.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' global_value'
    argTypes:
    - Op
    - GlobalValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: bvar::detail::ElementContainer::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - op
    - Acquire
    - Release
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, GlobalValue & global_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 5
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
      Src: /src/brpc/src/bvar/detail/combiner.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 3
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    linkageType: ''
    returnType: void
    signature: void store(T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
      Src: /src/brpc/src/bvar/detail/combiner.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - prev
    - new_value
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 3
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' expected'
    - new_value
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 5
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& expected, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:137,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:139,1
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:144,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 136
    functionDepth: 2
    functionLinenumber: 136
    functionLinenumberEnd: 149
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::modify"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:169,1
    - Dst: self_shared_type::commit_and_erase
      Src: /src/brpc/src/bvar/detail/combiner.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 173
    functionName: ~Agent()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - self_shared_type::commit_and_erase
    - lock
    linkageType: ''
    returnType: void
    signature: void ~Agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bvar/detail/combiner.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' val'
    - c
    argTypes:
    - ElementTp
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: bvar::detail::AgentCombiner::reset
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void reset(const ElementTp& val, self_shared_type c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:210,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:213,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - op
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 3
    functionsReached:
    - lock
    - get
    - bvar::detail::AgentCombiner::merge_global
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type c = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:228,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 234
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    - ElementTp
    - BinaryOp
    linkageType: ''
    returnType: void
    signature: "void AgentCombiner(const ResultTp result_identity = ResultTp(),\n
      \                          const ElementTp element_identity = ElementTp(),\n
      \                          const BinaryOp& op = BinaryOp())"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_all_agents
      Src: /src/brpc/src/bvar/detail/combiner.h:238,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 242
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - clear_all_agents
    - bvar::detail::AgentGroup::destroy_agent
    linkageType: ''
    returnType: void
    signature: void ~AgentCombiner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:249,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 255
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - load
    - call_op_returning_void
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp combine_agents() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 258
    functionName: bvar::detail::AgentCombiner::element_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ElementTp>::type
    signature: typename butil::add_cr_non_integral<ElementTp>::type element_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 260
    functionName: bvar::detail::AgentCombiner::result_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ResultTp>::type
    signature: typename butil::add_cr_non_integral<ResultTp>::type result_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 274
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - call_op_returning_void
    - head
    - exchange
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:285,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:286,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:287,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 288
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::RemoveFromList
    - call_op_returning_void
    - Agent*::element::load
    linkageType: ''
    returnType: void
    signature: void commit_and_erase(Agent* agent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:297,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 299
    functionName: bvar::detail::AgentCombiner::commit_and_clear
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::exchange
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void commit_and_clear(Agent* agent)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::get_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:303,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:306,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:308,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:312,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 322
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - Agent*::reset
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentCombiner::shared_from_this
    - bvar::detail::AgentGroup::get_tls_agent
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:331,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 335
    functionName: bvar::detail::AgentCombiner::clear_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - butil::LinkNode*::RemoveFromList
    - ElementTp
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: void
    signature: void clear_all_agents()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 337
    functionName: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BinaryOp
    signature: BinaryOp & op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 339
    functionName: bvar::detail::AgentCombiner::valid
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - a
    - c
    argTypes:
    - agent_type*
    - Combiner*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::GlobalValue::GlobalValue
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GlobalValue(agent_type* a, Combiner* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: element::_lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:55,1
    - Dst: _lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: bvar::detail::GlobalValue::lock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Release
    - _lock::Acquire
    linkageType: ''
    returnType: result_type
    signature: result_type * lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _lock::Release
      Src: /src/brpc/src/bvar/detail/combiner.h:62,1
    - Dst: element::_lock::Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: bvar::detail::GlobalValue::unlock
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - element::_lock::Acquire
    - _lock::Release
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: bvar::detail::ElementContainer::load
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' new_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: bvar::detail::ElementContainer::store
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void store(const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - prev
    - ' new_value'
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: bvar::detail::ElementContainer::exchange
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, const T& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 96
    functionName: bvar::detail::ElementContainer::modify
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Acquire
      Src: /src/brpc/src/bvar/detail/combiner.h:101,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/combiner.h:102,1
    - Dst: Release
      Src: /src/brpc/src/bvar/detail/combiner.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' global_value'
    argTypes:
    - Op
    - GlobalValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: bvar::detail::ElementContainer::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - op
    - Acquire
    - Release
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, GlobalValue & global_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 7
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    linkageType: ''
    returnType: void
    signature: void load(T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
      Src: /src/brpc/src/bvar/detail/combiner.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 4
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::store"
    linkageType: ''
    returnType: void
    signature: void store(T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
      Src: /src/brpc/src/bvar/detail/combiner.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - prev
    - new_value
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 4
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::exchange"
    linkageType: ''
    returnType: void
    signature: void exchange(T* prev, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' expected'
    - new_value
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 7
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& expected, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
      Src: /src/brpc/src/bvar/detail/combiner.h:137,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:139,1
    - Dst: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
      Src: /src/brpc/src/bvar/detail/combiner.h:144,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - op
    - value2
    argTypes:
    - Op
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 136
    functionDepth: 2
    functionLinenumber: 136
    functionLinenumberEnd: 149
    functionName: "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::modify"
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::compare_exchange_weak"
    linkageType: ''
    returnType: void
    signature: void modify(const Op &op, const T1 &value2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:169,1
    - Dst: self_shared_type::commit_and_erase
      Src: /src/brpc/src/bvar/detail/combiner.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 173
    functionName: ~Agent()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - self_shared_type::commit_and_erase
    - lock
    linkageType: ''
    returnType: void
    signature: void ~Agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bvar/detail/combiner.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' val'
    - c
    argTypes:
    - ElementTp
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: bvar::detail::AgentCombiner::reset
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void reset(const ElementTp& val, self_shared_type c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:210,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:213,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - op
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 4
    functionsReached:
    - lock
    - get
    - bvar::detail::AgentCombiner::merge_global
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type c = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:228,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 234
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    - ElementTp
    - BinaryOp
    linkageType: ''
    returnType: void
    signature: "void AgentCombiner(const ResultTp result_identity = ResultTp(),\n
      \                          const ElementTp element_identity = ElementTp(),\n
      \                          const BinaryOp& op = BinaryOp())"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_all_agents
      Src: /src/brpc/src/bvar/detail/combiner.h:238,1
    - Dst: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 242
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - clear_all_agents
    - bvar::detail::AgentGroup::destroy_agent
    linkageType: ''
    returnType: void
    signature: void ~AgentCombiner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:249,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:250,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:251,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 255
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - load
    - call_op_returning_void
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp combine_agents() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 258
    functionName: bvar::detail::AgentCombiner::element_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ElementTp>::type
    signature: typename butil::add_cr_non_integral<ElementTp>::type element_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 260
    functionName: bvar::detail::AgentCombiner::result_identity
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename butil::add_cr_non_integral<ResultTp>::type
    signature: typename butil::add_cr_non_integral<ResultTp>::type result_identity()
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:269,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:270,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 274
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - call_op_returning_void
    - head
    - exchange
    - butil::LinkNode*::next
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:285,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:286,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:287,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 288
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::RemoveFromList
    - call_op_returning_void
    - Agent*::element::load
    linkageType: ''
    returnType: void
    signature: void commit_and_erase(Agent* agent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:297,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 299
    functionName: bvar::detail::AgentCombiner::commit_and_clear
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::exchange
    - call_op_returning_void
    linkageType: ''
    returnType: void
    signature: void commit_and_clear(Agent* agent)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::AgentGroup::get_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:303,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:306,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:308,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:312,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 322
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - Agent*::reset
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentCombiner::shared_from_this
    - bvar::detail::AgentGroup::get_tls_agent
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: head
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:329,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:330,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:331,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 335
    functionName: bvar::detail::AgentCombiner::clear_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - butil::LinkNode*::value
    - end
    - butil::LinkNode*::RemoveFromList
    - ElementTp
    - head
    - butil::LinkNode*::next
    linkageType: ''
    returnType: void
    signature: void clear_all_agents()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 337
    functionName: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BinaryOp
    signature: BinaryOp & op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 339
    functionName: bvar::detail::AgentCombiner::valid
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 37
    functionName: bvar::detail::ones32
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ones32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ones32
      Src: /src/brpc/src/bvar/detail/percentile.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: bvar::detail::log2
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::ones32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t log2(uint32_t x)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:54,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:55,1
    - Dst: bvar::detail::log2
      Src: /src/brpc/src/bvar/detail/percentile.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - x
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: bvar::detail::get_interval_index
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::detail::log2
    linkageType: ''
    returnType: size_t
    signature: size_t get_interval_index(int64_t &x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bvar::detail::AddLatency::AddLatency
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddLatency(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_interval_index
      Src: /src/brpc/src/bvar/detail/percentile.cpp:70,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:72,1
    - Dst: full
      Src: /src/brpc/src/bvar/detail/percentile.cpp:73,1
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:74,1
    - Dst: GlobalPercentileSamples*::get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:75,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:76,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:77,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:78,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.cpp:79,1
    - Dst: add64
      Src: /src/brpc/src/bvar/detail/percentile.cpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' global_value'
    - ' local_value'
    argTypes:
    - GlobalValue<Percentile::combiner_type>
    - ThreadLocalPercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 83
    functionName: "operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - add64
    - unlock
    - get_interval_at
    - get_interval_index
    - added_count
    - clear
    - full
    - lock
    - GlobalPercentileSamples*::get_interval_at
    linkageType: ''
    returnType: void
    signature: "void operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: bvar::detail::Percentile::Percentile
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - std::make_shared<combiner_type>
    linkageType: ''
    returnType: void
    signature: void Percentile::Percentile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: destroy
      Src: /src/brpc/src/bvar/detail/percentile.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 98
    functionName: Percentile::~Percentile()
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - destroy
    linkageType: ''
    returnType: void
    signature: void Percentile::~Percentile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: bvar::detail::Percentile::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::get_value() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/percentile.cpp:109,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:118,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:119,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:122,1
    - Dst: agent_type*::merge_global
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    - Dst: AddLatency
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 129
    functionName: '&Percentile::operator<<(int64_t latency)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - AddLatency
    - agent_type*::merge_global
    - get_or_create_tls_agent
    - empty
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 37
    functionName: bvar::detail::ones32
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ones32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ones32
      Src: /src/brpc/src/bvar/detail/percentile.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: bvar::detail::log2
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - bvar::detail::ones32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t log2(uint32_t x)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:54,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:55,1
    - Dst: bvar::detail::log2
      Src: /src/brpc/src/bvar/detail/percentile.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - x
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: bvar::detail::get_interval_index
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::detail::log2
    linkageType: ''
    returnType: size_t
    signature: size_t get_interval_index(int64_t &x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bvar::detail::AddLatency::AddLatency
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddLatency(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_interval_index
      Src: /src/brpc/src/bvar/detail/percentile.cpp:70,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:72,1
    - Dst: full
      Src: /src/brpc/src/bvar/detail/percentile.cpp:73,1
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:74,1
    - Dst: GlobalPercentileSamples*::get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:75,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:76,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:77,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:78,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.cpp:79,1
    - Dst: add64
      Src: /src/brpc/src/bvar/detail/percentile.cpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' global_value'
    - ' local_value'
    argTypes:
    - GlobalValue<Percentile::combiner_type>
    - ThreadLocalPercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 83
    functionName: "operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - add64
    - unlock
    - get_interval_at
    - get_interval_index
    - added_count
    - clear
    - full
    - lock
    - GlobalPercentileSamples*::get_interval_at
    linkageType: ''
    returnType: void
    signature: "void operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: bvar::detail::Percentile::Percentile
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - std::make_shared<combiner_type>
    linkageType: ''
    returnType: void
    signature: void Percentile::Percentile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: destroy
      Src: /src/brpc/src/bvar/detail/percentile.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 98
    functionName: Percentile::~Percentile()
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - destroy
    linkageType: ''
    returnType: void
    signature: void Percentile::~Percentile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: bvar::detail::Percentile::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::get_value() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/percentile.cpp:109,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:118,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:119,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:122,1
    - Dst: agent_type*::merge_global
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    - Dst: AddLatency
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 129
    functionName: '&Percentile::operator<<(int64_t latency)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - AddLatency
    - agent_type*::merge_global
    - get_or_create_tls_agent
    - empty
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 37
    functionName: bvar::detail::ones32
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ones32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ones32
      Src: /src/brpc/src/bvar/detail/percentile.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: bvar::detail::log2
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 2
    functionsReached:
    - bvar::detail::ones32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t log2(uint32_t x)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:54,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:55,1
    - Dst: bvar::detail::log2
      Src: /src/brpc/src/bvar/detail/percentile.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - x
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: bvar::detail::get_interval_index
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::detail::log2
    linkageType: ''
    returnType: size_t
    signature: size_t get_interval_index(int64_t &x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bvar::detail::AddLatency::AddLatency
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddLatency(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_interval_index
      Src: /src/brpc/src/bvar/detail/percentile.cpp:70,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:72,1
    - Dst: full
      Src: /src/brpc/src/bvar/detail/percentile.cpp:73,1
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:74,1
    - Dst: GlobalPercentileSamples*::get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:75,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:76,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:77,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:78,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.cpp:79,1
    - Dst: add64
      Src: /src/brpc/src/bvar/detail/percentile.cpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' global_value'
    - ' local_value'
    argTypes:
    - GlobalValue<Percentile::combiner_type>
    - ThreadLocalPercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 83
    functionName: "operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - add64
    - unlock
    - get_interval_at
    - get_interval_index
    - added_count
    - clear
    - full
    - lock
    - GlobalPercentileSamples*::get_interval_at
    linkageType: ''
    returnType: void
    signature: "void operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: bvar::detail::Percentile::Percentile
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - std::make_shared<combiner_type>
    linkageType: ''
    returnType: void
    signature: void Percentile::Percentile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: destroy
      Src: /src/brpc/src/bvar/detail/percentile.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 98
    functionName: Percentile::~Percentile()
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - destroy
    linkageType: ''
    returnType: void
    signature: void Percentile::~Percentile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: bvar::detail::Percentile::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::get_value() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/percentile.cpp:109,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:118,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:119,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:122,1
    - Dst: agent_type*::merge_global
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    - Dst: AddLatency
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 129
    functionName: '&Percentile::operator<<(int64_t latency)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - AddLatency
    - agent_type*::merge_global
    - get_or_create_tls_agent
    - empty
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 37
    functionName: bvar::detail::ones32
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ones32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ones32
      Src: /src/brpc/src/bvar/detail/percentile.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: bvar::detail::log2
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 3
    functionsReached:
    - bvar::detail::ones32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t log2(uint32_t x)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:54,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.cpp:55,1
    - Dst: bvar::detail::log2
      Src: /src/brpc/src/bvar/detail/percentile.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - x
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: bvar::detail::get_interval_index
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::detail::log2
    linkageType: ''
    returnType: size_t
    signature: size_t get_interval_index(int64_t &x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bvar::detail::AddLatency::AddLatency
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddLatency(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_interval_index
      Src: /src/brpc/src/bvar/detail/percentile.cpp:70,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:72,1
    - Dst: full
      Src: /src/brpc/src/bvar/detail/percentile.cpp:73,1
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:74,1
    - Dst: GlobalPercentileSamples*::get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.cpp:75,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:76,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/percentile.cpp:77,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.cpp:78,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.cpp:79,1
    - Dst: add64
      Src: /src/brpc/src/bvar/detail/percentile.cpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' global_value'
    - ' local_value'
    argTypes:
    - GlobalValue<Percentile::combiner_type>
    - ThreadLocalPercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 83
    functionName: "operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - add64
    - unlock
    - get_interval_at
    - get_interval_index
    - added_count
    - clear
    - full
    - lock
    - GlobalPercentileSamples*::get_interval_at
    linkageType: ''
    returnType: void
    signature: "void operator()(GlobalValue<Percentile::combiner_type>& global_value,\n
      \                   ThreadLocalPercentileSamples& local_value) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: bvar::detail::Percentile::Percentile
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - std::make_shared<combiner_type>
    linkageType: ''
    returnType: void
    signature: void Percentile::Percentile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: destroy
      Src: /src/brpc/src/bvar/detail/percentile.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 98
    functionName: Percentile::~Percentile()
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - destroy
    linkageType: ''
    returnType: void
    signature: void Percentile::~Percentile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 1
    functionsReached:
    - reset_all_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/detail/percentile.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: bvar::detail::Percentile::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - combine_agents
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::get_value() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/percentile.cpp:109,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:118,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:119,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.cpp:122,1
    - Dst: agent_type*::merge_global
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    - Dst: AddLatency
      Src: /src/brpc/src/bvar/detail/percentile.cpp:127,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 129
    functionName: '&Percentile::operator<<(int64_t latency)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - AddLatency
    - agent_type*::merge_global
    - get_or_create_tls_agent
    - empty
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& /*obj*/, const Op&, int /*number*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: bvar::detail::ProbablyAddtition
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::call_op_returning_void
    - T
    linkageType: ''
    returnType: void
    signature: void ProbablyAddtition(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 61
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T, N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T, N>& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T,N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T,N>& obj, const Op& op, int number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/detail/series.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 109
    functionName: bvar::detail::SeriesBase::SeriesBase
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void SeriesBase(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/detail/series.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: ~SeriesBase()
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~SeriesBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/series.h:115,1
    - Dst: append_second
      Src: /src/brpc/src/bvar/detail/series.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: bvar::detail::SeriesBase::append
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - append_second
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void append(const T& value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: bvar::detail::SeriesBase::Data
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void Data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: '& second(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: '& second(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& minute(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: '& minute(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: '& hour(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& hour(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: '& day(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: '& day(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:162,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:166,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:170,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_minute
      Src: /src/brpc/src/bvar/detail/series.h:171,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 173
    functionName: bvar::detail::SeriesBase<T, Op>::append_second
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - second
    - bvar::detail::SeriesBase<T, Op>::append_minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_second(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:177,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:181,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:185,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_hour
      Src: /src/brpc/src/bvar/detail/series.h:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 188
    functionName: bvar::detail::SeriesBase<T, Op>::append_minute
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 1
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_hour
    - minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_minute(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:192,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:196,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:200,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_day
      Src: /src/brpc/src/bvar/detail/series.h:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 203
    functionName: bvar::detail::SeriesBase<T, Op>::append_hour
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 1
    functionsReached:
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_hour(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: day
      Src: /src/brpc/src/bvar/detail/series.h:207,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: bvar::detail::SeriesBase<T, Op>::append_day
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 1
    functionsReached:
    - day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_day(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: bvar::detail::Series::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: bvar::detail::Series<Vector<T,N>, Op>::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/series.h:233,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:234,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:242,1
    - Dst: bvar::detail::Series<T, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:249,1
    - Dst: bvar::detail::Series<T, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:255,1
    - Dst: bvar::detail::Series<T, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:261,1
    - Dst: bvar::detail::Series<T, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:267,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 270
    functionName: bvar::detail::Series<T, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::Series<T, Op>::_data::hour
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<T, Op>::_data::minute
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - bvar::detail::Series<T, Op>::_data::day
    linkageType: ''
    returnType: void
    signature: "void Series<T, Op>::describe(std::ostream& os,\n                             const
      std::string* vector_names) const"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:275,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:283,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/bvar/detail/series.h:285,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:304,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:310,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:316,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:322,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 327
    functionName: bvar::detail::Series<Vector<T,N>, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::StringSplitter::length
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    - butil::StringSplitter::field
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: "void Series<Vector<T,N>, Op>::describe(std::ostream& os,\n                                       const
      std::string* vector_names) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& /*obj*/, const Op&, int /*number*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: bvar::detail::ProbablyAddtition
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::call_op_returning_void
    - T
    linkageType: ''
    returnType: void
    signature: void ProbablyAddtition(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 61
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T, N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T, N>& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T,N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T,N>& obj, const Op& op, int number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/detail/series.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 109
    functionName: bvar::detail::SeriesBase::SeriesBase
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void SeriesBase(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/detail/series.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: ~SeriesBase()
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~SeriesBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/series.h:115,1
    - Dst: append_second
      Src: /src/brpc/src/bvar/detail/series.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: bvar::detail::SeriesBase::append
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - append_second
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void append(const T& value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: bvar::detail::SeriesBase::Data
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void Data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: '& second(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: '& second(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& minute(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: '& minute(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: '& hour(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& hour(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: '& day(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: '& day(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:162,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:166,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:170,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_minute
      Src: /src/brpc/src/bvar/detail/series.h:171,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 173
    functionName: bvar::detail::SeriesBase<T, Op>::append_second
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - second
    - bvar::detail::SeriesBase<T, Op>::append_minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_second(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:177,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:181,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:185,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_hour
      Src: /src/brpc/src/bvar/detail/series.h:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 188
    functionName: bvar::detail::SeriesBase<T, Op>::append_minute
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 2
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_hour
    - minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_minute(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:192,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:196,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:200,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_day
      Src: /src/brpc/src/bvar/detail/series.h:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 203
    functionName: bvar::detail::SeriesBase<T, Op>::append_hour
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 2
    functionsReached:
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_hour(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: day
      Src: /src/brpc/src/bvar/detail/series.h:207,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: bvar::detail::SeriesBase<T, Op>::append_day
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 2
    functionsReached:
    - day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_day(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: bvar::detail::Series::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: bvar::detail::Series<Vector<T,N>, Op>::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/series.h:233,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:234,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:242,1
    - Dst: bvar::detail::Series<T, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:249,1
    - Dst: bvar::detail::Series<T, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:255,1
    - Dst: bvar::detail::Series<T, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:261,1
    - Dst: bvar::detail::Series<T, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:267,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 270
    functionName: bvar::detail::Series<T, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::Series<T, Op>::_data::hour
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<T, Op>::_data::minute
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - bvar::detail::Series<T, Op>::_data::day
    linkageType: ''
    returnType: void
    signature: "void Series<T, Op>::describe(std::ostream& os,\n                             const
      std::string* vector_names) const"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:275,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:283,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/bvar/detail/series.h:285,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:304,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:310,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:316,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:322,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 327
    functionName: bvar::detail::Series<Vector<T,N>, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::StringSplitter::length
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    - butil::StringSplitter::field
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: "void Series<Vector<T,N>, Op>::describe(std::ostream& os,\n                                       const
      std::string* vector_names) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& /*obj*/, const Op&, int /*number*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: bvar::detail::ProbablyAddtition
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::call_op_returning_void
    - T
    linkageType: ''
    returnType: void
    signature: void ProbablyAddtition(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 61
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 6
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T, N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 6
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T, N>& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T,N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T,N>& obj, const Op& op, int number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/detail/series.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 109
    functionName: bvar::detail::SeriesBase::SeriesBase
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void SeriesBase(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/detail/series.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: ~SeriesBase()
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~SeriesBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/series.h:115,1
    - Dst: append_second
      Src: /src/brpc/src/bvar/detail/series.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: bvar::detail::SeriesBase::append
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - append_second
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void append(const T& value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: bvar::detail::SeriesBase::Data
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void Data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: '& second(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: '& second(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& minute(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: '& minute(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: '& hour(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& hour(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: '& day(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: '& day(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:162,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:166,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:170,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_minute
      Src: /src/brpc/src/bvar/detail/series.h:171,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 173
    functionName: bvar::detail::SeriesBase<T, Op>::append_second
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - second
    - bvar::detail::SeriesBase<T, Op>::append_minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_second(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:177,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:181,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:185,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_hour
      Src: /src/brpc/src/bvar/detail/series.h:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 188
    functionName: bvar::detail::SeriesBase<T, Op>::append_minute
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_hour
    - minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_minute(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:192,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:196,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:200,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_day
      Src: /src/brpc/src/bvar/detail/series.h:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 203
    functionName: bvar::detail::SeriesBase<T, Op>::append_hour
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached:
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_hour(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: day
      Src: /src/brpc/src/bvar/detail/series.h:207,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: bvar::detail::SeriesBase<T, Op>::append_day
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 3
    functionsReached:
    - day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_day(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: bvar::detail::Series::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: bvar::detail::Series<Vector<T,N>, Op>::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/series.h:233,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:234,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:242,1
    - Dst: bvar::detail::Series<T, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:249,1
    - Dst: bvar::detail::Series<T, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:255,1
    - Dst: bvar::detail::Series<T, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:261,1
    - Dst: bvar::detail::Series<T, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:267,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 270
    functionName: bvar::detail::Series<T, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::Series<T, Op>::_data::hour
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<T, Op>::_data::minute
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - bvar::detail::Series<T, Op>::_data::day
    linkageType: ''
    returnType: void
    signature: "void Series<T, Op>::describe(std::ostream& os,\n                             const
      std::string* vector_names) const"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:275,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:283,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/bvar/detail/series.h:285,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:304,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:310,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:316,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:322,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 327
    functionName: bvar::detail::Series<Vector<T,N>, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::StringSplitter::length
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    - butil::StringSplitter::field
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: "void Series<Vector<T,N>, Op>::describe(std::ostream& os,\n                                       const
      std::string* vector_names) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& /*obj*/, const Op&, int /*number*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:45,1
    - Dst: T
      Src: /src/brpc/src/bvar/detail/series.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: bvar::detail::ProbablyAddtition
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::call_op_returning_void
    - T
    linkageType: ''
    returnType: void
    signature: void ProbablyAddtition(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 61
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 9
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - T
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(T& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: round
      Src: /src/brpc/src/bvar/detail/series.h:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T, N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 9
    functionsReached:
    - round
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T, N>& obj, const Op& op, int number)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - ' obj'
    - ' op'
    - number
    argTypes:
    - Vector<T,N>
    - Op
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: bvar::detail::inplace_divide
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void inplace_divide(Vector<T,N>& obj, const Op& op, int number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/detail/series.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 109
    functionName: bvar::detail::SeriesBase::SeriesBase
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void SeriesBase(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bvar/detail/series.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: ~SeriesBase()
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~SeriesBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/series.h:115,1
    - Dst: append_second
      Src: /src/brpc/src/bvar/detail/series.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: bvar::detail::SeriesBase::append
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - append_second
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void append(const T& value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/bvar/detail/series.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: bvar::detail::SeriesBase::Data
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void Data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: '& second(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: '& second(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & second(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& minute(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: '& minute(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & minute(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: '& hour(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& hour(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & hour(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: '& day(int index)'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: '& day(int index) const'
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & day(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:162,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:166,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: second
      Src: /src/brpc/src/bvar/detail/series.h:168,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:170,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_minute
      Src: /src/brpc/src/bvar/detail/series.h:171,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 173
    functionName: bvar::detail::SeriesBase<T, Op>::append_second
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - second
    - bvar::detail::SeriesBase<T, Op>::append_minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_second(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:177,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:181,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: minute
      Src: /src/brpc/src/bvar/detail/series.h:183,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:185,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_hour
      Src: /src/brpc/src/bvar/detail/series.h:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 188
    functionName: bvar::detail::SeriesBase<T, Op>::append_minute
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 4
    functionsReached:
    - bvar::detail::inplace_divide
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_hour
    - minute
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_minute(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:192,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:196,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: hour
      Src: /src/brpc/src/bvar/detail/series.h:198,1
    - Dst: bvar::detail::inplace_divide
      Src: /src/brpc/src/bvar/detail/series.h:200,1
    - Dst: bvar::detail::SeriesBase<T, Op>::append_day
      Src: /src/brpc/src/bvar/detail/series.h:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' value'
    - ' op'
    argTypes:
    - T
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 203
    functionName: bvar::detail::SeriesBase<T, Op>::append_hour
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 4
    functionsReached:
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    - bvar::detail::SeriesBase<T, Op>::append_day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_hour(const T& value, const Op& op)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: day
      Src: /src/brpc/src/bvar/detail/series.h:207,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: bvar::detail::SeriesBase<T, Op>::append_day
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 4
    functionsReached:
    - day
    linkageType: ''
    returnType: void
    signature: void SeriesBase<T, Op>::append_day(const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: bvar::detail::Series::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: bvar::detail::Series<Vector<T,N>, Op>::Series
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Series(const Op& op)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/series.h:233,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:234,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:242,1
    - Dst: bvar::detail::Series<T, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:249,1
    - Dst: bvar::detail::Series<T, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:255,1
    - Dst: bvar::detail::Series<T, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:261,1
    - Dst: bvar::detail::Series<T, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:267,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 270
    functionName: bvar::detail::Series<T, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - bvar::detail::Series<T, Op>::_data::hour
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<T, Op>::_data::minute
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - bvar::detail::Series<T, Op>::_data::day
    linkageType: ''
    returnType: void
    signature: "void Series<T, Op>::describe(std::ostream& os,\n                             const
      std::string* vector_names) const"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/detail/series.h:275,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/detail/series.h:283,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/bvar/detail/series.h:285,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bvar/detail/series.h:294,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::day
      Src: /src/brpc/src/bvar/detail/series.h:304,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::hour
      Src: /src/brpc/src/bvar/detail/series.h:310,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::minute
      Src: /src/brpc/src/bvar/detail/series.h:316,1
    - Dst: bvar::detail::Series<Vector<T,N>, Op>::_data::second
      Src: /src/brpc/src/bvar/detail/series.h:322,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - ' os'
    - vector_names
    argTypes:
    - std::ostream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 327
    functionName: bvar::detail::Series<Vector<T,N>, Op>::describe
    functionSourceFile: /src/brpc/src/bvar/detail/series.h
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::StringSplitter::length
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    - butil::StringSplitter::field
    - pthread_mutex_unlock
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: "void Series<Vector<T,N>, Op>::describe(std::ostream& os,\n                                       const
      std::string* vector_names) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - Sampler*
    - Sampler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: operator()(Sampler* & s1, Sampler* s2) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - InsertBeforeAsList
    linkageType: ''
    returnType: void
    signature: void operator()(Sampler* & s1, Sampler* s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: bvar::detail::SamplerCollector::SamplerCollector
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void SamplerCollector()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/detail/sampler.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: ~SamplerCollector()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void ~SamplerCollector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: bvar::detail::SamplerCollector::child_callback_atfork
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void child_callback_atfork()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/detail/sampler.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: pthread_atfork
      Src: /src/brpc/src/bvar/detail/sampler.cpp:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 102
    functionName: bvar::detail::SamplerCollector::create_sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 1
    functionsReached:
    - berror
    - pthread_create
    - pthread_atfork
    - LOG
    linkageType: ''
    returnType: void
    signature: void create_sampling_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 107
    functionName: bvar::detail::SamplerCollector::after_forked_as_child
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void after_forked_as_child()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/detail/sampler.cpp:112,1
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: bvar::detail::SamplerCollector::sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void * sampling_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: bvar::detail::SamplerCollector::get_cumulated_time
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_time(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:136,1
    - Dst: PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:146,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bvar/detail/sampler.cpp:150,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/detail/sampler.cpp:155,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:158,1
    - Dst: bvar::detail::SamplerCollector::reset
      Src: /src/brpc/src/bvar/detail/sampler.cpp:159,1
    - Dst: Sampler*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:161,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:163,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:165,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/sampler.cpp:166,1
    - Dst: Sampler*::_mutex::lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:167,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:169,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:170,1
    - Dst: Sampler*::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.cpp:173,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:174,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:179,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:183,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:192,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 197
    functionName: bvar::detail::SamplerCollector::run
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::next
    - butil::gettimeofday_us
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - Sampler*::_mutex::lock
    - bthread::TaskGroup::usleep
    - butil::LinkNode*::next
    - Sampler*::take_sample
    - Sampler*::InsertBeforeAsList
    - LOG
    - PassiveStatus<double>::PassiveStatus<double>
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    linkageType: ''
    returnType: void
    signature: void SamplerCollector::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: bvar::detail::Sampler::Sampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::Sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: Sampler::~Sampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::~Sampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:209,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: bvar::detail::Sampler::schedule
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void Sampler::schedule()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:214,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: bvar::detail::Sampler::destroy
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    linkageType: ''
    returnType: void
    signature: void Sampler::destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - Sampler*
    - Sampler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: operator()(Sampler* & s1, Sampler* s2) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - InsertBeforeAsList
    linkageType: ''
    returnType: void
    signature: void operator()(Sampler* & s1, Sampler* s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: bvar::detail::SamplerCollector::SamplerCollector
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void SamplerCollector()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/detail/sampler.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: ~SamplerCollector()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void ~SamplerCollector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: bvar::detail::SamplerCollector::child_callback_atfork
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void child_callback_atfork()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/detail/sampler.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: pthread_atfork
      Src: /src/brpc/src/bvar/detail/sampler.cpp:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 102
    functionName: bvar::detail::SamplerCollector::create_sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 3
    functionsReached:
    - berror
    - pthread_create
    - pthread_atfork
    - LOG
    linkageType: ''
    returnType: void
    signature: void create_sampling_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 107
    functionName: bvar::detail::SamplerCollector::after_forked_as_child
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void after_forked_as_child()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/detail/sampler.cpp:112,1
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: bvar::detail::SamplerCollector::sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void * sampling_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: bvar::detail::SamplerCollector::get_cumulated_time
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_time(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:136,1
    - Dst: PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:146,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bvar/detail/sampler.cpp:150,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/detail/sampler.cpp:155,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:158,1
    - Dst: bvar::detail::SamplerCollector::reset
      Src: /src/brpc/src/bvar/detail/sampler.cpp:159,1
    - Dst: Sampler*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:161,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:163,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:165,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/sampler.cpp:166,1
    - Dst: Sampler*::_mutex::lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:167,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:169,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:170,1
    - Dst: Sampler*::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.cpp:173,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:174,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:179,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:183,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:192,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 197
    functionName: bvar::detail::SamplerCollector::run
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::next
    - butil::gettimeofday_us
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - Sampler*::_mutex::lock
    - bthread::TaskGroup::usleep
    - butil::LinkNode*::next
    - Sampler*::take_sample
    - Sampler*::InsertBeforeAsList
    - LOG
    - PassiveStatus<double>::PassiveStatus<double>
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    linkageType: ''
    returnType: void
    signature: void SamplerCollector::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: bvar::detail::Sampler::Sampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::Sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: Sampler::~Sampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::~Sampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:209,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: bvar::detail::Sampler::schedule
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void Sampler::schedule()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:214,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: bvar::detail::Sampler::destroy
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    linkageType: ''
    returnType: void
    signature: void Sampler::destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - Sampler*
    - Sampler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: operator()(Sampler* & s1, Sampler* s2) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - InsertBeforeAsList
    linkageType: ''
    returnType: void
    signature: void operator()(Sampler* & s1, Sampler* s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: bvar::detail::SamplerCollector::SamplerCollector
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void SamplerCollector()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/detail/sampler.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: ~SamplerCollector()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void ~SamplerCollector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: bvar::detail::SamplerCollector::child_callback_atfork
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void child_callback_atfork()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/detail/sampler.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: pthread_atfork
      Src: /src/brpc/src/bvar/detail/sampler.cpp:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 102
    functionName: bvar::detail::SamplerCollector::create_sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 5
    functionsReached:
    - berror
    - pthread_create
    - pthread_atfork
    - LOG
    linkageType: ''
    returnType: void
    signature: void create_sampling_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 107
    functionName: bvar::detail::SamplerCollector::after_forked_as_child
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void after_forked_as_child()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/detail/sampler.cpp:112,1
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: bvar::detail::SamplerCollector::sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void * sampling_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: bvar::detail::SamplerCollector::get_cumulated_time
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_time(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:136,1
    - Dst: PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:146,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bvar/detail/sampler.cpp:150,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/detail/sampler.cpp:155,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:158,1
    - Dst: bvar::detail::SamplerCollector::reset
      Src: /src/brpc/src/bvar/detail/sampler.cpp:159,1
    - Dst: Sampler*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:161,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:163,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:165,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/sampler.cpp:166,1
    - Dst: Sampler*::_mutex::lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:167,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:169,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:170,1
    - Dst: Sampler*::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.cpp:173,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:174,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:179,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:183,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:192,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 197
    functionName: bvar::detail::SamplerCollector::run
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::next
    - butil::gettimeofday_us
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - Sampler*::_mutex::lock
    - bthread::TaskGroup::usleep
    - butil::LinkNode*::next
    - Sampler*::take_sample
    - Sampler*::InsertBeforeAsList
    - LOG
    - PassiveStatus<double>::PassiveStatus<double>
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    linkageType: ''
    returnType: void
    signature: void SamplerCollector::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: bvar::detail::Sampler::Sampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::Sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: Sampler::~Sampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::~Sampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:209,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: bvar::detail::Sampler::schedule
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void Sampler::schedule()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:214,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: bvar::detail::Sampler::destroy
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    linkageType: ''
    returnType: void
    signature: void Sampler::destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - Sampler*
    - Sampler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: operator()(Sampler* & s1, Sampler* s2) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - InsertBeforeAsList
    linkageType: ''
    returnType: void
    signature: void operator()(Sampler* & s1, Sampler* s2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: bvar::detail::SamplerCollector::SamplerCollector
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void SamplerCollector()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_join
      Src: /src/brpc/src/bvar/detail/sampler.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: ~SamplerCollector()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void ~SamplerCollector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: bvar::detail::SamplerCollector::child_callback_atfork
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void child_callback_atfork()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/bvar/detail/sampler.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/sampler.cpp:94,1
    - Dst: pthread_atfork
      Src: /src/brpc/src/bvar/detail/sampler.cpp:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 102
    functionName: bvar::detail::SamplerCollector::create_sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 7
    functionsReached:
    - berror
    - pthread_create
    - pthread_atfork
    - LOG
    linkageType: ''
    returnType: void
    signature: void create_sampling_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::SamplerCollector::create_sampling_thread
      Src: /src/brpc/src/bvar/detail/sampler.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 107
    functionName: bvar::detail::SamplerCollector::after_forked_as_child
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::SamplerCollector::create_sampling_thread
    linkageType: ''
    returnType: void
    signature: void after_forked_as_child()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bvar/detail/sampler.cpp:112,1
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: bvar::detail::SamplerCollector::sampling_thread
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void * sampling_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SamplerCollector*>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: bvar::detail::SamplerCollector::get_cumulated_time
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SamplerCollector*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_time(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:136,1
    - Dst: PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:146,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bvar/detail/sampler.cpp:150,1
    - Dst: butil::LinkNode::LinkNode
      Src: /src/brpc/src/bvar/detail/sampler.cpp:155,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:158,1
    - Dst: bvar::detail::SamplerCollector::reset
      Src: /src/brpc/src/bvar/detail/sampler.cpp:159,1
    - Dst: Sampler*::InsertBeforeAsList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:161,1
    - Dst: butil::LinkNode::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:163,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/sampler.cpp:165,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/sampler.cpp:166,1
    - Dst: Sampler*::_mutex::lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:167,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:169,1
    - Dst: butil::LinkNode*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/sampler.cpp:170,1
    - Dst: Sampler*::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.cpp:173,1
    - Dst: Sampler*::_mutex::unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:174,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:179,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bvar/detail/sampler.cpp:183,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.cpp:192,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 197
    functionName: bvar::detail::SamplerCollector::run
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::LinkNode::next
    - butil::gettimeofday_us
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - Sampler*::_mutex::lock
    - bthread::TaskGroup::usleep
    - butil::LinkNode*::next
    - Sampler*::take_sample
    - Sampler*::InsertBeforeAsList
    - LOG
    - PassiveStatus<double>::PassiveStatus<double>
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    linkageType: ''
    returnType: void
    signature: void SamplerCollector::run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: bvar::detail::Sampler::Sampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::Sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: Sampler::~Sampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sampler::~Sampler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<SamplerCollector>
      Src: /src/brpc/src/bvar/detail/sampler.cpp:209,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: bvar::detail::Sampler::schedule
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<SamplerCollector>
    linkageType: ''
    returnType: void
    signature: void Sampler::schedule()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:214,1
    - Dst: unlock
      Src: /src/brpc/src/bvar/detail/sampler.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: bvar::detail::Sampler::destroy
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.cpp
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    linkageType: ''
    returnType: void
    signature: void Sampler::destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: bvar::detail::AgentGroup::ThreadBlock
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadBlock
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - offset
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: bvar::detail::AgentGroup::at
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Agent
    signature: Agent * at(size_t offset)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:90,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:92,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:93,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 99
    functionName: bvar::detail::AgentGroup::create_new_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: AgentId
    signature: AgentId create_new_agent()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:103,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 110
    functionName: bvar::detail::AgentGroup::destroy_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int destroy_agent(AgentId id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:115,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:118,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 127
    functionName: bvar::detail::AgentGroup::get_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - size
    - ThreadBlock*::at
    - __builtin_expect
    linkageType: ''
    returnType: Agent
    signature: Agent * get_tls_agent(AgentId id)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:131,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/agent_group.h:132,1
    - Dst: std::vector<ThreadBlock *>::vector<ThreadBlock *>
      Src: /src/brpc/src/bvar/detail/agent_group.h:136,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:137,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bvar/detail/agent_group.h:141,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:144,1
    - Dst: resize
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: ThreadBlock::ThreadBlock
      Src: /src/brpc/src/bvar/detail/agent_group.h:150,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:151,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:157,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 158
    functionName: bvar::detail::AgentGroup::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - std::max
    - butil::thread_atexit
    - resize
    - std::vector<ThreadBlock *>::vector<ThreadBlock *>
    - CHECK
    - __builtin_expect
    - berror
    - size
    - ThreadBlock*::at
    - ThreadBlock::ThreadBlock
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent(AgentId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: bvar::detail::AgentGroup::_destroy_tls_blocks
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void _destroy_tls_blocks()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:173,1
    - Dst: std::deque<AgentId>::deque<AgentId>
      Src: /src/brpc/src/bvar/detail/agent_group.h:174,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bvar/detail/agent_group.h:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: '&_get_free_ids()'
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - std::deque<AgentId>::deque<AgentId>
    - __builtin_expect
    - RELEASE_ASSERT
    linkageType: ''
    returnType: std::deque<AgentId>
    signature: std::deque<AgentId> &_get_free_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: bvar::detail::AgentGroup::ThreadBlock
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadBlock
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - offset
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: bvar::detail::AgentGroup::at
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Agent
    signature: Agent * at(size_t offset)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:90,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:92,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:93,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 99
    functionName: bvar::detail::AgentGroup::create_new_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: AgentId
    signature: AgentId create_new_agent()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:103,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 110
    functionName: bvar::detail::AgentGroup::destroy_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int destroy_agent(AgentId id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:115,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:118,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 127
    functionName: bvar::detail::AgentGroup::get_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - size
    - ThreadBlock*::at
    - __builtin_expect
    linkageType: ''
    returnType: Agent
    signature: Agent * get_tls_agent(AgentId id)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:131,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/agent_group.h:132,1
    - Dst: std::vector<ThreadBlock *>::vector<ThreadBlock *>
      Src: /src/brpc/src/bvar/detail/agent_group.h:136,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:137,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bvar/detail/agent_group.h:141,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:144,1
    - Dst: resize
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: ThreadBlock::ThreadBlock
      Src: /src/brpc/src/bvar/detail/agent_group.h:150,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:151,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:157,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 158
    functionName: bvar::detail::AgentGroup::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - std::max
    - butil::thread_atexit
    - resize
    - std::vector<ThreadBlock *>::vector<ThreadBlock *>
    - CHECK
    - __builtin_expect
    - berror
    - size
    - ThreadBlock*::at
    - ThreadBlock::ThreadBlock
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent(AgentId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: bvar::detail::AgentGroup::_destroy_tls_blocks
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void _destroy_tls_blocks()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:173,1
    - Dst: std::deque<AgentId>::deque<AgentId>
      Src: /src/brpc/src/bvar/detail/agent_group.h:174,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bvar/detail/agent_group.h:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: '&_get_free_ids()'
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - std::deque<AgentId>::deque<AgentId>
    - __builtin_expect
    - RELEASE_ASSERT
    linkageType: ''
    returnType: std::deque<AgentId>
    signature: std::deque<AgentId> &_get_free_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: bvar::detail::AgentGroup::ThreadBlock
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadBlock
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - offset
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: bvar::detail::AgentGroup::at
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Agent
    signature: Agent * at(size_t offset)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:90,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:92,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:93,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 99
    functionName: bvar::detail::AgentGroup::create_new_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: AgentId
    signature: AgentId create_new_agent()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:103,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 110
    functionName: bvar::detail::AgentGroup::destroy_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int destroy_agent(AgentId id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:115,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:118,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 127
    functionName: bvar::detail::AgentGroup::get_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - size
    - ThreadBlock*::at
    - __builtin_expect
    linkageType: ''
    returnType: Agent
    signature: Agent * get_tls_agent(AgentId id)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:131,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/agent_group.h:132,1
    - Dst: std::vector<ThreadBlock *>::vector<ThreadBlock *>
      Src: /src/brpc/src/bvar/detail/agent_group.h:136,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:137,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bvar/detail/agent_group.h:141,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:144,1
    - Dst: resize
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: ThreadBlock::ThreadBlock
      Src: /src/brpc/src/bvar/detail/agent_group.h:150,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:151,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:157,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 158
    functionName: bvar::detail::AgentGroup::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - std::max
    - butil::thread_atexit
    - resize
    - std::vector<ThreadBlock *>::vector<ThreadBlock *>
    - CHECK
    - __builtin_expect
    - berror
    - size
    - ThreadBlock*::at
    - ThreadBlock::ThreadBlock
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent(AgentId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: bvar::detail::AgentGroup::_destroy_tls_blocks
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void _destroy_tls_blocks()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:173,1
    - Dst: std::deque<AgentId>::deque<AgentId>
      Src: /src/brpc/src/bvar/detail/agent_group.h:174,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bvar/detail/agent_group.h:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: '&_get_free_ids()'
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - std::deque<AgentId>::deque<AgentId>
    - __builtin_expect
    - RELEASE_ASSERT
    linkageType: ''
    returnType: std::deque<AgentId>
    signature: std::deque<AgentId> &_get_free_ids()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: bvar::detail::AgentGroup::ThreadBlock
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT ThreadBlock
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - offset
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: bvar::detail::AgentGroup::at
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Agent
    signature: Agent * at(size_t offset)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:90,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:92,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:93,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 99
    functionName: bvar::detail::AgentGroup::create_new_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: AgentId
    signature: AgentId create_new_agent()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/agent_group.h:103,1
    - Dst: _get_free_ids
      Src: /src/brpc/src/bvar/detail/agent_group.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 110
    functionName: bvar::detail::AgentGroup::destroy_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 10
    functionsReached:
    - _get_free_ids
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int destroy_agent(AgentId id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:115,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:118,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 127
    functionName: bvar::detail::AgentGroup::get_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - size
    - ThreadBlock*::at
    - __builtin_expect
    linkageType: ''
    returnType: Agent
    signature: Agent * get_tls_agent(AgentId id)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:131,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/agent_group.h:132,1
    - Dst: std::vector<ThreadBlock *>::vector<ThreadBlock *>
      Src: /src/brpc/src/bvar/detail/agent_group.h:136,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:137,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: berror
      Src: /src/brpc/src/bvar/detail/agent_group.h:138,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bvar/detail/agent_group.h:141,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:144,1
    - Dst: resize
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/agent_group.h:146,1
    - Dst: ThreadBlock::ThreadBlock
      Src: /src/brpc/src/bvar/detail/agent_group.h:150,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:151,1
    - Dst: ThreadBlock*::at
      Src: /src/brpc/src/bvar/detail/agent_group.h:157,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - id
    argTypes:
    - AgentId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 158
    functionName: bvar::detail::AgentGroup::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 4
    functionsReached:
    - std::max
    - butil::thread_atexit
    - resize
    - std::vector<ThreadBlock *>::vector<ThreadBlock *>
    - CHECK
    - __builtin_expect
    - berror
    - size
    - ThreadBlock*::at
    - ThreadBlock::ThreadBlock
    - LOG
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent(AgentId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/bvar/detail/agent_group.h:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: bvar::detail::AgentGroup::_destroy_tls_blocks
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void _destroy_tls_blocks()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/detail/agent_group.h:173,1
    - Dst: std::deque<AgentId>::deque<AgentId>
      Src: /src/brpc/src/bvar/detail/agent_group.h:174,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bvar/detail/agent_group.h:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: '&_get_free_ids()'
    functionSourceFile: /src/brpc/src/bvar/detail/agent_group.h
    functionUses: 0
    functionsReached:
    - std::deque<AgentId>::deque<AgentId>
    - __builtin_expect
    - RELEASE_ASSERT
    linkageType: ''
    returnType: std::deque<AgentId>
    signature: std::deque<AgentId> &_get_free_ids()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.h:41,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - unsigned long
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 45
    functionName: round_of_expectation
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: unsigned long
    signature: unsigned long round_of_expectation(unsigned long a, unsigned long b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: PercentileInterval
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PercentileInterval()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::sort
      Src: /src/brpc/src/bvar/detail/percentile.h:67,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:70,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 73
    functionName: get_sample_at
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - std::sort
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_sample_at(size_t index)
  - BBCount: 26
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bvar/detail/percentile.h:85,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:87,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:100,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:107,1
    - Dst: round_of_expectation
      Src: /src/brpc/src/bvar/detail/percentile.h:119,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/bvar/detail/percentile.h:121,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:124,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/bvar/detail/percentile.h:127,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:132,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:137,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/percentile.h:145,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:148,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:153,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:157,1
    - Dst: std::swap
      Src: /src/brpc/src/bvar/detail/percentile.h:160,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.h:170,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.h:171,1
    - Dst: add32
      Src: /src/brpc/src/bvar/detail/percentile.h:182,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:208,1
    - Dst: memcmp
      Src: /src/brpc/src/bvar/detail/percentile.h:220,1
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/percentile.h:247,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:263,1
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:264,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:276,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:277,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.h:279,1
    - Dst: ceil
      Src: /src/brpc/src/bvar/detail/percentile.h:294,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:305,1
    - Dst: sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:306,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:306,1
    - Dst: get_sample_at
      Src: /src/brpc/src/bvar/detail/percentile.h:308,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:310,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/percentile.h:312,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.h:313,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:321,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:322,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.h:334,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:350,1
    - Dst: sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:351,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:369,1
    - Dst: BAIDU_TYPEOF
      Src: /src/brpc/src/bvar/detail/percentile.h:372,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:375,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:376,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:380,1
    - Dst: std::min
      Src: /src/brpc/src/bvar/detail/percentile.h:381,1
    - Dst: round_of_expectation
      Src: /src/brpc/src/bvar/detail/percentile.h:382,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:383,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:384,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:393,1
    - Dst: describe
      Src: /src/brpc/src/bvar/detail/percentile.h:395,1
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:417,1
    - Dst: describe
      Src: /src/brpc/src/bvar/detail/percentile.h:431,1
    - Dst: describe
      Src: /src/brpc/src/bvar/detail/percentile.h:437,1
    - Dst: merge
      Src: /src/brpc/src/bvar/detail/percentile.h:454,1
    - Dst: AddPercentileSamples
      Src: /src/brpc/src/bvar/detail/percentile.h:470,1
    - Dst: VoidOp
      Src: /src/brpc/src/bvar/detail/percentile.h:471,1
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/detail/percentile.h:476,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/detail/percentile.h:477,1
    - Dst: valid
      Src: /src/brpc/src/bvar/detail/percentile.h:488,1
    - Dst: assign
      Src: /src/brpc/src/bvar/detail/percentile.h:492,1
    - Dst: data
      Src: /src/brpc/src/bvar/detail/percentile.h:492,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/percentile.h:492,1
    CyclomaticComplexity: 53
    EdgeCount: 53
    ICount: 197
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - PercentileInterval<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 81
    functionDepth: 2
    functionLinenumber: 81
    functionLinenumberEnd: 504
    functionName: merge
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 3
    functionsReached:
    - memcmp
    - add32
    - BAIDU_TYPEOF
    - AddPercentileSamples
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
    - describe
    - assign
    - CHECK_EQ
    - added_count
    - sampler_type::sampler_type
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
    - clear
    - VoidOp
    - BAIDU_UNLIKELY
    - round_of_expectation
    - memcpy
    - size
    - LOG
    - get_sample_at
    - std::swap
    - get_interval_at
    - BAIDU_CASSERT
    - memset
    - CHECK
    - CHECK_LE
    - sample_count
    - butil::fast_rand_less_than
    - PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
    - std::min
    - ceil
    - schedule
    - empty
    - merge
    - valid
    - data
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void merge(const PercentileInterval<size2> &rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:132,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:137,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/percentile.h:145,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:148,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:153,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:157,1
    - Dst: std::swap
      Src: /src/brpc/src/bvar/detail/percentile.h:160,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - _num_samples
    argTypes:
    - rhs
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 163
    functionName: DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - std::swap
    - butil::fast_rand_less_than
    - CHECK_EQ
    - CHECK
    - memcpy
    linkageType: ''
    returnType: void
    signature: "void DEFINE_SMALL_ARRAY(uint32_t, tmp, rhs._num_samples, 64);\n            memcpy(tmp,
      rhs._samples, sizeof(uint32_t) * rhs._num_samples);\n            for (size_t
      i = 0; i < num_remain_from_rhs; ++i) {\n                const int index = butil::fast_rand_less_than(rhs._num_samples
      - i);\n                _samples[num_remain++] = tmp[index];\n                tmp[index]
      = tmp[rhs._num_samples - i - 1];\n            }\n            _num_samples =
      num_remain;\n            CHECK_EQ(_num_samples, SAMPLE_SIZE);\n        }\n        _num_added
      += rhs._num_added;\n    }\n\n    // Randomly pick n samples from mutable_rhs
      to |this|\n    template <size_t size2>\n    void merge_with_expectation(PercentileInterval<size2>&
      mutable_rhs, size_t n)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.h:170,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 177
    functionName: add32
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 3
    functionsReached:
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool add32(uint32_t x)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: add32
      Src: /src/brpc/src/bvar/detail/percentile.h:182,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - x
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 2
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: add64
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 4
    functionsReached:
    - add32
    linkageType: ''
    returnType: bool
    signature: bool add64(int64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 192
    functionName: clear
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 178
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: full
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool full() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 198
    functionName: empty
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 203
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: added_count
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t added_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 204
    functionName: sample_count
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t sample_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 213
    functionName: describe
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 36
    functionsReached:
    - added_count
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream &os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/brpc/src/bvar/detail/percentile.h:220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileInterval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 221
    functionName: operator==(const PercentileInterval& rhs) const
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: bool
    signature: bool operator==(const PercentileInterval& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/percentile.h:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: PercentileSamples
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 9
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void PercentileSamples()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 256
    functionName: ~PercentileSamples()
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PercentileSamples()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:263,1
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:264,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 269
    functionName: PercentileSamples
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 9
    functionsReached:
    - PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
    - empty
    linkageType: ''
    returnType: void
    signature: void PercentileSamples(const PercentileSamples& rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:276,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:277,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.h:279,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 282
    functionName: operator=(const PercentileSamples& rhs)
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - get_interval_at
    - empty
    - clear
    linkageType: ''
    returnType: void
    signature: void operator=(const PercentileSamples& rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ceil
      Src: /src/brpc/src/bvar/detail/percentile.h:294,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:305,1
    - Dst: sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:306,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:306,1
    - Dst: get_sample_at
      Src: /src/brpc/src/bvar/detail/percentile.h:308,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:310,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/percentile.h:312,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.h:313,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - ratio
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 314
    functionName: get_number
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 11
    functionsReached:
    - get_sample_at
    - ceil
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - added_count
    - sample_count
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_number(double ratio)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:321,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:322,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - PercentileSamples<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 325
    functionName: merge
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 3
    functionsReached:
    - get_interval_at
    - empty
    linkageType: ''
    returnType: void
    signature: void merge(const PercentileSamples<size2> &rhs)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.h:334,1
    - Dst: added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:350,1
    - Dst: sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:351,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:369,1
    - Dst: BAIDU_TYPEOF
      Src: /src/brpc/src/bvar/detail/percentile.h:372,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:375,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:376,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:380,1
    - Dst: std::min
      Src: /src/brpc/src/bvar/detail/percentile.h:381,1
    - Dst: round_of_expectation
      Src: /src/brpc/src/bvar/detail/percentile.h:382,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:383,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:384,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 33
    argCount: 2
    argNames:
    - ' begin'
    - ' end'
    argTypes:
    - Iterator
    - Iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 329
    functionDepth: 2
    functionLinenumber: 329
    functionLinenumberEnd: 387
    functionName: combine_of
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 9
    functionsReached:
    - BAIDU_TYPEOF
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
    - round_of_expectation
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
    - get_interval_at
    - std::min
    - empty
    - clear
    - added_count
    - sample_count
    linkageType: ''
    returnType: void
    signature: void combine_of(const Iterator& begin, const Iterator& end)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:393,1
    - Dst: describe
      Src: /src/brpc/src/bvar/detail/percentile.h:395,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 390
    functionDepth: 1
    functionLinenumber: 390
    functionLinenumberEnd: 399
    functionName: describe
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 37
    functionsReached:
    - describe
    - empty
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream &os) const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 409
    functionName: operator==(const PercentileSamples& rhs) const
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const PercentileSamples& rhs) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 420
    functionName: '& get_interval_at(size_t index)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
    linkageType: ''
    returnType: PercentileInterval<SAMPLE_SIZE>
    signature: PercentileInterval<SAMPLE_SIZE> & get_interval_at(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval<size>::describe
      Src: /src/brpc/src/bvar/detail/percentile.h:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - p
    argTypes:
    - std::ostream
    - PercentileInterval<size>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 430
    functionDepth: 2
    functionLinenumber: 430
    functionLinenumberEnd: 433
    functionName: '&operator<<(std::ostream &os, const PercentileInterval<size> &p)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileInterval<size>::describe
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream &operator<<(std::ostream &os, const PercentileInterval<size>
      &p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PercentileSamples<size>::describe
      Src: /src/brpc/src/bvar/detail/percentile.h:437,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - p
    argTypes:
    - std::ostream
    - PercentileSamples<size>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 436
    functionDepth: 2
    functionLinenumber: 436
    functionLinenumberEnd: 439
    functionName: '&operator<<(std::ostream &os, const PercentileSamples<size> &p)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileSamples<size>::describe
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream &operator<<(std::ostream &os, const PercentileSamples<size>
      &p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PercentileSamples<size1>::merge
      Src: /src/brpc/src/bvar/detail/percentile.h:454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b1
    - b2
    argTypes:
    - PercentileSamples<size1>
    - PercentileSamples<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 452
    functionDepth: 3
    functionLinenumber: 452
    functionLinenumberEnd: 455
    functionName: "operator()(PercentileSamples<size1> &b1, \n                        const
      PercentileSamples<size2> &b2) const"
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileSamples<size1>::merge
    linkageType: ''
    returnType: void
    signature: "void operator()(PercentileSamples<size1> &b1, \n                        const
      PercentileSamples<size2> &b2) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddPercentileSamples
      Src: /src/brpc/src/bvar/detail/percentile.h:470,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 470
    functionName: Percentile::op
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - AddPercentileSamples
    linkageType: ''
    returnType: AddPercentileSamples
    signature: AddPercentileSamples op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VoidOp
      Src: /src/brpc/src/bvar/detail/percentile.h:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 471
    functionName: Percentile::inv_op
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - VoidOp
    linkageType: ''
    returnType: VoidOp
    signature: VoidOp inv_op() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/detail/percentile.h:476,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/detail/percentile.h:477,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 480
    functionName: Percentile::get_sampler
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - sampler_type::sampler_type
    - schedule
    linkageType: ''
    returnType: sampler_type
    signature: sampler_type * get_sampler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Percentile::valid
      Src: /src/brpc/src/bvar/detail/percentile.h:488,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 488
    functionDepth: 1
    functionLinenumber: 488
    functionLinenumberEnd: 488
    functionName: Percentile::valid
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached:
    - Percentile::valid
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/bvar/detail/percentile.h:492,1
    - Dst: data
      Src: /src/brpc/src/bvar/detail/percentile.h:492,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/percentile.h:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 491
    functionDepth: 0
    functionLinenumber: 491
    functionLinenumberEnd: 493
    functionName: Percentile::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - size
    - assign
    - data
    linkageType: ''
    returnType: void
    signature: void set_debug_name(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' data2'
    - time2
    argTypes:
    - T
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample(const T& data2, int64_t time2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:76,1
    - Dst: abort
      Src: /src/brpc/src/bvar/detail/sampler.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: operator()(const T&, const T&) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: T
    signature: T operator()(const T&, const T&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ReducerSampler::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - reducer
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: bvar::detail::ReducerSampler::ReducerSampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - bvar::detail::ReducerSampler::take_sample
    linkageType: ''
    returnType: void
    signature: void ReducerSampler(R* reducer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~ReducerSampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReducerSampler()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:106,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: malloc
      Src: /src/brpc/src/bvar/detail/sampler.h:110,1
    - Dst: pop
      Src: /src/brpc/src/bvar/detail/sampler.h:117,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/src/bvar/detail/sampler.h:118,1
    - Dst: butil::BoundedQueue::swap
      Src: /src/brpc/src/bvar/detail/sampler.h:120,1
    - Dst: reset
      Src: /src/brpc/src/bvar/detail/sampler.h:130,1
    - Dst: bvar::detail::ReducerSampler::get_value
      Src: /src/brpc/src/bvar/detail/sampler.h:137,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.h:139,1
    - Dst: elim_push
      Src: /src/brpc/src/bvar/detail/sampler.h:140,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 141
    functionName: bvar::detail::ReducerSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 1
    functionsReached:
    - std::max
    - reset
    - butil::BoundedQueue::swap
    - butil::gettimeofday_us
    - elim_push
    - bvar::detail::ReducerSampler::get_value
    - butil::BoundedQueue::push
    - malloc
    - pop
    - capacity
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:145,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:149,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:153,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:155,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:157,1
    - Dst: DCHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:158,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:163,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/sampler.h:167,1
    - Dst: inv_op
      Src: /src/brpc/src/bvar/detail/sampler.h:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - Sample<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 176
    functionName: bvar::detail::ReducerSampler::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 1
    functionsReached:
    - op
    - DCHECK
    - inv_op
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    linkageType: ''
    returnType: bool
    signature: bool get_value(time_t window_size, Sample<T>* result)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 189
    functionName: bvar::detail::ReducerSampler::set_window_size
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int set_window_size(time_t window_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:193,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:196,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:197,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:201,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:203,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:206,1
    - Dst: std::vector<T>*::push_back
      Src: /src/brpc/src/bvar/detail/sampler.h:210,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - samples
    - window_size
    argTypes:
    - std::vector<T>*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 212
    functionName: bvar::detail::ReducerSampler::get_samples
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    - std::vector<T>*::push_back
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<T> *samples, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' data2'
    - time2
    argTypes:
    - T
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample(const T& data2, int64_t time2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:76,1
    - Dst: abort
      Src: /src/brpc/src/bvar/detail/sampler.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: operator()(const T&, const T&) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: T
    signature: T operator()(const T&, const T&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ReducerSampler::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - reducer
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: bvar::detail::ReducerSampler::ReducerSampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - bvar::detail::ReducerSampler::take_sample
    linkageType: ''
    returnType: void
    signature: void ReducerSampler(R* reducer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~ReducerSampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReducerSampler()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:106,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: malloc
      Src: /src/brpc/src/bvar/detail/sampler.h:110,1
    - Dst: pop
      Src: /src/brpc/src/bvar/detail/sampler.h:117,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/src/bvar/detail/sampler.h:118,1
    - Dst: butil::BoundedQueue::swap
      Src: /src/brpc/src/bvar/detail/sampler.h:120,1
    - Dst: reset
      Src: /src/brpc/src/bvar/detail/sampler.h:130,1
    - Dst: bvar::detail::ReducerSampler::get_value
      Src: /src/brpc/src/bvar/detail/sampler.h:137,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.h:139,1
    - Dst: elim_push
      Src: /src/brpc/src/bvar/detail/sampler.h:140,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 141
    functionName: bvar::detail::ReducerSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 2
    functionsReached:
    - std::max
    - reset
    - butil::BoundedQueue::swap
    - butil::gettimeofday_us
    - elim_push
    - bvar::detail::ReducerSampler::get_value
    - butil::BoundedQueue::push
    - malloc
    - pop
    - capacity
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:145,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:149,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:153,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:155,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:157,1
    - Dst: DCHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:158,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:163,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/sampler.h:167,1
    - Dst: inv_op
      Src: /src/brpc/src/bvar/detail/sampler.h:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - Sample<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 176
    functionName: bvar::detail::ReducerSampler::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 2
    functionsReached:
    - op
    - DCHECK
    - inv_op
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    linkageType: ''
    returnType: bool
    signature: bool get_value(time_t window_size, Sample<T>* result)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 189
    functionName: bvar::detail::ReducerSampler::set_window_size
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int set_window_size(time_t window_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:193,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:196,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:197,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:201,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:203,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:206,1
    - Dst: std::vector<T>*::push_back
      Src: /src/brpc/src/bvar/detail/sampler.h:210,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - samples
    - window_size
    argTypes:
    - std::vector<T>*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 212
    functionName: bvar::detail::ReducerSampler::get_samples
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    - std::vector<T>*::push_back
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<T> *samples, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' data2'
    - time2
    argTypes:
    - T
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample(const T& data2, int64_t time2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:76,1
    - Dst: abort
      Src: /src/brpc/src/bvar/detail/sampler.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: operator()(const T&, const T&) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: T
    signature: T operator()(const T&, const T&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ReducerSampler::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - reducer
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: bvar::detail::ReducerSampler::ReducerSampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - bvar::detail::ReducerSampler::take_sample
    linkageType: ''
    returnType: void
    signature: void ReducerSampler(R* reducer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~ReducerSampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReducerSampler()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:106,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: malloc
      Src: /src/brpc/src/bvar/detail/sampler.h:110,1
    - Dst: pop
      Src: /src/brpc/src/bvar/detail/sampler.h:117,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/src/bvar/detail/sampler.h:118,1
    - Dst: butil::BoundedQueue::swap
      Src: /src/brpc/src/bvar/detail/sampler.h:120,1
    - Dst: reset
      Src: /src/brpc/src/bvar/detail/sampler.h:130,1
    - Dst: bvar::detail::ReducerSampler::get_value
      Src: /src/brpc/src/bvar/detail/sampler.h:137,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.h:139,1
    - Dst: elim_push
      Src: /src/brpc/src/bvar/detail/sampler.h:140,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 141
    functionName: bvar::detail::ReducerSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 3
    functionsReached:
    - std::max
    - reset
    - butil::BoundedQueue::swap
    - butil::gettimeofday_us
    - elim_push
    - bvar::detail::ReducerSampler::get_value
    - butil::BoundedQueue::push
    - malloc
    - pop
    - capacity
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:145,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:149,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:153,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:155,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:157,1
    - Dst: DCHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:158,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:163,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/sampler.h:167,1
    - Dst: inv_op
      Src: /src/brpc/src/bvar/detail/sampler.h:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - Sample<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 176
    functionName: bvar::detail::ReducerSampler::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 3
    functionsReached:
    - op
    - DCHECK
    - inv_op
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    linkageType: ''
    returnType: bool
    signature: bool get_value(time_t window_size, Sample<T>* result)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 189
    functionName: bvar::detail::ReducerSampler::set_window_size
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int set_window_size(time_t window_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:193,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:196,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:197,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:201,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:203,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:206,1
    - Dst: std::vector<T>*::push_back
      Src: /src/brpc/src/bvar/detail/sampler.h:210,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - samples
    - window_size
    argTypes:
    - std::vector<T>*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 212
    functionName: bvar::detail::ReducerSampler::get_samples
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    - std::vector<T>*::push_back
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<T> *samples, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' data2'
    - time2
    argTypes:
    - T
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: bvar::detail::Sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Sample(const T& data2, int64_t time2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:76,1
    - Dst: abort
      Src: /src/brpc/src/bvar/detail/sampler.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: operator()(const T&, const T&) const
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: T
    signature: T operator()(const T&, const T&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::ReducerSampler::take_sample
      Src: /src/brpc/src/bvar/detail/sampler.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - reducer
    argTypes:
    - R*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: bvar::detail::ReducerSampler::ReducerSampler
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - bvar::detail::ReducerSampler::take_sample
    linkageType: ''
    returnType: void
    signature: void ReducerSampler(R* reducer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: ~ReducerSampler()
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReducerSampler()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:106,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: capacity
      Src: /src/brpc/src/bvar/detail/sampler.h:108,1
    - Dst: malloc
      Src: /src/brpc/src/bvar/detail/sampler.h:110,1
    - Dst: pop
      Src: /src/brpc/src/bvar/detail/sampler.h:117,1
    - Dst: butil::BoundedQueue::push
      Src: /src/brpc/src/bvar/detail/sampler.h:118,1
    - Dst: butil::BoundedQueue::swap
      Src: /src/brpc/src/bvar/detail/sampler.h:120,1
    - Dst: reset
      Src: /src/brpc/src/bvar/detail/sampler.h:130,1
    - Dst: bvar::detail::ReducerSampler::get_value
      Src: /src/brpc/src/bvar/detail/sampler.h:137,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bvar/detail/sampler.h:139,1
    - Dst: elim_push
      Src: /src/brpc/src/bvar/detail/sampler.h:140,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 141
    functionName: bvar::detail::ReducerSampler::take_sample
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 4
    functionsReached:
    - std::max
    - reset
    - butil::BoundedQueue::swap
    - butil::gettimeofday_us
    - elim_push
    - bvar::detail::ReducerSampler::get_value
    - butil::BoundedQueue::push
    - malloc
    - pop
    - capacity
    linkageType: ''
    returnType: void
    signature: void take_sample() override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:145,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:148,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:149,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:153,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:155,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:157,1
    - Dst: DCHECK
      Src: /src/brpc/src/bvar/detail/sampler.h:158,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:163,1
    - Dst: op
      Src: /src/brpc/src/bvar/detail/sampler.h:167,1
    - Dst: inv_op
      Src: /src/brpc/src/bvar/detail/sampler.h:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 2
    argNames:
    - window_size
    - result
    argTypes:
    - time_t
    - Sample<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 176
    functionName: bvar::detail::ReducerSampler::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 4
    functionsReached:
    - op
    - DCHECK
    - inv_op
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    linkageType: ''
    returnType: bool
    signature: bool get_value(time_t window_size, Sample<T>* result)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - window_size
    argTypes:
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 189
    functionName: bvar::detail::ReducerSampler::set_window_size
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int set_window_size(time_t window_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/sampler.h:193,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bvar/detail/sampler.h:196,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/sampler.h:197,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:201,1
    - Dst: top
      Src: /src/brpc/src/bvar/detail/sampler.h:203,1
    - Dst: bottom
      Src: /src/brpc/src/bvar/detail/sampler.h:206,1
    - Dst: std::vector<T>*::push_back
      Src: /src/brpc/src/bvar/detail/sampler.h:210,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - samples
    - window_size
    argTypes:
    - std::vector<T>*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 212
    functionName: bvar::detail::ReducerSampler::get_samples
    functionSourceFile: /src/brpc/src/bvar/detail/sampler.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - size
    - bottom
    - LOG
    - top
    - std::vector<T>*::push_back
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<T> *samples, time_t window_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/detail/call_op_returning_void.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' op'
    - ' v1'
    - ' v2'
    argTypes:
    - Op
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: bvar::detail::call_op_returning_void
    functionSourceFile: /src/brpc/src/bvar/detail/call_op_returning_void.h
    functionUses: 4
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: "void call_op_returning_void(\n    const Op& op, T1& v1, const T2&
      v2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/detail/call_op_returning_void.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' op'
    - ' v1'
    - ' v2'
    argTypes:
    - Op
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: bvar::detail::call_op_returning_void
    functionSourceFile: /src/brpc/src/bvar/detail/call_op_returning_void.h
    functionUses: 4
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: "void call_op_returning_void(\n    const Op& op, T1& v1, const T2&
      v2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/detail/call_op_returning_void.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' op'
    - ' v1'
    - ' v2'
    argTypes:
    - Op
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: bvar::detail::call_op_returning_void
    functionSourceFile: /src/brpc/src/bvar/detail/call_op_returning_void.h
    functionUses: 4
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: "void call_op_returning_void(\n    const Op& op, T1& v1, const T2&
      v2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: op
      Src: /src/brpc/src/bvar/detail/call_op_returning_void.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' op'
    - ' v1'
    - ' v2'
    argTypes:
    - Op
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: bvar::detail::call_op_returning_void
    functionSourceFile: /src/brpc/src/bvar/detail/call_op_returning_void.h
    functionUses: 4
    functionsReached:
    - op
    linkageType: ''
    returnType: void
    signature: "void call_op_returning_void(\n    const Op& op, T1& v1, const T2&
      v2)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::StringPiece>::StringPiece>
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 39
    functionName: OutputStream::Area::Area(const Area& rhs)
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - std::vector<butil::StringPiece>::StringPiece>
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::Area(const Area& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 46
    functionName: OutputStream::Area::~Area()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::~Area()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: '& OutputStream::Area::operator=(const OutputStream::~Area'
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:52,1
    - Dst: Area::Area
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - OutputStream::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: '& OutputStream::Area::operator=(const OutputStream::Area& rhs)'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - Area::Area
    - '& OutputStream::Area::operator=(const OutputStream::~Area'
    linkageType: ''
    returnType: OutputStream::Area
    signature: OutputStream::Area & OutputStream::Area::operator=(const OutputStream::Area&
      rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::StringPiece>::StringPiece>
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:69,1
    - Dst: push_back
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:71,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:71,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 73
    functionName: OutputStream::Area::add(void* data, size_t n)
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - push_back
    - std::vector<butil::StringPiece>::StringPiece>
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::add(void* data, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:77,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:81,1
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:87,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:87,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:88,1
    - Dst: std::vector<butil::StringPiece>::const_iterator::data
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:88,1
    - Dst: std::vector<butil::StringPiece>::const_iterator::size
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:88,1
    - Dst: std::vector<butil::StringPiece>::const_iterator::size
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:89,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 92
    functionName: OutputStream::Area::assign(const void* data) const
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - fast_memcpy
    - end
    - std::vector<butil::StringPiece>::const_iterator::data
    - std::vector<butil::StringPiece>::const_iterator::size
    - begin
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::assign(const void* data) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:96,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 100
    functionName: mcpack2pb::OutputStream::done
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    linkageType: ''
    returnType: void
    signature: void OutputStream::done()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:106,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:112,1
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:115,1
    - Dst: mcpack2pb::OutputStream::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:125,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 127
    functionName: mcpack2pb::OutputStream::append
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - fast_memcpy
    - Next
    - mcpack2pb::OutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void OutputStream::append(const void* data, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::OutputStream::append
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' packed_pod'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 139
    functionName: mcpack2pb::OutputStream::append_packed_pod
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::OutputStream::append
    linkageType: ''
    returnType: void
    signature: void OutputStream::append_packed_pod(const T& packed_pod)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:150,1
    - Dst: mcpack2pb::OutputStream::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:158,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 159
    functionName: mcpack2pb::OutputStream::push_back
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - Next
    - mcpack2pb::OutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void OutputStream::push_back(char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: mcpack2pb::OutputStream::skip_continuous
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * OutputStream::skip_continuous(int n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Area::add
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:177,1
    - Dst: Area::add
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:183,1
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:185,1
    - Dst: mcpack2pb::OutputStream::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:195,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 198
    functionName: mcpack2pb::OutputStream::reserve
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - Next
    - mcpack2pb::OutputStream::set_bad
    - Area::add
    linkageType: ''
    returnType: OutputStream::Area
    signature: OutputStream::Area OutputStream::reserve(int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::OutputStream::assign
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' area'
    - data
    argTypes:
    - Area
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 202
    functionName: mcpack2pb::OutputStream::assign
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::OutputStream::assign
    linkageType: ''
    returnType: void
    signature: void OutputStream::assign(const Area& area, const void* data)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ByteCount
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:211,1
    - Dst: BackUp
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:214,1
    - Dst: ByteCount
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:215,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 224
    functionName: mcpack2pb::OutputStream::backup
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    - CHECK
    - ByteCount
    linkageType: ''
    returnType: void
    signature: void OutputStream::backup(int n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:227,1
    - Dst: malloc
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:235,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:235,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:241,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 242
    functionName: mcpack2pb::Serializer::push_group_info
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - malloc
    - arraysize
    linkageType: ''
    returnType: Serializer::GroupInfo
    signature: Serializer::GroupInfo * Serializer::push_group_info()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:245,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: '& Serializer::peek_group_info()'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - arraysize
    linkageType: ''
    returnType: Serializer::GroupInfo
    signature: Serializer::GroupInfo & Serializer::peek_group_info()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int8
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: mcpack2pb::Serializer::add_multiple_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int8
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int8(const uint8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int16
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 257
    functionName: mcpack2pb::Serializer::add_multiple_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int16
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int16(const uint16_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int32
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: mcpack2pb::Serializer::add_multiple_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int32
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int32(const uint32_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int64
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 263
    functionName: mcpack2pb::Serializer::add_multiple_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int64
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int64(const uint64_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint8
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: mcpack2pb::Serializer::add_multiple_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint8
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint8(const int8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint16
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 270
    functionName: mcpack2pb::Serializer::add_multiple_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint16
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint16(const int16_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint32
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:272,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 273
    functionName: mcpack2pb::Serializer::add_multiple_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint32
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint32(const int32_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint64
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 276
    functionName: mcpack2pb::Serializer::add_multiple_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint64
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint64(const int64_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:279,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - item_type
    argTypes:
    - StringWrapper
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 279
    functionName: mcpack2pb::Serializer::begin_mcpack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_mcpack_array(const StringWrapper& name, FieldType
      item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - item_type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 282
    functionName: mcpack2pb::Serializer::begin_mcpack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_mcpack_array(FieldType item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - item_type
    argTypes:
    - StringWrapper
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 285
    functionName: mcpack2pb::Serializer::begin_compack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_compack_array(const StringWrapper& name, FieldType
      item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - item_type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 288
    functionName: mcpack2pb::Serializer::begin_compack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_compack_array(FieldType item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 291
    functionName: mcpack2pb::Serializer::begin_object
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object(const StringWrapper& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 294
    functionName: mcpack2pb::Serializer::begin_object
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::end_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 297
    functionName: mcpack2pb::Serializer::end_object
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::end_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::end_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 300
    functionName: mcpack2pb::Serializer::end_object_iso
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::end_object_iso()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::StringPiece>::StringPiece>
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 39
    functionName: OutputStream::Area::Area(const Area& rhs)
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - std::vector<butil::StringPiece>::StringPiece>
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::Area(const Area& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 46
    functionName: OutputStream::Area::~Area()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::~Area()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: '& OutputStream::Area::operator=(const OutputStream::~Area'
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:52,1
    - Dst: Area::Area
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - OutputStream::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: '& OutputStream::Area::operator=(const OutputStream::Area& rhs)'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - Area::Area
    - '& OutputStream::Area::operator=(const OutputStream::~Area'
    linkageType: ''
    returnType: OutputStream::Area
    signature: OutputStream::Area & OutputStream::Area::operator=(const OutputStream::Area&
      rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::StringPiece>::StringPiece>
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:69,1
    - Dst: push_back
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:71,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:71,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 73
    functionName: OutputStream::Area::add(void* data, size_t n)
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - push_back
    - std::vector<butil::StringPiece>::StringPiece>
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::add(void* data, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:77,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:81,1
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:87,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:87,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:88,1
    - Dst: std::vector<butil::StringPiece>::const_iterator::data
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:88,1
    - Dst: std::vector<butil::StringPiece>::const_iterator::size
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:88,1
    - Dst: std::vector<butil::StringPiece>::const_iterator::size
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:89,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 92
    functionName: OutputStream::Area::assign(const void* data) const
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - fast_memcpy
    - end
    - std::vector<butil::StringPiece>::const_iterator::data
    - std::vector<butil::StringPiece>::const_iterator::size
    - begin
    linkageType: ''
    returnType: void
    signature: void OutputStream::Area::assign(const void* data) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:96,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 100
    functionName: mcpack2pb::OutputStream::done
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    linkageType: ''
    returnType: void
    signature: void OutputStream::done()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:106,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:112,1
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:115,1
    - Dst: mcpack2pb::OutputStream::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:125,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 127
    functionName: mcpack2pb::OutputStream::append
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 1
    functionsReached:
    - fast_memcpy
    - Next
    - mcpack2pb::OutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void OutputStream::append(const void* data, int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::OutputStream::append
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' packed_pod'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 139
    functionName: mcpack2pb::OutputStream::append_packed_pod
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::OutputStream::append
    linkageType: ''
    returnType: void
    signature: void OutputStream::append_packed_pod(const T& packed_pod)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:150,1
    - Dst: mcpack2pb::OutputStream::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:158,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 159
    functionName: mcpack2pb::OutputStream::push_back
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - Next
    - mcpack2pb::OutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void OutputStream::push_back(char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: mcpack2pb::OutputStream::skip_continuous
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * OutputStream::skip_continuous(int n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Area::add
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:177,1
    - Dst: Area::add
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:183,1
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:185,1
    - Dst: mcpack2pb::OutputStream::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:195,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 198
    functionName: mcpack2pb::OutputStream::reserve
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - Next
    - mcpack2pb::OutputStream::set_bad
    - Area::add
    linkageType: ''
    returnType: OutputStream::Area
    signature: OutputStream::Area OutputStream::reserve(int n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::OutputStream::assign
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' area'
    - data
    argTypes:
    - Area
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 202
    functionName: mcpack2pb::OutputStream::assign
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::OutputStream::assign
    linkageType: ''
    returnType: void
    signature: void OutputStream::assign(const Area& area, const void* data)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ByteCount
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:211,1
    - Dst: BackUp
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:214,1
    - Dst: ByteCount
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:215,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 224
    functionName: mcpack2pb::OutputStream::backup
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    - CHECK
    - ByteCount
    linkageType: ''
    returnType: void
    signature: void OutputStream::backup(int n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:227,1
    - Dst: malloc
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:235,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:235,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:241,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 242
    functionName: mcpack2pb::Serializer::push_group_info
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - malloc
    - arraysize
    linkageType: ''
    returnType: Serializer::GroupInfo
    signature: Serializer::GroupInfo * Serializer::push_group_info()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:245,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: '& Serializer::peek_group_info()'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - arraysize
    linkageType: ''
    returnType: Serializer::GroupInfo
    signature: Serializer::GroupInfo & Serializer::peek_group_info()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int8
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: mcpack2pb::Serializer::add_multiple_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int8
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int8(const uint8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int16
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 257
    functionName: mcpack2pb::Serializer::add_multiple_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int16
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int16(const uint16_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int32
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: mcpack2pb::Serializer::add_multiple_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int32
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int32(const uint32_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_int64
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 263
    functionName: mcpack2pb::Serializer::add_multiple_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_int64
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int64(const uint64_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint8
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: mcpack2pb::Serializer::add_multiple_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint8
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint8(const int8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint16
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 270
    functionName: mcpack2pb::Serializer::add_multiple_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint16
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint16(const int16_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint32
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:272,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 273
    functionName: mcpack2pb::Serializer::add_multiple_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint32
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint32(const int32_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::add_multiple_uint64
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 276
    functionName: mcpack2pb::Serializer::add_multiple_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::Serializer::add_multiple_uint64
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint64(const int64_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:279,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - item_type
    argTypes:
    - StringWrapper
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 279
    functionName: mcpack2pb::Serializer::begin_mcpack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_mcpack_array(const StringWrapper& name, FieldType
      item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - item_type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 282
    functionName: mcpack2pb::Serializer::begin_mcpack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_mcpack_array(FieldType item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - item_type
    argTypes:
    - StringWrapper
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 285
    functionName: mcpack2pb::Serializer::begin_compack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_compack_array(const StringWrapper& name, FieldType
      item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - item_type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 288
    functionName: mcpack2pb::Serializer::begin_compack_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_compack_array(FieldType item_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 291
    functionName: mcpack2pb::Serializer::begin_object
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object(const StringWrapper& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 294
    functionName: mcpack2pb::Serializer::begin_object
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::begin_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::end_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 297
    functionName: mcpack2pb::Serializer::end_object
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::end_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::end_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer-inl.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 300
    functionName: mcpack2pb::Serializer::end_object_iso
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::end_object_iso()
  - BBCount: 21
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 46
    argCount: 1
    argNames:
    - type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 54
    functionName: mcpack2pb::type2str
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * type2str(FieldType type)
  - BBCount: 21
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 46
    argCount: 1
    argNames:
    - type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 54
    functionName: mcpack2pb::type2str
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * type2str(FieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: mcpack2pb::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: mcpack2pb::type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: mcpack2pb::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: mcpack2pb::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: mcpack2pb::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::name_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:36,1
    - Dst: mcpack2pb::name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: mcpack2pb::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::name_size
    - mcpack2pb::name_offset
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: mcpack2pb::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::value_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:38,1
    - Dst: mcpack2pb::value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 2
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: mcpack2pb::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::value_offset
    - mcpack2pb::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: mcpack2pb::FieldShortHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: mcpack2pb::FieldShortHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: mcpack2pb::FieldShortHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: mcpack2pb::FieldShortHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: mcpack2pb::FieldShortHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::name_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:52,1
    - Dst: mcpack2pb::FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: mcpack2pb::FieldShortHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldShortHead::name_offset
    - mcpack2pb::FieldShortHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: mcpack2pb::FieldShortHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: mcpack2pb::FieldShortHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::value_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:55,1
    - Dst: mcpack2pb::FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: mcpack2pb::FieldShortHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldShortHead::value_offset
    - mcpack2pb::FieldShortHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: mcpack2pb::FieldLongHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: mcpack2pb::FieldLongHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: mcpack2pb::FieldLongHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: mcpack2pb::FieldLongHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: mcpack2pb::FieldLongHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::name_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:70,1
    - Dst: mcpack2pb::FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: mcpack2pb::FieldLongHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldLongHead::name_offset
    - mcpack2pb::FieldLongHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: mcpack2pb::FieldLongHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: mcpack2pb::FieldLongHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::value_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:73,1
    - Dst: mcpack2pb::FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: mcpack2pb::FieldLongHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldLongHead::value_offset
    - mcpack2pb::FieldLongHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:128,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 154
    functionName: Serializer::GroupInfo::print(std::ostream& os) const
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - type2str
    linkageType: ''
    returnType: void
    signature: void Serializer::GroupInfo::print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' gi'
    argTypes:
    - std::ostream
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: '& operator<<(std::ostream& os, const Serializer::GroupInfo& gi)'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Serializer::GroupInfo&
      gi)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - OutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 175
    functionName: mcpack2pb::Serializer::Serializer
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Serializer::Serializer(OutputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:178,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:182,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:184,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:184,1
    - Dst: free
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:186,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 188
    functionName: Serializer::~Serializer()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - free
    - good
    - CHECK
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::~Serializer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:195,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:196,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:200,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' group_info'
    - ' name'
    argTypes:
    - Serializer::GroupInfo
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 205
    functionName: mcpack2pb::object_add_item
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - mcpack2pb::size
    linkageType: ''
    returnType: bool
    signature: "bool object_add_item(Serializer::GroupInfo & group_info,\n                            const
      StringWrapper& name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::add_pending_nulls
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:212,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:220,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:220,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:229,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - item_type
    - n
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - FieldType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 232
    functionName: mcpack2pb::array_add_item
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - mcpack2pb::add_pending_nulls
    - mcpack2pb::type2str
    linkageType: ''
    returnType: bool
    signature: "bool array_add_item(OutputStream* stream,\n                           Serializer::GroupInfo
      & group_info,\n                           FieldType item_type,\n                           uint32_t
      n)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:246,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:249,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:250,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:253,1
    - Dst: FixedHeadAndValue::head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:256,1
    - Dst: FixedHeadAndValue::head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:257,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:259,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - stream
    - ' group_info'
    - value
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 244
    functionDepth: 2
    functionLinenumber: 244
    functionLinenumberEnd: 261
    functionName: mcpack2pb::add_primitive
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - OutputStream*::append_packed_pod
    - FixedHeadAndValue::head::set_name_size
    - OutputStream*::good
    - FixedHeadAndValue::head::set_type
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_primitive(\n    OutputStream* stream, Serializer::GroupInfo
      & group_info, T value)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:268,1
    - Dst: mcpack2pb::add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:269,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:271,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:274,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:275,1
    - Dst: FieldFixedHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:278,1
    - Dst: FieldFixedHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:279,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:279,1
    - Dst: OutputStream*::skip_continuous
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:280,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:281,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:287,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:288,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:291,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:292,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:292,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:292,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:293,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - ' name'
    - value
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 264
    functionDepth: 2
    functionLinenumber: 264
    functionLinenumberEnd: 295
    functionName: mcpack2pb::add_primitive
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - fast_memcpy
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - FieldFixedHead::set_name_size
    - OutputStream*::skip_continuous
    - OutputStream*::append
    - OutputStream*::good
    - mcpack2pb::add_primitive
    - data
    - empty
    - FieldFixedHead::set_type
    - mcpack2pb::object_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_primitive(OutputStream* stream,\n                          Serializer::GroupInfo
      & group_info,\n                          const StringWrapper& name,\n                          T
      value)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:301,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:304,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:305,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:308,1
    - Dst: std::min
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:316,1
    - Dst: head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:319,1
    - Dst: head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:320,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:325,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - values
    - n
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - T*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 298
    functionDepth: 2
    functionLinenumber: 298
    functionLinenumberEnd: 328
    functionName: mcpack2pb::add_primitives
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - OutputStream*::append
    - OutputStream*::good
    - head::set_type
    - head::set_name_size
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_primitives(OutputStream* stream,\n                           Serializer::GroupInfo
      & group_info,\n                           const T* values, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:331,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 331
    functionName: mcpack2pb::Serializer::add_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int8(const StringWrapper& name, int8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:333,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:333,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 333
    functionName: mcpack2pb::Serializer::add_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int16(const StringWrapper& name, int16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:335,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 335
    functionName: mcpack2pb::Serializer::add_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int32(const StringWrapper& name, int32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:337,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 337
    functionName: mcpack2pb::Serializer::add_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int64(const StringWrapper& name, int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:339,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 339
    functionName: mcpack2pb::Serializer::add_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint8(const StringWrapper& name, uint8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:341,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 341
    functionName: mcpack2pb::Serializer::add_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint16(const StringWrapper& name, uint16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:343,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 343
    functionName: mcpack2pb::Serializer::add_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint32(const StringWrapper& name, uint32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:345,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 345
    functionName: mcpack2pb::Serializer::add_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint64(const StringWrapper& name, uint64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:347,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 347
    functionName: mcpack2pb::Serializer::add_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_bool(const StringWrapper& name, bool value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:349,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:349,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 349
    functionName: mcpack2pb::Serializer::add_float
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_float(const StringWrapper& name, float value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:351,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 351
    functionName: mcpack2pb::Serializer::add_double
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_double(const StringWrapper& name, double value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:354,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 354
    functionName: mcpack2pb::Serializer::add_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int8(int8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:356,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 356
    functionName: mcpack2pb::Serializer::add_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int16(int16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:358,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 358
    functionName: mcpack2pb::Serializer::add_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int32(int32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:360,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 360
    functionName: mcpack2pb::Serializer::add_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int64(int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:362,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:362,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 362
    functionName: mcpack2pb::Serializer::add_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint8(uint8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:364,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 364
    functionName: mcpack2pb::Serializer::add_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint16(uint16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:366,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 366
    functionName: mcpack2pb::Serializer::add_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint32(uint32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:368,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 368
    functionName: mcpack2pb::Serializer::add_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint64(uint64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:370,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:370,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 370
    functionName: mcpack2pb::Serializer::add_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_bool(bool value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:372,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 372
    functionName: mcpack2pb::Serializer::add_float
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_float(float value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:374,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 374
    functionName: mcpack2pb::Serializer::add_double
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_double(double value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:377,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 376
    functionDepth: 0
    functionLinenumber: 376
    functionLinenumberEnd: 377
    functionName: mcpack2pb::Serializer::add_multiple_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int8(const int8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:379,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:379,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 379
    functionName: mcpack2pb::Serializer::add_multiple_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int16(const int16_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:381,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 381
    functionName: mcpack2pb::Serializer::add_multiple_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int32(const int32_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:383,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 383
    functionName: mcpack2pb::Serializer::add_multiple_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int64(const int64_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:385,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 385
    functionName: mcpack2pb::Serializer::add_multiple_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint8(const uint8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:387,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 387
    functionName: mcpack2pb::Serializer::add_multiple_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint16(const uint16_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:389,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 389
    functionName: mcpack2pb::Serializer::add_multiple_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint32(const uint32_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:391,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 391
    functionName: mcpack2pb::Serializer::add_multiple_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint64(const uint64_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:393,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - bool*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 393
    functionName: mcpack2pb::Serializer::add_multiple_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_bool(const bool* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:395,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - float*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 395
    functionName: mcpack2pb::Serializer::add_multiple_float
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_float(const float* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:397,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - double*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 397
    functionName: mcpack2pb::Serializer::add_multiple_double
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_double(const double* values, size_t count)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:406,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:409,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:410,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:412,1
    - Dst: FieldShortHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:414,1
    - Dst: FieldShortHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:415,1
    - Dst: FieldShortHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:416,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:416,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:417,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:418,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:418,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:418,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:421,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:422,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:423,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:423,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:424,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:425,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:425,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:425,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - ' value'
    - type
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - butil::StringPiece
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 402
    functionDepth: 2
    functionLinenumber: 402
    functionLinenumberEnd: 427
    functionName: mcpack2pb::add_binary_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - OutputStream*::append
    - OutputStream*::good
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - FieldShortHead::set_name_size
    - FieldLongHead::set_type
    - data
    - FieldShortHead::set_value_size
    - FieldShortHead::set_type
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_binary_internal(OutputStream* stream,\n                            Serializer::GroupInfo
      & group_info,\n                            const butil::StringPiece& value,\n
      \                           FieldType type)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:434,1
    - Dst: mcpack2pb::add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:435,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:437,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:440,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:441,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:443,1
    - Dst: FieldShortHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:445,1
    - Dst: FieldShortHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:446,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:446,1
    - Dst: FieldShortHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:447,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:447,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:448,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:449,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:449,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:449,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:450,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:450,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:450,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:453,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:454,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:454,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:455,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:455,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:456,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:457,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:457,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:457,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:458,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:458,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:458,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 5
    argNames:
    - stream
    - ' group_info'
    - ' name'
    - ' value'
    - type
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    - butil::StringPiece
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 429
    functionDepth: 2
    functionLinenumber: 429
    functionLinenumberEnd: 460
    functionName: mcpack2pb::add_binary_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::add_binary_internal
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - OutputStream*::append
    - OutputStream*::good
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - FieldShortHead::set_name_size
    - empty
    - data
    - FieldLongHead::set_type
    - mcpack2pb::object_add_item
    - FieldShortHead::set_value_size
    - FieldShortHead::set_type
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_binary_internal(OutputStream* stream,\n                             Serializer::GroupInfo
      & group_info,\n                             const StringWrapper& name,\n                             const
      butil::StringPiece& value,\n                             FieldType type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:463,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:463,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:464,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:464,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' s'
    argTypes:
    - StringWrapper
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 465
    functionName: mcpack2pb::Serializer::add_string
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void Serializer::add_string(const StringWrapper& name, const StringWrapper&
      s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:467,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:467,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:468,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:468,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:468,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 466
    functionDepth: 1
    functionLinenumber: 466
    functionLinenumberEnd: 469
    functionName: mcpack2pb::Serializer::add_string
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void Serializer::add_string(const StringWrapper& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:472,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' data'
    argTypes:
    - StringWrapper
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 473
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: "void Serializer::add_binary(const StringWrapper& name,\n                         const
      std::string& data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:476,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:476,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:477,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' name'
    - data
    - n
    argTypes:
    - StringWrapper
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 478
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: "void Serializer::add_binary(const StringWrapper& name,\n                         const
      void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:480,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 481
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_binary(const std::string& data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:483,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:483,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 485
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_binary(const void* data, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - ' group_info'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 493
    functionName: mcpack2pb::add_null_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void add_null_internal(OutputStream* stream,\n                              Serializer::GroupInfo&
      group_info)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:516,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:520,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:521,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:524,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:525,1
    - Dst: std::min
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:532,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:532,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:534,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - stream
    - ' group_info'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 536
    functionName: mcpack2pb::add_pending_nulls
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - std::min
    - OutputStream*::append
    - arraysize
    - OutputStream*::good
    - CHECK
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_pending_nulls(OutputStream* stream,\n                       Serializer::GroupInfo&
      group_info)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:541,1
    - Dst: mcpack2pb::add_null_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:542,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:544,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:547,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:548,1
    - Dst: FieldFixedHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:551,1
    - Dst: FieldFixedHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:552,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:552,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:553,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:554,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:554,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:554,1
    - Dst: OutputStream*::push_back
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:555,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - stream
    - ' group_info'
    - ' name'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 538
    functionDepth: 2
    functionLinenumber: 538
    functionLinenumberEnd: 556
    functionName: mcpack2pb::add_null_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - mcpack2pb::add_null_internal
    - FieldFixedHead::set_name_size
    - OutputStream*::append
    - OutputStream*::good
    - OutputStream*::push_back
    - data
    - empty
    - FieldFixedHead::set_type
    - mcpack2pb::object_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_null_internal(OutputStream* stream,\n                              Serializer::GroupInfo
      & group_info,\n                              const StringWrapper& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_null_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:559,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:559,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 558
    functionDepth: 0
    functionLinenumber: 558
    functionLinenumberEnd: 560
    functionName: mcpack2pb::Serializer::add_null
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_null_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_null(const StringWrapper& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_null_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:562,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:562,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: mcpack2pb::Serializer::add_null
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_null_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_null()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:581,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:584,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:585,1
    - Dst: ArrayHead::head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:588,1
    - Dst: ArrayHead::head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:589,1
    - Dst: ArrayHead::head::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:590,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:592,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - stream
    - ' group_info'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 579
    functionDepth: 2
    functionLinenumber: 579
    functionLinenumberEnd: 593
    functionName: mcpack2pb::add_empty_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - OutputStream*::append_packed_pod
    - ArrayHead::head::set_name_size
    - ArrayHead::head::set_type
    - ArrayHead::head::set_value_size
    - OutputStream*::good
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_empty_array_internal(OutputStream* stream,\n                                    Serializer::GroupInfo&
      group_info)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:598,1
    - Dst: mcpack2pb::add_empty_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:599,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:601,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:604,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:605,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:608,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:609,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:609,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:610,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:612,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:613,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:613,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:613,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:614,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - stream
    - ' group_info'
    - ' name'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 595
    functionDepth: 2
    functionLinenumber: 595
    functionLinenumberEnd: 615
    functionName: mcpack2pb::add_empty_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - OutputStream*::append
    - OutputStream*::good
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - mcpack2pb::add_empty_array_internal
    - empty
    - FieldLongHead::set_type
    - data
    - mcpack2pb::object_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_empty_array_internal(OutputStream* stream,\n                                     Serializer::GroupInfo
      & group_info,\n                                     const StringWrapper& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_empty_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:618,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:618,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: mcpack2pb::Serializer::add_empty_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_empty_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_empty_array(const StringWrapper& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_empty_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:621,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:621,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 622
    functionName: mcpack2pb::Serializer::add_empty_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_empty_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_empty_array()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:628,1
    - Dst: array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:631,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:631,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:632,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:634,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:636,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:637,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:644,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:646,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 627
    functionDepth: 2
    functionLinenumber: 627
    functionLinenumberEnd: 648
    functionName: mcpack2pb::Serializer::begin_object_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 4
    functionsReached:
    - array_add_item
    - mcpack2pb::Serializer::push_group_info
    - mcpack2pb::Serializer::set_bad
    - CHECK
    - mcpack2pb::Serializer::good
    - reserve
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object_internal()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:651,1
    - Dst: mcpack2pb::Serializer::begin_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:652,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:654,1
    - Dst: object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:657,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:657,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:658,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:660,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:662,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:663,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:669,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:670,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:672,1
    - Dst: append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:673,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:673,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:673,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:674,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 650
    functionDepth: 2
    functionLinenumber: 650
    functionLinenumberEnd: 675
    functionName: mcpack2pb::Serializer::begin_object_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 5
    functionsReached:
    - append
    - reserve
    - mcpack2pb::Serializer::push_group_info
    - object_add_item
    - mcpack2pb::Serializer::set_bad
    - CHECK
    - mcpack2pb::Serializer::good
    - empty
    - data
    - mcpack2pb::Serializer::begin_object_internal
    - size
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object_internal(const StringWrapper& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' ndepth'
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 677
    functionDepth: 1
    functionLinenumber: 677
    functionLinenumberEnd: 683
    functionName: mcpack2pb::pop_group_info
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void pop_group_info(int & ndepth)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:686,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:689,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:691,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:692,1
    - Dst: ObjectHead::head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:696,1
    - Dst: ObjectHead::head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:697,1
    - Dst: ObjectHead::head::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:698,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:698,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:701,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:702,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:705,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:706,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:707,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:707,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:709,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:711,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:712,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 1
    argNames:
    - objectisoarray
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 685
    functionDepth: 1
    functionLinenumber: 685
    functionLinenumberEnd: 714
    functionName: mcpack2pb::Serializer::end_object_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 4
    functionsReached:
    - ObjectHead::head::set_name_size
    - ObjectHead::head::set_value_size
    - assign
    - mcpack2pb::Serializer::set_bad
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - CHECK
    - pop_group_info
    - ObjectHead::head::set_type
    - FieldLongHead::set_type
    - mcpack2pb::Serializer::good
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::end_object_internal(bool objectisoarray)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:717,1
    - Dst: array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:720,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:720,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:721,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:723,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:725,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:726,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:732,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:734,1
    - Dst: get_primitive_type_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:735,1
    - Dst: push_back
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:738,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:741,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 26
    argCount: 2
    argNames:
    - item_type
    - compack
    argTypes:
    - FieldType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 743
      start: 716
    functionDepth: 2
    functionLinenumber: 716
    functionLinenumberEnd: 743
    functionName: mcpack2pb::Serializer::begin_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 8
    functionsReached:
    - array_add_item
    - mcpack2pb::Serializer::push_group_info
    - get_primitive_type_size
    - mcpack2pb::Serializer::set_bad
    - push_back
    - CHECK
    - mcpack2pb::Serializer::good
    - reserve
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_array_internal(FieldType item_type, bool compack)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:748,1
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:749,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:751,1
    - Dst: object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:754,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:754,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:755,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:757,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:759,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:760,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:765,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:766,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:768,1
    - Dst: append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:769,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:769,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:769,1
    - Dst: get_primitive_type_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:770,1
    - Dst: push_back
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:773,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:776,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' name'
    - item_type
    - compack
    argTypes:
    - StringWrapper
    - FieldType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 745
    functionDepth: 2
    functionLinenumber: 745
    functionLinenumberEnd: 778
    functionName: mcpack2pb::Serializer::begin_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 9
    functionsReached:
    - append
    - reserve
    - mcpack2pb::Serializer::pushed_bytes
    - mcpack2pb::Serializer::push_group_info
    - object_add_item
    - mcpack2pb::Serializer::set_bad
    - get_primitive_type_size
    - push_back
    - CHECK
    - empty
    - data
    - mcpack2pb::Serializer::good
    - size
    - peek_group_info
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: "void Serializer::begin_array_internal(const StringWrapper& name,\n
      \                                     FieldType item_type,\n                                      bool
      compack)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:781,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:784,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:786,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:787,1
    - Dst: backup
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:792,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:792,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:793,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:794,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:800,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:802,1
    - Dst: add_pending_nulls
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:804,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:807,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:809,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:810,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:810,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:812,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:813,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 780
    functionDepth: 1
    functionLinenumber: 780
    functionLinenumberEnd: 814
    functionName: mcpack2pb::Serializer::end_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - backup
    - assign
    - mcpack2pb::Serializer::set_bad
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - CHECK
    - pop_group_info
    - FieldLongHead::set_type
    - mcpack2pb::Serializer::good
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    - add_pending_nulls
    linkageType: ''
    returnType: void
    signature: void Serializer::end_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: mcpack2pb::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: mcpack2pb::type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: mcpack2pb::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: mcpack2pb::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: mcpack2pb::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::name_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:36,1
    - Dst: mcpack2pb::name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: mcpack2pb::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::name_size
    - mcpack2pb::name_offset
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: mcpack2pb::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::value_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:38,1
    - Dst: mcpack2pb::value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 2
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: mcpack2pb::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::value_offset
    - mcpack2pb::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: mcpack2pb::FieldShortHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: mcpack2pb::FieldShortHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: mcpack2pb::FieldShortHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: mcpack2pb::FieldShortHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: mcpack2pb::FieldShortHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::name_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:52,1
    - Dst: mcpack2pb::FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: mcpack2pb::FieldShortHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::FieldShortHead::name_offset
    - mcpack2pb::FieldShortHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: mcpack2pb::FieldShortHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: mcpack2pb::FieldShortHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::value_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:55,1
    - Dst: mcpack2pb::FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: mcpack2pb::FieldShortHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldShortHead::value_offset
    - mcpack2pb::FieldShortHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: mcpack2pb::FieldLongHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: mcpack2pb::FieldLongHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: mcpack2pb::FieldLongHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: mcpack2pb::FieldLongHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: mcpack2pb::FieldLongHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::name_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:70,1
    - Dst: mcpack2pb::FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: mcpack2pb::FieldLongHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::FieldLongHead::name_offset
    - mcpack2pb::FieldLongHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: mcpack2pb::FieldLongHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: mcpack2pb::FieldLongHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::value_offset
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:73,1
    - Dst: mcpack2pb::FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: mcpack2pb::FieldLongHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldLongHead::value_offset
    - mcpack2pb::FieldLongHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:128,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 154
    functionName: Serializer::GroupInfo::print(std::ostream& os) const
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - type2str
    linkageType: ''
    returnType: void
    signature: void Serializer::GroupInfo::print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' gi'
    argTypes:
    - std::ostream
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: '& operator<<(std::ostream& os, const Serializer::GroupInfo& gi)'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Serializer::GroupInfo&
      gi)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - OutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 175
    functionName: mcpack2pb::Serializer::Serializer
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Serializer::Serializer(OutputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:178,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:182,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:184,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:184,1
    - Dst: free
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:186,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 188
    functionName: Serializer::~Serializer()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - free
    - good
    - CHECK
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::~Serializer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:195,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:196,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:200,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' group_info'
    - ' name'
    argTypes:
    - Serializer::GroupInfo
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 205
    functionName: mcpack2pb::object_add_item
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 4
    functionsReached:
    - CHECK
    - mcpack2pb::size
    linkageType: ''
    returnType: bool
    signature: "bool object_add_item(Serializer::GroupInfo & group_info,\n                            const
      StringWrapper& name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::add_pending_nulls
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:212,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:220,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:220,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:229,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - item_type
    - n
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - FieldType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 207
    functionDepth: 2
    functionLinenumber: 207
    functionLinenumberEnd: 232
    functionName: mcpack2pb::array_add_item
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 4
    functionsReached:
    - CHECK
    - mcpack2pb::add_pending_nulls
    - mcpack2pb::type2str
    linkageType: ''
    returnType: bool
    signature: "bool array_add_item(OutputStream* stream,\n                           Serializer::GroupInfo
      & group_info,\n                           FieldType item_type,\n                           uint32_t
      n)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:246,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:249,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:250,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:253,1
    - Dst: FixedHeadAndValue::head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:256,1
    - Dst: FixedHeadAndValue::head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:257,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:259,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - stream
    - ' group_info'
    - value
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 244
    functionDepth: 2
    functionLinenumber: 244
    functionLinenumberEnd: 261
    functionName: mcpack2pb::add_primitive
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - OutputStream*::append_packed_pod
    - FixedHeadAndValue::head::set_name_size
    - OutputStream*::good
    - FixedHeadAndValue::head::set_type
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_primitive(\n    OutputStream* stream, Serializer::GroupInfo
      & group_info, T value)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:268,1
    - Dst: mcpack2pb::add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:269,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:271,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:274,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:275,1
    - Dst: FieldFixedHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:278,1
    - Dst: FieldFixedHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:279,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:279,1
    - Dst: OutputStream*::skip_continuous
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:280,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:281,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:287,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:288,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:291,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:292,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:292,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:292,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:293,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - ' name'
    - value
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 264
    functionDepth: 2
    functionLinenumber: 264
    functionLinenumberEnd: 295
    functionName: mcpack2pb::add_primitive
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - fast_memcpy
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - FieldFixedHead::set_name_size
    - OutputStream*::skip_continuous
    - OutputStream*::append
    - OutputStream*::good
    - mcpack2pb::add_primitive
    - data
    - empty
    - FieldFixedHead::set_type
    - mcpack2pb::object_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_primitive(OutputStream* stream,\n                          Serializer::GroupInfo
      & group_info,\n                          const StringWrapper& name,\n                          T
      value)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:301,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:304,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:305,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:308,1
    - Dst: std::min
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:316,1
    - Dst: head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:319,1
    - Dst: head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:320,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:325,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - values
    - n
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - T*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 298
    functionDepth: 2
    functionLinenumber: 298
    functionLinenumberEnd: 328
    functionName: mcpack2pb::add_primitives
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - OutputStream*::append
    - OutputStream*::good
    - head::set_type
    - head::set_name_size
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_primitives(OutputStream* stream,\n                           Serializer::GroupInfo
      & group_info,\n                           const T* values, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:331,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 331
    functionName: mcpack2pb::Serializer::add_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int8(const StringWrapper& name, int8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:333,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:333,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 333
    functionName: mcpack2pb::Serializer::add_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int16(const StringWrapper& name, int16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:335,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 335
    functionName: mcpack2pb::Serializer::add_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int32(const StringWrapper& name, int32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:337,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 337
    functionName: mcpack2pb::Serializer::add_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int64(const StringWrapper& name, int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:339,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 339
    functionName: mcpack2pb::Serializer::add_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint8(const StringWrapper& name, uint8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:341,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 341
    functionName: mcpack2pb::Serializer::add_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint16(const StringWrapper& name, uint16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:343,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 343
    functionName: mcpack2pb::Serializer::add_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint32(const StringWrapper& name, uint32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:345,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 345
    functionName: mcpack2pb::Serializer::add_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint64(const StringWrapper& name, uint64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:347,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 347
    functionName: mcpack2pb::Serializer::add_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_bool(const StringWrapper& name, bool value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:349,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:349,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 349
    functionName: mcpack2pb::Serializer::add_float
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_float(const StringWrapper& name, float value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:351,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - value
    argTypes:
    - StringWrapper
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 351
    functionName: mcpack2pb::Serializer::add_double
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_double(const StringWrapper& name, double value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:354,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 354
    functionName: mcpack2pb::Serializer::add_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int8(int8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:356,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 356
    functionName: mcpack2pb::Serializer::add_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int16(int16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:358,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 358
    functionName: mcpack2pb::Serializer::add_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int32(int32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:360,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 360
    functionName: mcpack2pb::Serializer::add_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_int64(int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:362,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:362,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 362
    functionName: mcpack2pb::Serializer::add_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint8(uint8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:364,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 364
    functionName: mcpack2pb::Serializer::add_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint16(uint16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:366,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 366
    functionName: mcpack2pb::Serializer::add_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint32(uint32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:368,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 368
    functionName: mcpack2pb::Serializer::add_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_uint64(uint64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:370,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:370,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 370
    functionName: mcpack2pb::Serializer::add_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_bool(bool value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:372,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 372
    functionName: mcpack2pb::Serializer::add_float
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_float(float value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitive
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:374,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 374
    functionName: mcpack2pb::Serializer::add_double
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitive
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_double(double value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:377,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 376
    functionDepth: 0
    functionLinenumber: 376
    functionLinenumberEnd: 377
    functionName: mcpack2pb::Serializer::add_multiple_int8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int8(const int8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:379,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:379,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 379
    functionName: mcpack2pb::Serializer::add_multiple_int16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int16(const int16_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:381,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 381
    functionName: mcpack2pb::Serializer::add_multiple_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int32(const int32_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:383,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - int64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 383
    functionName: mcpack2pb::Serializer::add_multiple_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_int64(const int64_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:385,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 385
    functionName: mcpack2pb::Serializer::add_multiple_uint8
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint8(const uint8_t* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:387,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint16_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 387
    functionName: mcpack2pb::Serializer::add_multiple_uint16
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint16(const uint16_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:389,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint32_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 389
    functionName: mcpack2pb::Serializer::add_multiple_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint32(const uint32_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:391,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 391
    functionName: mcpack2pb::Serializer::add_multiple_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_uint64(const uint64_t* values, size_t
      count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:393,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - bool*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 393
    functionName: mcpack2pb::Serializer::add_multiple_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_bool(const bool* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:395,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - float*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 395
    functionName: mcpack2pb::Serializer::add_multiple_float
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_float(const float* values, size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_primitives
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:397,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - values
    - count
    argTypes:
    - double*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 397
    functionName: mcpack2pb::Serializer::add_multiple_double
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_primitives
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_multiple_double(const double* values, size_t count)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:406,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:409,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:410,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:412,1
    - Dst: FieldShortHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:414,1
    - Dst: FieldShortHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:415,1
    - Dst: FieldShortHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:416,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:416,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:417,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:418,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:418,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:418,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:421,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:422,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:423,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:423,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:424,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:425,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:425,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:425,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 4
    argNames:
    - stream
    - ' group_info'
    - ' value'
    - type
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - butil::StringPiece
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 402
    functionDepth: 2
    functionLinenumber: 402
    functionLinenumberEnd: 427
    functionName: mcpack2pb::add_binary_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - OutputStream*::append
    - OutputStream*::good
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - FieldShortHead::set_name_size
    - FieldLongHead::set_type
    - data
    - FieldShortHead::set_value_size
    - FieldShortHead::set_type
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_binary_internal(OutputStream* stream,\n                            Serializer::GroupInfo
      & group_info,\n                            const butil::StringPiece& value,\n
      \                           FieldType type)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:434,1
    - Dst: mcpack2pb::add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:435,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:437,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:440,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:441,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:443,1
    - Dst: FieldShortHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:445,1
    - Dst: FieldShortHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:446,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:446,1
    - Dst: FieldShortHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:447,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:447,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:448,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:449,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:449,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:449,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:450,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:450,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:450,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:453,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:454,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:454,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:455,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:455,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:456,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:457,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:457,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:457,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:458,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:458,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:458,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 5
    argNames:
    - stream
    - ' group_info'
    - ' name'
    - ' value'
    - type
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    - butil::StringPiece
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 429
    functionDepth: 2
    functionLinenumber: 429
    functionLinenumberEnd: 460
    functionName: mcpack2pb::add_binary_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::add_binary_internal
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - OutputStream*::append
    - OutputStream*::good
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - FieldShortHead::set_name_size
    - empty
    - data
    - FieldLongHead::set_type
    - mcpack2pb::object_add_item
    - FieldShortHead::set_value_size
    - FieldShortHead::set_type
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_binary_internal(OutputStream* stream,\n                             Serializer::GroupInfo
      & group_info,\n                             const StringWrapper& name,\n                             const
      butil::StringPiece& value,\n                             FieldType type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:463,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:463,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:464,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:464,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' s'
    argTypes:
    - StringWrapper
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 465
    functionName: mcpack2pb::Serializer::add_string
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void Serializer::add_string(const StringWrapper& name, const StringWrapper&
      s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:467,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:467,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:468,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:468,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:468,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 466
    functionDepth: 1
    functionLinenumber: 466
    functionLinenumberEnd: 469
    functionName: mcpack2pb::Serializer::add_string
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void Serializer::add_string(const StringWrapper& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:472,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' data'
    argTypes:
    - StringWrapper
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 473
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: "void Serializer::add_binary(const StringWrapper& name,\n                         const
      std::string& data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:476,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:476,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:477,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' name'
    - data
    - n
    argTypes:
    - StringWrapper
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 478
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: "void Serializer::add_binary(const StringWrapper& name,\n                         const
      void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:480,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 481
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_binary(const std::string& data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_binary_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:483,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:483,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 485
    functionName: mcpack2pb::Serializer::add_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - peek_group_info
    linkageType: ''
    returnType: void
    signature: void Serializer::add_binary(const void* data, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - ' group_info'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 493
    functionName: mcpack2pb::add_null_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void add_null_internal(OutputStream* stream,\n                              Serializer::GroupInfo&
      group_info)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:516,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:520,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:521,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:524,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:525,1
    - Dst: std::min
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:532,1
    - Dst: arraysize
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:532,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:534,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - stream
    - ' group_info'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 536
    functionName: mcpack2pb::add_pending_nulls
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - std::min
    - OutputStream*::append
    - arraysize
    - OutputStream*::good
    - CHECK
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_pending_nulls(OutputStream* stream,\n                       Serializer::GroupInfo&
      group_info)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:541,1
    - Dst: mcpack2pb::add_null_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:542,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:544,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:547,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:548,1
    - Dst: FieldFixedHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:551,1
    - Dst: FieldFixedHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:552,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:552,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:553,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:554,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:554,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:554,1
    - Dst: OutputStream*::push_back
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:555,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - stream
    - ' group_info'
    - ' name'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 538
    functionDepth: 2
    functionLinenumber: 538
    functionLinenumberEnd: 556
    functionName: mcpack2pb::add_null_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - mcpack2pb::add_null_internal
    - FieldFixedHead::set_name_size
    - OutputStream*::append
    - OutputStream*::good
    - OutputStream*::push_back
    - data
    - empty
    - FieldFixedHead::set_type
    - mcpack2pb::object_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_null_internal(OutputStream* stream,\n                              Serializer::GroupInfo
      & group_info,\n                              const StringWrapper& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_null_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:559,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:559,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 558
    functionDepth: 0
    functionLinenumber: 558
    functionLinenumberEnd: 560
    functionName: mcpack2pb::Serializer::add_null
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_null_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_null(const StringWrapper& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_null_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:562,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:562,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: mcpack2pb::Serializer::add_null
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_null_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_null()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:581,1
    - Dst: mcpack2pb::array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:584,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:585,1
    - Dst: ArrayHead::head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:588,1
    - Dst: ArrayHead::head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:589,1
    - Dst: ArrayHead::head::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:590,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:592,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - stream
    - ' group_info'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 579
    functionDepth: 2
    functionLinenumber: 579
    functionLinenumberEnd: 593
    functionName: mcpack2pb::add_empty_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 1
    functionsReached:
    - OutputStream*::append_packed_pod
    - ArrayHead::head::set_name_size
    - ArrayHead::head::set_type
    - ArrayHead::head::set_value_size
    - OutputStream*::good
    - mcpack2pb::array_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_empty_array_internal(OutputStream* stream,\n                                    Serializer::GroupInfo&
      group_info)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:598,1
    - Dst: mcpack2pb::add_empty_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:599,1
    - Dst: OutputStream*::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:601,1
    - Dst: mcpack2pb::object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:604,1
    - Dst: OutputStream*::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:605,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:608,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:609,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:609,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:610,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:612,1
    - Dst: OutputStream*::append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:613,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:613,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:613,1
    - Dst: OutputStream*::append_packed_pod
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:614,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - stream
    - ' group_info'
    - ' name'
    argTypes:
    - OutputStream*
    - Serializer::GroupInfo
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 595
    functionDepth: 2
    functionLinenumber: 595
    functionLinenumberEnd: 615
    functionName: mcpack2pb::add_empty_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 2
    functionsReached:
    - OutputStream*::append_packed_pod
    - mcpack2pb::size
    - OutputStream*::append
    - OutputStream*::good
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - mcpack2pb::add_empty_array_internal
    - empty
    - FieldLongHead::set_type
    - data
    - mcpack2pb::object_add_item
    - OutputStream*::set_bad
    linkageType: ''
    returnType: void
    signature: "void add_empty_array_internal(OutputStream* stream,\n                                     Serializer::GroupInfo
      & group_info,\n                                     const StringWrapper& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_empty_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:618,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:618,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: mcpack2pb::Serializer::add_empty_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_empty_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_empty_array(const StringWrapper& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_empty_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:621,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:621,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 622
    functionName: mcpack2pb::Serializer::add_empty_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - peek_group_info
    - add_empty_array_internal
    linkageType: ''
    returnType: void
    signature: void Serializer::add_empty_array()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:628,1
    - Dst: array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:631,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:631,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:632,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:634,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:636,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:637,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:644,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:646,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 627
    functionDepth: 2
    functionLinenumber: 627
    functionLinenumberEnd: 648
    functionName: mcpack2pb::Serializer::begin_object_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 5
    functionsReached:
    - array_add_item
    - mcpack2pb::Serializer::push_group_info
    - mcpack2pb::Serializer::set_bad
    - CHECK
    - mcpack2pb::Serializer::good
    - reserve
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object_internal()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:651,1
    - Dst: mcpack2pb::Serializer::begin_object_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:652,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:654,1
    - Dst: object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:657,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:657,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:658,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:660,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:662,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:663,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:669,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:670,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:672,1
    - Dst: append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:673,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:673,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:673,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:674,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 650
    functionDepth: 2
    functionLinenumber: 650
    functionLinenumberEnd: 675
    functionName: mcpack2pb::Serializer::begin_object_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 6
    functionsReached:
    - append
    - reserve
    - mcpack2pb::Serializer::push_group_info
    - object_add_item
    - mcpack2pb::Serializer::set_bad
    - CHECK
    - mcpack2pb::Serializer::good
    - empty
    - data
    - mcpack2pb::Serializer::begin_object_internal
    - size
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_object_internal(const StringWrapper& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' ndepth'
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 677
    functionDepth: 1
    functionLinenumber: 677
    functionLinenumberEnd: 683
    functionName: mcpack2pb::pop_group_info
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void pop_group_info(int & ndepth)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:686,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:689,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:691,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:692,1
    - Dst: ObjectHead::head::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:696,1
    - Dst: ObjectHead::head::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:697,1
    - Dst: ObjectHead::head::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:698,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:698,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:701,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:702,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:705,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:706,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:707,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:707,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:709,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:711,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:712,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 1
    argNames:
    - objectisoarray
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 685
    functionDepth: 1
    functionLinenumber: 685
    functionLinenumberEnd: 714
    functionName: mcpack2pb::Serializer::end_object_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 4
    functionsReached:
    - ObjectHead::head::set_name_size
    - ObjectHead::head::set_value_size
    - assign
    - mcpack2pb::Serializer::set_bad
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - CHECK
    - pop_group_info
    - ObjectHead::head::set_type
    - FieldLongHead::set_type
    - mcpack2pb::Serializer::good
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::end_object_internal(bool objectisoarray)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:717,1
    - Dst: array_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:720,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:720,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:721,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:723,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:725,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:726,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:732,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:734,1
    - Dst: get_primitive_type_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:735,1
    - Dst: push_back
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:738,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:741,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 26
    argCount: 2
    argNames:
    - item_type
    - compack
    argTypes:
    - FieldType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 743
      start: 716
    functionDepth: 2
    functionLinenumber: 716
    functionLinenumberEnd: 743
    functionName: mcpack2pb::Serializer::begin_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 9
    functionsReached:
    - array_add_item
    - mcpack2pb::Serializer::push_group_info
    - get_primitive_type_size
    - mcpack2pb::Serializer::set_bad
    - push_back
    - CHECK
    - mcpack2pb::Serializer::good
    - reserve
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: void
    signature: void Serializer::begin_array_internal(FieldType item_type, bool compack)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:748,1
    - Dst: mcpack2pb::Serializer::begin_array_internal
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:749,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:751,1
    - Dst: object_add_item
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:754,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:754,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:755,1
    - Dst: mcpack2pb::Serializer::push_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:757,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:759,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:760,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:765,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:766,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:768,1
    - Dst: append
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:769,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:769,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:769,1
    - Dst: get_primitive_type_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:770,1
    - Dst: push_back
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:773,1
    - Dst: reserve
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:776,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' name'
    - item_type
    - compack
    argTypes:
    - StringWrapper
    - FieldType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 745
    functionDepth: 2
    functionLinenumber: 745
    functionLinenumberEnd: 778
    functionName: mcpack2pb::Serializer::begin_array_internal
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 10
    functionsReached:
    - append
    - reserve
    - mcpack2pb::Serializer::pushed_bytes
    - mcpack2pb::Serializer::push_group_info
    - object_add_item
    - mcpack2pb::Serializer::set_bad
    - get_primitive_type_size
    - push_back
    - CHECK
    - empty
    - data
    - mcpack2pb::Serializer::good
    - size
    - peek_group_info
    - mcpack2pb::Serializer::begin_array_internal
    linkageType: ''
    returnType: void
    signature: "void Serializer::begin_array_internal(const StringWrapper& name,\n
      \                                     FieldType item_type,\n                                      bool
      compack)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:781,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:784,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:786,1
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:787,1
    - Dst: backup
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:792,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:792,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:793,1
    - Dst: peek_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:794,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:800,1
    - Dst: FieldLongHead::set_type
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:802,1
    - Dst: add_pending_nulls
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:804,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:807,1
    - Dst: FieldLongHead::set_name_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:809,1
    - Dst: FieldLongHead::set_value_size
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:810,1
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:810,1
    - Dst: assign
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:812,1
    - Dst: pop_group_info
      Src: /src/brpc/src/mcpack2pb/serializer.cpp:813,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 780
    functionDepth: 1
    functionLinenumber: 780
    functionLinenumberEnd: 814
    functionName: mcpack2pb::Serializer::end_array
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.cpp
    functionUses: 0
    functionsReached:
    - backup
    - assign
    - mcpack2pb::Serializer::set_bad
    - FieldLongHead::set_name_size
    - FieldLongHead::set_value_size
    - CHECK
    - pop_group_info
    - FieldLongHead::set_type
    - mcpack2pb::Serializer::good
    - peek_group_info
    - mcpack2pb::Serializer::pushed_bytes
    - add_pending_nulls
    linkageType: ''
    returnType: void
    signature: void Serializer::end_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 45
    functionName: mcpack2pb::InputStream::InputStream
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputStream(google::protobuf::io::ZeroCopyInputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: ~InputStream()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~InputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: mcpack2pb::InputStream::popped_bytes
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t popped_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: mcpack2pb::InputStream::good
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: mcpack2pb::InputStream::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 94
    functionName: mcpack2pb::UnparsedValue
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UnparsedValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - type
    - stream
    - size
    argTypes:
    - FieldType
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 96
    functionName: mcpack2pb::UnparsedValue
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UnparsedValue(FieldType type, InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - type
    - stream
    - size
    argTypes:
    - FieldType
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: mcpack2pb::set
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set(FieldType type, InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: mcpack2pb::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: FieldType
    signature: FieldType type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: mcpack2pb::stream
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InputStream
    signature: InputStream * stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: mcpack2pb::stream
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InputStream
    signature: InputStream * stream() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: mcpack2pb::size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: mcpack2pb::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ObjectIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - n
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: mcpack2pb::ObjectIterator::ObjectIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ObjectIterator::init
    linkageType: ''
    returnType: void
    signature: void ObjectIterator(InputStream* stream, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ObjectIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:157,1
    - Dst: stream
      Src: /src/brpc/src/mcpack2pb/parser.h:157,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: mcpack2pb::ObjectIterator::ObjectIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - size
    - stream
    - mcpack2pb::ObjectIterator::init
    linkageType: ''
    returnType: void
    signature: void ObjectIterator(UnparsedValue& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: ~ObjectIterator()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ObjectIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 160
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value::type
      Src: /src/brpc/src/mcpack2pb/parser.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - value::type
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: mcpack2pb::ObjectIterator::field_count
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t field_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ObjectIterator::set_end
      Src: /src/brpc/src/mcpack2pb/parser.h:171,1
    - Dst: mcpack2pb::ObjectIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser.h:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: mcpack2pb::ObjectIterator::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::ObjectIterator::set_bad
    - mcpack2pb::ObjectIterator::set_end
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: mcpack2pb::ObjectIterator::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 176
    functionName: mcpack2pb::ObjectIterator::left_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t left_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: mcpack2pb::ArrayIterator::ArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ArrayIterator(InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:197,1
    - Dst: stream
      Src: /src/brpc/src/mcpack2pb/parser.h:197,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: mcpack2pb::ArrayIterator::ArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - size
    - stream
    - mcpack2pb::ArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ArrayIterator(UnparsedValue& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 198
    functionName: ~ArrayIterator()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ArrayIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::type
      Src: /src/brpc/src/mcpack2pb/parser.h:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::type
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: mcpack2pb::ArrayIterator::item_count
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t item_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ArrayIterator::set_end
      Src: /src/brpc/src/mcpack2pb/parser.h:211,1
    - Dst: mcpack2pb::ArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser.h:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: mcpack2pb::ArrayIterator::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::ArrayIterator::set_bad
    - mcpack2pb::ArrayIterator::set_end
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 214
    functionName: mcpack2pb::ArrayIterator::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 216
    functionName: mcpack2pb::ArrayIterator::left_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t left_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 229
    functionName: mcpack2pb::ISOArrayIterator::ISOArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator(InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:231,1
    - Dst: stream
      Src: /src/brpc/src/mcpack2pb/parser.h:231,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.h:231,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 231
    functionName: mcpack2pb::ISOArrayIterator::ISOArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - size
    - stream
    - mcpack2pb::ISOArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator(UnparsedValue& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: ~ISOArrayIterator()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ISOArrayIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 234
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 238
    functionName: mcpack2pb::ISOArrayIterator::as_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: int64_t
    signature: int64_t as_int64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 239
    functionName: mcpack2pb::ISOArrayIterator::as_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t as_uint64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: mcpack2pb::ISOArrayIterator::as_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: int32_t
    signature: int32_t as_int32() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 241
    functionName: mcpack2pb::ISOArrayIterator::as_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t as_uint32() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: mcpack2pb::ISOArrayIterator::as_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: bool
    signature: bool as_bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_fp
      Src: /src/brpc/src/mcpack2pb/parser.h:243,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: mcpack2pb::ISOArrayIterator::as_float
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_fp
    linkageType: ''
    returnType: float
    signature: float as_float() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_fp
      Src: /src/brpc/src/mcpack2pb/parser.h:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: mcpack2pb::ISOArrayIterator::as_double
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_fp
    linkageType: ''
    returnType: double
    signature: double as_double() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: mcpack2pb::ISOArrayIterator::item_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PrimitiveFieldType
    signature: PrimitiveFieldType item_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: mcpack2pb::ISOArrayIterator::item_count
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t item_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::set_end
      Src: /src/brpc/src/mcpack2pb/parser.h:254,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser.h:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 256
    functionName: mcpack2pb::ISOArrayIterator::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached:
    - mcpack2pb::ISOArrayIterator::set_bad
    - mcpack2pb::ISOArrayIterator::set_end
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 257
    functionName: mcpack2pb::ISOArrayIterator::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 45
    functionName: mcpack2pb::InputStream::InputStream
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputStream(google::protobuf::io::ZeroCopyInputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: ~InputStream()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~InputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: mcpack2pb::InputStream::popped_bytes
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t popped_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: mcpack2pb::InputStream::good
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: mcpack2pb::InputStream::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 94
    functionName: mcpack2pb::UnparsedValue
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UnparsedValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - type
    - stream
    - size
    argTypes:
    - FieldType
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 96
    functionName: mcpack2pb::UnparsedValue
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UnparsedValue(FieldType type, InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - type
    - stream
    - size
    argTypes:
    - FieldType
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: mcpack2pb::set
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set(FieldType type, InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: mcpack2pb::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: FieldType
    signature: FieldType type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: mcpack2pb::stream
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InputStream
    signature: InputStream * stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: mcpack2pb::stream
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InputStream
    signature: InputStream * stream() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: mcpack2pb::size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: mcpack2pb::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ObjectIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - n
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: mcpack2pb::ObjectIterator::ObjectIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ObjectIterator::init
    linkageType: ''
    returnType: void
    signature: void ObjectIterator(InputStream* stream, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ObjectIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:157,1
    - Dst: stream
      Src: /src/brpc/src/mcpack2pb/parser.h:157,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: mcpack2pb::ObjectIterator::ObjectIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - size
    - stream
    - mcpack2pb::ObjectIterator::init
    linkageType: ''
    returnType: void
    signature: void ObjectIterator(UnparsedValue& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: ~ObjectIterator()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ObjectIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 160
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value::type
      Src: /src/brpc/src/mcpack2pb/parser.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - value::type
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: mcpack2pb::ObjectIterator::field_count
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t field_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ObjectIterator::set_end
      Src: /src/brpc/src/mcpack2pb/parser.h:171,1
    - Dst: mcpack2pb::ObjectIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser.h:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: mcpack2pb::ObjectIterator::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::ObjectIterator::set_bad
    - mcpack2pb::ObjectIterator::set_end
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: mcpack2pb::ObjectIterator::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 176
    functionName: mcpack2pb::ObjectIterator::left_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t left_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: mcpack2pb::ArrayIterator::ArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ArrayIterator(InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:197,1
    - Dst: stream
      Src: /src/brpc/src/mcpack2pb/parser.h:197,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: mcpack2pb::ArrayIterator::ArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - size
    - stream
    - mcpack2pb::ArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ArrayIterator(UnparsedValue& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 198
    functionName: ~ArrayIterator()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ArrayIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Field
    signature: Field & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/mcpack2pb/parser.h:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - type
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: mcpack2pb::ArrayIterator::item_count
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t item_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ArrayIterator::set_end
      Src: /src/brpc/src/mcpack2pb/parser.h:211,1
    - Dst: mcpack2pb::ArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser.h:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: mcpack2pb::ArrayIterator::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::ArrayIterator::set_bad
    - mcpack2pb::ArrayIterator::set_end
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 214
    functionName: mcpack2pb::ArrayIterator::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 216
    functionName: mcpack2pb::ArrayIterator::left_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t left_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 229
    functionName: mcpack2pb::ISOArrayIterator::ISOArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator(InputStream* stream, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::init
      Src: /src/brpc/src/mcpack2pb/parser.h:231,1
    - Dst: stream
      Src: /src/brpc/src/mcpack2pb/parser.h:231,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.h:231,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 231
    functionName: mcpack2pb::ISOArrayIterator::ISOArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - size
    - stream
    - mcpack2pb::ISOArrayIterator::init
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator(UnparsedValue& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: ~ISOArrayIterator()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ISOArrayIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 234
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 238
    functionName: mcpack2pb::ISOArrayIterator::as_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: int64_t
    signature: int64_t as_int64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 239
    functionName: mcpack2pb::ISOArrayIterator::as_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t as_uint64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: mcpack2pb::ISOArrayIterator::as_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: int32_t
    signature: int32_t as_int32() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 241
    functionName: mcpack2pb::ISOArrayIterator::as_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t as_uint32() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_integer
      Src: /src/brpc/src/mcpack2pb/parser.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: mcpack2pb::ISOArrayIterator::as_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_integer
    linkageType: ''
    returnType: bool
    signature: bool as_bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_fp
      Src: /src/brpc/src/mcpack2pb/parser.h:243,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: mcpack2pb::ISOArrayIterator::as_float
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_fp
    linkageType: ''
    returnType: float
    signature: float as_float() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::as_fp
      Src: /src/brpc/src/mcpack2pb/parser.h:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: mcpack2pb::ISOArrayIterator::as_double
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::as_fp
    linkageType: ''
    returnType: double
    signature: double as_double() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: mcpack2pb::ISOArrayIterator::item_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PrimitiveFieldType
    signature: PrimitiveFieldType item_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: mcpack2pb::ISOArrayIterator::item_count
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t item_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::ISOArrayIterator::set_end
      Src: /src/brpc/src/mcpack2pb/parser.h:254,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser.h:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 256
    functionName: mcpack2pb::ISOArrayIterator::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 2
    functionsReached:
    - mcpack2pb::ISOArrayIterator::set_bad
    - mcpack2pb::ISOArrayIterator::set_end
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 257
    functionName: mcpack2pb::ISOArrayIterator::set_end
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 46
    functionName: mcpack2pb::OutputStream::Area::Area
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Area()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: mcpack2pb::OutputStream::Area::Area
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Area(const butil::LinkerInitialized&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: mcpack2pb::OutputStream::OutputStream
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OutputStream(google::protobuf::io::ZeroCopyOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: done
      Src: /src/brpc/src/mcpack2pb/serializer.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: ~OutputStream()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - done
    linkageType: ''
    returnType: void
    signature: void ~OutputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: mcpack2pb::OutputStream::pushed_bytes
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t pushed_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: mcpack2pb::OutputStream::good
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: mcpack2pb::OutputStream::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/mcpack2pb/serializer.h:128,1
    - Dst: mcpack2pb::StringWrapper::size
      Src: /src/brpc/src/mcpack2pb/serializer.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: mcpack2pb::StringWrapper::StringWrapper
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - c_str
    - mcpack2pb::StringWrapper::size
    linkageType: ''
    returnType: void
    signature: void StringWrapper(const std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/mcpack2pb/serializer.h:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 137
    functionName: mcpack2pb::StringWrapper::StringWrapper
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - strlen
    linkageType: ''
    returnType: void
    signature: void StringWrapper(const char* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: ~StringWrapper()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StringWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: mcpack2pb::StringWrapper::data
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 140
    functionName: mcpack2pb::StringWrapper::size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: mcpack2pb::StringWrapper::empty
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.h:147,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.h:147,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' sw'
    argTypes:
    - std::ostream
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: '& operator<<(std::ostream& os, const StringWrapper& sw)'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - size
    - butil::BasicStringPiece::BasicStringPiece
    - data
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const StringWrapper& sw)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: mcpack2pb::Serializer::good
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 13
    functionsReached:
    - mcpack2pb::Serializer::good
    linkageType: ''
    returnType: bool
    signature: bool good() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: mcpack2pb::Serializer::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 13
    functionsReached:
    - mcpack2pb::Serializer::set_bad
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: mcpack2pb::Serializer::pushed_bytes
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 13
    functionsReached:
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: size_t
    signature: size_t pushed_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 46
    functionName: mcpack2pb::OutputStream::Area::Area
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Area()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: mcpack2pb::OutputStream::Area::Area
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Area(const butil::LinkerInitialized&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: mcpack2pb::OutputStream::OutputStream
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OutputStream(google::protobuf::io::ZeroCopyOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: done
      Src: /src/brpc/src/mcpack2pb/serializer.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: ~OutputStream()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - done
    linkageType: ''
    returnType: void
    signature: void ~OutputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: mcpack2pb::OutputStream::pushed_bytes
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t pushed_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: mcpack2pb::OutputStream::good
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: mcpack2pb::OutputStream::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/mcpack2pb/serializer.h:128,1
    - Dst: mcpack2pb::StringWrapper::size
      Src: /src/brpc/src/mcpack2pb/serializer.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: mcpack2pb::StringWrapper::StringWrapper
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - c_str
    - mcpack2pb::StringWrapper::size
    linkageType: ''
    returnType: void
    signature: void StringWrapper(const std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/mcpack2pb/serializer.h:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 137
    functionName: mcpack2pb::StringWrapper::StringWrapper
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - strlen
    linkageType: ''
    returnType: void
    signature: void StringWrapper(const char* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: ~StringWrapper()
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StringWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: mcpack2pb::StringWrapper::data
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 140
    functionName: mcpack2pb::StringWrapper::size
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: mcpack2pb::StringWrapper::empty
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/mcpack2pb/serializer.h:147,1
    - Dst: data
      Src: /src/brpc/src/mcpack2pb/serializer.h:147,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/serializer.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' sw'
    argTypes:
    - std::ostream
    - StringWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: '& operator<<(std::ostream& os, const StringWrapper& sw)'
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 0
    functionsReached:
    - size
    - butil::BasicStringPiece::BasicStringPiece
    - data
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const StringWrapper& sw)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/mcpack2pb/serializer.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: mcpack2pb::Serializer::good
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 14
    functionsReached:
    - mcpack2pb::Serializer::good
    linkageType: ''
    returnType: bool
    signature: bool good() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::set_bad
      Src: /src/brpc/src/mcpack2pb/serializer.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: mcpack2pb::Serializer::set_bad
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 14
    functionsReached:
    - mcpack2pb::Serializer::set_bad
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::pushed_bytes
      Src: /src/brpc/src/mcpack2pb/serializer.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: mcpack2pb::Serializer::pushed_bytes
    functionSourceFile: /src/brpc/src/mcpack2pb/serializer.h
    functionUses: 14
    functionsReached:
    - mcpack2pb::Serializer::pushed_bytes
    linkageType: ''
    returnType: size_t
    signature: size_t pushed_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/field_type.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: mcpack2pb::type2str
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 3
    functionsReached:
    - mcpack2pb::type2str
    linkageType: ''
    returnType: char
    signature: char * type2str(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/field_type.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: mcpack2pb::type2str
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 4
    functionsReached:
    - mcpack2pb::type2str
    linkageType: ''
    returnType: char
    signature: char * type2str(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: mcpack2pb::is_primitive
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_primitive(FieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: mcpack2pb::is_integral
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_integral(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: mcpack2pb::is_floating_point
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_floating_point(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: mcpack2pb::get_primitive_type_size
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t get_primitive_type_size(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: mcpack2pb::get_primitive_type_size
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t get_primitive_type_size(FieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/field_type.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: mcpack2pb::type2str
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 5
    functionsReached:
    - mcpack2pb::type2str
    linkageType: ''
    returnType: char
    signature: char * type2str(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/field_type.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: mcpack2pb::type2str
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 6
    functionsReached:
    - mcpack2pb::type2str
    linkageType: ''
    returnType: char
    signature: char * type2str(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: mcpack2pb::is_primitive
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_primitive(FieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: mcpack2pb::is_integral
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_integral(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: mcpack2pb::is_floating_point
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_floating_point(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - PrimitiveFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: mcpack2pb::get_primitive_type_size
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t get_primitive_type_size(PrimitiveFieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - FieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: mcpack2pb::get_primitive_type_size
    functionSourceFile: /src/brpc/src/mcpack2pb/field_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t get_primitive_type_size(FieldType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:35,1
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/generator.cpp:36,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: mcpack2pb::get_idl_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::name
    - empty
    - google::protobuf::FieldDescriptor*::options
    linkageType: ''
    returnType: std::string
    signature: std::string & get_idl_name(const google::protobuf::FieldDescriptor*
      f)
  - BBCount: 10
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConvertibleIdlType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 53
    functionName: mcpack2pb::is_integral_type
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_integral_type(ConvertibleIdlType type)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:56,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:68,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 39
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 79
    functionName: mcpack2pb::field_to_string
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::FieldDescriptor*::enum_type
    linkageType: ''
    returnType: char
    signature: char * field_to_string(const google::protobuf::FieldDescriptor* f)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 103
    functionName: mcpack2pb::to_mcpack_typestr
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::type
    linkageType: ''
    returnType: char
    signature: char * to_mcpack_typestr(const google::protobuf::FieldDescriptor* f)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 124
    functionName: mcpack2pb::to_mcpack_typestr
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::to_mcpack_typestr
    linkageType: ''
    returnType: char
    signature: "char * to_mcpack_typestr(ConvertibleIdlType type,\n                              const
      google::protobuf::FieldDescriptor* f)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:129,1
    - Dst: ::toupper
      Src: /src/brpc/src/mcpack2pb/generator.cpp:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 137
    functionName: mcpack2pb::to_mcpack_typestr_uppercase
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::to_mcpack_typestr
    - ::toupper
    linkageType: ''
    returnType: char
    signature: "char * to_mcpack_typestr_uppercase(\n    ConvertibleIdlType type,\n
      \   const google::protobuf::FieldDescriptor* f)"
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConvertibleIdlType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 157
    functionName: mcpack2pb::describe_idl_type
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * describe_idl_type(ConvertibleIdlType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:161,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 167
    functionName: mcpack2pb::to_var_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: std::string to_var_name(const std::string& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/mcpack2pb/generator.cpp:171,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:171,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:172,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:174,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:176,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 180
    functionName: mcpack2pb::to_cpp_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::size
    - std::string::push_back
    - std::string::append
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string to_cpp_name(const std::string& full_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/generator.cpp:186,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:186,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:187,1
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/generator.cpp:199,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:199,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:200,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' ref_msgs'
    - ' ref_maps'
    - ' decl'
    argTypes:
    - std::set<std::string>
    - std::set<std::string>
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 207
    functionName: mcpack2pb::generate_declarations
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - end
    - failed
    - Print
    - begin
    linkageType: ''
    returnType: bool
    signature: "bool generate_declarations(const std::set<std::string>& ref_msgs,\n
      \                          const std::set<std::string>& ref_maps,\n                           google::protobuf::io::Printer&
      decl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 212
    functionName: TEMPLATE_OF_SET_FUNC_SIGNATURE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_SET_FUNC_SIGNATURE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - fntype
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 218
    functionName: TEMPLATE_OF_SET_FUNC_BODY
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_SET_FUNC_BODY(fntype)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 223
    functionName: TEMPLATE_OF_ADD_FUNC_SIGNATURE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_ADD_FUNC_SIGNATURE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - fntype
    - ','
    - pbtype
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 244
    functionName: TEMPLATE_OF_ADD_FUNC_BODY
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_ADD_FUNC_BODY(fntype, pbtype)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:246,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:247,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:248,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:249,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:250,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:254,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:254,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:258,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:258,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:262,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - d
    argTypes:
    - google::protobuf::Descriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 266
    functionName: mcpack2pb::is_map_entry
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Descriptor*::field
    - LOG
    - google::protobuf::Descriptor*::field_count
    linkageType: ''
    returnType: bool
    signature: bool is_map_entry(const google::protobuf::Descriptor* d)
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:272,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:272,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:273,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:273,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:274,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:276,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:276,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:277,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:278,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:279,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:280,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:281,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:282,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:283,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:283,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:284,1
    - Dst: TEMPLATE_OF_ADD_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:284,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:286,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:287,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:289,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:289,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:291,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:292,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:295,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:295,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:297,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:298,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:301,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:301,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:303,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:304,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:307,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:307,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:309,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:310,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:313,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:313,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:315,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:316,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:319,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:341,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:341,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:342,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:345,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:345,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:347,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:348,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:351,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:351,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:353,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:354,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:357,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:379,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:380,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:383,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:383,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:384,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:384,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:385,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:385,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:387,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:397,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:398,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:409,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:410,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:413,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:414,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:473,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:474,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:478,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:479,1
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/mcpack2pb/generator.cpp:483,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:484,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:485,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:486,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:487,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:487,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:489,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:490,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:491,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:492,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:492,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: TEMPLATE_OF_SET_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:496,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:497,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:499,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:499,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:501,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:502,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:505,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:505,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:507,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:508,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:511,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:511,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:513,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:514,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:517,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:517,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:519,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:520,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:523,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:523,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:525,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:526,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:529,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:529,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:531,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:532,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:535,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:535,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:537,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:538,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:541,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:547,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:547,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:548,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:552,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:565,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:566,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:569,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:569,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:570,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:578,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:579,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:584,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:590,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:647,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:648,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 94
    argCount: 4
    argNames:
    - d
    - ' ref_msgs'
    - ' ref_maps'
    - ' impl'
    argTypes:
    - google::protobuf::Descriptor*
    - std::set<std::string>
    - std::set<std::string>
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 268
    functionDepth: 2
    functionLinenumber: 268
    functionLinenumberEnd: 649
    functionName: mcpack2pb::generate_parsing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - Print
    - google::protobuf::FieldDescriptor*::is_optional
    - TEMPLATE_OF_ADD_FUNC_BODY
    - mcpack2pb::is_map_entry
    - google::protobuf::FieldDescriptor*::full_name
    - TEMPLATE_OF_ADD_FUNC_SIGNATURE
    - TEMPLATE_OF_SET_FUNC_SIGNATURE
    - insert
    - butil::string_printf
    - mcpack2pb::to_var_name
    - google::protobuf::Descriptor*::field_count
    - mcpack2pb::to_cpp_name
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::enum_type
    - TEMPLATE_OF_SET_FUNC_BODY
    - google::protobuf::FieldDescriptor*::lowercase_name
    - failed
    - mcpack2pb::field_to_string
    - google::protobuf::Descriptor*::field
    - google::protobuf::FieldDescriptor*::number
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: bool
    signature: "bool generate_parsing(const google::protobuf::Descriptor* d,\n                             std::set<std::string>
      & ref_msgs,\n                             std::set<std::string> & ref_maps,\n
      \                            google::protobuf::io::Printer& impl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - ','
    - looser_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 721
    functionName: TEMPLATE_SERIALIZE_REPEATED
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE_REPEATED(cit, printer, field, strict_cond, looser_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 721
    functionDepth: 0
    functionLinenumber: 721
    functionLinenumberEnd: 724
    functionName: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL(cit, printer, field, strict_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 753
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 753
    functionName: TEMPLATE_SERIALIZE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE(cit, printer, field, cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 757
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 757
    functionName: TEMPLATE_SERIALIZE_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE_INTEGRAL(cit, printer, field)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 13
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - ','
    - looser_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 826
    functionName: TEMPLATE_INNER_SERIALIZE_REPEATED
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: "TEMPLATE_INNER_SERIALIZE_REPEATED(msg, cit, printer, field,     \\\n
      \                                         strict_cond, looser_cond)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 829
    functionName: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL(msg, cit, printer, field,
      strict_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 852
    functionName: TEMPLATE_INNER_SERIALIZE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_INNER_SERIALIZE(msg, cit, printer, field, cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 856
      start: 853
    functionDepth: 0
    functionLinenumber: 853
    functionLinenumberEnd: 856
    functionName: TEMPLATE_INNER_SERIALIZE_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_INNER_SERIALIZE_INTEGRAL(msg, cit, printer, field)
  - BBCount: 72
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:861,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:861,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:862,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:862,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:863,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:871,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:872,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:876,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:879,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:880,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:881,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:882,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:886,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:888,1
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/mcpack2pb/generator.cpp:889,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:891,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:893,1
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/mcpack2pb/generator.cpp:894,1
    - Dst: mcpack2pb::describe_idl_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:895,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:897,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:897,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:898,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:899,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:900,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:900,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:901,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:902,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:906,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:911,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:915,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:919,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:924,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:929,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:930,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:932,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:933,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:937,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:937,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:943,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:943,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:944,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:945,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:948,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:949,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:949,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:950,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:950,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:953,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:957,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:958,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:960,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:961,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:963,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:966,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:969,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:972,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:975,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:978,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:981,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:984,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:987,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:990,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:991,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:992,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:993,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1000,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1006,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1007,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1018,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1019,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1021,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1022,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1025,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1027,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1029,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1030,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1031,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1032,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1033,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1034,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1035,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1036,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1037,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1040,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1041,1
    - Dst: mcpack2pb::to_mcpack_typestr_uppercase
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1041,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1042,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1043,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1044,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1046,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1046,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1047,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1048,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1051,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1051,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1052,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1054,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1066,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1067,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1068,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1069,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1074,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1080,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1089,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1090,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1092,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1093,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1094,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1095,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1099,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1100,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1105,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1106,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1110,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1111,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1115,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1116,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1120,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1121,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1125,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1126,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1127,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1129,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1130,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1131,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1134,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1134,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1139,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1143,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1144,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1145,1
    - Dst: TEMPLATE_INNER_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1151,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1151,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1154,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1155,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1159,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1160,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1164,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1165,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1169,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1170,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1171,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1173,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1174,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1175,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1178,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1178,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1183,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1187,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1188,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1191,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1192,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1193,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1197,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1201,1
    - Dst: TEMPLATE_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1207,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1210,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1214,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1218,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1223,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1224,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1226,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1227,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1231,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1237,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1237,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1238,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1239,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1242,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1242,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1243,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1249,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1250,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1254,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1255,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1258,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1260,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1264,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1265,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1280,1
    CyclomaticComplexity: 93
    EdgeCount: 93
    ICount: 249
    argCount: 4
    argNames:
    - d
    - ' ref_msgs'
    - ' ref_maps'
    - ' impl'
    argTypes:
    - google::protobuf::Descriptor*
    - std::set<std::string>
    - std::set<std::string>
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1281
      start: 857
    functionDepth: 2
    functionLinenumber: 857
    functionLinenumberEnd: 1281
    functionName: mcpack2pb::generate_serializing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::FieldDescriptor*::is_required
    - Print
    - google::protobuf::FieldDescriptor*::is_optional
    - mcpack2pb::is_map_entry
    - TEMPLATE_INNER_SERIALIZE
    - std::string::c_str
    - google::protobuf::FieldDescriptor*::full_name
    - mcpack2pb::to_mcpack_typestr
    - mcpack2pb::describe_idl_type
    - insert
    - mcpack2pb::to_mcpack_typestr_uppercase
    - google::protobuf::FieldDescriptor*::type
    - TEMPLATE_INNER_SERIALIZE_REPEATED
    - Indent
    - LOG
    - TEMPLATE_INNER_SERIALIZE_INTEGRAL
    - butil::string_printf
    - mcpack2pb::to_var_name
    - TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
    - mcpack2pb::get_idl_name
    - Outdent
    - google::protobuf::Descriptor*::field_count
    - CHECK
    - mcpack2pb::to_cpp_name
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::lowercase_name
    - failed
    - TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
    - mcpack2pb::field_to_string
    - google::protobuf::Descriptor*::field
    - google::protobuf::FieldDescriptor*::number
    - TEMPLATE_SERIALIZE_INTEGRAL
    - TEMPLATE_SERIALIZE
    - google::protobuf::FieldDescriptor*::options
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::name
    - TEMPLATE_SERIALIZE_REPEATED
    linkageType: ''
    returnType: bool
    signature: "bool generate_serializing(const google::protobuf::Descriptor* d,\n
      \                                std::set<std::string> & ref_msgs,\n                                 std::set<std::string>
      & ref_maps,\n                                 google::protobuf::io::Printer
      & impl)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1285,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1285,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1286,1
    - Dst: isdigit
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1287,1
    - Dst: isalpha
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1287,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1288,1
    - Dst: snprintf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1291,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1292,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' fname'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1296
      start: 1283
    functionDepth: 1
    functionLinenumber: 1283
    functionLinenumberEnd: 1296
    functionName: mcpack2pb::protobuf_style_normalize_filename
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::size
    - isalpha
    - std::string::reserve
    - isdigit
    - snprintf
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string protobuf_style_normalize_filename(const std::string & fname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1301,1
    - Dst: google::protobuf::FileDescriptor*::package
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1301,1
    - Dst: mcpack2pb::protobuf_style_normalize_filename
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1302,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1302,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1303,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1308,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1309,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1310,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1311,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1312,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1312,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1319,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1319,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1320,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1321,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1322,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1324,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1325,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1327,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1335,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1338,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1339,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1340,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1343,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 2
    argNames:
    - file
    - ' impl'
    argTypes:
    - google::protobuf::FileDescriptor*
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1344
      start: 1298
    functionDepth: 2
    functionLinenumber: 1298
    functionLinenumberEnd: 1344
    functionName: mcpack2pb::generate_registration
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - google::protobuf::Descriptor*::field
    - mcpack2pb::protobuf_style_normalize_filename
    - Print
    - mcpack2pb::get_idl_name
    - google::protobuf::FieldDescriptor*::lowercase_name
    - Outdent
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::FileDescriptor*::package
    - mcpack2pb::to_cpp_name
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type_count
    - google::protobuf::FileDescriptor*::message_type
    - google::protobuf::Descriptor*::full_name
    - Indent
    - failed
    - mcpack2pb::to_var_name
    linkageType: ''
    returnType: bool
    signature: "bool generate_registration(\n    const google::protobuf::FileDescriptor*
      file,\n    google::protobuf::io::Printer & impl)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FileDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1358,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1363,1
    - Dst: std::string::find_last_of
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1364,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1366,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1366,1
    - Dst: std::string::resize
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1369,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1370,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1373,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1374,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1379,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1381,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1383,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1389,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1390,1
    - Dst: generate_parsing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1391,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1392,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1394,1
    - Dst: generate_serializing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1397,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1398,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1400,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1403,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1403,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1404,1
    - Dst: generate_declarations
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1408,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1409,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1411,1
    - Dst: generate_registration
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1414,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1415,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1417,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 3
    argNames:
    - file
    - ctx
    - error
    argTypes:
    - google::protobuf::FileDescriptor*
    - google::protobuf::compiler::GeneratorContext*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1421
      start: 1354
    functionDepth: 1
    functionLinenumber: 1354
    functionLinenumberEnd: 1421
    functionName: mcpack2pb::McpackToProtobuf::Generate
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - generate_parsing
    - generate_serializing
    - std::string::c_str
    - google::protobuf::compiler::GeneratorContext*::OpenForInsert
    - google::protobuf::io::Printer::Print
    - std::string::resize
    - std::string::append
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type_count
    - std::string::find_last_of
    - google::protobuf::FileDescriptor*::message_type
    - generate_declarations
    - google::protobuf::Descriptor*::full_name
    - generate_registration
    - google::protobuf::FileDescriptor*::options
    - mcpack2pb::to_var_name
    linkageType: ''
    returnType: bool
    signature: "bool McpackToProtobuf::Generate(const google::protobuf::FileDescriptor*
      file,\n                                const std::string& /*parameter*/,\n                                google::protobuf::compiler::GeneratorContext*
      ctx,\n                                std::string* error) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:35,1
    - Dst: empty
      Src: /src/brpc/src/mcpack2pb/generator.cpp:36,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: mcpack2pb::get_idl_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::name
    - empty
    - google::protobuf::FieldDescriptor*::options
    linkageType: ''
    returnType: std::string
    signature: std::string & get_idl_name(const google::protobuf::FieldDescriptor*
      f)
  - BBCount: 10
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConvertibleIdlType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 53
    functionName: mcpack2pb::is_integral_type
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_integral_type(ConvertibleIdlType type)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:56,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:68,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 39
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 79
    functionName: mcpack2pb::field_to_string
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::FieldDescriptor*::enum_type
    linkageType: ''
    returnType: char
    signature: char * field_to_string(const google::protobuf::FieldDescriptor* f)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 103
    functionName: mcpack2pb::to_mcpack_typestr
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 3
    functionsReached:
    - google::protobuf::FieldDescriptor*::type
    linkageType: ''
    returnType: char
    signature: char * to_mcpack_typestr(const google::protobuf::FieldDescriptor* f)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 124
    functionName: mcpack2pb::to_mcpack_typestr
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 4
    functionsReached:
    - mcpack2pb::to_mcpack_typestr
    linkageType: ''
    returnType: char
    signature: "char * to_mcpack_typestr(ConvertibleIdlType type,\n                              const
      google::protobuf::FieldDescriptor* f)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:129,1
    - Dst: ::toupper
      Src: /src/brpc/src/mcpack2pb/generator.cpp:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 137
    functionName: mcpack2pb::to_mcpack_typestr_uppercase
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::to_mcpack_typestr
    - ::toupper
    linkageType: ''
    returnType: char
    signature: "char * to_mcpack_typestr_uppercase(\n    ConvertibleIdlType type,\n
      \   const google::protobuf::FieldDescriptor* f)"
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConvertibleIdlType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 157
    functionName: mcpack2pb::describe_idl_type
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * describe_idl_type(ConvertibleIdlType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:161,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 167
    functionName: mcpack2pb::to_var_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 4
    functionsReached:
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: std::string to_var_name(const std::string& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/mcpack2pb/generator.cpp:171,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:171,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:172,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:174,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:176,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 180
    functionName: mcpack2pb::to_cpp_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 3
    functionsReached:
    - mcpack2pb::size
    - std::string::push_back
    - std::string::append
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string to_cpp_name(const std::string& full_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/generator.cpp:186,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:186,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:187,1
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/generator.cpp:199,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:199,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:200,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' ref_msgs'
    - ' ref_maps'
    - ' decl'
    argTypes:
    - std::set<std::string>
    - std::set<std::string>
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 207
    functionName: mcpack2pb::generate_declarations
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - end
    - failed
    - Print
    - begin
    linkageType: ''
    returnType: bool
    signature: "bool generate_declarations(const std::set<std::string>& ref_msgs,\n
      \                          const std::set<std::string>& ref_maps,\n                           google::protobuf::io::Printer&
      decl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 212
    functionName: TEMPLATE_OF_SET_FUNC_SIGNATURE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_SET_FUNC_SIGNATURE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - fntype
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 218
    functionName: TEMPLATE_OF_SET_FUNC_BODY
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_SET_FUNC_BODY(fntype)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 223
    functionName: TEMPLATE_OF_ADD_FUNC_SIGNATURE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_ADD_FUNC_SIGNATURE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - fntype
    - ','
    - pbtype
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 244
    functionName: TEMPLATE_OF_ADD_FUNC_BODY
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_OF_ADD_FUNC_BODY(fntype, pbtype)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:246,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:247,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:248,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:249,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:250,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:254,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:254,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:258,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:258,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:262,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - d
    argTypes:
    - google::protobuf::Descriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 266
    functionName: mcpack2pb::is_map_entry
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::Descriptor*::field
    - LOG
    - google::protobuf::Descriptor*::field_count
    linkageType: ''
    returnType: bool
    signature: bool is_map_entry(const google::protobuf::Descriptor* d)
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:272,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:272,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:273,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:273,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:274,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:276,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:276,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:277,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:278,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:279,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:280,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:281,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:282,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:283,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:283,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:284,1
    - Dst: TEMPLATE_OF_ADD_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:284,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:286,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:287,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:289,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:289,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:291,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:292,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:295,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:295,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:297,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:298,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:301,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:301,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:303,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:304,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:307,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:307,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:309,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:310,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:313,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:313,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:315,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:316,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:319,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:341,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:341,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:342,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:345,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:345,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:347,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:348,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:351,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:351,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:353,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:354,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:357,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:379,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:380,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:383,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:383,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:384,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:384,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:385,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:385,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:387,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:397,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:398,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:409,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:410,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:413,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:414,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:473,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:474,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:478,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:479,1
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/mcpack2pb/generator.cpp:483,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:484,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:485,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:486,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:487,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:487,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:489,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:490,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:491,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:492,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:492,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: TEMPLATE_OF_SET_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:496,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:497,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:499,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:499,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:501,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:502,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:505,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:505,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:507,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:508,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:511,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:511,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:513,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:514,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:517,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:517,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:519,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:520,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:523,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:523,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:525,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:526,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:529,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:529,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:531,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:532,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:535,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:535,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:537,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:538,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:541,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:547,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:547,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:548,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:552,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:565,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:566,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:569,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:569,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:570,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:578,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:579,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:584,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:590,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:647,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:648,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 94
    argCount: 4
    argNames:
    - d
    - ' ref_msgs'
    - ' ref_maps'
    - ' impl'
    argTypes:
    - google::protobuf::Descriptor*
    - std::set<std::string>
    - std::set<std::string>
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 268
    functionDepth: 2
    functionLinenumber: 268
    functionLinenumberEnd: 649
    functionName: mcpack2pb::generate_parsing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - Print
    - google::protobuf::FieldDescriptor*::is_optional
    - TEMPLATE_OF_ADD_FUNC_BODY
    - mcpack2pb::is_map_entry
    - google::protobuf::FieldDescriptor*::full_name
    - TEMPLATE_OF_ADD_FUNC_SIGNATURE
    - TEMPLATE_OF_SET_FUNC_SIGNATURE
    - insert
    - butil::string_printf
    - mcpack2pb::to_var_name
    - google::protobuf::Descriptor*::field_count
    - mcpack2pb::to_cpp_name
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::enum_type
    - TEMPLATE_OF_SET_FUNC_BODY
    - google::protobuf::FieldDescriptor*::lowercase_name
    - failed
    - mcpack2pb::field_to_string
    - google::protobuf::Descriptor*::field
    - google::protobuf::FieldDescriptor*::number
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: bool
    signature: "bool generate_parsing(const google::protobuf::Descriptor* d,\n                             std::set<std::string>
      & ref_msgs,\n                             std::set<std::string> & ref_maps,\n
      \                            google::protobuf::io::Printer& impl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - ','
    - looser_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 721
    functionName: TEMPLATE_SERIALIZE_REPEATED
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE_REPEATED(cit, printer, field, strict_cond, looser_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 721
    functionDepth: 0
    functionLinenumber: 721
    functionLinenumberEnd: 724
    functionName: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL(cit, printer, field, strict_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 753
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 753
    functionName: TEMPLATE_SERIALIZE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE(cit, printer, field, cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - cit
    - ','
    - printer
    - ','
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 757
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 757
    functionName: TEMPLATE_SERIALIZE_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_SERIALIZE_INTEGRAL(cit, printer, field)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 13
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - ','
    - looser_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 826
    functionName: TEMPLATE_INNER_SERIALIZE_REPEATED
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: "TEMPLATE_INNER_SERIALIZE_REPEATED(msg, cit, printer, field,     \\\n
      \                                         strict_cond, looser_cond)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - strict_cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 829
    functionName: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL(msg, cit, printer, field,
      strict_cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - ','
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 852
    functionName: TEMPLATE_INNER_SERIALIZE
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_INNER_SERIALIZE(msg, cit, printer, field, cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - msg
    - ','
    - cit
    - ','
    - printer
    - ','
    - field
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 856
      start: 853
    functionDepth: 0
    functionLinenumber: 853
    functionLinenumberEnd: 856
    functionName: TEMPLATE_INNER_SERIALIZE_INTEGRAL
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TEMPLATE_INNER_SERIALIZE_INTEGRAL(msg, cit, printer, field)
  - BBCount: 72
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:861,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:861,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:862,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:862,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:863,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:871,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:872,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:876,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:879,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:880,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:881,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:882,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:886,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:888,1
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/mcpack2pb/generator.cpp:889,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:891,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:893,1
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/mcpack2pb/generator.cpp:894,1
    - Dst: mcpack2pb::describe_idl_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:895,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:897,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:897,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:898,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:899,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:900,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:900,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:901,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:902,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:906,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:911,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:915,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:919,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:924,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:929,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:930,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:932,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:933,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:937,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:937,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:943,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:943,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:944,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:945,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:948,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:949,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:949,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:950,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:950,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:953,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:957,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:958,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:960,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:961,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:963,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:966,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:969,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:972,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:975,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:978,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:981,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:984,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:987,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:990,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:991,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:992,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:993,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1000,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1006,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1007,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1018,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1019,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1021,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1022,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1025,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1027,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1029,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1030,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1031,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1032,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1033,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1034,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1035,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1036,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1037,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1040,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1041,1
    - Dst: mcpack2pb::to_mcpack_typestr_uppercase
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1041,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1042,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1043,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1044,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1046,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1046,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1047,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1048,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1051,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1051,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1052,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1054,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1066,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1067,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1068,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1069,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1074,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1080,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1089,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1090,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1092,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1093,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1094,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1095,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1099,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1100,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1105,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1106,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1110,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1111,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1115,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1116,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1120,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1121,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1125,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1126,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1127,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1129,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1130,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1131,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1134,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1134,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1139,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1143,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1144,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1145,1
    - Dst: TEMPLATE_INNER_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1151,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1151,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1154,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1155,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1159,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1160,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1164,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1165,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1169,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1170,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1171,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1173,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1174,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1175,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1178,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1178,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1183,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1187,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1188,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1191,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1192,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1193,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1197,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1201,1
    - Dst: TEMPLATE_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1207,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1210,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1214,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1218,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1223,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1224,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1226,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1227,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1231,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1237,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1237,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1238,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1239,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1242,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1242,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1243,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1249,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1250,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1254,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1255,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1258,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1260,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1264,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1265,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1280,1
    CyclomaticComplexity: 93
    EdgeCount: 93
    ICount: 249
    argCount: 4
    argNames:
    - d
    - ' ref_msgs'
    - ' ref_maps'
    - ' impl'
    argTypes:
    - google::protobuf::Descriptor*
    - std::set<std::string>
    - std::set<std::string>
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1281
      start: 857
    functionDepth: 2
    functionLinenumber: 857
    functionLinenumberEnd: 1281
    functionName: mcpack2pb::generate_serializing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::FieldDescriptor*::is_required
    - Print
    - google::protobuf::FieldDescriptor*::is_optional
    - mcpack2pb::is_map_entry
    - TEMPLATE_INNER_SERIALIZE
    - std::string::c_str
    - google::protobuf::FieldDescriptor*::full_name
    - mcpack2pb::to_mcpack_typestr
    - mcpack2pb::describe_idl_type
    - insert
    - mcpack2pb::to_mcpack_typestr_uppercase
    - google::protobuf::FieldDescriptor*::type
    - TEMPLATE_INNER_SERIALIZE_REPEATED
    - Indent
    - LOG
    - TEMPLATE_INNER_SERIALIZE_INTEGRAL
    - butil::string_printf
    - mcpack2pb::to_var_name
    - TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
    - mcpack2pb::get_idl_name
    - Outdent
    - google::protobuf::Descriptor*::field_count
    - CHECK
    - mcpack2pb::to_cpp_name
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::lowercase_name
    - failed
    - TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
    - mcpack2pb::field_to_string
    - google::protobuf::Descriptor*::field
    - google::protobuf::FieldDescriptor*::number
    - TEMPLATE_SERIALIZE_INTEGRAL
    - TEMPLATE_SERIALIZE
    - google::protobuf::FieldDescriptor*::options
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::name
    - TEMPLATE_SERIALIZE_REPEATED
    linkageType: ''
    returnType: bool
    signature: "bool generate_serializing(const google::protobuf::Descriptor* d,\n
      \                                std::set<std::string> & ref_msgs,\n                                 std::set<std::string>
      & ref_maps,\n                                 google::protobuf::io::Printer
      & impl)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1285,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1285,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1286,1
    - Dst: isdigit
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1287,1
    - Dst: isalpha
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1287,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1288,1
    - Dst: snprintf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1291,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1292,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' fname'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1296
      start: 1283
    functionDepth: 1
    functionLinenumber: 1283
    functionLinenumberEnd: 1296
    functionName: mcpack2pb::protobuf_style_normalize_filename
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::size
    - isalpha
    - std::string::reserve
    - isdigit
    - snprintf
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string protobuf_style_normalize_filename(const std::string & fname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1301,1
    - Dst: google::protobuf::FileDescriptor*::package
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1301,1
    - Dst: mcpack2pb::protobuf_style_normalize_filename
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1302,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1302,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1303,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1308,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1309,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1310,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1311,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1312,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1312,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1319,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1319,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1320,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1321,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1322,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1324,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1325,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1327,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1335,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1338,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1339,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1340,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1343,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 2
    argNames:
    - file
    - ' impl'
    argTypes:
    - google::protobuf::FileDescriptor*
    - google::protobuf::io::Printer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1344
      start: 1298
    functionDepth: 2
    functionLinenumber: 1298
    functionLinenumberEnd: 1344
    functionName: mcpack2pb::generate_registration
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - google::protobuf::Descriptor*::field
    - mcpack2pb::protobuf_style_normalize_filename
    - Print
    - mcpack2pb::get_idl_name
    - google::protobuf::FieldDescriptor*::lowercase_name
    - Outdent
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::FileDescriptor*::package
    - mcpack2pb::to_cpp_name
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type_count
    - google::protobuf::FileDescriptor*::message_type
    - google::protobuf::Descriptor*::full_name
    - Indent
    - failed
    - mcpack2pb::to_var_name
    linkageType: ''
    returnType: bool
    signature: "bool generate_registration(\n    const google::protobuf::FileDescriptor*
      file,\n    google::protobuf::io::Printer & impl)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FileDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1358,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1363,1
    - Dst: std::string::find_last_of
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1364,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1366,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1366,1
    - Dst: std::string::resize
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1369,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1370,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1373,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1374,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1379,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1381,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1383,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1389,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1390,1
    - Dst: generate_parsing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1391,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1392,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1394,1
    - Dst: generate_serializing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1397,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1398,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1400,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1403,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1403,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1404,1
    - Dst: generate_declarations
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1408,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1409,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1411,1
    - Dst: generate_registration
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1414,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1415,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1417,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 3
    argNames:
    - file
    - ctx
    - error
    argTypes:
    - google::protobuf::FileDescriptor*
    - google::protobuf::compiler::GeneratorContext*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1421
      start: 1354
    functionDepth: 1
    functionLinenumber: 1354
    functionLinenumberEnd: 1421
    functionName: mcpack2pb::McpackToProtobuf::Generate
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - generate_parsing
    - generate_serializing
    - std::string::c_str
    - google::protobuf::compiler::GeneratorContext*::OpenForInsert
    - google::protobuf::io::Printer::Print
    - std::string::resize
    - std::string::append
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type_count
    - std::string::find_last_of
    - google::protobuf::FileDescriptor*::message_type
    - generate_declarations
    - google::protobuf::Descriptor*::full_name
    - generate_registration
    - google::protobuf::FileDescriptor*::options
    - mcpack2pb::to_var_name
    linkageType: ''
    returnType: bool
    signature: "bool McpackToProtobuf::Generate(const google::protobuf::FileDescriptor*
      file,\n                                const std::string& /*parameter*/,\n                                google::protobuf::compiler::GeneratorContext*
      ctx,\n                                std::string* error) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::compiler::PluginMain
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1426,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1427
      start: 1424
    functionDepth: 0
    functionLinenumber: 1424
    functionLinenumberEnd: 1427
    functionName: main
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::compiler::PluginMain
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::FlatMap<std::string, MessageHandler>::string, MessageHandler>
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:33,1
    - Dst: init
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:34,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: mcpack2pb::init_handler_map
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap<std::string, MessageHandler>::string, MessageHandler>
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void init_handler_map()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:40,1
    - Dst: seek
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:42,1
    - Dst: exit
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' full_name'
    - ' handler'
    argTypes:
    - std::string
    - MessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 47
    functionName: mcpack2pb::register_message_handler_or_die
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.cpp
    functionUses: 0
    functionsReached:
    - seek
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: "void register_message_handler_or_die(const std::string& full_name,\n
      \                                    const MessageHandler& handler)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:50,1
    - Dst: seek
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: mcpack2pb::find_message_handler
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.cpp
    functionUses: 0
    functionsReached:
    - seek
    - pthread_once
    linkageType: ''
    returnType: MessageHandler
    signature: MessageHandler find_message_handler(const std::string& full_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::FlatMap<std::string, MessageHandler>::string, MessageHandler>
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:33,1
    - Dst: init
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:34,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: mcpack2pb::init_handler_map
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap<std::string, MessageHandler>::string, MessageHandler>
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void init_handler_map()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:40,1
    - Dst: seek
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:42,1
    - Dst: exit
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' full_name'
    - ' handler'
    argTypes:
    - std::string
    - MessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 47
    functionName: mcpack2pb::register_message_handler_or_die
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.cpp
    functionUses: 0
    functionsReached:
    - seek
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: "void register_message_handler_or_die(const std::string& full_name,\n
      \                                    const MessageHandler& handler)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:50,1
    - Dst: seek
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.cpp:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: mcpack2pb::find_message_handler
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.cpp
    functionUses: 0
    functionsReached:
    - seek
    - pthread_once
    linkageType: ''
    returnType: MessageHandler
    signature: MessageHandler find_message_handler(const std::string& full_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: mcpack2pb::FieldFixedHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: mcpack2pb::FieldFixedHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: mcpack2pb::FieldFixedHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: mcpack2pb::FieldFixedHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: mcpack2pb::FieldFixedHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldFixedHead::name_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:34,1
    - Dst: mcpack2pb::FieldFixedHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: mcpack2pb::FieldFixedHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldFixedHead::name_offset
    - mcpack2pb::FieldFixedHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: mcpack2pb::FieldFixedHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldFixedHead::value_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:36,1
    - Dst: mcpack2pb::FieldFixedHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: mcpack2pb::FieldFixedHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldFixedHead::value_size
    - mcpack2pb::FieldFixedHead::value_offset
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: mcpack2pb::FieldShortHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: mcpack2pb::FieldShortHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: mcpack2pb::FieldShortHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: mcpack2pb::FieldShortHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: mcpack2pb::FieldShortHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::name_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:50,1
    - Dst: mcpack2pb::FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: mcpack2pb::FieldShortHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::FieldShortHead::name_offset
    - mcpack2pb::FieldShortHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: mcpack2pb::FieldShortHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: mcpack2pb::FieldShortHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::value_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:53,1
    - Dst: mcpack2pb::FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: mcpack2pb::FieldShortHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldShortHead::value_offset
    - mcpack2pb::FieldShortHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: mcpack2pb::FieldLongHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: mcpack2pb::FieldLongHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: mcpack2pb::FieldLongHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: mcpack2pb::FieldLongHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: mcpack2pb::FieldLongHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::name_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:68,1
    - Dst: mcpack2pb::FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: mcpack2pb::FieldLongHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::FieldLongHead::name_offset
    - mcpack2pb::FieldLongHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: mcpack2pb::FieldLongHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: mcpack2pb::FieldLongHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::value_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:71,1
    - Dst: mcpack2pb::FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: mcpack2pb::FieldLongHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldLongHead::value_offset
    - mcpack2pb::FieldLongHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:86,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:87,1
    - Dst: value::size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:87,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:90,1
    - Dst: value::size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:90,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:92,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:95,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:96,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:98,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:100,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:101,1
    - Dst: set_end
      Src: /src/brpc/src/mcpack2pb/parser.cpp:105,1
    - Dst: peek1
      Src: /src/brpc/src/mcpack2pb/parser.cpp:107,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:110,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:111,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:111,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:112,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:112,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:113,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:115,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:115,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:117,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:118,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:118,1
    - Dst: ref_cut
      Src: /src/brpc/src/mcpack2pb/parser.cpp:121,1
    - Dst: FieldFixedHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:121,1
    - Dst: name::empty
      Src: /src/brpc/src/mcpack2pb/parser.cpp:122,1
    - Dst: name::remove_suffix
      Src: /src/brpc/src/mcpack2pb/parser.cpp:123,1
    - Dst: value::set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:125,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:125,1
    - Dst: FieldFixedHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:125,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:128,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:129,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:129,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:130,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:130,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:131,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:133,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:133,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:135,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:137,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:137,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:141,1
    - Dst: ref_cut
      Src: /src/brpc/src/mcpack2pb/parser.cpp:142,1
    - Dst: FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:142,1
    - Dst: name::empty
      Src: /src/brpc/src/mcpack2pb/parser.cpp:143,1
    - Dst: name::remove_suffix
      Src: /src/brpc/src/mcpack2pb/parser.cpp:144,1
    - Dst: value::set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:146,1
    - Dst: FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:146,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:149,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:150,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:150,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:151,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:151,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:152,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:154,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:154,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:156,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:158,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:158,1
    - Dst: ref_cut
      Src: /src/brpc/src/mcpack2pb/parser.cpp:161,1
    - Dst: FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:161,1
    - Dst: name::empty
      Src: /src/brpc/src/mcpack2pb/parser.cpp:162,1
    - Dst: name::remove_suffix
      Src: /src/brpc/src/mcpack2pb/parser.cpp:163,1
    - Dst: value::set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:165,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:165,1
    - Dst: FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:165,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 167
    functionName: ObjectIterator::operator++()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - FieldLongHead::full_size
    - ref_cut
    - name::remove_suffix
    - peek1
    - FieldShortHead::value_size
    - FieldShortHead::name_size
    - value::set
    - popn
    - FieldLongHead::name_size
    - left_size
    - FieldLongHead::value_size
    - value::size
    - cut_packed_pod
    - FieldFixedHead::value_size
    - FieldShortHead::type
    - FieldShortHead::full_size
    - CHECK
    - FieldFixedHead::full_size
    - FieldFixedHead::name_size
    - FieldFixedHead::type
    - name::empty
    - set_end
    - popped_bytes
    - FieldLongHead::type
    - set_bad
    linkageType: ''
    returnType: void
    signature: void ObjectIterator::operator++()
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:170,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:171,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:171,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:174,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:175,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:176,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:178,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:179,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:181,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:183,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:184,1
    - Dst: set_end
      Src: /src/brpc/src/mcpack2pb/parser.cpp:188,1
    - Dst: peek1
      Src: /src/brpc/src/mcpack2pb/parser.cpp:190,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:193,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:194,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:194,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:195,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:195,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:196,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:198,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:198,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:200,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:202,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:202,1
    - Dst: FieldFixedHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:205,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:207,1
    - Dst: set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:209,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:209,1
    - Dst: FieldFixedHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:209,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:212,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:213,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:213,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:214,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:214,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:215,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:217,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:217,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:219,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:221,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:221,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:225,1
    - Dst: FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:226,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:228,1
    - Dst: set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:230,1
    - Dst: FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:230,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:233,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:234,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:234,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:235,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:235,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:236,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:238,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:238,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:240,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:242,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:242,1
    - Dst: FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:245,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:247,1
    - Dst: set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:249,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:249,1
    - Dst: FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:249,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 251
    functionName: ArrayIterator::operator++()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - FieldLongHead::full_size
    - peek1
    - FieldShortHead::value_size
    - FieldShortHead::name_size
    - popn
    - FieldLongHead::name_size
    - left_size
    - FieldLongHead::value_size
    - size
    - cut_packed_pod
    - FieldFixedHead::value_size
    - FieldShortHead::type
    - FieldShortHead::full_size
    - CHECK
    - FieldFixedHead::full_size
    - FieldFixedHead::name_size
    - FieldFixedHead::type
    - set_end
    - popped_bytes
    - set
    - FieldLongHead::type
    - set_bad
    linkageType: ''
    returnType: void
    signature: void ArrayIterator::operator++()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: InputStream*::cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:255,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:256,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:259,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:260,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:260,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:260,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:263,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:264,1
    - Dst: FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:267,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:268,1
    - Dst: FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:271,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - stream
    argTypes:
    - InputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 272
    functionName: mcpack2pb::unbox
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - FieldLongHead::name_size
    - CHECK
    - mcpack2pb::type2str
    - InputStream*::cut_packed_pod
    - FieldLongHead::value_size
    - FieldLongHead::type
    linkageType: ''
    returnType: size_t
    signature: size_t unbox(InputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:276,1
    - Dst: type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' value'
    argTypes:
    - std::ostream
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 277
    functionName: '& operator<<(std::ostream& os, const UnparsedValue& value)'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - type
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const UnparsedValue& value)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:284,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:286,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:288,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:290,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:292,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:294,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:296,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:298,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:299,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:302,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:303,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:304,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:307,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:309,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:309,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:311,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:314,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:314,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:316,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:319,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:319,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:320,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 322
    functionName: mcpack2pb::UnparsedValue::as_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cut_packed_pod
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - set_bad
    linkageType: ''
    returnType: int64_t
    signature: int64_t UnparsedValue::as_int64(const char* var)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:327,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:331,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:332,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:336,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:340,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:341,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:345,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:349,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:350,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:354,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:358,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:359,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:363,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:365,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:367,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:369,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:371,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:373,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:373,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:375,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:378,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:378,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:380,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:383,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:383,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:384,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 56
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 386
    functionName: mcpack2pb::UnparsedValue::as_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t UnparsedValue::as_uint64(const char* var)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:391,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:393,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:395,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:397,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:398,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:399,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:400,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:401,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/mcpack2pb/parser.cpp:402,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:403,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:404,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/mcpack2pb/parser.cpp:405,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:410,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:412,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:414,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:415,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:418,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:419,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:420,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:423,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:424,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:427,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:428,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:429,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:432,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:434,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:434,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:436,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:439,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:439,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:441,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:444,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:444,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:445,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 55
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 447
    functionName: mcpack2pb::UnparsedValue::as_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cut_packed_pod
    - brpc::GetJsService::jquery_min
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - set_bad
    linkageType: ''
    returnType: int32_t
    signature: int32_t UnparsedValue::as_int32(const char* var)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:452,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:456,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:457,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:461,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:465,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:466,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:470,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:474,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:475,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:479,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:481,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:484,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:485,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:489,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:491,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:493,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:495,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:496,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:499,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:500,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:501,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:504,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:506,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:506,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:508,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:511,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:511,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:513,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:516,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:516,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:517,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 62
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 519
    functionName: mcpack2pb::UnparsedValue::as_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cut_packed_pod
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - set_bad
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t UnparsedValue::as_uint32(const char* var)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:524,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:526,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:528,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:530,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:532,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:534,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:536,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:538,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:540,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:542,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:542,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:544,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:547,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:547,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:549,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:552,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:552,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 555
    functionName: mcpack2pb::UnparsedValue::as_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: bool
    signature: bool UnparsedValue::as_bool(const char* var)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:559,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:561,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:563,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:563,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:564,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 566
    functionName: mcpack2pb::UnparsedValue::as_float
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: float
    signature: float UnparsedValue::as_float(const char* var)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:570,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:572,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:574,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:574,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:575,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 577
    functionName: mcpack2pb::UnparsedValue::as_double
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: double
    signature: double UnparsedValue::as_double(const char* var)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser.cpp:580,1
    - Dst: cutn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:581,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:582,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:585,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - out
    - var
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 586
    functionName: mcpack2pb::UnparsedValue::as_string
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cutn
    - std::string*::resize
    - CHECK
    - popn
    linkageType: ''
    returnType: void
    signature: void UnparsedValue::as_string(std::string* out, const char* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::UnparsedValue::as_string
      Src: /src/brpc/src/mcpack2pb/parser.cpp:590,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 588
    functionDepth: 1
    functionLinenumber: 588
    functionLinenumberEnd: 592
    functionName: mcpack2pb::UnparsedValue::as_string
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::UnparsedValue::as_string
    linkageType: ''
    returnType: std::string
    signature: std::string UnparsedValue::as_string(const char* var)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser.cpp:595,1
    - Dst: cutn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:596,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:597,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - var
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 600
    functionName: mcpack2pb::UnparsedValue::as_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cutn
    - std::string*::resize
    - CHECK
    linkageType: ''
    returnType: void
    signature: void UnparsedValue::as_binary(std::string* out, const char* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::UnparsedValue::as_binary
      Src: /src/brpc/src/mcpack2pb/parser.cpp:604,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 606
    functionName: mcpack2pb::UnparsedValue::as_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::UnparsedValue::as_binary
    linkageType: ''
    returnType: std::string
    signature: std::string UnparsedValue::as_binary(const char* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: mcpack2pb::FieldFixedHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: mcpack2pb::FieldFixedHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: mcpack2pb::FieldFixedHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: mcpack2pb::FieldFixedHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: mcpack2pb::FieldFixedHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldFixedHead::name_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:34,1
    - Dst: mcpack2pb::FieldFixedHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: mcpack2pb::FieldFixedHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::FieldFixedHead::name_offset
    - mcpack2pb::FieldFixedHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: mcpack2pb::FieldFixedHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldFixedHead::value_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:36,1
    - Dst: mcpack2pb::FieldFixedHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: mcpack2pb::FieldFixedHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldFixedHead::value_size
    - mcpack2pb::FieldFixedHead::value_offset
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: mcpack2pb::FieldShortHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: mcpack2pb::FieldShortHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: mcpack2pb::FieldShortHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: mcpack2pb::FieldShortHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: mcpack2pb::FieldShortHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::name_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:50,1
    - Dst: mcpack2pb::FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: mcpack2pb::FieldShortHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached:
    - mcpack2pb::FieldShortHead::name_offset
    - mcpack2pb::FieldShortHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: mcpack2pb::FieldShortHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: mcpack2pb::FieldShortHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldShortHead::value_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:53,1
    - Dst: mcpack2pb::FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: mcpack2pb::FieldShortHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldShortHead::value_offset
    - mcpack2pb::FieldShortHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: mcpack2pb::FieldLongHead::set_type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type(uint8_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: mcpack2pb::FieldLongHead::type
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: mcpack2pb::FieldLongHead::name_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: mcpack2pb::FieldLongHead::name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t name_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: mcpack2pb::FieldLongHead::set_name_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_name_size(size_t name_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::name_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:68,1
    - Dst: mcpack2pb::FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: mcpack2pb::FieldLongHead::value_offset
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached:
    - mcpack2pb::FieldLongHead::name_offset
    - mcpack2pb::FieldLongHead::name_size
    linkageType: ''
    returnType: size_t
    signature: size_t value_offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: mcpack2pb::FieldLongHead::value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: mcpack2pb::FieldLongHead::set_value_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value_size(size_t value_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::FieldLongHead::value_offset
      Src: /src/brpc/src/mcpack2pb/parser.cpp:71,1
    - Dst: mcpack2pb::FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: mcpack2pb::FieldLongHead::full_size
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::FieldLongHead::value_offset
    - mcpack2pb::FieldLongHead::value_size
    linkageType: ''
    returnType: size_t
    signature: size_t full_size() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:86,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:87,1
    - Dst: value::size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:87,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:90,1
    - Dst: value::size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:90,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:92,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:95,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:96,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:98,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:100,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:101,1
    - Dst: set_end
      Src: /src/brpc/src/mcpack2pb/parser.cpp:105,1
    - Dst: peek1
      Src: /src/brpc/src/mcpack2pb/parser.cpp:107,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:110,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:111,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:111,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:112,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:112,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:113,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:115,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:115,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:117,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:118,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:118,1
    - Dst: ref_cut
      Src: /src/brpc/src/mcpack2pb/parser.cpp:121,1
    - Dst: FieldFixedHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:121,1
    - Dst: name::empty
      Src: /src/brpc/src/mcpack2pb/parser.cpp:122,1
    - Dst: name::remove_suffix
      Src: /src/brpc/src/mcpack2pb/parser.cpp:123,1
    - Dst: value::set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:125,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:125,1
    - Dst: FieldFixedHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:125,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:128,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:129,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:129,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:130,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:130,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:131,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:133,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:133,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:135,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:137,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:137,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:141,1
    - Dst: ref_cut
      Src: /src/brpc/src/mcpack2pb/parser.cpp:142,1
    - Dst: FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:142,1
    - Dst: name::empty
      Src: /src/brpc/src/mcpack2pb/parser.cpp:143,1
    - Dst: name::remove_suffix
      Src: /src/brpc/src/mcpack2pb/parser.cpp:144,1
    - Dst: value::set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:146,1
    - Dst: FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:146,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:149,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:150,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:150,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:151,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:151,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:152,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:154,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:154,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:156,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:158,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:158,1
    - Dst: ref_cut
      Src: /src/brpc/src/mcpack2pb/parser.cpp:161,1
    - Dst: FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:161,1
    - Dst: name::empty
      Src: /src/brpc/src/mcpack2pb/parser.cpp:162,1
    - Dst: name::remove_suffix
      Src: /src/brpc/src/mcpack2pb/parser.cpp:163,1
    - Dst: value::set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:165,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:165,1
    - Dst: FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:165,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 167
    functionName: ObjectIterator::operator++()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - FieldLongHead::full_size
    - ref_cut
    - name::remove_suffix
    - peek1
    - FieldShortHead::value_size
    - FieldShortHead::name_size
    - value::set
    - popn
    - FieldLongHead::name_size
    - left_size
    - FieldLongHead::value_size
    - value::size
    - cut_packed_pod
    - FieldFixedHead::value_size
    - FieldShortHead::type
    - FieldShortHead::full_size
    - CHECK
    - FieldFixedHead::full_size
    - FieldFixedHead::name_size
    - FieldFixedHead::type
    - name::empty
    - set_end
    - popped_bytes
    - FieldLongHead::type
    - set_bad
    linkageType: ''
    returnType: void
    signature: void ObjectIterator::operator++()
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:170,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:171,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:171,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:174,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:175,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:176,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:178,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:179,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:181,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:183,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:184,1
    - Dst: set_end
      Src: /src/brpc/src/mcpack2pb/parser.cpp:188,1
    - Dst: peek1
      Src: /src/brpc/src/mcpack2pb/parser.cpp:190,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:193,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:194,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:194,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:195,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:195,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:196,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:198,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:198,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:200,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:202,1
    - Dst: FieldFixedHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:202,1
    - Dst: FieldFixedHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:205,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:207,1
    - Dst: set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:209,1
    - Dst: FieldFixedHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:209,1
    - Dst: FieldFixedHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:209,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:212,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:213,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:213,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:214,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:214,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:215,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:217,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:217,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:219,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:221,1
    - Dst: FieldShortHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:221,1
    - Dst: FieldShortHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:225,1
    - Dst: FieldShortHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:226,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:228,1
    - Dst: set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:230,1
    - Dst: FieldShortHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:230,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:233,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:234,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:234,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:235,1
    - Dst: left_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:235,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:236,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser.cpp:238,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:238,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:240,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:242,1
    - Dst: FieldLongHead::full_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:242,1
    - Dst: FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:245,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:247,1
    - Dst: set
      Src: /src/brpc/src/mcpack2pb/parser.cpp:249,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:249,1
    - Dst: FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:249,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 251
    functionName: ArrayIterator::operator++()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - FieldLongHead::full_size
    - peek1
    - FieldShortHead::value_size
    - FieldShortHead::name_size
    - popn
    - FieldLongHead::name_size
    - left_size
    - FieldLongHead::value_size
    - size
    - cut_packed_pod
    - FieldFixedHead::value_size
    - FieldShortHead::type
    - FieldShortHead::full_size
    - CHECK
    - FieldFixedHead::full_size
    - FieldFixedHead::name_size
    - FieldFixedHead::type
    - set_end
    - popped_bytes
    - set
    - FieldLongHead::type
    - set_bad
    linkageType: ''
    returnType: void
    signature: void ArrayIterator::operator++()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: InputStream*::cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:255,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:256,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:259,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:260,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:260,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:260,1
    - Dst: FieldLongHead::type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:263,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:264,1
    - Dst: FieldLongHead::name_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:267,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:268,1
    - Dst: FieldLongHead::value_size
      Src: /src/brpc/src/mcpack2pb/parser.cpp:271,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - stream
    argTypes:
    - InputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 272
    functionName: mcpack2pb::unbox
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - FieldLongHead::name_size
    - CHECK
    - mcpack2pb::type2str
    - InputStream*::cut_packed_pod
    - FieldLongHead::value_size
    - FieldLongHead::type
    linkageType: ''
    returnType: size_t
    signature: size_t unbox(InputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:276,1
    - Dst: type
      Src: /src/brpc/src/mcpack2pb/parser.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' value'
    argTypes:
    - std::ostream
    - UnparsedValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 277
    functionName: '& operator<<(std::ostream& os, const UnparsedValue& value)'
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - type
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const UnparsedValue& value)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:284,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:286,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:288,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:290,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:292,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:294,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:296,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:298,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:299,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:302,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:303,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:304,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:307,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:309,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:309,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:311,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:314,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:314,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:316,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:319,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:319,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:320,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 322
    functionName: mcpack2pb::UnparsedValue::as_int64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cut_packed_pod
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - set_bad
    linkageType: ''
    returnType: int64_t
    signature: int64_t UnparsedValue::as_int64(const char* var)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:327,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:331,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:332,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:336,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:340,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:341,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:345,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:349,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:350,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:354,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:358,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:359,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:363,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:365,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:367,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:369,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:371,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:373,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:373,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:375,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:378,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:378,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:380,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:383,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:383,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:384,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 56
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 386
    functionName: mcpack2pb::UnparsedValue::as_uint64
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t UnparsedValue::as_uint64(const char* var)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:391,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:393,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:395,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:397,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:398,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:399,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:400,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:401,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/mcpack2pb/parser.cpp:402,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:403,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:404,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/mcpack2pb/parser.cpp:405,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:410,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:412,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:414,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:415,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:418,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:419,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:420,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:423,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:424,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:427,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:428,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:429,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:432,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:434,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:434,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:436,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:439,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:439,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:441,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:444,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:444,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:445,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 55
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 447
    functionName: mcpack2pb::UnparsedValue::as_int32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cut_packed_pod
    - brpc::GetJsService::jquery_min
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - set_bad
    linkageType: ''
    returnType: int32_t
    signature: int32_t UnparsedValue::as_int32(const char* var)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:452,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:456,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:457,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:461,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:465,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:466,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:470,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:474,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:475,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:479,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:481,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:484,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:485,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:489,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:491,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:493,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:495,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:496,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:499,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:500,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/mcpack2pb/parser.cpp:501,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:504,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:506,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:506,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:508,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:511,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:511,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:513,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:516,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:516,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:517,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 62
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 519
    functionName: mcpack2pb::UnparsedValue::as_uint32
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - cut_packed_pod
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - set_bad
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t UnparsedValue::as_uint32(const char* var)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:524,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:526,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:528,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:530,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:532,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:534,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:536,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:538,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:540,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:542,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:542,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:544,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:547,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:547,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:549,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:552,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:552,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 555
    functionName: mcpack2pb::UnparsedValue::as_bool
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: bool
    signature: bool UnparsedValue::as_bool(const char* var)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:559,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:561,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:563,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:563,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:564,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 566
    functionName: mcpack2pb::UnparsedValue::as_float
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: float
    signature: float UnparsedValue::as_float(const char* var)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:570,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser.cpp:572,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:574,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser.cpp:574,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser.cpp:575,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 577
    functionName: mcpack2pb::UnparsedValue::as_double
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 0
    functionsReached:
    - type2str
    - CHECK
    - cut_packed_pod
    - set_bad
    linkageType: ''
    returnType: double
    signature: double UnparsedValue::as_double(const char* var)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser.cpp:580,1
    - Dst: cutn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:581,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:582,1
    - Dst: popn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:585,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - out
    - var
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 586
    functionName: mcpack2pb::UnparsedValue::as_string
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached:
    - cutn
    - std::string*::resize
    - CHECK
    - popn
    linkageType: ''
    returnType: void
    signature: void UnparsedValue::as_string(std::string* out, const char* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::UnparsedValue::as_string
      Src: /src/brpc/src/mcpack2pb/parser.cpp:590,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 588
    functionDepth: 1
    functionLinenumber: 588
    functionLinenumberEnd: 592
    functionName: mcpack2pb::UnparsedValue::as_string
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::UnparsedValue::as_string
    linkageType: ''
    returnType: std::string
    signature: std::string UnparsedValue::as_string(const char* var)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser.cpp:595,1
    - Dst: cutn
      Src: /src/brpc/src/mcpack2pb/parser.cpp:596,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser.cpp:597,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - var
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 600
    functionName: mcpack2pb::UnparsedValue::as_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 1
    functionsReached:
    - cutn
    - std::string*::resize
    - CHECK
    linkageType: ''
    returnType: void
    signature: void UnparsedValue::as_binary(std::string* out, const char* var)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::UnparsedValue::as_binary
      Src: /src/brpc/src/mcpack2pb/parser.cpp:604,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - var
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 606
    functionName: mcpack2pb::UnparsedValue::as_binary
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::UnparsedValue::as_binary
    linkageType: ''
    returnType: std::string
    signature: std::string UnparsedValue::as_binary(const char* var)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 47
    functionName: mcpack2pb::InputStream::popn
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - Next
    linkageType: ''
    returnType: size_t
    signature: size_t InputStream::popn(size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:53,1
    - Dst: memcpy
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:60,1
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:64,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 69
    functionName: mcpack2pb::InputStream::cutn
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - memcpy
    - Next
    linkageType: ''
    returnType: size_t
    signature: size_t InputStream::cutn(void* out, size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::InputStream::cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - packed_pod
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 81
    functionName: mcpack2pb::InputStream::cut_packed_pod
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::InputStream::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t InputStream::cut_packed_pod(T* packed_pod)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::InputStream::cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 95
    functionName: mcpack2pb::InputStream::cut_packed_pod
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::InputStream::cutn
    linkageType: ''
    returnType: T
    signature: T InputStream::cut_packed_pod()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:105,1
    - Dst: mcpack2pb::InputStream::cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:106,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - aux
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 111
    functionName: mcpack2pb::InputStream::ref_cut
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - std::string*::resize
    - mcpack2pb::InputStream::cutn
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece InputStream::ref_cut(std::string* aux, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:117,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: mcpack2pb::InputStream::peek1
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - Next
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t InputStream::peek1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObjectIterator
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: mcpack2pb::UnparsedValue::as_object
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - ObjectIterator
    linkageType: ''
    returnType: ObjectIterator
    signature: ObjectIterator UnparsedValue::as_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ArrayIterator
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: mcpack2pb::UnparsedValue::as_array
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - ArrayIterator
    linkageType: ''
    returnType: ArrayIterator
    signature: ArrayIterator UnparsedValue::as_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ISOArrayIterator
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 140
    functionName: mcpack2pb::UnparsedValue::as_iso_array
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - ISOArrayIterator
    linkageType: ''
    returnType: ISOArrayIterator
    signature: ISOArrayIterator UnparsedValue::as_iso_array()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:145,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:146,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:148,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:149,1
    - Dst: mcpack2pb::ObjectIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: mcpack2pb::ObjectIterator::init
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - popped_bytes
    - CHECK
    - cut_packed_pod
    - mcpack2pb::ObjectIterator::set_bad
    linkageType: ''
    returnType: void
    signature: void ObjectIterator::init(InputStream* stream, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:159,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:160,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:162,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:163,1
    - Dst: mcpack2pb::ArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: mcpack2pb::ArrayIterator::init
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - popped_bytes
    - CHECK
    - cut_packed_pod
    - mcpack2pb::ArrayIterator::set_bad
    linkageType: ''
    returnType: void
    signature: void ArrayIterator::init(InputStream* stream, size_t size)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:179,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:180,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:181,1
    - Dst: get_primitive_type_size
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:184,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:186,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:186,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:188,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:193,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:196,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 200
    functionName: mcpack2pb::ISOArrayIterator::init
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - mcpack2pb::ISOArrayIterator::set_bad
    - cut_packed_pod
    - get_primitive_type_size
    - CHECK
    - type2str
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator::init(InputStream* stream, size_t size)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: set_end
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:211,1
    - Dst: std::min
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:214,1
    - Dst: cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:216,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:218,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:219,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 222
    functionName: ISOArrayIterator::operator++()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - set_end
    - CHECK
    - cutn
    - set_bad
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator::operator++()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const int8_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:229,1
    - Dst: static_cast<const int16_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:231,1
    - Dst: static_cast<const int32_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:233,1
    - Dst: static_cast<const int64_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:235,1
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:237,1
    - Dst: static_cast<const uint16_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:239,1
    - Dst: static_cast<const uint32_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:241,1
    - Dst: static_cast<const uint64_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:243,1
    - Dst: static_cast<const bool*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:245,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 252
    functionName: mcpack2pb::ISOArrayIterator::as_integer
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 10
    functionsReached:
    - static_cast<const uint64_t*>
    - static_cast<const uint32_t*>
    - static_cast<const int64_t*>
    - static_cast<const bool*>
    - static_cast<const uint8_t*>
    - static_cast<const int16_t*>
    - static_cast<const int32_t*>
    - static_cast<const int8_t*>
    - static_cast<const uint16_t*>
    linkageType: ''
    returnType: T
    signature: T ISOArrayIterator::as_integer() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const float*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:258,1
    - Dst: static_cast<const double*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:260,1
    - Dst: T
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 263
    functionName: mcpack2pb::ISOArrayIterator::as_fp
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - static_cast<const float*>
    - T
    - static_cast<const double*>
    linkageType: ''
    returnType: T
    signature: T ISOArrayIterator::as_fp() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 47
    functionName: mcpack2pb::InputStream::popn
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - Next
    linkageType: ''
    returnType: size_t
    signature: size_t InputStream::popn(size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:53,1
    - Dst: memcpy
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:60,1
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:64,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 69
    functionName: mcpack2pb::InputStream::cutn
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 3
    functionsReached:
    - memcpy
    - Next
    linkageType: ''
    returnType: size_t
    signature: size_t InputStream::cutn(void* out, size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::InputStream::cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - packed_pod
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 81
    functionName: mcpack2pb::InputStream::cut_packed_pod
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::InputStream::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t InputStream::cut_packed_pod(T* packed_pod)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::InputStream::cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 95
    functionName: mcpack2pb::InputStream::cut_packed_pod
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::InputStream::cutn
    linkageType: ''
    returnType: T
    signature: T InputStream::cut_packed_pod()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:105,1
    - Dst: mcpack2pb::InputStream::cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:106,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - aux
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 111
    functionName: mcpack2pb::InputStream::ref_cut
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - std::string*::resize
    - mcpack2pb::InputStream::cutn
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece InputStream::ref_cut(std::string* aux, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:117,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: mcpack2pb::InputStream::peek1
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - Next
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t InputStream::peek1()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObjectIterator
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: mcpack2pb::UnparsedValue::as_object
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - ObjectIterator
    linkageType: ''
    returnType: ObjectIterator
    signature: ObjectIterator UnparsedValue::as_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ArrayIterator
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: mcpack2pb::UnparsedValue::as_array
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - ArrayIterator
    linkageType: ''
    returnType: ArrayIterator
    signature: ArrayIterator UnparsedValue::as_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ISOArrayIterator
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 140
    functionName: mcpack2pb::UnparsedValue::as_iso_array
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - ISOArrayIterator
    linkageType: ''
    returnType: ISOArrayIterator
    signature: ISOArrayIterator UnparsedValue::as_iso_array()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:145,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:146,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:148,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:149,1
    - Dst: mcpack2pb::ObjectIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: mcpack2pb::ObjectIterator::init
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - popped_bytes
    - CHECK
    - cut_packed_pod
    - mcpack2pb::ObjectIterator::set_bad
    linkageType: ''
    returnType: void
    signature: void ObjectIterator::init(InputStream* stream, size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:159,1
    - Dst: popped_bytes
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:160,1
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:162,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:163,1
    - Dst: mcpack2pb::ArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: mcpack2pb::ArrayIterator::init
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - popped_bytes
    - CHECK
    - cut_packed_pod
    - mcpack2pb::ArrayIterator::set_bad
    linkageType: ''
    returnType: void
    signature: void ArrayIterator::init(InputStream* stream, size_t size)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cut_packed_pod
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:179,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:180,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:181,1
    - Dst: get_primitive_type_size
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:184,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:186,1
    - Dst: type2str
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:186,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:188,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:193,1
    - Dst: mcpack2pb::ISOArrayIterator::set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:196,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 2
    argNames:
    - stream
    - size
    argTypes:
    - InputStream*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 200
    functionName: mcpack2pb::ISOArrayIterator::init
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - mcpack2pb::ISOArrayIterator::set_bad
    - cut_packed_pod
    - get_primitive_type_size
    - CHECK
    - type2str
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator::init(InputStream* stream, size_t size)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: set_end
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:211,1
    - Dst: std::min
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:214,1
    - Dst: cutn
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:216,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:218,1
    - Dst: set_bad
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:219,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 222
    functionName: ISOArrayIterator::operator++()
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - set_end
    - CHECK
    - cutn
    - set_bad
    linkageType: ''
    returnType: void
    signature: void ISOArrayIterator::operator++()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const int8_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:229,1
    - Dst: static_cast<const int16_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:231,1
    - Dst: static_cast<const int32_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:233,1
    - Dst: static_cast<const int64_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:235,1
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:237,1
    - Dst: static_cast<const uint16_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:239,1
    - Dst: static_cast<const uint32_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:241,1
    - Dst: static_cast<const uint64_t*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:243,1
    - Dst: static_cast<const bool*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:245,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 252
    functionName: mcpack2pb::ISOArrayIterator::as_integer
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 10
    functionsReached:
    - static_cast<const uint64_t*>
    - static_cast<const uint32_t*>
    - static_cast<const int64_t*>
    - static_cast<const bool*>
    - static_cast<const uint8_t*>
    - static_cast<const int16_t*>
    - static_cast<const int32_t*>
    - static_cast<const int8_t*>
    - static_cast<const uint16_t*>
    linkageType: ''
    returnType: T
    signature: T ISOArrayIterator::as_integer() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const float*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:258,1
    - Dst: static_cast<const double*>
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:260,1
    - Dst: T
      Src: /src/brpc/src/mcpack2pb/parser-inl.h:262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 263
    functionName: mcpack2pb::ISOArrayIterator::as_fp
    functionSourceFile: /src/brpc/src/mcpack2pb/parser-inl.h
    functionUses: 4
    functionsReached:
    - static_cast<const float*>
    - T
    - static_cast<const double*>
    linkageType: ''
    returnType: T
    signature: T ISOArrayIterator::as_fp() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:115,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - ::google::protobuf::Message*
    - ::butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 120
    functionName: mcpack2pb::MessageHandler::parse_from_iobuf_prefix
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - LOG
    - parse
    linkageType: ''
    returnType: size_t
    signature: "size_t MessageHandler::parse_from_iobuf_prefix(\n    ::google::protobuf::Message*
      msg, const ::butil::IOBuf& buf)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:125,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:129,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - ::google::protobuf::Message*
    - ::butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 130
    functionName: mcpack2pb::MessageHandler::parse_from_iobuf
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - size
    - LOG
    - parse
    linkageType: ''
    returnType: bool
    signature: "bool MessageHandler::parse_from_iobuf(\n    ::google::protobuf::Message*
      msg, const ::butil::IOBuf& buf)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:135,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - msg
    - data
    - size
    argTypes:
    - ::google::protobuf::Message*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 140
    functionName: mcpack2pb::MessageHandler::parse_from_array_prefix
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - LOG
    - parse
    linkageType: ''
    returnType: size_t
    signature: "size_t MessageHandler::parse_from_array_prefix(\n    ::google::protobuf::Message*
      msg, const void* data, int size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:145,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - msg
    - data
    - size
    argTypes:
    - ::google::protobuf::Message*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 150
    functionName: mcpack2pb::MessageHandler::parse_from_array
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - LOG
    - parse
    linkageType: ''
    returnType: bool
    signature: "bool MessageHandler::parse_from_array(\n    ::google::protobuf::Message*
      msg, const void* data, int size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:156,1
    - Dst: serialize
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - format
    argTypes:
    - ::google::protobuf::Message
    - ::butil::IOBuf*
    - SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 161
    functionName: mcpack2pb::MessageHandler::serialize_to_iobuf
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - serialize
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool MessageHandler::serialize_to_iobuf(\n    const ::google::protobuf::Message&
      msg,\n    ::butil::IOBuf* buf, SerializationFormat format)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:115,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - ::google::protobuf::Message*
    - ::butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 120
    functionName: mcpack2pb::MessageHandler::parse_from_iobuf_prefix
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - LOG
    - parse
    linkageType: ''
    returnType: size_t
    signature: "size_t MessageHandler::parse_from_iobuf_prefix(\n    ::google::protobuf::Message*
      msg, const ::butil::IOBuf& buf)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:125,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:129,1
    - Dst: size
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - ::google::protobuf::Message*
    - ::butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 130
    functionName: mcpack2pb::MessageHandler::parse_from_iobuf
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - size
    - LOG
    - parse
    linkageType: ''
    returnType: bool
    signature: "bool MessageHandler::parse_from_iobuf(\n    ::google::protobuf::Message*
      msg, const ::butil::IOBuf& buf)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:135,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - msg
    - data
    - size
    argTypes:
    - ::google::protobuf::Message*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 140
    functionName: mcpack2pb::MessageHandler::parse_from_array_prefix
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - LOG
    - parse
    linkageType: ''
    returnType: size_t
    signature: "size_t MessageHandler::parse_from_array_prefix(\n    ::google::protobuf::Message*
      msg, const void* data, int size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:145,1
    - Dst: parse
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - msg
    - data
    - size
    argTypes:
    - ::google::protobuf::Message*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 150
    functionName: mcpack2pb::MessageHandler::parse_from_array
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - LOG
    - parse
    linkageType: ''
    returnType: bool
    signature: "bool MessageHandler::parse_from_array(\n    ::google::protobuf::Message*
      msg, const void* data, int size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:156,1
    - Dst: serialize
      Src: /src/brpc/src/mcpack2pb/mcpack2pb.h:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - format
    argTypes:
    - ::google::protobuf::Message
    - ::butil::IOBuf*
    - SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 161
    functionName: mcpack2pb::MessageHandler::serialize_to_iobuf
    functionSourceFile: /src/brpc/src/mcpack2pb/mcpack2pb.h
    functionUses: 0
    functionsReached:
    - serialize
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool MessageHandler::serialize_to_iobuf(\n    const ::google::protobuf::Message&
      msg,\n    ::butil::IOBuf* buf, SerializationFormat format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - perr
    - ','
    - fmt
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: J2PERROR
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: J2PERROR(perr, fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - pb
    - ','
    - perr
    - ','
    - fmt
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: J2PERROR_WITH_PB
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: J2PERROR_WITH_PB(pb, perr, fmt, ...)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: IsNull
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:80,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:81,1
    - Dst: IsBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:82,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:83,1
    - Dst: GetBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:83,1
    - Dst: IsInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:84,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:85,1
    - Dst: GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:85,1
    - Dst: IsUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:86,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:87,1
    - Dst: GetUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:87,1
    - Dst: IsInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:88,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:89,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:89,1
    - Dst: IsUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:90,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:91,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:91,1
    - Dst: IsDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:92,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:93,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:93,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:94,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:95,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:97,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:98,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:99,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:100,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:101,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 2
    argNames:
    - ' value'
    - output
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 103
    functionName: json2pb::string_append_value
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - IsUint
    - IsDouble
    - std::string*::push_back
    - butil::string_appendf
    - IsInt64
    - GetUint64
    - GetStringLength
    - IsNull
    - GetBool
    - GetInt
    - IsBool
    - GetString
    - IsInt
    - IsUint64
    - IsArray
    - std::string*::append
    - GetDouble
    - IsString
    - GetUint
    - GetInt64
    - IsObject
    linkageType: ''
    returnType: void
    signature: "void string_append_value(const BUTIL_RAPIDJSON_NAMESPACE::Value& value,\n
      \                               std::string* output)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:113,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:115,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:116,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:118,1
    - Dst: json2pb::string_append_value
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:119,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:120,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:122,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - field
    - type
    - ' value'
    - err
    argTypes:
    - google::protobuf::FieldDescriptor*
    - char*
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 111
    functionDepth: 2
    functionLinenumber: 111
    functionLinenumberEnd: 128
    functionName: json2pb::value_invalid
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::FieldDescriptor*::is_optional
    - butil::string_appendf
    - std::string*::append
    - json2pb::string_append_value
    - std::string*::empty
    linkageType: ''
    returnType: bool
    signature: "bool value_invalid(const google::protobuf::FieldDescriptor* field,
      const char* type,\n                          const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value, std::string* err)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:140,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:142,1
    - Dst: std::numeric_limits<T>::quiet_NaN
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:143,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:147,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:148,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:152,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:153,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:156,1
    - Dst: typeid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:156,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 5
    argNames:
    - message
    - field
    - reflection
    - ' item'
    - err
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 131
    functionDepth: 3
    functionLinenumber: 131
    functionLinenumberEnd: 157
    functionName: json2pb::convert_string_to_double_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - json2pb::value_invalid
    - GetString
    - std::numeric_limits<T>::infinity
    - typeid
    - strcasecmp
    - std::numeric_limits<T>::quiet_NaN
    linkageType: ''
    returnType: bool
    signature: "bool convert_string_to_double_float_type(\n    void (google::protobuf::Reflection::*func)(\n
      \       google::protobuf::Message* message,\n        const google::protobuf::FieldDescriptor*
      field, T value) const,\n    google::protobuf::Message* message,\n    const google::protobuf::FieldDescriptor*
      field, \n    const google::protobuf::Reflection* reflection,\n    const BUTIL_RAPIDJSON_NAMESPACE::Value&
      item,\n    std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:164,1
    - Dst: google::protobuf::Reflection*::AddFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:166,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:166,1
    - Dst: google::protobuf::Reflection*::SetFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:168,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:168,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:170,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:171,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:178,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 4
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: json2pb::convert_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - IsString
    - json2pb::value_invalid
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::AddFloat
    - google::protobuf::Reflection*::SetFloat
    - IsNumber
    - GetDouble
    linkageType: ''
    returnType: bool
    signature: "bool convert_float_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,
      bool repeated,\n                               google::protobuf::Message* message,\n
      \                              const google::protobuf::FieldDescriptor* field,
      \n                               const google::protobuf::Reflection* reflection,\n
      \                              std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:188,1
    - Dst: google::protobuf::Reflection*::AddDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:190,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:190,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:192,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:192,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:194,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:195,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:202,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 183
    functionDepth: 4
    functionLinenumber: 183
    functionLinenumberEnd: 205
    functionName: json2pb::convert_double_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Reflection*::AddDouble
    - IsString
    - json2pb::value_invalid
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::SetDouble
    - IsNumber
    - GetDouble
    linkageType: ''
    returnType: bool
    signature: "bool convert_double_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,
      bool repeated,\n                                google::protobuf::Message* message,\n
      \                               const google::protobuf::FieldDescriptor* field,
      \n                                const google::protobuf::Reflection* reflection,\n
      \                               std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::IsInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:213,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:214,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:214,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:215,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:216,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:216,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:219,1
    - Dst: google::protobuf::Reflection*::AddEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:222,1
    - Dst: google::protobuf::Reflection*::SetEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 6
    argNames:
    - item
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 207
    functionDepth: 3
    functionLinenumber: 207
    functionLinenumberEnd: 227
    functionName: json2pb::convert_enum_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - json2pb::value_invalid
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsInt
    - google::protobuf::Reflection*::AddEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
    - google::protobuf::Reflection*::SetEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
    - google::protobuf::FieldDescriptor*::enum_type
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
    linkageType: ''
    returnType: bool
    signature: "bool convert_enum_type(const BUTIL_RAPIDJSON_NAMESPACE::Value&item,
      bool repeated,\n                              google::protobuf::Message* message,\n
      \                             const google::protobuf::FieldDescriptor* field,\n
      \                             const google::protobuf::Reflection* reflection,\n
      \                             std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:236,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:238,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:238,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:240,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:240,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:242,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:243,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:243,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:243,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:246,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:248,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 229
    functionDepth: 3
    functionLinenumber: 229
    functionLinenumberEnd: 254
    functionName: json2pb::convert_int64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - IsString
    - json2pb::value_invalid
    - IsInt64
    - GetString
    - google::protobuf::Reflection*::SetInt64
    - butil::StringToInt64
    - google::protobuf::Reflection*::AddInt64
    - GetStringLength
    - GetInt64
    linkageType: ''
    returnType: bool
    signature: "bool convert_int64_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,
      bool repeated,\n                               google::protobuf::Message* message,\n
      \                              const google::protobuf::FieldDescriptor* field,
      \n                               const google::protobuf::Reflection* reflection,\n
      \                              std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:263,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:265,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:265,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:267,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:267,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:269,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:270,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:270,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:270,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:273,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:275,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:278,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 256
    functionDepth: 3
    functionLinenumber: 256
    functionLinenumberEnd: 281
    functionName: json2pb::convert_uint64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - IsString
    - json2pb::value_invalid
    - GetString
    - GetUint64
    - google::protobuf::Reflection*::AddUInt64
    - IsUint64
    - GetStringLength
    - butil::StringToUint64
    - google::protobuf::Reflection*::SetUInt64
    linkageType: ''
    returnType: bool
    signature: "bool convert_uint64_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,\n
      \                               bool repeated,\n                                google::protobuf::Message*
      message,\n                                const google::protobuf::FieldDescriptor*
      field,\n                                const google::protobuf::Reflection*
      reflection,\n                                std::string* err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - value
    - ','
    - cpptype
    - ','
    - jsontype
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 311
    functionName: J2PCHECKTYPE
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: J2PCHECKTYPE(value, cpptype, jsontype)
  - BBCount: 38
    BranchProfiles: []
    Callsites:
    - Dst: IsNull
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:318,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:319,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:320,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:320,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:326,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:327,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:328,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:334,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:335,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:352,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:353,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:354,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:358,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:359,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:363,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:368,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:375,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:376,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:380,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:385,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:392,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:393,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:396,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:401,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:408,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:409,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:412,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:417,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:424,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:425,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:428,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:429,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:429,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:430,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:433,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:434,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:434,1
    - Dst: google::protobuf::Reflection*::AddString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:439,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:442,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:444,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:447,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:448,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:448,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:453,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:458,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:459,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:462,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:467,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:474,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:475,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:478,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:479,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:480,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:485,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:486,1
    CyclomaticComplexity: 47
    EdgeCount: 47
    ICount: 120
    argCount: 5
    argNames:
    - ' value'
    - field
    - message
    - ' options'
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 313
    functionDepth: 5
    functionLinenumber: 313
    functionLinenumberEnd: 492
    functionName: json2pb::JsonValueToProtoField
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::is_required
    - J2PERROR
    - json2pb::convert_uint64_type
    - CASE_FIELD_TYPE
    - json2pb::convert_double_type
    - std::string::c_str
    - google::protobuf::FieldDescriptor*::full_name
    - json2pb::convert_int64_type
    - GetStringLength
    - IsNull
    - google::protobuf::Reflection*::AddMessage
    - Size
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::Reflection*::SetString
    - GetString
    - json2pb::JsonValueToProtoMessage
    - butil::Base64Decode
    - google::protobuf::Reflection*::AddString
    - IsArray
    - google::protobuf::FieldDescriptor*::is_repeated
    - json2pb::convert_float_type
    - J2PCHECKTYPE
    - json2pb::convert_enum_type
    - google::protobuf::Reflection*::MutableMessage
    - J2PERROR_WITH_PB
    - google::protobuf::Message*::GetReflection
    - google::protobuf::FieldDescriptor*::cpp_type
    linkageType: ''
    returnType: bool
    signature: "bool JsonValueToProtoField(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value,\n                                  const google::protobuf::FieldDescriptor*
      field,\n                                  google::protobuf::Message* message,\n
      \                                 const Json2PbOptions& options,\n                                  std::string*
      err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - cpptype
    - ','
    - method
    - ','
    - jsontype
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 352
    functionName: CASE_FIELD_TYPE
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CASE_FIELD_TYPE(cpptype, method, jsontype)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:499,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:500,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:501,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:505,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:507,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:509,1
    - Dst: MemberBegin
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:512,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:512,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:513,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:514,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:515,1
    - Dst: std::string
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:516,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:516,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:517,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:518,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - ' value'
    - map_desc
    - message
    - ' options'
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 494
    functionDepth: 6
    functionLinenumber: 494
    functionLinenumberEnd: 523
    functionName: json2pb::JsonMapToProtoMap
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - J2PERROR
    - google::protobuf::FieldDescriptor*::full_name
    - std::string
    - MemberBegin
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
    - google::protobuf::Message*::GetReflection
    - IsObject
    - google::protobuf::Reflection*::AddMessage
    - MemberEnd
    - json2pb::JsonValueToProtoField
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
    - google::protobuf::Reflection*::SetString
    linkageType: ''
    returnType: bool
    signature: "bool JsonMapToProtoMap(const BUTIL_RAPIDJSON_NAMESPACE::Value& value,\n
      \                      const google::protobuf::FieldDescriptor* map_desc,\n
      \                      google::protobuf::Message* message,\n                       const
      Json2PbOptions& options,\n                       std::string* err)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:530,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:531,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:532,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:533,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:537,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:540,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:541,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:543,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:547,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:547,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:551,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:553,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:557,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:558,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:558,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:561,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:562,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:562,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:563,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:563,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:566,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:572,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:575,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:576,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:581,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:581,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:582,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:583,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:584,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:584,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:592,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:592,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:594,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:603,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:603,1
    - Dst: json2pb::JsonMapToProtoMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:605,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 53
    argCount: 5
    argNames:
    - ' json_value'
    - message
    - ' options'
    - err
    - root_val
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 525
    functionDepth: 7
    functionLinenumber: 525
    functionLinenumberEnd: 615
    functionName: json2pb::JsonValueToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::FieldDescriptor*::is_required
    - J2PERROR
    - google::protobuf::Message*::GetDescriptor
    - json2pb::JsonValueToProtoField
    - json2pb::IsProtobufMap
    - google::protobuf::FieldDescriptor*::full_name
    - BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
    - google::protobuf::Descriptor*::extension_range_count
    - MemberEnd
    - json2pb::JsonMapToProtoMap
    - json2pb::decode_name
    - FindMember
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - IsArray
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - std::vector::front
    - std::vector::reserve
    - google::protobuf::Descriptor*::field
    - std::vector::push_back
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - J2PERROR_WITH_PB
    - google::protobuf::Message*::GetReflection
    - google::protobuf::Descriptor*::extension_range
    - IsObject
    - data
    - std::vector::size
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: bool
    signature: "bool JsonValueToProtoMessage(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      json_value,\n                             google::protobuf::Message* message,\n
      \                            const Json2PbOptions& options,\n                             std::string*
      err,\n                             bool root_val)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:623,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:627,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:627,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:629,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:632,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:634,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:636,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:642,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:642,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:642,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:645,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 5
    argNames:
    - ' json_string'
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - std::string
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 617
    functionDepth: 8
    functionLinenumber: 617
    functionLinenumberEnd: 646
    functionName: json2pb::JsonToProtoMessageInline
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - json2pb::JsonValueToProtoMessage
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - J2PERROR_WITH_PB
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - c_str
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessageInline(const std::string& json_string, \n                        google::protobuf::Message*
      message,\n                        const Json2PbOptions& options,\n                        std::string*
      error,\n                        size_t* parsed_offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessageInline
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' json_string'
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - std::string
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 648
    functionDepth: 9
    functionLinenumber: 648
    functionLinenumberEnd: 654
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 49
    functionsReached:
    - json2pb::JsonToProtoMessageInline
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const std::string& json_string,\n                        google::protobuf::Message*
      message,\n                        const Json2PbOptions& options,\n                        std::string*
      error,\n                        size_t* parsed_offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:662,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - stream
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 656
    functionDepth: 1
    functionLinenumber: 656
    functionLinenumberEnd: 663
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 50
    functionsReached:
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream*
      stream,\n                        google::protobuf::Message* message,\n                        const
      Json2PbOptions& options,\n                        std::string* error,\n                        size_t*
      parsed_offset)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:671,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:675,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:677,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:680,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:682,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:684,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:690,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:690,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:690,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:693,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 5
    argNames:
    - reader
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - ZeroCopyStreamReader*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 665
    functionDepth: 8
    functionLinenumber: 665
    functionLinenumberEnd: 694
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 50
    functionsReached:
    - std::string*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - json2pb::JsonValueToProtoMessage
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - J2PERROR_WITH_PB
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(ZeroCopyStreamReader* reader,\n                        google::protobuf::Message*
      message,\n                        const Json2PbOptions& options,\n                        std::string*
      error,\n                        size_t* parsed_offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessageInline
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:699,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:699,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' json_string'
    - message
    - error
    argTypes:
    - std::string
    - google::protobuf::Message*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 700
      start: 696
    functionDepth: 9
    functionLinenumber: 696
    functionLinenumberEnd: 700
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 50
    functionsReached:
    - json2pb::JsonToProtoMessageInline
    - Json2PbOptions
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const std::string& json_string, \n                        google::protobuf::Message*
      message,\n                        std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessageInline
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:709,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:709,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - json_string
    - message
    - error
    argTypes:
    - std::string
    - google::protobuf::Message*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 706
    functionDepth: 9
    functionLinenumber: 706
    functionLinenumberEnd: 710
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 50
    functionsReached:
    - json2pb::JsonToProtoMessageInline
    - Json2PbOptions
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(std::string json_string, \n                        google::protobuf::Message*
      message,\n                        std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:715,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - stream
    - message
    - error
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 716
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 51
    functionsReached:
    - json2pb::JsonToProtoMessage
    - Json2PbOptions
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream
      *stream,\n                        google::protobuf::Message* message,\n                        std::string*
      error)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:722,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:723,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:724,1
    - Dst: google::protobuf::util::JsonToBinaryStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:726,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:727,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:728,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:730,1
    - Dst: google::protobuf::Message*::ParseFromCodedStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:737,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 4
    argNames:
    - json
    - message
    - ' options'
    - error
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - ProtoJson2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 718
    functionDepth: 1
    functionLinenumber: 718
    functionLinenumberEnd: 742
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 4
    functionsReached:
    - json2pb::GetTypeUrl
    - auto::ToString
    - google::protobuf::Message*::ParseFromCodedStream
    - json2pb::GetTypeResolver
    - TypeResolverUniqueptr::get
    - auto::ok
    - butil::IOBuf::IOBuf
    - google::protobuf::util::JsonToBinaryStream
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream*
      json,\n                             google::protobuf::Message* message,\n                             const
      ProtoJson2PbOptions& options,\n                             std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:746,1
    - Dst: size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:746,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:747,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' json'
    - message
    - ' options'
    - error
    argTypes:
    - std::string
    - google::protobuf::Message*
    - ProtoJson2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 744
    functionDepth: 1
    functionLinenumber: 744
    functionLinenumberEnd: 748
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 5
    functionsReached:
    - size
    - json2pb::ProtoJsonToProtoMessage
    - data
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(const std::string& json, google::protobuf::Message*
      message,\n                             const ProtoJson2PbOptions& options, std::string*
      error)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: IsNull
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:80,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:81,1
    - Dst: IsBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:82,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:83,1
    - Dst: GetBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:83,1
    - Dst: IsInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:84,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:85,1
    - Dst: GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:85,1
    - Dst: IsUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:86,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:87,1
    - Dst: GetUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:87,1
    - Dst: IsInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:88,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:89,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:89,1
    - Dst: IsUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:90,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:91,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:91,1
    - Dst: IsDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:92,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:93,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:93,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:94,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:95,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:97,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:98,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:99,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:100,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:101,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 2
    argNames:
    - ' value'
    - output
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 103
    functionName: json2pb::string_append_value
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - IsUint
    - IsDouble
    - std::string*::push_back
    - butil::string_appendf
    - IsInt64
    - GetUint64
    - GetStringLength
    - IsNull
    - GetBool
    - GetInt
    - IsBool
    - GetString
    - IsInt
    - IsUint64
    - IsArray
    - std::string*::append
    - GetDouble
    - IsString
    - GetUint
    - GetInt64
    - IsObject
    linkageType: ''
    returnType: void
    signature: "void string_append_value(const BUTIL_RAPIDJSON_NAMESPACE::Value& value,\n
      \                               std::string* output)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::is_optional
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:113,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:115,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:116,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:118,1
    - Dst: json2pb::string_append_value
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:119,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:120,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:122,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - field
    - type
    - ' value'
    - err
    argTypes:
    - google::protobuf::FieldDescriptor*
    - char*
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 111
    functionDepth: 2
    functionLinenumber: 111
    functionLinenumberEnd: 128
    functionName: json2pb::value_invalid
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 6
    functionsReached:
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::FieldDescriptor*::is_optional
    - butil::string_appendf
    - std::string*::append
    - json2pb::string_append_value
    - std::string*::empty
    linkageType: ''
    returnType: bool
    signature: "bool value_invalid(const google::protobuf::FieldDescriptor* field,
      const char* type,\n                          const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value, std::string* err)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:140,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:142,1
    - Dst: std::numeric_limits<T>::quiet_NaN
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:143,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:147,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:148,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:152,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:153,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:156,1
    - Dst: typeid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:156,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 5
    argNames:
    - message
    - field
    - reflection
    - ' item'
    - err
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 131
    functionDepth: 3
    functionLinenumber: 131
    functionLinenumberEnd: 157
    functionName: json2pb::convert_string_to_double_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 2
    functionsReached:
    - json2pb::value_invalid
    - GetString
    - std::numeric_limits<T>::infinity
    - typeid
    - strcasecmp
    - std::numeric_limits<T>::quiet_NaN
    linkageType: ''
    returnType: bool
    signature: "bool convert_string_to_double_float_type(\n    void (google::protobuf::Reflection::*func)(\n
      \       google::protobuf::Message* message,\n        const google::protobuf::FieldDescriptor*
      field, T value) const,\n    google::protobuf::Message* message,\n    const google::protobuf::FieldDescriptor*
      field, \n    const google::protobuf::Reflection* reflection,\n    const BUTIL_RAPIDJSON_NAMESPACE::Value&
      item,\n    std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:164,1
    - Dst: google::protobuf::Reflection*::AddFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:166,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:166,1
    - Dst: google::protobuf::Reflection*::SetFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:168,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:168,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:170,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:171,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:178,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 4
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: json2pb::convert_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - IsString
    - json2pb::value_invalid
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::AddFloat
    - google::protobuf::Reflection*::SetFloat
    - IsNumber
    - GetDouble
    linkageType: ''
    returnType: bool
    signature: "bool convert_float_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,
      bool repeated,\n                               google::protobuf::Message* message,\n
      \                              const google::protobuf::FieldDescriptor* field,
      \n                               const google::protobuf::Reflection* reflection,\n
      \                              std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:188,1
    - Dst: google::protobuf::Reflection*::AddDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:190,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:190,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:192,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:192,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:194,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:195,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:202,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 183
    functionDepth: 4
    functionLinenumber: 183
    functionLinenumberEnd: 205
    functionName: json2pb::convert_double_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Reflection*::AddDouble
    - IsString
    - json2pb::value_invalid
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::SetDouble
    - IsNumber
    - GetDouble
    linkageType: ''
    returnType: bool
    signature: "bool convert_double_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,
      bool repeated,\n                                google::protobuf::Message* message,\n
      \                               const google::protobuf::FieldDescriptor* field,
      \n                                const google::protobuf::Reflection* reflection,\n
      \                               std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::IsInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:213,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:214,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:214,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:215,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:216,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:216,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:219,1
    - Dst: google::protobuf::Reflection*::AddEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:222,1
    - Dst: google::protobuf::Reflection*::SetEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 6
    argNames:
    - item
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 207
    functionDepth: 3
    functionLinenumber: 207
    functionLinenumberEnd: 227
    functionName: json2pb::convert_enum_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - json2pb::value_invalid
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsInt
    - google::protobuf::Reflection*::AddEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
    - google::protobuf::Reflection*::SetEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
    - google::protobuf::FieldDescriptor*::enum_type
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
    linkageType: ''
    returnType: bool
    signature: "bool convert_enum_type(const BUTIL_RAPIDJSON_NAMESPACE::Value&item,
      bool repeated,\n                              google::protobuf::Message* message,\n
      \                             const google::protobuf::FieldDescriptor* field,\n
      \                             const google::protobuf::Reflection* reflection,\n
      \                             std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:236,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:238,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:238,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:240,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:240,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:242,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:243,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:243,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:243,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:246,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:248,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 229
    functionDepth: 3
    functionLinenumber: 229
    functionLinenumberEnd: 254
    functionName: json2pb::convert_int64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - IsString
    - json2pb::value_invalid
    - IsInt64
    - GetString
    - google::protobuf::Reflection*::SetInt64
    - butil::StringToInt64
    - google::protobuf::Reflection*::AddInt64
    - GetStringLength
    - GetInt64
    linkageType: ''
    returnType: bool
    signature: "bool convert_int64_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,
      bool repeated,\n                               google::protobuf::Message* message,\n
      \                              const google::protobuf::FieldDescriptor* field,
      \n                               const google::protobuf::Reflection* reflection,\n
      \                              std::string* err)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:263,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:265,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:265,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:267,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:267,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:269,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:270,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:270,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:270,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:273,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:275,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:278,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 6
    argNames:
    - ' item'
    - repeated
    - message
    - field
    - reflection
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - bool
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Reflection*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 256
    functionDepth: 3
    functionLinenumber: 256
    functionLinenumberEnd: 281
    functionName: json2pb::convert_uint64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - IsString
    - json2pb::value_invalid
    - GetString
    - GetUint64
    - google::protobuf::Reflection*::AddUInt64
    - IsUint64
    - GetStringLength
    - butil::StringToUint64
    - google::protobuf::Reflection*::SetUInt64
    linkageType: ''
    returnType: bool
    signature: "bool convert_uint64_type(const BUTIL_RAPIDJSON_NAMESPACE::Value& item,\n
      \                               bool repeated,\n                                google::protobuf::Message*
      message,\n                                const google::protobuf::FieldDescriptor*
      field,\n                                const google::protobuf::Reflection*
      reflection,\n                                std::string* err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - value
    - ','
    - cpptype
    - ','
    - jsontype
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 311
    functionName: J2PCHECKTYPE
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: J2PCHECKTYPE(value, cpptype, jsontype)
  - BBCount: 38
    BranchProfiles: []
    Callsites:
    - Dst: IsNull
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:318,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:319,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:320,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:320,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:326,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:327,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:328,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:334,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:335,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:352,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:353,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:354,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:358,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:359,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:363,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:368,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:375,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:376,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:380,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:385,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:392,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:393,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:396,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:401,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:408,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:409,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:412,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:417,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:424,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:425,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:428,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:429,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:429,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:430,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:433,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:434,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:434,1
    - Dst: google::protobuf::Reflection*::AddString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:439,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:442,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:444,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:447,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:448,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:448,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:453,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:458,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:459,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:462,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:467,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:474,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:475,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:478,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:479,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:480,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:485,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:486,1
    CyclomaticComplexity: 47
    EdgeCount: 47
    ICount: 120
    argCount: 5
    argNames:
    - ' value'
    - field
    - message
    - ' options'
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 313
    functionDepth: 8
    functionLinenumber: 313
    functionLinenumberEnd: 492
    functionName: json2pb::JsonValueToProtoField
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::is_required
    - J2PERROR
    - json2pb::convert_uint64_type
    - CASE_FIELD_TYPE
    - json2pb::convert_double_type
    - std::string::c_str
    - google::protobuf::FieldDescriptor*::full_name
    - json2pb::convert_int64_type
    - GetStringLength
    - IsNull
    - google::protobuf::Reflection*::AddMessage
    - Size
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::Reflection*::SetString
    - GetString
    - json2pb::JsonValueToProtoMessage
    - butil::Base64Decode
    - google::protobuf::Reflection*::AddString
    - IsArray
    - google::protobuf::FieldDescriptor*::is_repeated
    - json2pb::convert_float_type
    - J2PCHECKTYPE
    - json2pb::convert_enum_type
    - google::protobuf::Reflection*::MutableMessage
    - J2PERROR_WITH_PB
    - google::protobuf::Message*::GetReflection
    - google::protobuf::FieldDescriptor*::cpp_type
    linkageType: ''
    returnType: bool
    signature: "bool JsonValueToProtoField(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value,\n                                  const google::protobuf::FieldDescriptor*
      field,\n                                  google::protobuf::Message* message,\n
      \                                 const Json2PbOptions& options,\n                                  std::string*
      err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - cpptype
    - ','
    - method
    - ','
    - jsontype
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 352
    functionName: CASE_FIELD_TYPE
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CASE_FIELD_TYPE(cpptype, method, jsontype)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:499,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:500,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:501,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:505,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:507,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:509,1
    - Dst: MemberBegin
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:512,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:512,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:513,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:514,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:515,1
    - Dst: std::string
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:516,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:516,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:517,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:518,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - ' value'
    - map_desc
    - message
    - ' options'
    - err
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 494
    functionDepth: 6
    functionLinenumber: 494
    functionLinenumberEnd: 523
    functionName: json2pb::JsonMapToProtoMap
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - J2PERROR
    - google::protobuf::FieldDescriptor*::full_name
    - std::string
    - MemberBegin
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
    - google::protobuf::Message*::GetReflection
    - IsObject
    - google::protobuf::Reflection*::AddMessage
    - MemberEnd
    - json2pb::JsonValueToProtoField
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
    - google::protobuf::Reflection*::SetString
    linkageType: ''
    returnType: bool
    signature: "bool JsonMapToProtoMap(const BUTIL_RAPIDJSON_NAMESPACE::Value& value,\n
      \                      const google::protobuf::FieldDescriptor* map_desc,\n
      \                      google::protobuf::Message* message,\n                       const
      Json2PbOptions& options,\n                       std::string* err)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:530,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:531,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:532,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:533,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:537,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:540,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:541,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:543,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:547,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:547,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:551,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:553,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:557,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:558,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:558,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:561,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:562,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:562,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:563,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:563,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:566,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:572,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:575,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:576,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:581,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:581,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:582,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:583,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:584,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:584,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:592,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:592,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:594,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:603,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:603,1
    - Dst: json2pb::JsonMapToProtoMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:605,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 53
    argCount: 5
    argNames:
    - ' json_value'
    - message
    - ' options'
    - err
    - root_val
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 525
    functionDepth: 7
    functionLinenumber: 525
    functionLinenumberEnd: 615
    functionName: json2pb::JsonValueToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::FieldDescriptor*::is_required
    - J2PERROR
    - google::protobuf::Message*::GetDescriptor
    - json2pb::JsonValueToProtoField
    - json2pb::IsProtobufMap
    - google::protobuf::FieldDescriptor*::full_name
    - BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
    - google::protobuf::Descriptor*::extension_range_count
    - MemberEnd
    - json2pb::JsonMapToProtoMap
    - json2pb::decode_name
    - FindMember
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - IsArray
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - std::vector::front
    - std::vector::reserve
    - google::protobuf::Descriptor*::field
    - std::vector::push_back
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - J2PERROR_WITH_PB
    - google::protobuf::Message*::GetReflection
    - google::protobuf::Descriptor*::extension_range
    - IsObject
    - data
    - std::vector::size
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: bool
    signature: "bool JsonValueToProtoMessage(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      json_value,\n                             google::protobuf::Message* message,\n
      \                            const Json2PbOptions& options,\n                             std::string*
      err,\n                             bool root_val)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:623,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:627,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:627,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:629,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:632,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:634,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:636,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:642,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:642,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:642,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:645,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 5
    argNames:
    - ' json_string'
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - std::string
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 617
    functionDepth: 8
    functionLinenumber: 617
    functionLinenumberEnd: 646
    functionName: json2pb::JsonToProtoMessageInline
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 3
    functionsReached:
    - std::string*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - json2pb::JsonValueToProtoMessage
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - J2PERROR_WITH_PB
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - c_str
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessageInline(const std::string& json_string, \n                        google::protobuf::Message*
      message,\n                        const Json2PbOptions& options,\n                        std::string*
      error,\n                        size_t* parsed_offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessageInline
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' json_string'
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - std::string
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 648
    functionDepth: 9
    functionLinenumber: 648
    functionLinenumberEnd: 654
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 51
    functionsReached:
    - json2pb::JsonToProtoMessageInline
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const std::string& json_string,\n                        google::protobuf::Message*
      message,\n                        const Json2PbOptions& options,\n                        std::string*
      error,\n                        size_t* parsed_offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:662,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - stream
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 656
    functionDepth: 1
    functionLinenumber: 656
    functionLinenumberEnd: 663
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream*
      stream,\n                        google::protobuf::Message* message,\n                        const
      Json2PbOptions& options,\n                        std::string* error,\n                        size_t*
      parsed_offset)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:671,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:675,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:677,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:680,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:682,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:684,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:690,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:690,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:690,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:693,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 5
    argNames:
    - reader
    - message
    - ' options'
    - error
    - parsed_offset
    argTypes:
    - ZeroCopyStreamReader*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 665
    functionDepth: 8
    functionLinenumber: 665
    functionLinenumberEnd: 694
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - std::string*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - json2pb::JsonValueToProtoMessage
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - J2PERROR_WITH_PB
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(ZeroCopyStreamReader* reader,\n                        google::protobuf::Message*
      message,\n                        const Json2PbOptions& options,\n                        std::string*
      error,\n                        size_t* parsed_offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessageInline
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:699,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:699,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' json_string'
    - message
    - error
    argTypes:
    - std::string
    - google::protobuf::Message*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 700
      start: 696
    functionDepth: 9
    functionLinenumber: 696
    functionLinenumberEnd: 700
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - json2pb::JsonToProtoMessageInline
    - Json2PbOptions
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const std::string& json_string, \n                        google::protobuf::Message*
      message,\n                        std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessageInline
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:709,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:709,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - json_string
    - message
    - error
    argTypes:
    - std::string
    - google::protobuf::Message*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 706
    functionDepth: 9
    functionLinenumber: 706
    functionLinenumberEnd: 710
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - json2pb::JsonToProtoMessageInline
    - Json2PbOptions
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(std::string json_string, \n                        google::protobuf::Message*
      message,\n                        std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:715,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:715,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - stream
    - message
    - error
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 716
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 53
    functionsReached:
    - json2pb::JsonToProtoMessage
    - Json2PbOptions
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream
      *stream,\n                        google::protobuf::Message* message,\n                        std::string*
      error)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:722,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:723,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:724,1
    - Dst: google::protobuf::util::JsonToBinaryStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:726,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:727,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:728,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:730,1
    - Dst: google::protobuf::Message*::ParseFromCodedStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:737,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 4
    argNames:
    - json
    - message
    - ' options'
    - error
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - ProtoJson2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 718
    functionDepth: 1
    functionLinenumber: 718
    functionLinenumberEnd: 742
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 5
    functionsReached:
    - json2pb::GetTypeUrl
    - auto::ToString
    - google::protobuf::Message*::ParseFromCodedStream
    - json2pb::GetTypeResolver
    - TypeResolverUniqueptr::get
    - auto::ok
    - butil::IOBuf::IOBuf
    - google::protobuf::util::JsonToBinaryStream
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream*
      json,\n                             google::protobuf::Message* message,\n                             const
      ProtoJson2PbOptions& options,\n                             std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:746,1
    - Dst: size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:746,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:747,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' json'
    - message
    - ' options'
    - error
    argTypes:
    - std::string
    - google::protobuf::Message*
    - ProtoJson2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 744
    functionDepth: 1
    functionLinenumber: 744
    functionLinenumberEnd: 748
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 6
    functionsReached:
    - size
    - json2pb::ProtoJsonToProtoMessage
    - data
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(const std::string& json, google::protobuf::Message*
      message,\n                             const ProtoJson2PbOptions& options, std::string*
      error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: json2pb::ZeroCopyStreamReader::ZeroCopyStreamReader
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamReader(google::protobuf::io::ZeroCopyInputStream
      *stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::ReadBlockTail
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:33,1
    - Dst: Next
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:36,1
    - Dst: json2pb::ZeroCopyStreamReader::ReadBlockTail
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:37,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 42
    functionName: json2pb::ZeroCopyStreamReader::PeekAddr
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - Next
    - json2pb::ZeroCopyStreamReader::ReadBlockTail
    linkageType: ''
    returnType: char
    signature: char * PeekAddr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::PeekAddr
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 51
    functionName: json2pb::ZeroCopyStreamReader::TakeWithAddr
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamReader::PeekAddr
    linkageType: ''
    returnType: char
    signature: char * TakeWithAddr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::PeekAddr
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 61
    functionName: json2pb::ZeroCopyStreamReader::Take
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamReader::PeekAddr
    linkageType: ''
    returnType: char
    signature: char Take()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::PeekAddr
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: json2pb::ZeroCopyStreamReader::Peek
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamReader::PeekAddr
    linkageType: ''
    returnType: char
    signature: char Peek()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: json2pb::ZeroCopyStreamReader::ReadBlockTail
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ReadBlockTail()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: json2pb::ZeroCopyStreamReader::Tell
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t Tell()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: json2pb::ZeroCopyStreamReader::Put
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Put(char)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: json2pb::ZeroCopyStreamReader::Flush
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: json2pb::ZeroCopyStreamReader::PutBegin
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *PutBegin()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: json2pb::ZeroCopyStreamReader::PutEnd
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t PutEnd(char *)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: json2pb::ZeroCopyStreamReader::ZeroCopyStreamReader
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamReader(google::protobuf::io::ZeroCopyInputStream
      *stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::ReadBlockTail
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:33,1
    - Dst: Next
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:36,1
    - Dst: json2pb::ZeroCopyStreamReader::ReadBlockTail
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:37,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 42
    functionName: json2pb::ZeroCopyStreamReader::PeekAddr
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 3
    functionsReached:
    - Next
    - json2pb::ZeroCopyStreamReader::ReadBlockTail
    linkageType: ''
    returnType: char
    signature: char * PeekAddr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::PeekAddr
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 51
    functionName: json2pb::ZeroCopyStreamReader::TakeWithAddr
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamReader::PeekAddr
    linkageType: ''
    returnType: char
    signature: char * TakeWithAddr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::PeekAddr
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 61
    functionName: json2pb::ZeroCopyStreamReader::Take
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamReader::PeekAddr
    linkageType: ''
    returnType: char
    signature: char Take()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamReader::PeekAddr
      Src: /src/brpc/src/json2pb/zero_copy_stream_reader.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: json2pb::ZeroCopyStreamReader::Peek
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamReader::PeekAddr
    linkageType: ''
    returnType: char
    signature: char Peek()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: json2pb::ZeroCopyStreamReader::ReadBlockTail
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ReadBlockTail()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: json2pb::ZeroCopyStreamReader::Tell
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t Tell()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: json2pb::ZeroCopyStreamReader::Put
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Put(char)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: json2pb::ZeroCopyStreamReader::Flush
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: json2pb::ZeroCopyStreamReader::PutBegin
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *PutBegin()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: json2pb::ZeroCopyStreamReader::PutEnd
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t PutEnd(char *)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 48
    functionName: json2pb::Pb2JsonOptions::Pb2JsonOptions
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Pb2JsonOptions::Pb2JsonOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - Pb2JsonOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: json2pb::PbToJsonConverter::PbToJsonConverter
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PbToJsonConverter(const Pb2JsonOptions& opt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: '& ErrorText() const'
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & ErrorText() const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:71,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:72,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:74,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:75,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:77,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:80,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:84,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:84,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:88,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:90,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:96,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:98,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:100,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:105,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:105,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:106,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:106,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:110,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:114,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:116,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:116,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:118,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:119,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:126,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:127,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:133,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:134,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:136,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:136,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:137,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:143,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:146,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:148,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:152,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:153,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:156,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:158,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:160,1
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:161,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:162,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:167,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:172,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:175,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 56
    argCount: 3
    argNames:
    - ' message'
    - ' handler'
    - root_msg
    argTypes:
    - google::protobuf::Message
    - Handler
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 177
    functionName: json2pb::PbToJsonConverter::Convert
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::Reflection*::FieldSize
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::Reflection*::GetStringReference
    - std::vector::empty
    - json2pb::PbToJsonConverter::_PbFieldToJson
    - std::string::size
    - json2pb::IsProtobufMap
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::extension_range_count
    - std::string::data
    - size
    - google::protobuf::Reflection*::HasField
    - decode_name
    - google::protobuf::Reflection*::GetRepeatedMessage
    - EndObject
    - Key
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - google::protobuf::FieldDescriptor*::is_repeated
    - std::vector::front
    - std::vector::reserve
    - GetReflection
    - google::protobuf::Descriptor*::field
    - std::vector::push_back
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - StartObject
    - GetDescriptor
    - google::protobuf::Descriptor*::extension_range
    - data
    - std::vector::size
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: bool
    signature: bool PbToJsonConverter::Convert(const google::protobuf::Message& message,
      Handler& handler, bool root_msg)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:184,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:185,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:216,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:217,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:218,1
    - Dst: google::protobuf::Reflection*::GetRepeatedStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:220,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:225,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:226,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:226,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:226,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:228,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:228,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:228,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:231,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:234,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:235,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:238,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:239,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:239,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:239,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:241,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:241,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:241,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:248,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:249,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:250,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:253,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:255,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:255,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:255,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:259,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:259,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:263,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:268,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:269,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:269,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:269,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:271,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:271,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:278,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:279,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:280,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:282,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:282,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:287,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:290,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:290,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 73
    argCount: 3
    argNames:
    - ' message'
    - field
    - ' handler'
    argTypes:
    - google::protobuf::Message
    - google::protobuf::FieldDescriptor*
    - Handler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 298
    functionName: json2pb::PbToJsonConverter::_PbFieldToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Reflection*::FieldSize
    - EndArray
    - google::protobuf::Reflection*::GetStringReference
    - StartArray
    - google::protobuf::Reflection*::GetMessage
    - std::string::data
    - butil::Base64Encode
    - size
    - google::protobuf::FieldDescriptor*::type
    - String
    - google::protobuf::Reflection*::GetEnum
    - google::protobuf::Reflection*::GetRepeatedMessage
    - google::protobuf::Reflection*::GetRepeatedEnum
    - google::protobuf::FieldDescriptor*::is_repeated
    - json2pb::PbToJsonConverter::Convert
    - GetReflection
    - google::protobuf::Reflection*::GetRepeatedStringReference
    - data
    - google::protobuf::FieldDescriptor*::cpp_type
    - AddInt
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: "bool PbToJsonConverter::_PbFieldToJson(\n    const google::protobuf::Message&
      message,\n    const google::protobuf::FieldDescriptor* field,\n    Handler&
      handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - cpptype
    - ','
    - method
    - ','
    - valuetype
    - ','
    - handle
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 204
    functionName: CASE_FIELD_TYPE
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CASE_FIELD_TYPE(cpptype, method, valuetype, handle)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:308,1
    - Dst: PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:311,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:314,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:315,1
    - Dst: PbToJsonConverter::ErrorText
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:315,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 4
    argNames:
    - ' message'
    - ' options'
    - ' os'
    - error
    argTypes:
    - google::protobuf::Message
    - Pb2JsonOptions
    - OutputStream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 318
    functionName: json2pb::ProtoMessageToJsonStream
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - PbToJsonConverter::ErrorText
    - std::string*::clear
    - PbToJsonConverter::Convert
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJsonStream(const google::protobuf::Message& message,\n
      \                             const Pb2JsonOptions& options,\n                              OutputStream&
      os, std::string* error)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:328,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:328,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:328,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - std::string*
    - Pb2JsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 320
    functionDepth: 2
    functionLinenumber: 320
    functionLinenumberEnd: 332
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 50
    functionsReached:
    - json2pb::ProtoMessageToJsonStream
    - std::string*::append
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       std::string* json,\n                        const Pb2JsonOptions&
      options,\n                        std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:336,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' message'
    - json
    - error
    argTypes:
    - google::protobuf::Message
    - std::string*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 334
    functionDepth: 1
    functionLinenumber: 334
    functionLinenumberEnd: 337
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 51
    functionsReached:
    - json2pb::ProtoMessageToJson
    - Pb2JsonOptions
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       std::string* json, std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' message'
    - stream
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - Pb2JsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 339
    functionDepth: 2
    functionLinenumber: 339
    functionLinenumberEnd: 344
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 51
    functionsReached:
    - json2pb::ProtoMessageToJsonStream
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       google::protobuf::io::ZeroCopyOutputStream* stream,\n
      \                       const Pb2JsonOptions& options, std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:349,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:349,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' message'
    - stream
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 52
    functionsReached:
    - json2pb::ProtoMessageToJson
    - Pb2JsonOptions
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       google::protobuf::io::ZeroCopyOutputStream* stream,\n
      \                       std::string* error)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:355,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:357,1
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:361,1
    - Dst: google::protobuf::util::BinaryToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:363,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:364,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:364,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:366,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:368,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - Pb2ProtoJsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 371
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::util::BinaryToJsonStream
    - json2pb::GetTypeUrl
    - auto::ToString
    - json2pb::GetTypeResolver
    - SerializeToZeroCopyStream
    - TypeResolverUniqueptr::get
    - auto::ok
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,\n
      \                            google::protobuf::io::ZeroCopyOutputStream* json,\n
      \                            const Pb2ProtoJsonOptions& options, std::string*
      error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - std::string*
    - Pb2ProtoJsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 377
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 5
    functionsReached:
    - json2pb::ProtoMessageToProtoJson
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,
      std::string* json,\n                             const Pb2ProtoJsonOptions&
      options, std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 48
    functionName: json2pb::Pb2JsonOptions::Pb2JsonOptions
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Pb2JsonOptions::Pb2JsonOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - Pb2JsonOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: json2pb::PbToJsonConverter::PbToJsonConverter
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PbToJsonConverter(const Pb2JsonOptions& opt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: '& ErrorText() const'
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & ErrorText() const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:71,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:72,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:74,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:75,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:77,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:80,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:84,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:84,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:88,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:90,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:96,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:98,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:100,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:105,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:105,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:106,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:106,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:110,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:114,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:116,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:116,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:118,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:119,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:126,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:127,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:133,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:134,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:136,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:136,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:137,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:143,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:146,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:148,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:152,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:153,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:156,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:158,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:160,1
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:161,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:162,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:167,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:172,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:175,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 56
    argCount: 3
    argNames:
    - ' message'
    - ' handler'
    - root_msg
    argTypes:
    - google::protobuf::Message
    - Handler
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 177
    functionName: json2pb::PbToJsonConverter::Convert
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::Reflection*::FieldSize
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::Reflection*::GetStringReference
    - std::vector::empty
    - json2pb::PbToJsonConverter::_PbFieldToJson
    - std::string::size
    - json2pb::IsProtobufMap
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::extension_range_count
    - std::string::data
    - size
    - google::protobuf::Reflection*::HasField
    - decode_name
    - google::protobuf::Reflection*::GetRepeatedMessage
    - EndObject
    - Key
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - google::protobuf::FieldDescriptor*::is_repeated
    - std::vector::front
    - std::vector::reserve
    - GetReflection
    - google::protobuf::Descriptor*::field
    - std::vector::push_back
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - StartObject
    - GetDescriptor
    - google::protobuf::Descriptor*::extension_range
    - data
    - std::vector::size
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: bool
    signature: bool PbToJsonConverter::Convert(const google::protobuf::Message& message,
      Handler& handler, bool root_msg)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:184,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:185,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:216,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:217,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:218,1
    - Dst: google::protobuf::Reflection*::GetRepeatedStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:220,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:225,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:226,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:226,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:226,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:228,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:228,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:228,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:231,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:234,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:235,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:238,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:239,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:239,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:239,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:241,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:241,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:241,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:248,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:249,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:250,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:253,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:255,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:255,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:255,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:259,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:259,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:263,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:268,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:269,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:269,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:269,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:271,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:271,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:278,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:279,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:280,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:282,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:282,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:287,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:290,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:290,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 73
    argCount: 3
    argNames:
    - ' message'
    - field
    - ' handler'
    argTypes:
    - google::protobuf::Message
    - google::protobuf::FieldDescriptor*
    - Handler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 298
    functionName: json2pb::PbToJsonConverter::_PbFieldToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::Reflection*::FieldSize
    - EndArray
    - google::protobuf::Reflection*::GetStringReference
    - StartArray
    - google::protobuf::Reflection*::GetMessage
    - std::string::data
    - butil::Base64Encode
    - size
    - google::protobuf::FieldDescriptor*::type
    - String
    - google::protobuf::Reflection*::GetEnum
    - google::protobuf::Reflection*::GetRepeatedMessage
    - google::protobuf::Reflection*::GetRepeatedEnum
    - google::protobuf::FieldDescriptor*::is_repeated
    - json2pb::PbToJsonConverter::Convert
    - GetReflection
    - google::protobuf::Reflection*::GetRepeatedStringReference
    - data
    - google::protobuf::FieldDescriptor*::cpp_type
    - AddInt
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: "bool PbToJsonConverter::_PbFieldToJson(\n    const google::protobuf::Message&
      message,\n    const google::protobuf::FieldDescriptor* field,\n    Handler&
      handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - cpptype
    - ','
    - method
    - ','
    - valuetype
    - ','
    - handle
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 204
    functionName: CASE_FIELD_TYPE
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CASE_FIELD_TYPE(cpptype, method, valuetype, handle)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:308,1
    - Dst: PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:311,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:314,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:315,1
    - Dst: PbToJsonConverter::ErrorText
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:315,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 4
    argNames:
    - ' message'
    - ' options'
    - ' os'
    - error
    argTypes:
    - google::protobuf::Message
    - Pb2JsonOptions
    - OutputStream
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 318
    functionName: json2pb::ProtoMessageToJsonStream
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 2
    functionsReached:
    - std::string*::append
    - PbToJsonConverter::ErrorText
    - std::string*::clear
    - PbToJsonConverter::Convert
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJsonStream(const google::protobuf::Message& message,\n
      \                             const Pb2JsonOptions& options,\n                              OutputStream&
      os, std::string* error)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:328,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:328,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:328,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - std::string*
    - Pb2JsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 320
    functionDepth: 2
    functionLinenumber: 320
    functionLinenumberEnd: 332
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 52
    functionsReached:
    - json2pb::ProtoMessageToJsonStream
    - std::string*::append
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       std::string* json,\n                        const Pb2JsonOptions&
      options,\n                        std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:336,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' message'
    - json
    - error
    argTypes:
    - google::protobuf::Message
    - std::string*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 334
    functionDepth: 1
    functionLinenumber: 334
    functionLinenumberEnd: 337
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 53
    functionsReached:
    - json2pb::ProtoMessageToJson
    - Pb2JsonOptions
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       std::string* json, std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' message'
    - stream
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - Pb2JsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 339
    functionDepth: 2
    functionLinenumber: 339
    functionLinenumberEnd: 344
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 53
    functionsReached:
    - json2pb::ProtoMessageToJsonStream
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       google::protobuf::io::ZeroCopyOutputStream* stream,\n
      \                       const Pb2JsonOptions& options, std::string* error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:349,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:349,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' message'
    - stream
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 54
    functionsReached:
    - json2pb::ProtoMessageToJson
    - Pb2JsonOptions
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                       google::protobuf::io::ZeroCopyOutputStream* stream,\n
      \                       std::string* error)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:355,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:357,1
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:361,1
    - Dst: google::protobuf::util::BinaryToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:363,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:364,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:364,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:366,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:368,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - Pb2ProtoJsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 371
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 5
    functionsReached:
    - google::protobuf::util::BinaryToJsonStream
    - json2pb::GetTypeUrl
    - auto::ToString
    - json2pb::GetTypeResolver
    - SerializeToZeroCopyStream
    - TypeResolverUniqueptr::get
    - auto::ok
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,\n
      \                            google::protobuf::io::ZeroCopyOutputStream* json,\n
      \                            const Pb2ProtoJsonOptions& options, std::string*
      error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - std::string*
    - Pb2ProtoJsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 377
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 6
    functionsReached:
    - json2pb::ProtoMessageToProtoJson
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,
      std::string* json,\n                             const Pb2ProtoJsonOptions&
      options, std::string* error)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/json2pb/encode_decode.cpp:29,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:36,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:37,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:38,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 2
    argNames:
    - ' str'
    - index
    argTypes:
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 43
    functionName: json2pb::match_pattern
    functionSourceFile: /src/brpc/src/json2pb/encode_decode.cpp
    functionUses: 0
    functionsReached:
    - size
    - isdigit
    linkageType: ''
    returnType: int
    signature: int match_pattern(const std::string& str, int index)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/json2pb/encode_decode.cpp:49,1
    - Dst: end
      Src: /src/brpc/src/json2pb/encode_decode.cpp:49,1
    - Dst: isalnum
      Src: /src/brpc/src/json2pb/encode_decode.cpp:50,1
    - Dst: begin
      Src: /src/brpc/src/json2pb/encode_decode.cpp:52,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:53,1
    - Dst: clear
      Src: /src/brpc/src/json2pb/encode_decode.cpp:55,1
    - Dst: reserve
      Src: /src/brpc/src/json2pb/encode_decode.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/json2pb/encode_decode.cpp:56,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:59,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:72,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:78,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - ' content'
    - ' encoded_content'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 81
    functionName: json2pb::encode_name
    functionSourceFile: /src/brpc/src/json2pb/encode_decode.cpp
    functionUses: 2
    functionsReached:
    - append
    - end
    - isdigit
    - size
    - clear
    - begin
    - isalnum
    - reserve
    linkageType: ''
    returnType: bool
    signature: bool encode_name(const std::string& content, std::string& encoded_content)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/json2pb/encode_decode.cpp:88,1
    - Dst: end
      Src: /src/brpc/src/json2pb/encode_decode.cpp:88,1
    - Dst: json2pb::match_pattern
      Src: /src/brpc/src/json2pb/encode_decode.cpp:92,1
    - Dst: clear
      Src: /src/brpc/src/json2pb/encode_decode.cpp:95,1
    - Dst: reserve
      Src: /src/brpc/src/json2pb/encode_decode.cpp:96,1
    - Dst: size
      Src: /src/brpc/src/json2pb/encode_decode.cpp:96,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:99,1
    - Dst: push_back
      Src: /src/brpc/src/json2pb/encode_decode.cpp:100,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/json2pb/encode_decode.cpp:100,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - ' content'
    - ' decoded_content'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 112
    functionName: json2pb::decode_name
    functionSourceFile: /src/brpc/src/json2pb/encode_decode.cpp
    functionUses: 4
    functionsReached:
    - append
    - end
    - size
    - static_cast<char>
    - push_back
    - clear
    - begin
    - reserve
    - json2pb::match_pattern
    linkageType: ''
    returnType: bool
    signature: bool decode_name(const std::string& content, std::string& decoded_content)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/json2pb/encode_decode.cpp:29,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:36,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:37,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:38,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 2
    argNames:
    - ' str'
    - index
    argTypes:
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 43
    functionName: json2pb::match_pattern
    functionSourceFile: /src/brpc/src/json2pb/encode_decode.cpp
    functionUses: 1
    functionsReached:
    - size
    - isdigit
    linkageType: ''
    returnType: int
    signature: int match_pattern(const std::string& str, int index)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/json2pb/encode_decode.cpp:49,1
    - Dst: end
      Src: /src/brpc/src/json2pb/encode_decode.cpp:49,1
    - Dst: isalnum
      Src: /src/brpc/src/json2pb/encode_decode.cpp:50,1
    - Dst: begin
      Src: /src/brpc/src/json2pb/encode_decode.cpp:52,1
    - Dst: isdigit
      Src: /src/brpc/src/json2pb/encode_decode.cpp:53,1
    - Dst: clear
      Src: /src/brpc/src/json2pb/encode_decode.cpp:55,1
    - Dst: reserve
      Src: /src/brpc/src/json2pb/encode_decode.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/json2pb/encode_decode.cpp:56,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:59,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:72,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:78,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - ' content'
    - ' encoded_content'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 81
    functionName: json2pb::encode_name
    functionSourceFile: /src/brpc/src/json2pb/encode_decode.cpp
    functionUses: 2
    functionsReached:
    - append
    - end
    - isdigit
    - size
    - clear
    - begin
    - isalnum
    - reserve
    linkageType: ''
    returnType: bool
    signature: bool encode_name(const std::string& content, std::string& encoded_content)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/json2pb/encode_decode.cpp:88,1
    - Dst: end
      Src: /src/brpc/src/json2pb/encode_decode.cpp:88,1
    - Dst: json2pb::match_pattern
      Src: /src/brpc/src/json2pb/encode_decode.cpp:92,1
    - Dst: clear
      Src: /src/brpc/src/json2pb/encode_decode.cpp:95,1
    - Dst: reserve
      Src: /src/brpc/src/json2pb/encode_decode.cpp:96,1
    - Dst: size
      Src: /src/brpc/src/json2pb/encode_decode.cpp:96,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:99,1
    - Dst: push_back
      Src: /src/brpc/src/json2pb/encode_decode.cpp:100,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/json2pb/encode_decode.cpp:100,1
    - Dst: append
      Src: /src/brpc/src/json2pb/encode_decode.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - ' content'
    - ' decoded_content'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 112
    functionName: json2pb::decode_name
    functionSourceFile: /src/brpc/src/json2pb/encode_decode.cpp
    functionUses: 4
    functionsReached:
    - append
    - end
    - size
    - static_cast<char>
    - push_back
    - clear
    - begin
    - reserve
    - json2pb::match_pattern
    linkageType: ''
    returnType: bool
    signature: bool decode_name(const std::string& content, std::string& decoded_content)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:27,1
    - Dst: FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:27,1
    - Dst: FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:30,1
    - Dst: Descriptor*::field_count
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:34,1
    - Dst: Descriptor*::field
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:37,1
    - Dst: FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:39,1
    - Dst: FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:40,1
    - Dst: strcmp
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:41,1
    - Dst: FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:41,1
    - Dst: Descriptor*::field
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:44,1
    - Dst: strcmp
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:46,1
    - Dst: FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:46,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 1
    argNames:
    - field
    argTypes:
    - FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 50
    functionName: json2pb::IsProtobufMap
    functionSourceFile: /src/brpc/src/json2pb/protobuf_map.cpp
    functionUses: 4
    functionsReached:
    - Descriptor*::field_count
    - strcmp
    - FieldDescriptor*::type
    - FieldDescriptor*::is_repeated
    - FieldDescriptor*::name
    - FieldDescriptor*::message_type
    - FieldDescriptor*::cpp_type
    - Descriptor*::field
    linkageType: ''
    returnType: bool
    signature: bool IsProtobufMap(const FieldDescriptor* field)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:27,1
    - Dst: FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:27,1
    - Dst: FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:30,1
    - Dst: Descriptor*::field_count
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:34,1
    - Dst: Descriptor*::field
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:37,1
    - Dst: FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:39,1
    - Dst: FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:40,1
    - Dst: strcmp
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:41,1
    - Dst: FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:41,1
    - Dst: Descriptor*::field
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:44,1
    - Dst: strcmp
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:46,1
    - Dst: FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/protobuf_map.cpp:46,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 1
    argNames:
    - field
    argTypes:
    - FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 50
    functionName: json2pb::IsProtobufMap
    functionSourceFile: /src/brpc/src/json2pb/protobuf_map.cpp
    functionUses: 4
    functionsReached:
    - Descriptor*::field_count
    - strcmp
    - FieldDescriptor*::type
    - FieldDescriptor*::is_repeated
    - FieldDescriptor*::name
    - FieldDescriptor*::message_type
    - FieldDescriptor*::cpp_type
    - Descriptor*::field
    linkageType: ''
    returnType: bool
    signature: bool IsProtobufMap(const FieldDescriptor* field)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:34,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: json2pb::GetTypeUrl
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 4
    functionsReached:
    - butil::string_printf
    - GetDescriptor
    linkageType: ''
    returnType: std::string
    signature: std::string GetTypeUrl(const google::protobuf::Message& message)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - is_generated_pool
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: json2pb::TypeResolverDeleter::TypeResolverDeleter
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TypeResolverDeleter(bool is_generated_pool)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - resolver
    argTypes:
    - google::protobuf::util::TypeResolver*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: operator()(google::protobuf::util::TypeResolver* resolver) const
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(google::protobuf::util::TypeResolver* resolver) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:34,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: json2pb::GetTypeUrl
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 4
    functionsReached:
    - butil::string_printf
    - GetDescriptor
    linkageType: ''
    returnType: std::string
    signature: std::string GetTypeUrl(const google::protobuf::Message& message)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - is_generated_pool
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: json2pb::TypeResolverDeleter::TypeResolverDeleter
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TypeResolverDeleter(bool is_generated_pool)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - resolver
    argTypes:
    - google::protobuf::util::TypeResolver*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: operator()(google::protobuf::util::TypeResolver* resolver) const
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(google::protobuf::util::TypeResolver* resolver) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::util::NewTypeResolverForDescriptorPool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:67,1
    - Dst: google::protobuf::DescriptorPool::generated_pool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 69
    functionName: butil::create_leaky_singleton_obj
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached:
    - google::protobuf::DescriptorPool::generated_pool
    - google::protobuf::util::NewTypeResolverForDescriptorPool
    linkageType: ''
    returnType: google::protobuf::util::TypeResolver
    signature: 'google::protobuf::util::TypeResolver *

      create_leaky_singleton_obj<google::protobuf::util::TypeResolver>()'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::util::NewTypeResolverForDescriptorPool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:67,1
    - Dst: google::protobuf::DescriptorPool::generated_pool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 69
    functionName: butil::create_leaky_singleton_obj
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached:
    - google::protobuf::DescriptorPool::generated_pool
    - google::protobuf::util::NewTypeResolverForDescriptorPool
    linkageType: ''
    returnType: google::protobuf::util::TypeResolver
    signature: 'google::protobuf::util::TypeResolver *

      create_leaky_singleton_obj<google::protobuf::util::TypeResolver>()'
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - options
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 100
    functionName: AlwaysPrintPrimitiveFields
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: AlwaysPrintPrimitiveFields(options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - options
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 102
    functionName: AlwaysPrintPrimitiveFields
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: AlwaysPrintPrimitiveFields(options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - options
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 100
    functionName: AlwaysPrintPrimitiveFields
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: AlwaysPrintPrimitiveFields(options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - options
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 102
    functionName: AlwaysPrintPrimitiveFields
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: AlwaysPrintPrimitiveFields(options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: json2pb::ZeroCopyStreamWriter::ZeroCopyStreamWriter
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamWriter(google::protobuf::io::ZeroCopyOutputStream
      *stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:50,1
    - Dst: RemainSize
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: ~ZeroCopyStreamWriter()
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - BackUp
    - RemainSize
    linkageType: ''
    returnType: void
    signature: void ~ZeroCopyStreamWriter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:56,1
    - Dst: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 60
    functionName: json2pb::ZeroCopyStreamWriter::Put
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    - __builtin_expect
    linkageType: ''
    returnType: void
    signature: void Put(char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:62,1
    - Dst: json2pb::ZeroCopyStreamWriter::RemainSize
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:63,1
    - Dst: memset
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:65,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - c
    - n
    argTypes:
    - char
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 69
    functionName: json2pb::ZeroCopyStreamWriter::PutN
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    - json2pb::ZeroCopyStreamWriter::RemainSize
    - memset
    linkageType: ''
    returnType: void
    signature: void PutN(char c, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:71,1
    - Dst: json2pb::ZeroCopyStreamWriter::RemainSize
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:72,1
    - Dst: memcpy
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - str
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: json2pb::ZeroCopyStreamWriter::Puts
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - memcpy
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    - json2pb::ZeroCopyStreamWriter::RemainSize
    linkageType: ''
    returnType: void
    signature: void Puts(const char* str, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: json2pb::ZeroCopyStreamWriter::Flush
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: json2pb::ZeroCopyStreamWriter::Peek
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char Peek()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: json2pb::ZeroCopyStreamWriter::Take
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char Take()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: json2pb::ZeroCopyStreamWriter::Tell
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t Tell()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: json2pb::ZeroCopyStreamWriter::PutBegin
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *PutBegin()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: json2pb::ZeroCopyStreamWriter::PutEnd
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t PutEnd(char *)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:91,1
    - Dst: Next
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 101
    functionName: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 3
    functionsReached:
    - Next
    - __builtin_expect
    linkageType: ''
    returnType: bool
    signature: bool AcquireNextBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: json2pb::ZeroCopyStreamWriter::RemainSize
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RemainSize()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: json2pb::ZeroCopyStreamWriter::ZeroCopyStreamWriter
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamWriter(google::protobuf::io::ZeroCopyOutputStream
      *stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:50,1
    - Dst: RemainSize
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: ~ZeroCopyStreamWriter()
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - BackUp
    - RemainSize
    linkageType: ''
    returnType: void
    signature: void ~ZeroCopyStreamWriter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:56,1
    - Dst: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 60
    functionName: json2pb::ZeroCopyStreamWriter::Put
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    - __builtin_expect
    linkageType: ''
    returnType: void
    signature: void Put(char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:62,1
    - Dst: json2pb::ZeroCopyStreamWriter::RemainSize
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:63,1
    - Dst: memset
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:65,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - c
    - n
    argTypes:
    - char
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 69
    functionName: json2pb::ZeroCopyStreamWriter::PutN
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    - json2pb::ZeroCopyStreamWriter::RemainSize
    - memset
    linkageType: ''
    returnType: void
    signature: void PutN(char c, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:71,1
    - Dst: json2pb::ZeroCopyStreamWriter::RemainSize
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:72,1
    - Dst: memcpy
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - str
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: json2pb::ZeroCopyStreamWriter::Puts
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached:
    - memcpy
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    - json2pb::ZeroCopyStreamWriter::RemainSize
    linkageType: ''
    returnType: void
    signature: void Puts(const char* str, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: json2pb::ZeroCopyStreamWriter::Flush
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: json2pb::ZeroCopyStreamWriter::Peek
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char Peek()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: json2pb::ZeroCopyStreamWriter::Take
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char Take()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: json2pb::ZeroCopyStreamWriter::Tell
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t Tell()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: json2pb::ZeroCopyStreamWriter::PutBegin
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *PutBegin()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: json2pb::ZeroCopyStreamWriter::PutEnd
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t PutEnd(char *)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:91,1
    - Dst: Next
      Src: /src/brpc/src/json2pb/zero_copy_stream_writer.h:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 101
    functionName: json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 6
    functionsReached:
    - Next
    - __builtin_expect
    linkageType: ''
    returnType: bool
    signature: bool AcquireNextBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: json2pb::ZeroCopyStreamWriter::RemainSize
    functionSourceFile: /src/brpc/src/json2pb/zero_copy_stream_writer.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RemainSize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:27,1
    - Dst: DescriptorPool::generated_pool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:28,1
    - Dst: butil::get_leaky_singleton<TypeResolver>
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:30,1
    - Dst: NewTypeResolverForDescriptorPool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:31,1
    - Dst: TypeResolverDeleter
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 33
    functionName: json2pb::GetTypeResolver
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.cpp
    functionUses: 4
    functionsReached:
    - TypeResolverDeleter
    - butil::get_leaky_singleton<TypeResolver>
    - GetDescriptor
    - DescriptorPool::generated_pool
    - NewTypeResolverForDescriptorPool
    linkageType: ''
    returnType: TypeResolverUniqueptr
    signature: TypeResolverUniqueptr GetTypeResolver(const google::protobuf::Message&
      message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:27,1
    - Dst: DescriptorPool::generated_pool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:28,1
    - Dst: butil::get_leaky_singleton<TypeResolver>
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:30,1
    - Dst: NewTypeResolverForDescriptorPool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:31,1
    - Dst: TypeResolverDeleter
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 33
    functionName: json2pb::GetTypeResolver
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.cpp
    functionUses: 4
    functionsReached:
    - TypeResolverDeleter
    - butil::get_leaky_singleton<TypeResolver>
    - GetDescriptor
    - DescriptorPool::generated_pool
    - NewTypeResolverForDescriptorPool
    linkageType: ''
    returnType: TypeResolverUniqueptr
    signature: TypeResolverUniqueptr GetTypeResolver(const google::protobuf::Message&
      message)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/bthread/comlog_initializer.h:33,1
    - Dst: com_openlog_r
      Src: /src/brpc/src/bthread/comlog_initializer.h:34,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 36
    functionName: bthread::ComlogInitializer::ComlogInitializer
    functionSourceFile: /src/brpc/src/bthread/comlog_initializer.h
    functionUses: 0
    functionsReached:
    - com_logstatus
    - com_openlog_r
    linkageType: ''
    returnType: void
    signature: void ComlogInitializer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/bthread/comlog_initializer.h:38,1
    - Dst: com_closelog_r
      Src: /src/brpc/src/bthread/comlog_initializer.h:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: ~ComlogInitializer()
    functionSourceFile: /src/brpc/src/bthread/comlog_initializer.h
    functionUses: 0
    functionsReached:
    - com_logstatus
    - com_closelog_r
    linkageType: ''
    returnType: void
    signature: void ~ComlogInitializer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/bthread/comlog_initializer.h:33,1
    - Dst: com_openlog_r
      Src: /src/brpc/src/bthread/comlog_initializer.h:34,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 36
    functionName: bthread::ComlogInitializer::ComlogInitializer
    functionSourceFile: /src/brpc/src/bthread/comlog_initializer.h
    functionUses: 0
    functionsReached:
    - com_logstatus
    - com_openlog_r
    linkageType: ''
    returnType: void
    signature: void ComlogInitializer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/bthread/comlog_initializer.h:38,1
    - Dst: com_closelog_r
      Src: /src/brpc/src/bthread/comlog_initializer.h:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: ~ComlogInitializer()
    functionSourceFile: /src/brpc/src/bthread/comlog_initializer.h
    functionUses: 0
    functionsReached:
    - com_logstatus
    - com_closelog_r
    linkageType: ''
    returnType: void
    signature: void ~ComlogInitializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bthread/sys_futex.cpp:36,1
    - Dst: pthread_cond_init
      Src: /src/brpc/src/bthread/sys_futex.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: bthread::SimuFutex::SimuFutex
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - pthread_cond_init
    linkageType: ''
    returnType: void
    signature: void SimuFutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bthread/sys_futex.cpp:40,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/src/bthread/sys_futex.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: ~SimuFutex()
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void ~SimuFutex()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::unordered_map<void*, SimuFutex>::unordered_map<void*, SimuFutex>
      Src: /src/brpc/src/bthread/sys_futex.cpp:56,1
    - Dst: exit
      Src: /src/brpc/src/bthread/sys_futex.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 61
    functionName: bthread::InitFutexMap
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 0
    functionsReached:
    - exit
    - std::unordered_map<void*, SimuFutex>::unordered_map<void*, SimuFutex>
    linkageType: ''
    returnType: void
    signature: void InitFutexMap()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/sys_futex.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/sys_futex.cpp:65,1
    - Dst: exit
      Src: /src/brpc/src/bthread/sys_futex.cpp:66,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:71,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/sys_futex.cpp:76,1
    - Dst: butil::timespec_from_now
      Src: /src/brpc/src/bthread/sys_futex.cpp:79,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/src/bthread/sys_futex.cpp:80,1
    - Dst: pthread_cond_wait
      Src: /src/brpc/src/bthread/sys_futex.cpp:85,1
    - Dst: erase
      Src: /src/brpc/src/bthread/sys_futex.cpp:99,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:101,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 3
    argNames:
    - addr1
    - expected
    - timeout
    argTypes:
    - void*
    - int
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 103
    functionName: bthread::futex_wait_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 14
    functionsReached:
    - pthread_once
    - pthread_cond_wait
    - exit
    - static_cast<butil::atomic<int>*>
    - erase
    - butil::timespec_from_now
    - std::unique_lock::unlock
    - pthread_cond_timedwait
    - LOG
    linkageType: ''
    returnType: int
    signature: int futex_wait_private(void* addr1, int expected, const timespec* timeout)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/sys_futex.cpp:106,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/sys_futex.cpp:107,1
    - Dst: exit
      Src: /src/brpc/src/bthread/sys_futex.cpp:108,1
    - Dst: find
      Src: /src/brpc/src/bthread/sys_futex.cpp:111,1
    - Dst: end
      Src: /src/brpc/src/bthread/sys_futex.cpp:112,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:113,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:118,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bthread/sys_futex.cpp:126,1
    - Dst: erase
      Src: /src/brpc/src/bthread/sys_futex.cpp:137,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:139,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 2
    argNames:
    - addr1
    - nwake
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 141
    functionName: bthread::futex_wake_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 20
    functionsReached:
    - end
    - pthread_once
    - find
    - pthread_cond_signal
    - exit
    - erase
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: int
    signature: int futex_wake_private(void* addr1, int nwake)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bthread/sys_futex.cpp:36,1
    - Dst: pthread_cond_init
      Src: /src/brpc/src/bthread/sys_futex.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: bthread::SimuFutex::SimuFutex
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - pthread_cond_init
    linkageType: ''
    returnType: void
    signature: void SimuFutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bthread/sys_futex.cpp:40,1
    - Dst: pthread_cond_destroy
      Src: /src/brpc/src/bthread/sys_futex.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: ~SimuFutex()
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - pthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void ~SimuFutex()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::unordered_map<void*, SimuFutex>::unordered_map<void*, SimuFutex>
      Src: /src/brpc/src/bthread/sys_futex.cpp:56,1
    - Dst: exit
      Src: /src/brpc/src/bthread/sys_futex.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 61
    functionName: bthread::InitFutexMap
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 0
    functionsReached:
    - exit
    - std::unordered_map<void*, SimuFutex>::unordered_map<void*, SimuFutex>
    linkageType: ''
    returnType: void
    signature: void InitFutexMap()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/sys_futex.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/sys_futex.cpp:65,1
    - Dst: exit
      Src: /src/brpc/src/bthread/sys_futex.cpp:66,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:71,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/sys_futex.cpp:76,1
    - Dst: butil::timespec_from_now
      Src: /src/brpc/src/bthread/sys_futex.cpp:79,1
    - Dst: pthread_cond_timedwait
      Src: /src/brpc/src/bthread/sys_futex.cpp:80,1
    - Dst: pthread_cond_wait
      Src: /src/brpc/src/bthread/sys_futex.cpp:85,1
    - Dst: erase
      Src: /src/brpc/src/bthread/sys_futex.cpp:99,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:101,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 3
    argNames:
    - addr1
    - expected
    - timeout
    argTypes:
    - void*
    - int
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 103
    functionName: bthread::futex_wait_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 14
    functionsReached:
    - pthread_once
    - pthread_cond_wait
    - exit
    - static_cast<butil::atomic<int>*>
    - erase
    - butil::timespec_from_now
    - std::unique_lock::unlock
    - pthread_cond_timedwait
    - LOG
    linkageType: ''
    returnType: int
    signature: int futex_wait_private(void* addr1, int expected, const timespec* timeout)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/sys_futex.cpp:106,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/sys_futex.cpp:107,1
    - Dst: exit
      Src: /src/brpc/src/bthread/sys_futex.cpp:108,1
    - Dst: find
      Src: /src/brpc/src/bthread/sys_futex.cpp:111,1
    - Dst: end
      Src: /src/brpc/src/bthread/sys_futex.cpp:112,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:113,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:118,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/bthread/sys_futex.cpp:126,1
    - Dst: erase
      Src: /src/brpc/src/bthread/sys_futex.cpp:137,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/sys_futex.cpp:139,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 2
    argNames:
    - addr1
    - nwake
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 141
    functionName: bthread::futex_wake_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.cpp
    functionUses: 20
    functionsReached:
    - end
    - pthread_once
    - find
    - pthread_cond_signal
    - exit
    - erase
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: int
    signature: int futex_wake_private(void* addr1, int nwake)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: bthread::do_nothing_handler
    functionSourceFile: /src/brpc/src/bthread/interrupt_pthread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void do_nothing_handler(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::signal
      Src: /src/brpc/src/bthread/interrupt_pthread.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: bthread::register_sigurg
    functionSourceFile: /src/brpc/src/bthread/interrupt_pthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::signal
    linkageType: ''
    returnType: void
    signature: void register_sigurg()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/interrupt_pthread.cpp:38,1
    - Dst: pthread_kill
      Src: /src/brpc/src/bthread/interrupt_pthread.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - th
    argTypes:
    - pthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 40
    functionName: bthread::interrupt_pthread
    functionSourceFile: /src/brpc/src/bthread/interrupt_pthread.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    - pthread_kill
    linkageType: ''
    returnType: int
    signature: int interrupt_pthread(pthread_t th)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: bthread::do_nothing_handler
    functionSourceFile: /src/brpc/src/bthread/interrupt_pthread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void do_nothing_handler(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::signal
      Src: /src/brpc/src/bthread/interrupt_pthread.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: bthread::register_sigurg
    functionSourceFile: /src/brpc/src/bthread/interrupt_pthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::signal
    linkageType: ''
    returnType: void
    signature: void register_sigurg()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/interrupt_pthread.cpp:38,1
    - Dst: pthread_kill
      Src: /src/brpc/src/bthread/interrupt_pthread.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - th
    argTypes:
    - pthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 40
    functionName: bthread::interrupt_pthread
    functionSourceFile: /src/brpc/src/bthread/interrupt_pthread.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    - pthread_kill
    linkageType: ''
    returnType: int
    signature: int interrupt_pthread(pthread_t th)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SubKeyTable
      Src: /src/brpc/src/bthread/key.cpp:94,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:95,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:96,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:101,1
    - Dst: KeyInfo::dtor
      Src: /src/brpc/src/bthread/key.cpp:114,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 148
    functionName: bthread::SubKeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - fetch_add
    - memset
    - bthread::SubKeyTable
    - KeyInfo::dtor
    - fetch_sub
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT SubKeyTable
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: ~SubKeyTable()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void ~SubKeyTable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: KeyInfo::dtor
      Src: /src/brpc/src/bthread/key.cpp:114,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - offset
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 118
    functionName: bthread::clear
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - KeyInfo::dtor
    linkageType: ''
    returnType: void
    signature: void clear(uint32_t offset)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 129
    functionName: bthread::cleared
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool cleared() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - index
    - version
    argTypes:
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 136
    functionName: bthread::get_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * get_data(uint32_t index, uint32_t version) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - index
    - version
    - data
    argTypes:
    - uint32_t
    - uint32_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: bthread::set_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_data(uint32_t index, uint32_t version, void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::KeyTable
      Src: /src/brpc/src/bthread/key.cpp:154,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:155,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 157
    functionName: bthread::KeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - fetch_add
    - memset
    - bthread::KeyTable
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT KeyTable
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:160,1
    - Dst: bthread::clear
      Src: /src/brpc/src/bthread/key.cpp:164,1
    - Dst: bthread::cleared
      Src: /src/brpc/src/bthread/key.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:181,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 182
    functionName: ~KeyTable()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - bthread::clear
    - bthread::cleared
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void ~KeyTable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SubKeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:189,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 194
    functionName: bthread::get_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - SubKeyTable*::get_data
    linkageType: ''
    returnType: void
    signature: void * get_data(bthread_key_t key) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SubKeyTable::SubKeyTable
      Src: /src/brpc/src/bthread/key.cpp:202,1
    - Dst: SubKeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:208,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/key.cpp:212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - key
    - data
    argTypes:
    - bthread_key_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 214
    functionName: bthread::set_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - SubKeyTable*::set_data
    - SubKeyTable::SubKeyTable
    linkageType: ''
    returnType: int
    signature: int set_data(bthread_key_t key, void* data)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SubKeyTable
      Src: /src/brpc/src/bthread/key.cpp:94,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:95,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:96,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:101,1
    - Dst: KeyInfo::dtor
      Src: /src/brpc/src/bthread/key.cpp:114,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 148
    functionName: bthread::SubKeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - fetch_add
    - memset
    - bthread::SubKeyTable
    - KeyInfo::dtor
    - fetch_sub
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT SubKeyTable
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: ~SubKeyTable()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void ~SubKeyTable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: KeyInfo::dtor
      Src: /src/brpc/src/bthread/key.cpp:114,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - offset
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 118
    functionName: bthread::clear
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 3
    functionsReached:
    - KeyInfo::dtor
    linkageType: ''
    returnType: void
    signature: void clear(uint32_t offset)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 129
    functionName: bthread::cleared
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool cleared() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - index
    - version
    argTypes:
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 136
    functionName: bthread::get_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * get_data(uint32_t index, uint32_t version) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - index
    - version
    - data
    argTypes:
    - uint32_t
    - uint32_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: bthread::set_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_data(uint32_t index, uint32_t version, void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::KeyTable
      Src: /src/brpc/src/bthread/key.cpp:154,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:155,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 157
    functionName: bthread::KeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - fetch_add
    - memset
    - bthread::KeyTable
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT KeyTable
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:160,1
    - Dst: clear
      Src: /src/brpc/src/bthread/key.cpp:164,1
    - Dst: cleared
      Src: /src/brpc/src/bthread/key.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:181,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 182
    functionName: ~KeyTable()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - cleared
    - LOG
    - clear
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void ~KeyTable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SubKeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:189,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 194
    functionName: bthread::get_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - SubKeyTable*::get_data
    linkageType: ''
    returnType: void
    signature: void * get_data(bthread_key_t key) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SubKeyTable::SubKeyTable
      Src: /src/brpc/src/bthread/key.cpp:202,1
    - Dst: SubKeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:208,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/key.cpp:212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - key
    - data
    argTypes:
    - bthread_key_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 214
    functionName: bthread::set_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - SubKeyTable*::set_data
    - SubKeyTable::SubKeyTable
    linkageType: ''
    returnType: int
    signature: int set_data(bthread_key_t key, void* data)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: KeyTableList
      Src: /src/brpc/src/bthread/key.cpp:224,1
    - Dst: _head
      Src: /src/brpc/src/bthread/key.cpp:225,1
    - Dst: _tail
      Src: /src/brpc/src/bthread/key.cpp:225,1
    - Dst: _length
      Src: /src/brpc/src/bthread/key.cpp:225,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:228,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:236,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:242,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:246,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 78
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 326
    functionName: KeyTableList
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - _head
    - _length
    - KeyTableList
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::current_task
    - _tail
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT KeyTableList
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:228,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:236,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:242,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:246,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 248
    functionName: ~KeyTableList()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::current_task
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: void
    signature: void ~KeyTableList()
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - keytable
    argTypes:
    - KeyTable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 262
    functionName: append
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 242
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void append(KeyTable* keytable)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 275
    functionName: remove_front
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: KeyTable
    signature: KeyTable * remove_front()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - target
    - size
    argTypes:
    - KeyTable**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 305
    functionName: move_first_n_to_target
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int move_first_n_to_target(KeyTable** target, uint32_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 309
    functionName: get_length
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 320
    functionName: check_length
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool check_length()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/key.cpp:331,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:334,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:336,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:340,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:342,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:348,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:355,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:356,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:361,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:365,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 369
    functionName: borrow_keytable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - pthread_rwlock_unlock
    - pthread_rwlock_rdlock
    - pthread_rwlock_wrlock
    - auto::get
    linkageType: ''
    returnType: KeyTable
    signature: KeyTable * borrow_keytable(bthread_keytable_pool_t* pool)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/key.cpp:381,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:383,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:388,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:389,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:390,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:391,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:393,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:399,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - pool
    - kt
    argTypes:
    - bthread_keytable_pool_t*
    - KeyTable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 400
    functionName: return_keytable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 4
    functionsReached:
    - pthread_rwlock_unlock
    - pthread_rwlock_rdlock
    - pthread_rwlock_wrlock
    - auto::get
    linkageType: ''
    returnType: void
    signature: void return_keytable(bthread_keytable_pool_t* pool, KeyTable* kt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<KeyTable*>
      Src: /src/brpc/src/bthread/key.cpp:403,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 409
    functionName: cleanup_pthread
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - static_cast<KeyTable*>
    linkageType: ''
    returnType: void
    signature: void cleanup_pthread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - arg
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 414
    functionName: arg_as_dtor
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void arg_as_dtor(void* data, const void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/key.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 419
    functionName: get_key_count
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int get_key_count(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/key.cpp:421,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 422
    functionName: get_keytable_count
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t get_keytable_count(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/key.cpp:424,1
    - Dst: load
      Src: /src/brpc/src/bthread/key.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 427
    functionName: get_keytable_memory
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t get_keytable_memory(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:442,1
    - Dst: pthread_rwlock_init
      Src: /src/brpc/src/bthread/key.cpp:445,1
    - Dst: butil::ThreadLocal<bthread::KeyTableList>::KeyTableList>
      Src: /src/brpc/src/bthread/key.cpp:446,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 440
    functionDepth: 1
    functionLinenumber: 440
    functionLinenumberEnd: 451
    functionName: bthread_keytable_pool_init
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 6
    functionsReached:
    - butil::ThreadLocal<bthread::KeyTableList>::KeyTableList>
    - pthread_rwlock_init
    - LOG
    linkageType: ''
    returnType: int
    signature: int bthread_keytable_pool_init(bthread_keytable_pool_t* pool)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:455,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:459,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:466,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:470,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:477,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:480,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:484,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 453
    functionDepth: 1
    functionLinenumber: 453
    functionLinenumberEnd: 490
    functionName: bthread_keytable_pool_destroy
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 6
    functionsReached:
    - bthread::TaskGroup*::current_task
    - pthread_rwlock_wrlock
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - pthread_rwlock_unlock
    - LOG
    linkageType: ''
    returnType: int
    signature: int bthread_keytable_pool_destroy(bthread_keytable_pool_t* pool)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:495,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:498,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:500,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - pool
    - stat
    argTypes:
    - bthread_keytable_pool_t*
    - bthread_keytable_pool_stat_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 502
    functionName: bthread_keytable_pool_getstat
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - pthread_rwlock_unlock
    - pthread_rwlock_wrlock
    - LOG
    linkageType: ''
    returnType: int
    signature: "int bthread_keytable_pool_getstat(bthread_keytable_pool_t* pool,\n
      \                                 bthread_keytable_pool_stat_t* stat)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:506,1
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/key.cpp:510,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:512,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:517,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:518,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:519,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:522,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 504
    functionDepth: 1
    functionLinenumber: 504
    functionLinenumberEnd: 524
    functionName: get_thread_local_keytable_list_length
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 4
    functionsReached:
    - pthread_rwlock_unlock
    - pthread_rwlock_rdlock
    - LOG
    - auto::get
    linkageType: ''
    returnType: int
    signature: int get_thread_local_keytable_list_length(bthread_keytable_pool_t*
      pool)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:535,1
    - Dst: bthread_keytable_pool_getstat
      Src: /src/brpc/src/bthread/key.cpp:539,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:540,1
    - Dst: bthread::KeyTable::KeyTable
      Src: /src/brpc/src/bthread/key.cpp:544,1
    - Dst: ctor
      Src: /src/brpc/src/bthread/key.cpp:548,1
    - Dst: bthread::KeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:550,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:553,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:555,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:562,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 5
    argNames:
    - pool
    - nfree
    - key
    - ctor(const void*)
    - ctor_args
    argTypes:
    - bthread_keytable_pool_t*
    - size_t
    - bthread_key_t
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 529
    functionDepth: 2
    functionLinenumber: 529
    functionLinenumberEnd: 567
    functionName: bthread_keytable_pool_reserve
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - pthread_rwlock_wrlock
    - ctor
    - bthread::KeyTable::KeyTable
    - pthread_rwlock_unlock
    - bthread_keytable_pool_getstat
    - LOG
    - bthread::KeyTable*::set_data
    linkageType: ''
    returnType: void
    signature: "void bthread_keytable_pool_reserve(bthread_keytable_pool_t* pool,\n
      \                                  size_t nfree,\n                                   bthread_key_t
      key,\n                                   void* ctor(const void*),\n                                   const
      void* ctor_args)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/key.cpp:574,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - key
    - dtor_args
    argTypes:
    - bthread_key_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 592
    functionName: bthread_key_create2
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int bthread_key_create2(bthread_key_t* key,\n                        void
      (*dtor)(void*, const void*),\n                        const void* dtor_args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_key_create2
      Src: /src/brpc/src/bthread/key.cpp:596,1
    - Dst: bthread_key_create2
      Src: /src/brpc/src/bthread/key.cpp:598,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 594
    functionDepth: 2
    functionLinenumber: 594
    functionLinenumberEnd: 600
    functionName: bthread_key_create
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 18
    functionsReached:
    - bthread_key_create2
    linkageType: ''
    returnType: int
    signature: int bthread_key_create(bthread_key_t* key, void (*dtor)(void*))
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/key.cpp:605,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/key.cpp:616,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 618
    functionName: bthread_key_delete
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 18
    functionsReached:
    - CHECK
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int bthread_key_delete(bthread_key_t key)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::KeyTable::KeyTable
      Src: /src/brpc/src/bthread/key.cpp:628,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:633,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:635,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/key.cpp:642,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bthread/key.cpp:642,1
    - Dst: bthread::KeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:646,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - key
    - data
    argTypes:
    - bthread_key_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 625
    functionDepth: 1
    functionLinenumber: 625
    functionLinenumberEnd: 647
    functionName: bthread_setspecific
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 22
    functionsReached:
    - bthread::TaskGroup*::current_task
    - butil::thread_atexit
    - CHECK_EQ
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::KeyTable::KeyTable
    - bthread::KeyTable*::set_data
    linkageType: ''
    returnType: int
    signature: int bthread_setspecific(bthread_key_t key, void* data)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::KeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:652,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:654,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:656,1
    - Dst: borrow_keytable
      Src: /src/brpc/src/bthread/key.cpp:657,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:659,1
    - Dst: bthread::KeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:661,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 649
    functionDepth: 2
    functionLinenumber: 649
    functionLinenumberEnd: 665
    functionName: bthread_getspecific
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 20
    functionsReached:
    - bthread::KeyTable*::get_data
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::current_task
    - borrow_keytable
    linkageType: ''
    returnType: void
    signature: void * bthread_getspecific(bthread_key_t key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 669
      start: 667
    functionDepth: 0
    functionLinenumber: 667
    functionLinenumberEnd: 669
    functionName: bthread_assign_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bthread_assign_data(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 673
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 673
    functionName: bthread_get_assigned_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * bthread_get_assigned_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/bthread/prime_offset.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - seed
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: bthread::prime_offset
    functionSourceFile: /src/brpc/src/bthread/prime_offset.h
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    linkageType: ''
    returnType: size_t
    signature: size_t prime_offset(size_t seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/bthread/prime_offset.h:34,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/bthread/prime_offset.h:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: bthread::prime_offset
    functionSourceFile: /src/brpc/src/bthread/prime_offset.h
    functionUses: 1
    functionsReached:
    - butil::fast_rand
    - bthread::prime_offset
    linkageType: ''
    returnType: size_t
    signature: size_t prime_offset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/bthread/prime_offset.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - seed
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: bthread::prime_offset
    functionSourceFile: /src/brpc/src/bthread/prime_offset.h
    functionUses: 1
    functionsReached:
    - ARRAY_SIZE
    linkageType: ''
    returnType: size_t
    signature: size_t prime_offset(size_t seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/bthread/prime_offset.h:34,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/bthread/prime_offset.h:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: bthread::prime_offset
    functionSourceFile: /src/brpc/src/bthread/prime_offset.h
    functionUses: 2
    functionsReached:
    - butil::fast_rand
    - bthread::prime_offset
    linkageType: ''
    returnType: size_t
    signature: size_t prime_offset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/condition_variable.h:50,1
    - Dst: bthread_cond_init
      Src: /src/brpc/src/bthread/condition_variable.h:50,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/condition_variable.h:53,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/src/bthread/condition_variable.h:53,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:59,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:59,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:63,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:63,1
    - Dst: wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:70,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:70,1
    - Dst: wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:75,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:75,1
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/src/bthread/condition_variable.h:80,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:81,1
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/src/bthread/condition_variable.h:87,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:88,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/src/bthread/condition_variable.h:93,1
    - Dst: bthread_cond_broadcast
      Src: /src/brpc/src/bthread/condition_variable.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 104
    functionName: namespace
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - bthread_cond_broadcast
    - bthread_cond_destroy
    - wait_until
    - bthread_cond_timedwait
    - CHECK_EQ
    - bthread_cond_init
    - bthread_cond_wait
    - bthread_cond_signal
    - butil::microseconds_from_now
    - mutex
    linkageType: ''
    returnType: __END_DECLS
    signature: __END_DECLS namespace
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/condition_variable.h:50,1
    - Dst: bthread_cond_init
      Src: /src/brpc/src/bthread/condition_variable.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: ConditionVariable::ConditionVariable
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_cond_init
    linkageType: ''
    returnType: void
    signature: void ConditionVariable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/condition_variable.h:53,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/src/bthread/condition_variable.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: ~ConditionVariable()
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_cond_destroy
    linkageType: ''
    returnType: void
    signature: void ~ConditionVariable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ConditionVariable::native_handler
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: native_handler_type
    signature: native_handler_type native_handler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:59,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' lock'
    argTypes:
    - std::unique_lock<bthread::Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: ConditionVariable::wait
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - bthread_cond_wait
    - mutex
    linkageType: ''
    returnType: void
    signature: void wait(std::unique_lock<bthread::Mutex>& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:63,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' lock'
    argTypes:
    - std::unique_lock<bthread_mutex_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: ConditionVariable::wait
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - bthread_cond_wait
    - mutex
    linkageType: ''
    returnType: void
    signature: void wait(std::unique_lock<bthread_mutex_t>& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConditionVariable::wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:70,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lock'
    - timeout_us
    argTypes:
    - std::unique_lock<bthread::Mutex>
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 71
    functionName: ConditionVariable::wait_for
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - butil::microseconds_from_now
    - ConditionVariable::wait_until
    linkageType: ''
    returnType: int
    signature: "int wait_for(std::unique_lock<bthread::Mutex>& lock,\n                 long
      timeout_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConditionVariable::wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:75,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lock'
    - timeout_us
    argTypes:
    - std::unique_lock<bthread_mutex_t>
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: ConditionVariable::wait_for
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - butil::microseconds_from_now
    - ConditionVariable::wait_until
    linkageType: ''
    returnType: int
    signature: "int wait_for(std::unique_lock<bthread_mutex_t>& lock,\n                 long
      timeout_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/src/bthread/condition_variable.h:80,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lock'
    - duetime
    argTypes:
    - std::unique_lock<bthread::Mutex>
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 83
    functionName: ConditionVariable::wait_until
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 2
    functionsReached:
    - bthread_cond_timedwait
    - mutex
    linkageType: ''
    returnType: int
    signature: "int wait_until(std::unique_lock<bthread::Mutex>& lock,\n                   timespec
      duetime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/src/bthread/condition_variable.h:87,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lock'
    - duetime
    argTypes:
    - std::unique_lock<bthread_mutex_t>
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 90
    functionName: ConditionVariable::wait_until
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 2
    functionsReached:
    - bthread_cond_timedwait
    - mutex
    linkageType: ''
    returnType: int
    signature: "int wait_until(std::unique_lock<bthread_mutex_t>& lock,\n                   timespec
      duetime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_signal
      Src: /src/brpc/src/bthread/condition_variable.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: ConditionVariable::notify_one
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - bthread_cond_signal
    linkageType: ''
    returnType: void
    signature: void notify_one()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_cond_broadcast
      Src: /src/brpc/src/bthread/condition_variable.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: ConditionVariable::notify_all
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 2
    functionsReached:
    - bthread_cond_broadcast
    linkageType: ''
    returnType: void
    signature: void notify_all()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:39,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:40,1
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 43
    functionName: bthread::internal::ASanPoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanPoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:49,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:50,1
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 53
    functionName: bthread::internal::ASanUnpoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanUnpoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bthread/stack_inl.h:60,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:61,1
    - Dst: BUTIL_ASAN_START_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fake_stack_save
    - ' storage'
    argTypes:
    - void**
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: bthread::internal::StartSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    - BUTIL_ASAN_START_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE StartSwitchFiber(void** fake_stack_save, StackStorage&
      storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_FINISH_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fake_stack_save
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: bthread::internal::FinishSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - BUTIL_ASAN_FINISH_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE FinishSwitchFiber(void* fake_stack_save)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' next_storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: bthread::internal::ScopedASanFiberSwitcher::ScopedASanFiberSwitcher
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - StartSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ScopedASanFiberSwitcher(StackStorage& next_storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::internal::FinishSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: ~ScopedASanFiberSwitcher()
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - bthread::internal::FinishSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ~ScopedASanFiberSwitcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: BTHREAD_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_POISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:39,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:40,1
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 43
    functionName: bthread::internal::ASanPoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanPoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:49,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:50,1
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 53
    functionName: bthread::internal::ASanUnpoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanUnpoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bthread/stack_inl.h:60,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:61,1
    - Dst: BUTIL_ASAN_START_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fake_stack_save
    - ' storage'
    argTypes:
    - void**
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: bthread::internal::StartSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    - BUTIL_ASAN_START_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE StartSwitchFiber(void** fake_stack_save, StackStorage&
      storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_FINISH_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fake_stack_save
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: bthread::internal::FinishSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - BUTIL_ASAN_FINISH_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE FinishSwitchFiber(void* fake_stack_save)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' next_storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: bthread::internal::ScopedASanFiberSwitcher::ScopedASanFiberSwitcher
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - StartSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ScopedASanFiberSwitcher(StackStorage& next_storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FinishSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: ~ScopedASanFiberSwitcher()
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - FinishSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ~ScopedASanFiberSwitcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: BTHREAD_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_POISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 101
    functionName: BTHREAD_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_POISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 102
    functionName: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 103
    functionName: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::allocate_stack_storage
      Src: /src/brpc/src/bthread/stack_inl.h:127,1
    - Dst: bthread::zeroize
      Src: /src/brpc/src/bthread/stack_inl.h:129,1
    - Dst: bthread_make_fcontext
      Src: /src/brpc/src/bthread/stack_inl.h:133,1
    - Dst: BTHREAD_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 137
    functionName: bthread::Wrapper
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - bthread::zeroize
    - bthread::allocate_stack_storage
    - BTHREAD_ASAN_POISON_MEMORY_REGION
    - bthread_make_fcontext
    linkageType: ''
    returnType: void
    signature: void Wrapper(void (*entry)(intptr_t))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:142,1
    - Dst: bthread::deallocate_stack_storage
      Src: /src/brpc/src/bthread/stack_inl.h:143,1
    - Dst: bthread::zeroize
      Src: /src/brpc/src/bthread/stack_inl.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: ~Wrapper()
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    - bthread::zeroize
    - bthread::deallocate_stack_storage
    linkageType: ''
    returnType: void
    signature: void ~Wrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Wrapper>
      Src: /src/brpc/src/bthread/stack_inl.h:150,1
    - Dst: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 154
    functionName: bthread::get_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    - butil::get_object<Wrapper>
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * get_stack(void (*entry)(intptr_t))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BTHREAD_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:158,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/stack_inl.h:159,1
    - Dst: static_cast<Wrapper*>
      Src: /src/brpc/src/bthread/stack_inl.h:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cs
    argTypes:
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 160
    functionName: bthread::return_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    - BTHREAD_ASAN_POISON_MEMORY_REGION
    - static_cast<Wrapper*>
    linkageType: ''
    returnType: void
    signature: void return_stack(ContextualStack* cs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ContextualStack::ContextualStack
      Src: /src/brpc/src/bthread/stack_inl.h:165,1
    - Dst: ContextualStack*::storage::zeroize
      Src: /src/brpc/src/bthread/stack_inl.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 173
    functionName: bthread::get_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - ContextualStack::ContextualStack
    - ContextualStack*::storage::zeroize
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * get_stack(void (*)(intptr_t))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: bthread::return_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void return_stack(ContextualStack* s)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:185,1
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:187,1
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:189,1
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:191,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - StackType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 194
    functionName: bthread::get_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - bthread::get_stack
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * get_stack(StackType type, void (*entry)(intptr_t))
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/bthread/stack_inl.h:202,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:205,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:207,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:209,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:211,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - s
    argTypes:
    - ContextualStack*
    assertStmts:
    - condition: (false)
      pos:
        line_end: 201
        line_start: 201
        source_file: /src/brpc/src/bthread/stack_inl.h
    constantsTouched: []
    func_position:
      end: 213
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 213
    functionName: bthread::return_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - assert
    - bthread::return_stack
    linkageType: ''
    returnType: void
    signature: void return_stack(ContextualStack* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/src/bthread/stack_inl.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - from
    - to
    argTypes:
    - ContextualStack*
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: bthread::jump_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - bthread_jump_fcontext
    linkageType: ''
    returnType: void
    signature: void jump_stack(ContextualStack* from, ContextualStack* to)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:39,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:40,1
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 43
    functionName: bthread::internal::ASanPoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanPoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:49,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:50,1
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 53
    functionName: bthread::internal::ASanUnpoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanUnpoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bthread/stack_inl.h:60,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:61,1
    - Dst: BUTIL_ASAN_START_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fake_stack_save
    - ' storage'
    argTypes:
    - void**
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: bthread::internal::StartSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    - BUTIL_ASAN_START_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE StartSwitchFiber(void** fake_stack_save, StackStorage&
      storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_FINISH_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fake_stack_save
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: bthread::internal::FinishSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - BUTIL_ASAN_FINISH_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE FinishSwitchFiber(void* fake_stack_save)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' next_storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: bthread::internal::ScopedASanFiberSwitcher::ScopedASanFiberSwitcher
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - StartSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ScopedASanFiberSwitcher(StackStorage& next_storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FinishSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: ~ScopedASanFiberSwitcher()
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - FinishSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ~ScopedASanFiberSwitcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: BTHREAD_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_POISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:39,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:40,1
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 43
    functionName: bthread::internal::ASanPoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanPoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_GT
      Src: /src/brpc/src/bthread/stack_inl.h:49,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:50,1
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 53
    functionName: bthread::internal::ASanUnpoisonMemoryRegion
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE ASanUnpoisonMemoryRegion(const StackStorage& storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/bthread/stack_inl.h:60,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/stack_inl.h:61,1
    - Dst: BUTIL_ASAN_START_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fake_stack_save
    - ' storage'
    argTypes:
    - void**
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: bthread::internal::StartSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    - BUTIL_ASAN_START_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE StartSwitchFiber(void** fake_stack_save, StackStorage&
      storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_FINISH_SWITCH_FIBER
      Src: /src/brpc/src/bthread/stack_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fake_stack_save
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: bthread::internal::FinishSwitchFiber
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - BUTIL_ASAN_FINISH_SWITCH_FIBER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE FinishSwitchFiber(void* fake_stack_save)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' next_storage'
    argTypes:
    - StackStorage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: bthread::internal::ScopedASanFiberSwitcher::ScopedASanFiberSwitcher
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - StartSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ScopedASanFiberSwitcher(StackStorage& next_storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FinishSwitchFiber
      Src: /src/brpc/src/bthread/stack_inl.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: ~ScopedASanFiberSwitcher()
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - FinishSwitchFiber
    linkageType: ''
    returnType: void
    signature: void ~ScopedASanFiberSwitcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: BTHREAD_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_POISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 101
    functionName: BTHREAD_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_POISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 102
    functionName: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - storage
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 103
    functionName: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::allocate_stack_storage
      Src: /src/brpc/src/bthread/stack_inl.h:127,1
    - Dst: bthread::zeroize
      Src: /src/brpc/src/bthread/stack_inl.h:129,1
    - Dst: bthread_make_fcontext
      Src: /src/brpc/src/bthread/stack_inl.h:133,1
    - Dst: BTHREAD_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 137
    functionName: bthread::Wrapper
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - bthread::zeroize
    - bthread::allocate_stack_storage
    - BTHREAD_ASAN_POISON_MEMORY_REGION
    - bthread_make_fcontext
    linkageType: ''
    returnType: void
    signature: void Wrapper(void (*entry)(intptr_t))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:142,1
    - Dst: deallocate_stack_storage
      Src: /src/brpc/src/bthread/stack_inl.h:143,1
    - Dst: zeroize
      Src: /src/brpc/src/bthread/stack_inl.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: ~Wrapper()
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    - zeroize
    - deallocate_stack_storage
    linkageType: ''
    returnType: void
    signature: void ~Wrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Wrapper>
      Src: /src/brpc/src/bthread/stack_inl.h:150,1
    - Dst: BTHREAD_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 154
    functionName: bthread::get_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    - butil::get_object<Wrapper>
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * get_stack(void (*entry)(intptr_t))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BTHREAD_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/bthread/stack_inl.h:158,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/stack_inl.h:159,1
    - Dst: static_cast<Wrapper*>
      Src: /src/brpc/src/bthread/stack_inl.h:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cs
    argTypes:
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 160
    functionName: bthread::return_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - butil::return_object
    - BTHREAD_ASAN_POISON_MEMORY_REGION
    - static_cast<Wrapper*>
    linkageType: ''
    returnType: void
    signature: void return_stack(ContextualStack* cs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ContextualStack::ContextualStack
      Src: /src/brpc/src/bthread/stack_inl.h:165,1
    - Dst: ContextualStack*::storage::zeroize
      Src: /src/brpc/src/bthread/stack_inl.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 173
    functionName: bthread::get_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached:
    - ContextualStack::ContextualStack
    - ContextualStack*::storage::zeroize
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * get_stack(void (*)(intptr_t))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: bthread::return_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void return_stack(ContextualStack* s)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:185,1
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:187,1
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:189,1
    - Dst: bthread::get_stack
      Src: /src/brpc/src/bthread/stack_inl.h:191,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - StackType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 194
    functionName: bthread::get_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached:
    - bthread::get_stack
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * get_stack(StackType type, void (*entry)(intptr_t))
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/bthread/stack_inl.h:202,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:205,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:207,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:209,1
    - Dst: bthread::return_stack
      Src: /src/brpc/src/bthread/stack_inl.h:211,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - s
    argTypes:
    - ContextualStack*
    assertStmts:
    - condition: (false)
      pos:
        line_end: 201
        line_start: 201
        source_file: /src/brpc/src/bthread/stack_inl.h
    constantsTouched: []
    func_position:
      end: 213
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 213
    functionName: bthread::return_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 2
    functionsReached:
    - assert
    - bthread::return_stack
    linkageType: ''
    returnType: void
    signature: void return_stack(ContextualStack* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_jump_fcontext
      Src: /src/brpc/src/bthread/stack_inl.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - from
    - to
    argTypes:
    - ContextualStack*
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: bthread::jump_stack
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached:
    - bthread_jump_fcontext
    linkageType: ''
    returnType: void
    signature: void jump_stack(ContextualStack* from, ContextualStack* to)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 241
    functionName: butil::value
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: butil::value
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 253
    functionName: butil::value
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - bthread::StackFactory<bthread::LargeStackClass>::Wrapper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 261
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool validate(\n        const bthread::StackFactory<bthread::LargeStackClass>::Wrapper*
      w)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - bthread::StackFactory<bthread::NormalStackClass>::Wrapper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 269
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool validate(\n        const bthread::StackFactory<bthread::NormalStackClass>::Wrapper*
      w)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - bthread::StackFactory<bthread::SmallStackClass>::Wrapper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 277
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool validate(\n        const bthread::StackFactory<bthread::SmallStackClass>::Wrapper*
      w)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 241
    functionName: butil::value
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: butil::value
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 253
    functionName: butil::value
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - bthread::StackFactory<bthread::LargeStackClass>::Wrapper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 261
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool validate(\n        const bthread::StackFactory<bthread::LargeStackClass>::Wrapper*
      w)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - bthread::StackFactory<bthread::NormalStackClass>::Wrapper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 269
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool validate(\n        const bthread::StackFactory<bthread::NormalStackClass>::Wrapper*
      w)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - bthread::StackFactory<bthread::SmallStackClass>::Wrapper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 277
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/bthread/stack_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool validate(\n        const bthread::StackFactory<bthread::SmallStackClass>::Wrapper*
      w)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: bthread::TimerThread::thread_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pthread_t
    signature: pthread_t thread_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: bthread::TimerThread::thread_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pthread_t
    signature: pthread_t thread_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/src/bthread/bthread.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: bthread::validate_bthread_concurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_concurrency(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: bthread::get_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_task_control()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:84,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:88,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:89,1
    - Dst: TaskControl::TaskControl
      Src: /src/brpc/src/bthread/bthread.cpp:93,1
    - Dst: TaskControl*::init
      Src: /src/brpc/src/bthread/bthread.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:101,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/src/bthread/bthread.cpp:105,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 107
    functionName: bthread::get_or_new_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl::TaskControl
    - TaskControl*::init
    - BAIDU_SCOPED_LOCK
    - butil::atomic*::store
    - butil::atomic*::load
    - LOG
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_or_new_task_control()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:119,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/bthread.cpp:125,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/bthread.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:127,1
    - Dst: bthread::make_tid
      Src: /src/brpc/src/bthread/bthread.cpp:132,1
    - Dst: TaskControl*::_task_tracer::set_running_status
      Src: /src/brpc/src/bthread/bthread.cpp:134,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/bthread.cpp:134,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bthread/bthread.cpp:137,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:141,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/bthread.cpp:142,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:152,1
    - Dst: WaitForTracing
      Src: /src/brpc/src/bthread/bthread.cpp:152,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:154,1
    - Dst: set_status
      Src: /src/brpc/src/bthread/bthread.cpp:154,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/bthread.cpp:157,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/bthread.cpp:157,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 162
    functionName: bthread::init_for_pthread_stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::_task_tracer::set_running_status
    - syscall
    - butil::thread_atexit
    - butil::get_resource
    - bthread::get_slot
    - butil::return_resource
    - set_status
    - WaitForTracing
    - BAIDU_SCOPED_LOCK
    - bthread::TaskTracer::set_end_status_unsafe
    - BAIDU_UNLIKELY
    - bthread::get_task_control
    - LOG
    - bthread::make_tid
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t init_for_pthread_stack_trace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:165,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: bthread::stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - bthread::get_task_control
    - TaskControl*::stack_trace
    linkageType: ''
    returnType: void
    signature: void stack_trace(std::ostream& os, bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:174,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 179
    functionName: bthread::stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - bthread::get_task_control
    - TaskControl*::stack_trace
    linkageType: ''
    returnType: std::string
    signature: std::string stack_trace(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:184,1
    - Dst: auto::add_workers
      Src: /src/brpc/src/bthread/bthread.cpp:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 189
    functionName: bthread::add_workers_for_each_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - auto::add_workers
    linkageType: ''
    returnType: int
    signature: int add_workers_for_each_tag(int num)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:198,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:202,1
    - Dst: TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:203,1
    - Dst: bthread::add_workers_for_each_tag
      Src: /src/brpc/src/bthread/bthread.cpp:205,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 210
    functionName: bthread::validate_bthread_min_concurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - TaskControl*::concurrency
    - bthread::add_workers_for_each_tag
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_min_concurrency(const char*, int32_t val)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:218,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:219,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 226
    functionName: bthread::validate_bthread_current_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - auto::concurrency
    - bthread::get_task_control
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_current_tag(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency_by_tag
      Src: /src/brpc/src/bthread/bthread.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 230
    functionName: bthread::validate_bthread_concurrency_by_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency_by_tag
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_concurrency_by_tag(const char*, int32_t val)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_or_new_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:239,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:254,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:259,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 4
    argNames:
    - tid
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 234
    functionDepth: 2
    functionLinenumber: 234
    functionLinenumberEnd: 260
    functionName: bthread::start_from_non_worker
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::choose_one_group
    - bthread::get_or_new_task_control
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE start_from_non_worker(bthread_t* __restrict tid,\n
      \                     const bthread_attr_t* __restrict attr,\n                      void*
      (*fn)(void*),\n                      void* __restrict arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/bthread.cpp:267,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 269
    functionName: bthread::can_run_thread_local
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - tag
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE can_run_thread_local(const bthread_attr_t* __restrict
      attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/src/bthread/bthread.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: bthread::exists
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::exists
    linkageType: ''
    returnType: bool
    signature: bool exists(bthread_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_stop
      Src: /src/brpc/src/bthread/bthread.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 1
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: operator()(bthread_t id) const
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void operator()(bthread_t id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/bthread/bthread.cpp:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: operator()(bthread_t & id) const
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void operator()(bthread_t & id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/src/bthread/bthread.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: bthread::validate_bthread_concurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_concurrency(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: bthread::get_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_task_control()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:84,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:88,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:89,1
    - Dst: TaskControl::TaskControl
      Src: /src/brpc/src/bthread/bthread.cpp:93,1
    - Dst: TaskControl*::init
      Src: /src/brpc/src/bthread/bthread.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:101,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/src/bthread/bthread.cpp:105,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 107
    functionName: bthread::get_or_new_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 1
    functionsReached:
    - TaskControl::TaskControl
    - TaskControl*::init
    - BAIDU_SCOPED_LOCK
    - butil::atomic*::store
    - butil::atomic*::load
    - LOG
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_or_new_task_control()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:119,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/bthread.cpp:125,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/bthread.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:127,1
    - Dst: bthread::make_tid
      Src: /src/brpc/src/bthread/bthread.cpp:132,1
    - Dst: TaskControl*::_task_tracer::set_running_status
      Src: /src/brpc/src/bthread/bthread.cpp:134,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/bthread.cpp:134,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bthread/bthread.cpp:137,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:141,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/bthread.cpp:142,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:152,1
    - Dst: WaitForTracing
      Src: /src/brpc/src/bthread/bthread.cpp:152,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:154,1
    - Dst: set_status
      Src: /src/brpc/src/bthread/bthread.cpp:154,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/bthread.cpp:157,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/bthread.cpp:157,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 162
    functionName: bthread::init_for_pthread_stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::_task_tracer::set_running_status
    - syscall
    - butil::thread_atexit
    - butil::get_resource
    - bthread::get_slot
    - butil::return_resource
    - set_status
    - WaitForTracing
    - BAIDU_SCOPED_LOCK
    - bthread::TaskTracer::set_end_status_unsafe
    - BAIDU_UNLIKELY
    - bthread::get_task_control
    - LOG
    - bthread::make_tid
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t init_for_pthread_stack_trace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:165,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: bthread::stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - bthread::get_task_control
    - TaskControl*::stack_trace
    linkageType: ''
    returnType: void
    signature: void stack_trace(std::ostream& os, bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:174,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 179
    functionName: bthread::stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - bthread::get_task_control
    - TaskControl*::stack_trace
    linkageType: ''
    returnType: std::string
    signature: std::string stack_trace(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:184,1
    - Dst: auto::add_workers
      Src: /src/brpc/src/bthread/bthread.cpp:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 189
    functionName: bthread::add_workers_for_each_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 1
    functionsReached:
    - bthread::get_task_control
    - auto::add_workers
    linkageType: ''
    returnType: int
    signature: int add_workers_for_each_tag(int num)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:198,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:202,1
    - Dst: TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:203,1
    - Dst: bthread::add_workers_for_each_tag
      Src: /src/brpc/src/bthread/bthread.cpp:205,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 210
    functionName: bthread::validate_bthread_min_concurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - TaskControl*::concurrency
    - bthread::add_workers_for_each_tag
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_min_concurrency(const char*, int32_t val)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:218,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:219,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 226
    functionName: bthread::validate_bthread_current_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - auto::concurrency
    - bthread::get_task_control
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_current_tag(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency_by_tag
      Src: /src/brpc/src/bthread/bthread.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 230
    functionName: bthread::validate_bthread_concurrency_by_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency_by_tag
    linkageType: ''
    returnType: bool
    signature: bool validate_bthread_concurrency_by_tag(const char*, int32_t val)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_or_new_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:239,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:254,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:259,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 4
    argNames:
    - tid
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 234
    functionDepth: 2
    functionLinenumber: 234
    functionLinenumberEnd: 260
    functionName: bthread::start_from_non_worker
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::choose_one_group
    - bthread::get_or_new_task_control
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE start_from_non_worker(bthread_t* __restrict tid,\n
      \                     const bthread_attr_t* __restrict attr,\n                      void*
      (*fn)(void*),\n                      void* __restrict arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/bthread.cpp:267,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 269
    functionName: bthread::can_run_thread_local
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - tag
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE can_run_thread_local(const bthread_attr_t* __restrict
      attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::exists
      Src: /src/brpc/src/bthread/bthread.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: bthread::exists
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::exists
    linkageType: ''
    returnType: bool
    signature: bool exists(bthread_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_stop
      Src: /src/brpc/src/bthread/bthread.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 1
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: operator()(bthread_t id) const
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void operator()(bthread_t id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/bthread/bthread.cpp:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: operator()(bthread_t & id) const
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void operator()(bthread_t & id) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::can_run_thread_local
      Src: /src/brpc/src/bthread/bthread.cpp:303,1
    - Dst: bthread::TaskGroup::start_foreground
      Src: /src/brpc/src/bthread/bthread.cpp:304,1
    - Dst: bthread::start_from_non_worker
      Src: /src/brpc/src/bthread/bthread.cpp:307,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 4
    argNames:
    - tid
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 296
    functionDepth: 3
    functionLinenumber: 296
    functionLinenumberEnd: 308
    functionName: bthread_start_urgent
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 127
    functionsReached:
    - bthread::start_from_non_worker
    - bthread::can_run_thread_local
    - bthread::TaskGroup::start_foreground
    linkageType: ''
    returnType: int
    signature: "int bthread_start_urgent(bthread_t* __restrict tid,\n                         const
      bthread_attr_t* __restrict attr,\n                         void * (*fn)(void*),\n
      \                        void* __restrict arg)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::can_run_thread_local
      Src: /src/brpc/src/bthread/bthread.cpp:317,1
    - Dst: bthread::start_from_non_worker
      Src: /src/brpc/src/bthread/bthread.cpp:321,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 4
    argNames:
    - tid
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 310
    functionDepth: 3
    functionLinenumber: 310
    functionLinenumberEnd: 322
    functionName: bthread_start_background
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 60
    functionsReached:
    - bthread::can_run_thread_local
    - bthread::start_from_non_worker
    linkageType: ''
    returnType: int
    signature: "int bthread_start_background(bthread_t* __restrict tid,\n                             const
      bthread_attr_t* __restrict attr,\n                             void * (*fn)(void*),\n
      \                            void* __restrict arg)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup*::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/bthread.cpp:327,1
    - Dst: bthread::TaskGroup*::flush_nosignal_tasks_remote
      Src: /src/brpc/src/bthread/bthread.cpp:333,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 335
    functionName: bthread_flush
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 6
    functionsReached:
    - bthread::TaskGroup*::flush_nosignal_tasks
    - bthread::TaskGroup*::flush_nosignal_tasks_remote
    linkageType: ''
    returnType: void
    signature: void bthread_flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::interrupt
      Src: /src/brpc/src/bthread/bthread.cpp:338,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:338,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tid
    - tag
    argTypes:
    - bthread_t
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 339
    functionName: bthread_interrupt
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - bthread::TaskGroup::interrupt
    linkageType: ''
    returnType: int
    signature: int bthread_interrupt(bthread_t tid, bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::set_stopped
      Src: /src/brpc/src/bthread/bthread.cpp:342,1
    - Dst: bthread_interrupt
      Src: /src/brpc/src/bthread/bthread.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 341
    functionDepth: 2
    functionLinenumber: 341
    functionLinenumberEnd: 344
    functionName: bthread_stop
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 23
    functionsReached:
    - bthread::TaskGroup::set_stopped
    - bthread_interrupt
    linkageType: ''
    returnType: int
    signature: int bthread_stop(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::is_stopped
      Src: /src/brpc/src/bthread/bthread.cpp:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 348
    functionName: bthread_stopped
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 3
    functionsReached:
    - bthread::TaskGroup::is_stopped
    linkageType: ''
    returnType: int
    signature: int bthread_stopped(bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup*::is_current_main_task
      Src: /src/brpc/src/bthread/bthread.cpp:355,1
    - Dst: bthread::TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/bthread.cpp:356,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 359
    functionName: bthread_self
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 21
    functionsReached:
    - bthread::TaskGroup*::current_tid
    - bthread::TaskGroup*::is_current_main_task
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t bthread_self(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - bthread_t
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 363
    functionName: bthread_equal
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_equal(bthread_t t1, bthread_t t2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup*::is_current_main_task
      Src: /src/brpc/src/bthread/bthread.cpp:374,1
    - Dst: bthread::ExitException::ExitException
      Src: /src/brpc/src/bthread/bthread.cpp:375,1
    - Dst: pthread_exit
      Src: /src/brpc/src/bthread/bthread.cpp:377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - retval
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 379
    functionName: bthread_exit
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached:
    - pthread_exit
    - bthread::ExitException::ExitException
    - bthread::TaskGroup*::is_current_main_task
    linkageType: ''
    returnType: void
    signature: void bthread_exit(void* retval)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::join
      Src: /src/brpc/src/bthread/bthread.cpp:382,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tid
    - thread_return
    argTypes:
    - bthread_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 383
    functionName: bthread_join
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 171
    functionsReached:
    - bthread::TaskGroup::join
    linkageType: ''
    returnType: int
    signature: int bthread_join(bthread_t tid, void** thread_return)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - a
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 388
    functionName: bthread_attr_init
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_attr_init(bthread_attr_t* a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 392
    functionName: bthread_attr_destroy
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_attr_destroy(bthread_attr_t*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::get_attr
      Src: /src/brpc/src/bthread/bthread.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tid
    - attr
    argTypes:
    - bthread_t
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 396
    functionName: bthread_getattr
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::get_attr
    linkageType: ''
    returnType: int
    signature: int bthread_getattr(bthread_t tid, bthread_attr_t* attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 400
    functionName: bthread_getconcurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_getconcurrency(void)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:404,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:417,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:419,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:421,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:425,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:426,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:436,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:437,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:439,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:440,1
    - Dst: bthread::add_workers_for_each_tag
      Src: /src/brpc/src/bthread/bthread.cpp:444,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 43
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 448
    functionName: bthread_setconcurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 24
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - bthread::add_workers_for_each_tag
    - bthread::get_task_control
    - LOG
    - bthread::TaskControl*::concurrency
    linkageType: ''
    returnType: int
    signature: int bthread_setconcurrency(int num)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:451,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:452,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 457
    functionName: bthread_getconcurrency_by_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - auto::concurrency
    - bthread::get_task_control
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int bthread_getconcurrency_by_tag(bthread_tag_t tag)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:466,1
    - Dst: bthread::get_or_new_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:469,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:470,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:471,1
    - Dst: auto::add_workers
      Src: /src/brpc/src/bthread/bthread.cpp:475,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:479,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - num
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 459
    functionDepth: 2
    functionLinenumber: 459
    functionLinenumberEnd: 484
    functionName: bthread_setconcurrency_by_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached:
    - auto::add_workers
    - bthread::get_or_new_task_control
    - BAIDU_SCOPED_LOCK
    - auto::concurrency
    - LOG
    linkageType: ''
    returnType: int
    signature: int bthread_setconcurrency_by_tag(int num, bthread_tag_t tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/bthread.cpp:489,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 496
    functionName: bthread_about_to_quit
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup*::current_task
    linkageType: ''
    returnType: int
    signature: int bthread_about_to_quit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_or_new_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:500,1
    - Dst: bthread::get_or_create_global_timer_thread
      Src: /src/brpc/src/bthread/bthread.cpp:504,1
    - Dst: bthread::TimerThread*::schedule
      Src: /src/brpc/src/bthread/bthread.cpp:508,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - id
    - abstime
    - arg
    argTypes:
    - bthread_timer_t*
    - timespec
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 514
    functionName: bthread_timer_add
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_or_create_global_timer_thread
    - bthread::TimerThread*::schedule
    - bthread::get_or_new_task_control
    linkageType: ''
    returnType: int
    signature: "int bthread_timer_add(bthread_timer_t* id, timespec abstime,\n                      void
      (*on_timer)(void*), void* arg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:517,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/bthread.cpp:519,1
    - Dst: bthread::TimerThread*::unschedule
      Src: /src/brpc/src/bthread/bthread.cpp:523,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_timer_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 529
    functionName: bthread_timer_del
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - bthread::get_global_timer_thread
    - bthread::TimerThread*::unschedule
    linkageType: ''
    returnType: int
    signature: int bthread_timer_del(bthread_timer_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:532,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/bthread.cpp:533,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/bthread.cpp:534,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/bthread.cpp:536,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - microseconds
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 531
    functionDepth: 1
    functionLinenumber: 531
    functionLinenumberEnd: 537
    functionName: bthread_usleep
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 233
    functionsReached:
    - bthread::TaskGroup::usleep
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::is_current_pthread_task
    linkageType: ''
    returnType: int
    signature: int bthread_usleep(uint64_t microseconds)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:540,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/bthread.cpp:541,1
    - Dst: bthread::TaskGroup::yield
      Src: /src/brpc/src/bthread/bthread.cpp:542,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/bthread.cpp:546,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 547
    functionName: bthread_yield
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached:
    - sched_yield
    - bthread::TaskGroup::yield
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::is_current_pthread_task
    linkageType: ''
    returnType: int
    signature: int bthread_yield(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 555
    functionName: bthread_set_worker_startfn
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_set_worker_startfn(void (*start_fn)())
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 563
    functionName: bthread_set_tagged_worker_startfn
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_set_tagged_worker_startfn(void (*start_fn)(bthread_tag_t))
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - (*func)()
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 571
    functionName: bthread_set_create_span_func
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_set_create_span_func(void* (*func)())
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:574,1
    - Dst: bthread::TaskControl*::stop_and_join
      Src: /src/brpc/src/bthread/bthread.cpp:576,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 578
      start: 573
    functionDepth: 1
    functionLinenumber: 573
    functionLinenumberEnd: 578
    functionName: bthread_stop_world
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - bthread::TaskControl*::stop_and_join
    linkageType: ''
    returnType: void
    signature: void bthread_stop_world()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TidList::TidList
      Src: /src/brpc/src/bthread/bthread.cpp:583,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 593
      start: 580
    functionDepth: 0
    functionLinenumber: 580
    functionLinenumberEnd: 593
    functionName: bthread_list_init
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - bthread::TidList::TidList
    linkageType: ''
    returnType: int
    signature: "int bthread_list_init(bthread_list_t* list,\n                      unsigned
      /*size*/,\n                      unsigned /*conflict_size*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::TidList*>
      Src: /src/brpc/src/bthread/bthread.cpp:596,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 595
    functionDepth: 0
    functionLinenumber: 595
    functionLinenumberEnd: 598
    functionName: bthread_list_destroy
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - static_cast<bthread::TidList*>
    linkageType: ''
    returnType: void
    signature: void bthread_list_destroy(bthread_list_t* list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::TidList*>
      Src: /src/brpc/src/bthread/bthread.cpp:604,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - list
    - id
    argTypes:
    - bthread_list_t*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 605
    functionName: bthread_list_add
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - static_cast<bthread::TidList*>
    linkageType: ''
    returnType: int
    signature: int bthread_list_add(bthread_list_t* list, bthread_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::TidList*>
      Src: /src/brpc/src/bthread/bthread.cpp:611,1
    - Dst: bthread::TidStopper
      Src: /src/brpc/src/bthread/bthread.cpp:611,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 613
    functionName: bthread_list_stop
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::TidStopper
    - static_cast<bthread::TidList*>
    linkageType: ''
    returnType: int
    signature: int bthread_list_stop(bthread_list_t* list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::TidList*>
      Src: /src/brpc/src/bthread/bthread.cpp:619,1
    - Dst: bthread::TidJoiner
      Src: /src/brpc/src/bthread/bthread.cpp:619,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 621
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 621
    functionName: bthread_list_join
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 4
    functionsReached:
    - bthread::TidJoiner
    - static_cast<bthread::TidList*>
    linkageType: ''
    returnType: int
    signature: int bthread_list_join(bthread_list_t* list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/bthread.cpp:624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 626
    functionName: bthread_self_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 12
    functionsReached:
    - tag
    linkageType: ''
    returnType: bthread_tag_t
    signature: bthread_tag_t bthread_self_tag(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup*::is_current_main_task
      Src: /src/brpc/src/bthread/bthread.cpp:630,1
    - Dst: bthread::TaskGroup*::current_task_cpu_clock_ns
      Src: /src/brpc/src/bthread/bthread.cpp:631,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 634
    functionName: bthread_cpu_clock_ns
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup*::current_task_cpu_clock_ns
    - bthread::TaskGroup*::is_current_main_task
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t bthread_cpu_clock_ns(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bthread::ButexWaiterCount
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ButexWaiterCount()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ButexWaiterCount>
      Src: /src/brpc/src/bthread/butex.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: bthread::butex_waiter_count
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ButexWaiterCount>
    linkageType: ''
    returnType: bvar::Adder<int64_t>
    signature: bvar::Adder<int64_t> & butex_waiter_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/butex.cpp:117,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/butex.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 120
    functionName: bthread::Butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    - FastPthreadMutex::FastPthreadMutex
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Butex
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: bthread::Butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Butex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~Butex()
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Butex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bthread::ButexWaiterCount
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ButexWaiterCount()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ButexWaiterCount>
      Src: /src/brpc/src/bthread/butex.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: bthread::butex_waiter_count
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ButexWaiterCount>
    linkageType: ''
    returnType: bvar::Adder<int64_t>
    signature: bvar::Adder<int64_t> & butex_waiter_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/butex.cpp:117,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/butex.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 120
    functionName: bthread::Butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    - FastPthreadMutex::FastPthreadMutex
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Butex
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: bthread::Butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Butex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~Butex()
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Butex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ButexPthreadWaiter*::sig::store
      Src: /src/brpc/src/bthread/butex.cpp:138,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/butex.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pw
    argTypes:
    - ButexPthreadWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: bthread::wakeup_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - ButexPthreadWaiter*::sig::store
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void wakeup_pthread(ButexPthreadWaiter* pw)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/butex.cpp:156,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:156,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/butex.cpp:157,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/butex.cpp:161,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:162,1
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:176,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:179,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 2
    argNames:
    - ' pw'
    - abstime
    argTypes:
    - ButexPthreadWaiter
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 189
    functionName: bthread::wait_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - bthread::futex_wait_private
    - butil::microseconds_to_timespec
    - butil::timespec_to_microseconds
    - sig::load
    - bthread::erase_from_butex
    linkageType: ''
    returnType: int
    signature: int wait_pthread(ButexPthreadWaiter& pw, const timespec* abstime)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread*::unschedule
      Src: /src/brpc/src/bthread/butex.cpp:200,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - w
    - timer_thread
    argTypes:
    - ButexBthreadWaiter*
    - TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 206
    functionName: bthread::unsleep_if_necessary
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - TimerThread*::unschedule
    linkageType: ''
    returnType: int
    signature: "int unsleep_if_necessary(ButexBthreadWaiter* w,\n                                TimerThread*
      timer_thread)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Butex>
      Src: /src/brpc/src/bthread/butex.cpp:266,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 271
    functionName: bthread::butex_create
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<Butex>
    linkageType: ''
    returnType: void
    signature: void * butex_create()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Butex*>
      Src: /src/brpc/src/bthread/butex.cpp:277,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:278,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:278,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/butex.cpp:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - butex
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: bthread::butex_destroy
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - static_cast<Butex*>
    - container_of
    - static_cast<butil::atomic<int>*>
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void butex_destroy(void* butex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/butex.cpp:284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 285
    functionName: bthread::is_same_tag
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - tag
    linkageType: ''
    returnType: bool
    signature: bool is_same_tag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:289,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - nosignal
    - tag
    argTypes:
    - bool
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 290
    functionName: bthread::check_nosignal
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::is_same_tag
    linkageType: ''
    returnType: bool
    signature: bool check_nosignal(bool nosignal, bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:294,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - tag
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 295
    functionName: bthread::get_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::is_same_tag
    - TaskControl*::choose_one_group
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * get_task_group(TaskControl* c, bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::exchange
      Src: /src/brpc/src/bthread/butex.cpp:299,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/butex.cpp:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - g
    - next_meta
    - nosignal
    argTypes:
    - TaskGroup*
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 303
    functionName: bthread::run_in_local_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::ready_to_run
    - bthread::TaskGroup::exchange
    linkageType: ''
    returnType: void
    signature: void run_in_local_task_group(TaskGroup* g, TaskMeta* next_meta, bool
      nosignal)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:306,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:306,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:309,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:310,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:313,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:314,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:315,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:318,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:318,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:321,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:322,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:322,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:323,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:325,1
    - Dst: TaskGroup*::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:327,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:327,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/butex.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 305
    functionDepth: 2
    functionLinenumber: 305
    functionLinenumberEnd: 330
    functionName: bthread::butex_wake
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 8
    functionsReached:
    - container_of
    - bthread::wakeup_pthread
    - bthread::get_global_timer_thread
    - bthread::unsleep_if_necessary
    - bthread::run_in_local_task_group
    - ButexWaiter*::container::store
    - static_cast<ButexPthreadWaiter*>
    - bthread::get_task_group
    - static_cast<ButexBthreadWaiter*>
    - Butex*::waiters::head
    - static_cast<butil::atomic<int>*>
    - BAIDU_SCOPED_LOCK
    - ButexWaiter*::RemoveFromList
    - TaskGroup*::ready_to_run_remote
    - TaskGroup*::tag
    - Butex*::waiters::empty
    - bthread::check_nosignal
    linkageType: ''
    returnType: int
    signature: int butex_wake(void* arg, bool nosignal)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:333,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:333,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:338,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:339,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:340,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:341,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:342,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:344,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:346,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:352,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:353,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:354,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:355,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:356,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:359,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:363,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:365,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:366,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:367,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:368,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:368,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:370,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:372,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:373,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:374,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:375,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:375,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:376,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:377,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:378,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:381,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:381,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:383,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:383,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:384,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:387,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:389,1
    - Dst: auto::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:391,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:391,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:391,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 3
    argNames:
    - arg
    - n
    - nosignal
    argTypes:
    - void*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 332
    functionDepth: 2
    functionLinenumber: 332
    functionLinenumberEnd: 394
    functionName: bthread::butex_wake_n
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::run_in_local_task_group
    - Butex*::waiters::head
    - auto::ready_to_run_remote
    - ButexWaiterList::empty
    - ButexWaiterList::head
    - bthread::unsleep_if_necessary
    - butil::FlatMap::end
    - static_cast<ButexBthreadWaiter*>
    - auto::tag
    - butil::FlatMap::init
    - Butex*::waiters::empty
    - ButexWaiterList::tail
    - container_of
    - bthread::wakeup_pthread
    - auto::flush_nosignal_tasks_general
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::Append
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::get_global_timer_thread
    - butil::FlatMap::begin
    - ButexWaiter*::container::store
    - bthread::get_task_group
    - static_cast<butil::atomic<int>*>
    - ButexWaiter*::RemoveFromList
    - auto::ready_to_run_general
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<ButexPthreadWaiter*>
    - bthread::check_nosignal
    linkageType: ''
    returnType: int
    signature: int butex_wake_n(void* arg, size_t n, bool nosignal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_wake_n
      Src: /src/brpc/src/bthread/butex.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 396
    functionDepth: 3
    functionLinenumber: 396
    functionLinenumberEnd: 398
    functionName: bthread::butex_wake_all
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 6
    functionsReached:
    - bthread::butex_wake_n
    linkageType: ''
    returnType: int
    signature: int butex_wake_all(void* arg, bool nosignal)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:401,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:401,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:407,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:408,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:409,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:410,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:414,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:415,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:420,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:421,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:426,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:431,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:432,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:433,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:434,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:435,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:439,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:443,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:446,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:446,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:447,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:448,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:448,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:449,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:450,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:451,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:453,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:454,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:454,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:456,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 2
    argNames:
    - arg
    - excluded_bthread
    argTypes:
    - void*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 400
    functionDepth: 2
    functionLinenumber: 400
    functionLinenumberEnd: 459
    functionName: bthread::butex_wake_except
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - Butex*::waiters::Append
    - ButexWaiterList::empty
    - ButexWaiterList::head
    - bthread::unsleep_if_necessary
    - butil::FlatMap::end
    - static_cast<ButexBthreadWaiter*>
    - auto::tag
    - butil::FlatMap::init
    - Butex*::waiters::empty
    - ButexWaiterList::tail
    - container_of
    - bthread::wakeup_pthread
    - auto::flush_nosignal_tasks_general
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::Append
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::get_global_timer_thread
    - butil::FlatMap::begin
    - ButexWaiter*::container::store
    - bthread::get_task_group
    - static_cast<butil::atomic<int>*>
    - ButexWaiter*::RemoveFromList
    - auto::ready_to_run_general
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<ButexPthreadWaiter*>
    linkageType: ''
    returnType: int
    signature: int butex_wake_except(void* arg, bthread_t excluded_bthread)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:462,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:462,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:463,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:463,1
    - Dst: butil::double_lock
      Src: /src/brpc/src/bthread/butex.cpp:469,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:470,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:474,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:475,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:476,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:478,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:479,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:480,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:481,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:482,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:487,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:487,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:490,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:491,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:491,1
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:492,1
    - Dst: bthread::TaskGroup::exchange
      Src: /src/brpc/src/bthread/butex.cpp:494,1
    - Dst: ButexBthreadWaiter*::control::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:496,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - arg
    - arg2
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 461
    functionDepth: 1
    functionLinenumber: 461
    functionLinenumberEnd: 499
    functionName: bthread::butex_requeue
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - container_of
    - bthread::wakeup_pthread
    - bthread::get_global_timer_thread
    - bthread::unsleep_if_necessary
    - bthread::is_same_tag
    - bthread::TaskGroup::exchange
    - ButexWaiter*::container::store
    - static_cast<ButexPthreadWaiter*>
    - static_cast<ButexBthreadWaiter*>
    - Butex*::waiters::head
    - static_cast<butil::atomic<int>*>
    - ButexWaiter*::RemoveFromList
    - butil::double_lock
    - Butex*::waiters::Append
    - ButexBthreadWaiter*::control::choose_one_group
    - Butex*::waiters::empty
    linkageType: ''
    returnType: int
    signature: int butex_requeue(void* arg, void* arg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:503,1
    - Dst: static_cast<ButexWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 504
    functionName: bthread::erase_from_butex_and_wakeup
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ButexWaiter*>
    - bthread::erase_from_butex
    linkageType: ''
    returnType: void
    signature: void erase_from_butex_and_wakeup(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bw
    argTypes:
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 509
    functionName: bthread::erase_from_butex_because_of_interruption
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::erase_from_butex
    linkageType: ''
    returnType: bool
    signature: bool erase_from_butex_because_of_interruption(ButexWaiter* bw)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ButexWaiter*::container::load
      Src: /src/brpc/src/bthread/butex.cpp:518,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:520,1
    - Dst: ButexWaiter*::container::load
      Src: /src/brpc/src/bthread/butex.cpp:521,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:522,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:523,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:525,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:533,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:534,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:536,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:537,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - bw
    - wakeup
    - state
    argTypes:
    - ButexWaiter*
    - bool
    - WaiterState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 511
    functionDepth: 2
    functionLinenumber: 511
    functionLinenumberEnd: 542
    functionName: bthread::erase_from_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 3
    functionsReached:
    - bthread::wakeup_pthread
    - ButexWaiter*::container::store
    - bthread::get_task_group
    - static_cast<ButexBthreadWaiter*>
    - BAIDU_SCOPED_LOCK
    - ButexWaiter*::RemoveFromList
    - static_cast<ButexPthreadWaiter*>
    - ButexWaiter*::container::load
    linkageType: ''
    returnType: bool
    signature: bool erase_from_butex(ButexWaiter* bw, bool wakeup, WaiterState state)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WaitForButexArgs*>
      Src: /src/brpc/src/bthread/butex.cpp:550,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:568,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:569,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:574,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:576,1
    - Dst: ButexBthreadWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:578,1
    - Dst: ButexBthreadWaiter*::control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/butex.cpp:580,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:583,1
    - Dst: bthread::erase_from_butex_and_wakeup
      Src: /src/brpc/src/bthread/butex.cpp:587,1
    - Dst: ready_to_run
      Src: /src/brpc/src/bthread/butex.cpp:599,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 610
    functionName: bthread::wait_for_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_global_timer_thread
    - ready_to_run
    - BAIDU_SCOPED_LOCK
    - ButexBthreadWaiter*::control::_task_tracer::set_status
    - Butex*::value::load
    - Butex*::waiters::Append
    - ButexBthreadWaiter*::container::store
    - bthread::erase_from_butex_and_wakeup
    - static_cast<WaitForButexArgs*>
    - Butex*::waiters::Prepend
    linkageType: ''
    returnType: void
    signature: void wait_for_butex(void* arg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ButexPthreadWaiter::sig::store
      Src: /src/brpc/src/bthread/butex.cpp:617,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:621,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:622,1
    - Dst: Butex*::waiter_lock::lock
      Src: /src/brpc/src/bthread/butex.cpp:624,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:625,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:626,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:630,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:637,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:639,1
    - Dst: ButexPthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:641,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:642,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:645,1
    - Dst: bthread::wait_pthread
      Src: /src/brpc/src/bthread/butex.cpp:648,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:656,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:656,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 41
    argCount: 5
    argNames:
    - g
    - b
    - expected_value
    - abstime
    - prepend
    argTypes:
    - TaskGroup*
    - Butex*
    - int
    - timespec*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 612
    functionDepth: 2
    functionLinenumber: 612
    functionLinenumberEnd: 668
    functionName: bthread::butex_wait_from_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - TaskMeta*::current_waiter::exchange
    - ButexPthreadWaiter::container::store
    - bthread::butex_waiter_count
    - bthread::wait_pthread
    - Butex*::waiters::Append
    - TaskMeta*::current_waiter::store
    - ButexPthreadWaiter::sig::store
    - Butex*::value::load
    - Butex*::waiter_lock::lock
    - BT_LOOP_WHEN
    - TaskGroup*::current_task
    - Butex*::waiter_lock::unlock
    - Butex*::waiters::Prepend
    linkageType: ''
    returnType: int
    signature: "int butex_wait_from_pthread(TaskGroup* g, Butex* b, int expected_value,\n
      \                                  const timespec* abstime, bool prepend)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:671,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:671,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:672,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/butex.cpp:676,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/butex.cpp:680,1
    - Dst: bthread::butex_wait_from_pthread
      Src: /src/brpc/src/bthread/butex.cpp:681,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/butex.cpp:685,1
    - Dst: ButexBthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:686,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:687,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/butex.cpp:692,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/butex.cpp:694,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/butex.cpp:699,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:700,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:707,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:713,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/butex.cpp:715,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/butex.cpp:716,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:725,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:725,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 49
    argCount: 4
    argNames:
    - arg
    - expected_value
    - abstime
    - prepend
    argTypes:
    - void*
    - int
    - timespec*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 670
    functionDepth: 3
    functionLinenumber: 670
    functionLinenumberEnd: 750
    functionName: bthread::butex_wait
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - TaskGroup*::is_current_pthread_task
    - ButexBthreadWaiter::task_meta::current_waiter::exchange
    - TaskGroup*::tag
    - ButexBthreadWaiter::container::store
    - bthread::unsleep_if_necessary
    - butil::timespec_to_microseconds
    - std::atomic_thread_fence
    - TaskGroup*::current_task
    - butil::gettimeofday_us
    - container_of
    - TaskGroup*::control
    - TaskGroup*::current_tid
    - bthread::butex_waiter_count
    - Butex*::value::load
    - BT_LOOP_WHEN
    - TaskGroup*::set_remained
    - bthread::get_global_timer_thread
    - static_cast<butil::atomic<int>*>
    - ButexBthreadWaiter::task_meta::current_waiter::store
    - bthread::TaskGroup::sched
    - bthread::butex_wait_from_pthread
    linkageType: ''
    returnType: int
    signature: int butex_wait(void* arg, int expected_value, const timespec* abstime,
      bool prepend)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ButexPthreadWaiter*::sig::store
      Src: /src/brpc/src/bthread/butex.cpp:138,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/butex.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pw
    argTypes:
    - ButexPthreadWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: bthread::wakeup_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 5
    functionsReached:
    - ButexPthreadWaiter*::sig::store
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void wakeup_pthread(ButexPthreadWaiter* pw)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/butex.cpp:156,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:156,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/butex.cpp:157,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/butex.cpp:161,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:162,1
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:176,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:179,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 2
    argNames:
    - ' pw'
    - abstime
    argTypes:
    - ButexPthreadWaiter
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 148
    functionDepth: 3
    functionLinenumber: 148
    functionLinenumberEnd: 189
    functionName: bthread::wait_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - bthread::futex_wait_private
    - butil::microseconds_to_timespec
    - butil::timespec_to_microseconds
    - sig::load
    - bthread::erase_from_butex
    linkageType: ''
    returnType: int
    signature: int wait_pthread(ButexPthreadWaiter& pw, const timespec* abstime)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread*::unschedule
      Src: /src/brpc/src/bthread/butex.cpp:200,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - w
    - timer_thread
    argTypes:
    - ButexBthreadWaiter*
    - TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 206
    functionName: bthread::unsleep_if_necessary
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 5
    functionsReached:
    - TimerThread*::unschedule
    linkageType: ''
    returnType: int
    signature: "int unsleep_if_necessary(ButexBthreadWaiter* w,\n                                TimerThread*
      timer_thread)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Butex>
      Src: /src/brpc/src/bthread/butex.cpp:266,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 271
    functionName: bthread::butex_create
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<Butex>
    linkageType: ''
    returnType: void
    signature: void * butex_create()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Butex*>
      Src: /src/brpc/src/bthread/butex.cpp:277,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:278,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:278,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/butex.cpp:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - butex
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: bthread::butex_destroy
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - static_cast<Butex*>
    - container_of
    - static_cast<butil::atomic<int>*>
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void butex_destroy(void* butex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/butex.cpp:284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 285
    functionName: bthread::is_same_tag
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 3
    functionsReached:
    - tag
    linkageType: ''
    returnType: bool
    signature: bool is_same_tag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:289,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - nosignal
    - tag
    argTypes:
    - bool
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 290
    functionName: bthread::check_nosignal
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 2
    functionsReached:
    - bthread::is_same_tag
    linkageType: ''
    returnType: bool
    signature: bool check_nosignal(bool nosignal, bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:294,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - tag
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 295
    functionName: bthread::get_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 4
    functionsReached:
    - bthread::is_same_tag
    - TaskControl*::choose_one_group
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * get_task_group(TaskControl* c, bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::exchange
      Src: /src/brpc/src/bthread/butex.cpp:299,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/butex.cpp:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - g
    - next_meta
    - nosignal
    argTypes:
    - TaskGroup*
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 303
    functionName: bthread::run_in_local_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::ready_to_run
    - bthread::TaskGroup::exchange
    linkageType: ''
    returnType: void
    signature: void run_in_local_task_group(TaskGroup* g, TaskMeta* next_meta, bool
      nosignal)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:306,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:306,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:309,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:310,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:313,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:314,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:315,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:318,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:318,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:321,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:322,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:322,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:323,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:325,1
    - Dst: TaskGroup*::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:327,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:327,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/butex.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 305
    functionDepth: 2
    functionLinenumber: 305
    functionLinenumberEnd: 330
    functionName: bthread::butex_wake
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 8
    functionsReached:
    - container_of
    - bthread::wakeup_pthread
    - bthread::get_global_timer_thread
    - bthread::unsleep_if_necessary
    - bthread::run_in_local_task_group
    - ButexWaiter*::container::store
    - static_cast<ButexPthreadWaiter*>
    - bthread::get_task_group
    - static_cast<ButexBthreadWaiter*>
    - Butex*::waiters::head
    - static_cast<butil::atomic<int>*>
    - BAIDU_SCOPED_LOCK
    - ButexWaiter*::RemoveFromList
    - TaskGroup*::ready_to_run_remote
    - TaskGroup*::tag
    - Butex*::waiters::empty
    - bthread::check_nosignal
    linkageType: ''
    returnType: int
    signature: int butex_wake(void* arg, bool nosignal)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:333,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:333,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:338,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:339,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:340,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:341,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:342,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:344,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:346,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:352,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:353,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:354,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:355,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:356,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:359,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:363,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:365,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:366,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:367,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:368,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:368,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:370,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:372,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:373,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:374,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:375,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:375,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:376,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:377,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:378,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:381,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:381,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:383,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:383,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:384,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:387,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:389,1
    - Dst: auto::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:391,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:391,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:391,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 3
    argNames:
    - arg
    - n
    - nosignal
    argTypes:
    - void*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 332
    functionDepth: 2
    functionLinenumber: 332
    functionLinenumberEnd: 394
    functionName: bthread::butex_wake_n
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - bthread::run_in_local_task_group
    - Butex*::waiters::head
    - auto::ready_to_run_remote
    - ButexWaiterList::empty
    - ButexWaiterList::head
    - bthread::unsleep_if_necessary
    - butil::FlatMap::end
    - static_cast<ButexBthreadWaiter*>
    - auto::tag
    - butil::FlatMap::init
    - Butex*::waiters::empty
    - ButexWaiterList::tail
    - container_of
    - bthread::wakeup_pthread
    - auto::flush_nosignal_tasks_general
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::Append
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::get_global_timer_thread
    - butil::FlatMap::begin
    - ButexWaiter*::container::store
    - bthread::get_task_group
    - static_cast<butil::atomic<int>*>
    - ButexWaiter*::RemoveFromList
    - auto::ready_to_run_general
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<ButexPthreadWaiter*>
    - bthread::check_nosignal
    linkageType: ''
    returnType: int
    signature: int butex_wake_n(void* arg, size_t n, bool nosignal)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_wake_n
      Src: /src/brpc/src/bthread/butex.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 396
    functionDepth: 3
    functionLinenumber: 396
    functionLinenumberEnd: 398
    functionName: bthread::butex_wake_all
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 6
    functionsReached:
    - bthread::butex_wake_n
    linkageType: ''
    returnType: int
    signature: int butex_wake_all(void* arg, bool nosignal)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:401,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:401,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:407,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:408,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:409,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:410,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:414,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:415,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:420,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:421,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:426,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:431,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:432,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:433,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:434,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:435,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:439,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:443,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:446,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:446,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:447,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:448,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:448,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:449,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:450,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:451,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:453,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:454,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:454,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:456,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 2
    argNames:
    - arg
    - excluded_bthread
    argTypes:
    - void*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 400
    functionDepth: 2
    functionLinenumber: 400
    functionLinenumberEnd: 459
    functionName: bthread::butex_wake_except
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - Butex*::waiters::Append
    - ButexWaiterList::empty
    - ButexWaiterList::head
    - bthread::unsleep_if_necessary
    - butil::FlatMap::end
    - static_cast<ButexBthreadWaiter*>
    - auto::tag
    - butil::FlatMap::init
    - Butex*::waiters::empty
    - ButexWaiterList::tail
    - container_of
    - bthread::wakeup_pthread
    - auto::flush_nosignal_tasks_general
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::Append
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::get_global_timer_thread
    - butil::FlatMap::begin
    - ButexWaiter*::container::store
    - bthread::get_task_group
    - static_cast<butil::atomic<int>*>
    - ButexWaiter*::RemoveFromList
    - auto::ready_to_run_general
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<ButexPthreadWaiter*>
    linkageType: ''
    returnType: int
    signature: int butex_wake_except(void* arg, bthread_t excluded_bthread)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:462,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:462,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:463,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:463,1
    - Dst: butil::double_lock
      Src: /src/brpc/src/bthread/butex.cpp:469,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:470,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:474,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:475,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:476,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:478,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:479,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:480,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:481,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:482,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:487,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:487,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:490,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:491,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:491,1
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:492,1
    - Dst: bthread::TaskGroup::exchange
      Src: /src/brpc/src/bthread/butex.cpp:494,1
    - Dst: ButexBthreadWaiter*::control::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:496,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - arg
    - arg2
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 461
    functionDepth: 1
    functionLinenumber: 461
    functionLinenumberEnd: 499
    functionName: bthread::butex_requeue
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - container_of
    - bthread::wakeup_pthread
    - bthread::get_global_timer_thread
    - bthread::unsleep_if_necessary
    - bthread::is_same_tag
    - bthread::TaskGroup::exchange
    - ButexWaiter*::container::store
    - static_cast<ButexPthreadWaiter*>
    - static_cast<ButexBthreadWaiter*>
    - Butex*::waiters::head
    - static_cast<butil::atomic<int>*>
    - ButexWaiter*::RemoveFromList
    - butil::double_lock
    - Butex*::waiters::Append
    - ButexBthreadWaiter*::control::choose_one_group
    - Butex*::waiters::empty
    linkageType: ''
    returnType: int
    signature: int butex_requeue(void* arg, void* arg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:503,1
    - Dst: static_cast<ButexWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 502
    functionDepth: 3
    functionLinenumber: 502
    functionLinenumberEnd: 504
    functionName: bthread::erase_from_butex_and_wakeup
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - static_cast<ButexWaiter*>
    - bthread::erase_from_butex
    linkageType: ''
    returnType: void
    signature: void erase_from_butex_and_wakeup(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bw
    argTypes:
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 507
    functionDepth: 3
    functionLinenumber: 507
    functionLinenumberEnd: 509
    functionName: bthread::erase_from_butex_because_of_interruption
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::erase_from_butex
    linkageType: ''
    returnType: bool
    signature: bool erase_from_butex_because_of_interruption(ButexWaiter* bw)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ButexWaiter*::container::load
      Src: /src/brpc/src/bthread/butex.cpp:518,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:520,1
    - Dst: ButexWaiter*::container::load
      Src: /src/brpc/src/bthread/butex.cpp:521,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:522,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:523,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:525,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:533,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:534,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:536,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:537,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - bw
    - wakeup
    - state
    argTypes:
    - ButexWaiter*
    - bool
    - WaiterState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 511
    functionDepth: 2
    functionLinenumber: 511
    functionLinenumberEnd: 542
    functionName: bthread::erase_from_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 6
    functionsReached:
    - bthread::wakeup_pthread
    - ButexWaiter*::container::store
    - bthread::get_task_group
    - static_cast<ButexBthreadWaiter*>
    - BAIDU_SCOPED_LOCK
    - ButexWaiter*::RemoveFromList
    - static_cast<ButexPthreadWaiter*>
    - ButexWaiter*::container::load
    linkageType: ''
    returnType: bool
    signature: bool erase_from_butex(ButexWaiter* bw, bool wakeup, WaiterState state)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WaitForButexArgs*>
      Src: /src/brpc/src/bthread/butex.cpp:550,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:568,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:569,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:574,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:576,1
    - Dst: ButexBthreadWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:578,1
    - Dst: ButexBthreadWaiter*::control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/butex.cpp:580,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:583,1
    - Dst: bthread::erase_from_butex_and_wakeup
      Src: /src/brpc/src/bthread/butex.cpp:587,1
    - Dst: ready_to_run
      Src: /src/brpc/src/bthread/butex.cpp:599,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 610
    functionName: bthread::wait_for_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_global_timer_thread
    - ready_to_run
    - BAIDU_SCOPED_LOCK
    - ButexBthreadWaiter*::control::_task_tracer::set_status
    - Butex*::value::load
    - Butex*::waiters::Append
    - ButexBthreadWaiter*::container::store
    - bthread::erase_from_butex_and_wakeup
    - static_cast<WaitForButexArgs*>
    - Butex*::waiters::Prepend
    linkageType: ''
    returnType: void
    signature: void wait_for_butex(void* arg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ButexPthreadWaiter::sig::store
      Src: /src/brpc/src/bthread/butex.cpp:617,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:621,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:622,1
    - Dst: Butex*::waiter_lock::lock
      Src: /src/brpc/src/bthread/butex.cpp:624,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:625,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:626,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:630,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:637,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:639,1
    - Dst: ButexPthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:641,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:642,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:645,1
    - Dst: bthread::wait_pthread
      Src: /src/brpc/src/bthread/butex.cpp:648,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:656,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:656,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 41
    argCount: 5
    argNames:
    - g
    - b
    - expected_value
    - abstime
    - prepend
    argTypes:
    - TaskGroup*
    - Butex*
    - int
    - timespec*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 612
    functionDepth: 2
    functionLinenumber: 612
    functionLinenumberEnd: 668
    functionName: bthread::butex_wait_from_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - TaskMeta*::current_waiter::exchange
    - ButexPthreadWaiter::container::store
    - bthread::butex_waiter_count
    - bthread::wait_pthread
    - Butex*::waiters::Append
    - TaskMeta*::current_waiter::store
    - ButexPthreadWaiter::sig::store
    - Butex*::value::load
    - Butex*::waiter_lock::lock
    - BT_LOOP_WHEN
    - TaskGroup*::current_task
    - Butex*::waiter_lock::unlock
    - Butex*::waiters::Prepend
    linkageType: ''
    returnType: int
    signature: "int butex_wait_from_pthread(TaskGroup* g, Butex* b, int expected_value,\n
      \                                  const timespec* abstime, bool prepend)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:671,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:671,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:672,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/butex.cpp:676,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/butex.cpp:680,1
    - Dst: bthread::butex_wait_from_pthread
      Src: /src/brpc/src/bthread/butex.cpp:681,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/butex.cpp:685,1
    - Dst: ButexBthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:686,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:687,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/butex.cpp:692,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/butex.cpp:694,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/butex.cpp:699,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:700,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:707,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:713,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/butex.cpp:715,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/butex.cpp:716,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:725,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:725,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 49
    argCount: 4
    argNames:
    - arg
    - expected_value
    - abstime
    - prepend
    argTypes:
    - void*
    - int
    - timespec*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 670
    functionDepth: 3
    functionLinenumber: 670
    functionLinenumberEnd: 750
    functionName: bthread::butex_wait
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - TaskGroup*::is_current_pthread_task
    - ButexBthreadWaiter::task_meta::current_waiter::exchange
    - TaskGroup*::tag
    - ButexBthreadWaiter::container::store
    - bthread::unsleep_if_necessary
    - butil::timespec_to_microseconds
    - std::atomic_thread_fence
    - TaskGroup*::current_task
    - butil::gettimeofday_us
    - container_of
    - TaskGroup*::control
    - TaskGroup*::current_tid
    - bthread::butex_waiter_count
    - Butex*::value::load
    - BT_LOOP_WHEN
    - TaskGroup*::set_remained
    - bthread::get_global_timer_thread
    - static_cast<butil::atomic<int>*>
    - ButexBthreadWaiter::task_meta::current_waiter::store
    - bthread::TaskGroup::sched
    - bthread::butex_wait_from_pthread
    linkageType: ''
    returnType: int
    signature: int butex_wait(void* arg, int expected_value, const timespec* abstime,
      bool prepend)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: bthread::SmallQueue::SmallQueue
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SmallQueue()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:39,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/id.cpp:40,1
    - Dst: std::deque<T>::deque<T>
      Src: /src/brpc/src/bthread/id.cpp:50,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/id.cpp:52,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' val'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: bthread::SmallQueue::push
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - std::deque<T>::deque<T>
    - push_back
    - bthread::SmallQueue::empty
    linkageType: ''
    returnType: void
    signature: void push(const T& val)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:64,1
    - Dst: front
      Src: /src/brpc/src/bthread/id.cpp:65,1
    - Dst: pop_front
      Src: /src/brpc/src/bthread/id.cpp:66,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - val
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 70
    functionName: bthread::SmallQueue::pop
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - pop_front
    - front
    - bthread::SmallQueue::empty
    linkageType: ''
    returnType: bool
    signature: bool pop(T* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: bthread::SmallQueue::empty
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 3
    functionsReached:
    - bthread::SmallQueue::empty
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::size
      Src: /src/brpc/src/bthread/id.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: bthread::SmallQueue::size
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - bthread::SmallQueue::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::clear
      Src: /src/brpc/src/bthread/id.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bthread::SmallQueue::clear
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - bthread::SmallQueue::clear
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: ~SmallQueue()
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SmallQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: bthread::PendingError
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PendingError()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/id.cpp:117,1
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:129,1
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:130,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:136,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:137,1
    - Dst: bthread::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:145,1
    - Dst: bthread::last_ver
      Src: /src/brpc/src/bthread/id.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 110
    functionDepth: 2
    functionLinenumber: 110
    functionLinenumberEnd: 149
    functionName: bthread::Id
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<uint32_t>
    - bthread::butex_destroy
    - bthread::unlockable_ver
    - bthread::last_ver
    - FastPthreadMutex::FastPthreadMutex
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Id
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:129,1
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: bthread::Id
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<uint32_t>
    linkageType: ''
    returnType: void
    signature: void Id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:136,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 2
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: ~Id()
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void ~Id()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id_ver
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: bthread::has_version
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_version(uint32_t id_ver) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: bthread::contended_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t contended_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: bthread::unlockable_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t unlockable_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: bthread::last_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - bthread::unlockable_ver
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t last_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::last_ver
      Src: /src/brpc/src/bthread/id.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: bthread::end_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::last_ver
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t end_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - IdResourceId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 159
    functionName: bthread::make_id
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_id_t
    signature: bthread_id_t make_id(uint32_t version, IdResourceId slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 164
    functionName: bthread::get_slot
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: IdResourceId
    signature: IdResourceId get_slot(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: bthread::get_version
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_version(bthread_id_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:171,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:171,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:175,1
    - Dst: Id*::last_ver
      Src: /src/brpc/src/bthread/id.cpp:176,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: bthread::id_exists_with_true_negatives
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_version
    - address_resource
    - Id*::last_ver
    - bthread::get_slot
    linkageType: ''
    returnType: bool
    signature: bool id_exists_with_true_negatives(bthread_id_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:180,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 185
    functionName: bthread::id_value
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 28
    functionsReached:
    - address_resource
    - bthread::get_slot
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t id_value(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/bthread/id.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: bthread::default_bthread_id_on_error
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int default_bthread_id_on_error(bthread_id_t id, void*, int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/bthread/id.cpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 193
    functionName: bthread::default_bthread_id_on_error2
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: "int default_bthread_id_on_error2(\n    bthread_id_t id, void*, int,
      const std::string&)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:196,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:196,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:201,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:215,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:216,1
    - Dst: bthread::Id*::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:222,1
    - Dst: bthread::Id*::contended_ver
      Src: /src/brpc/src/bthread/id.cpp:223,1
    - Dst: bthread::Id*::pending_q::size
      Src: /src/brpc/src/bthread/id.cpp:225,1
    - Dst: bthread::Id*::pending_q::pop
      Src: /src/brpc/src/bthread/id.cpp:228,1
    - Dst: bthread::Id*::pending_q::push
      Src: /src/brpc/src/bthread/id.cpp:229,1
    - Dst: SmallQueue::push
      Src: /src/brpc/src/bthread/id.cpp:230,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:236,1
    - Dst: bthread::make_id
      Src: /src/brpc/src/bthread/id.cpp:240,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:240,1
    - Dst: SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:256,1
    - Dst: SmallQueue::size
      Src: /src/brpc/src/bthread/id.cpp:259,1
    - Dst: SmallQueue::pop
      Src: /src/brpc/src/bthread/id.cpp:262,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 67
    argCount: 2
    argNames:
    - id
    - os
    argTypes:
    - bthread_id_t
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 285
    functionName: bthread::id_status
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 10
    functionsReached:
    - bthread::make_id
    - address_resource
    - SmallQueue::size
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - SmallQueue::empty
    - SmallQueue::push
    - bthread::Id*::pending_q::size
    - bthread::get_version
    - SmallQueue::pop
    - bthread::Id*::mutex::unlock
    - bthread::Id*::pending_q::pop
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - bthread::Id*::pending_q::push
    - bthread::get_slot
    linkageType: ''
    returnType: void
    signature: void id_status(bthread_id_t id, std::ostream &os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::describe_resources<Id>
      Src: /src/brpc/src/bthread/id.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 289
    functionName: bthread::id_pool_status
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - butil::describe_resources<Id>
    linkageType: ''
    returnType: void
    signature: void id_pool_status(std::ostream &os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::id_exists_with_true_negatives
      Src: /src/brpc/src/bthread/id.cpp:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 297
    functionName: bthread::exists
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::id_exists_with_true_negatives
    linkageType: ''
    returnType: bool
    signature: bool exists(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ec
    - ' et'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 305
    functionName: bthread::IdResetter
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IdResetter(int ec, const std::string& et)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error2_verbose
      Src: /src/brpc/src/bthread/id.cpp:307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: operator()(bthread_id_t & id) const
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error2_verbose
    linkageType: ''
    returnType: void
    signature: void operator()(bthread_id_t & id) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::IdList*>
      Src: /src/brpc/src/bthread/id.cpp:320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - list
    - cnt
    - n
    argTypes:
    - bthread_id_list_t*
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 321
    functionName: bthread::get_sizes
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread::IdList*>
    linkageType: ''
    returnType: size_t
    signature: size_t get_sizes(const bthread_id_list_t* list, size_t* cnt, size_t
      n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_resource
      Src: /src/brpc/src/bthread/id.cpp:330,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/id.cpp:335,1
    - Dst: Id*::pending_q::empty
      Src: /src/brpc/src/bthread/id.cpp:335,1
    - Dst: bthread::make_id
      Src: /src/brpc/src/bthread/id.cpp:345,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 349
    functionName: bthread::id_create_impl
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - Id*::pending_q::empty
    - CHECK
    - get_resource
    - bthread::make_id
    linkageType: ''
    returnType: int
    signature: "int id_create_impl(\n    bthread_id_t* id, void* data,\n    int (*on_error)(bthread_id_t,
      void*, int),\n    int (*on_error2)(bthread_id_t, void*, int, const std::string&))"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/id.cpp:357,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/id.cpp:358,1
    - Dst: get_resource
      Src: /src/brpc/src/bthread/id.cpp:363,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/id.cpp:368,1
    - Dst: Id*::pending_q::empty
      Src: /src/brpc/src/bthread/id.cpp:368,1
    - Dst: bthread::make_id
      Src: /src/brpc/src/bthread/id.cpp:378,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - id
    - data
    - range
    argTypes:
    - bthread_id_t*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 382
    functionName: bthread::id_create_ranged_impl
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - get_resource
    - CHECK
    - bthread::make_id
    - Id*::pending_q::empty
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: "int id_create_ranged_impl(\n    bthread_id_t* id, void* data,\n    int
      (*on_error)(bthread_id_t, void*, int),\n    int (*on_error2)(bthread_id_t, void*,
      int, const std::string&),\n    int range)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: bthread::SmallQueue::SmallQueue
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SmallQueue()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:39,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/id.cpp:40,1
    - Dst: std::deque<T>::deque<T>
      Src: /src/brpc/src/bthread/id.cpp:50,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/id.cpp:52,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' val'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: bthread::SmallQueue::push
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - std::deque<T>::deque<T>
    - push_back
    - bthread::SmallQueue::empty
    linkageType: ''
    returnType: void
    signature: void push(const T& val)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:64,1
    - Dst: front
      Src: /src/brpc/src/bthread/id.cpp:65,1
    - Dst: pop_front
      Src: /src/brpc/src/bthread/id.cpp:66,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - val
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 70
    functionName: bthread::SmallQueue::pop
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - pop_front
    - front
    - bthread::SmallQueue::empty
    linkageType: ''
    returnType: bool
    signature: bool pop(T* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: bthread::SmallQueue::empty
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 6
    functionsReached:
    - bthread::SmallQueue::empty
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::size
      Src: /src/brpc/src/bthread/id.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: bthread::SmallQueue::size
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached:
    - bthread::SmallQueue::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SmallQueue::clear
      Src: /src/brpc/src/bthread/id.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: bthread::SmallQueue::clear
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached:
    - bthread::SmallQueue::clear
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: ~SmallQueue()
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SmallQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: bthread::PendingError
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PendingError()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/id.cpp:117,1
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:129,1
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:130,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:136,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:137,1
    - Dst: bthread::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:145,1
    - Dst: bthread::last_ver
      Src: /src/brpc/src/bthread/id.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 110
    functionDepth: 2
    functionLinenumber: 110
    functionLinenumberEnd: 149
    functionName: bthread::Id
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<uint32_t>
    - bthread::butex_destroy
    - bthread::unlockable_ver
    - bthread::last_ver
    - FastPthreadMutex::FastPthreadMutex
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Id
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:129,1
    - Dst: bthread::butex_create_checked<uint32_t>
      Src: /src/brpc/src/bthread/id.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: bthread::Id
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<uint32_t>
    linkageType: ''
    returnType: void
    signature: void Id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:136,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/id.cpp:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 2
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: ~Id()
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void ~Id()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id_ver
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: bthread::has_version
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_version(uint32_t id_ver) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: bthread::contended_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t contended_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: bthread::unlockable_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t unlockable_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: bthread::last_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 3
    functionsReached:
    - bthread::unlockable_ver
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t last_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::last_ver
      Src: /src/brpc/src/bthread/id.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: bthread::end_ver
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::last_ver
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t end_ver() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - IdResourceId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 159
    functionName: bthread::make_id
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bthread_id_t
    signature: bthread_id_t make_id(uint32_t version, IdResourceId slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 164
    functionName: bthread::get_slot
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: IdResourceId
    signature: IdResourceId get_slot(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: bthread::get_version
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_version(bthread_id_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:171,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:171,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:175,1
    - Dst: Id*::last_ver
      Src: /src/brpc/src/bthread/id.cpp:176,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: bthread::id_exists_with_true_negatives
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - bthread::get_version
    - address_resource
    - Id*::last_ver
    - bthread::get_slot
    linkageType: ''
    returnType: bool
    signature: bool id_exists_with_true_negatives(bthread_id_t id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:180,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 185
    functionName: bthread::id_value
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 28
    functionsReached:
    - address_resource
    - bthread::get_slot
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t id_value(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/bthread/id.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: bthread::default_bthread_id_on_error
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int default_bthread_id_on_error(bthread_id_t id, void*, int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/bthread/id.cpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 193
    functionName: bthread::default_bthread_id_on_error2
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: "int default_bthread_id_on_error2(\n    bthread_id_t id, void*, int,
      const std::string&)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:196,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:196,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:201,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:215,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:216,1
    - Dst: bthread::Id*::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:222,1
    - Dst: bthread::Id*::contended_ver
      Src: /src/brpc/src/bthread/id.cpp:223,1
    - Dst: bthread::Id*::pending_q::size
      Src: /src/brpc/src/bthread/id.cpp:225,1
    - Dst: bthread::Id*::pending_q::pop
      Src: /src/brpc/src/bthread/id.cpp:228,1
    - Dst: bthread::Id*::pending_q::push
      Src: /src/brpc/src/bthread/id.cpp:229,1
    - Dst: SmallQueue::push
      Src: /src/brpc/src/bthread/id.cpp:230,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:236,1
    - Dst: bthread::make_id
      Src: /src/brpc/src/bthread/id.cpp:240,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:240,1
    - Dst: SmallQueue::empty
      Src: /src/brpc/src/bthread/id.cpp:256,1
    - Dst: SmallQueue::size
      Src: /src/brpc/src/bthread/id.cpp:259,1
    - Dst: SmallQueue::pop
      Src: /src/brpc/src/bthread/id.cpp:262,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 67
    argCount: 2
    argNames:
    - id
    - os
    argTypes:
    - bthread_id_t
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 285
    functionName: bthread::id_status
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 10
    functionsReached:
    - bthread::make_id
    - address_resource
    - SmallQueue::size
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - SmallQueue::empty
    - SmallQueue::push
    - bthread::Id*::pending_q::size
    - bthread::get_version
    - SmallQueue::pop
    - bthread::Id*::mutex::unlock
    - bthread::Id*::pending_q::pop
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - bthread::Id*::pending_q::push
    - bthread::get_slot
    linkageType: ''
    returnType: void
    signature: void id_status(bthread_id_t id, std::ostream &os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::describe_resources<Id>
      Src: /src/brpc/src/bthread/id.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 289
    functionName: bthread::id_pool_status
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - butil::describe_resources<Id>
    linkageType: ''
    returnType: void
    signature: void id_pool_status(std::ostream &os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::id_exists_with_true_negatives
      Src: /src/brpc/src/bthread/id.cpp:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 297
    functionName: bthread::exists
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::id_exists_with_true_negatives
    linkageType: ''
    returnType: bool
    signature: bool exists(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ec
    - ' et'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 305
    functionName: bthread::IdResetter
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IdResetter(int ec, const std::string& et)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error2_verbose
      Src: /src/brpc/src/bthread/id.cpp:307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: operator()(bthread_id_t & id) const
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error2_verbose
    linkageType: ''
    returnType: void
    signature: void operator()(bthread_id_t & id) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::IdList*>
      Src: /src/brpc/src/bthread/id.cpp:320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - list
    - cnt
    - n
    argTypes:
    - bthread_id_list_t*
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 321
    functionName: bthread::get_sizes
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread::IdList*>
    linkageType: ''
    returnType: size_t
    signature: size_t get_sizes(const bthread_id_list_t* list, size_t* cnt, size_t
      n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_resource
      Src: /src/brpc/src/bthread/id.cpp:330,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/id.cpp:335,1
    - Dst: Id*::pending_q::empty
      Src: /src/brpc/src/bthread/id.cpp:335,1
    - Dst: bthread::make_id
      Src: /src/brpc/src/bthread/id.cpp:345,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 349
    functionName: bthread::id_create_impl
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - Id*::pending_q::empty
    - CHECK
    - get_resource
    - bthread::make_id
    linkageType: ''
    returnType: int
    signature: "int id_create_impl(\n    bthread_id_t* id, void* data,\n    int (*on_error)(bthread_id_t,
      void*, int),\n    int (*on_error2)(bthread_id_t, void*, int, const std::string&))"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/id.cpp:357,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/id.cpp:358,1
    - Dst: get_resource
      Src: /src/brpc/src/bthread/id.cpp:363,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/id.cpp:368,1
    - Dst: Id*::pending_q::empty
      Src: /src/brpc/src/bthread/id.cpp:368,1
    - Dst: bthread::make_id
      Src: /src/brpc/src/bthread/id.cpp:378,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - id
    - data
    - range
    argTypes:
    - bthread_id_t*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 382
    functionName: bthread::id_create_ranged_impl
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - get_resource
    - CHECK
    - bthread::make_id
    - Id*::pending_q::empty
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: "int id_create_ranged_impl(\n    bthread_id_t* id, void* data,\n    int
      (*on_error)(bthread_id_t, void*, int),\n    int (*on_error2)(bthread_id_t, void*,
      int, const std::string&),\n    int range)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::id_create_impl
      Src: /src/brpc/src/bthread/id.cpp:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 388
    functionDepth: 2
    functionLinenumber: 388
    functionLinenumberEnd: 394
    functionName: bthread_id_create
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 32
    functionsReached:
    - bthread::id_create_impl
    linkageType: ''
    returnType: int
    signature: "int bthread_id_create(\n    bthread_id_t* id, void* data,\n    int
      (*on_error)(bthread_id_t, void*, int))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::id_create_ranged_impl
      Src: /src/brpc/src/bthread/id.cpp:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - id
    - data
    - range
    argTypes:
    - bthread_id_t*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 396
    functionDepth: 2
    functionLinenumber: 396
    functionLinenumberEnd: 403
    functionName: bthread_id_create_ranged
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 6
    functionsReached:
    - bthread::id_create_ranged_impl
    linkageType: ''
    returnType: int
    signature: "int bthread_id_create_ranged(bthread_id_t* id, void* data,\n                             int
      (*on_error)(bthread_id_t, void*, int),\n                             int range)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:407,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:407,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:411,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:414,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:415,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/id.cpp:424,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/id.cpp:426,1
    - Dst: bthread::Id*::contended_ver
      Src: /src/brpc/src/bthread/id.cpp:432,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:433,1
    - Dst: bthread::Id*::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:438,1
    - Dst: bthread::Id*::contended_ver
      Src: /src/brpc/src/bthread/id.cpp:439,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:441,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/id.cpp:443,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:447,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:449,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:453,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 4
    argNames:
    - id
    - pdata
    - range
    - location
    argTypes:
    - bthread_id_t
    - void**
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 405
    functionDepth: 4
    functionLinenumber: 405
    functionLinenumberEnd: 455
    functionName: bthread_id_lock_and_reset_range_verbose
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - address_resource
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - bthread::butex_wait
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - LOG_IF
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: "int bthread_id_lock_and_reset_range_verbose(\n    bthread_id_t id,
      void **pdata, int range, const char *location)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error2_verbose
      Src: /src/brpc/src/bthread/id.cpp:459,1
    - Dst: std::string
      Src: /src/brpc/src/bthread/id.cpp:459,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - id
    - error_code
    - location
    argTypes:
    - bthread_id_t
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 460
    functionName: bthread_id_error_verbose
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - bthread_id_error2_verbose
    linkageType: ''
    returnType: int
    signature: "int bthread_id_error_verbose(bthread_id_t id, int error_code, \n                             const
      char *location)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:463,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:463,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:467,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:469,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:470,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:471,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:475,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/id.cpp:476,1
    - Dst: bthread::Id*::contended_ver
      Src: /src/brpc/src/bthread/id.cpp:479,1
    - Dst: bthread::Id*::unlockable_ver
      Src: /src/brpc/src/bthread/id.cpp:480,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:481,1
    - Dst: bthread::butex_wake_except
      Src: /src/brpc/src/bthread/id.cpp:484,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 462
    functionDepth: 3
    functionLinenumber: 462
    functionLinenumberEnd: 487
    functionName: bthread_id_about_to_destroy
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 6
    functionsReached:
    - address_resource
    - bthread::Id*::contended_ver
    - bthread::butex_wake_except
    - bthread::Id*::unlockable_ver
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - LOG
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: int bthread_id_about_to_destroy(bthread_id_t id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:490,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:490,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:495,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:496,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:497,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:498,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:502,1
    - Dst: bthread::Id*::end_ver
      Src: /src/brpc/src/bthread/id.cpp:505,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:508,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/id.cpp:509,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:509,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 511
    functionName: bthread_id_cancel
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - address_resource
    - bthread::get_version
    - bthread::Id*::end_ver
    - return_resource
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: int bthread_id_cancel(bthread_id_t id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:514,1
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:515,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:520,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:523,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:524,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:526,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/id.cpp:530,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 513
    functionDepth: 4
    functionLinenumber: 513
    functionLinenumberEnd: 536
    functionName: bthread_id_join
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 46
    functionsReached:
    - address_resource
    - bthread::butex_wait
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: int bthread_id_join(bthread_id_t id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:539,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:539,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:544,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:545,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:546,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:547,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:551,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:555,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - id
    - pdata
    argTypes:
    - bthread_id_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 560
    functionName: bthread_id_trylock
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 6
    functionsReached:
    - address_resource
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: int bthread_id_trylock(bthread_id_t id, void** pdata)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock_and_reset_range_verbose
      Src: /src/brpc/src/bthread/id.cpp:564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - id
    - pdata
    - location
    argTypes:
    - bthread_id_t
    - void**
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 562
    functionDepth: 5
    functionLinenumber: 562
    functionLinenumberEnd: 565
    functionName: bthread_id_lock_verbose
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_lock_and_reset_range_verbose
    linkageType: ''
    returnType: int
    signature: "int bthread_id_lock_verbose(bthread_id_t id, void** pdata,\n                            const
      char *location)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:568,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:568,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:575,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:576,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:577,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/id.cpp:579,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:583,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/id.cpp:584,1
    - Dst: bthread::Id*::pending_q::pop
      Src: /src/brpc/src/bthread/id.cpp:588,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:590,1
    - Dst: bthread::Id*::on_error
      Src: /src/brpc/src/bthread/id.cpp:592,1
    - Dst: bthread::Id*::on_error2
      Src: /src/brpc/src/bthread/id.cpp:594,1
    - Dst: bthread::Id*::contended_ver
      Src: /src/brpc/src/bthread/id.cpp:598,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:600,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/id.cpp:603,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 567
    functionDepth: 3
    functionLinenumber: 567
    functionLinenumberEnd: 607
    functionName: bthread_id_unlock
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 20
    functionsReached:
    - bthread::Id*::on_error2
    - address_resource
    - bthread::Id*::contended_ver
    - bthread::butex_wake
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::pending_q::pop
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - LOG
    - bthread::Id*::on_error
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: int bthread_id_unlock(bthread_id_t id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:610,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:610,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:616,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:617,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:618,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:619,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/id.cpp:620,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:624,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/id.cpp:625,1
    - Dst: bthread::Id*::end_ver
      Src: /src/brpc/src/bthread/id.cpp:628,1
    - Dst: bthread::Id*::pending_q::clear
      Src: /src/brpc/src/bthread/id.cpp:633,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:634,1
    - Dst: bthread::butex_wake_except
      Src: /src/brpc/src/bthread/id.cpp:636,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/id.cpp:637,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/id.cpp:638,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:638,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 609
    functionDepth: 4
    functionLinenumber: 609
    functionLinenumberEnd: 640
    functionName: bthread_id_unlock_and_destroy
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 34
    functionsReached:
    - bthread::Id*::pending_q::clear
    - address_resource
    - bthread::butex_wake_except
    - bthread::butex_wake_all
    - bthread::get_version
    - bthread::Id*::end_ver
    - return_resource
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - LOG
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: int bthread_id_unlock_and_destroy(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_id_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 652
    functionName: bthread_id_list_init
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int bthread_id_list_init(bthread_id_list_t* list,\n                         unsigned
      /*size*/,\n                         unsigned /*conflict_size*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::IdList*>
      Src: /src/brpc/src/bthread/id.cpp:655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_id_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 657
    functionName: bthread_id_list_destroy
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached:
    - static_cast<bthread::IdList*>
    linkageType: ''
    returnType: void
    signature: void bthread_id_list_destroy(bthread_id_list_t* list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::IdList::IdList
      Src: /src/brpc/src/bthread/id.cpp:661,1
    - Dst: static_cast<bthread::IdList*>
      Src: /src/brpc/src/bthread/id.cpp:666,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - list
    - id
    argTypes:
    - bthread_id_list_t*
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 667
    functionName: bthread_id_list_add
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached:
    - bthread::IdList::IdList
    - static_cast<bthread::IdList*>
    linkageType: ''
    returnType: int
    signature: int bthread_id_list_add(bthread_id_list_t* list, bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_reset2
      Src: /src/brpc/src/bthread/id.cpp:670,1
    - Dst: std::string
      Src: /src/brpc/src/bthread/id.cpp:670,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - list
    - error_code
    argTypes:
    - bthread_id_list_t*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 671
    functionName: bthread_id_list_reset
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 2
    functionsReached:
    - std::string
    - bthread_id_list_reset2
    linkageType: ''
    returnType: int
    signature: int bthread_id_list_reset(bthread_id_list_t* list, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/bthread/id.cpp:675,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - list1
    - list2
    argTypes:
    - bthread_id_list_t*
    - bthread_id_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 673
    functionDepth: 0
    functionLinenumber: 673
    functionLinenumberEnd: 676
    functionName: bthread_id_list_swap
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: "void bthread_id_list_swap(bthread_id_list_t* list1, \n                          bthread_id_list_t*
      list2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_reset2_pthreadsafe
      Src: /src/brpc/src/bthread/id.cpp:680,1
    - Dst: std::string
      Src: /src/brpc/src/bthread/id.cpp:681,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - list
    - error_code
    - mutex
    argTypes:
    - bthread_id_list_t*
    - int
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 678
    functionDepth: 1
    functionLinenumber: 678
    functionLinenumberEnd: 682
    functionName: bthread_id_list_reset_pthreadsafe
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - bthread_id_list_reset2_pthreadsafe
    linkageType: ''
    returnType: int
    signature: "int bthread_id_list_reset_pthreadsafe(bthread_id_list_t* list, int
      error_code,\n                                       pthread_mutex_t* mutex)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_reset2_bthreadsafe
      Src: /src/brpc/src/bthread/id.cpp:686,1
    - Dst: std::string
      Src: /src/brpc/src/bthread/id.cpp:687,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - list
    - error_code
    - mutex
    argTypes:
    - bthread_id_list_t*
    - int
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 684
    functionDepth: 1
    functionLinenumber: 684
    functionLinenumberEnd: 688
    functionName: bthread_id_list_reset_bthreadsafe
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_list_reset2_bthreadsafe
    - std::string
    linkageType: ''
    returnType: int
    signature: "int bthread_id_list_reset_bthreadsafe(bthread_id_list_t* list, int
      error_code,\n                                      bthread_mutex_t* mutex)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::id_create_impl
      Src: /src/brpc/src/bthread/id.cpp:695,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 692
    functionDepth: 2
    functionLinenumber: 692
    functionLinenumberEnd: 698
    functionName: bthread_id_create2
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 7
    functionsReached:
    - bthread::id_create_impl
    linkageType: ''
    returnType: int
    signature: "int bthread_id_create2(\n    bthread_id_t* id, void* data,\n    int
      (*on_error)(bthread_id_t, void*, int, const std::string&))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::id_create_ranged_impl
      Src: /src/brpc/src/bthread/id.cpp:704,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - id
    - data
    - range
    argTypes:
    - bthread_id_t*
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 700
    functionDepth: 2
    functionLinenumber: 700
    functionLinenumberEnd: 707
    functionName: bthread_id_create2_ranged
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::id_create_ranged_impl
    linkageType: ''
    returnType: int
    signature: "int bthread_id_create2_ranged(\n    bthread_id_t* id, void* data,\n
      \   int (*on_error)(bthread_id_t, void*, int, const std::string&),\n    int
      range)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/id.cpp:712,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/id.cpp:712,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/id.cpp:716,1
    - Dst: bthread::Id*::mutex::lock
      Src: /src/brpc/src/bthread/id.cpp:718,1
    - Dst: bthread::Id*::has_version
      Src: /src/brpc/src/bthread/id.cpp:719,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:720,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:726,1
    - Dst: bthread::Id*::on_error
      Src: /src/brpc/src/bthread/id.cpp:728,1
    - Dst: bthread::Id*::on_error2
      Src: /src/brpc/src/bthread/id.cpp:730,1
    - Dst: bthread::Id*::pending_q::push
      Src: /src/brpc/src/bthread/id.cpp:738,1
    - Dst: bthread::Id*::mutex::unlock
      Src: /src/brpc/src/bthread/id.cpp:739,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 4
    argNames:
    - id
    - error_code
    - ' error_text'
    - location
    argTypes:
    - bthread_id_t
    - int
    - std::string
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 709
    functionDepth: 0
    functionLinenumber: 709
    functionLinenumberEnd: 742
    functionName: bthread_id_error2_verbose
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 3
    functionsReached:
    - bthread::Id*::on_error2
    - address_resource
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::mutex::lock
    - bthread::Id*::pending_q::push
    - bthread::Id*::on_error
    - bthread::get_slot
    linkageType: ''
    returnType: int
    signature: "int bthread_id_error2_verbose(bthread_id_t id, int error_code,\n                              const
      std::string& error_text,\n                              const char *location)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bthread::IdList*>
      Src: /src/brpc/src/bthread/id.cpp:748,1
    - Dst: bthread::IdResetter
      Src: /src/brpc/src/bthread/id.cpp:749,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - list
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_list_t*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 752
      start: 744
    functionDepth: 1
    functionLinenumber: 744
    functionLinenumberEnd: 752
    functionName: bthread_id_list_reset2
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - bthread::IdResetter
    - static_cast<bthread::IdList*>
    linkageType: ''
    returnType: int
    signature: "int bthread_id_list_reset2(bthread_id_list_t* list,\n                           int
      error_code,\n                           const std::string& error_text)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/bthread/id.cpp:765,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bthread/id.cpp:770,1
    - Dst: std::swap
      Src: /src/brpc/src/bthread/id.cpp:771,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bthread/id.cpp:772,1
    - Dst: bthread_id_list_reset2
      Src: /src/brpc/src/bthread/id.cpp:773,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/bthread/id.cpp:774,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - list
    - error_code
    - ' error_text'
    - mutex
    argTypes:
    - bthread_id_list_t*
    - int
    - std::string
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 754
    functionDepth: 2
    functionLinenumber: 754
    functionLinenumberEnd: 776
    functionName: bthread_id_list_reset2_pthreadsafe
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - std::swap
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bthread_id_list_init
    - bthread_id_list_destroy
    - bthread_id_list_reset2
    linkageType: ''
    returnType: int
    signature: "int bthread_id_list_reset2_pthreadsafe(bthread_id_list_t* list,\n
      \                                      int error_code,\n                                       const
      std::string& error_text,\n                                       pthread_mutex_t*
      mutex)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/bthread/id.cpp:789,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/id.cpp:794,1
    - Dst: std::swap
      Src: /src/brpc/src/bthread/id.cpp:795,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/id.cpp:796,1
    - Dst: bthread_id_list_reset2
      Src: /src/brpc/src/bthread/id.cpp:797,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/bthread/id.cpp:798,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - list
    - error_code
    - ' error_text'
    - mutex
    argTypes:
    - bthread_id_list_t*
    - int
    - std::string
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 778
    functionDepth: 2
    functionLinenumber: 778
    functionLinenumberEnd: 800
    functionName: bthread_id_list_reset2_bthreadsafe
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 1
    functionsReached:
    - std::swap
    - bthread_id_list_init
    - bthread_mutex_lock
    - bthread_id_list_destroy
    - bthread_mutex_unlock
    - bthread_id_list_reset2
    linkageType: ''
    returnType: int
    signature: "int bthread_id_list_reset2_bthreadsafe(bthread_id_list_t* list,\n
      \                                      int error_code,\n                                       const
      std::string& error_text,\n                                       bthread_mutex_t*
      mutex)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/bthread/fd.cpp:57,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/bthread/fd.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: LazyArray::LazyArray
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void LazyArray()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/fd.cpp:66,1
    - Dst: Block::Block
      Src: /src/brpc/src/bthread/fd.cpp:70,1
    - Dst: load
      Src: /src/brpc/src/bthread/fd.cpp:72,1
    - Dst: std::fill
      Src: /src/brpc/src/bthread/fd.cpp:76,1
    - Dst: T
      Src: /src/brpc/src/bthread/fd.cpp:76,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/fd.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 85
    functionName: LazyArray::get_or_new
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached:
    - Block::Block
    - load
    - compare_exchange_strong
    - std::fill
    - T
    linkageType: ''
    returnType: butil::atomic<T>
    signature: butil::atomic<T> * get_or_new(size_t index)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/fd.cpp:89,1
    - Dst: load
      Src: /src/brpc/src/bthread/fd.cpp:91,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/fd.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 97
    functionName: LazyArray::get
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - load
    linkageType: ''
    returnType: butil::atomic<T>
    signature: butil::atomic<T> * get(size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 122
    functionName: EpollThread
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EpollThread()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: started
      Src: /src/brpc/src/bthread/fd.cpp:125,1
    - Dst: lock
      Src: /src/brpc/src/bthread/fd.cpp:128,1
    - Dst: started
      Src: /src/brpc/src/bthread/fd.cpp:130,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/fd.cpp:131,1
    - Dst: epoll_create
      Src: /src/brpc/src/bthread/fd.cpp:135,1
    - Dst: kqueue
      Src: /src/brpc/src/bthread/fd.cpp:137,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/fd.cpp:139,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:141,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/bthread/fd.cpp:144,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:146,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:148,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - epoll_size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 124
    functionDepth: 4
    functionLinenumber: 124
    functionLinenumberEnd: 152
    functionName: start
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 240
    functionsReached:
    - unlock
    - epoll_create
    - bthread_start_background
    - PLOG
    - kqueue
    - started
    - close
    - lock
    - LOG
    linkageType: ''
    returnType: int
    signature: int start(int epoll_size)
  - BBCount: 26
    BranchProfiles: []
    Callsites:
    - Dst: started
      Src: /src/brpc/src/bthread/fd.cpp:159,1
    - Dst: pipe
      Src: /src/brpc/src/bthread/fd.cpp:174,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:175,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:180,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:184,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:186,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:188,1
    - Dst: bthread_join
      Src: /src/brpc/src/bthread/fd.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:195,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:195,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:198,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:199,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:200,1
    - Dst: get_or_new
      Src: /src/brpc/src/bthread/fd.cpp:205,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:211,1
    - Dst: butex_create_checked<EpollButex>
      Src: /src/brpc/src/bthread/fd.cpp:216,1
    - Dst: EpollButex*::store
      Src: /src/brpc/src/bthread/fd.cpp:217,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/bthread/fd.cpp:219,1
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/fd.cpp:222,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/fd.cpp:228,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:231,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:236,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:241,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:242,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:244,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:254,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:260,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:262,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:263,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:267,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/fd.cpp:268,1
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:282,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:285,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:287,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:295,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:296,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:299,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:302,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:303,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:304,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:305,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:307,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:308,1
    - Dst: static_cast<EpollThread*>
      Src: /src/brpc/src/bthread/fd.cpp:318,1
    - Dst: epoll_event::epoll_event
      Src: /src/brpc/src/bthread/fd.cpp:325,1
    - Dst: KEVENT::KEVENT
      Src: /src/brpc/src/bthread/fd.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:331,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:337,1
    - Dst: epoll_wait
      Src: /src/brpc/src/bthread/fd.cpp:343,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:345,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:354,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:356,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:357,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:358,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:364,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:371,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:378,1
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:380,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:382,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:385,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:388,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:389,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:395,1
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:411,1
    - Dst: fmix32
      Src: /src/brpc/src/bthread/fd.cpp:415,1
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:416,1
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/fd.cpp:425,1
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:435,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 143
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 158
    functionDepth: 5
    functionLinenumber: 158
    functionLinenumberEnd: 438
    functionName: stop_and_join
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 8
    functionsReached:
    - EpollButex*::fetch_add
    - start
    - butil::atomic*::exchange
    - bthread_join
    - fetch_add
    - static_cast<EpollButex*>
    - epoll_event::epoll_event
    - butex_destroy
    - pipe
    - kevent
    - EpollButex*::load
    - get
    - EpollButex*::store
    - started
    - KEVENT::KEVENT
    - butex_wait
    - PLOG
    - LOG
    - butex_wake_all
    - epoll_ctl
    - fmix32
    - butex_create_checked<EpollButex>
    - sched_yield
    - get_or_new
    - butil::atomic*::compare_exchange_strong
    - EV_SET
    - berror
    - epoll_wait
    - static_cast<EpollThread*>
    - DLOG
    - butil::pthread_fd_wait
    - stop_and_join
    - close
    - butil::atomic*::load
    linkageType: ''
    returnType: int
    signature: int stop_and_join()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: get_or_new
      Src: /src/brpc/src/bthread/fd.cpp:205,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:211,1
    - Dst: butex_create_checked<EpollButex>
      Src: /src/brpc/src/bthread/fd.cpp:216,1
    - Dst: EpollButex*::store
      Src: /src/brpc/src/bthread/fd.cpp:217,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/bthread/fd.cpp:219,1
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/fd.cpp:222,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/fd.cpp:228,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:231,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:236,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:241,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:242,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:244,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:254,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:260,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:262,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:263,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:267,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/fd.cpp:268,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 42
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 274
    functionName: fd_wait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 10
    functionsReached:
    - butex_create_checked<EpollButex>
    - butex_destroy
    - sched_yield
    - kevent
    - get_or_new
    - EpollButex*::load
    - butil::atomic*::compare_exchange_strong
    - EpollButex*::store
    - EV_SET
    - butex_wait
    - butil::atomic*::load
    - PLOG
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: int fd_wait(int fd, unsigned events, const timespec* abstime)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:282,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:285,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:287,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:295,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:296,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:299,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:302,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:303,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:304,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:305,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:307,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:308,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 310
    functionName: fd_close
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached:
    - EpollButex*::fetch_add
    - butil::atomic*::exchange
    - kevent
    - get
    - EV_SET
    - close
    - butex_wake_all
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: int fd_close(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 314
    functionName: started
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool started() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: epoll_event::epoll_event
      Src: /src/brpc/src/bthread/fd.cpp:325,1
    - Dst: KEVENT::KEVENT
      Src: /src/brpc/src/bthread/fd.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:331,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:337,1
    - Dst: epoll_wait
      Src: /src/brpc/src/bthread/fd.cpp:343,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:345,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:354,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:356,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:357,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:358,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:364,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:371,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:378,1
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:380,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:382,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:385,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:388,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:389,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:395,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 398
    functionName: run
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 29
    functionsReached:
    - epoll_event::epoll_event
    - epoll_wait
    - DLOG
    - EpollButex*::fetch_add
    - fetch_add
    - kevent
    - KEVENT::KEVENT
    - get
    - berror
    - butil::atomic*::load
    - PLOG
    - LOG
    - butex_wake_all
    - epoll_ctl
    - static_cast<EpollButex*>
    linkageType: ''
    returnType: void
    signature: void * run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:411,1
    - Dst: fmix32
      Src: /src/brpc/src/bthread/fd.cpp:415,1
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:416,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 408
    functionDepth: 5
    functionLinenumber: 408
    functionLinenumberEnd: 418
    functionName: get_epoll_thread
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached:
    - fmix32
    - start
    linkageType: ''
    returnType: EpollThread
    signature: EpollThread & get_epoll_thread(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/fd.cpp:425,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 421
    functionDepth: 6
    functionLinenumber: 421
    functionLinenumberEnd: 430
    functionName: stop_and_join_epoll_threads
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 2
    functionsReached:
    - stop_and_join
    linkageType: ''
    returnType: int
    signature: int stop_and_join_epoll_threads()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 436
    functionName: pthread_fd_wait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 2
    functionsReached:
    - butil::pthread_fd_wait
    linkageType: ''
    returnType: int
    signature: "int pthread_fd_wait(int fd, unsigned events,\n                    const
      timespec* abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/fd.cpp:448,1
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:449,1
    - Dst: pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:452,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - fd
    - events
    argTypes:
    - int
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 440
    functionDepth: 6
    functionLinenumber: 440
    functionLinenumberEnd: 453
    functionName: bthread_fd_wait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 9
    functionsReached:
    - get_epoll_thread
    - pthread_fd_wait
    - bthread::TaskGroup*::is_current_pthread_task
    linkageType: ''
    returnType: int
    signature: int bthread_fd_wait(int fd, unsigned events)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:458,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/fd.cpp:465,1
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:466,1
    - Dst: pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:469,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 455
    functionDepth: 7
    functionLinenumber: 455
    functionLinenumberEnd: 470
    functionName: bthread_fd_timedwait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 6
    functionsReached:
    - bthread_fd_wait
    - get_epoll_thread
    - pthread_fd_wait
    - bthread::TaskGroup*::is_current_pthread_task
    linkageType: ''
    returnType: int
    signature: "int bthread_fd_timedwait(int fd, unsigned events,\n                         const
      timespec* abstime)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: bthread_connect
      Src: /src/brpc/src/bthread/fd.cpp:512,1
    - Dst: butil::is_blocking
      Src: /src/brpc/src/bthread/fd.cpp:515,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/fd.cpp:517,1
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/bthread/fd.cpp:520,1
    - Dst: butil::make_blocking
      Src: /src/brpc/src/bthread/fd.cpp:522,1
    - Dst: test_listen_connect
      Src: /src/brpc/src/bthread/fd.cpp:526,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/src/bthread/fd.cpp:531,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/src/bthread/fd.cpp:533,1
    - Dst: butil::is_connected
      Src: /src/brpc/src/bthread/fd.cpp:538,1
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:547,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 4
    argNames:
    - sockfd
    - serv_addr
    - addrlen
    - abstime
    argTypes:
    - int
    - struct sockaddr*
    - socklen_t
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 509
    functionDepth: 8
    functionLinenumber: 509
    functionLinenumberEnd: 550
    functionName: bthread_timed_connect
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 4
    functionsReached:
    - bthread_connect
    - butil::MakeScopeGuard
    - butil::is_connected
    - get_epoll_thread
    - butil::make_blocking
    - test_listen_connect
    - butil::make_non_blocking
    - butil::is_blocking
    - bthread_fd_timedwait
    linkageType: ''
    returnType: int
    signature: "int bthread_timed_connect(int sockfd, const struct sockaddr* serv_addr,\n
      \                         socklen_t addrlen, const timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 546
    functionDepth: 6
    functionLinenumber: 546
    functionLinenumberEnd: 548
    functionName: bthread_close
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 14
    functionsReached:
    - get_epoll_thread
    linkageType: ''
    returnType: int
    signature: int bthread_close(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __errno_location
      Src: /src/brpc/src/bthread/errno.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: bthread_errno_location
    functionSourceFile: /src/brpc/src/bthread/errno.cpp
    functionUses: 0
    functionsReached:
    - __errno_location
    linkageType: ''
    returnType: int
    signature: int *bthread_errno_location()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __error
      Src: /src/brpc/src/bthread/errno.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: bthread_errno_location
    functionSourceFile: /src/brpc/src/bthread/errno.cpp
    functionUses: 0
    functionsReached:
    - __error
    linkageType: ''
    returnType: int
    signature: int *bthread_errno_location()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<int>
      Src: /src/brpc/src/bthread/condition_variable.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - bthread_cond_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: bthread_cond_init
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 8
    functionsReached:
    - bthread::butex_create_checked<int>
    linkageType: ''
    returnType: int
    signature: "int bthread_cond_init(bthread_cond_t* __restrict c,\n                      const
      bthread_condattr_t*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/condition_variable.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - bthread_cond_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 2
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: bthread_cond_destroy
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 6
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: int
    signature: int bthread_cond_destroy(bthread_cond_t* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<bthread::CondInternal*>
      Src: /src/brpc/src/bthread/condition_variable.cpp:62,1
    - Dst: butil::atomic*::fetch_add
      Src: /src/brpc/src/bthread/condition_variable.cpp:66,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/condition_variable.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - bthread_cond_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 70
    functionName: bthread_cond_signal
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 8
    functionsReached:
    - butil::atomic*::fetch_add
    - bthread::butex_wake
    - reinterpret_cast<bthread::CondInternal*>
    linkageType: ''
    returnType: int
    signature: int bthread_cond_signal(bthread_cond_t* c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<bthread::CondInternal*>
      Src: /src/brpc/src/bthread/condition_variable.cpp:73,1
    - Dst: bthread::CondInternal*::m::load
      Src: /src/brpc/src/bthread/condition_variable.cpp:74,1
    - Dst: bthread::CondInternal*::seq::fetch_add
      Src: /src/brpc/src/bthread/condition_variable.cpp:81,1
    - Dst: bthread::butex_requeue
      Src: /src/brpc/src/bthread/condition_variable.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - bthread_cond_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 84
    functionName: bthread_cond_broadcast
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 2
    functionsReached:
    - bthread::CondInternal*::seq::fetch_add
    - bthread::CondInternal*::m::load
    - bthread::butex_requeue
    - reinterpret_cast<bthread::CondInternal*>
    linkageType: ''
    returnType: int
    signature: int bthread_cond_broadcast(bthread_cond_t* c)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<bthread::CondInternal*>
      Src: /src/brpc/src/bthread/condition_variable.cpp:88,1
    - Dst: bthread::CondInternal*::seq::load
      Src: /src/brpc/src/bthread/condition_variable.cpp:89,1
    - Dst: bthread::CondInternal*::m::load
      Src: /src/brpc/src/bthread/condition_variable.cpp:90,1
    - Dst: bthread::CondInternal*::m::compare_exchange_strong
      Src: /src/brpc/src/bthread/condition_variable.cpp:93,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/condition_variable.cpp:98,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/condition_variable.cpp:100,1
    - Dst: bthread_mutex_lock_contended
      Src: /src/brpc/src/bthread/condition_variable.cpp:115,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - c
    - m
    argTypes:
    - bthread_cond_t*
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 86
    functionDepth: 4
    functionLinenumber: 86
    functionLinenumberEnd: 117
    functionName: bthread_cond_wait
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 7
    functionsReached:
    - bthread::CondInternal*::seq::load
    - bthread::butex_wait
    - reinterpret_cast<bthread::CondInternal*>
    - bthread::CondInternal*::m::compare_exchange_strong
    - bthread_mutex_unlock
    - bthread::CondInternal*::m::load
    - bthread_mutex_lock_contended
    linkageType: ''
    returnType: int
    signature: "int bthread_cond_wait(bthread_cond_t* __restrict c,\n                      bthread_mutex_t*
      __restrict m)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<bthread::CondInternal*>
      Src: /src/brpc/src/bthread/condition_variable.cpp:122,1
    - Dst: bthread::CondInternal*::seq::load
      Src: /src/brpc/src/bthread/condition_variable.cpp:123,1
    - Dst: bthread::CondInternal*::m::load
      Src: /src/brpc/src/bthread/condition_variable.cpp:124,1
    - Dst: bthread::CondInternal*::m::compare_exchange_strong
      Src: /src/brpc/src/bthread/condition_variable.cpp:127,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/condition_variable.cpp:132,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/condition_variable.cpp:134,1
    - Dst: bthread_mutex_lock_contended
      Src: /src/brpc/src/bthread/condition_variable.cpp:139,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 3
    argNames:
    - c
    - m
    - abstime
    argTypes:
    - bthread_cond_t*
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 119
    functionDepth: 4
    functionLinenumber: 119
    functionLinenumberEnd: 141
    functionName: bthread_cond_timedwait
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 5
    functionsReached:
    - bthread::CondInternal*::seq::load
    - bthread::butex_wait
    - reinterpret_cast<bthread::CondInternal*>
    - bthread::CondInternal*::m::compare_exchange_strong
    - bthread_mutex_unlock
    - bthread::CondInternal*::m::load
    - bthread_mutex_lock_contended
    linkageType: ''
    returnType: int
    signature: "int bthread_cond_timedwait(bthread_cond_t* __restrict c,\n                           bthread_mutex_t*
      __restrict m,\n                           const struct timespec* __restrict
      abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/bthread/task_tracer.cpp:42,1
    - Dst: close
      Src: /src/brpc/src/bthread/task_tracer.cpp:45,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 47
    functionName: TaskTracer::SignalSync::~SignalSync()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void TaskTracer::SignalSync::~SignalSync()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/src/bthread/task_tracer.cpp:50,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:51,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:54,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:55,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:58,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:59,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 64
    functionName: TaskTracer::SignalSync::Init()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - PLOG
    - butil::make_non_blocking
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::SignalSync::Init()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/bthread/task_tracer.cpp:69,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/bthread/task_tracer.cpp:75,1
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:76,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:76,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:77,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:79,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/bthread/task_tracer.cpp:82,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:86,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:89,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:90,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 94
    functionName: TaskTracer::Result::OutputToString() const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - arraysize
    - std::string::append
    - butil::string_appendf
    - Symbolize
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string TaskTracer::Result::OutputToString() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:102,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:102,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 117
    functionName: TaskTracer::Result::OutputToStream(std::ostream& os) const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - Symbolize
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TaskTracer::Result::OutputToStream(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bthread/task_tracer.cpp:120,1
    - Dst: RegisterSignalHandler
      Src: /src/brpc/src/bthread/task_tracer.cpp:123,1
    - Dst: unw_getcontext
      Src: /src/brpc/src/bthread/task_tracer.cpp:128,1
    - Dst: unw_init_local
      Src: /src/brpc/src/bthread/task_tracer.cpp:128,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.cpp:129,1
    - Dst: TraceByLibunwind
      Src: /src/brpc/src/bthread/task_tracer.cpp:129,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 132
    functionName: bthread::TaskTracer::Init
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - TraceByLibunwind
    - unw_getcontext
    - unw_init_local
    - RegisterSignalHandler
    - expose
    - butil::ignore_result
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::Init()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:135,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:136,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:140,1
    - Dst: bthread::TaskTracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_tracer.cpp:160,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 2
    argNames:
    - s
    - m
    argTypes:
    - TaskStatus
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 162
    functionName: bthread::TaskTracer::set_status
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskTracer::WaitForTracing
    - CHECK_NE
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::set_status(TaskStatus s, TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - worker_tid
    - m
    argTypes:
    - pid_t
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 168
    functionName: bthread::TaskTracer::set_running_status
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::set_running_status(pid_t worker_tid, TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: bthread::TaskTracer::set_end_status_unsafe
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::set_end_status_unsafe(TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskTracer::TraceImpl
      Src: /src/brpc/src/bthread/task_tracer.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: bthread::TaskTracer::Trace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskTracer::TraceImpl
    linkageType: ''
    returnType: std::string
    signature: std::string TaskTracer::Trace(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskTracer::TraceImpl
      Src: /src/brpc/src/bthread/task_tracer.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: bthread::TaskTracer::Trace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskTracer::TraceImpl
    linkageType: ''
    returnType: void
    signature: void TaskTracer::Trace(std::ostream& os, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:184,1
    - Dst: Wait
      Src: /src/brpc/src/bthread/task_tracer.cpp:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 188
    functionName: bthread::TaskTracer::WaitForTracing
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 1
    functionsReached:
    - Wait
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::WaitForTracing(TaskMeta* m)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cpu_relax
      Src: /src/brpc/src/bthread/task_tracer.cpp:199,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/task_tracer.cpp:201,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:204,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 209
    functionName: bthread::TaskTracer::WaitForJumping
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - sched_yield
    - BAIDU_SCOPED_LOCK
    - cpu_relax
    linkageType: ''
    returnType: TaskStatus
    signature: TaskStatus TaskTracer::WaitForJumping(TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/bthread/task_tracer.cpp:214,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 216
    functionName: bthread::TaskTracer::TraceImpl
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 2
    functionsReached:
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    linkageType: ''
    returnType: TaskTracer::Result
    signature: TaskTracer::Result TaskTracer::TraceImpl(bthread_t tid)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/bthread/task_tracer.cpp:42,1
    - Dst: close
      Src: /src/brpc/src/bthread/task_tracer.cpp:45,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 47
    functionName: TaskTracer::SignalSync::~SignalSync()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void TaskTracer::SignalSync::~SignalSync()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/src/bthread/task_tracer.cpp:50,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:51,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:54,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:55,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:58,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:59,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 64
    functionName: TaskTracer::SignalSync::Init()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - PLOG
    - butil::make_non_blocking
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::SignalSync::Init()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/bthread/task_tracer.cpp:69,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/bthread/task_tracer.cpp:75,1
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:76,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:76,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:77,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:79,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/bthread/task_tracer.cpp:82,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:86,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:89,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:90,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 94
    functionName: TaskTracer::Result::OutputToString() const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - arraysize
    - std::string::append
    - butil::string_appendf
    - Symbolize
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string TaskTracer::Result::OutputToString() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:102,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:102,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 117
    functionName: TaskTracer::Result::OutputToStream(std::ostream& os) const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - Symbolize
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TaskTracer::Result::OutputToStream(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: expose
      Src: /src/brpc/src/bthread/task_tracer.cpp:120,1
    - Dst: RegisterSignalHandler
      Src: /src/brpc/src/bthread/task_tracer.cpp:123,1
    - Dst: unw_getcontext
      Src: /src/brpc/src/bthread/task_tracer.cpp:128,1
    - Dst: unw_init_local
      Src: /src/brpc/src/bthread/task_tracer.cpp:128,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.cpp:129,1
    - Dst: TraceByLibunwind
      Src: /src/brpc/src/bthread/task_tracer.cpp:129,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 132
    functionName: bthread::TaskTracer::Init
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - TraceByLibunwind
    - unw_getcontext
    - unw_init_local
    - RegisterSignalHandler
    - expose
    - butil::ignore_result
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::Init()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:135,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:136,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:140,1
    - Dst: bthread::TaskTracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_tracer.cpp:160,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 2
    argNames:
    - s
    - m
    argTypes:
    - TaskStatus
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 162
    functionName: bthread::TaskTracer::set_status
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskTracer::WaitForTracing
    - CHECK_NE
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::set_status(TaskStatus s, TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - worker_tid
    - m
    argTypes:
    - pid_t
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 168
    functionName: bthread::TaskTracer::set_running_status
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::set_running_status(pid_t worker_tid, TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: bthread::TaskTracer::set_end_status_unsafe
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::set_end_status_unsafe(TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskTracer::TraceImpl
      Src: /src/brpc/src/bthread/task_tracer.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: bthread::TaskTracer::Trace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskTracer::TraceImpl
    linkageType: ''
    returnType: std::string
    signature: std::string TaskTracer::Trace(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskTracer::TraceImpl
      Src: /src/brpc/src/bthread/task_tracer.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 2
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: bthread::TaskTracer::Trace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskTracer::TraceImpl
    linkageType: ''
    returnType: void
    signature: void TaskTracer::Trace(std::ostream& os, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:184,1
    - Dst: Wait
      Src: /src/brpc/src/bthread/task_tracer.cpp:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 188
    functionName: bthread::TaskTracer::WaitForTracing
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 2
    functionsReached:
    - Wait
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::WaitForTracing(TaskMeta* m)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cpu_relax
      Src: /src/brpc/src/bthread/task_tracer.cpp:199,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/task_tracer.cpp:201,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:204,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 209
    functionName: bthread::TaskTracer::WaitForJumping
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - sched_yield
    - BAIDU_SCOPED_LOCK
    - cpu_relax
    linkageType: ''
    returnType: TaskStatus
    signature: TaskStatus TaskTracer::WaitForJumping(TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/bthread/task_tracer.cpp:214,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 216
    functionName: bthread::TaskTracer::TraceImpl
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 4
    functionsReached:
    - butil::Timer::n_elapsed
    - butil::Timer::stop
    linkageType: ''
    returnType: TaskTracer::Result
    signature: TaskTracer::Result TaskTracer::TraceImpl(bthread_t tid)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: unw_init_local
      Src: /src/brpc/src/bthread/task_tracer.cpp:285,1
    - Dst: reinterpret_cast<uintptr_t*>
      Src: /src/brpc/src/bthread/task_tracer.cpp:286,1
    - Dst: unw_set_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:291,1
    - Dst: unw_set_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:295,1
    - Dst: unw_set_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:300,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - fcontext
    argTypes:
    - bthread_fcontext_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 305
    functionName: unw_cursor_t::MakeCursor
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - unw_init_local
    - unw_set_reg
    - LOG
    - reinterpret_cast<uintptr_t*>
    linkageType: ''
    returnType: BUTIL_ATTRIBUTE_NO_SANITIZE_ADDRESS
    signature: BUTIL_ATTRIBUTE_NO_SANITIZE_ADDRESS unw_cursor_t TaskTracer::MakeCursor(bthread_fcontext_t
      fcontext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeCursor
      Src: /src/brpc/src/bthread/task_tracer.cpp:308,1
    - Dst: TaskTracer::TraceByLibunwind
      Src: /src/brpc/src/bthread/task_tracer.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fcontext
    argTypes:
    - bthread_fcontext_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 310
    functionName: TaskTracer::ContextTrace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - TaskTracer::TraceByLibunwind
    - MakeCursor
    linkageType: ''
    returnType: TaskTracer::Result
    signature: TaskTracer::Result TaskTracer::ContextTrace(bthread_fcontext_t fcontext)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:314,1
    - Dst: unw_step
      Src: /src/brpc/src/bthread/task_tracer.cpp:315,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:319,1
    - Dst: unw_get_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:323,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/task_tracer.cpp:326,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 1
    argNames:
    - ' cursor'
    argTypes:
    - unw_cursor_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 331
    functionName: TaskTracer::TraceByLibunwind
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<void*>
    - unw_get_reg
    - bthread::TaskTracer::MakeErrorResult
    - arraysize
    - unw_step
    linkageType: ''
    returnType: TaskTracer::Result
    signature: TaskTracer::Result TaskTracer::TraceByLibunwind(unw_cursor_t& cursor)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: sigfillset
      Src: /src/brpc/src/bthread/task_tracer.cpp:339,1
    - Dst: sigaction
      Src: /src/brpc/src/bthread/task_tracer.cpp:340,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:341,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:345,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 350
    functionName: TaskTracer::RegisterSignalHandler
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - sigaction
    - sigfillset
    - PLOG
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::RegisterSignalHandler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SignalSync*>
      Src: /src/brpc/src/bthread/task_tracer.cpp:357,1
    - Dst: absl::DefaultStackUnwinder
      Src: /src/brpc/src/bthread/task_tracer.cpp:363,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:364,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.cpp:368,1
    - Dst: write
      Src: /src/brpc/src/bthread/task_tracer.cpp:368,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - info
    - context
    argTypes:
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 369
    functionName: TaskTracer::SignalHandler
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - absl::DefaultStackUnwinder
    - arraysize
    - static_cast<SignalSync*>
    - butil::ignore_result
    - write
    linkageType: ''
    returnType: void
    signature: void TaskTracer::SignalHandler(int, siginfo_t* info, void* context)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: std::remove_if
      Src: /src/brpc/src/bthread/task_tracer.cpp:407,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_tracer.cpp:408,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_tracer.cpp:408,1
    - Dst: ref_count
      Src: /src/brpc/src/bthread/task_tracer.cpp:410,1
    - Dst: erase
      Src: /src/brpc/src/bthread/task_tracer.cpp:412,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_tracer.cpp:412,1
    - Dst: SignalSync::SignalSync
      Src: /src/brpc/src/bthread/task_tracer.cpp:416,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/bthread/task_tracer.cpp:417,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:418,1
    - Dst: butil::intrusive_ptr::AddRefManually
      Src: /src/brpc/src/bthread/task_tracer.cpp:422,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/bthread/task_tracer.cpp:425,1
    - Dst: sigqueue
      Src: /src/brpc/src/bthread/task_tracer.cpp:427,1
    - Dst: butil::intrusive_ptr::RemoveRefManually
      Src: /src/brpc/src/bthread/task_tracer.cpp:430,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:431,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_tracer.cpp:431,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_tracer.cpp:434,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/bthread/task_tracer.cpp:437,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/bthread/task_tracer.cpp:439,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/bthread/task_tracer.cpp:446,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:447,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:448,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:450,1
    - Dst: poll
      Src: /src/brpc/src/bthread/task_tracer.cpp:454,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:459,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_tracer.cpp:459,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 36
    argCount: 1
    argNames:
    - tid
    argTypes:
    - pid_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 371
    functionDepth: 1
    functionLinenumber: 371
    functionLinenumberEnd: 465
    functionName: TaskTracer::SignalTrace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::get
    - ref_count
    - butil::intrusive_ptr::RemoveRefManually
    - sigqueue
    - butil::Timer::start
    - poll
    - butil::Timer::m_elapsed
    - std::remove_if
    - butil::Timer::Timer
    - push_back
    - erase
    - SignalSync::SignalSync
    - begin
    - berror
    - butil::intrusive_ptr::AddRefManually
    - end
    - butil::Timer::stop
    - bthread::TaskTracer::MakeErrorResult
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: TaskTracer::Result
    signature: TaskTracer::Result TaskTracer::SignalTrace(pid_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:48,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:49,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:52,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:63,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:64,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:65,1
    - Dst: fetch_or
      Src: /src/brpc/src/bthread/parking_lot.h:70,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:71,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:76,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 78
    functionName: bthread::ParkingLot
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    - load
    - fetch_add
    - fetch_or
    - bthread::futex_wake_private
    - butil::atomic::atomic
    - fetch_sub
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ParkingLot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: bthread::State::State
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void State()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: bthread::State::stopped
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - val
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: bthread::State::State
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void State(int val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: bthread::ParkingLot
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParkingLot()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:48,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:49,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - num_task
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: bthread::signal
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 2
    functionsReached:
    - load
    - fetch_add
    - bthread::futex_wake_private
    linkageType: ''
    returnType: int
    signature: int signal(int num_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: bthread::get_state
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: State
    signature: State get_state()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:63,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:64,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' expected_state'
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: bthread::wait
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    - fetch_sub
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void wait(const State& expected_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_or
      Src: /src/brpc/src/bthread/parking_lot.h:70,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 72
    functionName: bthread::stop
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - fetch_or
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void stop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:48,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:49,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:52,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:63,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:64,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:65,1
    - Dst: fetch_or
      Src: /src/brpc/src/bthread/parking_lot.h:70,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:71,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:76,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 78
    functionName: bthread::ParkingLot
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    - load
    - fetch_add
    - fetch_or
    - bthread::futex_wake_private
    - butil::atomic::atomic
    - fetch_sub
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ParkingLot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: bthread::State::State
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void State()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: bthread::State::stopped
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - val
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: bthread::State::State
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void State(int val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: bthread::ParkingLot
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParkingLot()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:48,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:49,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - num_task
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 53
    functionName: bthread::signal
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 2
    functionsReached:
    - load
    - fetch_add
    - bthread::futex_wake_private
    linkageType: ''
    returnType: int
    signature: int signal(int num_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: bthread::get_state
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: State
    signature: State get_state()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:63,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:64,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' expected_state'
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: bthread::wait
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - bthread::futex_wait_private
    - fetch_sub
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void wait(const State& expected_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_or
      Src: /src/brpc/src/bthread/parking_lot.h:70,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 72
    functionName: bthread::stop
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - fetch_or
    - bthread::futex_wake_private
    linkageType: ''
    returnType: void
    signature: void stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: bthread::RemoteTaskQueue::RemoteTaskQueue
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoteTaskQueue()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/bthread/remote_task_queue.h:42,1
    - Dst: swap
      Src: /src/brpc/src/bthread/remote_task_queue.h:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cap
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: bthread::RemoteTaskQueue::init
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 0
    functionsReached:
    - malloc
    - swap
    linkageType: ''
    returnType: int
    signature: int init(size_t cap)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/remote_task_queue.h:52,1
    - Dst: lock
      Src: /src/brpc/src/bthread/remote_task_queue.h:55,1
    - Dst: bthread::RemoteTaskQueue::pop
      Src: /src/brpc/src/bthread/remote_task_queue.h:56,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/remote_task_queue.h:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - task
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: bthread::RemoteTaskQueue::pop
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 1
    functionsReached:
    - bthread::RemoteTaskQueue::pop
    - lock
    - empty
    - unlock
    linkageType: ''
    returnType: bool
    signature: bool pop(bthread_t* task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bthread/remote_task_queue.h:62,1
    - Dst: bthread::RemoteTaskQueue::push_locked
      Src: /src/brpc/src/bthread/remote_task_queue.h:63,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/remote_task_queue.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - task
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: bthread::RemoteTaskQueue::push
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    - bthread::RemoteTaskQueue::push_locked
    linkageType: ''
    returnType: bool
    signature: bool push(bthread_t task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RemoteTaskQueue::push
      Src: /src/brpc/src/bthread/remote_task_queue.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - task
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 2
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: bthread::RemoteTaskQueue::push_locked
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 1
    functionsReached:
    - bthread::RemoteTaskQueue::push
    linkageType: ''
    returnType: bool
    signature: bool push_locked(bthread_t task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RemoteTaskQueue::capacity
      Src: /src/brpc/src/bthread/remote_task_queue.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: bthread::RemoteTaskQueue::capacity
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 1
    functionsReached:
    - bthread::RemoteTaskQueue::capacity
    linkageType: ''
    returnType: size_t
    signature: size_t capacity() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: bthread::RemoteTaskQueue::RemoteTaskQueue
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoteTaskQueue()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/bthread/remote_task_queue.h:42,1
    - Dst: swap
      Src: /src/brpc/src/bthread/remote_task_queue.h:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cap
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: bthread::RemoteTaskQueue::init
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 0
    functionsReached:
    - malloc
    - swap
    linkageType: ''
    returnType: int
    signature: int init(size_t cap)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/remote_task_queue.h:52,1
    - Dst: lock
      Src: /src/brpc/src/bthread/remote_task_queue.h:55,1
    - Dst: bthread::RemoteTaskQueue::pop
      Src: /src/brpc/src/bthread/remote_task_queue.h:56,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/remote_task_queue.h:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - task
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: bthread::RemoteTaskQueue::pop
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 2
    functionsReached:
    - bthread::RemoteTaskQueue::pop
    - lock
    - empty
    - unlock
    linkageType: ''
    returnType: bool
    signature: bool pop(bthread_t* task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bthread/remote_task_queue.h:62,1
    - Dst: bthread::RemoteTaskQueue::push_locked
      Src: /src/brpc/src/bthread/remote_task_queue.h:63,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/remote_task_queue.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - task
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: bthread::RemoteTaskQueue::push
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 1
    functionsReached:
    - lock
    - unlock
    - bthread::RemoteTaskQueue::push_locked
    linkageType: ''
    returnType: bool
    signature: bool push(bthread_t task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RemoteTaskQueue::push
      Src: /src/brpc/src/bthread/remote_task_queue.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - task
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 2
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: bthread::RemoteTaskQueue::push_locked
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 2
    functionsReached:
    - bthread::RemoteTaskQueue::push
    linkageType: ''
    returnType: bool
    signature: bool push_locked(bthread_t task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RemoteTaskQueue::capacity
      Src: /src/brpc/src/bthread/remote_task_queue.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: bthread::RemoteTaskQueue::capacity
    functionSourceFile: /src/brpc/src/bthread/remote_task_queue.h
    functionUses: 2
    functionsReached:
    - bthread::RemoteTaskQueue::capacity
    linkageType: ''
    returnType: size_t
    signature: size_t capacity() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: bthread::ExitException::ExitException
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExitException(void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: ~ExitException() throw()
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ExitException() throw()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: bthread::ExitException::what
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * what() const throw() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: bthread::ExitException::value
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bthread::AtomicInteger128::AtomicInteger128
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AtomicInteger128()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: bthread::AtomicInteger128::AtomicInteger128
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AtomicInteger128(Value value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: bthread::AtomicInteger128::load_unsafe
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Value
    signature: Value load_unsafe() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - cb
    - arg
    argTypes:
    - RemainedFn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 125
    functionName: bthread::TaskGroup::set_remained
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_remained(RemainedFn cb, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: bthread::TaskGroup::main_tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t main_tid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 168
    functionName: bthread::TaskGroup::current_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskMeta
    signature: TaskMeta * current_task() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: bthread::TaskGroup::current_tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t current_tid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.h:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 172
    functionName: bthread::TaskGroup::current_uptime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t current_uptime_ns() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::current_tid
      Src: /src/brpc/src/bthread/task_group.h:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: bthread::TaskGroup::is_current_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::current_tid
    linkageType: ''
    returnType: bool
    signature: bool is_current_main_task() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 178
    functionName: bthread::TaskGroup::is_current_pthread_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_current_pthread_task() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: bthread::TaskGroup::control
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * control() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: volatile_size
      Src: /src/brpc/src/bthread/task_group.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: bthread::TaskGroup::rq_size
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - volatile_size
    linkageType: ''
    returnType: size_t
    signature: size_t rq_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: bthread::TaskGroup::tag
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_tag_t
    signature: bthread_tag_t tag() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: bthread::TaskGroup::tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pid_t
    signature: pid_t tid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.h:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 231
    functionName: bthread::TaskGroup::current_task_cpu_clock_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - butil::cputhread_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t current_task_cpu_clock_ns()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 241
    functionName: bthread::TaskGroup::CPUTimeStat::CPUTimeStat
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CPUTimeStat()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - AtomicInteger128::Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 243
    functionName: bthread::TaskGroup::CPUTimeStat::CPUTimeStat
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CPUTimeStat(AtomicInteger128::Value value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: operator AtomicInteger128::Value() const
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator AtomicInteger128::Value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bthread/task_group.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - last_run_ns
    - main_task
    argTypes:
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 253
    functionName: bthread::TaskGroup::CPUTimeStat::set_last_run_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - static_cast<int64_t>
    linkageType: ''
    returnType: void
    signature: void set_last_run_ns(int64_t last_run_ns, bool main_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: bthread::TaskGroup::CPUTimeStat::last_run_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_run_ns() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 259
    functionName: bthread::TaskGroup::CPUTimeStat::last_run_ns_and_type
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_run_ns_and_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 263
    functionName: bthread::TaskGroup::CPUTimeStat::is_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_main_task() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - cputime_ns
    - main_task
    argTypes:
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 270
    functionName: bthread::TaskGroup::CPUTimeStat::add_cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void add_cumulated_cputime_ns(int64_t cputime_ns, bool main_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 273
    functionName: bthread::TaskGroup::CPUTimeStat::cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t cumulated_cputime_ns() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::AtomicCPUTimeStat::load
      Src: /src/brpc/src/bthread/task_group.h:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 287
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::load
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::AtomicCPUTimeStat::load
    linkageType: ''
    returnType: CPUTimeStat
    signature: CPUTimeStat load() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::AtomicCPUTimeStat::load_unsafe
      Src: /src/brpc/src/bthread/task_group.h:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 290
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::load_unsafe
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::AtomicCPUTimeStat::load_unsafe
    linkageType: ''
    returnType: CPUTimeStat
    signature: CPUTimeStat load_unsafe() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::AtomicCPUTimeStat::store
      Src: /src/brpc/src/bthread/task_group.h:293,1
    - Dst: ComparableValue::ComparableValue
      Src: /src/brpc/src/bthread/task_group.h:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cpu_time_stat
    argTypes:
    - CPUTimeStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 294
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::store
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached:
    - ComparableValue::ComparableValue
    - bthread::TaskGroup::AtomicCPUTimeStat::store
    linkageType: ''
    returnType: void
    signature: void store(CPUTimeStat cpu_time_stat)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pop
      Src: /src/brpc/src/bthread/task_group.h:332,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.h:336,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.h:338,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 339
    functionName: bthread::TaskGroup::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached:
    - pop
    - bthread::TaskGroup::steal_task
    - get_state
    linkageType: ''
    returnType: bool
    signature: bool steal_task(bthread_t* tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 341
    functionName: bthread::TaskGroup::set_tag
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_tag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - pl
    argTypes:
    - ParkingLot*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    functionName: bthread::TaskGroup::set_pl
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_pl(ParkingLot* pl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - g
    - tid
    argTypes:
    - TaskGroup*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 347
    functionName: bthread::TaskGroup::is_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_main_task(TaskGroup* g, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: bthread::ExitException::ExitException
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExitException(void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: ~ExitException() throw()
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ExitException() throw()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: bthread::ExitException::what
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * what() const throw() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: bthread::ExitException::value
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: bthread::AtomicInteger128::AtomicInteger128
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AtomicInteger128()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: bthread::AtomicInteger128::AtomicInteger128
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AtomicInteger128(Value value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: bthread::AtomicInteger128::load_unsafe
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Value
    signature: Value load_unsafe() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - cb
    - arg
    argTypes:
    - RemainedFn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 125
    functionName: bthread::TaskGroup::set_remained
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_remained(RemainedFn cb, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: bthread::TaskGroup::main_tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t main_tid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 168
    functionName: bthread::TaskGroup::current_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskMeta
    signature: TaskMeta * current_task() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: bthread::TaskGroup::current_tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t current_tid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.h:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 172
    functionName: bthread::TaskGroup::current_uptime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t current_uptime_ns() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::current_tid
      Src: /src/brpc/src/bthread/task_group.h:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: bthread::TaskGroup::is_current_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::current_tid
    linkageType: ''
    returnType: bool
    signature: bool is_current_main_task() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 178
    functionName: bthread::TaskGroup::is_current_pthread_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_current_pthread_task() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 199
    functionName: bthread::TaskGroup::control
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * control() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: volatile_size
      Src: /src/brpc/src/bthread/task_group.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: bthread::TaskGroup::rq_size
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - volatile_size
    linkageType: ''
    returnType: size_t
    signature: size_t rq_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: bthread::TaskGroup::tag
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_tag_t
    signature: bthread_tag_t tag() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: bthread::TaskGroup::tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pid_t
    signature: pid_t tid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.h:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 231
    functionName: bthread::TaskGroup::current_task_cpu_clock_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - butil::cputhread_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t current_task_cpu_clock_ns()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 241
    functionName: bthread::TaskGroup::CPUTimeStat::CPUTimeStat
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CPUTimeStat()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - value
    argTypes:
    - AtomicInteger128::Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 243
    functionName: bthread::TaskGroup::CPUTimeStat::CPUTimeStat
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CPUTimeStat(AtomicInteger128::Value value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: operator AtomicInteger128::Value() const
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator AtomicInteger128::Value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/bthread/task_group.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - last_run_ns
    - main_task
    argTypes:
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 253
    functionName: bthread::TaskGroup::CPUTimeStat::set_last_run_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached:
    - static_cast<int64_t>
    linkageType: ''
    returnType: void
    signature: void set_last_run_ns(int64_t last_run_ns, bool main_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: bthread::TaskGroup::CPUTimeStat::last_run_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_run_ns() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 259
    functionName: bthread::TaskGroup::CPUTimeStat::last_run_ns_and_type
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_run_ns_and_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 263
    functionName: bthread::TaskGroup::CPUTimeStat::is_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_main_task() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - cputime_ns
    - main_task
    argTypes:
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 270
    functionName: bthread::TaskGroup::CPUTimeStat::add_cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void add_cumulated_cputime_ns(int64_t cputime_ns, bool main_task)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 273
    functionName: bthread::TaskGroup::CPUTimeStat::cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t cumulated_cputime_ns() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::AtomicCPUTimeStat::load
      Src: /src/brpc/src/bthread/task_group.h:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 287
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::load
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 2
    functionsReached:
    - bthread::TaskGroup::AtomicCPUTimeStat::load
    linkageType: ''
    returnType: CPUTimeStat
    signature: CPUTimeStat load() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::AtomicCPUTimeStat::load_unsafe
      Src: /src/brpc/src/bthread/task_group.h:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 290
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::load_unsafe
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 2
    functionsReached:
    - bthread::TaskGroup::AtomicCPUTimeStat::load_unsafe
    linkageType: ''
    returnType: CPUTimeStat
    signature: CPUTimeStat load_unsafe() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::AtomicCPUTimeStat::store
      Src: /src/brpc/src/bthread/task_group.h:293,1
    - Dst: ComparableValue::ComparableValue
      Src: /src/brpc/src/bthread/task_group.h:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cpu_time_stat
    argTypes:
    - CPUTimeStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 294
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::store
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 2
    functionsReached:
    - ComparableValue::ComparableValue
    - bthread::TaskGroup::AtomicCPUTimeStat::store
    linkageType: ''
    returnType: void
    signature: void store(CPUTimeStat cpu_time_stat)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pop
      Src: /src/brpc/src/bthread/task_group.h:332,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.h:336,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.h:338,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 339
    functionName: bthread::TaskGroup::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 2
    functionsReached:
    - pop
    - bthread::TaskGroup::steal_task
    - get_state
    linkageType: ''
    returnType: bool
    signature: bool steal_task(bthread_t* tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 341
    functionName: bthread::TaskGroup::set_tag
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_tag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - pl
    argTypes:
    - ParkingLot*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    functionName: bthread::TaskGroup::set_pl
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_pl(ParkingLot* pl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - g
    - tid
    argTypes:
    - TaskGroup*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 347
    functionName: bthread::TaskGroup::is_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_main_task(TaskGroup* g, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: bthread::zeroize
    functionSourceFile: /src/brpc/src/bthread/stack.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void zeroize()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~ContextualStack()
    functionSourceFile: /src/brpc/src/bthread/stack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ContextualStack()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: bthread::zeroize
    functionSourceFile: /src/brpc/src/bthread/stack.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void zeroize()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~ContextualStack()
    functionSourceFile: /src/brpc/src/bthread/stack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ContextualStack()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int>>
      Src: /src/brpc/src/bthread/bthread_once.cpp:22,1
    - Dst: store
      Src: /src/brpc/src/bthread/bthread_once.cpp:23,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: bthread_once_t::bthread_once_t
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 0
    functionsReached:
    - store
    - bthread::butex_create_checked<butil::atomic<int>>
    linkageType: ''
    returnType: void
    signature: void bthread_once_t::bthread_once_t()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/bthread_once.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 2
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: bthread_once_t::~bthread_once_t()
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void bthread_once_t::~bthread_once_t()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread_once.cpp:37,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/bthread_once.cpp:38,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/bthread/bthread_once.cpp:43,1
    - Dst: init_routine
      Src: /src/brpc/src/bthread/bthread_once.cpp:47,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/src/bthread/bthread_once.cpp:51,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/bthread_once.cpp:53,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread_once.cpp:59,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/bthread_once.cpp:60,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/bthread_once.cpp:66,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - once_control
    argTypes:
    - bthread_once_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 32
    functionDepth: 4
    functionLinenumber: 32
    functionLinenumberEnd: 71
    functionName: bthread::bthread_once_impl
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - bthread::butex_wait
    - init_routine
    - bthread::butex_wake_all
    - butil::atomic*::store
    - butil::atomic*::compare_exchange_strong
    - butil::atomic*::load
    linkageType: ''
    returnType: int
    signature: int bthread_once_impl(bthread_once_t* once_control, void (*init_routine)())
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread_once.cpp:37,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/bthread_once.cpp:38,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/bthread/bthread_once.cpp:43,1
    - Dst: init_routine
      Src: /src/brpc/src/bthread/bthread_once.cpp:47,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/src/bthread/bthread_once.cpp:51,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/bthread_once.cpp:53,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread_once.cpp:59,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/bthread_once.cpp:60,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/bthread_once.cpp:66,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - once_control
    argTypes:
    - bthread_once_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 32
    functionDepth: 4
    functionLinenumber: 32
    functionLinenumberEnd: 71
    functionName: bthread::bthread_once_impl
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - bthread::butex_wait
    - init_routine
    - bthread::butex_wake_all
    - butil::atomic*::store
    - butil::atomic*::compare_exchange_strong
    - butil::atomic*::load
    linkageType: ''
    returnType: int
    signature: int bthread_once_impl(bthread_once_t* once_control, void (*init_routine)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::bthread_once_impl
      Src: /src/brpc/src/bthread/bthread_once.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - once_control
    argTypes:
    - bthread_once_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 75
    functionDepth: 5
    functionLinenumber: 75
    functionLinenumberEnd: 79
    functionName: bthread_once
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 2
    functionsReached:
    - bthread::bthread_once_impl
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: __BEGIN_DECLS bthread_once(bthread_once_t* once_control, void (*init_routine)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bthread/countdown_event.cpp:29,1
    - Dst: butex_create_checked<int>
      Src: /src/brpc/src/bthread/countdown_event.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - initial_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 35
    functionName: bthread::CountdownEvent::CountdownEvent
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 4
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    - butex_create_checked<int>
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::CountdownEvent(int initial_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/countdown_event.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: CountdownEvent::~CountdownEvent()
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 0
    functionsReached:
    - butex_destroy
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::~CountdownEvent()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/countdown_event.cpp:45,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:51,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/countdown_event.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - sig
    - flush
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 53
    functionName: bthread::CountdownEvent::signal
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 4
    functionsReached:
    - LOG_IF
    - fetch_sub
    - butex_wake_all
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::signal(int sig, bool flush)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/countdown_event.cpp:59,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/countdown_event.cpp:63,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 68
    functionName: bthread::CountdownEvent::wait
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 6
    functionsReached:
    - butex_wait
    - load
    linkageType: ''
    returnType: int
    signature: int CountdownEvent::wait()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:72,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:75,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/countdown_event.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 78
    functionName: bthread::CountdownEvent::add_count
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 0
    functionsReached:
    - LOG_IF
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::add_count(int v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/countdown_event.cpp:82,1
    - Dst: exchange
      Src: /src/brpc/src/bthread/countdown_event.cpp:86,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 91
    functionName: bthread::CountdownEvent::reset
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 2
    functionsReached:
    - exchange
    - LOG
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::reset(int v)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/countdown_event.cpp:97,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/countdown_event.cpp:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ' duetime'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 106
    functionName: bthread::CountdownEvent::timed_wait
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 2
    functionsReached:
    - butex_wait
    - load
    linkageType: ''
    returnType: int
    signature: int CountdownEvent::timed_wait(const timespec& duetime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/bthread/countdown_event.cpp:29,1
    - Dst: butex_create_checked<int>
      Src: /src/brpc/src/bthread/countdown_event.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - initial_count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 35
    functionName: bthread::CountdownEvent::CountdownEvent
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 4
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    - butex_create_checked<int>
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::CountdownEvent(int initial_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/countdown_event.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: CountdownEvent::~CountdownEvent()
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 0
    functionsReached:
    - butex_destroy
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::~CountdownEvent()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/countdown_event.cpp:45,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:51,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/countdown_event.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - sig
    - flush
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 53
    functionName: bthread::CountdownEvent::signal
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 4
    functionsReached:
    - LOG_IF
    - fetch_sub
    - butex_wake_all
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::signal(int sig, bool flush)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/countdown_event.cpp:59,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/countdown_event.cpp:63,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 68
    functionName: bthread::CountdownEvent::wait
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 6
    functionsReached:
    - butex_wait
    - load
    linkageType: ''
    returnType: int
    signature: int CountdownEvent::wait()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:72,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:75,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/countdown_event.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 78
    functionName: bthread::CountdownEvent::add_count
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 0
    functionsReached:
    - LOG_IF
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::add_count(int v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/countdown_event.cpp:82,1
    - Dst: exchange
      Src: /src/brpc/src/bthread/countdown_event.cpp:86,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/countdown_event.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 91
    functionName: bthread::CountdownEvent::reset
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 2
    functionsReached:
    - exchange
    - LOG
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void CountdownEvent::reset(int v)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/countdown_event.cpp:97,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/countdown_event.cpp:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ' duetime'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 106
    functionName: bthread::CountdownEvent::timed_wait
    functionSourceFile: /src/brpc/src/bthread/countdown_event.cpp
    functionUses: 2
    functionsReached:
    - butex_wait
    - load
    linkageType: ''
    returnType: int
    signature: int CountdownEvent::timed_wait(const timespec& duetime)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: bthread::WARN_UNUSED_RESULT::slot_of_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: slot_id_t
    signature: slot_id_t WARN_UNUSED_RESULT slot_of_id(uint64_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - slot_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: bthread::make_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t make_id(uint32_t version, slot_id_t slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: bthread::WARN_UNUSED_RESULT::slot_of_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: slot_id_t
    signature: slot_id_t WARN_UNUSED_RESULT slot_of_id(uint64_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - slot_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: bthread::make_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t make_id(uint32_t version, slot_id_t slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 62
    functionName: bthread::ExecutionQueueVars::ExecutionQueueVars
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueVars::ExecutionQueueVars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ExecutionQueueVars>
      Src: /src/brpc/src/bthread/execution_queue.cpp:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    functionName: bthread::get_execq_vars
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ExecutionQueueVars>
    linkageType: ''
    returnType: ExecutionQueueVars
    signature: ExecutionQueueVars * get_execq_vars()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:78,1
    - Dst: exchange
      Src: /src/brpc/src/bthread/execution_queue.cpp:80,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:90,1
    - Dst: bthread::ExecutionQueueBase::_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:94,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/execution_queue.cpp:98,1
    - Dst: _more_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:100,1
    - Dst: bthread::ExecutionQueueBase::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:102,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue.cpp:110,1
    - Dst: Signal
      Src: /src/brpc/src/bthread/execution_queue.cpp:112,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/execution_queue.cpp:115,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/execution_queue.cpp:118,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:119,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/bthread/execution_queue.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/execution_queue.cpp:131,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:132,1
    - Dst: executor::submit
      Src: /src/brpc/src/bthread/execution_queue.cpp:137,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/execution_queue.cpp:138,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:139,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 50
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 68
    functionDepth: 4
    functionLinenumber: 68
    functionLinenumberEnd: 142
    functionName: bthread::ExecutionQueueBase::start_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - bthread::ExecutionQueueBase::_execute_tasks
    - bthread::ExecutionQueueBase::_execute
    - bthread::ExecutionQueueBase::return_task_node
    - pthread_create
    - bthread_start_background
    - Signal
    - fetch_add
    - PLOG
    - BAIDU_SCOPED_LOCK
    - executor::submit
    - _more_tasks
    - exchange
    - fetch_sub
    - get_execq_vars
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueBase::start_execute(TaskNode* node)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:145,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:152,1
    - Dst: ExecutionQueueBase*::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:155,1
    - Dst: ExecutionQueueBase*::_high_priority_tasks::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:158,1
    - Dst: ExecutionQueueBase*::_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:161,1
    - Dst: ExecutionQueueBase*::_high_priority_tasks::fetch_sub
      Src: /src/brpc/src/bthread/execution_queue.cpp:162,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/execution_queue.cpp:166,1
    - Dst: ExecutionQueueBase*::_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:169,1
    - Dst: ExecutionQueueBase*::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:178,1
    - Dst: ExecutionQueueBase*::_more_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:185,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/execution_queue.cpp:186,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:187,1
    - Dst: ExecutionQueueBase*::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:188,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:193,1
    - Dst: ExecutionQueueBase*::_head::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:193,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:194,1
    - Dst: ExecutionQueueBase*::_join_butex::fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:201,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/execution_queue.cpp:202,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:204,1
    - Dst: slot_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:204,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 208
    functionName: bthread::ExecutionQueueBase::_execute_tasks
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 1
    functionsReached:
    - ExecutionQueueBase*::_execute
    - sched_yield
    - ExecutionQueueBase*::_high_priority_tasks::load
    - butil::return_resource
    - ExecutionQueueBase*::return_task_node
    - ExecutionQueueBase*::_high_priority_tasks::fetch_sub
    - ExecutionQueueBase*::_more_tasks
    - CHECK
    - CHECK_EQ
    - ExecutionQueueBase*::_head::load
    - ExecutionQueueBase*::_join_butex::fetch_add
    - butex_wake_all
    - get_execq_vars
    - slot_of_id
    linkageType: ''
    returnType: void
    signature: void * ExecutionQueueBase::_execute_tasks(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bthread/execution_queue.cpp:211,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue.cpp:216,1
    - Dst: auto::_cond::Wait
      Src: /src/brpc/src/bthread/execution_queue.cpp:218,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:220,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:223,1
    - Dst: auto::_join_butex::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 230
    functionName: bthread::ExecutionQueueBase::_execute_tasks_pthread
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - bthread::ExecutionQueueBase::_execute_tasks
    - auto::_join_butex::load
    - BAIDU_SCOPED_LOCK
    - butil::PlatformThread::SetName
    - _version_of_id
    - auto::_cond::Wait
    linkageType: ''
    returnType: void
    signature: void * ExecutionQueueBase::_execute_tasks_pthread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskNode*::clear_before_return
      Src: /src/brpc/src/bthread/execution_queue.cpp:233,1
    - Dst: butil::return_object<TaskNode>
      Src: /src/brpc/src/bthread/execution_queue.cpp:234,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: bthread::ExecutionQueueBase::return_task_node
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 1
    functionsReached:
    - TaskNode*::clear_before_return
    - butil::return_object<TaskNode>
    - get_execq_vars
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueBase::return_task_node(TaskNode* node)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<TaskNode>
      Src: /src/brpc/src/bthread/execution_queue.cpp:241,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/execution_queue.cpp:242,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:243,1
    - Dst: bthread::ExecutionQueueBase::start_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:247,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:250,1
    - Dst: berror
      Src: /src/brpc/src/bthread/execution_queue.cpp:250,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/bthread/execution_queue.cpp:251,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 238
    functionDepth: 5
    functionLinenumber: 238
    functionLinenumberEnd: 253
    functionName: bthread::ExecutionQueueBase::_on_recycle
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - bthread_usleep
    - butil::get_object<TaskNode>
    - bthread::ExecutionQueueBase::start_execute
    - CHECK
    - berror
    - get_execq_vars
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueBase::_on_recycle()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: slot_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:256,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:257,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:262,1
    - Dst: ExecutionQueueBase*::_join_butex::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:264,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/execution_queue.cpp:265,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/execution_queue.cpp:272,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 275
    functionName: bthread::ExecutionQueueBase::join
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - butil::address_resource
    - pthread_join
    - ExecutionQueueBase*::_join_butex::load
    - butex_wait
    - _version_of_id
    - slot_of_id
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::join(uint64_t id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:278,1
    - Dst: load
      Src: /src/brpc/src/bthread/execution_queue.cpp:279,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:281,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/execution_queue.cpp:286,1
    - Dst: _make_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:287,1
    - Dst: _ref_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:287,1
    - Dst: store
      Src: /src/brpc/src/bthread/execution_queue.cpp:291,1
    - Dst: _release_additional_reference
      Src: /src/brpc/src/bthread/execution_queue.cpp:294,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 300
    functionName: bthread::ExecutionQueueBase::stop
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - _version_of_vref
    - _make_vref
    - load
    - compare_exchange_strong
    - store
    - _release_additional_reference
    - _ref_of_vref
    - _version_of_id
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::stop()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:304,1
    - Dst: _execute_func
      Src: /src/brpc/src/bthread/execution_queue.cpp:308,1
    - Dst: _execute_func
      Src: /src/brpc/src/bthread/execution_queue.cpp:316,1
    - Dst: TaskIteratorBase::num_iterated
      Src: /src/brpc/src/bthread/execution_queue.cpp:323,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 3
    argNames:
    - head
    - high_priority
    - niterated
    argTypes:
    - TaskNode*
    - bool
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 326
    functionName: bthread::ExecutionQueueBase::_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 1
    functionsReached:
    - TaskIteratorBase::num_iterated
    - CHECK
    - _execute_func
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::_execute(TaskNode* head, bool high_priority,
      int* niterated)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:329,1
    - Dst: butil::get_object<TaskNode>
      Src: /src/brpc/src/bthread/execution_queue.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 331
    functionName: bthread::ExecutionQueueBase::allocate_node
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<TaskNode>
    - get_execq_vars
    linkageType: ''
    returnType: TaskNode
    signature: TaskNode * ExecutionQueueBase::allocate_node()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: slot_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:337,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:338,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/execution_queue.cpp:339,1
    - Dst: ExecutionQueueBase*::_versioned_ref::fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:342,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:344,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:345,1
    - Dst: scoped_ptr_t::reset
      Src: /src/brpc/src/bthread/execution_queue.cpp:346,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue.cpp:347,1
    - Dst: ExecutionQueueBase*::_versioned_ref::fetch_sub
      Src: /src/brpc/src/bthread/execution_queue.cpp:350,1
    - Dst: _ref_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:352,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue.cpp:354,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/execution_queue.cpp:355,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:356,1
    - Dst: ExecutionQueueBase*::_versioned_ref::compare_exchange_strong
      Src: /src/brpc/src/bthread/execution_queue.cpp:360,1
    - Dst: _make_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:361,1
    - Dst: ExecutionQueueBase*::_on_recycle
      Src: /src/brpc/src/bthread/execution_queue.cpp:364,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:371,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/execution_queue.cpp:375,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:379,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue.cpp:382,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 383
    functionName: bthread::ExecutionQueueBase::address
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - scoped_ptr_t::reset
    - ExecutionQueueBase*::_versioned_ref::fetch_sub
    - _version_of_vref
    - butil::address_resource
    - _make_vref
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - ExecutionQueueBase*::_versioned_ref::compare_exchange_strong
    - CHECK_EQ
    - __builtin_expect
    - CHECK
    - ExecutionQueueBase*::_on_recycle
    - _ref_of_vref
    - scoped_ptr_t::Pass
    - _version_of_id
    - slot_of_id
    linkageType: ''
    returnType: ExecutionQueueBase::scoped_ptr_t
    signature: ExecutionQueueBase::scoped_ptr_t ExecutionQueueBase::address(uint64_t
      id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:394,1
    - Dst: Forbidden
      Src: /src/brpc/src/bthread/execution_queue.cpp:394,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/execution_queue.cpp:395,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:400,1
    - Dst: ExecutionQueueBase*::_head::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:400,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/execution_queue.cpp:401,1
    - Dst: ExecutionQueueBase*::_high_priority_tasks::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:401,1
    - Dst: ExecutionQueueOptions::ExecutionQueueOptions
      Src: /src/brpc/src/bthread/execution_queue.cpp:402,1
    - Dst: ExecutionQueueBase*::_stopped::store
      Src: /src/brpc/src/bthread/execution_queue.cpp:407,1
    - Dst: make_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:408,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:409,1
    - Dst: ExecutionQueueBase*::_versioned_ref::fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:409,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:414,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 6
    argNames:
    - id
    - options
    - execute_func
    - clear_func
    - meta
    - type_specific_function
    argTypes:
    - uint64_t*
    - ExecutionQueueOptions*
    - execute_func_t
    - clear_task_mem
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 418
    functionName: bthread::ExecutionQueueBase::create
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - ExecutionQueueBase*::_high_priority_tasks::load
    - _version_of_vref
    - butil::get_resource
    - make_id
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - CHECK_EQ
    - CHECK
    - Forbidden
    - ExecutionQueueBase*::_head::load
    - ExecutionQueueOptions::ExecutionQueueOptions
    - ExecutionQueueBase*::_stopped::store
    - get_execq_vars
    linkageType: ''
    returnType: int
    signature: "int ExecutionQueueBase::create(uint64_t* id, const ExecutionQueueOptions*
      options,\n                               execute_func_t execute_func,\n                               clear_task_mem
      clear_func,\n                               void* meta, void* type_specific_function)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _high_priority_tasks::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:422,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 427
    functionName: bthread::TaskIteratorBase::should_break_for_high_priority_tasks
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - _high_priority_tasks::load
    linkageType: ''
    returnType: bool
    signature: bool TaskIteratorBase::should_break_for_high_priority_tasks()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: should_break_for_high_priority_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:436,1
    - Dst: peek_to_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:442,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 453
    functionName: TaskIteratorBase::operator++()
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - should_break_for_high_priority_tasks
    - peek_to_execute
    linkageType: ''
    returnType: void
    signature: void TaskIteratorBase::operator++()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: set_executed
      Src: /src/brpc/src/bthread/execution_queue.cpp:464,1
    - Dst: set_executed
      Src: /src/brpc/src/bthread/execution_queue.cpp:470,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 472
    functionName: TaskIteratorBase::~TaskIteratorBase()
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - set_executed
    linkageType: ''
    returnType: void
    signature: void TaskIteratorBase::~TaskIteratorBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: bthread::WARN_UNUSED_RESULT::slot_of_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: slot_id_t
    signature: slot_id_t WARN_UNUSED_RESULT slot_of_id(uint64_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - slot_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: bthread::make_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t make_id(uint32_t version, slot_id_t slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: bthread::WARN_UNUSED_RESULT::slot_of_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: slot_id_t
    signature: slot_id_t WARN_UNUSED_RESULT slot_of_id(uint64_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - slot_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: bthread::make_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t make_id(uint32_t version, slot_id_t slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 62
    functionName: bthread::ExecutionQueueVars::ExecutionQueueVars
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueVars::ExecutionQueueVars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ExecutionQueueVars>
      Src: /src/brpc/src/bthread/execution_queue.cpp:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    functionName: bthread::get_execq_vars
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ExecutionQueueVars>
    linkageType: ''
    returnType: ExecutionQueueVars
    signature: ExecutionQueueVars * get_execq_vars()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:78,1
    - Dst: exchange
      Src: /src/brpc/src/bthread/execution_queue.cpp:80,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:90,1
    - Dst: bthread::ExecutionQueueBase::_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:94,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/execution_queue.cpp:98,1
    - Dst: _more_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:100,1
    - Dst: bthread::ExecutionQueueBase::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:102,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue.cpp:110,1
    - Dst: Signal
      Src: /src/brpc/src/bthread/execution_queue.cpp:112,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/execution_queue.cpp:115,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/execution_queue.cpp:118,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:119,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/bthread/execution_queue.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/execution_queue.cpp:131,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:132,1
    - Dst: executor::submit
      Src: /src/brpc/src/bthread/execution_queue.cpp:137,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/execution_queue.cpp:138,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:139,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 50
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 68
    functionDepth: 4
    functionLinenumber: 68
    functionLinenumberEnd: 142
    functionName: bthread::ExecutionQueueBase::start_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 1
    functionsReached:
    - bthread::ExecutionQueueBase::_execute_tasks
    - bthread::ExecutionQueueBase::_execute
    - bthread::ExecutionQueueBase::return_task_node
    - pthread_create
    - bthread_start_background
    - Signal
    - fetch_add
    - PLOG
    - BAIDU_SCOPED_LOCK
    - executor::submit
    - _more_tasks
    - exchange
    - fetch_sub
    - get_execq_vars
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueBase::start_execute(TaskNode* node)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:145,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:152,1
    - Dst: ExecutionQueueBase*::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:155,1
    - Dst: ExecutionQueueBase*::_high_priority_tasks::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:158,1
    - Dst: ExecutionQueueBase*::_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:161,1
    - Dst: ExecutionQueueBase*::_high_priority_tasks::fetch_sub
      Src: /src/brpc/src/bthread/execution_queue.cpp:162,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/execution_queue.cpp:166,1
    - Dst: ExecutionQueueBase*::_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:169,1
    - Dst: ExecutionQueueBase*::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:178,1
    - Dst: ExecutionQueueBase*::_more_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:185,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/execution_queue.cpp:186,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:187,1
    - Dst: ExecutionQueueBase*::return_task_node
      Src: /src/brpc/src/bthread/execution_queue.cpp:188,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:193,1
    - Dst: ExecutionQueueBase*::_head::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:193,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:194,1
    - Dst: ExecutionQueueBase*::_join_butex::fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:201,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/execution_queue.cpp:202,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:204,1
    - Dst: slot_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:204,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 208
    functionName: bthread::ExecutionQueueBase::_execute_tasks
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 3
    functionsReached:
    - ExecutionQueueBase*::_execute
    - sched_yield
    - ExecutionQueueBase*::_high_priority_tasks::load
    - butil::return_resource
    - ExecutionQueueBase*::return_task_node
    - ExecutionQueueBase*::_high_priority_tasks::fetch_sub
    - ExecutionQueueBase*::_more_tasks
    - CHECK
    - CHECK_EQ
    - ExecutionQueueBase*::_head::load
    - ExecutionQueueBase*::_join_butex::fetch_add
    - butex_wake_all
    - get_execq_vars
    - slot_of_id
    linkageType: ''
    returnType: void
    signature: void * ExecutionQueueBase::_execute_tasks(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bthread/execution_queue.cpp:211,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue.cpp:216,1
    - Dst: auto::_cond::Wait
      Src: /src/brpc/src/bthread/execution_queue.cpp:218,1
    - Dst: bthread::ExecutionQueueBase::_execute_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:220,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:223,1
    - Dst: auto::_join_butex::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 230
    functionName: bthread::ExecutionQueueBase::_execute_tasks_pthread
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - bthread::ExecutionQueueBase::_execute_tasks
    - auto::_join_butex::load
    - BAIDU_SCOPED_LOCK
    - butil::PlatformThread::SetName
    - _version_of_id
    - auto::_cond::Wait
    linkageType: ''
    returnType: void
    signature: void * ExecutionQueueBase::_execute_tasks_pthread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskNode*::clear_before_return
      Src: /src/brpc/src/bthread/execution_queue.cpp:233,1
    - Dst: butil::return_object<TaskNode>
      Src: /src/brpc/src/bthread/execution_queue.cpp:234,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: bthread::ExecutionQueueBase::return_task_node
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 2
    functionsReached:
    - TaskNode*::clear_before_return
    - butil::return_object<TaskNode>
    - get_execq_vars
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueBase::return_task_node(TaskNode* node)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<TaskNode>
      Src: /src/brpc/src/bthread/execution_queue.cpp:241,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/execution_queue.cpp:242,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:243,1
    - Dst: bthread::ExecutionQueueBase::start_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:247,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:250,1
    - Dst: berror
      Src: /src/brpc/src/bthread/execution_queue.cpp:250,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/bthread/execution_queue.cpp:251,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 238
    functionDepth: 5
    functionLinenumber: 238
    functionLinenumberEnd: 253
    functionName: bthread::ExecutionQueueBase::_on_recycle
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - bthread_usleep
    - butil::get_object<TaskNode>
    - bthread::ExecutionQueueBase::start_execute
    - CHECK
    - berror
    - get_execq_vars
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueBase::_on_recycle()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: slot_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:256,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:257,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:262,1
    - Dst: ExecutionQueueBase*::_join_butex::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:264,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/execution_queue.cpp:265,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/execution_queue.cpp:272,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 275
    functionName: bthread::ExecutionQueueBase::join
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - butil::address_resource
    - pthread_join
    - ExecutionQueueBase*::_join_butex::load
    - butex_wait
    - _version_of_id
    - slot_of_id
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::join(uint64_t id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:278,1
    - Dst: load
      Src: /src/brpc/src/bthread/execution_queue.cpp:279,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:281,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/execution_queue.cpp:286,1
    - Dst: _make_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:287,1
    - Dst: _ref_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:287,1
    - Dst: store
      Src: /src/brpc/src/bthread/execution_queue.cpp:291,1
    - Dst: _release_additional_reference
      Src: /src/brpc/src/bthread/execution_queue.cpp:294,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 300
    functionName: bthread::ExecutionQueueBase::stop
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - _version_of_vref
    - _make_vref
    - load
    - compare_exchange_strong
    - store
    - _release_additional_reference
    - _ref_of_vref
    - _version_of_id
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::stop()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:304,1
    - Dst: _execute_func
      Src: /src/brpc/src/bthread/execution_queue.cpp:308,1
    - Dst: _execute_func
      Src: /src/brpc/src/bthread/execution_queue.cpp:316,1
    - Dst: TaskIteratorBase::num_iterated
      Src: /src/brpc/src/bthread/execution_queue.cpp:323,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 3
    argNames:
    - head
    - high_priority
    - niterated
    argTypes:
    - TaskNode*
    - bool
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 326
    functionName: bthread::ExecutionQueueBase::_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 2
    functionsReached:
    - TaskIteratorBase::num_iterated
    - CHECK
    - _execute_func
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::_execute(TaskNode* head, bool high_priority,
      int* niterated)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:329,1
    - Dst: butil::get_object<TaskNode>
      Src: /src/brpc/src/bthread/execution_queue.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 331
    functionName: bthread::ExecutionQueueBase::allocate_node
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<TaskNode>
    - get_execq_vars
    linkageType: ''
    returnType: TaskNode
    signature: TaskNode * ExecutionQueueBase::allocate_node()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: slot_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:337,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:338,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/execution_queue.cpp:339,1
    - Dst: ExecutionQueueBase*::_versioned_ref::fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:342,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:344,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:345,1
    - Dst: scoped_ptr_t::reset
      Src: /src/brpc/src/bthread/execution_queue.cpp:346,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue.cpp:347,1
    - Dst: ExecutionQueueBase*::_versioned_ref::fetch_sub
      Src: /src/brpc/src/bthread/execution_queue.cpp:350,1
    - Dst: _ref_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:352,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue.cpp:354,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/execution_queue.cpp:355,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:356,1
    - Dst: ExecutionQueueBase*::_versioned_ref::compare_exchange_strong
      Src: /src/brpc/src/bthread/execution_queue.cpp:360,1
    - Dst: _make_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:361,1
    - Dst: ExecutionQueueBase*::_on_recycle
      Src: /src/brpc/src/bthread/execution_queue.cpp:364,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:371,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/execution_queue.cpp:375,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:379,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue.cpp:382,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 383
    functionName: bthread::ExecutionQueueBase::address
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - scoped_ptr_t::reset
    - ExecutionQueueBase*::_versioned_ref::fetch_sub
    - _version_of_vref
    - butil::address_resource
    - _make_vref
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - ExecutionQueueBase*::_versioned_ref::compare_exchange_strong
    - CHECK_EQ
    - __builtin_expect
    - CHECK
    - ExecutionQueueBase*::_on_recycle
    - _ref_of_vref
    - scoped_ptr_t::Pass
    - _version_of_id
    - slot_of_id
    linkageType: ''
    returnType: ExecutionQueueBase::scoped_ptr_t
    signature: ExecutionQueueBase::scoped_ptr_t ExecutionQueueBase::address(uint64_t
      id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/execution_queue.cpp:394,1
    - Dst: Forbidden
      Src: /src/brpc/src/bthread/execution_queue.cpp:394,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/execution_queue.cpp:395,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue.cpp:400,1
    - Dst: ExecutionQueueBase*::_head::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:400,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/execution_queue.cpp:401,1
    - Dst: ExecutionQueueBase*::_high_priority_tasks::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:401,1
    - Dst: ExecutionQueueOptions::ExecutionQueueOptions
      Src: /src/brpc/src/bthread/execution_queue.cpp:402,1
    - Dst: ExecutionQueueBase*::_stopped::store
      Src: /src/brpc/src/bthread/execution_queue.cpp:407,1
    - Dst: make_id
      Src: /src/brpc/src/bthread/execution_queue.cpp:408,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue.cpp:409,1
    - Dst: ExecutionQueueBase*::_versioned_ref::fetch_add
      Src: /src/brpc/src/bthread/execution_queue.cpp:409,1
    - Dst: get_execq_vars
      Src: /src/brpc/src/bthread/execution_queue.cpp:414,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 6
    argNames:
    - id
    - options
    - execute_func
    - clear_func
    - meta
    - type_specific_function
    argTypes:
    - uint64_t*
    - ExecutionQueueOptions*
    - execute_func_t
    - clear_task_mem
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 418
    functionName: bthread::ExecutionQueueBase::create
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_LIKELY
    - ExecutionQueueBase*::_high_priority_tasks::load
    - _version_of_vref
    - butil::get_resource
    - make_id
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - CHECK_EQ
    - CHECK
    - Forbidden
    - ExecutionQueueBase*::_head::load
    - ExecutionQueueOptions::ExecutionQueueOptions
    - ExecutionQueueBase*::_stopped::store
    - get_execq_vars
    linkageType: ''
    returnType: int
    signature: "int ExecutionQueueBase::create(uint64_t* id, const ExecutionQueueOptions*
      options,\n                               execute_func_t execute_func,\n                               clear_task_mem
      clear_func,\n                               void* meta, void* type_specific_function)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _high_priority_tasks::load
      Src: /src/brpc/src/bthread/execution_queue.cpp:422,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 427
    functionName: bthread::TaskIteratorBase::should_break_for_high_priority_tasks
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - _high_priority_tasks::load
    linkageType: ''
    returnType: bool
    signature: bool TaskIteratorBase::should_break_for_high_priority_tasks()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: should_break_for_high_priority_tasks
      Src: /src/brpc/src/bthread/execution_queue.cpp:436,1
    - Dst: peek_to_execute
      Src: /src/brpc/src/bthread/execution_queue.cpp:442,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 453
    functionName: TaskIteratorBase::operator++()
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - should_break_for_high_priority_tasks
    - peek_to_execute
    linkageType: ''
    returnType: void
    signature: void TaskIteratorBase::operator++()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: set_executed
      Src: /src/brpc/src/bthread/execution_queue.cpp:464,1
    - Dst: set_executed
      Src: /src/brpc/src/bthread/execution_queue.cpp:470,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 472
    functionName: TaskIteratorBase::~TaskIteratorBase()
    functionSourceFile: /src/brpc/src/bthread/execution_queue.cpp
    functionUses: 0
    functionsReached:
    - set_executed
    linkageType: ''
    returnType: void
    signature: void TaskIteratorBase::~TaskIteratorBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - butil::ResourceId<TaskMeta>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: bthread::make_tid
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t make_tid(uint32_t version, butil::ResourceId<TaskMeta> slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: bthread::get_slot
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: butil::ResourceId<TaskMeta>
    signature: butil::ResourceId<TaskMeta> get_slot(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: bthread::get_version
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_version(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/task_group_inl.h:46,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group_inl.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 47
    functionName: bthread::TaskGroup::address_meta
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 0
    functionsReached:
    - get_slot
    - address_resource
    linkageType: ''
    returnType: TaskMeta
    signature: TaskMeta * TaskGroup::address_meta(bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/task_group_inl.h:51,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group_inl.h:52,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group_inl.h:54,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group_inl.h:55,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group_inl.h:55,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group_inl.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - pg
    - next_meta
    argTypes:
    - TaskGroup**
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 60
    functionName: bthread::TaskGroup::exchange
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 4
    functionsReached:
    - TaskGroup*::set_remained
    - TaskGroup*::is_current_pthread_task
    - bthread::TaskGroup::sched_to
    - TaskGroup*::tag
    - TaskGroup*::current_task
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::exchange(TaskGroup** pg, TaskMeta* next_meta)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group_inl.h:63,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:66,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group_inl.h:66,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:68,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group_inl.h:68,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:71,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:78,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group_inl.h:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - pg
    - next_tid
    argTypes:
    - TaskGroup**
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: bthread::TaskGroup::sched_to
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 2
    functionsReached:
    - get_stack
    - TaskMeta*::stack_type
    - bthread::TaskGroup::sched_to
    - TaskMeta*::set_stack
    - bthread::TaskGroup::address_meta
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched_to(TaskGroup** pg, bthread_t next_tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/src/bthread/task_group_inl.h:86,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/task_group_inl.h:94,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/task_group_inl.h:95,1
    - Dst: capacity
      Src: /src/brpc/src/bthread/task_group_inl.h:95,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/task_group_inl.h:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 102
    functionName: bthread::TaskGroup::push_rq
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::usleep
    - push
    - bthread::TaskGroup::flush_nosignal_tasks
    - capacity
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void TaskGroup::push_rq(bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group_inl.h:106,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
      Src: /src/brpc/src/bthread/task_group_inl.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 109
    functionName: bthread::TaskGroup::flush_nosignal_tasks_remote
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    - _mutex::lock
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_remote()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - butil::ResourceId<TaskMeta>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: bthread::make_tid
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t make_tid(uint32_t version, butil::ResourceId<TaskMeta> slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: bthread::get_slot
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: butil::ResourceId<TaskMeta>
    signature: butil::ResourceId<TaskMeta> get_slot(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: bthread::get_version
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_version(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: address_resource
      Src: /src/brpc/src/bthread/task_group_inl.h:46,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group_inl.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 47
    functionName: bthread::TaskGroup::address_meta
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 1
    functionsReached:
    - get_slot
    - address_resource
    linkageType: ''
    returnType: TaskMeta
    signature: TaskMeta * TaskGroup::address_meta(bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/task_group_inl.h:51,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group_inl.h:52,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group_inl.h:54,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group_inl.h:55,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group_inl.h:55,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group_inl.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - pg
    - next_meta
    argTypes:
    - TaskGroup**
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 60
    functionName: bthread::TaskGroup::exchange
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 4
    functionsReached:
    - TaskGroup*::set_remained
    - TaskGroup*::is_current_pthread_task
    - bthread::TaskGroup::sched_to
    - TaskGroup*::tag
    - TaskGroup*::current_task
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::exchange(TaskGroup** pg, TaskMeta* next_meta)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group_inl.h:63,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:66,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group_inl.h:66,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:68,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group_inl.h:68,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:71,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group_inl.h:78,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group_inl.h:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - pg
    - next_tid
    argTypes:
    - TaskGroup**
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: bthread::TaskGroup::sched_to
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 4
    functionsReached:
    - get_stack
    - TaskMeta*::stack_type
    - bthread::TaskGroup::sched_to
    - TaskMeta*::set_stack
    - bthread::TaskGroup::address_meta
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched_to(TaskGroup** pg, bthread_t next_tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/src/bthread/task_group_inl.h:86,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/task_group_inl.h:94,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/task_group_inl.h:95,1
    - Dst: capacity
      Src: /src/brpc/src/bthread/task_group_inl.h:95,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/task_group_inl.h:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 102
    functionName: bthread::TaskGroup::push_rq
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::usleep
    - push
    - bthread::TaskGroup::flush_nosignal_tasks
    - capacity
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void TaskGroup::push_rq(bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group_inl.h:106,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
      Src: /src/brpc/src/bthread/task_group_inl.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 109
    functionName: bthread::TaskGroup::flush_nosignal_tasks_remote
    functionSourceFile: /src/brpc/src/bthread/task_group_inl.h
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    - _mutex::lock
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_remote()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: bthread::TaskTracer::ErrnoGuard::ErrnoGuard
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ErrnoGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~ErrnoGuard()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ErrnoGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Result::SetError
      Src: /src/brpc/src/bthread/task_tracer.h:66,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: bthread::TaskTracer::MakeErrorResult
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 2
    functionsReached:
    - std::forward<Args>
    - Result::SetError
    linkageType: ''
    returnType: Result
    signature: Result MakeErrorResult(const char* fmt, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.h:73,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/src/bthread/task_tracer.h:73,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: bthread::TaskTracer::SetError
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached:
    - butil::ignore_result
    - std::forward<Args>
    - butil::strings::SafeSPrintf
    linkageType: ''
    returnType: void
    signature: void SetError(const char* fmt, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: bthread::TaskTracer::ErrnoGuard::ErrnoGuard
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ErrnoGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~ErrnoGuard()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ErrnoGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Result::SetError
      Src: /src/brpc/src/bthread/task_tracer.h:66,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: bthread::TaskTracer::MakeErrorResult
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 2
    functionsReached:
    - std::forward<Args>
    - Result::SetError
    linkageType: ''
    returnType: Result
    signature: Result MakeErrorResult(const char* fmt, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.h:73,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/src/bthread/task_tracer.h:73,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: bthread::TaskTracer::SetError
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached:
    - butil::ignore_result
    - std::forward<Args>
    - butil::strings::SafeSPrintf
    linkageType: ''
    returnType: void
    signature: void SetError(const char* fmt, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/src/bthread/task_meta.h:122,1
    - Dst: bthread::butex_create_checked
      Src: /src/brpc/src/bthread/task_meta.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 125
    functionName: bthread::TaskMeta
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - bthread::butex_create_checked
    linkageType: ''
    returnType: void
    signature: void TaskMeta()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/task_meta.h:128,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/bthread/task_meta.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 127
    functionDepth: 2
    functionLinenumber: 127
    functionLinenumberEnd: 131
    functionName: ~TaskMeta()
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - pthread_spin_destroy
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void ~TaskMeta()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: bthread::set_stack
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_stack(ContextualStack* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bthread::release_stack
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * release_stack()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<StackType>
      Src: /src/brpc/src/bthread/task_meta.h:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 145
    functionName: bthread::stack_type
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - static_cast<StackType>
    linkageType: ''
    returnType: StackType
    signature: StackType stack_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/src/bthread/task_meta.h:122,1
    - Dst: bthread::butex_create_checked
      Src: /src/brpc/src/bthread/task_meta.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 125
    functionName: bthread::TaskMeta
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - bthread::butex_create_checked
    linkageType: ''
    returnType: void
    signature: void TaskMeta()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/task_meta.h:128,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/bthread/task_meta.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 131
    functionName: ~TaskMeta()
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - butex_destroy
    - pthread_spin_destroy
    linkageType: ''
    returnType: void
    signature: void ~TaskMeta()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ContextualStack*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: bthread::set_stack
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_stack(ContextualStack* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bthread::release_stack
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ContextualStack
    signature: ContextualStack * release_stack()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<StackType>
      Src: /src/brpc/src/bthread/task_meta.h:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 145
    functionName: bthread::stack_type
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - static_cast<StackType>
    linkageType: ''
    returnType: StackType
    signature: StackType stack_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: cpu_relax
    functionSourceFile: /src/brpc/src/bthread/processor.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: cpu_relax()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    functionName: cpu_relax
    functionSourceFile: /src/brpc/src/bthread/processor.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: cpu_relax()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: cpu_relax
    functionSourceFile: /src/brpc/src/bthread/processor.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: cpu_relax()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: barrier
    functionSourceFile: /src/brpc/src/bthread/processor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: barrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expr
    - ','
    - num_spins
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: BT_LOOP_WHEN
    functionSourceFile: /src/brpc/src/bthread/processor.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BT_LOOP_WHEN(expr, num_spins)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_init
      Src: /src/brpc/src/bthread/rwlock.h:36,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/rwlock.h:38,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/rwlock.h:38,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/rwlock.h:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 41
    functionName: bthread::RWLock::RWLock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_init
    - std::system_error
    - std::system_category
    - std::error_code
    linkageType: ''
    returnType: void
    signature: void RWLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/rwlock.h:44,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/src/bthread/rwlock.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: ~RWLock()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_rwlock_destroy
    linkageType: ''
    returnType: void
    signature: void ~RWLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: bthread::RWLock::native_handler
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: native_handler_type
    signature: native_handler_type native_handler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:52,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/rwlock.h:54,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/rwlock.h:54,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/rwlock.h:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: bthread::RWLock::rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - std::error_code
    - std::system_error
    - bthread_rwlock_rdlock
    - std::system_category
    linkageType: ''
    returnType: void
    signature: void rdlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/src/bthread/rwlock.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: bthread::RWLock::try_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_tryrdlock
    linkageType: ''
    returnType: bool
    signature: bool try_rdlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/src/bthread/rwlock.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 65
    functionName: bthread::RWLock::timed_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_timedrdlock
    linkageType: ''
    returnType: bool
    signature: bool timed_rdlock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:68,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/rwlock.h:70,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/rwlock.h:70,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/rwlock.h:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 73
    functionName: bthread::RWLock::wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - std::error_code
    - std::system_error
    - bthread_rwlock_wrlock
    - std::system_category
    linkageType: ''
    returnType: void
    signature: void wrlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/src/bthread/rwlock.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: bthread::RWLock::try_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_trywrlock
    linkageType: ''
    returnType: bool
    signature: bool try_wrlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/src/bthread/rwlock.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: bthread::RWLock::timed_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_timedwrlock
    linkageType: ''
    returnType: bool
    signature: bool timed_wrlock(const struct timespec* abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: bthread::RWLock::unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:95,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.h:97,1
    - Dst: berror
      Src: /src/brpc/src/bthread/rwlock.h:97,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - bthread_rwlock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 103
    functionName: bthread::RWLockRdGuard::RWLockRdGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_rwlock_rdlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void RWLockRdGuard(bthread_rwlock_t& rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: native_handler
      Src: /src/brpc/src/bthread/rwlock.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - RWLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 106
    functionName: bthread::RWLockRdGuard::RWLockRdGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - native_handler
    linkageType: ''
    returnType: void
    signature: void RWLockRdGuard(RWLock& rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:111,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 116
    functionName: ~RWLockRdGuard()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void ~RWLockRdGuard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:130,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.h:132,1
    - Dst: berror
      Src: /src/brpc/src/bthread/rwlock.h:132,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - bthread_rwlock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 138
    functionName: bthread::RWLockWrGuard::RWLockWrGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_rwlock_wrlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void RWLockWrGuard(bthread_rwlock_t& rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: native_handler
      Src: /src/brpc/src/bthread/rwlock.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - RWLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 141
    functionName: bthread::RWLockWrGuard::RWLockWrGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - native_handler
    linkageType: ''
    returnType: void
    signature: void RWLockWrGuard(RWLock& rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:146,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 151
    functionName: ~RWLockWrGuard()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void ~RWLockWrGuard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_init
      Src: /src/brpc/src/bthread/rwlock.h:36,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/rwlock.h:38,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/rwlock.h:38,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/rwlock.h:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 41
    functionName: bthread::RWLock::RWLock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_init
    - std::system_error
    - std::system_category
    - std::error_code
    linkageType: ''
    returnType: void
    signature: void RWLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/rwlock.h:44,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/src/bthread/rwlock.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: ~RWLock()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_rwlock_destroy
    linkageType: ''
    returnType: void
    signature: void ~RWLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: bthread::RWLock::native_handler
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: native_handler_type
    signature: native_handler_type native_handler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:52,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/rwlock.h:54,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/rwlock.h:54,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/rwlock.h:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: bthread::RWLock::rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - std::error_code
    - std::system_error
    - bthread_rwlock_rdlock
    - std::system_category
    linkageType: ''
    returnType: void
    signature: void rdlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/src/bthread/rwlock.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: bthread::RWLock::try_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_tryrdlock
    linkageType: ''
    returnType: bool
    signature: bool try_rdlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/src/bthread/rwlock.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 65
    functionName: bthread::RWLock::timed_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_timedrdlock
    linkageType: ''
    returnType: bool
    signature: bool timed_rdlock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:68,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/rwlock.h:70,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/rwlock.h:70,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/rwlock.h:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 73
    functionName: bthread::RWLock::wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - std::error_code
    - std::system_error
    - bthread_rwlock_wrlock
    - std::system_category
    linkageType: ''
    returnType: void
    signature: void wrlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/src/bthread/rwlock.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: bthread::RWLock::try_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_trywrlock
    linkageType: ''
    returnType: bool
    signature: bool try_wrlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/src/bthread/rwlock.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: bthread::RWLock::timed_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_timedwrlock
    linkageType: ''
    returnType: bool
    signature: bool timed_wrlock(const struct timespec* abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: bthread::RWLock::unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 2
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:95,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.h:97,1
    - Dst: berror
      Src: /src/brpc/src/bthread/rwlock.h:97,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - bthread_rwlock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 103
    functionName: bthread::RWLockRdGuard::RWLockRdGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_rwlock_rdlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void RWLockRdGuard(bthread_rwlock_t& rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: native_handler
      Src: /src/brpc/src/bthread/rwlock.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - RWLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 106
    functionName: bthread::RWLockRdGuard::RWLockRdGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - native_handler
    linkageType: ''
    returnType: void
    signature: void RWLockRdGuard(RWLock& rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:111,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 116
    functionName: ~RWLockRdGuard()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void ~RWLockRdGuard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:130,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.h:132,1
    - Dst: berror
      Src: /src/brpc/src/bthread/rwlock.h:132,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - bthread_rwlock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 138
    functionName: bthread::RWLockWrGuard::RWLockWrGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_rwlock_wrlock
    - LOG
    linkageType: ''
    returnType: void
    signature: void RWLockWrGuard(bthread_rwlock_t& rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: native_handler
      Src: /src/brpc/src/bthread/rwlock.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rwlock'
    argTypes:
    - RWLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 141
    functionName: bthread::RWLockWrGuard::RWLockWrGuard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - native_handler
    linkageType: ''
    returnType: void
    signature: void RWLockWrGuard(RWLock& rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:146,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 151
    functionName: ~RWLockWrGuard()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void ~RWLockWrGuard()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:171,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:173,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.h:176,1
    - Dst: berror
      Src: /src/brpc/src/bthread/rwlock.h:176,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:181,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:183,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' rwlock'
    - read
    argTypes:
    - bthread_rwlock_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 186
    functionName: std::lock_guard<bthread_rwlock_t>::lock_guard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_rwlock_rdlock
    - LOG
    - bthread_rwlock_wrlock
    linkageType: ''
    returnType: void
    signature: void lock_guard(bthread_rwlock_t& rwlock, bool read)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:191,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:194,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 196
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: native_handler
      Src: /src/brpc/src/bthread/rwlock.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' rwlock'
    - read
    argTypes:
    - bthread::RWLock
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 209
    functionName: std::lock_guard<bthread::RWLock>::lock_guard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - native_handler
    linkageType: ''
    returnType: void
    signature: void lock_guard(bthread::RWLock& rwlock, bool read)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:171,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:173,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.h:176,1
    - Dst: berror
      Src: /src/brpc/src/bthread/rwlock.h:176,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.h:181,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.h:183,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' rwlock'
    - read
    argTypes:
    - bthread_rwlock_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 186
    functionName: std::lock_guard<bthread_rwlock_t>::lock_guard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_rwlock_rdlock
    - LOG
    - bthread_rwlock_wrlock
    linkageType: ''
    returnType: void
    signature: void lock_guard(bthread_rwlock_t& rwlock, bool read)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:191,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.h:194,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 196
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: native_handler
      Src: /src/brpc/src/bthread/rwlock.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' rwlock'
    - read
    argTypes:
    - bthread::RWLock
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 209
    functionName: std::lock_guard<bthread::RWLock>::lock_guard
    functionSourceFile: /src/brpc/src/bthread/rwlock.h
    functionUses: 0
    functionsReached:
    - native_handler
    linkageType: ''
    returnType: void
    signature: void lock_guard(bthread::RWLock& rwlock, bool read)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: bthread::WorkStealingQueue::WorkStealingQueue
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkStealingQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: ~WorkStealingQueue()
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WorkStealingQueue()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/work_stealing_queue.h:48,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/work_stealing_queue.h:52,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/work_stealing_queue.h:56,1
    - Dst: T::T
      Src: /src/brpc/src/bthread/work_stealing_queue.h:60,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 66
    functionName: bthread::WorkStealingQueue::init
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 2
    functionsReached:
    - LOG
    - T::T
    linkageType: ''
    returnType: int
    signature: int init(size_t capacity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:73,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:74,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' x'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 81
    functionName: bthread::WorkStealingQueue::push
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: bool
    signature: bool push(const T& x)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:88,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:89,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:96,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/work_stealing_queue.h:97,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:98,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:100,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/work_stealing_queue.h:108,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:110,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - val
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 112
    functionName: bthread::WorkStealingQueue::pop
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 2
    functionsReached:
    - store
    - load
    - std::atomic_thread_fence
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool pop(T* val)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:118,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:119,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/work_stealing_queue.h:125,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:126,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/work_stealing_queue.h:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - val
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 135
    functionName: bthread::WorkStealingQueue::steal
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached:
    - load
    - std::atomic_thread_fence
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool steal(T* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:138,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bthread::WorkStealingQueue::volatile_size
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t volatile_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: bthread::WorkStealingQueue::capacity
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t capacity() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: bthread::WorkStealingQueue::WorkStealingQueue
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkStealingQueue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: ~WorkStealingQueue()
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WorkStealingQueue()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/work_stealing_queue.h:48,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/work_stealing_queue.h:52,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/work_stealing_queue.h:56,1
    - Dst: T::T
      Src: /src/brpc/src/bthread/work_stealing_queue.h:60,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 66
    functionName: bthread::WorkStealingQueue::init
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 2
    functionsReached:
    - LOG
    - T::T
    linkageType: ''
    returnType: int
    signature: int init(size_t capacity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:73,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:74,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' x'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 81
    functionName: bthread::WorkStealingQueue::push
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: bool
    signature: bool push(const T& x)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:88,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:89,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:96,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/work_stealing_queue.h:97,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:98,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:100,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/work_stealing_queue.h:108,1
    - Dst: store
      Src: /src/brpc/src/bthread/work_stealing_queue.h:110,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - val
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 112
    functionName: bthread::WorkStealingQueue::pop
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 2
    functionsReached:
    - store
    - load
    - std::atomic_thread_fence
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool pop(T* val)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:118,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:119,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/work_stealing_queue.h:125,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:126,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/work_stealing_queue.h:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - val
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 135
    functionName: bthread::WorkStealingQueue::steal
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached:
    - load
    - std::atomic_thread_fence
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool steal(T* val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:138,1
    - Dst: load
      Src: /src/brpc/src/bthread/work_stealing_queue.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: bthread::WorkStealingQueue::volatile_size
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t volatile_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: bthread::WorkStealingQueue::capacity
    functionSourceFile: /src/brpc/src/bthread/work_stealing_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t capacity() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - id
    - ','
    - err
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: bthread_id_error
    functionSourceFile: /src/brpc/src/bthread/id.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: bthread_id_error(id, err)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - id
    - ','
    - pdata
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: bthread_id_lock
    functionSourceFile: /src/brpc/src/bthread/id.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: bthread_id_lock(id, pdata)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - id
    - ','
    - pdata
    - ','
    - range
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: bthread_id_lock_and_reset_range
    functionSourceFile: /src/brpc/src/bthread/id.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: bthread_id_lock_and_reset_range(id, pdata, range)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - id
    - ','
    - ec
    - ','
    - et
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: bthread_id_error2
    functionSourceFile: /src/brpc/src/bthread/id.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: bthread_id_error2(id, ec, et)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: bthread::TimerThreadOptions::TimerThreadOptions
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimerThreadOptions::TimerThreadOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/timer_thread.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 68
    functionName: bthread::TimerThread::Task
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT TimerThread::Task
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: bthread::Task
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::Bucket
      Src: /src/brpc/src/bthread/timer_thread.cpp:73,1
    - Dst: _nearest_run_time
      Src: /src/brpc/src/bthread/timer_thread.cpp:74,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:74,1
    - Dst: _task_head
      Src: /src/brpc/src/bthread/timer_thread.cpp:75,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/timer_thread.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 98
    functionName: bthread::TimerThread::Bucket
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 1
    functionsReached:
    - bthread::TimerThread::Bucket
    - _task_head
    - butil::BaseIteratorRangeToNumberTraits::max
    - _nearest_run_time
    - FastPthreadMutex::FastPthreadMutex
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT TimerThread::Bucket
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: ~Bucket()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Bucket()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread::TaskId
      Src: /src/brpc/src/bthread/timer_thread.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - version
    argTypes:
    - butil::ResourceId<TimerThread::Task>
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: bthread::make_task_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - TimerThread::TaskId
    linkageType: ''
    returnType: TimerThread::TaskId
    signature: "TimerThread::TaskId make_task_id(\n    butil::ResourceId<TimerThread::Task>
      slot, uint32_t version)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - TimerThread::TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: bthread::slot_of_task_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::ResourceId<TimerThread::Task>
    signature: butil::ResourceId<TimerThread::Task> slot_of_task_id(TimerThread::TaskId
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - TimerThread::TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: bthread::version_of_task_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t version_of_task_id(TimerThread::TaskId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - TimerThread::Task*
    - TimerThread::Task*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: bthread::task_greater
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool task_greater(const TimerThread::Task* a, const TimerThread::Task*
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bthread/timer_thread.cpp:121,1
    - Dst: static_cast<TimerThread*>
      Src: /src/brpc/src/bthread/timer_thread.cpp:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: bthread::TimerThread::run_this
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetName
    - static_cast<TimerThread*>
    linkageType: ''
    returnType: void
    signature: void * TimerThread::run_this(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: bthread::TimerThread::TimerThread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void TimerThread::TimerThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/timer_thread.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 6
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: TimerThread::~TimerThread()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - stop_and_join
    linkageType: ''
    returnType: void
    signature: void TimerThread::~TimerThread()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:153,1
    - Dst: Bucket::Bucket
      Src: /src/brpc/src/bthread/timer_thread.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:158,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/timer_thread.cpp:161,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - options_in
    argTypes:
    - TimerThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 167
    functionName: bthread::TimerThread::start
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - Bucket::Bucket
    - pthread_create
    - LOG
    linkageType: ''
    returnType: int
    signature: int TimerThread::start(const TimerThreadOptions* options_in)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:175,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:179,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: '* TimerThread::Bucket::consume_tasks()'
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: TimerThread::Task
    signature: TimerThread::Task * TimerThread::Bucket::consume_tasks()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_resource<Task>
      Src: /src/brpc/src/bthread/timer_thread.cpp:189,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:197,1
    - Dst: Task*::version::load
      Src: /src/brpc/src/bthread/timer_thread.cpp:198,1
    - Dst: Task*::version::fetch_add
      Src: /src/brpc/src/bthread/timer_thread.cpp:200,1
    - Dst: make_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:203,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:207,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 217
    functionName: "TimerThread::Bucket::schedule(void (*fn)(void*), void* arg,\n                              const
      timespec& abstime)"
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - Task*::version::load
    - make_task_id
    - Task*::version::fetch_add
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_microseconds
    - butil::get_resource<Task>
    linkageType: ''
    returnType: TimerThread::Bucket::ScheduleResult
    signature: "TimerThread::Bucket::ScheduleResult TimerThread::Bucket::schedule(void
      (*fn)(void*), void* arg,\n                              const timespec& abstime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:221,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:231,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:233,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:241,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 245
    functionName: bthread::TimerThread::schedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 3
    functionsReached:
    - futex_wake_private
    - pthread_numeric_id
    - load
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_microseconds
    - fmix64
    - bthread::TimerThread::schedule
    linkageType: ''
    returnType: TimerThread::TaskId
    signature: "TimerThread::TaskId TimerThread::schedule(\n    void (*fn)(void*),
      void* arg, const timespec& abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:257,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:260,1
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:263,1
    - Dst: Task*::version::compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:268,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - task_id
    argTypes:
    - TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 274
    functionName: bthread::TimerThread::unschedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 4
    functionsReached:
    - butil::address_resource
    - Task*::version::compare_exchange_strong
    - version_of_task_id
    - slot_of_task_id
    - LOG
    linkageType: ''
    returnType: int
    signature: int TimerThread::unschedule(TaskId task_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:277,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:280,1
    - Dst: fn
      Src: /src/brpc/src/bthread/timer_thread.cpp:282,1
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:285,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:286,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:286,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:290,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:294,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 298
    functionName: TimerThread::Task::run_and_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::return_resource
    - version_of_task_id
    - fn
    - compare_exchange_strong
    - slot_of_task_id
    - store
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool TimerThread::Task::run_and_delete()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:301,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:302,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/timer_thread.cpp:303,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:303,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:304,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:304,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 308
    functionName: TimerThread::Task::try_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::return_resource
    - load
    - version_of_task_id
    - slot_of_task_id
    - CHECK_EQ
    linkageType: ''
    returnType: bool
    signature: bool TimerThread::Task::try_delete()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 313
    functionName: bthread::deref_value
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T deref_value(void* arg)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/timer_thread.cpp:316,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/timer_thread.cpp:318,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:321,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:322,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/bthread/timer_thread.cpp:326,1
    - Dst: bvar_prefix::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:338,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:339,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:340,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:341,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:344,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:349,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/timer_thread.cpp:352,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:352,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:355,1
    - Dst: consume_tasks
      Src: /src/brpc/src/bthread/timer_thread.cpp:361,1
    - Dst: Task*::try_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:366,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:367,1
    - Dst: std::push_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:368,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:368,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:368,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:375,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:377,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:391,1
    - Dst: std::pop_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:398,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:398,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:398,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:399,1
    - Dst: Task*::run_and_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:400,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:405,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:410,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:411,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:420,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:432,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:433,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/timer_thread.cpp:434,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:438,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:439,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:441,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 442
    functionName: bthread::TimerThread::run
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - bvar_prefix::empty
    - std::vector::begin
    - std::vector::empty
    - run_worker_startfn
    - std::vector::pop_back
    - butil::microseconds_to_timespec
    - Task*::try_delete
    - consume_tasks
    - BAIDU_UNLIKELY
    - pthread_self
    - std::push_heap
    - butil::gettimeofday_us
    - BAIDU_SCOPED_LOCK
    - std::pop_heap
    - std::vector::reserve
    - logging::ComlogInitializer::ComlogInitializer
    - std::vector::push_back
    - std::vector::end
    - Task*::run_and_delete
    - load
    - futex_wait_private
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::PerSecond::expose_as
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TimerThread::run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:445,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:448,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:453,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:456,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/timer_thread.cpp:457,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 444
    functionDepth: 1
    functionLinenumber: 444
    functionLinenumberEnd: 460
    functionName: bthread::TimerThread::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - futex_wake_private
    - pthread_join
    - BAIDU_SCOPED_LOCK
    - store
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void TimerThread::stop_and_join()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread::TimerThread
      Src: /src/brpc/src/bthread/timer_thread.cpp:465,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:467,1
    - Dst: start
      Src: /src/brpc/src/bthread/timer_thread.cpp:472,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:474,1
    - Dst: berror
      Src: /src/brpc/src/bthread/timer_thread.cpp:474,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 464
    functionDepth: 5
    functionLinenumber: 464
    functionLinenumberEnd: 479
    functionName: bthread::init_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - berror
    - TimerThread::TimerThread
    - LOG
    - start
    linkageType: ''
    returnType: void
    signature: void init_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/timer_thread.cpp:481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 483
    functionName: bthread::get_or_create_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: TimerThread
    signature: TimerThread * get_or_create_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 486
    functionName: bthread::get_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: TimerThread
    signature: TimerThread * get_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: bthread::TimerThreadOptions::TimerThreadOptions
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimerThreadOptions::TimerThreadOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/timer_thread.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 68
    functionName: bthread::TimerThread::Task
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT TimerThread::Task
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: bthread::Task
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::Bucket
      Src: /src/brpc/src/bthread/timer_thread.cpp:73,1
    - Dst: _nearest_run_time
      Src: /src/brpc/src/bthread/timer_thread.cpp:74,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:74,1
    - Dst: _task_head
      Src: /src/brpc/src/bthread/timer_thread.cpp:75,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/timer_thread.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 98
    functionName: bthread::TimerThread::Bucket
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 2
    functionsReached:
    - bthread::TimerThread::Bucket
    - _task_head
    - butil::BaseIteratorRangeToNumberTraits::max
    - _nearest_run_time
    - FastPthreadMutex::FastPthreadMutex
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT TimerThread::Bucket
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: ~Bucket()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Bucket()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread::TaskId
      Src: /src/brpc/src/bthread/timer_thread.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - version
    argTypes:
    - butil::ResourceId<TimerThread::Task>
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: bthread::make_task_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - TimerThread::TaskId
    linkageType: ''
    returnType: TimerThread::TaskId
    signature: "TimerThread::TaskId make_task_id(\n    butil::ResourceId<TimerThread::Task>
      slot, uint32_t version)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - TimerThread::TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: bthread::slot_of_task_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::ResourceId<TimerThread::Task>
    signature: butil::ResourceId<TimerThread::Task> slot_of_task_id(TimerThread::TaskId
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - TimerThread::TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: bthread::version_of_task_id
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t version_of_task_id(TimerThread::TaskId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - TimerThread::Task*
    - TimerThread::Task*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: bthread::task_greater
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool task_greater(const TimerThread::Task* a, const TimerThread::Task*
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bthread/timer_thread.cpp:121,1
    - Dst: static_cast<TimerThread*>
      Src: /src/brpc/src/bthread/timer_thread.cpp:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: bthread::TimerThread::run_this
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetName
    - static_cast<TimerThread*>
    linkageType: ''
    returnType: void
    signature: void * TimerThread::run_this(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: bthread::TimerThread::TimerThread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void TimerThread::TimerThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/timer_thread.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 6
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: TimerThread::~TimerThread()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - stop_and_join
    linkageType: ''
    returnType: void
    signature: void TimerThread::~TimerThread()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:153,1
    - Dst: Bucket::Bucket
      Src: /src/brpc/src/bthread/timer_thread.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:158,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/timer_thread.cpp:161,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - options_in
    argTypes:
    - TimerThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 167
    functionName: bthread::TimerThread::start
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - Bucket::Bucket
    - pthread_create
    - LOG
    linkageType: ''
    returnType: int
    signature: int TimerThread::start(const TimerThreadOptions* options_in)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:175,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:179,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: '* TimerThread::Bucket::consume_tasks()'
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: TimerThread::Task
    signature: TimerThread::Task * TimerThread::Bucket::consume_tasks()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_resource<Task>
      Src: /src/brpc/src/bthread/timer_thread.cpp:189,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:197,1
    - Dst: Task*::version::load
      Src: /src/brpc/src/bthread/timer_thread.cpp:198,1
    - Dst: Task*::version::fetch_add
      Src: /src/brpc/src/bthread/timer_thread.cpp:200,1
    - Dst: make_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:203,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:207,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 217
    functionName: "TimerThread::Bucket::schedule(void (*fn)(void*), void* arg,\n                              const
      timespec& abstime)"
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - Task*::version::load
    - make_task_id
    - Task*::version::fetch_add
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_microseconds
    - butil::get_resource<Task>
    linkageType: ''
    returnType: TimerThread::Bucket::ScheduleResult
    signature: "TimerThread::Bucket::ScheduleResult TimerThread::Bucket::schedule(void
      (*fn)(void*), void* arg,\n                              const timespec& abstime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:221,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:231,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:233,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:241,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 245
    functionName: bthread::TimerThread::schedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 4
    functionsReached:
    - futex_wake_private
    - pthread_numeric_id
    - load
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_microseconds
    - fmix64
    - bthread::TimerThread::schedule
    linkageType: ''
    returnType: TimerThread::TaskId
    signature: "TimerThread::TaskId TimerThread::schedule(\n    void (*fn)(void*),
      void* arg, const timespec& abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:257,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:260,1
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:263,1
    - Dst: Task*::version::compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:268,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - task_id
    argTypes:
    - TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 274
    functionName: bthread::TimerThread::unschedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 4
    functionsReached:
    - butil::address_resource
    - Task*::version::compare_exchange_strong
    - version_of_task_id
    - slot_of_task_id
    - LOG
    linkageType: ''
    returnType: int
    signature: int TimerThread::unschedule(TaskId task_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:277,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:280,1
    - Dst: fn
      Src: /src/brpc/src/bthread/timer_thread.cpp:282,1
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:285,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:286,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:286,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:290,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:294,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 298
    functionName: TimerThread::Task::run_and_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::return_resource
    - version_of_task_id
    - fn
    - compare_exchange_strong
    - slot_of_task_id
    - store
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool TimerThread::Task::run_and_delete()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:301,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:302,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/timer_thread.cpp:303,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:303,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:304,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:304,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 308
    functionName: TimerThread::Task::try_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::return_resource
    - load
    - version_of_task_id
    - slot_of_task_id
    - CHECK_EQ
    linkageType: ''
    returnType: bool
    signature: bool TimerThread::Task::try_delete()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 313
    functionName: bthread::deref_value
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T deref_value(void* arg)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/timer_thread.cpp:316,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/timer_thread.cpp:318,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:321,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:322,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/bthread/timer_thread.cpp:326,1
    - Dst: bvar_prefix::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:338,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:339,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:340,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:341,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:344,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:349,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/timer_thread.cpp:352,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:352,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:355,1
    - Dst: consume_tasks
      Src: /src/brpc/src/bthread/timer_thread.cpp:361,1
    - Dst: Task*::try_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:366,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:367,1
    - Dst: std::push_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:368,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:368,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:368,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:375,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:377,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:391,1
    - Dst: std::pop_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:398,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:398,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:398,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:399,1
    - Dst: Task*::run_and_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:400,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:405,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:410,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:411,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:420,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:432,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:433,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/timer_thread.cpp:434,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:438,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:439,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:441,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 442
    functionName: bthread::TimerThread::run
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - bvar_prefix::empty
    - std::vector::begin
    - std::vector::empty
    - run_worker_startfn
    - std::vector::pop_back
    - butil::microseconds_to_timespec
    - Task*::try_delete
    - consume_tasks
    - BAIDU_UNLIKELY
    - pthread_self
    - std::push_heap
    - butil::gettimeofday_us
    - BAIDU_SCOPED_LOCK
    - std::pop_heap
    - std::vector::reserve
    - logging::ComlogInitializer::ComlogInitializer
    - std::vector::push_back
    - std::vector::end
    - Task*::run_and_delete
    - load
    - futex_wait_private
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::PerSecond::expose_as
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TimerThread::run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:445,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:448,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:453,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:456,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/timer_thread.cpp:457,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 444
    functionDepth: 1
    functionLinenumber: 444
    functionLinenumberEnd: 460
    functionName: bthread::TimerThread::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - futex_wake_private
    - pthread_join
    - BAIDU_SCOPED_LOCK
    - store
    - pthread_self
    linkageType: ''
    returnType: void
    signature: void TimerThread::stop_and_join()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread::TimerThread
      Src: /src/brpc/src/bthread/timer_thread.cpp:465,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:467,1
    - Dst: start
      Src: /src/brpc/src/bthread/timer_thread.cpp:472,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:474,1
    - Dst: berror
      Src: /src/brpc/src/bthread/timer_thread.cpp:474,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 464
    functionDepth: 5
    functionLinenumber: 464
    functionLinenumberEnd: 479
    functionName: bthread::init_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - berror
    - TimerThread::TimerThread
    - LOG
    - start
    linkageType: ''
    returnType: void
    signature: void init_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/timer_thread.cpp:481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 483
    functionName: bthread::get_or_create_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: TimerThread
    signature: TimerThread * get_or_create_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 486
    functionName: bthread::get_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: TimerThread
    signature: TimerThread * get_global_timer_thread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/semaphore.cpp:36,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/semaphore.cpp:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - sema
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 47
    functionName: bthread::bthread_sem_trywait
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - auto::load
    - auto::compare_exchange_weak
    linkageType: ''
    returnType: int
    signature: int bthread_sem_trywait(bthread_sem_t* sema)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/semaphore.cpp:59,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/semaphore.cpp:61,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:65,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/semaphore.cpp:67,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/semaphore.cpp:75,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/semaphore.cpp:77,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/semaphore.cpp:78,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:79,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/semaphore.cpp:83,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:89,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/semaphore.cpp:91,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 29
    argCount: 2
    argNames:
    - sem
    - abstime
    argTypes:
    - bthread_sem_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 49
    functionDepth: 4
    functionLinenumber: 49
    functionLinenumberEnd: 109
    functionName: bthread::bthread_sem_wait_impl
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - bthread::butex_wait
    - bvar::is_collectable
    - auto::load
    - butil::cpuwide_time_ns
    - auto::compare_exchange_weak
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: int bthread_sem_wait_impl(bthread_sem_t* sem, const struct timespec*
      abstime)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/semaphore.cpp:113,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/semaphore.cpp:116,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/semaphore.cpp:117,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:118,1
    - Dst: bthread::butex_wake_n
      Src: /src/brpc/src/bthread/semaphore.cpp:119,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:121,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/semaphore.cpp:123,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - sem
    - num
    argTypes:
    - bthread_sem_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 111
    functionDepth: 3
    functionLinenumber: 111
    functionLinenumberEnd: 127
    functionName: bthread::bthread_sem_post
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - bvar::is_collectable
    - fetch_add
    - butil::cpuwide_time_ns
    - bthread::butex_wake_n
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: int bthread_sem_post(bthread_sem_t* sem, size_t num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/semaphore.cpp:36,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/semaphore.cpp:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - sema
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 47
    functionName: bthread::bthread_sem_trywait
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - auto::load
    - auto::compare_exchange_weak
    linkageType: ''
    returnType: int
    signature: int bthread_sem_trywait(bthread_sem_t* sema)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/semaphore.cpp:59,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/semaphore.cpp:61,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:65,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/semaphore.cpp:67,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/semaphore.cpp:75,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/semaphore.cpp:77,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/semaphore.cpp:78,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:79,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/semaphore.cpp:83,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:89,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/semaphore.cpp:91,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 29
    argCount: 2
    argNames:
    - sem
    - abstime
    argTypes:
    - bthread_sem_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 49
    functionDepth: 4
    functionLinenumber: 49
    functionLinenumberEnd: 109
    functionName: bthread::bthread_sem_wait_impl
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - bthread::butex_wait
    - bvar::is_collectable
    - auto::load
    - butil::cpuwide_time_ns
    - auto::compare_exchange_weak
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: int bthread_sem_wait_impl(bthread_sem_t* sem, const struct timespec*
      abstime)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/semaphore.cpp:113,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/semaphore.cpp:116,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/semaphore.cpp:117,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:118,1
    - Dst: bthread::butex_wake_n
      Src: /src/brpc/src/bthread/semaphore.cpp:119,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/semaphore.cpp:121,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/semaphore.cpp:123,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - sem
    - num
    argTypes:
    - bthread_sem_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 111
    functionDepth: 3
    functionLinenumber: 111
    functionLinenumberEnd: 127
    functionName: bthread::bthread_sem_post
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - bvar::is_collectable
    - fetch_add
    - butil::cpuwide_time_ns
    - bthread::butex_wake_n
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: int bthread_sem_post(bthread_sem_t* sem, size_t num)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<unsigned>
      Src: /src/brpc/src/bthread/semaphore.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - sem
    - value
    argTypes:
    - bthread_sem_t*
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 141
    functionName: bthread_sem_init
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 10
    functionsReached:
    - bthread::butex_create_checked<unsigned>
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: __BEGIN_DECLS bthread_sem_init(bthread_sem_t* sem, unsigned value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sema
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: bthread_sem_disable_csite
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_sem_disable_csite(bthread_sem_t* sema)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/semaphore.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - semaphore
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 151
    functionName: bthread_sem_destroy
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 10
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: int
    signature: int bthread_sem_destroy(bthread_sem_t* semaphore)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::bthread_sem_trywait
      Src: /src/brpc/src/bthread/semaphore.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sem
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 155
    functionName: bthread_sem_trywait
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 5
    functionsReached:
    - bthread::bthread_sem_trywait
    linkageType: ''
    returnType: int
    signature: int bthread_sem_trywait(bthread_sem_t* sem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::bthread_sem_wait_impl
      Src: /src/brpc/src/bthread/semaphore.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sem
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 5
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: bthread_sem_wait
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 6
    functionsReached:
    - bthread::bthread_sem_wait_impl
    linkageType: ''
    returnType: int
    signature: int bthread_sem_wait(bthread_sem_t* sem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::bthread_sem_wait_impl
      Src: /src/brpc/src/bthread/semaphore.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sem
    - abstime
    argTypes:
    - bthread_sem_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 5
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: bthread_sem_timedwait
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 2
    functionsReached:
    - bthread::bthread_sem_wait_impl
    linkageType: ''
    returnType: int
    signature: int bthread_sem_timedwait(bthread_sem_t* sem, const struct timespec*
      abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/semaphore.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sem
    argTypes:
    - bthread_sem_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 4
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: bthread_sem_post
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 9
    functionsReached:
    - bthread::bthread_sem_post
    linkageType: ''
    returnType: int
    signature: int bthread_sem_post(bthread_sem_t* sem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/semaphore.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sem
    - n
    argTypes:
    - bthread_sem_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 4
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: bthread_sem_post_n
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - bthread::bthread_sem_post
    linkageType: ''
    returnType: int
    signature: int bthread_sem_post_n(bthread_sem_t* sem, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/bthread/sys_futex.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - addr1
    - expected
    - timeout
    argTypes:
    - void*
    - int
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: bthread::futex_wait_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.h
    functionUses: 20
    functionsReached:
    - syscall
    linkageType: ''
    returnType: int
    signature: "int futex_wait_private(\n    void* addr1, int expected, const timespec*
      timeout)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/bthread/sys_futex.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - addr1
    - nwake
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: bthread::futex_wake_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.h
    functionUses: 28
    functionsReached:
    - syscall
    linkageType: ''
    returnType: int
    signature: int futex_wake_private(void* addr1, int nwake)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/bthread/sys_futex.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - addr1
    - nwake
    - addr2
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: bthread::futex_requeue_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.h
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: int
    signature: int futex_requeue_private(void* addr1, int nwake, void* addr2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/bthread/sys_futex.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - addr1
    - expected
    - timeout
    argTypes:
    - void*
    - int
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: bthread::futex_wait_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.h
    functionUses: 20
    functionsReached:
    - syscall
    linkageType: ''
    returnType: int
    signature: "int futex_wait_private(\n    void* addr1, int expected, const timespec*
      timeout)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/bthread/sys_futex.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - addr1
    - nwake
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: bthread::futex_wake_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.h
    functionUses: 28
    functionsReached:
    - syscall
    linkageType: ''
    returnType: int
    signature: int futex_wake_private(void* addr1, int nwake)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/bthread/sys_futex.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - addr1
    - nwake
    - addr2
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: bthread::futex_requeue_private
    functionSourceFile: /src/brpc/src/bthread/sys_futex.h
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: int
    signature: int futex_requeue_private(void* addr1, int nwake, void* addr2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bthread::TaskIteratorBase::is_queue_stopped
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_queue_stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - head
    - queue
    - is_stopped
    - high_priority
    argTypes:
    - TaskNode*
    - ExecutionQueueBase*
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 58
    functionName: bthread::TaskIteratorBase::TaskIteratorBase
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TaskIteratorBase(TaskNode* head, ExecutionQueueBase* queue,\n
      \                    bool is_stopped, bool high_priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: bthread::TaskIteratorBase::cur_node
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskNode
    signature: TaskNode * cur_node() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: bthread::TaskIteratorBase::num_iterated
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int num_iterated() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: bthread::TaskIterator::TaskIterator
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: operator->() const
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pointer
    signature: pointer operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: ~Executor()
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Executor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: bthread::TaskIteratorBase::is_queue_stopped
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_queue_stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - head
    - queue
    - is_stopped
    - high_priority
    argTypes:
    - TaskNode*
    - ExecutionQueueBase*
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 58
    functionName: bthread::TaskIteratorBase::TaskIteratorBase
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TaskIteratorBase(TaskNode* head, ExecutionQueueBase* queue,\n
      \                    bool is_stopped, bool high_priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: bthread::TaskIteratorBase::cur_node
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaskNode
    signature: TaskNode * cur_node() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: bthread::TaskIteratorBase::num_iterated
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int num_iterated() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: bthread::TaskIterator::TaskIterator
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskIterator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: operator->() const
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pointer
    signature: pointer operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: ~Executor()
    functionSourceFile: /src/brpc/src/bthread/execution_queue.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Executor()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:44,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/bthread/rwlock.cpp:48,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/src/bthread/rwlock.cpp:56,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/rwlock.cpp:59,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/rwlock.cpp:60,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/src/bthread/rwlock.cpp:61,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:65,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/src/bthread/rwlock.cpp:66,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:67,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 42
    functionDepth: 6
    functionLinenumber: 42
    functionLinenumberEnd: 74
    functionName: bthread::rwlock_rdlock_impl
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_sem_timedwait
    - submit_contention
    - bvar::is_collectable
    - fetch_add
    - butil::cpuwide_time_ns
    - CHECK_LT
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: "int rwlock_rdlock_impl(bthread_rwlock_t* __restrict rwlock,\n                              const
      struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock_impl
      Src: /src/brpc/src/bthread/rwlock.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 7
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: bthread::rwlock_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::rwlock_rdlock_impl
    linkageType: ''
    returnType: int
    signature: int rwlock_rdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock_impl
      Src: /src/brpc/src/bthread/rwlock.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 7
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: bthread::rwlock_timedrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::rwlock_rdlock_impl
    linkageType: ''
    returnType: int
    signature: "int rwlock_timedrdlock(bthread_rwlock_t* __restrict rwlock,\n                                     const
      struct timespec* __restrict abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/rwlock.cpp:88,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:94,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 101
    functionName: bthread::rwlock_tryrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_weak
    linkageType: ''
    returnType: int
    signature: int rwlock_tryrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:104,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:112,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/rwlock.cpp:113,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:118,1
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/rwlock.cpp:127,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/rwlock.cpp:131,1
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/rwlock.cpp:133,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:138,1
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/rwlock.cpp:139,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:140,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:144,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 103
    functionDepth: 4
    functionLinenumber: 103
    functionLinenumberEnd: 146
    functionName: bthread::rwlock_unrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - bvar::is_collectable
    - fetch_add
    - butil::cpuwide_time_ns
    - CHECK
    - BAIDU_UNLIKELY
    - bthread::bthread_sem_post
    linkageType: ''
    returnType: int
    signature: int rwlock_unrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:44,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/bthread/rwlock.cpp:48,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/src/bthread/rwlock.cpp:56,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/rwlock.cpp:59,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/rwlock.cpp:60,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/src/bthread/rwlock.cpp:61,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:65,1
    - Dst: bthread_sem_timedwait
      Src: /src/brpc/src/bthread/rwlock.cpp:66,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:67,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 42
    functionDepth: 6
    functionLinenumber: 42
    functionLinenumberEnd: 74
    functionName: bthread::rwlock_rdlock_impl
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 2
    functionsReached:
    - bthread_sem_timedwait
    - submit_contention
    - bvar::is_collectable
    - fetch_add
    - butil::cpuwide_time_ns
    - CHECK_LT
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: "int rwlock_rdlock_impl(bthread_rwlock_t* __restrict rwlock,\n                              const
      struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock_impl
      Src: /src/brpc/src/bthread/rwlock.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 7
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: bthread::rwlock_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::rwlock_rdlock_impl
    linkageType: ''
    returnType: int
    signature: int rwlock_rdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock_impl
      Src: /src/brpc/src/bthread/rwlock.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 7
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: bthread::rwlock_timedrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::rwlock_rdlock_impl
    linkageType: ''
    returnType: int
    signature: "int rwlock_timedrdlock(bthread_rwlock_t* __restrict rwlock,\n                                     const
      struct timespec* __restrict abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/rwlock.cpp:88,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:94,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 101
    functionName: bthread::rwlock_tryrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_weak
    linkageType: ''
    returnType: int
    signature: int rwlock_tryrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:104,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:112,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/rwlock.cpp:113,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:118,1
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/rwlock.cpp:127,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/rwlock.cpp:131,1
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/rwlock.cpp:133,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:138,1
    - Dst: bthread::bthread_sem_post
      Src: /src/brpc/src/bthread/rwlock.cpp:139,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:140,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:144,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 103
    functionDepth: 4
    functionLinenumber: 103
    functionLinenumberEnd: 146
    functionName: bthread::rwlock_unrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - bvar::is_collectable
    - fetch_add
    - butil::cpuwide_time_ns
    - CHECK
    - BAIDU_UNLIKELY
    - bthread::bthread_sem_post
    linkageType: ''
    returnType: int
    signature: int rwlock_unrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_wrlock_impl
      Src: /src/brpc/src/bthread/rwlock.cpp:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 224
    functionName: rwlock_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 23
    functionsReached:
    - rwlock_wrlock_impl
    linkageType: ''
    returnType: int
    signature: int rwlock_wrlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_wrlock_impl
      Src: /src/brpc/src/bthread/rwlock.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 229
    functionName: rwlock_timedwrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 4
    functionsReached:
    - rwlock_wrlock_impl
    linkageType: ''
    returnType: int
    signature: "int rwlock_timedwrlock(bthread_rwlock_t* __restrict rwlock,\n                                     const
      struct timespec* __restrict abstime)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/rwlock.cpp:232,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/rwlock.cpp:238,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 249
    functionName: rwlock_trywrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - bthread_mutex_trylock
    - bthread_mutex_unlock
    - compare_exchange_strong
    linkageType: ''
    returnType: int
    signature: int rwlock_trywrlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_sem_post_n
      Src: /src/brpc/src/bthread/rwlock.cpp:252,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - rwlock
    - reader_count
    argTypes:
    - bthread_rwlock_t*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 251
    functionDepth: 5
    functionLinenumber: 251
    functionLinenumberEnd: 255
    functionName: rwlock_unwrlock_slow
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_sem_post_n
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void rwlock_unwrlock_slow(bthread_rwlock_t* rwlock, int reader_count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:261,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:263,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/rwlock.cpp:264,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/rwlock.cpp:268,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:269,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/rwlock.cpp:271,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:273,1
    - Dst: rwlock_unwrlock_slow
      Src: /src/brpc/src/bthread/rwlock.cpp:274,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:275,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:277,1
    - Dst: rwlock_unwrlock_slow
      Src: /src/brpc/src/bthread/rwlock.cpp:279,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 257
    functionDepth: 6
    functionLinenumber: 257
    functionLinenumberEnd: 283
    functionName: rwlock_unwrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - is_contention_site_valid
    - submit_contention
    - fetch_add
    - butil::cpuwide_time_ns
    - CHECK
    - make_contention_site_invalid
    - BAIDU_UNLIKELY
    - rwlock_unwrlock_slow
    linkageType: ''
    returnType: int
    signature: int rwlock_unwrlock(bthread_rwlock_t* rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_unwrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:287,1
    - Dst: rwlock_unrdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:289,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 285
    functionDepth: 7
    functionLinenumber: 285
    functionLinenumberEnd: 291
    functionName: rwlock_unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 36
    functionsReached:
    - rwlock_unwrlock
    - rwlock_unrdlock
    linkageType: ''
    returnType: int
    signature: int rwlock_unlock(bthread_rwlock_t* rwlock)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_sem_init
      Src: /src/brpc/src/bthread/rwlock.cpp:299,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:300,1
    - Dst: bthread_sem_disable_csite
      Src: /src/brpc/src/bthread/rwlock.cpp:303,1
    - Dst: bthread_sem_init
      Src: /src/brpc/src/bthread/rwlock.cpp:304,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:305,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:306,1
    - Dst: bthread_sem_disable_csite
      Src: /src/brpc/src/bthread/rwlock.cpp:309,1
    - Dst: bthread_mutexattr_init
      Src: /src/brpc/src/bthread/rwlock.cpp:316,1
    - Dst: bthread_mutexattr_disable_csite
      Src: /src/brpc/src/bthread/rwlock.cpp:317,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/rwlock.cpp:318,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:319,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:320,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:321,1
    - Dst: bthread_mutexattr_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:324,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/rwlock.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 295
    functionDepth: 3
    functionLinenumber: 295
    functionLinenumberEnd: 329
    functionName: bthread_rwlock_init
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 14
    functionsReached:
    - bthread_mutex_init
    - bthread_sem_destroy
    - bthread_mutexattr_init
    - bthread_sem_disable_csite
    - bthread_sem_init
    - bthread_mutexattr_disable_csite
    - BAIDU_UNLIKELY
    - make_contention_site_invalid
    - bthread_mutexattr_destroy
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: "__BEGIN_DECLS bthread_rwlock_init(bthread_rwlock_t* __restrict rwlock,\n
      \                       const bthread_rwlockattr_t* __restrict)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_sem_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:332,1
    - Dst: bthread_sem_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:333,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 331
    functionDepth: 3
    functionLinenumber: 331
    functionLinenumberEnd: 336
    functionName: bthread_rwlock_destroy
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 12
    functionsReached:
    - bthread_sem_destroy
    - bthread_mutex_destroy
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_destroy(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 338
    functionDepth: 8
    functionLinenumber: 338
    functionLinenumberEnd: 340
    functionName: bthread_rwlock_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 18
    functionsReached:
    - bthread::rwlock_rdlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_rdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_tryrdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 342
    functionDepth: 1
    functionLinenumber: 342
    functionLinenumberEnd: 344
    functionName: bthread_rwlock_tryrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - bthread::rwlock_tryrdlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_tryrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_timedrdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 346
    functionDepth: 8
    functionLinenumber: 346
    functionLinenumberEnd: 349
    functionName: bthread_rwlock_timedrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 4
    functionsReached:
    - bthread::rwlock_timedrdlock
    linkageType: ''
    returnType: int
    signature: "int bthread_rwlock_timedrdlock(bthread_rwlock_t* __restrict rwlock,\n
      \                              const struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:352,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 353
    functionName: bthread_rwlock_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 18
    functionsReached:
    - rwlock_wrlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_wrlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_trywrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 355
    functionDepth: 2
    functionLinenumber: 355
    functionLinenumberEnd: 357
    functionName: bthread_rwlock_trywrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - rwlock_trywrlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_trywrlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_timedwrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 362
    functionName: bthread_rwlock_timedwrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 4
    functionsReached:
    - rwlock_timedwrlock
    linkageType: ''
    returnType: int
    signature: "int bthread_rwlock_timedwrlock(bthread_rwlock_t* __restrict rwlock,\n
      \                              const struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 364
    functionDepth: 8
    functionLinenumber: 364
    functionLinenumberEnd: 366
    functionName: bthread_rwlock_unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 28
    functionsReached:
    - rwlock_unlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_unlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bthread/butex.h:45,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/bthread/butex.h:46,1
    - Dst: bthread::butex_create
      Src: /src/brpc/src/bthread/butex.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: bthread::butex_create_checked
    functionSourceFile: /src/brpc/src/bthread/butex.h
    functionUses: 2
    functionsReached:
    - BAIDU_CASSERT
    - bthread::butex_create
    - static_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * butex_create_checked()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bthread/butex.h:45,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/bthread/butex.h:46,1
    - Dst: bthread::butex_create
      Src: /src/brpc/src/bthread/butex.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: bthread::butex_create_checked
    functionSourceFile: /src/brpc/src/bthread/butex.h
    functionUses: 2
    functionsReached:
    - BAIDU_CASSERT
    - bthread::butex_create
    - static_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * butex_create_checked()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - bthread_key_t
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 69
    functionName: operator==(bthread_key_t key1, bthread_key_t key2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(bthread_key_t key1, bthread_key_t key2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - bthread_key_t
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 71
    functionName: operator!=(bthread_key_t key1, bthread_key_t key2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(bthread_key_t key1, bthread_key_t key2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - bthread_key_t
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: operator<(bthread_key_t key1, bthread_key_t key2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(bthread_key_t key1, bthread_key_t key2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - bthread_key_t
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: operator>(bthread_key_t key1, bthread_key_t key2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(bthread_key_t key1, bthread_key_t key2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - bthread_key_t
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: operator<=(bthread_key_t key1, bthread_key_t key2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(bthread_key_t key1, bthread_key_t key2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - bthread_key_t
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 81
    functionName: operator>=(bthread_key_t key1, bthread_key_t key2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(bthread_key_t key1, bthread_key_t key2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - key
    argTypes:
    - std::ostream
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: '& operator<<(std::ostream& os, bthread_key_t key)'
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, bthread_key_t key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - stacktype_and_flags
    argTypes:
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 113
    functionName: operator=(unsigned stacktype_and_flags)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(unsigned stacktype_and_flags)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/types.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - other_flags
    argTypes:
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 119
    functionName: operator|(unsigned other_flags) const
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: bthread_attr_t
    signature: bthread_attr_t operator|(unsigned other_flags) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 184
    functionName: bthread_mutex_t
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bthread_mutex_t()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    functionName: bthread_cond_t
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bthread_cond_t()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 215
    functionName: bthread_sem_t
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bthread_sem_t()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 225
    functionName: bthread_rwlock_t
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bthread_rwlock_t()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - bthread_id_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 283
    functionName: operator==(bthread_id_t id1, bthread_id_t id2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(bthread_id_t id1, bthread_id_t id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - bthread_id_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 285
    functionName: operator!=(bthread_id_t id1, bthread_id_t id2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(bthread_id_t id1, bthread_id_t id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - bthread_id_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 287
    functionName: operator<(bthread_id_t id1, bthread_id_t id2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(bthread_id_t id1, bthread_id_t id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - bthread_id_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 289
    functionName: operator>(bthread_id_t id1, bthread_id_t id2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(bthread_id_t id1, bthread_id_t id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - bthread_id_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 291
    functionName: operator<=(bthread_id_t id1, bthread_id_t id2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(bthread_id_t id1, bthread_id_t id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - bthread_id_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 293
    functionName: operator>=(bthread_id_t id1, bthread_id_t id2)
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(bthread_id_t id1, bthread_id_t id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - id
    argTypes:
    - std::ostream
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 295
    functionName: '& operator<<(std::ostream& os, bthread_id_t id)'
    functionSourceFile: /src/brpc/src/bthread/types.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 74
    functionName: bthread::TaskControl::concurrency
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int concurrency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: bthread::TaskControl::concurrency
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int concurrency(bthread_tag_t tag) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/src/bthread/task_control.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tag
    - tid
    argTypes:
    - bthread_tag_t
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: bthread::TaskControl::push_priority_queue
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - push
    linkageType: ''
    returnType: void
    signature: void push_priority_queue(bthread_tag_t tag, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: '& tag_group(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaggedGroups
    signature: TaggedGroups & tag_group(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: '& tag_ngroup(int tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::atomic<size_t>
    signature: butil::atomic<size_t> & tag_ngroup(int tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 120
    functionName: '& tag_pl(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaggedParkingLot
    signature: TaggedParkingLot & tag_pl(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:171,1
    - Dst: create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 176
    functionName: '& TaskControl::exposed_pending_time()'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - create_exposed_pending_time
    - load
    linkageType: ''
    returnType: bvar::LatencyRecorder
    signature: bvar::LatencyRecorder & TaskControl::exposed_pending_time()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: '& TaskControl::tag_nworkers(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::Adder<int64_t>
    signature: bvar::Adder<int64_t> & TaskControl::tag_nworkers(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: '& TaskControl::tag_nbthreads(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::Adder<int64_t>
    signature: bvar::Adder<int64_t> & TaskControl::tag_nbthreads(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:188,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.h:191,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.h:192,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.h:193,1
    - Dst: f
      Src: /src/brpc/src/bthread/task_control.h:195,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - F
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 198
    functionName: bthread::TaskControl::for_each_task_group
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - tag_ngroup
    - load
    - f
    - size
    - tag_group
    linkageType: ''
    returnType: void
    signature: void TaskControl::for_each_task_group(F const& f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 74
    functionName: bthread::TaskControl::concurrency
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int concurrency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: bthread::TaskControl::concurrency
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int concurrency(bthread_tag_t tag) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/src/bthread/task_control.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tag
    - tid
    argTypes:
    - bthread_tag_t
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: bthread::TaskControl::push_priority_queue
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - push
    linkageType: ''
    returnType: void
    signature: void push_priority_queue(bthread_tag_t tag, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: '& tag_group(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaggedGroups
    signature: TaggedGroups & tag_group(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: '& tag_ngroup(int tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::atomic<size_t>
    signature: butil::atomic<size_t> & tag_ngroup(int tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 120
    functionName: '& tag_pl(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TaggedParkingLot
    signature: TaggedParkingLot & tag_pl(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:171,1
    - Dst: create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 176
    functionName: '& TaskControl::exposed_pending_time()'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - create_exposed_pending_time
    - load
    linkageType: ''
    returnType: bvar::LatencyRecorder
    signature: bvar::LatencyRecorder & TaskControl::exposed_pending_time()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: '& TaskControl::tag_nworkers(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::Adder<int64_t>
    signature: bvar::Adder<int64_t> & TaskControl::tag_nworkers(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: '& TaskControl::tag_nbthreads(bthread_tag_t tag)'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::Adder<int64_t>
    signature: bvar::Adder<int64_t> & TaskControl::tag_nbthreads(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:188,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.h:191,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.h:192,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.h:193,1
    - Dst: f
      Src: /src/brpc/src/bthread/task_control.h:195,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - F
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 198
    functionName: bthread::TaskControl::for_each_task_group
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - tag_ngroup
    - load
    - f
    - size
    - tag_group
    linkageType: ''
    returnType: void
    signature: void TaskControl::for_each_task_group(F const& f)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.h:50,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/mutex.h:52,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/mutex.h:52,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/mutex.h:52,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/mutex.h:56,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.h:56,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:59,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/mutex.h:61,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/mutex.h:61,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/mutex.h:61,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:65,1
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.h:66,1
    - Dst: bthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.h:68,1
    - Dst: try_lock
      Src: /src/brpc/src/bthread/mutex.h:108,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 117
    functionName: namespace
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - try_lock
    - std::system_category
    - bthread_mutex_destroy
    - bthread_mutex_init
    - bthread_mutex_trylock
    - CHECK_EQ
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - std::error_code
    - std::system_error
    - bthread_mutex_timedlock
    linkageType: ''
    returnType: __END_DECLS
    signature: __END_DECLS namespace
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.h:50,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/mutex.h:52,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/mutex.h:52,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/mutex.h:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 55
    functionName: Mutex::Mutex
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - std::error_code
    - std::system_error
    - std::system_category
    - bthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void Mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/mutex.h:56,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~Mutex()
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~Mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: Mutex::native_handler
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: native_handler_type
    signature: native_handler_type native_handler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:59,1
    - Dst: std::system_error
      Src: /src/brpc/src/bthread/mutex.h:61,1
    - Dst: std::error_code
      Src: /src/brpc/src/bthread/mutex.h:61,1
    - Dst: std::system_category
      Src: /src/brpc/src/bthread/mutex.h:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 64
    functionName: Mutex::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 6
    functionsReached:
    - std::error_code
    - std::system_error
    - bthread_mutex_lock
    - std::system_category
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: Mutex::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 6
    functionsReached:
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: Mutex::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 4
    functionsReached:
    - bthread_mutex_trylock
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: Mutex::timed_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 4
    functionsReached:
    - bthread_mutex_timedlock
    linkageType: ''
    returnType: bool
    signature: bool timed_lock(const struct timespec* abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: FastPthreadMutex::FastPthreadMutex
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: ~FastPthreadMutex()
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FastPthreadMutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex::try_lock
      Src: /src/brpc/src/bthread/mutex.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: FastPthreadMutex::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 3
    functionsReached:
    - FastPthreadMutex::try_lock
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:127,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.h:129,1
    - Dst: berror
      Src: /src/brpc/src/bthread/mutex.h:129,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - bthread_mutex_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: std::lock_guard<bthread_mutex_t>::lock_guard
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_mutex_lock
    - LOG
    linkageType: ''
    returnType: void
    signature: void lock_guard(bthread_mutex_t& mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:140,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 145
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock<bthread_mutex_t>::lock
      Src: /src/brpc/src/bthread/mutex.h:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 160
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - std::unique_lock<bthread_mutex_t>::lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 166
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_trylock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/bthread/mutex.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:179,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:183,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 188
    functionName: std::unique_lock<bthread_mutex_t>::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 1
    functionsReached:
    - bthread_mutex_lock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:192,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:196,1
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.h:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 201
    functionName: std::unique_lock<bthread_mutex_t>::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_trylock
    - CHECK
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:205,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:209,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 212
    functionName: std::unique_lock<bthread_mutex_t>::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - CHECK
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/bthread/mutex.h:215,1
    - Dst: std::swap
      Src: /src/brpc/src/bthread/mutex.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 217
    functionName: std::unique_lock<bthread_mutex_t>::swap
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 224
    functionName: std::unique_lock<bthread_mutex_t>::release
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: std::unique_lock<bthread_mutex_t>::mutex
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: std::unique_lock<bthread_mutex_t>::owns_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/bthread/mutex.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 228
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:127,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.h:129,1
    - Dst: berror
      Src: /src/brpc/src/bthread/mutex.h:129,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - bthread_mutex_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: std::lock_guard<bthread_mutex_t>::lock_guard
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - berror
    - bthread_mutex_lock
    - LOG
    linkageType: ''
    returnType: void
    signature: void lock_guard(bthread_mutex_t& mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:140,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 145
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock<bthread_mutex_t>::lock
      Src: /src/brpc/src/bthread/mutex.h:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 157
    functionDepth: 2
    functionLinenumber: 157
    functionLinenumberEnd: 160
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - std::unique_lock<bthread_mutex_t>::lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 166
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_trylock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: std::unique_lock<bthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/bthread/mutex.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:179,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:183,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.h:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 188
    functionName: std::unique_lock<bthread_mutex_t>::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 2
    functionsReached:
    - bthread_mutex_lock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:192,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:196,1
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.h:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 201
    functionName: std::unique_lock<bthread_mutex_t>::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_trylock
    - CHECK
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/mutex.h:205,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.h:209,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 212
    functionName: std::unique_lock<bthread_mutex_t>::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - CHECK
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/bthread/mutex.h:215,1
    - Dst: std::swap
      Src: /src/brpc/src/bthread/mutex.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 217
    functionName: std::unique_lock<bthread_mutex_t>::swap
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 224
    functionName: std::unique_lock<bthread_mutex_t>::release
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: std::unique_lock<bthread_mutex_t>::mutex
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: std::unique_lock<bthread_mutex_t>::owns_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/bthread/mutex.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 228
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: operator()(bthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_init
    linkageType: ''
    returnType: bool
    signature: bool operator()(bthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 250
    functionName: operator()(bthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    linkageType: ''
    returnType: bool
    signature: bool operator()(bthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: operator()(bthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_init
    linkageType: ''
    returnType: bool
    signature: bool operator()(bthread_mutex_t* mutex) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 250
    functionName: operator()(bthread_mutex_t* mutex) const
    functionSourceFile: /src/brpc/src/bthread/mutex.h
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    linkageType: ''
    returnType: bool
    signature: bool operator()(bthread_mutex_t* mutex) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: g_create_span_func
      Src: /src/brpc/src/bthread/task_group.cpp:84,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: bthread::run_create_span_func
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - g_create_span_func
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: void
    signature: void * run_create_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_load_si128
      Src: /src/brpc/src/bthread/task_group.cpp:97,1
    - Dst: reinterpret_cast<const __m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:97,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:99,1
    - Dst: reinterpret_cast<const int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:99,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 106
    functionName: bthread::AtomicInteger128::load
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const __m128i*>
    - BAIDU_SCOPED_LOCK
    - _mm_load_si128
    - vld1q_s64
    - reinterpret_cast<const int64_t*>
    linkageType: ''
    returnType: AtomicInteger128::Value
    signature: AtomicInteger128::Value AtomicInteger128::load() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_load_si128
      Src: /src/brpc/src/bthread/task_group.cpp:110,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:110,1
    - Dst: _mm_store_si128
      Src: /src/brpc/src/bthread/task_group.cpp:111,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:111,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:113,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:113,1
    - Dst: vst1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:114,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:114,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 119
    functionName: bthread::AtomicInteger128::store
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<__m128i*>
    - BAIDU_SCOPED_LOCK
    - _mm_load_si128
    - vst1q_s64
    - vld1q_s64
    - _mm_store_si128
    - reinterpret_cast<int64_t*>
    linkageType: ''
    returnType: void
    signature: void AtomicInteger128::store(Value value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:123,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:125,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - tid
    - out
    argTypes:
    - bthread_t
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 134
    functionName: bthread::TaskGroup::get_attr
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - get_version
    linkageType: ''
    returnType: int
    signature: int TaskGroup::get_attr(bthread_t tid, bthread_attr_t* out)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:137,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:139,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 145
    functionName: bthread::TaskGroup::set_stopped
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - get_version
    linkageType: ''
    returnType: void
    signature: void TaskGroup::set_stopped(bthread_t tid)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:148,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:150,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:151,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 159
    functionName: bthread::TaskGroup::is_stopped
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - get_version
    linkageType: ''
    returnType: bool
    signature: bool TaskGroup::is_stopped(bthread_t tid)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: stopped
      Src: /src/brpc/src/bthread/task_group.cpp:164,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:167,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:168,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.cpp:172,1
    - Dst: ParkingLot::State::stopped
      Src: /src/brpc/src/bthread/task_group.cpp:173,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:176,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:179,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 182
    functionName: bthread::TaskGroup::wait_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - get_state
    - ParkingLot::State::stopped
    - bthread::TaskGroup::steal_task
    - wait
    - stopped
    linkageType: ''
    returnType: bool
    signature: bool TaskGroup::wait_task(bthread_t* tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskGroup*>
      Src: /src/brpc/src/bthread/task_group.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: bthread::get_cumulated_cputime_from_this
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskGroup*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_cputime_from_this(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_group.cpp:189,1
    - Dst: CPUTimeStat::cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:191,1
    - Dst: CPUTimeStat::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:192,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:193,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 196
    functionName: bthread::TaskGroup::cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::cpuwide_time_ns
    - CPUTimeStat::cumulated_cputime_ns
    - CPUTimeStat::is_main_task
    - CPUTimeStat::last_run_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t TaskGroup::cumulated_cputime_ns() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:201,1
    - Dst: bthread::TaskGroup::wait_task
      Src: /src/brpc/src/bthread/task_group.cpp:205,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:206,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:207,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:208,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:210,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:215,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_group.cpp:216,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:218,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/task_group.cpp:219,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/bthread/task_group.cpp:221,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bthread/task_group.cpp:221,1
    - Dst: bthread::TaskGroup::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:226,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:227,1
    - Dst: load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 198
    functionDepth: 3
    functionLinenumber: 198
    functionLinenumberEnd: 228
    functionName: bthread::TaskGroup::run_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::wait_task
    - syscall
    - pthread_numeric_id
    - bthread::TaskGroup::current_task
    - snprintf
    - butil::cpuwide_time_ns
    - DCHECK_EQ
    - bthread::TaskGroup::sched_to
    - bthread::TaskGroup::task_runner
    - std::unique_ptr::unique_ptr
    - std::unique_ptr::reset
    - load_unsafe
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    linkageType: ''
    returnType: void
    signature: void TaskGroup::run_main_task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - TaskControl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: bthread::TaskGroup::TaskGroup
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void TaskGroup::TaskGroup(TaskControl* c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:237,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:238,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:243,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:243,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:244,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 247
    functionName: TaskGroup::~TaskGroup()
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - address_meta
    - CHECK
    - return_resource
    - return_stack
    - TaskMeta*::release_stack
    - get_slot
    linkageType: ''
    returnType: void
    signature: void TaskGroup::~TaskGroup()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_get_stackaddr_np
      Src: /src/brpc/src/bthread/task_group.cpp:252,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:252,1
    - Dst: pthread_get_stacksize_np
      Src: /src/brpc/src/bthread/task_group.cpp:253,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:253,1
    - Dst: pthread_getattr_np
      Src: /src/brpc/src/bthread/task_group.cpp:257,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:259,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:259,1
    - Dst: pthread_attr_getstack
      Src: /src/brpc/src/bthread/task_group.cpp:262,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:264,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:264,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/bthread/task_group.cpp:266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' stack_addr'
    - ' stack_size'
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 269
    functionName: bthread::PthreadAttrGetStack
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - pthread_attr_getstack
    - pthread_attr_destroy
    - pthread_get_stacksize_np
    - pthread_getattr_np
    - pthread_get_stackaddr_np
    - pthread_self
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int PthreadAttrGetStack(void*& stack_addr, size_t& stack_size)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::init
      Src: /src/brpc/src/bthread/task_group.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:274,1
    - Dst: bthread::TaskGroup::init
      Src: /src/brpc/src/bthread/task_group.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:278,1
    - Dst: PthreadAttrGetStack
      Src: /src/brpc/src/bthread/task_group.cpp:285,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:292,1
    - Dst: butil::get_resource<TaskMeta>
      Src: /src/brpc/src/bthread/task_group.cpp:296,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:298,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:308,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:311,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:312,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:325,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_group.cpp:326,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 41
    argCount: 1
    argNames:
    - runqueue_capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 330
    functionName: bthread::TaskGroup::init
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::init
    - get_stack
    - PthreadAttrGetStack
    - butil::cpuwide_time_ns
    - make_tid
    - CPUTimeStat::set_last_run_ns
    - store
    - TaskMeta*::set_stack
    - butil::get_resource<TaskMeta>
    - LOG
    linkageType: ''
    returnType: int
    signature: int TaskGroup::init(size_t runqueue_capacity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::internal::FinishSwitchFiber
      Src: /src/brpc/src/bthread/task_group.cpp:336,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 333
    functionDepth: 2
    functionLinenumber: 333
    functionLinenumberEnd: 338
    functionName: bthread::TaskGroup::asan_task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::task_runner
    - bthread::internal::FinishSwitchFiber
    linkageType: ''
    returnType: void
    signature: void TaskGroup::asan_task_runner(intptr_t)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:346,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:346,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:353,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:354,1
    - Dst: TaskGroup*::_control::exposed_pending_time
      Src: /src/brpc/src/bthread/task_group.cpp:378,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:379,1
    - Dst: TaskMeta*::fn
      Src: /src/brpc/src/bthread/task_group.cpp:388,1
    - Dst: value
      Src: /src/brpc/src/bthread/task_group.cpp:390,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:400,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:407,1
    - Dst: return_keytable
      Src: /src/brpc/src/bthread/task_group.cpp:410,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:412,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:419,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:429,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:431,1
    - Dst: butex_wake_except
      Src: /src/brpc/src/bthread/task_group.cpp:437,1
    - Dst: TaskGroup*::_control::_task_tracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_group.cpp:442,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:444,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:448,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:448,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:449,1
    - Dst: bthread::TaskGroup::ending_sched
      Src: /src/brpc/src/bthread/task_group.cpp:450,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 46
    argCount: 1
    argNames:
    - skip_remained
    argTypes:
    - intptr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 341
    functionDepth: 2
    functionLinenumber: 341
    functionLinenumberEnd: 456
    functionName: bthread::TaskGroup::task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - value
    - return_keytable
    - TaskGroup*::tag
    - bthread::TaskGroup::ending_sched
    - TaskGroup*::tid
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::_control::_task_tracer::set_status
    - bthread::TaskTracer::set_running_status
    - TaskMeta*::fn
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - LOG
    - TaskGroup*::_control::exposed_pending_time
    - fn
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_ns
    - TaskGroup*::_control::_task_tracer::WaitForTracing
    - bthread::TaskTracer::set_end_status_unsafe
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - butex_wake_except
    - TaskGroup*::set_remained
    linkageType: ''
    returnType: void
    signature: void TaskGroup::task_runner(intptr_t skip_remained)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskMeta*>
      Src: /src/brpc/src/bthread/task_group.cpp:459,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:460,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:461,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:461,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:464,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:466,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:466,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 467
    functionName: bthread::TaskGroup::_release_last_context
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskMeta*>
    - TaskMeta*::stack_type
    - return_resource
    - TaskMeta*::set_stack
    - return_stack
    - TaskMeta*::release_stack
    - get_slot
    linkageType: ''
    returnType: void
    signature: void TaskGroup::_release_last_context(void* arg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:474,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:477,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:480,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:481,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:484,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:484,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:491,1
    - Dst: run_create_span_func
      Src: /src/brpc/src/bthread/task_group.cpp:495,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:502,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:507,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:507,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:509,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/task_group.cpp:511,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:513,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:520,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:526,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:528,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:529,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 45
    argCount: 5
    argNames:
    - pg
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - TaskGroup**
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 532
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 532
    functionName: bthread::TaskGroup::start_foreground
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::set_remained
    - butil::get_resource
    - run_create_span_func
    - TaskGroup*::_control::_task_tracer::set_status
    - TaskGroup*::is_current_pthread_task
    - butil::cpuwide_time_ns
    - CHECK
    - __builtin_expect
    - TaskMeta*::current_waiter::load
    - make_tid
    - TaskGroup*::tag
    - BAIDU_UNLIKELY
    - bthread::TaskGroup::sched_to
    - TaskGroup*::current_task
    - LOG
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: int
    signature: "int TaskGroup::start_foreground(TaskGroup** pg,\n                                bthread_t*
      __restrict th,\n                                const bthread_attr_t* __restrict
      attr,\n                                void * (*fn)(void*),\n                                void*
      __restrict arg)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:539,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:542,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:545,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:546,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:549,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:549,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:556,1
    - Dst: run_create_span_func
      Src: /src/brpc/src/bthread/task_group.cpp:560,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:564,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:567,1
    - Dst: tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:570,1
    - Dst: bthread::TaskGroup::tag
      Src: /src/brpc/src/bthread/task_group.cpp:570,1
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:572,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:575,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:577,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 36
    argCount: 4
    argNames:
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 535
    functionDepth: 1
    functionLinenumber: 535
    functionLinenumberEnd: 580
    functionName: bthread::TaskGroup::start_background
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::ready_to_run_remote
    - tag_nbthreads
    - bthread::TaskGroup::tag
    - _task_tracer::set_status
    - butil::get_resource
    - run_create_span_func
    - butil::cpuwide_time_ns
    - CHECK
    - __builtin_expect
    - TaskMeta*::current_waiter::load
    - make_tid
    - bthread::TaskGroup::ready_to_run
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: int
    signature: "int TaskGroup::start_background(bthread_t* __restrict th,\n                                const
      bthread_attr_t* __restrict attr,\n                                void * (*fn)(void*),\n
      \                               void* __restrict arg)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:595,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:598,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:599,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:604,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:608,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/task_group.cpp:610,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - tid
    - return_value
    argTypes:
    - bthread_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 619
    functionName: bthread::TaskGroup::join
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_UNLIKELY
    - TaskGroup*::current_tid
    - __builtin_expect
    - get_version
    - bthread::TaskGroup::address_meta
    - butex_wait
    linkageType: ''
    returnType: int
    signature: int TaskGroup::join(bthread_t tid, void** return_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:623,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 629
    functionName: bthread::TaskGroup::exists
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 8
    functionsReached:
    - bthread::TaskGroup::address_meta
    - get_version
    linkageType: ''
    returnType: bool
    signature: bool TaskGroup::exists(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 634
    functionName: bthread::TaskGroup::main_stat
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    linkageType: ''
    returnType: TaskStatistics
    signature: TaskStatistics TaskGroup::main_stat() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::_rq::pop
      Src: /src/brpc/src/bthread/task_group.cpp:644,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:646,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:648,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:654,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:656,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:656,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:661,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:661,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:664,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:665,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:667,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:667,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:670,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:677,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:681,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 682
    functionName: bthread::TaskGroup::ending_sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - TaskMeta*::release_stack
    - get_stack
    - TaskGroup*::steal_task
    - TaskMeta*::stack_type
    - bthread::TaskGroup::sched_to
    - TaskMeta*::set_stack
    - bthread::TaskGroup::address_meta
    - TaskGroup*::_rq::steal
    - TaskGroup*::_rq::pop
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ending_sched(TaskGroup** pg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::_rq::pop
      Src: /src/brpc/src/bthread/task_group.cpp:689,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:691,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:693,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:697,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 698
    functionName: bthread::TaskGroup::sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::_rq::steal
    - bthread::TaskGroup::sched_to
    - TaskGroup*::_rq::pop
    - TaskGroup*::steal_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched(TaskGroup** pg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:706,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:715,1
    - Dst: TaskGroup*::_cpu_time_stat::load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:716,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:717,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:720,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:720,1
    - Dst: CPUTimeStat::add_cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:721,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:721,1
    - Dst: TaskGroup*::_cpu_time_stat::store
      Src: /src/brpc/src/bthread/task_group.cpp:722,1
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:725,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:737,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:740,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:747,1
    - Dst: CheckBthreadScheSafety
      Src: /src/brpc/src/bthread/task_group.cpp:753,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:755,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:756,1
    - Dst: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
      Src: /src/brpc/src/bthread/task_group.cpp:759,1
    - Dst: jump_stack
      Src: /src/brpc/src/bthread/task_group.cpp:760,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:763,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:765,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:765,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:772,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:779,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:779,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:783,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:783,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:789,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:790,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:796,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 51
    argCount: 3
    argNames:
    - pg
    - next_meta
    - cur_ending
    argTypes:
    - TaskGroup**
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 702
    functionDepth: 2
    functionLinenumber: 702
    functionLinenumberEnd: 802
    functionName: bthread::TaskGroup::sched_to
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 8
    functionsReached:
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - butil::cputhread_time_ns
    - CPUTimeStat::add_cumulated_cputime_ns
    - TaskGroup*::tid
    - TaskGroup*::_cpu_time_stat::load_unsafe
    - TaskGroup*::_control::_task_tracer::set_status
    - bthread::TaskGroup::is_main_task
    - bthread::TaskTracer::set_running_status
    - __builtin_expect
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - LOG
    - TaskGroup*::current_tid
    - TaskGroup*::_cpu_time_stat::store
    - fn
    - butil::cpuwide_time_ns
    - CPUTimeStat::set_last_run_ns
    - CHECK
    - CheckBthreadScheSafety
    - jump_stack
    - BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    - CPUTimeStat::last_run_ns
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched_to(TaskGroup** pg, TaskMeta* next_meta, bool
      cur_ending)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _destroy_group
      Src: /src/brpc/src/bthread/task_group.cpp:806,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 811
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 811
    functionName: bthread::TaskGroup::destroy_self
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - _destroy_group
    linkageType: ''
    returnType: void
    signature: void TaskGroup::destroy_self()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:816,1
    - Dst: bthread::TaskGroup::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:818,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:825,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 814
    functionDepth: 2
    functionLinenumber: 814
    functionLinenumberEnd: 827
    functionName: bthread::TaskGroup::ready_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - signal_task
    - _task_tracer::set_status
    - bthread::TaskGroup::push_rq
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run(TaskMeta* meta, bool nosignal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:834,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 836
      start: 829
    functionDepth: 0
    functionLinenumber: 829
    functionLinenumberEnd: 836
    functionName: bthread::TaskGroup::flush_nosignal_tasks
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - signal_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:840,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:842,1
    - Dst: push_locked
      Src: /src/brpc/src/bthread/task_group.cpp:843,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
      Src: /src/brpc/src/bthread/task_group.cpp:844,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/task_group.cpp:845,1
    - Dst: capacity
      Src: /src/brpc/src/bthread/task_group.cpp:846,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/task_group.cpp:847,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:848,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:852,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:857,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:858,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 860
      start: 838
    functionDepth: 1
    functionLinenumber: 838
    functionLinenumberEnd: 860
    functionName: bthread::TaskGroup::ready_to_run_remote
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - _task_tracer::set_status
    - bthread::TaskGroup::usleep
    - _mutex::unlock
    - signal_task
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    - capacity
    - LOG_EVERY_SECOND
    - push_locked
    - _mutex::lock
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_remote(TaskMeta* meta, bool nosignal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_group.cpp:865,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_group.cpp:870,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:871,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' locked_mutex'
    argTypes:
    - butil::Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 862
    functionDepth: 0
    functionLinenumber: 862
    functionLinenumberEnd: 872
    functionName: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - unlock
    - signal_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_remote_locked(butil::Mutex& locked_mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:876,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:878,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 874
    functionDepth: 3
    functionLinenumber: 874
    functionLinenumberEnd: 879
    functionName: bthread::TaskGroup::ready_to_run_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::ready_to_run_remote
    - bthread::TaskGroup::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_general(TaskMeta* meta, bool nosignal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/task_group.cpp:883,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote
      Src: /src/brpc/src/bthread/task_group.cpp:885,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 881
    functionDepth: 2
    functionLinenumber: 881
    functionLinenumberEnd: 886
    functionName: bthread::TaskGroup::flush_nosignal_tasks_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::flush_nosignal_tasks
    - bthread::TaskGroup::flush_nosignal_tasks_remote
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_general()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:889,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:890,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 888
    functionDepth: 3
    functionLinenumber: 888
    functionLinenumberEnd: 891
    functionName: bthread::TaskGroup::ready_to_run_in_worker
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - bthread::TaskGroup::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_in_worker(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:894,1
    - Dst: _control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:896,1
    - Dst: bthread::TaskGroup::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:899,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 900
      start: 893
    functionDepth: 2
    functionLinenumber: 893
    functionLinenumberEnd: 900
    functionName: bthread::TaskGroup::ready_to_run_in_worker_ignoresignal
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - _control::_task_tracer::set_status
    - bthread::TaskGroup::push_rq
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_in_worker_ignoresignal(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:903,1
    - Dst: _control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:905,1
    - Dst: bthread::TaskGroup::control
      Src: /src/brpc/src/bthread/task_group.cpp:908,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 909
      start: 902
    functionDepth: 1
    functionLinenumber: 902
    functionLinenumberEnd: 909
    functionName: bthread::TaskGroup::priority_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::control
    - static_cast<ReadyToRunArgs*>
    - _control::_task_tracer::set_status
    linkageType: ''
    returnType: void
    signature: void TaskGroup::priority_to_run(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:919,1
    - Dst: static_cast<const SleepArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:920,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/task_group.cpp:922,1
    - Dst: auto::control
      Src: /src/brpc/src/bthread/task_group.cpp:923,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 918
    functionDepth: 1
    functionLinenumber: 918
    functionLinenumberEnd: 924
    functionName: bthread::ready_to_run_from_timer_thread
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - auto::control
    - CHECK
    - static_cast<const SleepArgs*>
    - auto::tag
    linkageType: ''
    returnType: void
    signature: void ready_to_run_from_timer_thread(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SleepArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:930,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:933,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:937,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_group.cpp:939,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:944,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:949,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:951,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:960,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:968,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 926
    functionDepth: 1
    functionLinenumber: 926
    functionLinenumberEnd: 970
    functionName: bthread::TaskGroup::_add_sleep_event
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::_control::_task_tracer::set_status
    - BAIDU_SCOPED_LOCK
    - static_cast<SleepArgs*>
    - get_version
    - butil::microseconds_from_now
    - get_global_timer_thread
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::_add_sleep_event(void* void_args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::yield
      Src: /src/brpc/src/bthread/task_group.cpp:975,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:981,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:981,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:982,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:983,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - pg
    - timeout_us
    argTypes:
    - TaskGroup**
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 1004
    functionName: bthread::TaskGroup::usleep
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 13
    functionsReached:
    - TaskGroup*::set_remained
    - bthread::TaskGroup::yield
    - TaskGroup*::current_tid
    - TaskGroup*::current_task
    - bthread::TaskGroup::sched
    linkageType: ''
    returnType: int
    signature: int TaskGroup::usleep(TaskGroup** pg, uint64_t timeout_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1011,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1015,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1016,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/task_group.cpp:1018,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - tid
    - pw
    - sleep_id
    argTypes:
    - bthread_t
    - ButexWaiter**
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1025
      start: 1009
    functionDepth: 1
    functionLinenumber: 1009
    functionLinenumberEnd: 1025
    functionName: bthread::interrupt_and_consume_waiters
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - bthread::get_version
    - TaskMeta*::current_waiter::exchange
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int interrupt_and_consume_waiters(\n    bthread_t tid, ButexWaiter**
      pw, uint64_t* sleep_id)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1028,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1030,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1031,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/task_group.cpp:1034,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - tid
    - w
    argTypes:
    - bthread_t
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1039
      start: 1027
    functionDepth: 1
    functionLinenumber: 1027
    functionLinenumberEnd: 1039
    functionName: bthread::set_butex_waiter
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - bthread::get_version
    - TaskMeta*::current_waiter::store
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int set_butex_waiter(bthread_t tid, ButexWaiter* w)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: interrupt_and_consume_waiters
      Src: /src/brpc/src/bthread/task_group.cpp:1052,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:1057,1
    - Dst: erase_from_butex_because_of_interruption
      Src: /src/brpc/src/bthread/task_group.cpp:1059,1
    - Dst: set_butex_waiter
      Src: /src/brpc/src/bthread/task_group.cpp:1062,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:1064,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1068,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1070,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1072,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/task_group.cpp:1077,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 3
    argNames:
    - tid
    - c
    - tag
    argTypes:
    - bthread_t
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1048
    functionDepth: 1
    functionLinenumber: 1048
    functionLinenumberEnd: 1082
    functionName: bthread::TaskGroup::interrupt
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - erase_from_butex_because_of_interruption
    - interrupt_and_consume_waiters
    - set_butex_waiter
    - TaskControl*::choose_one_group
    - CHECK
    - bthread::TaskGroup::address_meta
    - get_global_timer_thread
    - LOG
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: int
    signature: int TaskGroup::interrupt(bthread_t tid, TaskControl* c, bthread_tag_t
      tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:1086,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:1087,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:1088,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1084
    functionDepth: 1
    functionLinenumber: 1084
    functionLinenumberEnd: 1089
    functionName: bthread::TaskGroup::yield
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::set_remained
    - bthread::TaskGroup::sched
    - TaskGroup*::tag
    linkageType: ''
    returnType: void
    signature: void TaskGroup::yield(TaskGroup** pg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1092,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1097,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1112,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:1141,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 32
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1091
    functionDepth: 1
    functionLinenumber: 1091
    functionLinenumberEnd: 1153
    functionName: bthread::print_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - bthread::get_version
    - butil::cpuwide_time_ns
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void print_task(std::ostream& os, bthread_t tid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: g_create_span_func
      Src: /src/brpc/src/bthread/task_group.cpp:84,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: bthread::run_create_span_func
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - g_create_span_func
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: void
    signature: void * run_create_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_load_si128
      Src: /src/brpc/src/bthread/task_group.cpp:97,1
    - Dst: reinterpret_cast<const __m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:97,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:99,1
    - Dst: reinterpret_cast<const int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:99,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 106
    functionName: bthread::AtomicInteger128::load
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const __m128i*>
    - BAIDU_SCOPED_LOCK
    - _mm_load_si128
    - vld1q_s64
    - reinterpret_cast<const int64_t*>
    linkageType: ''
    returnType: AtomicInteger128::Value
    signature: AtomicInteger128::Value AtomicInteger128::load() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_load_si128
      Src: /src/brpc/src/bthread/task_group.cpp:110,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:110,1
    - Dst: _mm_store_si128
      Src: /src/brpc/src/bthread/task_group.cpp:111,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:111,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:113,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:113,1
    - Dst: vst1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:114,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:114,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 119
    functionName: bthread::AtomicInteger128::store
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<__m128i*>
    - BAIDU_SCOPED_LOCK
    - _mm_load_si128
    - vst1q_s64
    - vld1q_s64
    - _mm_store_si128
    - reinterpret_cast<int64_t*>
    linkageType: ''
    returnType: void
    signature: void AtomicInteger128::store(Value value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:123,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:125,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - tid
    - out
    argTypes:
    - bthread_t
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 134
    functionName: bthread::TaskGroup::get_attr
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - get_version
    linkageType: ''
    returnType: int
    signature: int TaskGroup::get_attr(bthread_t tid, bthread_attr_t* out)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:137,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:139,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 145
    functionName: bthread::TaskGroup::set_stopped
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - get_version
    linkageType: ''
    returnType: void
    signature: void TaskGroup::set_stopped(bthread_t tid)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:148,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:150,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:151,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 159
    functionName: bthread::TaskGroup::is_stopped
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - get_version
    linkageType: ''
    returnType: bool
    signature: bool TaskGroup::is_stopped(bthread_t tid)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: stopped
      Src: /src/brpc/src/bthread/task_group.cpp:164,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:167,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:168,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.cpp:172,1
    - Dst: ParkingLot::State::stopped
      Src: /src/brpc/src/bthread/task_group.cpp:173,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:176,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:179,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 182
    functionName: bthread::TaskGroup::wait_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - get_state
    - ParkingLot::State::stopped
    - bthread::TaskGroup::steal_task
    - wait
    - stopped
    linkageType: ''
    returnType: bool
    signature: bool TaskGroup::wait_task(bthread_t* tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskGroup*>
      Src: /src/brpc/src/bthread/task_group.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: bthread::get_cumulated_cputime_from_this
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskGroup*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_cputime_from_this(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_group.cpp:189,1
    - Dst: CPUTimeStat::cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:191,1
    - Dst: CPUTimeStat::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:192,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:193,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 196
    functionName: bthread::TaskGroup::cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::cpuwide_time_ns
    - CPUTimeStat::cumulated_cputime_ns
    - CPUTimeStat::is_main_task
    - CPUTimeStat::last_run_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t TaskGroup::cumulated_cputime_ns() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:201,1
    - Dst: bthread::TaskGroup::wait_task
      Src: /src/brpc/src/bthread/task_group.cpp:205,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:206,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:207,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:208,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:210,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:215,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_group.cpp:216,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:218,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/task_group.cpp:219,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/bthread/task_group.cpp:221,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bthread/task_group.cpp:221,1
    - Dst: bthread::TaskGroup::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:226,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:227,1
    - Dst: load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 198
    functionDepth: 3
    functionLinenumber: 198
    functionLinenumberEnd: 228
    functionName: bthread::TaskGroup::run_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::wait_task
    - syscall
    - pthread_numeric_id
    - bthread::TaskGroup::current_task
    - snprintf
    - butil::cpuwide_time_ns
    - DCHECK_EQ
    - bthread::TaskGroup::sched_to
    - bthread::TaskGroup::task_runner
    - std::unique_ptr::unique_ptr
    - std::unique_ptr::reset
    - load_unsafe
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    linkageType: ''
    returnType: void
    signature: void TaskGroup::run_main_task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - TaskControl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: bthread::TaskGroup::TaskGroup
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void TaskGroup::TaskGroup(TaskControl* c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:237,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:238,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:243,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:243,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:244,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 247
    functionName: TaskGroup::~TaskGroup()
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - address_meta
    - CHECK
    - return_resource
    - return_stack
    - TaskMeta*::release_stack
    - get_slot
    linkageType: ''
    returnType: void
    signature: void TaskGroup::~TaskGroup()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_get_stackaddr_np
      Src: /src/brpc/src/bthread/task_group.cpp:252,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:252,1
    - Dst: pthread_get_stacksize_np
      Src: /src/brpc/src/bthread/task_group.cpp:253,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:253,1
    - Dst: pthread_getattr_np
      Src: /src/brpc/src/bthread/task_group.cpp:257,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:259,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:259,1
    - Dst: pthread_attr_getstack
      Src: /src/brpc/src/bthread/task_group.cpp:262,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:264,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:264,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/bthread/task_group.cpp:266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' stack_addr'
    - ' stack_size'
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 269
    functionName: bthread::PthreadAttrGetStack
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - pthread_attr_getstack
    - pthread_attr_destroy
    - pthread_get_stacksize_np
    - pthread_getattr_np
    - pthread_get_stackaddr_np
    - pthread_self
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int PthreadAttrGetStack(void*& stack_addr, size_t& stack_size)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::init
      Src: /src/brpc/src/bthread/task_group.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:274,1
    - Dst: bthread::TaskGroup::init
      Src: /src/brpc/src/bthread/task_group.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:278,1
    - Dst: PthreadAttrGetStack
      Src: /src/brpc/src/bthread/task_group.cpp:285,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:292,1
    - Dst: butil::get_resource<TaskMeta>
      Src: /src/brpc/src/bthread/task_group.cpp:296,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:298,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:308,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:311,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:312,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:325,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_group.cpp:326,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 41
    argCount: 1
    argNames:
    - runqueue_capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 330
    functionName: bthread::TaskGroup::init
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - bthread::TaskGroup::init
    - get_stack
    - PthreadAttrGetStack
    - butil::cpuwide_time_ns
    - make_tid
    - CPUTimeStat::set_last_run_ns
    - store
    - TaskMeta*::set_stack
    - butil::get_resource<TaskMeta>
    - LOG
    linkageType: ''
    returnType: int
    signature: int TaskGroup::init(size_t runqueue_capacity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::internal::FinishSwitchFiber
      Src: /src/brpc/src/bthread/task_group.cpp:336,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 333
    functionDepth: 3
    functionLinenumber: 333
    functionLinenumberEnd: 338
    functionName: bthread::TaskGroup::asan_task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::task_runner
    - bthread::internal::FinishSwitchFiber
    linkageType: ''
    returnType: void
    signature: void TaskGroup::asan_task_runner(intptr_t)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:346,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:346,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:353,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:354,1
    - Dst: TaskGroup*::_control::exposed_pending_time
      Src: /src/brpc/src/bthread/task_group.cpp:378,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:379,1
    - Dst: TaskMeta*::fn
      Src: /src/brpc/src/bthread/task_group.cpp:388,1
    - Dst: value
      Src: /src/brpc/src/bthread/task_group.cpp:390,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:400,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:407,1
    - Dst: return_keytable
      Src: /src/brpc/src/bthread/task_group.cpp:410,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:412,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:419,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:429,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:431,1
    - Dst: butex_wake_except
      Src: /src/brpc/src/bthread/task_group.cpp:437,1
    - Dst: TaskGroup*::_control::_task_tracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_group.cpp:442,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:444,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:448,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:448,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:449,1
    - Dst: bthread::TaskGroup::ending_sched
      Src: /src/brpc/src/bthread/task_group.cpp:450,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 46
    argCount: 1
    argNames:
    - skip_remained
    argTypes:
    - intptr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 341
    functionDepth: 2
    functionLinenumber: 341
    functionLinenumberEnd: 456
    functionName: bthread::TaskGroup::task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 4
    functionsReached:
    - value
    - return_keytable
    - TaskGroup*::tag
    - bthread::TaskGroup::ending_sched
    - TaskGroup*::tid
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::_control::_task_tracer::set_status
    - bthread::TaskTracer::set_running_status
    - TaskMeta*::fn
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - LOG
    - TaskGroup*::_control::exposed_pending_time
    - fn
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_ns
    - TaskGroup*::_control::_task_tracer::WaitForTracing
    - bthread::TaskTracer::set_end_status_unsafe
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - butex_wake_except
    - TaskGroup*::set_remained
    linkageType: ''
    returnType: void
    signature: void TaskGroup::task_runner(intptr_t skip_remained)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskMeta*>
      Src: /src/brpc/src/bthread/task_group.cpp:459,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:460,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:461,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:461,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:464,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:466,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:466,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 467
    functionName: bthread::TaskGroup::_release_last_context
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskMeta*>
    - TaskMeta*::stack_type
    - return_resource
    - TaskMeta*::set_stack
    - return_stack
    - TaskMeta*::release_stack
    - get_slot
    linkageType: ''
    returnType: void
    signature: void TaskGroup::_release_last_context(void* arg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:474,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:477,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:480,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:481,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:484,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:484,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:491,1
    - Dst: run_create_span_func
      Src: /src/brpc/src/bthread/task_group.cpp:495,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:502,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:507,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:507,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:509,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/task_group.cpp:511,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:513,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:520,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:526,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:528,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:529,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 45
    argCount: 5
    argNames:
    - pg
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - TaskGroup**
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 532
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 532
    functionName: bthread::TaskGroup::start_foreground
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::set_remained
    - butil::get_resource
    - run_create_span_func
    - TaskGroup*::_control::_task_tracer::set_status
    - TaskGroup*::is_current_pthread_task
    - butil::cpuwide_time_ns
    - CHECK
    - __builtin_expect
    - TaskMeta*::current_waiter::load
    - make_tid
    - TaskGroup*::tag
    - BAIDU_UNLIKELY
    - bthread::TaskGroup::sched_to
    - TaskGroup*::current_task
    - LOG
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: int
    signature: "int TaskGroup::start_foreground(TaskGroup** pg,\n                                bthread_t*
      __restrict th,\n                                const bthread_attr_t* __restrict
      attr,\n                                void * (*fn)(void*),\n                                void*
      __restrict arg)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:539,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:542,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:545,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:546,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:549,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:549,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:556,1
    - Dst: run_create_span_func
      Src: /src/brpc/src/bthread/task_group.cpp:560,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:564,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:567,1
    - Dst: tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:570,1
    - Dst: bthread::TaskGroup::tag
      Src: /src/brpc/src/bthread/task_group.cpp:570,1
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:572,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:575,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:577,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 36
    argCount: 4
    argNames:
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 535
    functionDepth: 3
    functionLinenumber: 535
    functionLinenumberEnd: 580
    functionName: bthread::TaskGroup::start_background
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::ready_to_run_remote
    - tag_nbthreads
    - bthread::TaskGroup::tag
    - _task_tracer::set_status
    - butil::get_resource
    - run_create_span_func
    - butil::cpuwide_time_ns
    - CHECK
    - __builtin_expect
    - TaskMeta*::current_waiter::load
    - make_tid
    - bthread::TaskGroup::ready_to_run
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: int
    signature: "int TaskGroup::start_background(bthread_t* __restrict th,\n                                const
      bthread_attr_t* __restrict attr,\n                                void * (*fn)(void*),\n
      \                               void* __restrict arg)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:595,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:598,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:599,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:604,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:608,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/task_group.cpp:610,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - tid
    - return_value
    argTypes:
    - bthread_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 619
    functionName: bthread::TaskGroup::join
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_UNLIKELY
    - TaskGroup*::current_tid
    - __builtin_expect
    - get_version
    - bthread::TaskGroup::address_meta
    - butex_wait
    linkageType: ''
    returnType: int
    signature: int TaskGroup::join(bthread_t tid, void** return_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:623,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 629
    functionName: bthread::TaskGroup::exists
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 8
    functionsReached:
    - bthread::TaskGroup::address_meta
    - get_version
    linkageType: ''
    returnType: bool
    signature: bool TaskGroup::exists(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 634
    functionName: bthread::TaskGroup::main_stat
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    linkageType: ''
    returnType: TaskStatistics
    signature: TaskStatistics TaskGroup::main_stat() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::_rq::pop
      Src: /src/brpc/src/bthread/task_group.cpp:644,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:646,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:648,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:654,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:656,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:656,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:661,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:661,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:664,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:665,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:667,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:667,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:670,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:677,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:681,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 682
    functionName: bthread::TaskGroup::ending_sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - TaskMeta*::release_stack
    - get_stack
    - TaskGroup*::steal_task
    - TaskMeta*::stack_type
    - bthread::TaskGroup::sched_to
    - TaskMeta*::set_stack
    - bthread::TaskGroup::address_meta
    - TaskGroup*::_rq::steal
    - TaskGroup*::_rq::pop
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ending_sched(TaskGroup** pg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::_rq::pop
      Src: /src/brpc/src/bthread/task_group.cpp:689,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:691,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:693,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:697,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 698
    functionName: bthread::TaskGroup::sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 4
    functionsReached:
    - TaskGroup*::_rq::steal
    - bthread::TaskGroup::sched_to
    - TaskGroup*::_rq::pop
    - TaskGroup*::steal_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched(TaskGroup** pg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:706,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:715,1
    - Dst: TaskGroup*::_cpu_time_stat::load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:716,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:717,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:720,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:720,1
    - Dst: CPUTimeStat::add_cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:721,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:721,1
    - Dst: TaskGroup*::_cpu_time_stat::store
      Src: /src/brpc/src/bthread/task_group.cpp:722,1
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:725,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:737,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:740,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:747,1
    - Dst: CheckBthreadScheSafety
      Src: /src/brpc/src/bthread/task_group.cpp:753,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:755,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:756,1
    - Dst: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
      Src: /src/brpc/src/bthread/task_group.cpp:759,1
    - Dst: jump_stack
      Src: /src/brpc/src/bthread/task_group.cpp:760,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:763,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:765,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:765,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:772,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:779,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:779,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:783,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:783,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:789,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:790,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:796,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 51
    argCount: 3
    argNames:
    - pg
    - next_meta
    - cur_ending
    argTypes:
    - TaskGroup**
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 702
    functionDepth: 2
    functionLinenumber: 702
    functionLinenumberEnd: 802
    functionName: bthread::TaskGroup::sched_to
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 12
    functionsReached:
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - butil::cputhread_time_ns
    - CPUTimeStat::add_cumulated_cputime_ns
    - TaskGroup*::tid
    - TaskGroup*::_cpu_time_stat::load_unsafe
    - TaskGroup*::_control::_task_tracer::set_status
    - bthread::TaskGroup::is_main_task
    - bthread::TaskTracer::set_running_status
    - __builtin_expect
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - LOG
    - TaskGroup*::current_tid
    - TaskGroup*::_cpu_time_stat::store
    - fn
    - butil::cpuwide_time_ns
    - CPUTimeStat::set_last_run_ns
    - CHECK
    - CheckBthreadScheSafety
    - jump_stack
    - BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    - CPUTimeStat::last_run_ns
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched_to(TaskGroup** pg, TaskMeta* next_meta, bool
      cur_ending)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _destroy_group
      Src: /src/brpc/src/bthread/task_group.cpp:806,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 811
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 811
    functionName: bthread::TaskGroup::destroy_self
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - _destroy_group
    linkageType: ''
    returnType: void
    signature: void TaskGroup::destroy_self()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:816,1
    - Dst: bthread::TaskGroup::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:818,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:825,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 814
    functionDepth: 2
    functionLinenumber: 814
    functionLinenumberEnd: 827
    functionName: bthread::TaskGroup::ready_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 4
    functionsReached:
    - signal_task
    - _task_tracer::set_status
    - bthread::TaskGroup::push_rq
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run(TaskMeta* meta, bool nosignal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:834,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 836
      start: 829
    functionDepth: 0
    functionLinenumber: 829
    functionLinenumberEnd: 836
    functionName: bthread::TaskGroup::flush_nosignal_tasks
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - signal_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:840,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:842,1
    - Dst: push_locked
      Src: /src/brpc/src/bthread/task_group.cpp:843,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
      Src: /src/brpc/src/bthread/task_group.cpp:844,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/task_group.cpp:845,1
    - Dst: capacity
      Src: /src/brpc/src/bthread/task_group.cpp:846,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/task_group.cpp:847,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:848,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:852,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:857,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:858,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 860
      start: 838
    functionDepth: 2
    functionLinenumber: 838
    functionLinenumberEnd: 860
    functionName: bthread::TaskGroup::ready_to_run_remote
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - _task_tracer::set_status
    - bthread::TaskGroup::usleep
    - _mutex::unlock
    - signal_task
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    - capacity
    - LOG_EVERY_SECOND
    - push_locked
    - _mutex::lock
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_remote(TaskMeta* meta, bool nosignal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_group.cpp:865,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_group.cpp:870,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:871,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' locked_mutex'
    argTypes:
    - butil::Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 862
    functionDepth: 0
    functionLinenumber: 862
    functionLinenumberEnd: 872
    functionName: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 4
    functionsReached:
    - unlock
    - signal_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_remote_locked(butil::Mutex& locked_mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:876,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:878,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 874
    functionDepth: 3
    functionLinenumber: 874
    functionLinenumberEnd: 879
    functionName: bthread::TaskGroup::ready_to_run_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::ready_to_run_remote
    - bthread::TaskGroup::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_general(TaskMeta* meta, bool nosignal)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/task_group.cpp:883,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote
      Src: /src/brpc/src/bthread/task_group.cpp:885,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 881
    functionDepth: 2
    functionLinenumber: 881
    functionLinenumberEnd: 886
    functionName: bthread::TaskGroup::flush_nosignal_tasks_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::flush_nosignal_tasks
    - bthread::TaskGroup::flush_nosignal_tasks_remote
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_general()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:889,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:890,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 888
    functionDepth: 3
    functionLinenumber: 888
    functionLinenumberEnd: 891
    functionName: bthread::TaskGroup::ready_to_run_in_worker
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - bthread::TaskGroup::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_in_worker(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:894,1
    - Dst: _control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:896,1
    - Dst: bthread::TaskGroup::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:899,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 900
      start: 893
    functionDepth: 2
    functionLinenumber: 893
    functionLinenumberEnd: 900
    functionName: bthread::TaskGroup::ready_to_run_in_worker_ignoresignal
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - _control::_task_tracer::set_status
    - bthread::TaskGroup::push_rq
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_in_worker_ignoresignal(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:903,1
    - Dst: _control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:905,1
    - Dst: bthread::TaskGroup::control
      Src: /src/brpc/src/bthread/task_group.cpp:908,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 909
      start: 902
    functionDepth: 1
    functionLinenumber: 902
    functionLinenumberEnd: 909
    functionName: bthread::TaskGroup::priority_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::control
    - static_cast<ReadyToRunArgs*>
    - _control::_task_tracer::set_status
    linkageType: ''
    returnType: void
    signature: void TaskGroup::priority_to_run(void* args_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:919,1
    - Dst: static_cast<const SleepArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:920,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/task_group.cpp:922,1
    - Dst: auto::control
      Src: /src/brpc/src/bthread/task_group.cpp:923,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 918
    functionDepth: 1
    functionLinenumber: 918
    functionLinenumberEnd: 924
    functionName: bthread::ready_to_run_from_timer_thread
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - auto::control
    - CHECK
    - static_cast<const SleepArgs*>
    - auto::tag
    linkageType: ''
    returnType: void
    signature: void ready_to_run_from_timer_thread(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SleepArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:930,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:933,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:937,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_group.cpp:939,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:944,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:949,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:951,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:960,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:968,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 926
    functionDepth: 1
    functionLinenumber: 926
    functionLinenumberEnd: 970
    functionName: bthread::TaskGroup::_add_sleep_event
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::_control::_task_tracer::set_status
    - BAIDU_SCOPED_LOCK
    - static_cast<SleepArgs*>
    - get_version
    - butil::microseconds_from_now
    - get_global_timer_thread
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: void
    signature: void TaskGroup::_add_sleep_event(void* void_args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::yield
      Src: /src/brpc/src/bthread/task_group.cpp:975,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:981,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:981,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:982,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:983,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - pg
    - timeout_us
    argTypes:
    - TaskGroup**
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 973
    functionDepth: 2
    functionLinenumber: 973
    functionLinenumberEnd: 1004
    functionName: bthread::TaskGroup::usleep
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 14
    functionsReached:
    - TaskGroup*::set_remained
    - bthread::TaskGroup::yield
    - TaskGroup*::current_tid
    - TaskGroup*::current_task
    - bthread::TaskGroup::sched
    linkageType: ''
    returnType: int
    signature: int TaskGroup::usleep(TaskGroup** pg, uint64_t timeout_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1011,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1015,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1016,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/task_group.cpp:1018,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - tid
    - pw
    - sleep_id
    argTypes:
    - bthread_t
    - ButexWaiter**
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1025
      start: 1009
    functionDepth: 1
    functionLinenumber: 1009
    functionLinenumberEnd: 1025
    functionName: bthread::interrupt_and_consume_waiters
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - bthread::get_version
    - TaskMeta*::current_waiter::exchange
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int interrupt_and_consume_waiters(\n    bthread_t tid, ButexWaiter**
      pw, uint64_t* sleep_id)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1028,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1030,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1031,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/task_group.cpp:1034,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - tid
    - w
    argTypes:
    - bthread_t
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1039
      start: 1027
    functionDepth: 1
    functionLinenumber: 1027
    functionLinenumberEnd: 1039
    functionName: bthread::set_butex_waiter
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - bthread::get_version
    - TaskMeta*::current_waiter::store
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int set_butex_waiter(bthread_t tid, ButexWaiter* w)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: interrupt_and_consume_waiters
      Src: /src/brpc/src/bthread/task_group.cpp:1052,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:1057,1
    - Dst: erase_from_butex_because_of_interruption
      Src: /src/brpc/src/bthread/task_group.cpp:1059,1
    - Dst: set_butex_waiter
      Src: /src/brpc/src/bthread/task_group.cpp:1062,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:1064,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1068,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1070,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1072,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/task_group.cpp:1077,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 3
    argNames:
    - tid
    - c
    - tag
    argTypes:
    - bthread_t
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1048
    functionDepth: 1
    functionLinenumber: 1048
    functionLinenumberEnd: 1082
    functionName: bthread::TaskGroup::interrupt
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - erase_from_butex_because_of_interruption
    - interrupt_and_consume_waiters
    - set_butex_waiter
    - TaskControl*::choose_one_group
    - CHECK
    - bthread::TaskGroup::address_meta
    - get_global_timer_thread
    - LOG
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: int
    signature: int TaskGroup::interrupt(bthread_t tid, TaskControl* c, bthread_tag_t
      tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:1086,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:1087,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:1088,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1084
    functionDepth: 1
    functionLinenumber: 1084
    functionLinenumberEnd: 1089
    functionName: bthread::TaskGroup::yield
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - TaskGroup*::set_remained
    - bthread::TaskGroup::sched
    - TaskGroup*::tag
    linkageType: ''
    returnType: void
    signature: void TaskGroup::yield(TaskGroup** pg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1092,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1097,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1112,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:1141,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 32
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1091
    functionDepth: 1
    functionLinenumber: 1091
    functionLinenumberEnd: 1153
    functionName: bthread::print_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - bthread::get_version
    - butil::cpuwide_time_ns
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void print_task(std::ostream& os, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/bthread/singleton_on_bthread_once.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: bthread::GetLeakySingleton<T>::create_leaky_singleton
    functionSourceFile: /src/brpc/src/bthread/singleton_on_bthread_once.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void GetLeakySingleton<T>::create_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once
      Src: /src/brpc/src/bthread/singleton_on_bthread_once.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 52
    functionDepth: 6
    functionLinenumber: 52
    functionLinenumberEnd: 57
    functionName: bthread::get_leaky_singleton
    functionSourceFile: /src/brpc/src/bthread/singleton_on_bthread_once.h
    functionUses: 0
    functionsReached:
    - bthread_once
    linkageType: ''
    returnType: T
    signature: T * get_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/bthread/singleton_on_bthread_once.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: bthread::GetLeakySingleton<T>::create_leaky_singleton
    functionSourceFile: /src/brpc/src/bthread/singleton_on_bthread_once.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void GetLeakySingleton<T>::create_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_once
      Src: /src/brpc/src/bthread/singleton_on_bthread_once.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 52
    functionDepth: 6
    functionLinenumber: 52
    functionLinenumberEnd: 57
    functionName: bthread::get_leaky_singleton
    functionSourceFile: /src/brpc/src/bthread/singleton_on_bthread_once.h
    functionUses: 0
    functionsReached:
    - bthread_once
    linkageType: ''
    returnType: T
    signature: T * get_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/stack.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: bthread::get_stack_count
    functionSourceFile: /src/brpc/src/bthread/stack.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_stack_count(void*)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: getpagesize
      Src: /src/brpc/src/bthread/stack.cpp:57,1
    - Dst: std::max
      Src: /src/brpc/src/bthread/stack.cpp:64,1
    - Dst: malloc
      Src: /src/brpc/src/bthread/stack.cpp:68,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/stack.cpp:70,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/stack.cpp:74,1
    - Dst: RunningOnValgrind
      Src: /src/brpc/src/bthread/stack.cpp:78,1
    - Dst: VALGRIND_STACK_REGISTER
      Src: /src/brpc/src/bthread/stack.cpp:79,1
    - Dst: std::max
      Src: /src/brpc/src/bthread/stack.cpp:88,1
    - Dst: mmap
      Src: /src/brpc/src/bthread/stack.cpp:92,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/stack.cpp:96,1
    - Dst: load
      Src: /src/brpc/src/bthread/stack.cpp:98,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/bthread/stack.cpp:106,1
    - Dst: mprotect
      Src: /src/brpc/src/bthread/stack.cpp:111,1
    - Dst: munmap
      Src: /src/brpc/src/bthread/stack.cpp:112,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/stack.cpp:113,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/stack.cpp:119,1
    - Dst: RunningOnValgrind
      Src: /src/brpc/src/bthread/stack.cpp:123,1
    - Dst: VALGRIND_STACK_REGISTER
      Src: /src/brpc/src/bthread/stack.cpp:124,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 3
    argNames:
    - s
    - stacksize_in
    - guardsize_in
    argTypes:
    - StackStorage*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 131
    functionName: bthread::allocate_stack_storage
    functionSourceFile: /src/brpc/src/bthread/stack.cpp
    functionUses: 2
    functionsReached:
    - std::max
    - VALGRIND_STACK_REGISTER
    - mprotect
    - LOG_ONCE
    - munmap
    - load
    - fetch_add
    - malloc
    - RunningOnValgrind
    - getpagesize
    - mmap
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int allocate_stack_storage(StackStorage* s, int stacksize_in, int guardsize_in)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RunningOnValgrind
      Src: /src/brpc/src/bthread/stack.cpp:134,1
    - Dst: VALGRIND_STACK_DEREGISTER
      Src: /src/brpc/src/bthread/stack.cpp:135,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/stack.cpp:141,1
    - Dst: free
      Src: /src/brpc/src/bthread/stack.cpp:143,1
    - Dst: munmap
      Src: /src/brpc/src/bthread/stack.cpp:145,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - StackStorage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 147
    functionName: bthread::deallocate_stack_storage
    functionSourceFile: /src/brpc/src/bthread/stack.cpp
    functionUses: 1
    functionsReached:
    - free
    - munmap
    - RunningOnValgrind
    - VALGRIND_STACK_DEREGISTER
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void deallocate_stack_storage(StackStorage* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/stack.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: bthread::get_stack_count
    functionSourceFile: /src/brpc/src/bthread/stack.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_stack_count(void*)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: getpagesize
      Src: /src/brpc/src/bthread/stack.cpp:57,1
    - Dst: std::max
      Src: /src/brpc/src/bthread/stack.cpp:64,1
    - Dst: malloc
      Src: /src/brpc/src/bthread/stack.cpp:68,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/stack.cpp:70,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/stack.cpp:74,1
    - Dst: RunningOnValgrind
      Src: /src/brpc/src/bthread/stack.cpp:78,1
    - Dst: VALGRIND_STACK_REGISTER
      Src: /src/brpc/src/bthread/stack.cpp:79,1
    - Dst: std::max
      Src: /src/brpc/src/bthread/stack.cpp:88,1
    - Dst: mmap
      Src: /src/brpc/src/bthread/stack.cpp:92,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/stack.cpp:96,1
    - Dst: load
      Src: /src/brpc/src/bthread/stack.cpp:98,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/bthread/stack.cpp:106,1
    - Dst: mprotect
      Src: /src/brpc/src/bthread/stack.cpp:111,1
    - Dst: munmap
      Src: /src/brpc/src/bthread/stack.cpp:112,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/stack.cpp:113,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/stack.cpp:119,1
    - Dst: RunningOnValgrind
      Src: /src/brpc/src/bthread/stack.cpp:123,1
    - Dst: VALGRIND_STACK_REGISTER
      Src: /src/brpc/src/bthread/stack.cpp:124,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 3
    argNames:
    - s
    - stacksize_in
    - guardsize_in
    argTypes:
    - StackStorage*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 131
    functionName: bthread::allocate_stack_storage
    functionSourceFile: /src/brpc/src/bthread/stack.cpp
    functionUses: 2
    functionsReached:
    - std::max
    - VALGRIND_STACK_REGISTER
    - mprotect
    - LOG_ONCE
    - munmap
    - load
    - fetch_add
    - malloc
    - RunningOnValgrind
    - getpagesize
    - mmap
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int allocate_stack_storage(StackStorage* s, int stacksize_in, int guardsize_in)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RunningOnValgrind
      Src: /src/brpc/src/bthread/stack.cpp:134,1
    - Dst: VALGRIND_STACK_DEREGISTER
      Src: /src/brpc/src/bthread/stack.cpp:135,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/stack.cpp:141,1
    - Dst: free
      Src: /src/brpc/src/bthread/stack.cpp:143,1
    - Dst: munmap
      Src: /src/brpc/src/bthread/stack.cpp:145,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - StackStorage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 147
    functionName: bthread::deallocate_stack_storage
    functionSourceFile: /src/brpc/src/bthread/stack.cpp
    functionUses: 1
    functionsReached:
    - free
    - munmap
    - RunningOnValgrind
    - VALGRIND_STACK_DEREGISTER
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void deallocate_stack_storage(StackStorage* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 120
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::ListOfABAFreeId
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::ListOfABAFreeId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 133
    functionName: ListOfABAFreeId<Id, IdTraits>::~ListOfABAFreeId()
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::~ListOfABAFreeId()
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 145
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::forward_index()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:151,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:153,1
    - Dst: bthread::exists
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:155,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::gc
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:168,1
    - Dst: IdBlock::IdBlock
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:197,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:220,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:221,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:224,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:226,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 45
    argCount: 1
    argNames:
    - id
    argTypes:
    - Id
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 228
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::add
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached:
    - bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
    - IdBlock::IdBlock
    - arraysize
    - bthread::exists
    - bthread::ListOfABAFreeId<Id, IdTraits>::gc
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::add(Id id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IdBlock::IdBlock
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:232,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::for_each
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:248,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:250,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:254,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::free_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:262,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::free_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:271,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 279
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::gc
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 1
    functionsReached:
    - bthread::ListOfABAFreeId<Id, IdTraits>::free_list
    - bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
    - bthread::ListOfABAFreeId<Id, IdTraits>::for_each
    - IdBlock::IdBlock
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::gc()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IdBlock::IdBlock
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:288,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - block_list
    - id
    argTypes:
    - TempIdBlock*
    - Id
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 299
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 1
    functionsReached:
    - IdBlock::IdBlock
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::add_to_temp_list(TempIdBlock* block_list,
      Id id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::exists
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:306,1
    - Dst: fn
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:307,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - Fn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 315
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::for_each
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 1
    functionsReached:
    - bthread::exists
    - fn
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::for_each(const Fn& fn)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::exists
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:322,1
    - Dst: fn
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:323,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - Fn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 327
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::apply
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached:
    - bthread::exists
    - fn
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::apply(const Fn& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - IdBlock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 336
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::free_list
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::free_list(IdBlock* p)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - cnts
    - n
    argTypes:
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 346
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::get_sizes
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ListOfABAFreeId<Id, IdTraits>::get_sizes(size_t* cnts, size_t
      n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 120
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::ListOfABAFreeId
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::ListOfABAFreeId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 133
    functionName: ListOfABAFreeId<Id, IdTraits>::~ListOfABAFreeId()
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::~ListOfABAFreeId()
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 145
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::forward_index()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:151,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:153,1
    - Dst: bthread::exists
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:155,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::gc
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:168,1
    - Dst: IdBlock::IdBlock
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:197,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:220,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:221,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:224,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:226,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 45
    argCount: 1
    argNames:
    - id
    argTypes:
    - Id
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 228
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::add
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached:
    - bthread::ListOfABAFreeId<Id, IdTraits>::forward_index
    - IdBlock::IdBlock
    - arraysize
    - bthread::exists
    - bthread::ListOfABAFreeId<Id, IdTraits>::gc
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::add(Id id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IdBlock::IdBlock
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:232,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::for_each
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:248,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:250,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:254,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::free_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:262,1
    - Dst: bthread::ListOfABAFreeId<Id, IdTraits>::free_list
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:271,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 279
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::gc
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 2
    functionsReached:
    - bthread::ListOfABAFreeId<Id, IdTraits>::free_list
    - bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
    - bthread::ListOfABAFreeId<Id, IdTraits>::for_each
    - IdBlock::IdBlock
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::gc()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IdBlock::IdBlock
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:288,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - block_list
    - id
    argTypes:
    - TempIdBlock*
    - Id
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 299
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 2
    functionsReached:
    - IdBlock::IdBlock
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::add_to_temp_list(TempIdBlock* block_list,
      Id id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::exists
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:306,1
    - Dst: fn
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:307,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - Fn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 315
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::for_each
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 2
    functionsReached:
    - bthread::exists
    - fn
    linkageType: ''
    returnType: int
    signature: int ListOfABAFreeId<Id, IdTraits>::for_each(const Fn& fn)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::exists
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:322,1
    - Dst: fn
      Src: /src/brpc/src/bthread/list_of_abafree_id.h:323,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - Fn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 327
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::apply
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached:
    - bthread::exists
    - fn
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::apply(const Fn& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - IdBlock*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 336
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::free_list
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListOfABAFreeId<Id, IdTraits>::free_list(IdBlock* p)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - cnts
    - n
    argTypes:
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 346
    functionName: bthread::ListOfABAFreeId<Id, IdTraits>::get_sizes
    functionSourceFile: /src/brpc/src/bthread/list_of_abafree_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ListOfABAFreeId<Id, IdTraits>::get_sizes(size_t* cnts, size_t
      n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: g_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: bthread::run_worker_startfn
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - g_worker_startfn
    linkageType: ''
    returnType: void
    signature: void run_worker_startfn()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: g_tagged_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: bthread::run_tagged_worker_startfn
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - g_tagged_worker_startfn
    linkageType: ''
    returnType: void
    signature: void run_tagged_worker_startfn(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - _c
    - _t
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: bthread::WorkerThreadArgs
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkerThreadArgs(TaskControl* _c, bthread_tag_t _t)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:75,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/task_control.cpp:77,1
    - Dst: static_cast<WorkerThreadArgs*>
      Src: /src/brpc/src/bthread/task_control.cpp:80,1
    - Dst: run_tagged_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:84,1
    - Dst: auto::create_group
      Src: /src/brpc/src/bthread/task_control.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:89,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:89,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/task_control.cpp:93,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/bthread/task_control.cpp:96,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:97,1
    - Dst: auto::_next_worker_id::fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:98,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bthread/task_control.cpp:99,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/bthread/task_control.cpp:99,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:101,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:102,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:102,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:105,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:105,1
    - Dst: TaskGroup*::run_main_task
      Src: /src/brpc/src/bthread/task_control.cpp:107,1
    - Dst: TaskGroup*::main_stat
      Src: /src/brpc/src/bthread/task_control.cpp:109,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:110,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:111,1
    - Dst: TaskGroup*::current_uptime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:112,1
    - Dst: TaskGroup*::destroy_self
      Src: /src/brpc/src/bthread/task_control.cpp:114,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:116,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 118
    functionName: bthread::TaskControl::worker_thread
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - auto::tag_nworkers
    - static_cast<WorkerThreadArgs*>
    - TaskGroup*::tag
    - run_worker_startfn
    - TaskGroup*::main_stat
    - std::string::c_str
    - auto::_next_worker_id::fetch_add
    - TaskGroup*::current_uptime_ns
    - pthread_self
    - LOG
    - butil::string_printf
    - run_tagged_worker_startfn
    - TaskGroup*::destroy_self
    - TaskGroup*::main_tid
    - TaskGroup*::run_main_task
    - butil::PlatformThread::SetName
    - logging::ComlogInitializer::ComlogInitializer
    - syscall
    - auto::create_group
    linkageType: ''
    returnType: void
    signature: void * TaskControl::worker_thread(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup::TaskGroup
      Src: /src/brpc/src/bthread/task_control.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:123,1
    - Dst: TaskGroup*::init
      Src: /src/brpc/src/bthread/task_control.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:127,1
    - Dst: bthread::TaskControl::_add_group
      Src: /src/brpc/src/bthread/task_control.cpp:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 136
    functionName: bthread::TaskControl::create_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::init
    - TaskGroup::TaskGroup
    - LOG
    - bthread::TaskControl::_add_group
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * TaskControl::create_group(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskControl*::print_rq_sizes
      Src: /src/brpc/src/bthread/task_control.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - os
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: bthread::print_rq_sizes_in_the_tc
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::print_rq_sizes
    linkageType: ''
    returnType: void
    signature: void print_rq_sizes_in_the_tc(std::ostream &os, void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskControl*>
      Src: /src/brpc/src/bthread/task_control.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 145
    functionName: bthread::get_cumulated_worker_time_from_this
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskControl*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_worker_time_from_this(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - _c
    - _t
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: bthread::CumulatedWithTagArgs
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CumulatedWithTagArgs(TaskControl* _c, bthread_tag_t _t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CumulatedWithTagArgs*>
      Src: /src/brpc/src/bthread/task_control.cpp:154,1
    - Dst: auto::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 158
    functionName: bthread::get_cumulated_worker_time_from_this_with_tag
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CumulatedWithTagArgs*>
    - auto::get_cumulated_worker_time
    linkageType: ''
    returnType: double
    signature: double get_cumulated_worker_time_from_this_with_tag(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskControl*>
      Src: /src/brpc/src/bthread/task_control.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 162
    functionName: bthread::get_cumulated_switch_count_from_this
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskControl*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_cumulated_switch_count_from_this(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskControl*>
      Src: /src/brpc/src/bthread/task_control.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 166
    functionName: bthread::get_cumulated_signal_count_from_this
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskControl*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_cumulated_signal_count_from_this(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 190
    functionName: bthread::TaskControl::TaskControl
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskControl::TaskControl()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:198,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:205,1
    - Dst: std::to_string
      Src: /src/brpc/src/bthread/task_control.cpp:206,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:207,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:207,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:208,1
    - Dst: CumulatedWithTagArgs::CumulatedWithTagArgs
      Src: /src/brpc/src/bthread/task_control.cpp:209,1
    - Dst: bvar::PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bthread/task_control.cpp:208,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:210,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
      Src: /src/brpc/src/bthread/task_control.cpp:210,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:212,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:212,1
    - Dst: bthread::TaskControl::init
      Src: /src/brpc/src/bthread/task_control.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:214,1
    - Dst: get_or_create_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:220,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:221,1
    - Dst: Init
      Src: /src/brpc/src/bthread/task_control.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:227,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:232,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:234,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:235,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:238,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:242,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:243,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:244,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:245,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:251,1
    - Dst: usleep
      Src: /src/brpc/src/bthread/task_control.cpp:252,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:258,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 50
    argCount: 1
    argNames:
    - concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 261
    functionName: bthread::TaskControl::init
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - bvar::PassiveStatus<double>::PassiveStatus<double>
    - get_or_create_global_timer_thread
    - pthread_create
    - Init
    - load
    - resize
    - bthread::TaskControl::init
    - CumulatedWithTagArgs::CumulatedWithTagArgs
    - push_back
    - expose
    - store
    - bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
    - usleep
    - std::to_string
    - PLOG
    - LOG
    - bvar::Adder<int64_t>::Adder<int64_t>
    - WorkerThreadArgs::WorkerThreadArgs
    linkageType: ''
    returnType: int
    signature: int TaskControl::init(int concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:268,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:272,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:276,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:277,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:278,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:282,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/task_control.cpp:283,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:288,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:288,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:289,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - num
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 290
    functionName: bthread::TaskControl::add_workers
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - load
    - fetch_add
    - resize
    - PLOG
    - fetch_sub
    - WorkerThreadArgs::WorkerThreadArgs
    linkageType: ''
    returnType: int
    signature: int TaskControl::add_workers(int num, bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_control.cpp:293,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:294,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:295,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bthread/task_control.cpp:297,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_control.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: bthread::TaskControl::choose_one_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand_less_than
    - tag_ngroup
    - CHECK
    - tag_group
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * TaskControl::choose_one_group(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Trace
      Src: /src/brpc/src/bthread/task_control.cpp:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 306
    functionName: bthread::TaskControl::stack_trace
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - Trace
    linkageType: ''
    returnType: void
    signature: void TaskControl::stack_trace(std::ostream& os, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Trace
      Src: /src/brpc/src/bthread/task_control.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 310
    functionName: bthread::TaskControl::stack_trace
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - Trace
    linkageType: ''
    returnType: std::string
    signature: std::string TaskControl::stack_trace(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/task_control.cpp:318,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/src/bthread/task_control.cpp:318,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:322,1
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:324,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:325,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:325,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:326,1
    - Dst: stop
      Src: /src/brpc/src/bthread/task_control.cpp:330,1
    - Dst: pthread_kill
      Src: /src/brpc/src/bthread/task_control.cpp:338,1
    - Dst: interrupt_pthread
      Src: /src/brpc/src/bthread/task_control.cpp:340,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/task_control.cpp:345,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 315
    functionDepth: 7
    functionLinenumber: 315
    functionLinenumberEnd: 347
    functionName: bthread::TaskControl::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - end
    - stop
    - pthread_kill
    - pthread_join
    - BAIDU_SCOPED_LOCK
    - stop_and_join_epoll_threads
    - CHECK_EQ
    - store
    - interrupt_pthread
    - begin
    - std::for_each
    linkageType: ''
    returnType: void
    signature: void TaskControl::stop_and_join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/bthread/task_control.cpp:352,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:353,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:354,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:355,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:356,1
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/task_control.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 349
    functionDepth: 6
    functionLinenumber: 349
    functionLinenumberEnd: 359
    functionName: TaskControl::~TaskControl()
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - exchange
    - stop_and_join
    - hide
    linkageType: ''
    returnType: void
    signature: void TaskControl::~TaskControl()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_control.cpp:362,1
    - Dst: TaskGroup*::set_tag
      Src: /src/brpc/src/bthread/task_control.cpp:369,1
    - Dst: TaskGroup*::set_pl
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:371,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:374,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/task_control.cpp:376,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - g
    - tag
    argTypes:
    - TaskGroup*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 381
    functionName: bthread::TaskControl::_add_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - TaskGroup*::set_pl
    - pthread_numeric_id
    - load
    - TaskGroup*::set_tag
    - __builtin_expect
    - store
    - std::unique_lock::unlock
    - fmix64
    linkageType: ''
    returnType: int
    signature: int TaskControl::_add_group(TaskGroup* g, bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 385
    functionName: bthread::TaskControl::delete_task_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskControl::delete_task_group(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:389,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:393,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:399,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:400,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:401,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:402,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:416,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:430,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_control.cpp:432,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - g
    argTypes:
    - TaskGroup*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 435
    functionName: bthread::TaskControl::_destroy_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_ngroup
    - BAIDU_SCOPED_LOCK
    - TaskGroup*::tag
    - butil::microseconds_from_now
    - get_global_timer_thread
    - LOG
    - tag_group
    linkageType: ''
    returnType: int
    signature: int TaskControl::_destroy_group(TaskGroup* g)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/task_control.cpp:438,1
    - Dst: steal
      Src: /src/brpc/src/bthread/task_control.cpp:440,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:446,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:454,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_control.cpp:459,1
    - Dst: TaskGroup*::_remote_rq::pop
      Src: /src/brpc/src/bthread/task_control.cpp:463,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 3
    argNames:
    - tid
    - seed
    - offset
    argTypes:
    - bthread_t*
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 471
    functionName: bthread::TaskControl::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag
    - steal
    - tag_ngroup
    - TaskGroup*::_remote_rq::pop
    - TaskGroup*::_rq::steal
    - tag_group
    linkageType: ''
    returnType: bool
    signature: bool TaskControl::steal_task(bthread_t* tid, size_t* seed, size_t offset)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: tag_pl
      Src: /src/brpc/src/bthread/task_control.cpp:484,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:485,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:485,1
    - Dst: signal
      Src: /src/brpc/src/bthread/task_control.cpp:486,1
    - Dst: signal
      Src: /src/brpc/src/bthread/task_control.cpp:492,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:497,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:499,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:500,1
    - Dst: bthread::TaskControl::add_workers
      Src: /src/brpc/src/bthread/task_control.cpp:501,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 2
    argNames:
    - num_task
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 473
    functionDepth: 2
    functionLinenumber: 473
    functionLinenumberEnd: 504
    functionName: bthread::TaskControl::signal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_pl
    - signal
    - pthread_numeric_id
    - load
    - BAIDU_SCOPED_LOCK
    - fmix64
    - bthread::TaskControl::add_workers
    linkageType: ''
    returnType: void
    signature: void TaskControl::signal_task(int num_task, bthread_tag_t tag)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:508,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:508,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:508,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:509,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:517,1
    - Dst: _rq::volatile_size
      Src: /src/brpc/src/bthread/task_control.cpp:518,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:527,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:529,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:530,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:531,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:536,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:538,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:539,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:540,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:542,1
    - Dst: TaskControl::get_cumulated_switch_count
      Src: /src/brpc/src/bthread/task_control.cpp:547,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:549,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:550,1
    - Dst: TaskControl::get_cumulated_signal_count
      Src: /src/brpc/src/bthread/task_control.cpp:558,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:560,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:561,1
    - Dst: TaskControl::create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.cpp:569,1
    - Dst: lock
      Src: /src/brpc/src/bthread/task_control.cpp:571,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:572,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/bthread/task_control.cpp:574,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:575,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_control.cpp:578,1
    - Dst: bvar::LatencyRecorder*::expose
      Src: /src/brpc/src/bthread/task_control.cpp:580,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 47
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 506
    functionDepth: 2
    functionLinenumber: 506
    functionLinenumberEnd: 585
    functionName: bthread::TaskControl::print_rq_sizes
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - TaskControl::get_cumulated_signal_count
    - cumulated_cputime_ns
    - lock
    - tag_group
    - _rq::volatile_size
    - bvar::LatencyRecorder::LatencyRecorder
    - TaskControl::get_cumulated_worker_time
    - store
    - TaskControl::create_exposed_pending_time
    - bthread::TaskControl::for_each_task_group
    - bvar::LatencyRecorder*::expose
    - tag_ngroup
    - BAIDU_SCOPED_LOCK
    - TaskControl::get_cumulated_switch_count
    - begin
    - end
    - load
    - std::for_each
    linkageType: ''
    returnType: void
    signature: void TaskControl::print_rq_sizes(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: g_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: bthread::run_worker_startfn
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - g_worker_startfn
    linkageType: ''
    returnType: void
    signature: void run_worker_startfn()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: g_tagged_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: bthread::run_tagged_worker_startfn
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - g_tagged_worker_startfn
    linkageType: ''
    returnType: void
    signature: void run_tagged_worker_startfn(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - _c
    - _t
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: bthread::WorkerThreadArgs
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WorkerThreadArgs(TaskControl* _c, bthread_tag_t _t)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:75,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/task_control.cpp:77,1
    - Dst: static_cast<WorkerThreadArgs*>
      Src: /src/brpc/src/bthread/task_control.cpp:80,1
    - Dst: run_tagged_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:84,1
    - Dst: auto::create_group
      Src: /src/brpc/src/bthread/task_control.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:89,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:89,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/task_control.cpp:93,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/bthread/task_control.cpp:96,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:97,1
    - Dst: auto::_next_worker_id::fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:98,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/bthread/task_control.cpp:99,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/bthread/task_control.cpp:99,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:101,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:102,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:102,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:105,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:105,1
    - Dst: TaskGroup*::run_main_task
      Src: /src/brpc/src/bthread/task_control.cpp:107,1
    - Dst: TaskGroup*::main_stat
      Src: /src/brpc/src/bthread/task_control.cpp:109,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:110,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:111,1
    - Dst: TaskGroup*::current_uptime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:112,1
    - Dst: TaskGroup*::destroy_self
      Src: /src/brpc/src/bthread/task_control.cpp:114,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:116,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 118
    functionName: bthread::TaskControl::worker_thread
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - auto::tag_nworkers
    - static_cast<WorkerThreadArgs*>
    - TaskGroup*::tag
    - run_worker_startfn
    - TaskGroup*::main_stat
    - std::string::c_str
    - auto::_next_worker_id::fetch_add
    - TaskGroup*::current_uptime_ns
    - pthread_self
    - LOG
    - butil::string_printf
    - run_tagged_worker_startfn
    - TaskGroup*::destroy_self
    - TaskGroup*::main_tid
    - TaskGroup*::run_main_task
    - butil::PlatformThread::SetName
    - logging::ComlogInitializer::ComlogInitializer
    - syscall
    - auto::create_group
    linkageType: ''
    returnType: void
    signature: void * TaskControl::worker_thread(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup::TaskGroup
      Src: /src/brpc/src/bthread/task_control.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:123,1
    - Dst: TaskGroup*::init
      Src: /src/brpc/src/bthread/task_control.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:127,1
    - Dst: bthread::TaskControl::_add_group
      Src: /src/brpc/src/bthread/task_control.cpp:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 136
    functionName: bthread::TaskControl::create_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::init
    - TaskGroup::TaskGroup
    - LOG
    - bthread::TaskControl::_add_group
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * TaskControl::create_group(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskControl*::print_rq_sizes
      Src: /src/brpc/src/bthread/task_control.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - os
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: bthread::print_rq_sizes_in_the_tc
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::print_rq_sizes
    linkageType: ''
    returnType: void
    signature: void print_rq_sizes_in_the_tc(std::ostream &os, void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskControl*>
      Src: /src/brpc/src/bthread/task_control.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 145
    functionName: bthread::get_cumulated_worker_time_from_this
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskControl*>
    linkageType: ''
    returnType: double
    signature: double get_cumulated_worker_time_from_this(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - _c
    - _t
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: bthread::CumulatedWithTagArgs
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CumulatedWithTagArgs(TaskControl* _c, bthread_tag_t _t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CumulatedWithTagArgs*>
      Src: /src/brpc/src/bthread/task_control.cpp:154,1
    - Dst: auto::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 158
    functionName: bthread::get_cumulated_worker_time_from_this_with_tag
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CumulatedWithTagArgs*>
    - auto::get_cumulated_worker_time
    linkageType: ''
    returnType: double
    signature: double get_cumulated_worker_time_from_this_with_tag(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskControl*>
      Src: /src/brpc/src/bthread/task_control.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 162
    functionName: bthread::get_cumulated_switch_count_from_this
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskControl*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_cumulated_switch_count_from_this(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskControl*>
      Src: /src/brpc/src/bthread/task_control.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 166
    functionName: bthread::get_cumulated_signal_count_from_this
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TaskControl*>
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_cumulated_signal_count_from_this(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 190
    functionName: bthread::TaskControl::TaskControl
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskControl::TaskControl()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:198,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:205,1
    - Dst: std::to_string
      Src: /src/brpc/src/bthread/task_control.cpp:206,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:207,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:207,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:208,1
    - Dst: CumulatedWithTagArgs::CumulatedWithTagArgs
      Src: /src/brpc/src/bthread/task_control.cpp:209,1
    - Dst: bvar::PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bthread/task_control.cpp:208,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:210,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
      Src: /src/brpc/src/bthread/task_control.cpp:210,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:212,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:212,1
    - Dst: bthread::TaskControl::init
      Src: /src/brpc/src/bthread/task_control.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:214,1
    - Dst: get_or_create_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:220,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:221,1
    - Dst: Init
      Src: /src/brpc/src/bthread/task_control.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:227,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:232,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:234,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:235,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:238,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:242,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:243,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:244,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:245,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:251,1
    - Dst: usleep
      Src: /src/brpc/src/bthread/task_control.cpp:252,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:258,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 50
    argCount: 1
    argNames:
    - concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 261
    functionName: bthread::TaskControl::init
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 2
    functionsReached:
    - bvar::PassiveStatus<double>::PassiveStatus<double>
    - get_or_create_global_timer_thread
    - pthread_create
    - Init
    - load
    - resize
    - bthread::TaskControl::init
    - CumulatedWithTagArgs::CumulatedWithTagArgs
    - push_back
    - expose
    - store
    - bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
    - usleep
    - std::to_string
    - PLOG
    - LOG
    - bvar::Adder<int64_t>::Adder<int64_t>
    - WorkerThreadArgs::WorkerThreadArgs
    linkageType: ''
    returnType: int
    signature: int TaskControl::init(int concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:268,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:272,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:276,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:277,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:278,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:282,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/task_control.cpp:283,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:288,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:288,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:289,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - num
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 290
    functionName: bthread::TaskControl::add_workers
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - load
    - fetch_add
    - resize
    - PLOG
    - fetch_sub
    - WorkerThreadArgs::WorkerThreadArgs
    linkageType: ''
    returnType: int
    signature: int TaskControl::add_workers(int num, bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_control.cpp:293,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:294,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:295,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bthread/task_control.cpp:297,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_control.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: bthread::TaskControl::choose_one_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand_less_than
    - tag_ngroup
    - CHECK
    - tag_group
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * TaskControl::choose_one_group(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Trace
      Src: /src/brpc/src/bthread/task_control.cpp:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 306
    functionName: bthread::TaskControl::stack_trace
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - Trace
    linkageType: ''
    returnType: void
    signature: void TaskControl::stack_trace(std::ostream& os, bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Trace
      Src: /src/brpc/src/bthread/task_control.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 310
    functionName: bthread::TaskControl::stack_trace
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - Trace
    linkageType: ''
    returnType: std::string
    signature: std::string TaskControl::stack_trace(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/task_control.cpp:318,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/src/bthread/task_control.cpp:318,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:322,1
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:324,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:325,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:325,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:326,1
    - Dst: stop
      Src: /src/brpc/src/bthread/task_control.cpp:330,1
    - Dst: pthread_kill
      Src: /src/brpc/src/bthread/task_control.cpp:338,1
    - Dst: interrupt_pthread
      Src: /src/brpc/src/bthread/task_control.cpp:340,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/task_control.cpp:345,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 315
    functionDepth: 7
    functionLinenumber: 315
    functionLinenumberEnd: 347
    functionName: bthread::TaskControl::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - end
    - stop
    - pthread_kill
    - pthread_join
    - BAIDU_SCOPED_LOCK
    - stop_and_join_epoll_threads
    - CHECK_EQ
    - store
    - interrupt_pthread
    - begin
    - std::for_each
    linkageType: ''
    returnType: void
    signature: void TaskControl::stop_and_join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/bthread/task_control.cpp:352,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:353,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:354,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:355,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:356,1
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/task_control.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 349
    functionDepth: 6
    functionLinenumber: 349
    functionLinenumberEnd: 359
    functionName: TaskControl::~TaskControl()
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - exchange
    - stop_and_join
    - hide
    linkageType: ''
    returnType: void
    signature: void TaskControl::~TaskControl()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_control.cpp:362,1
    - Dst: TaskGroup*::set_tag
      Src: /src/brpc/src/bthread/task_control.cpp:369,1
    - Dst: TaskGroup*::set_pl
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:371,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:374,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/task_control.cpp:376,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - g
    - tag
    argTypes:
    - TaskGroup*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 381
    functionName: bthread::TaskControl::_add_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::set_pl
    - pthread_numeric_id
    - load
    - TaskGroup*::set_tag
    - __builtin_expect
    - store
    - std::unique_lock::unlock
    - fmix64
    linkageType: ''
    returnType: int
    signature: int TaskControl::_add_group(TaskGroup* g, bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 385
    functionName: bthread::TaskControl::delete_task_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskControl::delete_task_group(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:389,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:393,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:399,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:400,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:401,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:402,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:416,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:430,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_control.cpp:432,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - g
    argTypes:
    - TaskGroup*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 435
    functionName: bthread::TaskControl::_destroy_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_ngroup
    - BAIDU_SCOPED_LOCK
    - TaskGroup*::tag
    - butil::microseconds_from_now
    - get_global_timer_thread
    - LOG
    - tag_group
    linkageType: ''
    returnType: int
    signature: int TaskControl::_destroy_group(TaskGroup* g)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tag
      Src: /src/brpc/src/bthread/task_control.cpp:438,1
    - Dst: steal
      Src: /src/brpc/src/bthread/task_control.cpp:440,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:446,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:454,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_control.cpp:459,1
    - Dst: TaskGroup*::_remote_rq::pop
      Src: /src/brpc/src/bthread/task_control.cpp:463,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 3
    argNames:
    - tid
    - seed
    - offset
    argTypes:
    - bthread_t*
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 471
    functionName: bthread::TaskControl::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag
    - steal
    - tag_ngroup
    - TaskGroup*::_remote_rq::pop
    - TaskGroup*::_rq::steal
    - tag_group
    linkageType: ''
    returnType: bool
    signature: bool TaskControl::steal_task(bthread_t* tid, size_t* seed, size_t offset)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: tag_pl
      Src: /src/brpc/src/bthread/task_control.cpp:484,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:485,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:485,1
    - Dst: signal
      Src: /src/brpc/src/bthread/task_control.cpp:486,1
    - Dst: signal
      Src: /src/brpc/src/bthread/task_control.cpp:492,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:497,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:499,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:500,1
    - Dst: bthread::TaskControl::add_workers
      Src: /src/brpc/src/bthread/task_control.cpp:501,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 2
    argNames:
    - num_task
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 473
    functionDepth: 2
    functionLinenumber: 473
    functionLinenumberEnd: 504
    functionName: bthread::TaskControl::signal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_pl
    - signal
    - pthread_numeric_id
    - load
    - BAIDU_SCOPED_LOCK
    - fmix64
    - bthread::TaskControl::add_workers
    linkageType: ''
    returnType: void
    signature: void TaskControl::signal_task(int num_task, bthread_tag_t tag)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:508,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:508,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:508,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:509,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:517,1
    - Dst: _rq::volatile_size
      Src: /src/brpc/src/bthread/task_control.cpp:518,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:527,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:529,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:530,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:531,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:536,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:538,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:539,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:540,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:542,1
    - Dst: TaskControl::get_cumulated_switch_count
      Src: /src/brpc/src/bthread/task_control.cpp:547,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:549,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:550,1
    - Dst: TaskControl::get_cumulated_signal_count
      Src: /src/brpc/src/bthread/task_control.cpp:558,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:560,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:561,1
    - Dst: TaskControl::create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.cpp:569,1
    - Dst: lock
      Src: /src/brpc/src/bthread/task_control.cpp:571,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:572,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/bthread/task_control.cpp:574,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:575,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_control.cpp:578,1
    - Dst: bvar::LatencyRecorder*::expose
      Src: /src/brpc/src/bthread/task_control.cpp:580,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 47
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 506
    functionDepth: 2
    functionLinenumber: 506
    functionLinenumberEnd: 585
    functionName: bthread::TaskControl::print_rq_sizes
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - TaskControl::get_cumulated_signal_count
    - cumulated_cputime_ns
    - lock
    - tag_group
    - _rq::volatile_size
    - bvar::LatencyRecorder::LatencyRecorder
    - TaskControl::get_cumulated_worker_time
    - store
    - TaskControl::create_exposed_pending_time
    - bthread::TaskControl::for_each_task_group
    - bvar::LatencyRecorder*::expose
    - tag_ngroup
    - BAIDU_SCOPED_LOCK
    - TaskControl::get_cumulated_switch_count
    - begin
    - end
    - load
    - std::for_each
    linkageType: ''
    returnType: void
    signature: void TaskControl::print_rq_sizes(std::ostream& os)
  - BBCount: 77
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/src/bthread/mutex.cpp:60,1
    - Dst: butil::MurmurHash3_x86_32
      Src: /src/brpc/src/bthread/mutex.cpp:89,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bthread/mutex.cpp:102,1
    - Dst: hash_code
      Src: /src/brpc/src/bthread/mutex.cpp:108,1
    - Dst: hash_code
      Src: /src/brpc/src/bthread/mutex.cpp:108,1
    - Dst: memcmp
      Src: /src/brpc/src/bthread/mutex.cpp:110,1
    - Dst: hash_code
      Src: /src/brpc/src/bthread/mutex.cpp:117,1
    - Dst: flush_to_disk
      Src: /src/brpc/src/bthread/mutex.cpp:157,1
    - Dst: append
      Src: /src/brpc/src/bthread/mutex.cpp:163,1
    - Dst: init
      Src: /src/brpc/src/bthread/mutex.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:165,1
    - Dst: init_if_needed
      Src: /src/brpc/src/bthread/mutex.cpp:172,1
    - Dst: seek
      Src: /src/brpc/src/bthread/mutex.cpp:174,1
    - Dst: destroy
      Src: /src/brpc/src/bthread/mutex.cpp:181,1
    - Dst: insert
      Src: /src/brpc/src/bthread/mutex.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/bthread/mutex.cpp:185,1
    - Dst: flush_to_disk
      Src: /src/brpc/src/bthread/mutex.cpp:186,1
    - Dst: empty
      Src: /src/brpc/src/bthread/mutex.cpp:194,1
    - Dst: size
      Src: /src/brpc/src/bthread/mutex.cpp:195,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/bthread/mutex.cpp:196,1
    - Dst: begin
      Src: /src/brpc/src/bthread/mutex.cpp:198,1
    - Dst: end
      Src: /src/brpc/src/bthread/mutex.cpp:198,1
    - Dst: ceil
      Src: /src/brpc/src/bthread/mutex.cpp:200,1
    - Dst: SampledContention*::destroy
      Src: /src/brpc/src/bthread/mutex.cpp:205,1
    - Dst: clear
      Src: /src/brpc/src/bthread/mutex.cpp:207,1
    - Dst: append
      Src: /src/brpc/src/bthread/mutex.cpp:208,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/bthread/mutex.cpp:208,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/bthread/mutex.cpp:216,1
    - Dst: open
      Src: /src/brpc/src/bthread/mutex.cpp:217,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/bthread/mutex.cpp:220,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:225,1
    - Dst: append
      Src: /src/brpc/src/bthread/mutex.cpp:229,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:234,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/bthread/mutex.cpp:240,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/bthread/mutex.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:242,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bthread/mutex.cpp:242,1
    - Dst: open
      Src: /src/brpc/src/bthread/mutex.cpp:252,1
    - Dst: c_str
      Src: /src/brpc/src/bthread/mutex.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:254,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/src/bthread/mutex.cpp:259,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:264,1
    - Dst: empty
      Src: /src/brpc/src/bthread/mutex.cpp:268,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bthread/mutex.cpp:292,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/mutex.cpp:304,1
    - Dst: dump_and_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:306,1
    - Dst: destroy
      Src: /src/brpc/src/bthread/mutex.cpp:310,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/mutex.cpp:315,1
    - Dst: BUTIL_STATIC_ATOMIC_INIT
      Src: /src/brpc/src/bthread/mutex.cpp:319,1
    - Dst: butil::static_atomic::load
      Src: /src/brpc/src/bthread/mutex.cpp:321,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:327,1
    - Dst: ContentionProfiler::ContentionProfiler
      Src: /src/brpc/src/bthread/mutex.cpp:342,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/mutex.cpp:344,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/bthread/mutex.cpp:348,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/mutex.cpp:362,1
    - Dst: ContentionProfiler*::init_if_needed
      Src: /src/brpc/src/bthread/mutex.cpp:366,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:372,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:376,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:448,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:450,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:452,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:454,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:456,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:459,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:464,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:465,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:466,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:467,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:468,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:470,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:475,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:476,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:477,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:478,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:479,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:484,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:487,1
    - Dst: sys_pthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.cpp:488,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:492,1
    - Dst: sys_pthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:493,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:497,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:498,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:502,1
    - Dst: sys_pthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.cpp:503,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:509,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:510,1
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:515,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:516,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/mutex.cpp:522,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:545,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/src/bthread/mutex.cpp:550,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:588,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:590,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/mutex.cpp:595,1
    - Dst: butil::static_atomic::fetch_add
      Src: /src/brpc/src/bthread/mutex.cpp:600,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:607,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:609,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:621,1
    - Dst: store
      Src: /src/brpc/src/bthread/mutex.cpp:622,1
    - Dst: butil::debug::StackTrace::FrameCount
      Src: /src/brpc/src/bthread/mutex.cpp:634,1
    - Dst: butil::local_pool_free_empty<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:642,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/src/bthread/mutex.cpp:644,1
    - Dst: butil::get_object<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:649,1
    - Dst: butil::debug::StackTrace::CopyAddressTo
      Src: /src/brpc/src/bthread/mutex.cpp:656,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/mutex.cpp:656,1
    - Dst: auto::submit
      Src: /src/brpc/src/bthread/mutex.cpp:657,1
    - Dst: pthread_mutexattr_gettype
      Src: /src/brpc/src/bthread/mutex.cpp:709,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:718,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:719,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:720,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:726,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:727,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:741,1
    - Dst: MutexOwnerMapEntry*::valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:742,1
    - Dst: valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:747,1
    - Dst: FindMutexOwnerMapEntry
      Src: /src/brpc/src/bthread/mutex.cpp:755,1
    - Dst: MutexOwnerMapEntry*::valid::store
      Src: /src/brpc/src/bthread/mutex.cpp:757,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:801,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:803,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:808,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:810,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:822,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:824,1
    - Dst: sys_pthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.cpp:834,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:836,1
    - Dst: SYS_PTHREAD_MUTEX_RESET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:844,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:846,1
    - Dst: pthread_mutex_t*::lock
      Src: /src/brpc/src/bthread/mutex.cpp:853,1
    - Dst: pthread_mutex_t*::timed_lock
      Src: /src/brpc/src/bthread/mutex.cpp:856,1
    - Dst: pthread_mutex_t*::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:861,1
    - Dst: pthread_mutex_t*::unlock
      Src: /src/brpc/src/bthread/mutex.cpp:865,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:876,1
    - Dst: pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:879,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:884,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:897,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:898,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:899,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:903,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:904,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:907,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:908,1
    - Dst: add_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:911,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:916,1
    - Dst: pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:924,1
    - Dst: pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:934,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:943,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:945,1
    - Dst: remove_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:956,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:957,1
    - Dst: pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:960,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:963,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:965,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:974,1
    - Dst: internal::pthread_mutex_trylock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:978,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:984,1
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:989,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bthread/mutex.cpp:1007,1
    - Dst: MutexInternal*::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1043,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:1057,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:1058,1
    - Dst: TaskGroup*::rq_size
      Src: /src/brpc/src/bthread/mutex.cpp:1058,1
    - Dst: cpu_relax
      Src: /src/brpc/src/bthread/mutex.cpp:1060,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1067,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/mutex.cpp:1068,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1095,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/mutex.cpp:1101,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1104,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/mutex.cpp:1108,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/mutex.cpp:1109,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/mutex.cpp:1113,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1124,1
    - Dst: try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1130,1
    - Dst: PTHREAD_MUTEX_CHECK_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1134,1
    - Dst: lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1135,1
    - Dst: auto::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1140,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1142,1
    - Dst: try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1149,1
    - Dst: lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1152,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1157,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1159,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/mutex.cpp:1162,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1170,1
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1174,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1179,1
    CyclomaticComplexity: 108
    EdgeCount: 108
    ICount: 462
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 53
    functionDepth: 4
    functionLinenumber: 53
    functionLinenumberEnd: 1183
    functionName: namespace
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - cut_into_file_descriptor
    - arraysize
    - sys_pthread_mutex_timedlock
    - init
    - butil::microseconds_to_timespec
    - std::unique_ptr::release
    - store
    - SYS_PTHREAD_MUTEX_RESET_OWNER
    - insert
    - PTHREAD_MUTEX_CHECK_OWNER
    - sys_pthread_mutex_lock
    - butil::FilePath::DirName
    - auto::submit
    - pthread_mutex_unlock_internal
    - begin
    - butil::local_pool_free_empty<SampledContention>
    - MUTEX_RESET_OWNER_COMMON
    - butil::CreateDirectoryAndGetError
    - load
    - futex_wait_private
    - c_str
    - empty
    - dump_and_destroy
    - internal::pthread_mutex_lock_impl
    - seek
    - BUTIL_STATIC_ATOMIC_INIT
    - memcmp
    - _dl_sym
    - bvar::is_collectable
    - butil::debug::StackTrace::CopyAddressTo
    - ContentionProfiler*::init_if_needed
    - sys_pthread_mutex_trylock
    - LOG_BACKTRACE_ONCE
    - MutexOwnerMapEntry*::valid::store
    - cpu_relax
    - auto::exchange
    - butil::static_atomic::load
    - sys_pthread_mutex_unlock
    - PLOG
    - init_if_needed
    - valid::load
    - BAIDU_CASSERT
    - make_contention_site_invalid
    - MutexOwnerMapEntry*::valid::load
    - fmix64
    - end
    - lock_contended
    - sys_pthread_mutex_destroy
    - butil::get_object<SampledContention>
    - ceil
    - ContentionProfiler::ContentionProfiler
    - pthread_mutex_t*::lock
    - butil::MurmurHash3_x86_32
    - open
    - sys_pthread_mutex_init
    - remove_pthread_contention_site
    - compare_exchange_strong
    - butil::debug::StackTrace::FrameCount
    - bthread::butex_wait
    - try_lock
    - pthread_mutex_t*::try_lock
    - internal::pthread_mutex_unlock_impl
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - clear
    - pthread_mutex_trylock_internal
    - butil::IOPortal::IOPortal
    - butil::gettimeofday_us
    - BAIDU_LIKELY
    - pthread_mutex_t*::unlock
    - auto::locked::exchange
    - butil::return_object
    - butil::cpuwide_time_ns
    - butil::debug::StackTrace::StackTrace
    - FindMutexOwnerMapEntry
    - butil::IOPortal::append_from_file_descriptor
    - pthread_once
    - hash_mutex_ptr
    - flush_to_disk
    - butil::FilePath::value
    - append
    - is_contention_site_valid
    - submit_contention
    - butil::static_atomic::fetch_add
    - valid::exchange
    - pthread_mutexattr_gettype
    - destroy
    - bvar::is_sampling_range_valid
    - futex_wake_private
    - pthread_mutex_t*::timed_lock
    - butil::timespec_to_microseconds
    - BAIDU_UNLIKELY
    - size
    - LOG
    - pthread_mutex_lock_internal
    - TaskGroup*::rq_size
    - internal::pthread_mutex_trylock_impl
    - MutexInternal*::locked::exchange
    - BAIDU_SCOPED_LOCK
    - PTHREAD_MUTEX_SET_OWNER
    - std::unique_lock::unlock
    - dlsym
    - add_pthread_contention_site
    - butil::IOBufBuilder::buf
    - SampledContention*::destroy
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    - hash_code
    - butil::debug::StackTrace::FindSymbol
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: __END_DECLS
    signature: __END_DECLS namespace
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: speed_limit
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * speed_limit() override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32
      Src: /src/brpc/src/bthread/mutex.cpp:89,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 92
    functionName: hash_code
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - butil::MurmurHash3_x86_32
    linkageType: ''
    returnType: size_t
    signature: size_t hash_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 96
    functionName: SampledContention
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampledContention()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: ~SampledContention() override
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SampledContention() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SampledContention*::hash_code
      Src: /src/brpc/src/bthread/mutex.cpp:108,1
    - Dst: SampledContention*::hash_code
      Src: /src/brpc/src/bthread/mutex.cpp:108,1
    - Dst: memcmp
      Src: /src/brpc/src/bthread/mutex.cpp:110,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - c1
    - c2
    argTypes:
    - SampledContention*
    - SampledContention*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 111
    functionName: "operator()(const SampledContention* c1,\n                    const
      SampledContention* c2) const"
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - SampledContention*::hash_code
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const SampledContention* c1,\n                    const
      SampledContention* c2) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SampledContention*::hash_code
      Src: /src/brpc/src/bthread/mutex.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - SampledContention*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 2
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: operator()(const SampledContention* c) const
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - SampledContention*::hash_code
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const SampledContention* c) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: ContentionProfiler::ContentionProfiler
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ContentionProfiler::ContentionProfiler(const char* name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ContentionProfiler::flush_to_disk
      Src: /src/brpc/src/bthread/mutex.cpp:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 158
    functionName: ContentionProfiler::~ContentionProfiler()
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - ContentionProfiler::flush_to_disk
    linkageType: ''
    returnType: void
    signature: void ContentionProfiler::~ContentionProfiler()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bthread/mutex.cpp:163,1
    - Dst: init
      Src: /src/brpc/src/bthread/mutex.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 169
    functionName: ContentionProfiler::init_if_needed
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - append
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void ContentionProfiler::init_if_needed()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ContentionProfiler::init_if_needed
      Src: /src/brpc/src/bthread/mutex.cpp:172,1
    - Dst: seek
      Src: /src/brpc/src/bthread/mutex.cpp:174,1
    - Dst: SampledContention*::destroy
      Src: /src/brpc/src/bthread/mutex.cpp:181,1
    - Dst: insert
      Src: /src/brpc/src/bthread/mutex.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/bthread/mutex.cpp:185,1
    - Dst: ContentionProfiler::flush_to_disk
      Src: /src/brpc/src/bthread/mutex.cpp:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - c
    argTypes:
    - SampledContention*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 171
    functionDepth: 2
    functionLinenumber: 171
    functionLinenumberEnd: 188
    functionName: ContentionProfiler::dump_and_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - ContentionProfiler::init_if_needed
    - ContentionProfiler::flush_to_disk
    - size
    - SampledContention*::destroy
    - insert
    - seek
    linkageType: ''
    returnType: void
    signature: void ContentionProfiler::dump_and_destroy(SampledContention* c)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/mutex.cpp:194,1
    - Dst: size
      Src: /src/brpc/src/bthread/mutex.cpp:195,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/bthread/mutex.cpp:196,1
    - Dst: begin
      Src: /src/brpc/src/bthread/mutex.cpp:198,1
    - Dst: end
      Src: /src/brpc/src/bthread/mutex.cpp:198,1
    - Dst: ceil
      Src: /src/brpc/src/bthread/mutex.cpp:200,1
    - Dst: SampledContention*::destroy
      Src: /src/brpc/src/bthread/mutex.cpp:205,1
    - Dst: clear
      Src: /src/brpc/src/bthread/mutex.cpp:207,1
    - Dst: append
      Src: /src/brpc/src/bthread/mutex.cpp:208,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/bthread/mutex.cpp:208,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/bthread/mutex.cpp:216,1
    - Dst: open
      Src: /src/brpc/src/bthread/mutex.cpp:217,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/bthread/mutex.cpp:220,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:225,1
    - Dst: append
      Src: /src/brpc/src/bthread/mutex.cpp:229,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:234,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/bthread/mutex.cpp:240,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/bthread/mutex.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:242,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bthread/mutex.cpp:242,1
    - Dst: open
      Src: /src/brpc/src/bthread/mutex.cpp:252,1
    - Dst: c_str
      Src: /src/brpc/src/bthread/mutex.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:254,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/src/bthread/mutex.cpp:259,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/mutex.cpp:264,1
    - Dst: empty
      Src: /src/brpc/src/bthread/mutex.cpp:268,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 57
    argCount: 1
    argNames:
    - ending
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 269
    functionName: ContentionProfiler::flush_to_disk
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - append
    - cut_into_file_descriptor
    - open
    - clear
    - butil::IOPortal::IOPortal
    - size
    - PLOG
    - LOG
    - butil::FilePath::DirName
    - begin
    - butil::IOPortal::append_from_file_descriptor
    - end
    - butil::IOBufBuilder::buf
    - butil::CreateDirectoryAndGetError
    - ceil
    - SampledContention*::destroy
    - empty
    - butil::FilePath::value
    - c_str
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: void ContentionProfiler::flush_to_disk(bool ending)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 296
    functionName: MutexMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MutexMapEntry
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/mutex.cpp:304,1
    - Dst: SampledContention::dump_and_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:306,1
    - Dst: SampledContention::destroy
      Src: /src/brpc/src/bthread/mutex.cpp:310,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 311
    functionName: SampledContention::dump_and_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - SampledContention::destroy
    - SampledContention::dump_and_destroy
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void SampledContention::dump_and_destroy(size_t /*round*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/mutex.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 316
    functionName: SampledContention::destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void SampledContention::destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    functionName: get_nconflicthash
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_nconflicthash(void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:327,1
    - Dst: ContentionProfiler::ContentionProfiler
      Src: /src/brpc/src/bthread/mutex.cpp:342,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/mutex.cpp:344,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/bthread/mutex.cpp:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 352
    functionName: ContentionProfilerStart
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - ContentionProfiler::ContentionProfiler
    - std::unique_ptr::release
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool ContentionProfilerStart(const char* filename)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/mutex.cpp:362,1
    - Dst: ContentionProfiler*::init_if_needed
      Src: /src/brpc/src/bthread/mutex.cpp:366,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/mutex.cpp:372,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 373
    functionName: ContentionProfilerStop
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - ContentionProfiler*::init_if_needed
    - LOG
    linkageType: ''
    returnType: void
    signature: void ContentionProfilerStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' cs'
    argTypes:
    - bthread_contention_site_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 375
    functionDepth: 1
    functionLinenumber: 375
    functionLinenumberEnd: 377
    functionName: is_contention_site_valid
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: bool
    signature: bool is_contention_site_valid(const bthread_contention_site_t& cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cs
    argTypes:
    - bthread_contention_site_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 381
    functionName: make_contention_site_invalid
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void make_contention_site_invalid(bthread_contention_site_t* cs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:448,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:450,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:452,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:454,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:456,1
    - Dst: _dl_sym
      Src: /src/brpc/src/bthread/mutex.cpp:459,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:464,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:465,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:466,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:467,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:468,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:470,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:475,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:476,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:477,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:478,1
    - Dst: dlsym
      Src: /src/brpc/src/bthread/mutex.cpp:479,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 481
    functionName: init_sys_mutex_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - dlsym
    - _dl_sym
    linkageType: ''
    returnType: void
    signature: void init_sys_mutex_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:487,1
    - Dst: sys_pthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 489
    functionName: first_sys_pthread_mutex_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - sys_pthread_mutex_init
    linkageType: ''
    returnType: int
    signature: int first_sys_pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t*
      mutexattr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:492,1
    - Dst: sys_pthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 491
    functionDepth: 0
    functionLinenumber: 491
    functionLinenumberEnd: 494
    functionName: first_sys_pthread_mutex_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - sys_pthread_mutex_destroy
    linkageType: ''
    returnType: int
    signature: int first_sys_pthread_mutex_destroy(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:497,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 496
    functionDepth: 0
    functionLinenumber: 496
    functionLinenumberEnd: 499
    functionName: first_sys_pthread_mutex_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - sys_pthread_mutex_lock
    linkageType: ''
    returnType: int
    signature: int first_sys_pthread_mutex_lock(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:502,1
    - Dst: sys_pthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 501
    functionDepth: 0
    functionLinenumber: 501
    functionLinenumberEnd: 504
    functionName: first_sys_pthread_mutex_trylock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - sys_pthread_mutex_trylock
    linkageType: ''
    returnType: int
    signature: int first_sys_pthread_mutex_trylock(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:509,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:510,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 511
    functionName: first_sys_pthread_mutex_timedlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - sys_pthread_mutex_timedlock
    linkageType: ''
    returnType: int
    signature: "int first_sys_pthread_mutex_timedlock(pthread_mutex_t* mutex,\n                                      const
      struct timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/mutex.cpp:515,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 517
    functionName: first_sys_pthread_mutex_unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - sys_pthread_mutex_unlock
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int first_sys_pthread_mutex_unlock(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fmix64
      Src: /src/brpc/src/bthread/mutex.cpp:522,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 523
    functionName: hash_mutex_ptr
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - fmix64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t hash_mutex_ptr(const Mutex* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:545,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/src/bthread/mutex.cpp:550,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 544
    functionDepth: 1
    functionLinenumber: 544
    functionLinenumberEnd: 552
    functionName: CheckBthreadScheSafety
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_LIKELY
    - LOG_BACKTRACE_ONCE
    linkageType: ''
    returnType: void
    signature: void CheckBthreadScheSafety()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 556
    functionName: CheckBthreadScheSafety
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckBthreadScheSafety()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:588,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:590,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/mutex.cpp:595,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/mutex.cpp:600,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 586
    functionDepth: 2
    functionLinenumber: 586
    functionLinenumberEnd: 602
    functionName: add_pthread_contention_site
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - hash_mutex_ptr
    - load
    - fetch_add
    - compare_exchange_strong
    linkageType: ''
    returnType: bthread_contention_site_t
    signature: 'bthread_contention_site_t *

      add_pthread_contention_site(const Mutex* mutex)'
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:607,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:609,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:621,1
    - Dst: store
      Src: /src/brpc/src/bthread/mutex.cpp:622,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - mutex
    - saved_csite
    argTypes:
    - Mutex*
    - bthread_contention_site_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 605
    functionDepth: 2
    functionLinenumber: 605
    functionLinenumberEnd: 624
    functionName: remove_pthread_contention_site
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - store
    - hash_mutex_ptr
    - load
    - make_contention_site_invalid
    linkageType: ''
    returnType: bool
    signature: "bool remove_pthread_contention_site(const Mutex* mutex,\n                                           bthread_contention_site_t*
      saved_csite)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::StackTrace::FrameCount
      Src: /src/brpc/src/bthread/mutex.cpp:634,1
    - Dst: butil::local_pool_free_empty<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:642,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/src/bthread/mutex.cpp:644,1
    - Dst: butil::get_object<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:649,1
    - Dst: butil::debug::StackTrace::CopyAddressTo
      Src: /src/brpc/src/bthread/mutex.cpp:656,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/mutex.cpp:656,1
    - Dst: auto::submit
      Src: /src/brpc/src/bthread/mutex.cpp:657,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - ' csite'
    - now_ns
    argTypes:
    - bthread_contention_site_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 627
    functionDepth: 1
    functionLinenumber: 627
    functionLinenumberEnd: 660
    functionName: submit_contention
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 10
    functionsReached:
    - butil::debug::StackTrace::CopyAddressTo
    - arraysize
    - auto::submit
    - butil::get_object<SampledContention>
    - butil::debug::StackTrace::FrameCount
    - butil::local_pool_free_empty<SampledContention>
    - butil::debug::StackTrace::FindSymbol
    linkageType: ''
    returnType: void
    signature: void submit_contention(const bthread_contention_site_t& csite, int64_t
      now_ns)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - owner
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 666
    functionName: MUTEX_RESET_OWNER_COMMON
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MUTEX_RESET_OWNER_COMMON(owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - owner
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 667
    functionDepth: 0
    functionLinenumber: 667
    functionLinenumberEnd: 671
    functionName: PTHREAD_MUTEX_SET_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PTHREAD_MUTEX_SET_OWNER(owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - owner
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 682
    functionName: PTHREAD_MUTEX_CHECK_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PTHREAD_MUTEX_CHECK_OWNER(owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - owner
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 683
    functionDepth: 0
    functionLinenumber: 683
    functionLinenumberEnd: 684
    functionName: MUTEX_RESET_OWNER_COMMON
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MUTEX_RESET_OWNER_COMMON(owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - owner
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 685
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 685
    functionName: PTHREAD_MUTEX_SET_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PTHREAD_MUTEX_SET_OWNER(owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - owner
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 685
    functionDepth: 0
    functionLinenumber: 685
    functionLinenumberEnd: 686
    functionName: PTHREAD_MUTEX_CHECK_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PTHREAD_MUTEX_CHECK_OWNER(owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 693
    functionDepth: 0
    functionLinenumber: 693
    functionLinenumberEnd: 697
    functionName: internal::MutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MutexOwnerMapEntry
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutexattr_gettype
      Src: /src/brpc/src/bthread/mutex.cpp:709,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:718,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:719,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:720,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:726,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:727,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 705
    functionDepth: 2
    functionLinenumber: 705
    functionLinenumberEnd: 731
    functionName: internal::InitMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - hash_mutex_ptr
    - pthread_mutexattr_gettype
    - valid::exchange
    - MUTEX_RESET_OWNER_COMMON
    linkageType: ''
    returnType: void
    signature: "void InitMutexOwnerMapEntry(pthread_mutex_t* mutex,\n                                   const
      pthread_mutexattr_t* mutexattr)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:741,1
    - Dst: MutexOwnerMapEntry*::valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:742,1
    - Dst: valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:747,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 752
      start: 733
    functionDepth: 2
    functionLinenumber: 733
    functionLinenumberEnd: 752
    functionName: MutexOwnerMapEntry* FindMutexOwnerMapEntry(pthread_mutex_t* mutex)
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - MutexOwnerMapEntry*::valid::load
    - hash_mutex_ptr
    - valid::load
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE MutexOwnerMapEntry* FindMutexOwnerMapEntry(pthread_mutex_t*
      mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FindMutexOwnerMapEntry
      Src: /src/brpc/src/bthread/mutex.cpp:755,1
    - Dst: MutexOwnerMapEntry*::valid::store
      Src: /src/brpc/src/bthread/mutex.cpp:757,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 759
    functionName: internal::DestroyMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - MutexOwnerMapEntry*::valid::store
    - FindMutexOwnerMapEntry
    linkageType: ''
    returnType: void
    signature: void DestroyMutexOwnerMapEntry(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - mutex
    - ','
    - mutexattr
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 763
    functionName: INIT_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: INIT_MUTEX_OWNER_MAP_ENTRY(mutex, mutexattr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 764
    functionDepth: 0
    functionLinenumber: 764
    functionLinenumberEnd: 766
    functionName: DESTROY_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DESTROY_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 769
      start: 767
    functionDepth: 0
    functionLinenumber: 767
    functionLinenumberEnd: 769
    functionName: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 780
    functionDepth: 0
    functionLinenumber: 780
    functionLinenumberEnd: 785
    functionName: SYS_PTHREAD_MUTEX_RESET_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYS_PTHREAD_MUTEX_RESET_OWNER(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - mutex
    - ','
    - mutexattr
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 788
    functionName: INIT_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: INIT_MUTEX_OWNER_MAP_ENTRY(mutex, mutexattr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 789
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 789
    functionName: DESTROY_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DESTROY_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 790
    functionName: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 793
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 793
    functionName: SYS_PTHREAD_MUTEX_RESET_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYS_PTHREAD_MUTEX_RESET_OWNER(mutex)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:801,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:803,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:808,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:810,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 818
      start: 797
    functionDepth: 1
    functionLinenumber: 797
    functionLinenumberEnd: 818
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - sys_pthread_mutex_lock
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    - sys_pthread_mutex_timedlock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_lock_internal(pthread_mutex_t* mutex,\n
      \                                                  const struct timespec* abstime)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:822,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 830
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - sys_pthread_mutex_lock
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_lock_internal(pthread_mutex_t* mutex,\n
      \                                                  const struct timespec*/*
      Not supported */)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sys_pthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.cpp:834,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:836,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 833
    functionDepth: 1
    functionLinenumber: 833
    functionLinenumberEnd: 841
    functionName: internal::pthread_mutex_trylock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    - sys_pthread_mutex_trylock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_internal(pthread_mutex_t*
      mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SYS_PTHREAD_MUTEX_RESET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:844,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:846,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 843
    functionDepth: 1
    functionLinenumber: 843
    functionLinenumberEnd: 847
    functionName: internal::pthread_mutex_unlock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - sys_pthread_mutex_unlock
    - SYS_PTHREAD_MUTEX_RESET_OWNER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_internal(pthread_mutex_t* mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex*::lock
      Src: /src/brpc/src/bthread/mutex.cpp:853,1
    - Dst: FastPthreadMutex*::timed_lock
      Src: /src/brpc/src/bthread/mutex.cpp:856,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - FastPthreadMutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 858
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FastPthreadMutex*::lock
    - FastPthreadMutex*::timed_lock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_lock_internal(FastPthreadMutex* mutex,\n
      \                                                  const struct timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex*::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:861,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 862
      start: 860
    functionDepth: 0
    functionLinenumber: 860
    functionLinenumberEnd: 862
    functionName: internal::pthread_mutex_trylock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FastPthreadMutex*::try_lock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_internal(FastPthreadMutex*
      mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex*::unlock
      Src: /src/brpc/src/bthread/mutex.cpp:865,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 867
      start: 864
    functionDepth: 0
    functionLinenumber: 864
    functionLinenumberEnd: 867
    functionName: internal::pthread_mutex_unlock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FastPthreadMutex*::unlock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_internal(FastPthreadMutex*
      mutex)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:876,1
    - Dst: internal::pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:879,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:884,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:897,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:898,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:899,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:903,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:904,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:907,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:908,1
    - Dst: add_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:911,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:916,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 34
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - Mutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 920
      start: 870
    functionDepth: 3
    functionLinenumber: 870
    functionLinenumberEnd: 920
    functionName: internal::pthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - internal::pthread_mutex_lock_internal
    - bvar::is_collectable
    - butil::cpuwide_time_ns
    - make_contention_site_invalid
    - internal::pthread_mutex_trylock_internal
    - add_pthread_contention_site
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_lock_impl(Mutex* mutex, const struct
      timespec* abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:924,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 925
      start: 923
    functionDepth: 2
    functionLinenumber: 923
    functionLinenumberEnd: 925
    functionName: internal::pthread_mutex_trylock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - internal::pthread_mutex_trylock_internal
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_impl(Mutex* mutex)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:934,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:943,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:945,1
    - Dst: remove_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:956,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:957,1
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:960,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:963,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:965,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 968
      start: 928
    functionDepth: 3
    functionLinenumber: 928
    functionLinenumberEnd: 968
    functionName: internal::pthread_mutex_unlock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - submit_contention
    - is_contention_site_valid
    - remove_pthread_contention_site
    - butil::cpuwide_time_ns
    - internal::pthread_mutex_unlock_internal
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_impl(Mutex* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 693
    functionDepth: 0
    functionLinenumber: 693
    functionLinenumberEnd: 697
    functionName: internal::MutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MutexOwnerMapEntry
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutexattr_gettype
      Src: /src/brpc/src/bthread/mutex.cpp:709,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:718,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:719,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:720,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:726,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:727,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 705
    functionDepth: 2
    functionLinenumber: 705
    functionLinenumberEnd: 731
    functionName: internal::InitMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - hash_mutex_ptr
    - pthread_mutexattr_gettype
    - valid::exchange
    - MUTEX_RESET_OWNER_COMMON
    linkageType: ''
    returnType: void
    signature: "void InitMutexOwnerMapEntry(pthread_mutex_t* mutex,\n                                   const
      pthread_mutexattr_t* mutexattr)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:741,1
    - Dst: MutexOwnerMapEntry*::valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:742,1
    - Dst: valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:747,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 752
      start: 733
    functionDepth: 2
    functionLinenumber: 733
    functionLinenumberEnd: 752
    functionName: MutexOwnerMapEntry* FindMutexOwnerMapEntry(pthread_mutex_t* mutex)
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - MutexOwnerMapEntry*::valid::load
    - hash_mutex_ptr
    - valid::load
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE MutexOwnerMapEntry* FindMutexOwnerMapEntry(pthread_mutex_t*
      mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FindMutexOwnerMapEntry
      Src: /src/brpc/src/bthread/mutex.cpp:755,1
    - Dst: MutexOwnerMapEntry*::valid::store
      Src: /src/brpc/src/bthread/mutex.cpp:757,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 759
    functionName: internal::DestroyMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - MutexOwnerMapEntry*::valid::store
    - FindMutexOwnerMapEntry
    linkageType: ''
    returnType: void
    signature: void DestroyMutexOwnerMapEntry(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - mutex
    - ','
    - mutexattr
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 763
    functionName: INIT_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: INIT_MUTEX_OWNER_MAP_ENTRY(mutex, mutexattr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 764
    functionDepth: 0
    functionLinenumber: 764
    functionLinenumberEnd: 766
    functionName: DESTROY_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DESTROY_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 769
      start: 767
    functionDepth: 0
    functionLinenumber: 767
    functionLinenumberEnd: 769
    functionName: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 780
    functionDepth: 0
    functionLinenumber: 780
    functionLinenumberEnd: 785
    functionName: SYS_PTHREAD_MUTEX_RESET_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYS_PTHREAD_MUTEX_RESET_OWNER(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - mutex
    - ','
    - mutexattr
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 788
    functionName: INIT_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: INIT_MUTEX_OWNER_MAP_ENTRY(mutex, mutexattr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 789
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 789
    functionName: DESTROY_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DESTROY_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 790
    functionName: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY(mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mutex
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 793
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 793
    functionName: SYS_PTHREAD_MUTEX_RESET_OWNER
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYS_PTHREAD_MUTEX_RESET_OWNER(mutex)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:801,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:803,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:808,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:810,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 818
      start: 797
    functionDepth: 1
    functionLinenumber: 797
    functionLinenumberEnd: 818
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - sys_pthread_mutex_lock
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    - sys_pthread_mutex_timedlock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_lock_internal(pthread_mutex_t* mutex,\n
      \                                                  const struct timespec* abstime)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:822,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 830
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - sys_pthread_mutex_lock
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_lock_internal(pthread_mutex_t* mutex,\n
      \                                                  const struct timespec*/*
      Not supported */)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sys_pthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.cpp:834,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:836,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 833
    functionDepth: 1
    functionLinenumber: 833
    functionLinenumberEnd: 841
    functionName: internal::pthread_mutex_trylock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    - sys_pthread_mutex_trylock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_internal(pthread_mutex_t*
      mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SYS_PTHREAD_MUTEX_RESET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:844,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:846,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 843
    functionDepth: 1
    functionLinenumber: 843
    functionLinenumberEnd: 847
    functionName: internal::pthread_mutex_unlock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - sys_pthread_mutex_unlock
    - SYS_PTHREAD_MUTEX_RESET_OWNER
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_internal(pthread_mutex_t* mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex*::lock
      Src: /src/brpc/src/bthread/mutex.cpp:853,1
    - Dst: FastPthreadMutex*::timed_lock
      Src: /src/brpc/src/bthread/mutex.cpp:856,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - FastPthreadMutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 858
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - FastPthreadMutex*::lock
    - FastPthreadMutex*::timed_lock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_lock_internal(FastPthreadMutex* mutex,\n
      \                                                  const struct timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex*::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:861,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 862
      start: 860
    functionDepth: 0
    functionLinenumber: 860
    functionLinenumberEnd: 862
    functionName: internal::pthread_mutex_trylock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - FastPthreadMutex*::try_lock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_internal(FastPthreadMutex*
      mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FastPthreadMutex*::unlock
      Src: /src/brpc/src/bthread/mutex.cpp:865,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 867
      start: 864
    functionDepth: 0
    functionLinenumber: 864
    functionLinenumberEnd: 867
    functionName: internal::pthread_mutex_unlock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - FastPthreadMutex*::unlock
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_internal(FastPthreadMutex*
      mutex)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:876,1
    - Dst: internal::pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:879,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:884,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:897,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:898,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:899,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:903,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:904,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:907,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:908,1
    - Dst: add_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:911,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:916,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 34
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - Mutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 920
      start: 870
    functionDepth: 3
    functionLinenumber: 870
    functionLinenumberEnd: 920
    functionName: internal::pthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - internal::pthread_mutex_lock_internal
    - bvar::is_collectable
    - butil::cpuwide_time_ns
    - make_contention_site_invalid
    - internal::pthread_mutex_trylock_internal
    - add_pthread_contention_site
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_lock_impl(Mutex* mutex, const struct
      timespec* abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:924,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 925
      start: 923
    functionDepth: 2
    functionLinenumber: 923
    functionLinenumberEnd: 925
    functionName: internal::pthread_mutex_trylock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - internal::pthread_mutex_trylock_internal
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_impl(Mutex* mutex)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:934,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:943,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:945,1
    - Dst: remove_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:956,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:957,1
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:960,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:963,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:965,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 968
      start: 928
    functionDepth: 3
    functionLinenumber: 928
    functionLinenumberEnd: 968
    functionName: internal::pthread_mutex_unlock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - submit_contention
    - is_contention_site_valid
    - remove_pthread_contention_site
    - butil::cpuwide_time_ns
    - internal::pthread_mutex_unlock_internal
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_impl(Mutex* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:974,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 975
      start: 973
    functionDepth: 4
    functionLinenumber: 973
    functionLinenumberEnd: 975
    functionName: pthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - internal::pthread_mutex_lock_impl
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_lock_impl(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_trylock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:978,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 977
    functionDepth: 3
    functionLinenumber: 977
    functionLinenumberEnd: 979
    functionName: pthread_mutex_trylock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - internal::pthread_mutex_trylock_impl
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_trylock_impl(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:984,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 985
      start: 982
    functionDepth: 4
    functionLinenumber: 982
    functionLinenumberEnd: 985
    functionName: pthread_mutex_timedlock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::pthread_mutex_lock_impl
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE pthread_mutex_timedlock_impl(pthread_mutex_t* mutex,\n
      \                                                   const struct timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:989,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 988
    functionDepth: 4
    functionLinenumber: 988
    functionLinenumberEnd: 990
    functionName: pthread_mutex_unlock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - internal::pthread_mutex_unlock_impl
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE pthread_mutex_unlock_impl(pthread_mutex_t* mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MutexInternal*::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1043,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1048
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1048
    functionName: mutex_trylock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - MutexInternal*::locked::exchange
    linkageType: ''
    returnType: int
    signature: int mutex_trylock_impl(bthread_mutex_t* m)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:1057,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:1058,1
    - Dst: TaskGroup*::rq_size
      Src: /src/brpc/src/bthread/mutex.cpp:1058,1
    - Dst: cpu_relax
      Src: /src/brpc/src/bthread/mutex.cpp:1060,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1067,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/mutex.cpp:1068,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 2
    argNames:
    - m
    - abstime
    argTypes:
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1052
    functionDepth: 4
    functionLinenumber: 1052
    functionLinenumberEnd: 1089
    functionName: mutex_lock_contended_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - auto::exchange
    - cpu_relax
    - bthread::butex_wait
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - TaskGroup*::rq_size
    linkageType: ''
    returnType: int
    signature: "int mutex_lock_contended_impl(bthread_mutex_t* __restrict m,\n                                     const
      struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1095,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1096
      start: 1094
    functionDepth: 1
    functionLinenumber: 1094
    functionLinenumberEnd: 1096
    functionName: internal::FastPthreadMutex::FastPthreadMutex
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - MUTEX_RESET_OWNER_COMMON
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::FastPthreadMutex()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/mutex.cpp:1101,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1104,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/mutex.cpp:1108,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/mutex.cpp:1109,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/mutex.cpp:1113,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1124,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1127
      start: 1098
    functionDepth: 1
    functionLinenumber: 1098
    functionLinenumberEnd: 1127
    functionName: internal::FastPthreadMutex::lock_contended
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - auto::exchange
    - futex_wait_private
    - butil::microseconds_to_timespec
    - butil::timespec_to_microseconds
    - PTHREAD_MUTEX_SET_OWNER
    linkageType: ''
    returnType: int
    signature: int FastPthreadMutex::lock_contended(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: internal::FastPthreadMutex::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1130,1
    - Dst: PTHREAD_MUTEX_CHECK_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1134,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1135,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1136
      start: 1129
    functionDepth: 2
    functionLinenumber: 1129
    functionLinenumberEnd: 1136
    functionName: internal::FastPthreadMutex::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::lock_contended
    - PTHREAD_MUTEX_CHECK_OWNER
    - internal::FastPthreadMutex::try_lock
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: auto::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1140,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1146
      start: 1138
    functionDepth: 1
    functionLinenumber: 1138
    functionLinenumberEnd: 1146
    functionName: internal::FastPthreadMutex::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - PTHREAD_MUTEX_SET_OWNER
    - auto::locked::exchange
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: internal::FastPthreadMutex::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1149,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1148
    functionDepth: 2
    functionLinenumber: 1148
    functionLinenumberEnd: 1153
    functionName: internal::FastPthreadMutex::timed_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::lock_contended
    - internal::FastPthreadMutex::try_lock
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::timed_lock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1157,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1159,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/mutex.cpp:1162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1155
    functionDepth: 1
    functionLinenumber: 1155
    functionLinenumberEnd: 1164
    functionName: internal::FastPthreadMutex::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - futex_wake_private
    - MUTEX_RESET_OWNER_COMMON
    - auto::exchange
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1095,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1096
      start: 1094
    functionDepth: 1
    functionLinenumber: 1094
    functionLinenumberEnd: 1096
    functionName: internal::FastPthreadMutex::FastPthreadMutex
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - MUTEX_RESET_OWNER_COMMON
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::FastPthreadMutex()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/mutex.cpp:1101,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1104,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/mutex.cpp:1108,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/mutex.cpp:1109,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/mutex.cpp:1113,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1124,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1127
      start: 1098
    functionDepth: 1
    functionLinenumber: 1098
    functionLinenumberEnd: 1127
    functionName: internal::FastPthreadMutex::lock_contended
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    - auto::exchange
    - futex_wait_private
    - butil::microseconds_to_timespec
    - butil::timespec_to_microseconds
    - PTHREAD_MUTEX_SET_OWNER
    linkageType: ''
    returnType: int
    signature: int FastPthreadMutex::lock_contended(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: internal::FastPthreadMutex::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1130,1
    - Dst: PTHREAD_MUTEX_CHECK_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1134,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1135,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1136
      start: 1129
    functionDepth: 2
    functionLinenumber: 1129
    functionLinenumberEnd: 1136
    functionName: internal::FastPthreadMutex::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::lock_contended
    - PTHREAD_MUTEX_CHECK_OWNER
    - internal::FastPthreadMutex::try_lock
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: auto::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1140,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1146
      start: 1138
    functionDepth: 1
    functionLinenumber: 1138
    functionLinenumberEnd: 1146
    functionName: internal::FastPthreadMutex::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 3
    functionsReached:
    - PTHREAD_MUTEX_SET_OWNER
    - auto::locked::exchange
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: internal::FastPthreadMutex::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1149,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1148
    functionDepth: 2
    functionLinenumber: 1148
    functionLinenumberEnd: 1153
    functionName: internal::FastPthreadMutex::timed_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::lock_contended
    - internal::FastPthreadMutex::try_lock
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::timed_lock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1157,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1159,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/mutex.cpp:1162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1155
    functionDepth: 1
    functionLinenumber: 1155
    functionLinenumberEnd: 1164
    functionName: internal::FastPthreadMutex::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - futex_wake_private
    - MUTEX_RESET_OWNER_COMMON
    - auto::exchange
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1169
    functionDepth: 4
    functionLinenumber: 1169
    functionLinenumberEnd: 1171
    functionName: FastPthreadMutex::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - internal::pthread_mutex_lock_impl
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1175
      start: 1173
    functionDepth: 4
    functionLinenumber: 1173
    functionLinenumberEnd: 1175
    functionName: FastPthreadMutex::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - internal::pthread_mutex_unlock_impl
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1180
      start: 1178
    functionDepth: 4
    functionLinenumber: 1178
    functionLinenumberEnd: 1180
    functionName: FastPthreadMutex::timed_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - internal::pthread_mutex_lock_impl
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::timed_lock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:1189,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1190,1
    - Dst: bthread::butex_create_checked<unsigned>
      Src: /src/brpc/src/bthread/mutex.cpp:1191,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - m
    - attr
    argTypes:
    - bthread_mutex_t*
    - bthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1185
    functionDepth: 1
    functionLinenumber: 1185
    functionLinenumberEnd: 1198
    functionName: bthread_mutex_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 17
    functionsReached:
    - make_contention_site_invalid
    - MUTEX_RESET_OWNER_COMMON
    - bthread::butex_create_checked<unsigned>
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: "__BEGIN_DECLS bthread_mutex_init(bthread_mutex_t* __restrict m,\n
      \                      const bthread_mutexattr_t* __restrict attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:1201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1203
      start: 1200
    functionDepth: 2
    functionLinenumber: 1200
    functionLinenumberEnd: 1203
    functionName: bthread_mutex_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 17
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: int
    signature: int bthread_mutex_destroy(bthread_mutex_t* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_trylock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1207
      start: 1205
    functionDepth: 3
    functionLinenumber: 1205
    functionLinenumberEnd: 1207
    functionName: bthread_mutex_trylock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 7
    functionsReached:
    - internal::pthread_mutex_trylock_impl
    linkageType: ''
    returnType: int
    signature: int bthread_mutex_trylock(bthread_mutex_t* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1211
      start: 1209
    functionDepth: 5
    functionLinenumber: 1209
    functionLinenumberEnd: 1211
    functionName: bthread_mutex_lock_contended
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - mutex_lock_contended_impl
    linkageType: ''
    returnType: int
    signature: int bthread_mutex_lock_contended(bthread_mutex_t* m)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_trylock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1215,1
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1220,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:1224,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:1225,1
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1226,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1229,1
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1232,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1234,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1238,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:1240,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - m
    - abstime
    argTypes:
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1243
      start: 1213
    functionDepth: 5
    functionLinenumber: 1213
    functionLinenumberEnd: 1243
    functionName: bthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - submit_contention
    - internal::pthread_mutex_trylock_impl
    - mutex_lock_contended_impl
    - bvar::is_collectable
    - butil::cpuwide_time_ns
    - bvar::is_sampling_range_valid
    linkageType: ''
    returnType: int
    signature: "int bthread_mutex_lock_impl(bthread_mutex_t* __restrict m,\n                                   const
      struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1247
      start: 1245
    functionDepth: 6
    functionLinenumber: 1245
    functionLinenumberEnd: 1247
    functionName: bthread_mutex_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 21
    functionsReached:
    - bthread_mutex_lock_impl
    linkageType: ''
    returnType: int
    signature: int bthread_mutex_lock(bthread_mutex_t* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - m
    - abstime
    argTypes:
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1252
      start: 1249
    functionDepth: 6
    functionLinenumber: 1249
    functionLinenumberEnd: 1252
    functionName: bthread_mutex_timedlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 4
    functionsReached:
    - bthread_mutex_lock_impl
    linkageType: ''
    returnType: int
    signature: "int bthread_mutex_timedlock(bthread_mutex_t* __restrict m,\n                            const
      struct timespec* __restrict abstime)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:1257,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:1260,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1262,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1263,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/mutex.cpp:1270,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1273,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/mutex.cpp:1274,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1275,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:1277,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1254
    functionDepth: 3
    functionLinenumber: 1254
    functionLinenumberEnd: 1279
    functionName: bthread_mutex_unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 25
    functionsReached:
    - is_contention_site_valid
    - auto::exchange
    - submit_contention
    - bthread::butex_wake
    - butil::cpuwide_time_ns
    - make_contention_site_invalid
    - MUTEX_RESET_OWNER_COMMON
    linkageType: ''
    returnType: int
    signature: int bthread_mutex_unlock(bthread_mutex_t* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1284
      start: 1281
    functionDepth: 0
    functionLinenumber: 1281
    functionLinenumberEnd: 1284
    functionName: bthread_mutexattr_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_mutexattr_init(bthread_mutexattr_t* attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1286
    functionDepth: 0
    functionLinenumber: 1286
    functionLinenumberEnd: 1289
    functionName: bthread_mutexattr_disable_csite
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_mutexattr_disable_csite(bthread_mutexattr_t* attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1294
      start: 1291
    functionDepth: 0
    functionLinenumber: 1291
    functionLinenumberEnd: 1294
    functionName: bthread_mutexattr_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int bthread_mutexattr_destroy(bthread_mutexattr_t* attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: INIT_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:1300,1
    - Dst: first_sys_pthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.cpp:1301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1302
      start: 1298
    functionDepth: 1
    functionLinenumber: 1298
    functionLinenumberEnd: 1302
    functionName: pthread_mutex_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 30
    functionsReached:
    - INIT_MUTEX_OWNER_MAP_ENTRY
    - first_sys_pthread_mutex_init
    linkageType: ''
    returnType: int
    signature: "int pthread_mutex_init(pthread_mutex_t * __restrict mutex,\n                       const
      pthread_mutexattr_t* __restrict mutexattr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DESTROY_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:1305,1
    - Dst: first_sys_pthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:1306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1307
      start: 1304
    functionDepth: 1
    functionLinenumber: 1304
    functionLinenumberEnd: 1307
    functionName: pthread_mutex_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 22
    functionsReached:
    - DESTROY_MUTEX_OWNER_MAP_ENTRY
    - first_sys_pthread_mutex_destroy
    linkageType: ''
    returnType: int
    signature: int pthread_mutex_destroy(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1311
      start: 1309
    functionDepth: 4
    functionLinenumber: 1309
    functionLinenumberEnd: 1311
    functionName: pthread_mutex_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 37
    functionsReached:
    - internal::pthread_mutex_lock_impl
    linkageType: ''
    returnType: int
    signature: int pthread_mutex_lock(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_timedlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - __mutex
    - __abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1317
      start: 1314
    functionDepth: 5
    functionLinenumber: 1314
    functionLinenumberEnd: 1317
    functionName: pthread_mutex_timedlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 8
    functionsReached:
    - pthread_mutex_timedlock_impl
    linkageType: ''
    returnType: int
    signature: "int pthread_mutex_timedlock(pthread_mutex_t *__restrict __mutex,\n\t\t\t\t
      \           const struct timespec *__restrict __abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_trylock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1322
      start: 1320
    functionDepth: 3
    functionLinenumber: 1320
    functionLinenumberEnd: 1322
    functionName: pthread_mutex_trylock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 10
    functionsReached:
    - internal::pthread_mutex_trylock_impl
    linkageType: ''
    returnType: int
    signature: int pthread_mutex_trylock(pthread_mutex_t* mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1326
      start: 1324
    functionDepth: 4
    functionLinenumber: 1324
    functionLinenumberEnd: 1326
    functionName: pthread_mutex_unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 37
    functionsReached:
    - internal::pthread_mutex_unlock_impl
    linkageType: ''
    returnType: int
    signature: int pthread_mutex_unlock(pthread_mutex_t* mutex)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:65,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:76,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:80,1
    - Dst: clear_func
      Src: /src/brpc/src/bthread/execution_queue_inl.h:103,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:104,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/execution_queue_inl.h:111,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/execution_queue_inl.h:112,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/execution_queue_inl.h:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 119
    functionName: bthread::TaskNode
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_NE
    - BAIDU_SCOPED_LOCK
    - CHECK
    - std::unique_lock::unlock
    - clear_func
    - LOG_IF
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT TaskNode
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 62
    functionName: bthread::TaskNode
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~TaskNode()
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TaskNode()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:65,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - expected_version
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 74
    functionName: bthread::cancel
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int cancel(int64_t expected_version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: bthread::set_executed
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void set_executed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: bthread::peek_to_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool peek_to_execute()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_func
      Src: /src/brpc/src/bthread/execution_queue_inl.h:103,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:104,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/execution_queue_inl.h:111,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/execution_queue_inl.h:112,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/execution_queue_inl.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - clear_func
    argTypes:
    - clear_task_mem
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 116
    functionName: bthread::clear_before_return
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_NE
    - CHECK
    - std::unique_lock::unlock
    - clear_func
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void clear_before_return(clear_task_mem clear_func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: bthread::allocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * allocate(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    functionName: bthread::get_allocated_mem
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * get_allocated_mem(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: bthread::deallocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void deallocate(TaskNode*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/bthread/execution_queue_inl.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 139
    functionName: bthread::allocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * allocate(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    functionName: bthread::get_allocated_mem
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * get_allocated_mem(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/bthread/execution_queue_inl.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: bthread::deallocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void deallocate(TaskNode* node)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/bthread/execution_queue_inl.h:157,1
    - Dst: dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:163,1
    - Dst: bthread::ExecutionQueueBase
      Src: /src/brpc/src/bthread/execution_queue_inl.h:169,1
    - Dst: _head
      Src: /src/brpc/src/bthread/execution_queue_inl.h:170,1
    - Dst: _versioned_ref
      Src: /src/brpc/src/bthread/execution_queue_inl.h:171,1
    - Dst: _high_priority_tasks
      Src: /src/brpc/src/bthread/execution_queue_inl.h:172,1
    - Dst: _pthread_started
      Src: /src/brpc/src/bthread/execution_queue_inl.h:173,1
    - Dst: _cond
      Src: /src/brpc/src/bthread/execution_queue_inl.h:174,1
    - Dst: _current_head
      Src: /src/brpc/src/bthread/execution_queue_inl.h:175,1
    - Dst: bthread::butex_create_checked
      Src: /src/brpc/src/bthread/execution_queue_inl.h:176,1
    - Dst: store
      Src: /src/brpc/src/bthread/execution_queue_inl.h:177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 178
    functionName: bthread::ExecutionQueueBase
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 1
    functionsReached:
    - _high_priority_tasks
    - _head
    - bthread::ExecutionQueueBase
    - dereference
    - _versioned_ref
    - DISALLOW_COPY_AND_ASSIGN
    - store
    - _pthread_started
    - _cond
    - _current_head
    - bthread::butex_create_checked
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ExecutionQueueBase
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ExecutionQueueBase*::dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - queue
    argTypes:
    - ExecutionQueueBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 165
    functionName: operator()(ExecutionQueueBase* queue)
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - ExecutionQueueBase*::dereference
    linkageType: ''
    returnType: void
    signature: void operator()(ExecutionQueueBase* queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/execution_queue_inl.h:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 2
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: ~ExecutionQueueBase()
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void ~ExecutionQueueBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/execution_queue_inl.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 184
    functionName: bthread::stopped
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: bthread::_release_additional_reference
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - dereference
    linkageType: ''
    returnType: void
    signature: void _release_additional_reference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: bthread::_version_of_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t _version_of_id(uint64_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: bthread::_version_of_vref
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t _version_of_vref(int64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: bthread::_ref_of_vref
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t _ref_of_vref(int64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - ref
    argTypes:
    - uint32_t
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    functionName: bthread::_make_vref
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t _make_vref(uint32_t version, int32_t ref)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:65,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:76,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:80,1
    - Dst: clear_func
      Src: /src/brpc/src/bthread/execution_queue_inl.h:103,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:104,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/execution_queue_inl.h:111,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/execution_queue_inl.h:112,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/execution_queue_inl.h:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 119
    functionName: bthread::TaskNode
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_NE
    - BAIDU_SCOPED_LOCK
    - CHECK
    - std::unique_lock::unlock
    - clear_func
    - LOG_IF
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT TaskNode
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 62
    functionName: bthread::TaskNode
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~TaskNode()
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~TaskNode()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:65,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - expected_version
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 74
    functionName: bthread::cancel
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int cancel(int64_t expected_version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: bthread::set_executed
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void set_executed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: bthread::peek_to_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool peek_to_execute()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear_func
      Src: /src/brpc/src/bthread/execution_queue_inl.h:103,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:104,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/execution_queue_inl.h:111,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/execution_queue_inl.h:112,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bthread/execution_queue_inl.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - clear_func
    argTypes:
    - clear_task_mem
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 116
    functionName: bthread::clear_before_return
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_NE
    - CHECK
    - std::unique_lock::unlock
    - clear_func
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void clear_before_return(clear_task_mem clear_func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 128
    functionName: bthread::allocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * allocate(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    functionName: bthread::get_allocated_mem
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * get_allocated_mem(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: bthread::deallocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void deallocate(TaskNode*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/bthread/execution_queue_inl.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 139
    functionName: bthread::allocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * allocate(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    functionName: bthread::get_allocated_mem
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * get_allocated_mem(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/bthread/execution_queue_inl.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: bthread::deallocate
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void deallocate(TaskNode* node)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/bthread/execution_queue_inl.h:157,1
    - Dst: dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:163,1
    - Dst: bthread::ExecutionQueueBase
      Src: /src/brpc/src/bthread/execution_queue_inl.h:169,1
    - Dst: _head
      Src: /src/brpc/src/bthread/execution_queue_inl.h:170,1
    - Dst: _versioned_ref
      Src: /src/brpc/src/bthread/execution_queue_inl.h:171,1
    - Dst: _high_priority_tasks
      Src: /src/brpc/src/bthread/execution_queue_inl.h:172,1
    - Dst: _pthread_started
      Src: /src/brpc/src/bthread/execution_queue_inl.h:173,1
    - Dst: _cond
      Src: /src/brpc/src/bthread/execution_queue_inl.h:174,1
    - Dst: _current_head
      Src: /src/brpc/src/bthread/execution_queue_inl.h:175,1
    - Dst: bthread::butex_create_checked
      Src: /src/brpc/src/bthread/execution_queue_inl.h:176,1
    - Dst: store
      Src: /src/brpc/src/bthread/execution_queue_inl.h:177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 178
    functionName: bthread::ExecutionQueueBase
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 2
    functionsReached:
    - _high_priority_tasks
    - _head
    - bthread::ExecutionQueueBase
    - dereference
    - _versioned_ref
    - DISALLOW_COPY_AND_ASSIGN
    - store
    - _pthread_started
    - _cond
    - _current_head
    - bthread::butex_create_checked
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ExecutionQueueBase
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ExecutionQueueBase*::dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - queue
    argTypes:
    - ExecutionQueueBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 165
    functionName: operator()(ExecutionQueueBase* queue)
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - ExecutionQueueBase*::dereference
    linkageType: ''
    returnType: void
    signature: void operator()(ExecutionQueueBase* queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/execution_queue_inl.h:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: ~ExecutionQueueBase()
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - butex_destroy
    linkageType: ''
    returnType: void
    signature: void ~ExecutionQueueBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/execution_queue_inl.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 184
    functionName: bthread::stopped
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: bthread::_release_additional_reference
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - dereference
    linkageType: ''
    returnType: void
    signature: void _release_additional_reference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: bthread::_version_of_id
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t _version_of_id(uint64_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: bthread::_version_of_vref
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t _version_of_vref(int64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: bthread::_ref_of_vref
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t _ref_of_vref(int64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - ref
    argTypes:
    - uint32_t
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    functionName: bthread::_make_vref
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t _make_vref(uint32_t version, int32_t ref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: self_type*::dereference
      Src: /src/brpc/src/bthread/execution_queue_inl.h:262,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - queue
    argTypes:
    - self_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 264
    functionName: operator()(self_type* queue)
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - self_type*::dereference
    linkageType: ''
    returnType: void
    signature: void operator()(self_type* queue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_allocated_mem
      Src: /src/brpc/src/bthread/execution_queue_inl.h:275,1
    - Dst: T*::~T
      Src: /src/brpc/src/bthread/execution_queue_inl.h:276,1
    - Dst: debug_block_deallocate
      Src: /src/brpc/src/bthread/execution_queue_inl.h:277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - node
    argTypes:
    - TaskNode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: ExecutionQueue::clear_task_mem
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - bthread::get_allocated_mem
    - debug_block_deallocate
    - T*::~T
    linkageType: ''
    returnType: void
    signature: void clear_task_mem(TaskNode* node)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: f
      Src: /src/brpc/src/bthread/execution_queue_inl.h:283,1
    - Dst: static_cast<iterator&>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - meta
    - specific_function
    - ' it'
    argTypes:
    - void*
    - void*
    - TaskIteratorBase
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: ExecutionQueue::execute_task
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - f
    - static_cast<iterator&>
    linkageType: ''
    returnType: int
    signature: "int execute_task(void* meta, void* specific_function,\n                            TaskIteratorBase&
      it)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::ExecutionQueueBase::create
      Src: /src/brpc/src/bthread/execution_queue_inl.h:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - id
    - options
    - execute_func
    - meta
    argTypes:
    - id_t*
    - ExecutionQueueOptions*
    - execute_func_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 2
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: ExecutionQueue::create
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - bthread::ExecutionQueueBase::create
    linkageType: ''
    returnType: int
    signature: "int create(id_t* id, const ExecutionQueueOptions* options,\n                             execute_func_t
      execute_func, void* meta)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::ExecutionQueueBase::address
      Src: /src/brpc/src/bthread/execution_queue_inl.h:293,1
    - Dst: Base::scoped_ptr_t::release
      Src: /src/brpc/src/bthread/execution_queue_inl.h:294,1
    - Dst: scoped_ptr_t::Pass
      Src: /src/brpc/src/bthread/execution_queue_inl.h:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 292
    functionDepth: 2
    functionLinenumber: 292
    functionLinenumberEnd: 297
    functionName: ExecutionQueue::WARN_UNUSED_RESULT
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - Base::scoped_ptr_t::release
    - scoped_ptr_t::Pass
    - bthread::ExecutionQueueBase::address
    linkageType: ''
    returnType: scoped_ptr_t
    signature: scoped_ptr_t WARN_UNUSED_RESULT
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExecutionQueue::execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - task
    argTypes:
    - typename butil::add_const_reference<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 301
    functionName: ExecutionQueue::execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 1
    functionsReached:
    - ExecutionQueue::execute
    linkageType: ''
    returnType: int
    signature: int execute(typename butil::add_const_reference<T>::type task)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExecutionQueue::execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:305,1
    - Dst: std::forward<T>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:305,1
    - Dst: const_cast<T&>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - task
    - options
    - handle
    argTypes:
    - typename butil::add_const_reference<T>::type
    - TaskOptions*
    - TaskHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 306
    functionName: ExecutionQueue::execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 2
    functionsReached:
    - const_cast<T&>
    - ExecutionQueue::execute
    - std::forward<T>
    linkageType: ''
    returnType: int
    signature: "int execute(typename butil::add_const_reference<T>::type task,\n                const
      TaskOptions* options, TaskHandle* handle)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExecutionQueue::execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:310,1
    - Dst: std::forward<T>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:310,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' task'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 311
    functionName: ExecutionQueue::execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 3
    functionsReached:
    - ExecutionQueue::execute
    - std::forward<T>
    linkageType: ''
    returnType: int
    signature: int execute(T&& task)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: stopped
      Src: /src/brpc/src/bthread/execution_queue_inl.h:315,1
    - Dst: allocate_node
      Src: /src/brpc/src/bthread/execution_queue_inl.h:318,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/execution_queue_inl.h:319,1
    - Dst: debug_block_allocate
      Src: /src/brpc/src/bthread/execution_queue_inl.h:322,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/execution_queue_inl.h:323,1
    - Dst: return_task_node
      Src: /src/brpc/src/bthread/execution_queue_inl.h:324,1
    - Dst: std::forward<T>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:327,1
    - Dst: T::T
      Src: /src/brpc/src/bthread/execution_queue_inl.h:327,1
    - Dst: TaskOptions::TaskOptions
      Src: /src/brpc/src/bthread/execution_queue_inl.h:329,1
    - Dst: start_execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:339,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - ' task'
    - options
    - handle
    argTypes:
    - T
    - TaskOptions*
    - TaskHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 313
    functionDepth: 1
    functionLinenumber: 313
    functionLinenumberEnd: 341
    functionName: ExecutionQueue::execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 3
    functionsReached:
    - start_execute
    - return_task_node
    - std::forward<T>
    - debug_block_allocate
    - T::T
    - BAIDU_UNLIKELY
    - allocate_node
    - TaskOptions::TaskOptions
    - stopped
    linkageType: ''
    returnType: int
    signature: "int execute(T&& task,\n                const TaskOptions* options,
      TaskHandle* handle)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 348
    functionName: ExecutionQueueOptions::ExecutionQueueOptions
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExecutionQueueOptions::ExecutionQueueOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_key_create
      Src: /src/brpc/src/bthread/execution_queue_inl.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - id
    - options
    - meta
    argTypes:
    - ExecutionQueueId<T>*
    - ExecutionQueueOptions*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 351
    functionDepth: 3
    functionLinenumber: 351
    functionLinenumberEnd: 357
    functionName: execution_queue_start
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 28
    functionsReached:
    - bthread_key_create
    linkageType: ''
    returnType: int
    signature: "int execution_queue_start(\n        ExecutionQueueId<T>* id,\n        const
      ExecutionQueueOptions* options,\n        int (*execute)(void* meta, TaskIterator<T>&),\n
      \       void* meta)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::ExecutionQueueBase::address
      Src: /src/brpc/src/bthread/execution_queue_inl.h:362,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ExecutionQueueId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 360
    functionDepth: 2
    functionLinenumber: 360
    functionLinenumberEnd: 363
    functionName: execution_queue_address
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 2
    functionsReached:
    - bthread::ExecutionQueueBase::address
    linkageType: ''
    returnType: typename ExecutionQueue<T>::scoped_ptr_t
    signature: typename ExecutionQueue<T>::scoped_ptr_t execution_queue_address(ExecutionQueueId<T>
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execution_queue_execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - task
    argTypes:
    - ExecutionQueueId<T>
    - typename butil::add_const_reference<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 369
    functionName: execution_queue_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 31
    functionsReached:
    - execution_queue_execute
    linkageType: ''
    returnType: int
    signature: "int execution_queue_execute(ExecutionQueueId<T> id, \n                       typename
      butil::add_const_reference<T>::type task)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execution_queue_execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - id
    - task
    - options
    argTypes:
    - ExecutionQueueId<T>
    - typename butil::add_const_reference<T>::type
    - TaskOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 376
    functionName: execution_queue_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 32
    functionsReached:
    - execution_queue_execute
    linkageType: ''
    returnType: int
    signature: "int execution_queue_execute(ExecutionQueueId<T> id, \n                       typename
      butil::add_const_reference<T>::type task,\n                       const TaskOptions*
      options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::ExecutionQueueBase::address
      Src: /src/brpc/src/bthread/execution_queue_inl.h:384,1
    - Dst: typename ExecutionQueue<T>::scoped_ptr_t::execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - id
    - task
    - options
    - handle
    argTypes:
    - ExecutionQueueId<T>
    - typename butil::add_const_reference<T>::type
    - TaskOptions*
    - TaskHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 379
    functionDepth: 2
    functionLinenumber: 379
    functionLinenumberEnd: 390
    functionName: execution_queue_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 32
    functionsReached:
    - typename ExecutionQueue<T>::scoped_ptr_t::execute
    - bthread::ExecutionQueueBase::address
    linkageType: ''
    returnType: int
    signature: "int execution_queue_execute(ExecutionQueueId<T> id, \n                       typename
      butil::add_const_reference<T>::type task,\n                       const TaskOptions*
      options,\n                       TaskHandle* handle)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execution_queue_execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:395,1
    - Dst: std::forward<T>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:395,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - id
    - ' task'
    argTypes:
    - ExecutionQueueId<T>
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 396
    functionName: execution_queue_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 33
    functionsReached:
    - execution_queue_execute
    - std::forward<T>
    linkageType: ''
    returnType: int
    signature: "int execution_queue_execute(ExecutionQueueId<T> id,\n                                   T&&
      task)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execution_queue_execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:402,1
    - Dst: std::forward<T>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:402,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - id
    - ' task'
    - options
    argTypes:
    - ExecutionQueueId<T>
    - T
    - TaskOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 403
    functionName: execution_queue_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 34
    functionsReached:
    - execution_queue_execute
    - std::forward<T>
    linkageType: ''
    returnType: int
    signature: "int execution_queue_execute(ExecutionQueueId<T> id,\n                                   T&&
      task,\n                                   const TaskOptions* options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::ExecutionQueueBase::address
      Src: /src/brpc/src/bthread/execution_queue_inl.h:411,1
    - Dst: typename ExecutionQueue<T>::scoped_ptr_t::execute
      Src: /src/brpc/src/bthread/execution_queue_inl.h:413,1
    - Dst: std::forward<T>
      Src: /src/brpc/src/bthread/execution_queue_inl.h:413,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 4
    argNames:
    - id
    - ' task'
    - options
    - handle
    argTypes:
    - ExecutionQueueId<T>
    - T
    - TaskOptions*
    - TaskHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 417
    functionName: execution_queue_execute
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 34
    functionsReached:
    - typename ExecutionQueue<T>::scoped_ptr_t::execute
    - std::forward<T>
    - bthread::ExecutionQueueBase::address
    linkageType: ''
    returnType: int
    signature: "int execution_queue_execute(ExecutionQueueId<T> id,\n                                   T&&
      task,\n                                   const TaskOptions* options,\n                                   TaskHandle*
      handle)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::ExecutionQueueBase::address
      Src: /src/brpc/src/bthread/execution_queue_inl.h:422,1
    - Dst: typename ExecutionQueue<T>::scoped_ptr_t::stop
      Src: /src/brpc/src/bthread/execution_queue_inl.h:424,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - id
    argTypes:
    - ExecutionQueueId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 420
    functionDepth: 2
    functionLinenumber: 420
    functionLinenumberEnd: 428
    functionName: execution_queue_stop
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 28
    functionsReached:
    - typename ExecutionQueue<T>::scoped_ptr_t::stop
    - bthread::ExecutionQueueBase::address
    linkageType: ''
    returnType: int
    signature: int execution_queue_stop(ExecutionQueueId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/bthread/execution_queue_inl.h:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ExecutionQueueId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 433
    functionName: execution_queue_join
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 28
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: int
    signature: int execution_queue_join(ExecutionQueueId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 438
    functionName: TaskOptions::TaskOptions
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskOptions::TaskOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - high_priority
    - in_place_if_possible
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 443
    functionName: TaskOptions::TaskOptions
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskOptions::TaskOptions(bool high_priority, bool in_place_if_possible)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 450
    functionName: bool
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: TaskIteratorBase::operator
    signature: TaskIteratorBase::operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_allocated_mem
      Src: /src/brpc/src/bthread/execution_queue_inl.h:455,1
    - Dst: cur_node
      Src: /src/brpc/src/bthread/execution_queue_inl.h:455,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 453
    functionDepth: 1
    functionLinenumber: 453
    functionLinenumberEnd: 457
    functionName: TaskIterator<T>::operator*() const
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - cur_node
    - bthread::get_allocated_mem
    linkageType: ''
    returnType: typename TaskIterator<T>::reference
    signature: typename TaskIterator<T>::reference TaskIterator<T>::operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskIteratorBase::operator++
      Src: /src/brpc/src/bthread/execution_queue_inl.h:461,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 460
    functionDepth: 0
    functionLinenumber: 460
    functionLinenumberEnd: 463
    functionName: '& TaskIterator<T>::operator++()'
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - TaskIteratorBase::operator++
    linkageType: ''
    returnType: TaskIterator<T>
    signature: TaskIterator<T> & TaskIterator<T>::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 468
    functionName: TaskIterator<T>::operator++(int)
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskIterator<T>::operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 473
    functionName: TaskHandle::TaskHandle
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskHandle::TaskHandle()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: node::cancel
      Src: /src/brpc/src/bthread/execution_queue_inl.h:479,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - TaskHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 480
    functionName: execution_queue_cancel
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 10
    functionsReached:
    - node::cancel
    linkageType: ''
    returnType: int
    signature: int execution_queue_cancel(const TaskHandle& h)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:487,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/execution_queue_inl.h:496,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/execution_queue_inl.h:501,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/execution_queue_inl.h:515,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/execution_queue_inl.h:521,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 3
    argNames:
    - old_head
    - new_tail
    - has_uniterated
    argTypes:
    - TaskNode*
    - TaskNode**
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 527
    functionName: ExecutionQueueBase::_more_tasks
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - sched_yield
    - CHECK_NE
    - CHECK
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: "bool ExecutionQueueBase::_more_tasks(\n        TaskNode* old_head,
      TaskNode** new_tail, \n        bool has_uniterated)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/execution_queue_inl.h:530,1
    - Dst: _ref_of_vref
      Src: /src/brpc/src/bthread/execution_queue_inl.h:532,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/execution_queue_inl.h:539,1
    - Dst: _version_of_vref
      Src: /src/brpc/src/bthread/execution_queue_inl.h:540,1
    - Dst: _version_of_id
      Src: /src/brpc/src/bthread/execution_queue_inl.h:541,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/execution_queue_inl.h:548,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/execution_queue_inl.h:567,1
    - Dst: _make_vref
      Src: /src/brpc/src/bthread/execution_queue_inl.h:568,1
    - Dst: _on_recycle
      Src: /src/brpc/src/bthread/execution_queue_inl.h:571,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/execution_queue_inl.h:580,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/execution_queue_inl.h:583,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 529
    functionDepth: 1
    functionLinenumber: 529
    functionLinenumberEnd: 585
    functionName: ExecutionQueueBase::dereference
    functionSourceFile: /src/brpc/src/bthread/execution_queue_inl.h
    functionUses: 0
    functionsReached:
    - _version_of_vref
    - _make_vref
    - compare_exchange_strong
    - __builtin_expect
    - LOG
    - _ref_of_vref
    - _on_recycle
    - fetch_sub
    - _version_of_id
    linkageType: ''
    returnType: int
    signature: int ExecutionQueueBase::dereference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 68
    functionName: brpc::ChannelOptions::ChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 140
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelOptions::ChannelOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:72,1
    - Dst: ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/src/brpc/channel.cpp:72,1
    - Dst: get
      Src: /src/brpc/src/brpc/channel.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 75
    functionName: brpc::ChannelOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 3
    functionsReached:
    - reset
    - get
    - ChannelSSLOptions::ChannelSSLOptions
    linkageType: ''
    returnType: ChannelSSLOptions
    signature: ChannelSSLOptions * ChannelOptions::mutable_ssl_options()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:79,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:80,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:81,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:83,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/channel.cpp:87,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:90,1
    - Dst: butil::MurmurHash3_x64_128_Init
      Src: /src/brpc/src/brpc/channel.cpp:91,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:93,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:94,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:95,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:98,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:99,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:101,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:102,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:103,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:104,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:105,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:105,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:107,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:108,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:109,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:110,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:111,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:112,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:113,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:114,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:116,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:117,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:118,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:119,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:124,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:127,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:129,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:130,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/channel.cpp:131,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:133,1
    - Dst: certificate::data
      Src: /src/brpc/src/brpc/channel.cpp:134,1
    - Dst: certificate::size
      Src: /src/brpc/src/brpc/channel.cpp:134,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:135,1
    - Dst: private_key::data
      Src: /src/brpc/src/brpc/channel.cpp:136,1
    - Dst: private_key::size
      Src: /src/brpc/src/brpc/channel.cpp:136,1
    - Dst: butil::MurmurHash3_x64_128_Final
      Src: /src/brpc/src/brpc/channel.cpp:141,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:142,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 52
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - ChannelOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 149
    functionName: brpc::ComputeChannelSignature
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::ChannelSignature
    - ssl_options
    - private_key::size
    - certificate::empty
    - certificate::data
    - brpc::has_ssl_options
    - connection_group::empty
    - hc_option::health_check_path::empty
    - std::string::data
    - std::string::append
    - butil::MurmurHash3_x64_128_Final
    - std::to_string
    - butil::MurmurHash3_x64_128_Update
    - std::string::push_back
    - certificate::size
    - std::string::clear
    - butil::MurmurHash3_x64_128_Init
    - std::string::reserve
    - private_key::data
    - std::string::size
    linkageType: ''
    returnType: ChannelSignature
    signature: ChannelSignature ComputeChannelSignature(const ChannelOptions& opt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 157
    functionName: brpc::Channel::Channel
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 214
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Channel::Channel(ProfilerLinker)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:161,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/channel.cpp:162,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 164
    functionName: Channel::~Channel()
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - SocketMapRemove
    - ComputeChannelSignature
    - SocketMapKey
    linkageType: ''
    returnType: void
    signature: void Channel::~Channel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:169,1
    - Dst: brpc::rdma::SupportedByRdma
      Src: /src/brpc/src/brpc/channel.cpp:172,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:173,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:173,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 178
    functionName: brpc::OptionsAvailableForRdma
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelOptions*::protocol::name
    - brpc::rdma::SupportedByRdma
    - LOG
    - ChannelOptions*::has_ssl_options
    linkageType: ''
    returnType: bool
    signature: bool OptionsAvailableForRdma(const ChannelOptions* opt)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:185,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:187,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:190,1
    - Dst: OptionsAvailableForRdma
      Src: /src/brpc/src/brpc/channel.cpp:196,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:199,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/channel.cpp:200,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/channel.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:204,1
    - Dst: connection_type::has_error
      Src: /src/brpc/src/brpc/channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:227,1
    - Dst: connection_type::name
      Src: /src/brpc/src/brpc/channel.cpp:228,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:233,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/channel.cpp:234,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/channel.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:241,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:242,1
    - Dst: brpc::policy::global_esp_authenticator
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: front
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: back
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/src/brpc/channel.cpp:255,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 58
    argCount: 1
    argNames:
    - options
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 258
    functionName: brpc::Channel::InitChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - get_client_side_messenger
    - connection_type::name
    - butil::TrimWhitespace
    - hc_option::health_check_path::empty
    - brpc::policy::global_esp_authenticator
    - LOG
    - brpc::rdma::GlobalRdmaInitializeOrDie
    - bthread_self_tag
    - ::isspace
    - ConnectionTypeToString
    - brpc::rdma::InitPollingModeWithTag
    - protocol::name
    - back
    - connection_type::has_error
    - FindProtocol
    - Protocol*::support_client
    - OptionsAvailableForRdma
    - empty
    - front
    linkageType: ''
    returnType: int
    signature: int Channel::InitChannelOptions(const ChannelOptions* options)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:262,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:263,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:265,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:266,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:267,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:272,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:276,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:277,1
    - Dst: strstr
      Src: /src/brpc/src/brpc/channel.cpp:280,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:281,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:285,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:290,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 291
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 149
    functionsReached:
    - hostname2endpoint
    - GlobalInitializeOrDie
    - FindProtocol
    - Protocol*::support_client
    - butil::EndPoint::EndPoint
    - Protocol*::parse_server_address
    - str2endpoint
    - strstr
    - LOG
    - brpc::Channel::InitSingle
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(const char* server_addr_and_port,\n                  const
      ChannelOptions* options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:295,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:296,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:298,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:300,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:305,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:310,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:312,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:316,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - server_addr
    - port
    - options
    argTypes:
    - char*
    - int
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 317
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 149
    functionsReached:
    - hostname2endpoint
    - GlobalInitializeOrDie
    - FindProtocol
    - Protocol*::support_client
    - butil::EndPoint::EndPoint
    - Protocol*::parse_server_address
    - str2endpoint
    - LOG
    - brpc::Channel::InitSingle
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(const char* server_addr, int port,\n                  const
      ChannelOptions* options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:321,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:322,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:324,1
    - Dst: std::make_shared<SocketSSLContext>
      Src: /src/brpc/src/brpc/channel.cpp:327,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:329,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:330,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' options'
    - ssl_ctx
    argTypes:
    - ChannelOptions
    - std::shared_ptr<SocketSSLContext>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 335
    functionName: brpc::CreateSocketSSLContext
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<SocketSSLContext>
    - ssl_options
    - brpc::CreateClientSSLContext
    - brpc::has_ssl_options
    - LOG
    linkageType: ''
    returnType: int
    signature: "int CreateSocketSSLContext(const ChannelOptions& options,\n                                  std::shared_ptr<SocketSSLContext>*
      ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - butil::EndPoint
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 340
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 149
    functionsReached:
    - brpc::Channel::InitSingle
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(butil::EndPoint server_addr_and_port,\n                  const
      ChannelOptions* options)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:346,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:347,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:351,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:353,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:353,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:356,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:356,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:362,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:366,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:368,1
    - Dst: SocketMapInsert
      Src: /src/brpc/src/brpc/channel.cpp:371,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:371,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:373,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 4
    argNames:
    - ' server_addr_and_port'
    - raw_server_address
    - options
    - raw_port
    argTypes:
    - butil::EndPoint
    - char*
    - ChannelOptions*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 342
    functionDepth: 2
    functionLinenumber: 342
    functionLinenumberEnd: 377
    functionName: brpc::Channel::InitSingle
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 3
    functionsReached:
    - append
    - GlobalInitializeOrDie
    - CreateSocketSSLContext
    - brpc::Channel::InitChannelOptions
    - empty
    - SocketMapInsert
    - mutable_ssl_options
    - SocketMapKey
    - std::to_string
    - ParseURL
    - LOG
    - ComputeChannelSignature
    linkageType: ''
    returnType: int
    signature: "int Channel::InitSingle(const butil::EndPoint& server_addr_and_port,\n
      \                       const char* raw_server_address,\n                        const
      ChannelOptions* options,\n                        int raw_port)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Init
      Src: /src/brpc/src/brpc/channel.cpp:384,1
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:386,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:387,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:391,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:393,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:393,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:396,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:396,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:397,1
    - Dst: LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/src/brpc/channel.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:403,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:410,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:412,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/channel.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:416,1
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:419,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/channel.cpp:419,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 3
    argNames:
    - ns_url
    - lb_name
    - options
    argTypes:
    - char*
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 379
    functionDepth: 2
    functionLinenumber: 379
    functionLinenumberEnd: 421
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 150
    functionsReached:
    - append
    - reset
    - GlobalInitializeOrDie
    - CreateSocketSSLContext
    - std::unique_ptr::Init
    - brpc::Channel::InitChannelOptions
    - brpc::Channel::Init
    - LoadBalancerWithNaming::LoadBalancerWithNaming
    - empty
    - std::unique_ptr::release
    - mutable_ssl_options
    - std::to_string
    - ParseURL
    - LOG
    - ComputeChannelSignature
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(const char* ns_url,\n                  const char*
      lb_name,\n                  const ChannelOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/channel.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 423
    functionDepth: 1
    functionLinenumber: 423
    functionLinenumberEnd: 426
    functionName: brpc::HandleTimeout
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleTimeout(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/channel.cpp:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 431
    functionName: brpc::HandleBackupRequest
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleBackupRequest(void* arg)
  - BBCount: 27
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/channel.cpp:438,1
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/channel.cpp:439,1
    - Dst: Controller*::OnRPCBegin
      Src: /src/brpc/src/brpc/channel.cpp:440,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:442,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:443,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:445,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:448,1
    - Dst: protocol::has_param
      Src: /src/brpc/src/brpc/channel.cpp:452,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/channel.cpp:453,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:453,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:454,1
    - Dst: protocol::param
      Src: /src/brpc/src/brpc/channel.cpp:454,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/channel.cpp:457,1
    - Dst: host
      Src: /src/brpc/src/brpc/channel.cpp:458,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:458,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/channel.cpp:459,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/channel.cpp:465,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/channel.cpp:467,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/src/brpc/channel.cpp:468,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:469,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/channel.cpp:471,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:472,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:473,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/channel.cpp:476,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:476,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/channel.cpp:487,1
    - Dst: Controller*::set_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:491,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/channel.cpp:493,1
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/channel.cpp:493,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/channel.cpp:494,1
    - Dst: _get_method_name
      Src: /src/brpc/src/brpc/channel.cpp:497,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/channel.cpp:499,1
    - Dst: brpc::Span::CreateClientSpan
      Src: /src/brpc/src/brpc/channel.cpp:504,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/channel.cpp:506,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/channel.cpp:506,1
    - Dst: Span*::set_base_cid
      Src: /src/brpc/src/brpc/channel.cpp:507,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/channel.cpp:508,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/channel.cpp:509,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:513,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:514,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:520,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:522,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/channel.cpp:525,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/channel.cpp:526,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/src/brpc/channel.cpp:534,1
    - Dst: _serialize_request
      Src: /src/brpc/src/brpc/channel.cpp:545,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:546,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:549,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/channel.cpp:553,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:554,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:556,1
    - Dst: Controller*::_request_streams::empty
      Src: /src/brpc/src/brpc/channel.cpp:559,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:561,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:562,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:566,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:567,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:567,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:568,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:574,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:577,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:579,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:581,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:582,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:584,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:585,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:586,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:588,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:592,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:593,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:595,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:597,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:598,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:599,1
    - Dst: Controller*::IssueRPC
      Src: /src/brpc/src/brpc/channel.cpp:605,1
    - Dst: Join
      Src: /src/brpc/src/brpc/channel.cpp:610,1
    - Dst: Controller*::SubmitSpan
      Src: /src/brpc/src/brpc/channel.cpp:612,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/channel.cpp:614,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/channel.cpp:614,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 112
    argCount: 5
    argNames:
    - method
    - controller_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 616
      start: 433
    functionDepth: 3
    functionLinenumber: 433
    functionLinenumberEnd: 616
    functionName: brpc::Channel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 91
    functionsReached:
    - Controller*::is_used_by_rpc
    - Controller*::HandleSendFailed
    - Span*::set_start_send_us
    - Controller*::IssueRPC
    - CHECK_EQ
    - Controller*::backup_request_ms
    - Controller*::SetFailed
    - Controller*::set_max_retry
    - Controller*::set_backup_request_ms
    - google::protobuf::MethodDescriptor*::full_name
    - google::protobuf::Closure*::Run
    - protocol::has_param
    - butil::cpuwide_time_us
    - SetHostAndPort
    - Controller*::SubmitSpan
    - Controller*::set_used_by_rpc
    - protocol::param
    - butil::microseconds_to_timespec
    - Controller*::protocol_param
    - Controller*::add_flag
    - BAIDU_UNLIKELY
    - Controller*::log_id
    - LOG_IF
    - Controller*::connection_type
    - Controller*::OnRPCBegin
    - Span*::set_protocol
    - Controller*::max_retry
    - butil::gettimeofday_us
    - _get_method_name
    - brpc::Channel::SingleServer
    - _serialize_request
    - Join
    - Controller*::set_timeout_ms
    - Controller*::http_request
    - Controller*::OnRPCEnd
    - static_cast<Controller*>
    - CHECK
    - IsTraceable
    - Span*::set_base_cid
    - brpc::Span::CreateClientSpan
    - Controller*::timeout_ms
    - Controller*::set_connection_type
    - Controller*::FailedInline
    - brpc::Span::tls_parent
    - TooManyUserCode
    - Controller*::_request_streams::empty
    - bthread_timer_add
    - empty
    - host
    - Controller*::call_id
    - Span*::set_log_id
    - bthread_id_lock_and_reset_range
    linkageType: ''
    returnType: void
    signature: "void Channel::CallMethod(const google::protobuf::MethodDescriptor*
      method,\n                         google::protobuf::RpcController* controller_base,\n
      \                        const google::protobuf::Message* request,\n                         google::protobuf::Message*
      response,\n                         google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/src/brpc/channel.cpp:620,1
    - Dst: brpc::Channel::Describe
      Src: /src/brpc/src/brpc/channel.cpp:623,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 618
    functionDepth: 1
    functionLinenumber: 618
    functionLinenumberEnd: 626
    functionName: brpc::Channel::Describe
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::Channel::SingleServer
    - brpc::Channel::Describe
    linkageType: ''
    returnType: void
    signature: void Channel::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Weight
      Src: /src/brpc/src/brpc/channel.cpp:629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 630
    functionName: brpc::Channel::Weight
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::Channel::Weight
    linkageType: ''
    returnType: int
    signature: int Channel::Weight()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/channel.cpp:635,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/channel.cpp:635,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/channel.cpp:643,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 645
      start: 632
    functionDepth: 1
    functionLinenumber: 632
    functionLinenumberEnd: 645
    functionName: brpc::Channel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::IsAvailable
    - brpc::SetTrackMeAddress
    - SelectServer
    linkageType: ''
    returnType: int
    signature: int Channel::CheckHealth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 68
    functionName: brpc::ChannelOptions::ChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 140
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelOptions::ChannelOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:72,1
    - Dst: ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/src/brpc/channel.cpp:72,1
    - Dst: get
      Src: /src/brpc/src/brpc/channel.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 75
    functionName: brpc::ChannelOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 3
    functionsReached:
    - reset
    - get
    - ChannelSSLOptions::ChannelSSLOptions
    linkageType: ''
    returnType: ChannelSSLOptions
    signature: ChannelSSLOptions * ChannelOptions::mutable_ssl_options()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:79,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:80,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:81,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:83,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/channel.cpp:87,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:90,1
    - Dst: butil::MurmurHash3_x64_128_Init
      Src: /src/brpc/src/brpc/channel.cpp:91,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:93,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:94,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:95,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:98,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:99,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:101,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:102,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:103,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:104,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:105,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:105,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:107,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:108,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:109,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:110,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:111,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:112,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:113,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:114,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:116,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:117,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:118,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:119,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:124,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:127,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:129,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:130,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/channel.cpp:131,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:133,1
    - Dst: certificate::data
      Src: /src/brpc/src/brpc/channel.cpp:134,1
    - Dst: certificate::size
      Src: /src/brpc/src/brpc/channel.cpp:134,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:135,1
    - Dst: private_key::data
      Src: /src/brpc/src/brpc/channel.cpp:136,1
    - Dst: private_key::size
      Src: /src/brpc/src/brpc/channel.cpp:136,1
    - Dst: butil::MurmurHash3_x64_128_Final
      Src: /src/brpc/src/brpc/channel.cpp:141,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:142,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 52
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - ChannelOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 149
    functionName: brpc::ComputeChannelSignature
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::ChannelSignature
    - ssl_options
    - private_key::size
    - certificate::empty
    - certificate::data
    - brpc::has_ssl_options
    - connection_group::empty
    - hc_option::health_check_path::empty
    - std::string::data
    - std::string::append
    - butil::MurmurHash3_x64_128_Final
    - std::to_string
    - butil::MurmurHash3_x64_128_Update
    - std::string::push_back
    - certificate::size
    - std::string::clear
    - butil::MurmurHash3_x64_128_Init
    - std::string::reserve
    - private_key::data
    - std::string::size
    linkageType: ''
    returnType: ChannelSignature
    signature: ChannelSignature ComputeChannelSignature(const ChannelOptions& opt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 157
    functionName: brpc::Channel::Channel
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 214
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Channel::Channel(ProfilerLinker)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:161,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/channel.cpp:162,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 164
    functionName: Channel::~Channel()
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - SocketMapRemove
    - ComputeChannelSignature
    - SocketMapKey
    linkageType: ''
    returnType: void
    signature: void Channel::~Channel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:169,1
    - Dst: brpc::rdma::SupportedByRdma
      Src: /src/brpc/src/brpc/channel.cpp:172,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:173,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:173,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 178
    functionName: brpc::OptionsAvailableForRdma
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelOptions*::protocol::name
    - brpc::rdma::SupportedByRdma
    - LOG
    - ChannelOptions*::has_ssl_options
    linkageType: ''
    returnType: bool
    signature: bool OptionsAvailableForRdma(const ChannelOptions* opt)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:185,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:187,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:190,1
    - Dst: OptionsAvailableForRdma
      Src: /src/brpc/src/brpc/channel.cpp:196,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:199,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/channel.cpp:200,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/channel.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:204,1
    - Dst: connection_type::has_error
      Src: /src/brpc/src/brpc/channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:227,1
    - Dst: connection_type::name
      Src: /src/brpc/src/brpc/channel.cpp:228,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:233,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/channel.cpp:234,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/channel.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:241,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:242,1
    - Dst: brpc::policy::global_esp_authenticator
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: front
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: back
      Src: /src/brpc/src/brpc/channel.cpp:254,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/src/brpc/channel.cpp:255,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 58
    argCount: 1
    argNames:
    - options
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 258
    functionName: brpc::Channel::InitChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 2
    functionsReached:
    - get_client_side_messenger
    - connection_type::name
    - butil::TrimWhitespace
    - hc_option::health_check_path::empty
    - brpc::policy::global_esp_authenticator
    - LOG
    - brpc::rdma::GlobalRdmaInitializeOrDie
    - bthread_self_tag
    - ::isspace
    - ConnectionTypeToString
    - brpc::rdma::InitPollingModeWithTag
    - protocol::name
    - back
    - connection_type::has_error
    - FindProtocol
    - Protocol*::support_client
    - OptionsAvailableForRdma
    - empty
    - front
    linkageType: ''
    returnType: int
    signature: int Channel::InitChannelOptions(const ChannelOptions* options)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:262,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:263,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:265,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:266,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:267,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:272,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:276,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:277,1
    - Dst: strstr
      Src: /src/brpc/src/brpc/channel.cpp:280,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:281,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:285,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:290,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 260
    functionDepth: 3
    functionLinenumber: 260
    functionLinenumberEnd: 291
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 150
    functionsReached:
    - hostname2endpoint
    - GlobalInitializeOrDie
    - FindProtocol
    - Protocol*::support_client
    - butil::EndPoint::EndPoint
    - Protocol*::parse_server_address
    - str2endpoint
    - strstr
    - LOG
    - brpc::Channel::InitSingle
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(const char* server_addr_and_port,\n                  const
      ChannelOptions* options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:295,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:296,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:298,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:300,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:305,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:310,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:312,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:316,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - server_addr
    - port
    - options
    argTypes:
    - char*
    - int
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 293
    functionDepth: 3
    functionLinenumber: 293
    functionLinenumberEnd: 317
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 150
    functionsReached:
    - hostname2endpoint
    - GlobalInitializeOrDie
    - FindProtocol
    - Protocol*::support_client
    - butil::EndPoint::EndPoint
    - Protocol*::parse_server_address
    - str2endpoint
    - LOG
    - brpc::Channel::InitSingle
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(const char* server_addr, int port,\n                  const
      ChannelOptions* options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:321,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:322,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:324,1
    - Dst: std::make_shared<SocketSSLContext>
      Src: /src/brpc/src/brpc/channel.cpp:327,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:329,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:330,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' options'
    - ssl_ctx
    argTypes:
    - ChannelOptions
    - std::shared_ptr<SocketSSLContext>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 335
    functionName: brpc::CreateSocketSSLContext
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<SocketSSLContext>
    - ssl_options
    - brpc::CreateClientSSLContext
    - brpc::has_ssl_options
    - LOG
    linkageType: ''
    returnType: int
    signature: "int CreateSocketSSLContext(const ChannelOptions& options,\n                                  std::shared_ptr<SocketSSLContext>*
      ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - butil::EndPoint
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 337
    functionDepth: 3
    functionLinenumber: 337
    functionLinenumberEnd: 340
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 150
    functionsReached:
    - brpc::Channel::InitSingle
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(butil::EndPoint server_addr_and_port,\n                  const
      ChannelOptions* options)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:346,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:347,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:351,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:353,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:353,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:356,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:356,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:362,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:366,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:368,1
    - Dst: SocketMapInsert
      Src: /src/brpc/src/brpc/channel.cpp:371,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:371,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:373,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 4
    argNames:
    - ' server_addr_and_port'
    - raw_server_address
    - options
    - raw_port
    argTypes:
    - butil::EndPoint
    - char*
    - ChannelOptions*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 342
    functionDepth: 2
    functionLinenumber: 342
    functionLinenumberEnd: 377
    functionName: brpc::Channel::InitSingle
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 6
    functionsReached:
    - append
    - GlobalInitializeOrDie
    - CreateSocketSSLContext
    - brpc::Channel::InitChannelOptions
    - empty
    - SocketMapInsert
    - mutable_ssl_options
    - SocketMapKey
    - std::to_string
    - ParseURL
    - LOG
    - ComputeChannelSignature
    linkageType: ''
    returnType: int
    signature: "int Channel::InitSingle(const butil::EndPoint& server_addr_and_port,\n
      \                       const char* raw_server_address,\n                        const
      ChannelOptions* options,\n                        int raw_port)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Init
      Src: /src/brpc/src/brpc/channel.cpp:384,1
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:386,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:387,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:391,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:393,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:393,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:396,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:396,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:397,1
    - Dst: LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/src/brpc/channel.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:403,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:410,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:412,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/channel.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:416,1
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:419,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/channel.cpp:419,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 3
    argNames:
    - ns_url
    - lb_name
    - options
    argTypes:
    - char*
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 379
    functionDepth: 2
    functionLinenumber: 379
    functionLinenumberEnd: 421
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 151
    functionsReached:
    - append
    - reset
    - GlobalInitializeOrDie
    - CreateSocketSSLContext
    - std::unique_ptr::Init
    - brpc::Channel::InitChannelOptions
    - brpc::Channel::Init
    - LoadBalancerWithNaming::LoadBalancerWithNaming
    - empty
    - std::unique_ptr::release
    - mutable_ssl_options
    - std::to_string
    - ParseURL
    - LOG
    - ComputeChannelSignature
    linkageType: ''
    returnType: int
    signature: "int Channel::Init(const char* ns_url,\n                  const char*
      lb_name,\n                  const ChannelOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/channel.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 423
    functionDepth: 1
    functionLinenumber: 423
    functionLinenumberEnd: 426
    functionName: brpc::HandleTimeout
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleTimeout(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/channel.cpp:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 431
    functionName: brpc::HandleBackupRequest
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleBackupRequest(void* arg)
  - BBCount: 27
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/channel.cpp:438,1
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/channel.cpp:439,1
    - Dst: Controller*::OnRPCBegin
      Src: /src/brpc/src/brpc/channel.cpp:440,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:442,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:443,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:445,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:448,1
    - Dst: protocol::has_param
      Src: /src/brpc/src/brpc/channel.cpp:452,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/channel.cpp:453,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:453,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:454,1
    - Dst: protocol::param
      Src: /src/brpc/src/brpc/channel.cpp:454,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/channel.cpp:457,1
    - Dst: host
      Src: /src/brpc/src/brpc/channel.cpp:458,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:458,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/channel.cpp:459,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/channel.cpp:465,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/channel.cpp:467,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/src/brpc/channel.cpp:468,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:469,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/channel.cpp:471,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:472,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:473,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/channel.cpp:476,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:476,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/channel.cpp:487,1
    - Dst: Controller*::set_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:491,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/channel.cpp:493,1
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/channel.cpp:493,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/channel.cpp:494,1
    - Dst: _get_method_name
      Src: /src/brpc/src/brpc/channel.cpp:497,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/channel.cpp:499,1
    - Dst: brpc::Span::CreateClientSpan
      Src: /src/brpc/src/brpc/channel.cpp:504,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/channel.cpp:506,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/channel.cpp:506,1
    - Dst: Span*::set_base_cid
      Src: /src/brpc/src/brpc/channel.cpp:507,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/channel.cpp:508,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/channel.cpp:509,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:513,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:514,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:520,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:522,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/channel.cpp:525,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/channel.cpp:526,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/src/brpc/channel.cpp:534,1
    - Dst: _serialize_request
      Src: /src/brpc/src/brpc/channel.cpp:545,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:546,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:549,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/channel.cpp:553,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:554,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:556,1
    - Dst: Controller*::_request_streams::empty
      Src: /src/brpc/src/brpc/channel.cpp:559,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:561,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:562,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:566,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:567,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:567,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:568,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:574,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:577,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:579,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:581,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:582,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:584,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:585,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:586,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:588,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:592,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:593,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:595,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:597,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:598,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:599,1
    - Dst: Controller*::IssueRPC
      Src: /src/brpc/src/brpc/channel.cpp:605,1
    - Dst: Join
      Src: /src/brpc/src/brpc/channel.cpp:610,1
    - Dst: Controller*::SubmitSpan
      Src: /src/brpc/src/brpc/channel.cpp:612,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/channel.cpp:614,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/channel.cpp:614,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 112
    argCount: 5
    argNames:
    - method
    - controller_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 616
      start: 433
    functionDepth: 3
    functionLinenumber: 433
    functionLinenumberEnd: 616
    functionName: brpc::Channel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 91
    functionsReached:
    - Controller*::is_used_by_rpc
    - Controller*::HandleSendFailed
    - Span*::set_start_send_us
    - Controller*::IssueRPC
    - CHECK_EQ
    - Controller*::backup_request_ms
    - Controller*::SetFailed
    - Controller*::set_max_retry
    - Controller*::set_backup_request_ms
    - google::protobuf::MethodDescriptor*::full_name
    - google::protobuf::Closure*::Run
    - protocol::has_param
    - butil::cpuwide_time_us
    - SetHostAndPort
    - Controller*::SubmitSpan
    - Controller*::set_used_by_rpc
    - protocol::param
    - butil::microseconds_to_timespec
    - Controller*::protocol_param
    - Controller*::add_flag
    - BAIDU_UNLIKELY
    - Controller*::log_id
    - LOG_IF
    - Controller*::connection_type
    - Controller*::OnRPCBegin
    - Span*::set_protocol
    - Controller*::max_retry
    - butil::gettimeofday_us
    - _get_method_name
    - brpc::Channel::SingleServer
    - _serialize_request
    - Join
    - Controller*::set_timeout_ms
    - Controller*::http_request
    - Controller*::OnRPCEnd
    - static_cast<Controller*>
    - CHECK
    - IsTraceable
    - Span*::set_base_cid
    - brpc::Span::CreateClientSpan
    - Controller*::timeout_ms
    - Controller*::set_connection_type
    - Controller*::FailedInline
    - brpc::Span::tls_parent
    - TooManyUserCode
    - Controller*::_request_streams::empty
    - bthread_timer_add
    - empty
    - host
    - Controller*::call_id
    - Span*::set_log_id
    - bthread_id_lock_and_reset_range
    linkageType: ''
    returnType: void
    signature: "void Channel::CallMethod(const google::protobuf::MethodDescriptor*
      method,\n                         google::protobuf::RpcController* controller_base,\n
      \                        const google::protobuf::Message* request,\n                         google::protobuf::Message*
      response,\n                         google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/src/brpc/channel.cpp:620,1
    - Dst: brpc::Channel::Describe
      Src: /src/brpc/src/brpc/channel.cpp:623,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 618
    functionDepth: 1
    functionLinenumber: 618
    functionLinenumberEnd: 626
    functionName: brpc::Channel::Describe
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 2
    functionsReached:
    - brpc::Channel::SingleServer
    - brpc::Channel::Describe
    linkageType: ''
    returnType: void
    signature: void Channel::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Weight
      Src: /src/brpc/src/brpc/channel.cpp:629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 630
    functionName: brpc::Channel::Weight
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 2
    functionsReached:
    - brpc::Channel::Weight
    linkageType: ''
    returnType: int
    signature: int Channel::Weight()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/channel.cpp:635,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/channel.cpp:635,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/channel.cpp:643,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 645
      start: 632
    functionDepth: 1
    functionLinenumber: 632
    functionLinenumberEnd: 645
    functionName: brpc::Channel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::IsAvailable
    - brpc::SetTrackMeAddress
    - SelectServer
    linkageType: ''
    returnType: int
    signature: int Channel::CheckHealth()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:61,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:61,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:62,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 63
    functionName: brpc::Stream::Stream
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void Stream::Stream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:71,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:72,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:73,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 65
    functionDepth: 3
    functionLinenumber: 65
    functionLinenumberEnd: 75
    functionName: Stream::~Stream()
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    - CHECK
    - bthread_id_list_destroy
    linkageType: ''
    returnType: void
    signature: void Stream::~Stream()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Stream::Stream
      Src: /src/brpc/src/brpc/stream.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:91,1
    - Dst: Stream*::_remote_settings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:98,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:101,1
    - Dst: execution_queue_start
      Src: /src/brpc/src/brpc/stream.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:109,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/stream.cpp:116,1
    - Dst: Stream*::BeforeRecycle
      Src: /src/brpc/src/brpc/stream.cpp:117,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:121,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:121,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/stream.cpp:122,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:124,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 39
    argCount: 4
    argNames:
    - options
    - remote_settings
    - id
    - parse_rpc_response
    argTypes:
    - StreamOptions
    - StreamSettings*
    - StreamId*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 77
    functionDepth: 4
    functionLinenumber: 77
    functionLinenumberEnd: 126
    functionName: brpc::Stream::Create
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - Socket::Create
    - execution_queue_start
    - SocketUniquePtr::get
    - Stream*::BeforeRecycle
    - Stream*::_remote_settings::MergeFrom
    - bthread_id_list_init
    - CHECK_EQ
    - Stream*::id
    - brpc::SetTrackMeAddress
    - Stream::Stream
    - LOG
    linkageType: ''
    returnType: int
    signature: "int Stream::Create(const StreamOptions &options, \n                   const
      StreamSettings *remote_settings,\n                   StreamId *id, bool parse_rpc_response)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_reset
      Src: /src/brpc/src/brpc/stream.cpp:130,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:134,1
    - Dst: brpc::policy::SendStreamClose
      Src: /src/brpc/src/brpc/stream.cpp:135,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:136,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:136,1
    - Dst: RemoveStream
      Src: /src/brpc/src/brpc/stream.cpp:140,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:140,1
    - Dst: execution_queue_stop
      Src: /src/brpc/src/brpc/stream.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 128
    functionDepth: 3
    functionLinenumber: 128
    functionLinenumberEnd: 145
    functionName: brpc::Stream::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SendStreamClose
    - execution_queue_stop
    - CHECK
    - stream_id
    - RemoveStream
    - bthread_id_list_reset
    - id
    linkageType: ''
    returnType: void
    signature: void Stream::BeforeRecycle(Socket *)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:151,1
    - Dst: writable
      Src: /src/brpc/src/brpc/stream.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:156,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:156,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:157,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/stream.cpp:158,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:163,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:168,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:171,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:176,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/stream.cpp:179,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:181,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:181,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:183,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:184,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:185,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:186,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:187,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:188,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:189,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:190,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:194,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:196,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:200,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:200,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:202,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:203,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:204,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:206,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/stream.cpp:210,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:211,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 51
    argCount: 2
    argNames:
    - data_list
    - size
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 214
    functionName: brpc::Stream::CutMessageIntoFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - id
    - butil::IOBuf*::cutn
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - brpc::policy::PackStreamMessage
    - remote_side
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_has_continuation
    - clear
    - brpc::Stream::WriteToHostSocket
    - writable
    - butil::IOBuf::empty
    - LOG
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf*::length
    - butil::IOBuf::length
    - CHECK
    - butil::IOBuf*::empty
    - StreamFrameMeta::set_frame_type
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t Stream::CutMessageIntoFileDescriptor(int /*fd*/, \n                                             butil::IOBuf
      **data_list, \n                                             size_t size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BRPC_HANDLE_EOVERCROWDED
      Src: /src/brpc/src/brpc/stream.cpp:217,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: brpc::Stream::WriteToHostSocket
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - BRPC_HANDLE_EOVERCROWDED
    - Write
    linkageType: ''
    returnType: void
    signature: void Stream::WriteToHostSocket(butil::IOBuf* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 224
    functionName: brpc::Stream::CutMessageIntoSSLChannel
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t Stream::CutMessageIntoSSLChannel(SSL*, butil::IOBuf**, size_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConnectMeta*::on_connect
      Src: /src/brpc/src/brpc/stream.cpp:229,1
    - Dst: ConnectMeta*::on_connect
      Src: /src/brpc/src/brpc/stream.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 235
    functionName: brpc::Stream::RunOnConnect
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - ConnectMeta*::on_connect
    linkageType: ''
    returnType: void
    signature: void * Stream::RunOnConnect(void *arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:239,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/stream.cpp:239,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:240,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:242,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:243,1
    - Dst: ConnectMeta::ConnectMeta
      Src: /src/brpc/src/brpc/stream.cpp:249,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:253,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:256,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:256,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:257,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 2
    argNames:
    - ptr
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 237
    functionDepth: 7
    functionLinenumber: 237
    functionLinenumberEnd: 263
    functionName: brpc::Stream::Connect
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - brpc::Stream::RunOnConnect
    - bthread_mutex_lock
    - CHECK_EQ
    - CHECK
    - bthread_mutex_unlock
    - berror
    - Socket*::id
    - LOG
    - ConnectMeta::ConnectMeta
    linkageType: ''
    returnType: int
    signature: "int Stream::Connect(Socket* ptr, const timespec*,\n                    int
      (*on_connect)(int, int, void *), void *data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetConnected
      Src: /src/brpc/src/brpc/stream.cpp:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: brpc::Stream::SetConnected
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::Stream::SetConnected
    linkageType: ''
    returnType: void
    signature: void Stream::SetConnected()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:270,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:272,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:276,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:277,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:280,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:282,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:282,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:283,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:285,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:285,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:287,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:288,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:289,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:292,1
    - Dst: brpc::Stream::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:297,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - remote_settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 269
    functionDepth: 7
    functionLinenumber: 269
    functionLinenumberEnd: 299
    functionName: brpc::Stream::SetConnected
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - MergeFrom
    - IsInitialized
    - bthread_mutex_lock
    - CHECK
    - bthread_mutex_unlock
    - stream_id
    - brpc::Stream::StartIdleTimer
    - id
    - brpc::Stream::TriggerOnConnectIfNeed
    linkageType: ''
    returnType: void
    signature: void Stream::SetConnected(const StreamSettings* remote_settings)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ConnectMeta::ConnectMeta
      Src: /src/brpc/src/brpc/stream.cpp:303,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:307,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:309,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:310,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:310,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:311,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:315,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 301
    functionDepth: 4
    functionLinenumber: 301
    functionLinenumberEnd: 316
    functionName: brpc::Stream::TriggerOnConnectIfNeed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - bthread_start_urgent
    - brpc::Stream::RunOnConnect
    - bthread_mutex_unlock
    - berror
    - LOG
    - ConnectMeta::ConnectMeta
    linkageType: ''
    returnType: void
    signature: void Stream::TriggerOnConnectIfNeed()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/stream.cpp:325,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:333,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:336,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:340,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:343,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:343,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:344,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - data
    - options
    argTypes:
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 352
    functionName: brpc::Stream::AppendIfNotFull
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::length
    - Write
    - BAIDU_SCOPED_LOCK
    - berror
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: int
    signature: "int Stream::AppendIfNotFull(const butil::IOBuf &data,\n                            const
      StreamWriteOptions* options)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:355,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:357,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:358,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:360,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:373,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:373,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:373,1
    - Dst: bthread_id_list_swap
      Src: /src/brpc/src/brpc/stream.cpp:386,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:388,1
    - Dst: bthread_id_list_reset
      Src: /src/brpc/src/brpc/stream.cpp:391,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:392,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 1
    argNames:
    - new_remote_consumed
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 354
    functionDepth: 7
    functionLinenumber: 354
    functionLinenumberEnd: 393
    functionName: brpc::Stream::SetRemoteConsumed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_list_swap
    - bthread_id_list_init
    - bthread_mutex_lock
    - CHECK
    - bthread_mutex_unlock
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - id
    - LOG
    linkageType: ''
    returnType: void
    signature: void Stream::SetRemoteConsumed(size_t new_remote_consumed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WritableMeta*::on_writable
      Src: /src/brpc/src/brpc/stream.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 395
    functionDepth: 2
    functionLinenumber: 395
    functionLinenumberEnd: 400
    functionName: brpc::Stream::RunOnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - WritableMeta*::on_writable
    linkageType: ''
    returnType: void
    signature: void * Stream::RunOnWritable(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/stream.cpp:406,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:415,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:415,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:416,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:419,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/stream.cpp:421,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 402
    functionDepth: 5
    functionLinenumber: 402
    functionLinenumberEnd: 422
    functionName: brpc::Stream::TriggerOnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_timer_del
    - bthread_start_background
    - bthread_id_unlock_and_destroy
    - brpc::Stream::RunOnWritable
    - berror
    - LOG
    linkageType: ''
    returnType: int
    signature: int Stream::TriggerOnWritable(bthread_id_t id, void *data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/src/brpc/stream.cpp:425,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/stream.cpp:426,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 427
    functionName: brpc::OnTimedOut
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint64_t>
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void OnTimedOut(void *arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: WritableMeta::WritableMeta
      Src: /src/brpc/src/brpc/stream.cpp:431,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:433,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/stream.cpp:438,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:440,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:440,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:442,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:451,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/brpc/stream.cpp:453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:455,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:455,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:459,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:462,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/src/brpc/stream.cpp:466,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:467,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:469,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/stream.cpp:469,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 4
    argNames:
    - arg
    - due_time
    - new_thread
    - join_id
    argTypes:
    - void*
    - timespec*
    - bool
    - bthread_id_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 429
    functionDepth: 7
    functionLinenumber: 429
    functionLinenumberEnd: 470
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<void*>
    - brpc::Stream::TriggerOnWritable
    - bthread_id_list_add
    - bthread_id_create
    - bthread_id_lock
    - CHECK_EQ
    - CHECK
    - bthread_timer_add
    - brpc::Stream::RunOnWritable
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - WritableMeta::WritableMeta
    - bthread_id_unlock
    - id
    - LOG
    - berror
    linkageType: ''
    returnType: void
    signature: "void Stream::Wait(void (*on_writable)(StreamId, void*, int), void*
      arg, \n                  const timespec* due_time, bool new_thread, bthread_id_t
      *join_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::Wait
      Src: /src/brpc/src/brpc/stream.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - due_time
    argTypes:
    - void*
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 472
    functionDepth: 1
    functionLinenumber: 472
    functionLinenumberEnd: 475
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::Stream::Wait
    linkageType: ''
    returnType: void
    signature: "void Stream::Wait(void (*on_writable)(StreamId, void *, int), void
      *arg,\n                  const timespec* due_time)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - error_code
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 479
    functionName: brpc::OnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnWritable(StreamId, void *arg, int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::Wait
      Src: /src/brpc/src/brpc/stream.cpp:484,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/stream.cpp:486,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - due_time
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 481
    functionDepth: 5
    functionLinenumber: 481
    functionLinenumberEnd: 489
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - bthread_id_join
    - brpc::Stream::Wait
    linkageType: ''
    returnType: int
    signature: int Stream::Wait(const timespec* due_time)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:493,1
    - Dst: frame_type
      Src: /src/brpc/src/brpc/stream.cpp:497,1
    - Dst: brpc::Stream::SetRemoteConsumed
      Src: /src/brpc/src/brpc/stream.cpp:499,1
    - Dst: feedback
      Src: /src/brpc/src/brpc/stream.cpp:499,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:500,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:500,1
    - Dst: append
      Src: /src/brpc/src/brpc/stream.cpp:504,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/stream.cpp:505,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:507,1
    - Dst: swap
      Src: /src/brpc/src/brpc/stream.cpp:508,1
    - Dst: has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:510,1
    - Dst: execution_queue_execute
      Src: /src/brpc/src/brpc/stream.cpp:513,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:515,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:517,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:522,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:523,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:526,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:528,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 3
    argNames:
    - ' fm'
    - buf
    - sock
    argTypes:
    - StreamFrameMeta
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 491
    functionDepth: 8
    functionLinenumber: 491
    functionLinenumberEnd: 535
    functionName: brpc::Stream::OnReceived
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - append
    - swap
    - has_continuation
    - feedback
    - butil::IOBuf*::empty
    - execution_queue_execute
    - brpc::Stream::SetHostSocket
    - brpc::Stream::Close
    - brpc::Stream::SetRemoteConsumed
    - butil::IOBuf*::clear
    - CHECK
    - frame_type
    - butil::IOBuf::IOBuf
    - id
    linkageType: ''
    returnType: int
    signature: int Stream::OnReceived(const StreamFrameMeta& fm, butil::IOBuf *buf,
      Socket* sock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - storage
    - cap
    - s
    argTypes:
    - butil::IOBuf*[]
    - size_t
    - Stream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 545
    functionName: brpc::MessageBatcher::MessageBatcher
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MessageBatcher(butil::IOBuf* storage[], size_t cap, Stream* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: flush
      Src: /src/brpc/src/brpc/stream.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 546
    functionDepth: 0
    functionLinenumber: 546
    functionLinenumberEnd: 546
    functionName: ~MessageBatcher()
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - flush
    linkageType: ''
    returnType: void
    signature: void ~MessageBatcher()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _options::handler::on_received_messages
      Src: /src/brpc/src/brpc/stream.cpp:549,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:550,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 556
    functionName: brpc::MessageBatcher::flush
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - _options::handler::on_received_messages
    - id
    linkageType: ''
    returnType: void
    signature: void flush()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MessageBatcher::flush
      Src: /src/brpc/src/brpc/stream.cpp:559,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 564
    functionName: brpc::MessageBatcher::push
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::length
    - brpc::MessageBatcher::flush
    linkageType: ''
    returnType: void
    signature: void push(butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    functionName: brpc::MessageBatcher::total_length
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t total_length() const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: Stream*::StopIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:576,1
    - Dst: is_queue_stopped
      Src: /src/brpc/src/brpc/stream.cpp:577,1
    - Dst: DereferenceSocket
      Src: /src/brpc/src/brpc/stream.cpp:581,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:588,1
    - Dst: Stream*::_options::handler::on_failed
      Src: /src/brpc/src/brpc/stream.cpp:594,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:594,1
    - Dst: Stream*::_options::handler::on_closed
      Src: /src/brpc/src/brpc/stream.cpp:596,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:596,1
    - Dst: Stream*::HandleRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:610,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:612,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:617,1
    - Dst: Stream*::_options::handler::on_idle_timeout
      Src: /src/brpc/src/brpc/stream.cpp:618,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:618,1
    - Dst: flush
      Src: /src/brpc/src/brpc/stream.cpp:621,1
    - Dst: Stream*::_remote_settings::need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:623,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:623,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:624,1
    - Dst: Stream*::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:625,1
    - Dst: Stream*::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:627,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<butil::IOBuf*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 629
    functionName: brpc::Stream::Consume
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - Stream*::SendFeedback
    - DereferenceSocket
    - total_length
    - is_queue_stopped
    - push
    - Stream*::StartIdleTimer
    - BAIDU_SCOPED_LOCK
    - Stream*::StopIdleTimer
    - Stream*::_options::handler::on_closed
    - Stream*::_options::handler::on_failed
    - Stream*::id
    - Stream*::_options::handler::on_idle_timeout
    - Stream*::_remote_settings::need_feedback
    - flush
    - Stream*::HandleRpcResponse
    linkageType: ''
    returnType: int
    signature: int Stream::Consume(void *meta, bthread::TaskIterator<butil::IOBuf*>&
      iter)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: HandleRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:610,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:612,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - messages_in_batch
    argTypes:
    - s
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 615
    functionName: brpc::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - HandleRpcResponse
    - push
    linkageType: ''
    returnType: void
    signature: "void DEFINE_SMALL_ARRAY(butil::IOBuf*, buf_list, s->_options.messages_in_batch,
      256);\n    MessageBatcher mb(buf_list, s->_options.messages_in_batch, s);\n
      \   bool has_timeout_task = false;\n    for (; iter; ++iter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:633,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:634,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:634,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:635,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:635,1
    - Dst: StreamFrameMeta::mutable_feedback
      Src: /src/brpc/src/brpc/stream.cpp:636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:637,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:638,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:639,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 631
    functionDepth: 2
    functionLinenumber: 631
    functionLinenumberEnd: 640
    functionName: brpc::Stream::SendFeedback
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_stream_id
    - stream_id
    - StreamFrameMeta::mutable_feedback
    - brpc::Stream::WriteToHostSocket
    - id
    - brpc::policy::PackStreamMessage
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void Stream::SendFeedback()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::call_once
      Src: /src/brpc/src/brpc/stream.cpp:643,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:645,1
    - Dst: SocketUniquePtr::AddStream
      Src: /src/brpc/src/brpc/stream.cpp:647,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:647,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:648,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:648,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/stream.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 642
    functionDepth: 1
    functionLinenumber: 642
    functionLinenumberEnd: 654
    functionName: brpc::Stream::SetHostSocket
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::release
    - CHECK
    - std::call_once
    - SocketUniquePtr::AddStream
    - id
    - Socket*::ReAddress
    linkageType: ''
    returnType: int
    signature: int Stream::SetHostSocket(Socket *host_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamSettings*::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: StreamSettings*::set_need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:658,1
    - Dst: StreamSettings*::set_writable
      Src: /src/brpc/src/brpc/stream.cpp:659,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 660
    functionName: brpc::Stream::FillSettings
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - id
    - StreamSettings*::set_writable
    - StreamSettings*::set_stream_id
    - StreamSettings*::set_need_feedback
    linkageType: ''
    returnType: void
    signature: void Stream::FillSettings(StreamSettings *settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execution_queue_execute
      Src: /src/brpc/src/brpc/stream.cpp:664,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 665
    functionName: brpc::OnIdleTimeout
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    linkageType: ''
    returnType: void
    signature: void OnIdleTimeout(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:671,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/stream.cpp:672,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:674,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/stream.cpp:676,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 677
      start: 667
    functionDepth: 3
    functionLinenumber: 667
    functionLinenumberEnd: 677
    functionName: brpc::Stream::StartIdleTimer
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - butil::microseconds_to_timespec
    - butil::gettimeofday_us
    - bthread_timer_add
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void Stream::StartIdleTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/stream.cpp:684,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 679
    functionDepth: 2
    functionLinenumber: 679
    functionLinenumberEnd: 686
    functionName: brpc::Stream::StopIdleTimer
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_timer_del
    linkageType: ''
    returnType: void
    signature: void Stream::StopIdleTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:689,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:690,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:692,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:699,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/stream.cpp:700,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:701,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:704,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:709,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 688
    functionDepth: 7
    functionLinenumber: 688
    functionLinenumberEnd: 710
    functionName: brpc::Stream::Close
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::Stream::SetFailed
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - butil::string_vappendf
    - va_start
    - va_end
    - brpc::Stream::TriggerOnConnectIfNeed
    linkageType: ''
    returnType: void
    signature: void Stream::Close(int error_code, const char* reason_fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/stream.cpp:714,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:718,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:720,1
    - Dst: Stream*::Close
      Src: /src/brpc/src/brpc/stream.cpp:721,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:722,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - id
    - error_code
    - reason_fmt
    argTypes:
    - StreamId
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 724
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - Stream*::Close
    - va_start
    - SocketUniquePtr::conn
    - va_end
    linkageType: ''
    returnType: int
    signature: int Stream::SetFailed(StreamId id, int error_code, const char* reason_fmt,
      ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:728,1
    - Dst: size
      Src: /src/brpc/src/brpc/stream.cpp:729,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:730,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:732,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' ids'
    - error_code
    - reason_fmt
    argTypes:
    - StreamIds
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 734
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::Stream::SetFailed
    - va_start
    - size
    - va_end
    linkageType: ''
    returnType: int
    signature: int Stream::SetFailed(const StreamIds& ids, int error_code, const char*
      reason_fmt, ...)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:737,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:738,1
    - Dst: brpc::policy::ParseRpcMessage
      Src: /src/brpc/src/brpc/stream.cpp:740,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/stream.cpp:741,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:742,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:743,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/stream.cpp:746,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:748,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:749,1
    - Dst: PostponeEOF
      Src: /src/brpc/src/brpc/stream.cpp:752,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:753,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:754,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:755,1
    - Dst: brpc::ProcessRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:757,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - response_buffer
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 736
    functionDepth: 8
    functionLinenumber: 736
    functionLinenumberEnd: 758
    functionName: brpc::Stream::HandleRpcResponse
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::Stream::Close
    - ParseResult::is_ok
    - brpc::policy::ParseRpcMessage
    - IsInitialized
    - ParseResult::message
    - PostponeEOF
    - CHECK
    - brpc::ProcessRpcResponse
    - ReAddress
    linkageType: ''
    returnType: void
    signature: void Stream::HandleRpcResponse(butil::IOBuf* response_buffer)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:763,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:766,1
    - Dst: Stream*::AppendIfNotFull
      Src: /src/brpc/src/brpc/stream.cpp:767,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - stream_id
    - message
    - options
    argTypes:
    - StreamId
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 760
    functionDepth: 1
    functionLinenumber: 760
    functionLinenumberEnd: 772
    functionName: brpc::StreamWrite
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 8
    functionsReached:
    - brpc::SetTrackMeAddress
    - Stream*::AppendIfNotFull
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: int
    signature: "int StreamWrite(StreamId stream_id, const butil::IOBuf &message,\n
      \               const StreamWriteOptions* options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:777,1
    - Dst: Stream::WritableMeta::WritableMeta
      Src: /src/brpc/src/brpc/stream.cpp:778,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:788,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/stream.cpp:789,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:790,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:794,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:795,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - stream_id
    - due_time
    - arg
    argTypes:
    - StreamId
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 774
    functionDepth: 4
    functionLinenumber: 774
    functionLinenumberEnd: 796
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - Stream*::Wait
    - bthread_start_background
    - brpc::Stream::RunOnWritable
    - Stream::WritableMeta::WritableMeta
    - brpc::SetTrackMeAddress
    - PLOG
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: void
    signature: "void StreamWait(StreamId stream_id, const timespec *due_time,\n                void
      (*on_writable)(StreamId, void*, int), void *arg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:800,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:803,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:804,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - stream_id
    - due_time
    argTypes:
    - StreamId
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 798
    functionDepth: 1
    functionLinenumber: 798
    functionLinenumberEnd: 805
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - Stream*::Wait
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: int
    signature: int StreamWait(StreamId stream_id, const timespec* due_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:808,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 809
      start: 807
    functionDepth: 2
    functionLinenumber: 807
    functionLinenumberEnd: 809
    functionName: brpc::StreamClose
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 7
    functionsReached:
    - brpc::Stream::SetFailed
    linkageType: ''
    returnType: int
    signature: int StreamClose(StreamId stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:814,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/src/brpc/stream.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - request_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 811
    functionDepth: 1
    functionLinenumber: 811
    functionLinenumberEnd: 821
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::StreamCreate
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamCreate(StreamId *request_stream, Controller &cntl,\n                 const
      StreamOptions* options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: _request_streams::empty
      Src: /src/brpc/src/brpc/stream.cpp:825,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:826,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:829,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:830,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:840,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:842,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:843,1
    - Dst: _request_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:846,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:847,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - ' request_streams'
    - request_stream_size
    - ' cntl'
    - options
    argTypes:
    - StreamIds
    - int
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 850
      start: 823
    functionDepth: 5
    functionLinenumber: 823
    functionLinenumberEnd: 850
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::Stream::SetFailed
    - brpc::Stream::Create
    - _request_streams::push_back
    - _request_streams::empty
    - push_back
    - brpc::empty
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamCreate(StreamIds& request_streams, int request_stream_size,
      Controller & cntl,\n                 const StreamOptions* options)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:855,1
    - Dst: brpc::StreamAccept
      Src: /src/brpc/src/brpc/stream.cpp:859,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/stream.cpp:863,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:864,1
    - Dst: Controller::_response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:866,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:867,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - response_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 852
    functionDepth: 2
    functionLinenumber: 852
    functionLinenumberEnd: 872
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::Stream::SetFailed
    - brpc::StreamAccept
    - StreamIds::size
    - Controller::_response_streams::clear
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamAccept(StreamId* response_stream, Controller &cntl,\n                 const
      StreamOptions* options)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: _response_streams::empty
      Src: /src/brpc/src/brpc/stream.cpp:876,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:877,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:881,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:882,1
    - Dst: has_remote_stream
      Src: /src/brpc/src/brpc/stream.cpp:885,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:886,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:894,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:895,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:896,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:900,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:901,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:902,1
    - Dst: StreamSettings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:904,1
    - Dst: StreamSettings::clear_extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:906,1
    - Dst: _remote_stream_settings::extra_stream_ids_size
      Src: /src/brpc/src/brpc/stream.cpp:907,1
    - Dst: StreamSettings::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:908,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:908,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:910,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:911,1
    - Dst: _response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:912,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:914,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:917,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:918,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 3
    argNames:
    - ' response_streams'
    - ' cntl'
    - options
    argTypes:
    - StreamIds
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 874
    functionDepth: 5
    functionLinenumber: 874
    functionLinenumberEnd: 923
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - has_remote_stream
    - brpc::Stream::Create
    - brpc::Stream::SetFailed
    - _response_streams::push_back
    - StreamSettings::set_stream_id
    - _response_streams::clear
    - StreamSettings::MergeFrom
    - _remote_stream_settings::extra_stream_ids_size
    - _response_streams::empty
    - push_back
    - clear
    - StreamSettings::clear_extra_stream_ids
    - brpc::empty
    - _remote_stream_settings::extra_stream_ids
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamAccept(StreamIds& response_streams, Controller& cntl,\n
      \                const StreamOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:61,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:61,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:62,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 63
    functionName: brpc::Stream::Stream
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_mutex_init
    linkageType: ''
    returnType: void
    signature: void Stream::Stream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:71,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:72,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:73,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 65
    functionDepth: 3
    functionLinenumber: 65
    functionLinenumberEnd: 75
    functionName: Stream::~Stream()
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    - CHECK
    - bthread_id_list_destroy
    linkageType: ''
    returnType: void
    signature: void Stream::~Stream()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Stream::Stream
      Src: /src/brpc/src/brpc/stream.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:91,1
    - Dst: Stream*::_remote_settings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:98,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:101,1
    - Dst: execution_queue_start
      Src: /src/brpc/src/brpc/stream.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:109,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/stream.cpp:116,1
    - Dst: Stream*::BeforeRecycle
      Src: /src/brpc/src/brpc/stream.cpp:117,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:121,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:121,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/stream.cpp:122,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:124,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 39
    argCount: 4
    argNames:
    - options
    - remote_settings
    - id
    - parse_rpc_response
    argTypes:
    - StreamOptions
    - StreamSettings*
    - StreamId*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 77
    functionDepth: 4
    functionLinenumber: 77
    functionLinenumberEnd: 126
    functionName: brpc::Stream::Create
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 4
    functionsReached:
    - Socket::Create
    - execution_queue_start
    - SocketUniquePtr::get
    - Stream*::BeforeRecycle
    - Stream*::_remote_settings::MergeFrom
    - bthread_id_list_init
    - CHECK_EQ
    - Stream*::id
    - brpc::SetTrackMeAddress
    - Stream::Stream
    - LOG
    linkageType: ''
    returnType: int
    signature: "int Stream::Create(const StreamOptions &options, \n                   const
      StreamSettings *remote_settings,\n                   StreamId *id, bool parse_rpc_response)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_list_reset
      Src: /src/brpc/src/brpc/stream.cpp:130,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:134,1
    - Dst: brpc::policy::SendStreamClose
      Src: /src/brpc/src/brpc/stream.cpp:135,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:136,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:136,1
    - Dst: RemoveStream
      Src: /src/brpc/src/brpc/stream.cpp:140,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:140,1
    - Dst: execution_queue_stop
      Src: /src/brpc/src/brpc/stream.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 128
    functionDepth: 3
    functionLinenumber: 128
    functionLinenumberEnd: 145
    functionName: brpc::Stream::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SendStreamClose
    - execution_queue_stop
    - CHECK
    - stream_id
    - RemoveStream
    - bthread_id_list_reset
    - id
    linkageType: ''
    returnType: void
    signature: void Stream::BeforeRecycle(Socket *)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:151,1
    - Dst: writable
      Src: /src/brpc/src/brpc/stream.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:156,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:156,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:157,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/stream.cpp:158,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:163,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:168,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:171,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:176,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/stream.cpp:179,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:181,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:181,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:183,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:184,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:185,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:186,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:187,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:188,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:189,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:190,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:194,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:196,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:200,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:200,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:202,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:203,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:204,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:206,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/stream.cpp:210,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:211,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 51
    argCount: 2
    argNames:
    - data_list
    - size
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 214
    functionName: brpc::Stream::CutMessageIntoFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - id
    - butil::IOBuf*::cutn
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - brpc::policy::PackStreamMessage
    - remote_side
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_has_continuation
    - clear
    - brpc::Stream::WriteToHostSocket
    - writable
    - butil::IOBuf::empty
    - LOG
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf*::length
    - butil::IOBuf::length
    - CHECK
    - butil::IOBuf*::empty
    - StreamFrameMeta::set_frame_type
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t Stream::CutMessageIntoFileDescriptor(int /*fd*/, \n                                             butil::IOBuf
      **data_list, \n                                             size_t size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BRPC_HANDLE_EOVERCROWDED
      Src: /src/brpc/src/brpc/stream.cpp:217,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: brpc::Stream::WriteToHostSocket
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - BRPC_HANDLE_EOVERCROWDED
    - Write
    linkageType: ''
    returnType: void
    signature: void Stream::WriteToHostSocket(butil::IOBuf* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 224
    functionName: brpc::Stream::CutMessageIntoSSLChannel
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t Stream::CutMessageIntoSSLChannel(SSL*, butil::IOBuf**, size_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConnectMeta*::on_connect
      Src: /src/brpc/src/brpc/stream.cpp:229,1
    - Dst: ConnectMeta*::on_connect
      Src: /src/brpc/src/brpc/stream.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 235
    functionName: brpc::Stream::RunOnConnect
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - ConnectMeta*::on_connect
    linkageType: ''
    returnType: void
    signature: void * Stream::RunOnConnect(void *arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:239,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/stream.cpp:239,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:240,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:242,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:243,1
    - Dst: ConnectMeta::ConnectMeta
      Src: /src/brpc/src/brpc/stream.cpp:249,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:253,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:256,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:256,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:257,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 2
    argNames:
    - ptr
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 237
    functionDepth: 7
    functionLinenumber: 237
    functionLinenumberEnd: 263
    functionName: brpc::Stream::Connect
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - brpc::Stream::RunOnConnect
    - bthread_mutex_lock
    - CHECK_EQ
    - CHECK
    - bthread_mutex_unlock
    - berror
    - Socket*::id
    - LOG
    - ConnectMeta::ConnectMeta
    linkageType: ''
    returnType: int
    signature: "int Stream::Connect(Socket* ptr, const timespec*,\n                    int
      (*on_connect)(int, int, void *), void *data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetConnected
      Src: /src/brpc/src/brpc/stream.cpp:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: brpc::Stream::SetConnected
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::Stream::SetConnected
    linkageType: ''
    returnType: void
    signature: void Stream::SetConnected()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:270,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:272,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:276,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:277,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:280,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:282,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:282,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:283,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:285,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:285,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:287,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:288,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:289,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:292,1
    - Dst: brpc::Stream::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:297,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - remote_settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 269
    functionDepth: 7
    functionLinenumber: 269
    functionLinenumberEnd: 299
    functionName: brpc::Stream::SetConnected
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - MergeFrom
    - IsInitialized
    - bthread_mutex_lock
    - CHECK
    - bthread_mutex_unlock
    - stream_id
    - brpc::Stream::StartIdleTimer
    - id
    - brpc::Stream::TriggerOnConnectIfNeed
    linkageType: ''
    returnType: void
    signature: void Stream::SetConnected(const StreamSettings* remote_settings)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ConnectMeta::ConnectMeta
      Src: /src/brpc/src/brpc/stream.cpp:303,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:307,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:309,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:310,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:310,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:311,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:315,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 301
    functionDepth: 4
    functionLinenumber: 301
    functionLinenumberEnd: 316
    functionName: brpc::Stream::TriggerOnConnectIfNeed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - bthread_start_urgent
    - brpc::Stream::RunOnConnect
    - bthread_mutex_unlock
    - berror
    - LOG
    - ConnectMeta::ConnectMeta
    linkageType: ''
    returnType: void
    signature: void Stream::TriggerOnConnectIfNeed()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/stream.cpp:325,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:333,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:336,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:340,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:343,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:343,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:344,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - data
    - options
    argTypes:
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 352
    functionName: brpc::Stream::AppendIfNotFull
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::length
    - Write
    - BAIDU_SCOPED_LOCK
    - berror
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: int
    signature: "int Stream::AppendIfNotFull(const butil::IOBuf &data,\n                            const
      StreamWriteOptions* options)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:355,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:357,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:358,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:360,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:373,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:373,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:373,1
    - Dst: bthread_id_list_swap
      Src: /src/brpc/src/brpc/stream.cpp:386,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:388,1
    - Dst: bthread_id_list_reset
      Src: /src/brpc/src/brpc/stream.cpp:391,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:392,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 1
    argNames:
    - new_remote_consumed
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 354
    functionDepth: 7
    functionLinenumber: 354
    functionLinenumberEnd: 393
    functionName: brpc::Stream::SetRemoteConsumed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - bthread_id_list_swap
    - bthread_id_list_init
    - bthread_mutex_lock
    - CHECK
    - bthread_mutex_unlock
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - id
    - LOG
    linkageType: ''
    returnType: void
    signature: void Stream::SetRemoteConsumed(size_t new_remote_consumed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WritableMeta*::on_writable
      Src: /src/brpc/src/brpc/stream.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 395
    functionDepth: 2
    functionLinenumber: 395
    functionLinenumberEnd: 400
    functionName: brpc::Stream::RunOnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - WritableMeta*::on_writable
    linkageType: ''
    returnType: void
    signature: void * Stream::RunOnWritable(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/stream.cpp:406,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:415,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:415,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:416,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:419,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/stream.cpp:421,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 402
    functionDepth: 5
    functionLinenumber: 402
    functionLinenumberEnd: 422
    functionName: brpc::Stream::TriggerOnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - bthread_timer_del
    - bthread_start_background
    - bthread_id_unlock_and_destroy
    - brpc::Stream::RunOnWritable
    - berror
    - LOG
    linkageType: ''
    returnType: int
    signature: int Stream::TriggerOnWritable(bthread_id_t id, void *data, int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/src/brpc/stream.cpp:425,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/stream.cpp:426,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 427
    functionName: brpc::OnTimedOut
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint64_t>
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void OnTimedOut(void *arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: WritableMeta::WritableMeta
      Src: /src/brpc/src/brpc/stream.cpp:431,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:433,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/stream.cpp:438,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:440,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:440,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:442,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:451,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/brpc/stream.cpp:453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:455,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:455,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:459,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:462,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/src/brpc/stream.cpp:466,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:467,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:469,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/stream.cpp:469,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 4
    argNames:
    - arg
    - due_time
    - new_thread
    - join_id
    argTypes:
    - void*
    - timespec*
    - bool
    - bthread_id_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 429
    functionDepth: 7
    functionLinenumber: 429
    functionLinenumberEnd: 470
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - reinterpret_cast<void*>
    - brpc::Stream::TriggerOnWritable
    - bthread_id_list_add
    - bthread_id_create
    - bthread_id_lock
    - CHECK_EQ
    - CHECK
    - bthread_timer_add
    - brpc::Stream::RunOnWritable
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - WritableMeta::WritableMeta
    - bthread_id_unlock
    - id
    - LOG
    - berror
    linkageType: ''
    returnType: void
    signature: "void Stream::Wait(void (*on_writable)(StreamId, void*, int), void*
      arg, \n                  const timespec* due_time, bool new_thread, bthread_id_t
      *join_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::Wait
      Src: /src/brpc/src/brpc/stream.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - due_time
    argTypes:
    - void*
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 472
    functionDepth: 1
    functionLinenumber: 472
    functionLinenumberEnd: 475
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - brpc::Stream::Wait
    linkageType: ''
    returnType: void
    signature: "void Stream::Wait(void (*on_writable)(StreamId, void *, int), void
      *arg,\n                  const timespec* due_time)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - error_code
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 479
    functionName: brpc::OnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnWritable(StreamId, void *arg, int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::Wait
      Src: /src/brpc/src/brpc/stream.cpp:484,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/stream.cpp:486,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - due_time
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 481
    functionDepth: 5
    functionLinenumber: 481
    functionLinenumberEnd: 489
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 4
    functionsReached:
    - bthread_id_join
    - brpc::Stream::Wait
    linkageType: ''
    returnType: int
    signature: int Stream::Wait(const timespec* due_time)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:493,1
    - Dst: frame_type
      Src: /src/brpc/src/brpc/stream.cpp:497,1
    - Dst: brpc::Stream::SetRemoteConsumed
      Src: /src/brpc/src/brpc/stream.cpp:499,1
    - Dst: feedback
      Src: /src/brpc/src/brpc/stream.cpp:499,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:500,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:500,1
    - Dst: append
      Src: /src/brpc/src/brpc/stream.cpp:504,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/stream.cpp:505,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:507,1
    - Dst: swap
      Src: /src/brpc/src/brpc/stream.cpp:508,1
    - Dst: has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:510,1
    - Dst: execution_queue_execute
      Src: /src/brpc/src/brpc/stream.cpp:513,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:515,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:517,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:522,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:523,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:526,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:528,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 3
    argNames:
    - ' fm'
    - buf
    - sock
    argTypes:
    - StreamFrameMeta
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 491
    functionDepth: 8
    functionLinenumber: 491
    functionLinenumberEnd: 535
    functionName: brpc::Stream::OnReceived
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - append
    - swap
    - has_continuation
    - feedback
    - butil::IOBuf*::empty
    - execution_queue_execute
    - brpc::Stream::SetHostSocket
    - brpc::Stream::Close
    - brpc::Stream::SetRemoteConsumed
    - butil::IOBuf*::clear
    - CHECK
    - frame_type
    - butil::IOBuf::IOBuf
    - id
    linkageType: ''
    returnType: int
    signature: int Stream::OnReceived(const StreamFrameMeta& fm, butil::IOBuf *buf,
      Socket* sock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - storage
    - cap
    - s
    argTypes:
    - butil::IOBuf*[]
    - size_t
    - Stream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 545
    functionName: brpc::MessageBatcher::MessageBatcher
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MessageBatcher(butil::IOBuf* storage[], size_t cap, Stream* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: flush
      Src: /src/brpc/src/brpc/stream.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 546
    functionDepth: 0
    functionLinenumber: 546
    functionLinenumberEnd: 546
    functionName: ~MessageBatcher()
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - flush
    linkageType: ''
    returnType: void
    signature: void ~MessageBatcher()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _options::handler::on_received_messages
      Src: /src/brpc/src/brpc/stream.cpp:549,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:550,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 556
    functionName: brpc::MessageBatcher::flush
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - _options::handler::on_received_messages
    - id
    linkageType: ''
    returnType: void
    signature: void flush()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MessageBatcher::flush
      Src: /src/brpc/src/brpc/stream.cpp:559,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 564
    functionName: brpc::MessageBatcher::push
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::length
    - brpc::MessageBatcher::flush
    linkageType: ''
    returnType: void
    signature: void push(butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    functionName: brpc::MessageBatcher::total_length
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t total_length() const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: Stream*::StopIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:576,1
    - Dst: is_queue_stopped
      Src: /src/brpc/src/brpc/stream.cpp:577,1
    - Dst: DereferenceSocket
      Src: /src/brpc/src/brpc/stream.cpp:581,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:588,1
    - Dst: Stream*::_options::handler::on_failed
      Src: /src/brpc/src/brpc/stream.cpp:594,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:594,1
    - Dst: Stream*::_options::handler::on_closed
      Src: /src/brpc/src/brpc/stream.cpp:596,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:596,1
    - Dst: Stream*::HandleRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:610,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:612,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:617,1
    - Dst: Stream*::_options::handler::on_idle_timeout
      Src: /src/brpc/src/brpc/stream.cpp:618,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:618,1
    - Dst: flush
      Src: /src/brpc/src/brpc/stream.cpp:621,1
    - Dst: Stream*::_remote_settings::need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:623,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:623,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:624,1
    - Dst: Stream*::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:625,1
    - Dst: Stream*::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:627,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<butil::IOBuf*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 629
    functionName: brpc::Stream::Consume
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - Stream*::SendFeedback
    - DereferenceSocket
    - total_length
    - is_queue_stopped
    - push
    - Stream*::StartIdleTimer
    - BAIDU_SCOPED_LOCK
    - Stream*::StopIdleTimer
    - Stream*::_options::handler::on_closed
    - Stream*::_options::handler::on_failed
    - Stream*::id
    - Stream*::_options::handler::on_idle_timeout
    - Stream*::_remote_settings::need_feedback
    - flush
    - Stream*::HandleRpcResponse
    linkageType: ''
    returnType: int
    signature: int Stream::Consume(void *meta, bthread::TaskIterator<butil::IOBuf*>&
      iter)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: HandleRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:610,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:612,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - messages_in_batch
    argTypes:
    - s
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 615
    functionName: brpc::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - HandleRpcResponse
    - push
    linkageType: ''
    returnType: void
    signature: "void DEFINE_SMALL_ARRAY(butil::IOBuf*, buf_list, s->_options.messages_in_batch,
      256);\n    MessageBatcher mb(buf_list, s->_options.messages_in_batch, s);\n
      \   bool has_timeout_task = false;\n    for (; iter; ++iter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:633,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:634,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:634,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:635,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:635,1
    - Dst: StreamFrameMeta::mutable_feedback
      Src: /src/brpc/src/brpc/stream.cpp:636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:637,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:638,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:639,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 631
    functionDepth: 2
    functionLinenumber: 631
    functionLinenumberEnd: 640
    functionName: brpc::Stream::SendFeedback
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_stream_id
    - stream_id
    - StreamFrameMeta::mutable_feedback
    - brpc::Stream::WriteToHostSocket
    - id
    - brpc::policy::PackStreamMessage
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void Stream::SendFeedback()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::call_once
      Src: /src/brpc/src/brpc/stream.cpp:643,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:645,1
    - Dst: SocketUniquePtr::AddStream
      Src: /src/brpc/src/brpc/stream.cpp:647,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:647,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:648,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:648,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/stream.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 642
    functionDepth: 1
    functionLinenumber: 642
    functionLinenumberEnd: 654
    functionName: brpc::Stream::SetHostSocket
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::release
    - CHECK
    - std::call_once
    - SocketUniquePtr::AddStream
    - id
    - Socket*::ReAddress
    linkageType: ''
    returnType: int
    signature: int Stream::SetHostSocket(Socket *host_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StreamSettings*::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: StreamSettings*::set_need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:658,1
    - Dst: StreamSettings*::set_writable
      Src: /src/brpc/src/brpc/stream.cpp:659,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 660
    functionName: brpc::Stream::FillSettings
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - id
    - StreamSettings*::set_writable
    - StreamSettings*::set_stream_id
    - StreamSettings*::set_need_feedback
    linkageType: ''
    returnType: void
    signature: void Stream::FillSettings(StreamSettings *settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execution_queue_execute
      Src: /src/brpc/src/brpc/stream.cpp:664,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 665
    functionName: brpc::OnIdleTimeout
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - execution_queue_execute
    linkageType: ''
    returnType: void
    signature: void OnIdleTimeout(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:671,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/stream.cpp:672,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:674,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/stream.cpp:676,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 677
      start: 667
    functionDepth: 3
    functionLinenumber: 667
    functionLinenumberEnd: 677
    functionName: brpc::Stream::StartIdleTimer
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - butil::microseconds_to_timespec
    - butil::gettimeofday_us
    - bthread_timer_add
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void Stream::StartIdleTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/stream.cpp:684,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 679
    functionDepth: 2
    functionLinenumber: 679
    functionLinenumberEnd: 686
    functionName: brpc::Stream::StopIdleTimer
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_timer_del
    linkageType: ''
    returnType: void
    signature: void Stream::StopIdleTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:689,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:690,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:692,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:699,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/stream.cpp:700,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:701,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:704,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:709,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 688
    functionDepth: 7
    functionLinenumber: 688
    functionLinenumberEnd: 710
    functionName: brpc::Stream::Close
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - brpc::Stream::SetFailed
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - butil::string_vappendf
    - va_start
    - va_end
    - brpc::Stream::TriggerOnConnectIfNeed
    linkageType: ''
    returnType: void
    signature: void Stream::Close(int error_code, const char* reason_fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/stream.cpp:714,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:718,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:720,1
    - Dst: Stream*::Close
      Src: /src/brpc/src/brpc/stream.cpp:721,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:722,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - id
    - error_code
    - reason_fmt
    argTypes:
    - StreamId
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 724
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 7
    functionsReached:
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - Stream*::Close
    - va_start
    - SocketUniquePtr::conn
    - va_end
    linkageType: ''
    returnType: int
    signature: int Stream::SetFailed(StreamId id, int error_code, const char* reason_fmt,
      ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:728,1
    - Dst: size
      Src: /src/brpc/src/brpc/stream.cpp:729,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:730,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:732,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' ids'
    - error_code
    - reason_fmt
    argTypes:
    - StreamIds
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 734
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 8
    functionsReached:
    - brpc::Stream::SetFailed
    - va_start
    - size
    - va_end
    linkageType: ''
    returnType: int
    signature: int Stream::SetFailed(const StreamIds& ids, int error_code, const char*
      reason_fmt, ...)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:737,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:738,1
    - Dst: brpc::policy::ParseRpcMessage
      Src: /src/brpc/src/brpc/stream.cpp:740,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/stream.cpp:741,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:742,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:743,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/stream.cpp:746,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:748,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:749,1
    - Dst: PostponeEOF
      Src: /src/brpc/src/brpc/stream.cpp:752,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:753,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:754,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:755,1
    - Dst: brpc::ProcessRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:757,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - response_buffer
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 736
    functionDepth: 8
    functionLinenumber: 736
    functionLinenumberEnd: 758
    functionName: brpc::Stream::HandleRpcResponse
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::Stream::Close
    - ParseResult::is_ok
    - brpc::policy::ParseRpcMessage
    - IsInitialized
    - ParseResult::message
    - PostponeEOF
    - CHECK
    - brpc::ProcessRpcResponse
    - ReAddress
    linkageType: ''
    returnType: void
    signature: void Stream::HandleRpcResponse(butil::IOBuf* response_buffer)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:763,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:766,1
    - Dst: Stream*::AppendIfNotFull
      Src: /src/brpc/src/brpc/stream.cpp:767,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - stream_id
    - message
    - options
    argTypes:
    - StreamId
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 760
    functionDepth: 1
    functionLinenumber: 760
    functionLinenumberEnd: 772
    functionName: brpc::StreamWrite
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 8
    functionsReached:
    - brpc::SetTrackMeAddress
    - Stream*::AppendIfNotFull
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: int
    signature: "int StreamWrite(StreamId stream_id, const butil::IOBuf &message,\n
      \               const StreamWriteOptions* options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:777,1
    - Dst: Stream::WritableMeta::WritableMeta
      Src: /src/brpc/src/brpc/stream.cpp:778,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:788,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/stream.cpp:789,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:790,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:794,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:795,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - stream_id
    - due_time
    - arg
    argTypes:
    - StreamId
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 774
    functionDepth: 4
    functionLinenumber: 774
    functionLinenumberEnd: 796
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - Stream*::Wait
    - bthread_start_background
    - brpc::Stream::RunOnWritable
    - Stream::WritableMeta::WritableMeta
    - brpc::SetTrackMeAddress
    - PLOG
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: void
    signature: "void StreamWait(StreamId stream_id, const timespec *due_time,\n                void
      (*on_writable)(StreamId, void*, int), void *arg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:800,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:803,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:804,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - stream_id
    - due_time
    argTypes:
    - StreamId
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 798
    functionDepth: 1
    functionLinenumber: 798
    functionLinenumberEnd: 805
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - Stream*::Wait
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: int
    signature: int StreamWait(StreamId stream_id, const timespec* due_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:808,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 809
      start: 807
    functionDepth: 2
    functionLinenumber: 807
    functionLinenumberEnd: 809
    functionName: brpc::StreamClose
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 7
    functionsReached:
    - brpc::Stream::SetFailed
    linkageType: ''
    returnType: int
    signature: int StreamClose(StreamId stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:814,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/src/brpc/stream.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - request_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 811
    functionDepth: 1
    functionLinenumber: 811
    functionLinenumberEnd: 821
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::StreamCreate
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamCreate(StreamId *request_stream, Controller &cntl,\n                 const
      StreamOptions* options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: _request_streams::empty
      Src: /src/brpc/src/brpc/stream.cpp:825,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:826,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:829,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:830,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:840,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:842,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:843,1
    - Dst: _request_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:846,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:847,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - ' request_streams'
    - request_stream_size
    - ' cntl'
    - options
    argTypes:
    - StreamIds
    - int
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 850
      start: 823
    functionDepth: 5
    functionLinenumber: 823
    functionLinenumberEnd: 850
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::Stream::SetFailed
    - brpc::Stream::Create
    - _request_streams::push_back
    - _request_streams::empty
    - push_back
    - brpc::empty
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamCreate(StreamIds& request_streams, int request_stream_size,
      Controller & cntl,\n                 const StreamOptions* options)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:855,1
    - Dst: brpc::StreamAccept
      Src: /src/brpc/src/brpc/stream.cpp:859,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/stream.cpp:863,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:864,1
    - Dst: Controller::_response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:866,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:867,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - response_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 852
    functionDepth: 2
    functionLinenumber: 852
    functionLinenumberEnd: 872
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::Stream::SetFailed
    - brpc::StreamAccept
    - StreamIds::size
    - Controller::_response_streams::clear
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamAccept(StreamId* response_stream, Controller &cntl,\n                 const
      StreamOptions* options)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: _response_streams::empty
      Src: /src/brpc/src/brpc/stream.cpp:876,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:877,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:881,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:882,1
    - Dst: has_remote_stream
      Src: /src/brpc/src/brpc/stream.cpp:885,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:886,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:894,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:895,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:896,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:900,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:901,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:902,1
    - Dst: StreamSettings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:904,1
    - Dst: StreamSettings::clear_extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:906,1
    - Dst: _remote_stream_settings::extra_stream_ids_size
      Src: /src/brpc/src/brpc/stream.cpp:907,1
    - Dst: StreamSettings::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:908,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:908,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:910,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:911,1
    - Dst: _response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:912,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:914,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:917,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:918,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 3
    argNames:
    - ' response_streams'
    - ' cntl'
    - options
    argTypes:
    - StreamIds
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 874
    functionDepth: 5
    functionLinenumber: 874
    functionLinenumberEnd: 923
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - has_remote_stream
    - brpc::Stream::Create
    - brpc::Stream::SetFailed
    - _response_streams::push_back
    - StreamSettings::set_stream_id
    - _response_streams::clear
    - StreamSettings::MergeFrom
    - _remote_stream_settings::extra_stream_ids_size
    - _response_streams::empty
    - push_back
    - clear
    - StreamSettings::clear_extra_stream_ids
    - brpc::empty
    - _remote_stream_settings::extra_stream_ids
    - LOG
    linkageType: ''
    returnType: int
    signature: "int StreamAccept(StreamIds& response_streams, Controller& cntl,\n
      \                const StreamOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr_in
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: brpc::LoadBalancer::SelectOut
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectOut(SocketUniquePtr* ptr_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::LoadBalancer::LoadBalancer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LoadBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::LoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Feedback(const CallInfo& /*info*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: ~LoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LoadBalancer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::ExposeLB
      Src: /src/brpc/src/brpc/load_balancer.h:124,1
    - Dst: brpc::SharedLoadBalancer::SelectServer
      Src: /src/brpc/src/brpc/load_balancer.h:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - LoadBalancer::SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 127
    functionName: brpc::SharedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::SelectServer
    - brpc::SharedLoadBalancer::ExposeLB
    linkageType: ''
    returnType: int
    signature: "int SelectServer(const LoadBalancer::SelectIn& in,\n                     LoadBalancer::SelectOut*
      out)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Feedback
      Src: /src/brpc/src/brpc/load_balancer.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - LoadBalancer::CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: brpc::SharedLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::Feedback
    linkageType: ''
    returnType: void
    signature: void Feedback(const LoadBalancer::CallInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::AddServer
      Src: /src/brpc/src/brpc/load_balancer.h:132,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 137
    functionName: brpc::SharedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - fetch_add
    - brpc::SharedLoadBalancer::AddServer
    linkageType: ''
    returnType: bool
    signature: bool AddServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::RemoveServer
      Src: /src/brpc/src/brpc/load_balancer.h:139,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    functionName: brpc::SharedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::RemoveServer
    - fetch_sub
    linkageType: ''
    returnType: bool
    signature: bool RemoveServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::AddServersInBatch
      Src: /src/brpc/src/brpc/load_balancer.h:147,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 152
    functionName: brpc::SharedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::AddServersInBatch
    - fetch_add
    linkageType: ''
    returnType: size_t
    signature: size_t AddServersInBatch(const std::vector<ServerId>& servers)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::RemoveServersInBatch
      Src: /src/brpc/src/brpc/load_balancer.h:155,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 160
    functionName: brpc::SharedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::RemoveServersInBatch
    - fetch_sub
    linkageType: ''
    returnType: size_t
    signature: size_t RemoveServersInBatch(const std::vector<ServerId>& servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/load_balancer.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 166
    functionName: brpc::SharedLoadBalancer::Weight
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/load_balancer.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 185
    functionName: brpc::LoadBalancerExtension
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: Extension<const LoadBalancer>
    signature: Extension<const LoadBalancer> * LoadBalancerExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr_in
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: brpc::LoadBalancer::SelectOut
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectOut(SocketUniquePtr* ptr_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::LoadBalancer::LoadBalancer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LoadBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::LoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Feedback(const CallInfo& /*info*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: ~LoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LoadBalancer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::ExposeLB
      Src: /src/brpc/src/brpc/load_balancer.h:124,1
    - Dst: brpc::SharedLoadBalancer::SelectServer
      Src: /src/brpc/src/brpc/load_balancer.h:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - LoadBalancer::SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 127
    functionName: brpc::SharedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::SelectServer
    - brpc::SharedLoadBalancer::ExposeLB
    linkageType: ''
    returnType: int
    signature: "int SelectServer(const LoadBalancer::SelectIn& in,\n                     LoadBalancer::SelectOut*
      out)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Feedback
      Src: /src/brpc/src/brpc/load_balancer.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - LoadBalancer::CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: brpc::SharedLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::Feedback
    linkageType: ''
    returnType: void
    signature: void Feedback(const LoadBalancer::CallInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::AddServer
      Src: /src/brpc/src/brpc/load_balancer.h:132,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 137
    functionName: brpc::SharedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - fetch_add
    - brpc::SharedLoadBalancer::AddServer
    linkageType: ''
    returnType: bool
    signature: bool AddServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::RemoveServer
      Src: /src/brpc/src/brpc/load_balancer.h:139,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    functionName: brpc::SharedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::RemoveServer
    - fetch_sub
    linkageType: ''
    returnType: bool
    signature: bool RemoveServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::AddServersInBatch
      Src: /src/brpc/src/brpc/load_balancer.h:147,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 152
    functionName: brpc::SharedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::AddServersInBatch
    - fetch_add
    linkageType: ''
    returnType: size_t
    signature: size_t AddServersInBatch(const std::vector<ServerId>& servers)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::RemoveServersInBatch
      Src: /src/brpc/src/brpc/load_balancer.h:155,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 160
    functionName: brpc::SharedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::RemoveServersInBatch
    - fetch_sub
    linkageType: ''
    returnType: size_t
    signature: size_t RemoveServersInBatch(const std::vector<ServerId>& servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/load_balancer.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 166
    functionName: brpc::SharedLoadBalancer::Weight
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/load_balancer.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 185
    functionName: brpc::LoadBalancerExtension
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: Extension<const LoadBalancer>
    signature: Extension<const LoadBalancer> * LoadBalancerExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/nshead_service.cpp:29,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/nshead_service.cpp:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: brpc::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void NsheadService::NsheadService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/nshead_service.cpp:36,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/nshead_service.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - NsheadServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 39
    functionName: brpc::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void NsheadService::NsheadService(const NsheadServiceOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: NsheadService::~NsheadService()
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadService::~NsheadService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/nshead_service.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::NsheadService::Describe
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void NsheadService::Describe(std::ostream &os, const DescribeOptions&)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/nshead_service.cpp:51,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/nshead_service.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:56,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/nshead_service.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/nshead_service.cpp:57,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:57,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/nshead_service.cpp:58,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/nshead_service.cpp:59,1
    - Dst: brpc::NsheadService::Expose
      Src: /src/brpc/src/brpc/nshead_service.cpp:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 61
    functionName: brpc::NsheadService::Expose
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 1
    functionsReached:
    - std::string::reserve
    - butil::class_name_str
    - std::string::append
    - data
    - size
    - std::string::push_back
    - brpc::NsheadService::Expose
    linkageType: ''
    returnType: void
    signature: void NsheadService::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/nshead_service.cpp:29,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/nshead_service.cpp:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: brpc::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void NsheadService::NsheadService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/nshead_service.cpp:36,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/nshead_service.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - NsheadServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 39
    functionName: brpc::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void NsheadService::NsheadService(const NsheadServiceOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: NsheadService::~NsheadService()
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadService::~NsheadService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/nshead_service.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::NsheadService::Describe
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void NsheadService::Describe(std::ostream &os, const DescribeOptions&)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/nshead_service.cpp:51,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/nshead_service.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:56,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/nshead_service.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/nshead_service.cpp:57,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:57,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/nshead_service.cpp:58,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/nshead_service.cpp:59,1
    - Dst: brpc::NsheadService::Expose
      Src: /src/brpc/src/brpc/nshead_service.cpp:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 61
    functionName: brpc::NsheadService::Expose
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 2
    functionsReached:
    - std::string::reserve
    - butil::class_name_str
    - std::string::append
    - data
    - size
    - std::string::push_back
    - brpc::NsheadService::Expose
    linkageType: ''
    returnType: void
    signature: void NsheadService::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' p1'
    - ' p2'
    argTypes:
    - HttpMethodPair
    - HttpMethodPair
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: operator()(const HttpMethodPair& p1, const HttpMethodPair& p2) const
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 0
    functionsReached:
    - strcasecmp
    linkageType: ''
    returnType: bool
    signature: bool operator()(const HttpMethodPair& p1, const HttpMethodPair& p2)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:73,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/brpc/http_method.cpp:75,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:76,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/http_method.cpp:79,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:79,1
    - Dst: LessThanByName
      Src: /src/brpc/src/brpc/http_method.cpp:80,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:82,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/http_method.cpp:84,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 92
    functionName: brpc::BuildHttpMethodMaps
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - LessThanByName
    - RELEASE_ASSERT_VERBOSE
    - RELEASE_ASSERT
    - std::sort
    linkageType: ''
    returnType: void
    signature: void BuildHttpMethodMaps()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/http_method.cpp:95,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:97,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - method
    argTypes:
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 102
    functionName: brpc::HttpMethod2Str
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 2
    functionsReached:
    - ARRAY_SIZE
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char *HttpMethod2Str(HttpMethod method)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ::toupper
      Src: /src/brpc/src/brpc/http_method.cpp:105,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:107,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:112,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:115,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/http_method.cpp:120,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:129,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:131,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 2
    argNames:
    - method_str
    - method
    argTypes:
    - char*
    - HttpMethod*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 140
    functionName: brpc::Str2HttpMethod
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 2
    functionsReached:
    - strcasecmp
    - pthread_once
    - ARRAY_SIZE
    - ::toupper
    linkageType: ''
    returnType: bool
    signature: bool Str2HttpMethod(const char* method_str, HttpMethod* method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' p1'
    - ' p2'
    argTypes:
    - HttpMethodPair
    - HttpMethodPair
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: operator()(const HttpMethodPair& p1, const HttpMethodPair& p2) const
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 0
    functionsReached:
    - strcasecmp
    linkageType: ''
    returnType: bool
    signature: bool operator()(const HttpMethodPair& p1, const HttpMethodPair& p2)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:73,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/brpc/http_method.cpp:75,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:76,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/http_method.cpp:79,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:79,1
    - Dst: LessThanByName
      Src: /src/brpc/src/brpc/http_method.cpp:80,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:82,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/http_method.cpp:84,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 92
    functionName: brpc::BuildHttpMethodMaps
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - LessThanByName
    - RELEASE_ASSERT_VERBOSE
    - RELEASE_ASSERT
    - std::sort
    linkageType: ''
    returnType: void
    signature: void BuildHttpMethodMaps()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/http_method.cpp:95,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:97,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - method
    argTypes:
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 102
    functionName: brpc::HttpMethod2Str
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 2
    functionsReached:
    - ARRAY_SIZE
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char *HttpMethod2Str(HttpMethod method)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ::toupper
      Src: /src/brpc/src/brpc/http_method.cpp:105,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:107,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:112,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:115,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/http_method.cpp:120,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_method.cpp:129,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/http_method.cpp:131,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 2
    argNames:
    - method_str
    - method
    argTypes:
    - char*
    - HttpMethod*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 140
    functionName: brpc::Str2HttpMethod
    functionSourceFile: /src/brpc/src/brpc/http_method.cpp
    functionUses: 2
    functionsReached:
    - strcasecmp
    - pthread_once
    - ARRAY_SIZE
    - ::toupper
    linkageType: ''
    returnType: bool
    signature: bool Str2HttpMethod(const char* method_str, HttpMethod* method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/thrift_service.cpp:26,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/thrift_service.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::ThriftService::ThriftService
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void ThriftService::ThriftService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: ThriftService::~ThriftService()
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftService::~ThriftService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/thrift_service.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: brpc::ThriftService::Describe
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void ThriftService::Describe(std::ostream &os, const DescribeOptions&)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: data
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/thrift_service.cpp:47,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:48,1
    - Dst: brpc::ThriftService::Expose
      Src: /src/brpc/src/brpc/thrift_service.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: brpc::ThriftService::Expose
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 1
    functionsReached:
    - std::string::reserve
    - butil::class_name_str
    - std::string::append
    - data
    - size
    - brpc::ThriftService::Expose
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void ThriftService::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/thrift_service.cpp:26,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/thrift_service.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::ThriftService::ThriftService
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void ThriftService::ThriftService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: ThriftService::~ThriftService()
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftService::~ThriftService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/thrift_service.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: brpc::ThriftService::Describe
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void ThriftService::Describe(std::ostream &os, const DescribeOptions&)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: data
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/thrift_service.cpp:47,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:48,1
    - Dst: brpc::ThriftService::Expose
      Src: /src/brpc/src/brpc/thrift_service.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: brpc::ThriftService::Expose
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 2
    functionsReached:
    - std::string::reserve
    - butil::class_name_str
    - std::string::append
    - data
    - size
    - brpc::ThriftService::Expose
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void ThriftService::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::URI::URI
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void URI::URI()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: URI::~URI()
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void URI::~URI()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/uri.cpp:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:44,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:45,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:46,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:47,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:48,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:49,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 51
    functionName: brpc::URI::Clear
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - reset
    - clear
    linkageType: ''
    returnType: void
    signature: void URI::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:54,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/uri.cpp:55,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/uri.cpp:56,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/uri.cpp:57,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:58,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:59,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:60,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:61,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:62,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:63,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - URI
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: brpc::URI::Swap
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void URI::Swap(URI &rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:69,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/uri.cpp:70,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/uri.cpp:73,1
    - Dst: QuerySplitter::key
      Src: /src/brpc/src/brpc/uri.cpp:74,1
    - Dst: QuerySplitter::key
      Src: /src/brpc/src/brpc/uri.cpp:75,1
    - Dst: QuerySplitter::key
      Src: /src/brpc/src/brpc/uri.cpp:75,1
    - Dst: QuerySplitter::value
      Src: /src/brpc/src/brpc/uri.cpp:76,1
    - Dst: QuerySplitter::value
      Src: /src/brpc/src/brpc/uri.cpp:76,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' query_map'
    - query
    argTypes:
    - URI::QueryMap
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 80
    functionName: brpc::ParseQueries
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - std::string::empty
    - clear
    - QuerySplitter::key
    - QuerySplitter::value
    linkageType: ''
    returnType: void
    signature: void ParseQueries(URI::QueryMap& query_map, const std::string &query)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/uri.cpp:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 3
    argNames:
    - host_begin
    - host_end
    - port
    argTypes:
    - char*
    - char*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 100
    functionName: brpc::SplitHostAndPort
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int>
    linkageType: ''
    returnType: char
    signature: "char * SplitHostAndPort(const char* host_begin,\n                                    const
      char* host_end,\n                                    int* port)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isalnum
      Src: /src/brpc/src/brpc/uri.cpp:114,1
    - Dst: std::unordered_set::count
      Src: /src/brpc/src/brpc/uri.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 115
    functionName: brpc::is_valid_char
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_set::count
    - isalnum
    linkageType: ''
    returnType: bool
    signature: bool is_valid_char(char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 120
    functionName: brpc::is_all_spaces
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_all_spaces(const char* p)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::Clear
      Src: /src/brpc/src/brpc/uri.cpp:159,1
    - Dst: is_valid_char
      Src: /src/brpc/src/brpc/uri.cpp:178,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:179,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:184,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:191,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:195,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:196,1
    - Dst: SplitHostAndPort
      Src: /src/brpc/src/brpc/uri.cpp:202,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:203,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:209,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:210,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:216,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:222,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:223,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:229,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:235,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:236,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:242,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 82
    argCount: 1
    argNames:
    - url
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 245
    functionName: brpc::URI::SetHttpURL
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 12
    functionsReached:
    - is_all_spaces
    - brpc::URI::Clear
    - assign
    - set_error
    - is_valid_char
    - SplitHostAndPort
    linkageType: ''
    returnType: int
    signature: int URI::SetHttpURL(const char* url)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/uri.cpp:270,1
    - Dst: brpc::is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:281,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/uri.cpp:282,1
    - Dst: brpc::SplitHostAndPort
      Src: /src/brpc/src/brpc/uri.cpp:289,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/uri.cpp:291,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 43
    argCount: 4
    argNames:
    - url
    - scheme_out
    - host_out
    - port_out
    argTypes:
    - char*
    - std::string*
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 297
    functionName: brpc::ParseURL
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - std::string*::assign
    - LOG
    - brpc::is_all_spaces
    - brpc::SplitHostAndPort
    linkageType: ''
    returnType: int
    signature: "int ParseURL(const char* url,\n             std::string* scheme_out,
      std::string* host_out, int* port_out)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:300,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:301,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/src/brpc/uri.cpp:312,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 313
    functionName: brpc::URI::Print
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 3
    functionsReached:
    - brpc::URI::PrintWithoutHost
    - empty
    linkageType: ''
    returnType: void
    signature: void URI::Print(std::ostream& os) const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:316,1
    - Dst: brpc::URI::QueryBegin
      Src: /src/brpc/src/brpc/uri.cpp:326,1
    - Dst: brpc::URI::QueryEnd
      Src: /src/brpc/src/brpc/uri.cpp:326,1
    - Dst: QueryIterator::second::empty
      Src: /src/brpc/src/brpc/uri.cpp:334,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:338,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:341,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 344
    functionName: brpc::URI::PrintWithoutHost
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 2
    functionsReached:
    - brpc::URI::QueryEnd
    - empty
    - brpc::URI::QueryBegin
    - QueryIterator::second::empty
    linkageType: ''
    returnType: void
    signature: void URI::PrintWithoutHost(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseQueries
      Src: /src/brpc/src/brpc/uri.cpp:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: brpc::URI::InitializeQueryMap
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - ParseQueries
    linkageType: ''
    returnType: void
    signature: void URI::InitializeQueryMap() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:353,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:357,1
    - Dst: brpc::URI::QueryBegin
      Src: /src/brpc/src/brpc/uri.cpp:359,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:360,1
    - Dst: QueryIterator::second::empty
      Src: /src/brpc/src/brpc/uri.cpp:361,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:362,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:363,1
    - Dst: brpc::URI::QueryEnd
      Src: /src/brpc/src/brpc/uri.cpp:366,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:367,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:368,1
    - Dst: QueryIterator::second::empty
      Src: /src/brpc/src/brpc/uri.cpp:369,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:370,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:371,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - query
    - append_question_mark
    argTypes:
    - std::string*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 374
    functionName: brpc::URI::AppendQueryString
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::QueryEnd
    - std::string*::push_back
    - empty
    - std::string*::append
    - QueryIterator::second::empty
    - brpc::URI::QueryBegin
    linkageType: ''
    returnType: void
    signature: void URI::AppendQueryString(std::string* query, bool append_question_mark)
      const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/uri.cpp:378,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:379,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:380,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:382,1
    - Dst: brpc::URI::AppendQueryString
      Src: /src/brpc/src/brpc/uri.cpp:385,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:386,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:387,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:390,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:391,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:392,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - h2_path
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 376
    functionDepth: 2
    functionLinenumber: 376
    functionLinenumberEnd: 394
    functionName: brpc::URI::GenerateH2Path
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::clear
    - std::string*::reserve
    - std::string*::push_back
    - empty
    - size
    - brpc::URI::AppendQueryString
    linkageType: ''
    returnType: void
    signature: void URI::GenerateH2Path(std::string* h2_path) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/uri.cpp:397,1
    - Dst: SplitHostAndPort
      Src: /src/brpc/src/brpc/uri.cpp:399,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:399,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' host'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 401
    functionName: brpc::URI::SetHostAndPort
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - size
    - c_str
    - SplitHostAndPort
    - assign
    linkageType: ''
    returnType: void
    signature: void URI::SetHostAndPort(const std::string& host)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:404,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:405,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:406,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:409,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:414,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:418,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:423,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - h2_path
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 425
    functionName: brpc::URI::SetH2Path
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 2
    functionsReached:
    - clear
    - assign
    linkageType: ''
    returnType: void
    signature: void URI::SetH2Path(const char* h2_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/uri.cpp:429,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/uri.cpp:429,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/uri.cpp:429,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 433
    functionName: brpc::QueryRemover::QueryRemover
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - std::string*::data
    linkageType: ''
    returnType: void
    signature: void QueryRemover::QueryRemover(const std::string* str)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: _qs
      Src: /src/brpc/src/brpc/uri.cpp:440,1
    - Dst: resize
      Src: /src/brpc/src/brpc/uri.cpp:444,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:445,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/uri.cpp:446,1
    - Dst: append
      Src: /src/brpc/src/brpc/uri.cpp:449,1
    - Dst: key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:449,1
    - Dst: key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:449,1
    - Dst: key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:450,1
    - Dst: _qs
      Src: /src/brpc/src/brpc/uri.cpp:454,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 456
    functionName: '& QueryRemover::operator++()'
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - _qs
    - append
    - key_and_value
    - resize
    - push_back
    - empty
    linkageType: ''
    returnType: QueryRemover
    signature: QueryRemover & QueryRemover::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 462
    functionName: QueryRemover::operator++(int)
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: QueryRemover
    signature: QueryRemover QueryRemover::operator++(int)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/src/brpc/uri.cpp:468,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:468,1
    - Dst: append
      Src: /src/brpc/src/brpc/uri.cpp:470,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:470,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 464
    functionDepth: 1
    functionLinenumber: 464
    functionLinenumberEnd: 474
    functionName: brpc::QueryRemover::remove_current_key_and_value
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 7
    functionsReached:
    - append
    - data
    - brpc::QueryRemover::key
    linkageType: ''
    returnType: void
    signature: void QueryRemover::remove_current_key_and_value()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/src/brpc/uri.cpp:480,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:480,1
    - Dst: brpc::QueryRemover::key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:483,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:484,1
    - Dst: resize
      Src: /src/brpc/src/brpc/uri.cpp:490,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:491,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:492,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/uri.cpp:493,1
    - Dst: append
      Src: /src/brpc/src/brpc/uri.cpp:495,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 498
    functionName: brpc::QueryRemover::modified_query
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 8
    functionsReached:
    - append
    - brpc::QueryRemover::key_and_value
    - brpc::QueryRemover::key
    - resize
    - push_back
    - empty
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string QueryRemover::modified_query()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/uri.cpp:503,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/uri.cpp:503,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:504,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:506,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:506,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/uri.cpp:506,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:507,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:508,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:508,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/uri.cpp:508,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - query_string
    - ' key'
    - ' value'
    argTypes:
    - std::string*
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 509
    functionName: brpc::append_query
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - butil::back_char
    - std::string*::push_back
    - brpc::size
    - data
    - std::string*::append
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: "void append_query(std::string *query_string,\n                  const
      butil::StringPiece& key,\n                  const butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::URI::URI
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void URI::URI()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: URI::~URI()
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void URI::~URI()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/uri.cpp:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:44,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:45,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:46,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:47,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:48,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:49,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 51
    functionName: brpc::URI::Clear
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - reset
    - clear
    linkageType: ''
    returnType: void
    signature: void URI::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:54,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/uri.cpp:55,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/uri.cpp:56,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/uri.cpp:57,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:58,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:59,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:60,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:61,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:62,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:63,1
    - Dst: swap
      Src: /src/brpc/src/brpc/uri.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - URI
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: brpc::URI::Swap
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void URI::Swap(URI &rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:69,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/uri.cpp:70,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/uri.cpp:73,1
    - Dst: QuerySplitter::key
      Src: /src/brpc/src/brpc/uri.cpp:74,1
    - Dst: QuerySplitter::key
      Src: /src/brpc/src/brpc/uri.cpp:75,1
    - Dst: QuerySplitter::key
      Src: /src/brpc/src/brpc/uri.cpp:75,1
    - Dst: QuerySplitter::value
      Src: /src/brpc/src/brpc/uri.cpp:76,1
    - Dst: QuerySplitter::value
      Src: /src/brpc/src/brpc/uri.cpp:76,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' query_map'
    - query
    argTypes:
    - URI::QueryMap
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 80
    functionName: brpc::ParseQueries
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - std::string::empty
    - clear
    - QuerySplitter::key
    - QuerySplitter::value
    linkageType: ''
    returnType: void
    signature: void ParseQueries(URI::QueryMap& query_map, const std::string &query)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/uri.cpp:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 3
    argNames:
    - host_begin
    - host_end
    - port
    argTypes:
    - char*
    - char*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 100
    functionName: brpc::SplitHostAndPort
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - static_cast<int>
    linkageType: ''
    returnType: char
    signature: "char * SplitHostAndPort(const char* host_begin,\n                                    const
      char* host_end,\n                                    int* port)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isalnum
      Src: /src/brpc/src/brpc/uri.cpp:114,1
    - Dst: std::unordered_set::count
      Src: /src/brpc/src/brpc/uri.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 115
    functionName: brpc::is_valid_char
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_set::count
    - isalnum
    linkageType: ''
    returnType: bool
    signature: bool is_valid_char(char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 120
    functionName: brpc::is_all_spaces
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_all_spaces(const char* p)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::Clear
      Src: /src/brpc/src/brpc/uri.cpp:159,1
    - Dst: is_valid_char
      Src: /src/brpc/src/brpc/uri.cpp:178,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:179,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:184,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:191,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:195,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:196,1
    - Dst: SplitHostAndPort
      Src: /src/brpc/src/brpc/uri.cpp:202,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:203,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:209,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:210,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:216,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:222,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:223,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:229,1
    - Dst: is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:235,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/uri.cpp:236,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:242,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 82
    argCount: 1
    argNames:
    - url
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 245
    functionName: brpc::URI::SetHttpURL
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 12
    functionsReached:
    - is_all_spaces
    - brpc::URI::Clear
    - assign
    - set_error
    - is_valid_char
    - SplitHostAndPort
    linkageType: ''
    returnType: int
    signature: int URI::SetHttpURL(const char* url)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/uri.cpp:270,1
    - Dst: brpc::is_all_spaces
      Src: /src/brpc/src/brpc/uri.cpp:281,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/uri.cpp:282,1
    - Dst: brpc::SplitHostAndPort
      Src: /src/brpc/src/brpc/uri.cpp:289,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/uri.cpp:291,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 43
    argCount: 4
    argNames:
    - url
    - scheme_out
    - host_out
    - port_out
    argTypes:
    - char*
    - std::string*
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 297
    functionName: brpc::ParseURL
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - std::string*::assign
    - LOG
    - brpc::is_all_spaces
    - brpc::SplitHostAndPort
    linkageType: ''
    returnType: int
    signature: "int ParseURL(const char* url,\n             std::string* scheme_out,
      std::string* host_out, int* port_out)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:300,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:301,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/src/brpc/uri.cpp:312,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 299
    functionDepth: 2
    functionLinenumber: 299
    functionLinenumberEnd: 313
    functionName: brpc::URI::Print
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 3
    functionsReached:
    - brpc::URI::PrintWithoutHost
    - empty
    linkageType: ''
    returnType: void
    signature: void URI::Print(std::ostream& os) const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:316,1
    - Dst: brpc::URI::QueryBegin
      Src: /src/brpc/src/brpc/uri.cpp:326,1
    - Dst: brpc::URI::QueryEnd
      Src: /src/brpc/src/brpc/uri.cpp:326,1
    - Dst: QueryIterator::second::empty
      Src: /src/brpc/src/brpc/uri.cpp:334,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:338,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:341,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 344
    functionName: brpc::URI::PrintWithoutHost
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 3
    functionsReached:
    - brpc::URI::QueryEnd
    - empty
    - brpc::URI::QueryBegin
    - QueryIterator::second::empty
    linkageType: ''
    returnType: void
    signature: void URI::PrintWithoutHost(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseQueries
      Src: /src/brpc/src/brpc/uri.cpp:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: brpc::URI::InitializeQueryMap
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - ParseQueries
    linkageType: ''
    returnType: void
    signature: void URI::InitializeQueryMap() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:353,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:357,1
    - Dst: brpc::URI::QueryBegin
      Src: /src/brpc/src/brpc/uri.cpp:359,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:360,1
    - Dst: QueryIterator::second::empty
      Src: /src/brpc/src/brpc/uri.cpp:361,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:362,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:363,1
    - Dst: brpc::URI::QueryEnd
      Src: /src/brpc/src/brpc/uri.cpp:366,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:367,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:368,1
    - Dst: QueryIterator::second::empty
      Src: /src/brpc/src/brpc/uri.cpp:369,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:370,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:371,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - query
    - append_question_mark
    argTypes:
    - std::string*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 374
    functionName: brpc::URI::AppendQueryString
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - brpc::URI::QueryEnd
    - std::string*::push_back
    - empty
    - std::string*::append
    - QueryIterator::second::empty
    - brpc::URI::QueryBegin
    linkageType: ''
    returnType: void
    signature: void URI::AppendQueryString(std::string* query, bool append_question_mark)
      const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:377,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/uri.cpp:378,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:379,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:380,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:382,1
    - Dst: brpc::URI::AppendQueryString
      Src: /src/brpc/src/brpc/uri.cpp:385,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:386,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:387,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:390,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:391,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:392,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - h2_path
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 376
    functionDepth: 2
    functionLinenumber: 376
    functionLinenumberEnd: 394
    functionName: brpc::URI::GenerateH2Path
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::clear
    - std::string*::reserve
    - std::string*::push_back
    - empty
    - size
    - brpc::URI::AppendQueryString
    linkageType: ''
    returnType: void
    signature: void URI::GenerateH2Path(std::string* h2_path) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/uri.cpp:397,1
    - Dst: SplitHostAndPort
      Src: /src/brpc/src/brpc/uri.cpp:399,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:399,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' host'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 401
    functionName: brpc::URI::SetHostAndPort
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - size
    - c_str
    - SplitHostAndPort
    - assign
    linkageType: ''
    returnType: void
    signature: void URI::SetHostAndPort(const std::string& host)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:404,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:405,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:406,1
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.cpp:409,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:414,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:418,1
    - Dst: assign
      Src: /src/brpc/src/brpc/uri.cpp:423,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - h2_path
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 425
    functionName: brpc::URI::SetH2Path
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 2
    functionsReached:
    - clear
    - assign
    linkageType: ''
    returnType: void
    signature: void URI::SetH2Path(const char* h2_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/uri.cpp:429,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/uri.cpp:429,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/uri.cpp:429,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 433
    functionName: brpc::QueryRemover::QueryRemover
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - std::string*::data
    linkageType: ''
    returnType: void
    signature: void QueryRemover::QueryRemover(const std::string* str)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: _qs
      Src: /src/brpc/src/brpc/uri.cpp:440,1
    - Dst: resize
      Src: /src/brpc/src/brpc/uri.cpp:444,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:445,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/uri.cpp:446,1
    - Dst: append
      Src: /src/brpc/src/brpc/uri.cpp:449,1
    - Dst: key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:449,1
    - Dst: key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:449,1
    - Dst: key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:450,1
    - Dst: _qs
      Src: /src/brpc/src/brpc/uri.cpp:454,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 456
    functionName: '& QueryRemover::operator++()'
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - _qs
    - append
    - key_and_value
    - resize
    - push_back
    - empty
    linkageType: ''
    returnType: QueryRemover
    signature: QueryRemover & QueryRemover::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 462
    functionName: QueryRemover::operator++(int)
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: QueryRemover
    signature: QueryRemover QueryRemover::operator++(int)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/src/brpc/uri.cpp:468,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:468,1
    - Dst: append
      Src: /src/brpc/src/brpc/uri.cpp:470,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:470,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 464
    functionDepth: 1
    functionLinenumber: 464
    functionLinenumberEnd: 474
    functionName: brpc::QueryRemover::remove_current_key_and_value
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 7
    functionsReached:
    - append
    - data
    - brpc::QueryRemover::key
    linkageType: ''
    returnType: void
    signature: void QueryRemover::remove_current_key_and_value()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/src/brpc/uri.cpp:480,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:480,1
    - Dst: brpc::QueryRemover::key_and_value
      Src: /src/brpc/src/brpc/uri.cpp:483,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:484,1
    - Dst: resize
      Src: /src/brpc/src/brpc/uri.cpp:490,1
    - Dst: size
      Src: /src/brpc/src/brpc/uri.cpp:491,1
    - Dst: empty
      Src: /src/brpc/src/brpc/uri.cpp:492,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/uri.cpp:493,1
    - Dst: append
      Src: /src/brpc/src/brpc/uri.cpp:495,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 498
    functionName: brpc::QueryRemover::modified_query
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 8
    functionsReached:
    - append
    - brpc::QueryRemover::key_and_value
    - brpc::QueryRemover::key
    - resize
    - push_back
    - empty
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string QueryRemover::modified_query()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/uri.cpp:503,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/uri.cpp:503,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:504,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:506,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:506,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/uri.cpp:506,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/uri.cpp:507,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/uri.cpp:508,1
    - Dst: data
      Src: /src/brpc/src/brpc/uri.cpp:508,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/uri.cpp:508,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - query_string
    - ' key'
    - ' value'
    argTypes:
    - std::string*
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 509
    functionName: brpc::append_query
    functionSourceFile: /src/brpc/src/brpc/uri.cpp
    functionUses: 0
    functionsReached:
    - butil::back_char
    - std::string*::push_back
    - brpc::size
    - data
    - std::string*::append
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: "void append_query(std::string *query_string,\n                  const
      butil::StringPiece& key,\n                  const butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: PeriodicTask::~PeriodicTask()
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PeriodicTask::~PeriodicTask()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PeriodicTask*>
      Src: /src/brpc/src/brpc/periodic_task.cpp:29,1
    - Dst: PeriodicTask*::OnTriggeringTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:31,1
    - Dst: PeriodicTask*::OnDestroyingTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:32,1
    - Dst: brpc::PeriodicTaskManager::StartTaskAt
      Src: /src/brpc/src/brpc/periodic_task.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 37
    functionName: brpc::PeriodicTaskThread
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached:
    - PeriodicTask*::OnDestroyingTask
    - brpc::PeriodicTaskManager::StartTaskAt
    - static_cast<PeriodicTask*>
    - PeriodicTask*::OnTriggeringTask
    linkageType: ''
    returnType: void
    signature: void * PeriodicTaskThread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/periodic_task.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:44,1
    - Dst: static_cast<PeriodicTask*>
      Src: /src/brpc/src/brpc/periodic_task.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 4
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: brpc::RunPeriodicTaskThread
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - LOG
    - static_cast<PeriodicTask*>
    linkageType: ''
    returnType: void
    signature: void RunPeriodicTaskThread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:52,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/periodic_task.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:59,1
    - Dst: PeriodicTask*::OnDestroyingTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - task
    - ' abstime'
    argTypes:
    - PeriodicTask*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 3
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::PeriodicTaskManager::StartTaskAt
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 1
    functionsReached:
    - bthread_timer_add
    - LOG
    - PeriodicTask*::OnDestroyingTask
    linkageType: ''
    returnType: void
    signature: void PeriodicTaskManager::StartTaskAt(PeriodicTask* task, const timespec&
      abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: PeriodicTask::~PeriodicTask()
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PeriodicTask::~PeriodicTask()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PeriodicTask*>
      Src: /src/brpc/src/brpc/periodic_task.cpp:29,1
    - Dst: PeriodicTask*::OnTriggeringTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:31,1
    - Dst: PeriodicTask*::OnDestroyingTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:32,1
    - Dst: brpc::PeriodicTaskManager::StartTaskAt
      Src: /src/brpc/src/brpc/periodic_task.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 28
    functionDepth: 4
    functionLinenumber: 28
    functionLinenumberEnd: 37
    functionName: brpc::PeriodicTaskThread
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached:
    - PeriodicTask*::OnDestroyingTask
    - brpc::PeriodicTaskManager::StartTaskAt
    - static_cast<PeriodicTask*>
    - PeriodicTask*::OnTriggeringTask
    linkageType: ''
    returnType: void
    signature: void * PeriodicTaskThread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/periodic_task.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:44,1
    - Dst: static_cast<PeriodicTask*>
      Src: /src/brpc/src/brpc/periodic_task.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 4
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: brpc::RunPeriodicTaskThread
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - LOG
    - static_cast<PeriodicTask*>
    linkageType: ''
    returnType: void
    signature: void RunPeriodicTaskThread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:52,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/periodic_task.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:59,1
    - Dst: PeriodicTask*::OnDestroyingTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - task
    - ' abstime'
    argTypes:
    - PeriodicTask*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 3
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::PeriodicTaskManager::StartTaskAt
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 2
    functionsReached:
    - bthread_timer_add
    - LOG
    - PeriodicTask*::OnDestroyingTask
    linkageType: ''
    returnType: void
    signature: void PeriodicTaskManager::StartTaskAt(PeriodicTask* task, const timespec&
      abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::ClosureGuard::ClosureGuard
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClosureGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: brpc::ClosureGuard::ClosureGuard
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClosureGuard(google::protobuf::Closure* done)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/closure_guard.h:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: ~ClosureGuard()
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~ClosureGuard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/closure_guard.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::ClosureGuard::reset
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 4
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void reset(google::protobuf::Closure* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 56
    functionName: brpc::ClosureGuard::release
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::Closure
    signature: google::protobuf::Closure * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::ClosureGuard::empty
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/closure_guard.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ClosureGuard
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: brpc::ClosureGuard::swap
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(ClosureGuard& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::ClosureGuard::ClosureGuard
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClosureGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: brpc::ClosureGuard::ClosureGuard
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClosureGuard(google::protobuf::Closure* done)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/closure_guard.h:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: ~ClosureGuard()
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~ClosureGuard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/closure_guard.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::ClosureGuard::reset
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 4
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void reset(google::protobuf::Closure* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 56
    functionName: brpc::ClosureGuard::release
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::Closure
    signature: google::protobuf::Closure * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::ClosureGuard::empty
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/closure_guard.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ClosureGuard
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: brpc::ClosureGuard::swap
    functionSourceFile: /src/brpc/src/brpc/closure_guard.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(ClosureGuard& other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:27,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:27,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:30,1
    - Dst: data
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:30,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:30,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 31
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached:
    - data
    - brpc::size
    - strncasecmp
    - strlen
    linkageType: ''
    returnType: bool
    signature: "bool CompareStringPieceWithoutCase(\n        const butil::StringPiece&
      s1, const char* s2)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:35,1
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:37,1
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:39,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:42,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:42,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - ' type'
    - print_log_on_unknown
    argTypes:
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 46
    functionName: brpc::StringToConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached:
    - brpc::empty
    - brpc::CompareStringPieceWithoutCase
    - LOG_IF
    linkageType: ''
    returnType: ConnectionType
    signature: "ConnectionType StringToConnectionType(const butil::StringPiece& type,\n
      \                                     bool print_log_on_unknown)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 60
    functionName: brpc::ConnectionTypeToString
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ConnectionTypeToString(ConnectionType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:63,1
    - Dst: StringToConnectionType
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 70
    functionName: AdaptiveConnectionType::operator=(const butil::StringPiece& name)
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached:
    - empty
    - StringToConnectionType
    linkageType: ''
    returnType: void
    signature: void AdaptiveConnectionType::operator=(const butil::StringPiece& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:27,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:27,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:30,1
    - Dst: data
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:30,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:30,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 31
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 1
    functionsReached:
    - data
    - brpc::size
    - strncasecmp
    - strlen
    linkageType: ''
    returnType: bool
    signature: "bool CompareStringPieceWithoutCase(\n        const butil::StringPiece&
      s1, const char* s2)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:35,1
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:37,1
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:39,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:42,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:42,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - ' type'
    - print_log_on_unknown
    argTypes:
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 46
    functionName: brpc::StringToConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached:
    - brpc::empty
    - brpc::CompareStringPieceWithoutCase
    - LOG_IF
    linkageType: ''
    returnType: ConnectionType
    signature: "ConnectionType StringToConnectionType(const butil::StringPiece& type,\n
      \                                     bool print_log_on_unknown)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 60
    functionName: brpc::ConnectionTypeToString
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ConnectionTypeToString(ConnectionType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:63,1
    - Dst: StringToConnectionType
      Src: /src/brpc/src/brpc/adaptive_connection_type.cpp:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 70
    functionName: AdaptiveConnectionType::operator=(const butil::StringPiece& name)
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.cpp
    functionUses: 0
    functionsReached:
    - empty
    - StringToConnectionType
    linkageType: ''
    returnType: void
    signature: void AdaptiveConnectionType::operator=(const butil::StringPiece& name)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 1
    argNames:
    - op_code
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 52
    functionName: brpc::is_mongo_opcode
    functionSourceFile: /src/brpc/src/brpc/mongo_head.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_mongo_opcode(int32_t op_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:66,1
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:67,1
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:68,1
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:69,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::make_host_endian
    functionSourceFile: /src/brpc/src/brpc/mongo_head.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: void
    signature: void make_host_endian()
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 1
    argNames:
    - op_code
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 52
    functionName: brpc::is_mongo_opcode
    functionSourceFile: /src/brpc/src/brpc/mongo_head.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_mongo_opcode(int32_t op_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:66,1
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:67,1
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:68,1
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/brpc/mongo_head.h:69,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::make_host_endian
    functionSourceFile: /src/brpc/src/brpc/mongo_head.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: void
    signature: void make_host_endian()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: ~ClusterRecoverPolicy()
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ClusterRecoverPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: ~ClusterRecoverPolicy()
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ClusterRecoverPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: ~StreamInputHandler()
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StreamInputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - id
    - error_code
    - ' error_text'
    argTypes:
    - StreamId
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: brpc::StreamInputHandler::on_failed
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void on_failed(StreamId id, int error_code,\n                           const
      std::string& error_text)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: brpc::StreamOptions
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: brpc::StreamWriteOptions
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamWriteOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: brpc::detail::InvalidValue
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamId
    signature: StreamId InvalidValue()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StreamClose
      Src: /src/brpc/src/brpc/stream.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 172
    functionName: brpc::detail::Free
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached:
    - StreamClose
    linkageType: ''
    returnType: void
    signature: void Free(StreamId f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: brpc::detail::InvalidValue
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamId
    signature: StreamId InvalidValue()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StreamClose
      Src: /src/brpc/src/brpc/stream.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 172
    functionName: brpc::detail::Free
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached:
    - StreamClose
    linkageType: ''
    returnType: void
    signature: void Free(StreamId f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: ~StreamInputHandler()
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StreamInputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - id
    - error_code
    - ' error_text'
    argTypes:
    - StreamId
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: brpc::StreamInputHandler::on_failed
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void on_failed(StreamId id, int error_code,\n                           const
      std::string& error_text)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: brpc::StreamOptions
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: brpc::StreamWriteOptions
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamWriteOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: brpc::detail::InvalidValue
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamId
    signature: StreamId InvalidValue()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StreamClose
      Src: /src/brpc/src/brpc/stream.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 172
    functionName: brpc::detail::Free
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached:
    - StreamClose
    linkageType: ''
    returnType: void
    signature: void Free(StreamId f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: brpc::detail::InvalidValue
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamId
    signature: StreamId InvalidValue()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StreamClose
      Src: /src/brpc/src/brpc/stream.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 172
    functionName: brpc::detail::Free
    functionSourceFile: /src/brpc/src/brpc/stream.h
    functionUses: 0
    functionsReached:
    - StreamClose
    linkageType: ''
    returnType: void
    signature: void Free(StreamId f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:25,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 27
    functionName: brpc::BaiduMasterService::BaiduMasterService
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void BaiduMasterService::BaiduMasterService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: BaiduMasterService::~BaiduMasterService()
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduMasterService::~BaiduMasterService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::BaiduMasterService::Describe
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: "void BaiduMasterService::Describe(std::ostream &os,\n                                  const
      DescribeOptions&) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:44,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:45,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:46,1
    - Dst: data
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:46,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:47,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:48,1
    - Dst: brpc::BaiduMasterService::Expose
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: brpc::BaiduMasterService::Expose
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 1
    functionsReached:
    - brpc::BaiduMasterService::Expose
    - std::string::reserve
    - butil::class_name_str
    - std::string::append
    - data
    - size
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void BaiduMasterService::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:25,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 27
    functionName: brpc::BaiduMasterService::BaiduMasterService
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void BaiduMasterService::BaiduMasterService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: BaiduMasterService::~BaiduMasterService()
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduMasterService::~BaiduMasterService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::BaiduMasterService::Describe
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: "void BaiduMasterService::Describe(std::ostream &os,\n                                  const
      DescribeOptions&) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:44,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:45,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:46,1
    - Dst: data
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:46,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:47,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:48,1
    - Dst: brpc::BaiduMasterService::Expose
      Src: /src/brpc/src/brpc/baidu_master_service.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: brpc::BaiduMasterService::Expose
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::BaiduMasterService::Expose
    - std::string::reserve
    - butil::class_name_str
    - std::string::append
    - data
    - size
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void BaiduMasterService::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 29
    functionName: RPC_VLOG_IF
    functionSourceFile: /src/brpc/src/brpc/log.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RPC_VLOG_IF(cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: RPC_VPLOG_IF
    functionSourceFile: /src/brpc/src/brpc/log.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RPC_VPLOG_IF(cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/serialized_request.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: '& operator=(const SerializedRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: SerializedRequest
    signature: SerializedRequest & operator=(const SerializedRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/serialized_request.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::SerializedRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: '& serialized_data()'
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: '& serialized_data() const'
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/serialized_request.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: '& operator=(const SerializedRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: SerializedRequest
    signature: SerializedRequest & operator=(const SerializedRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/serialized_request.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::SerializedRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: '& serialized_data()'
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: '& serialized_data() const'
    functionSourceFile: /src/brpc/src/brpc/serialized_request.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 5
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 6
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 7
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 8
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 345
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 346
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 348
    functionName: brpc::AVCNaluIterator::nalu_type
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AVCNaluType
    signature: AVCNaluType nalu_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 354
    functionName: brpc::AVCNaluIterator::set_end
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 386
    functionName: brpc::FlvWriterOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvWriterOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 581
    functionDepth: 0
    functionLinenumber: 581
    functionLinenumberEnd: 581
    functionName: brpc::RtmpStreamBase::stream_id
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 584
    functionName: brpc::RtmpStreamBase::chunk_stream_id
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t chunk_stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 590
    functionName: brpc::RtmpStreamBase::is_client_stream
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_client_stream() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 591
    functionName: brpc::RtmpStreamBase::is_server_stream
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_server_stream() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 594
    functionDepth: 0
    functionLinenumber: 594
    functionLinenumberEnd: 594
    functionName: brpc::RtmpStreamBase::is_stopped
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 597
    functionName: brpc::RtmpStreamBase::create_realtime_us
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t create_realtime_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 599
    functionName: brpc::RtmpStreamBase::is_paused
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_paused() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 602
    functionName: brpc::RtmpStreamBase::has_data_ever
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_data_ever() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.h:605,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 605
    functionName: brpc::RtmpStreamBase::socket
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * socket()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.h:606,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 606
    functionName: brpc::RtmpStreamBase::socket
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * socket() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.h:612,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 612
    functionName: brpc::RtmpStreamBase::is_server_accepted
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool is_server_accepted() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClient::swap
      Src: /src/brpc/src/brpc/rtmp.h:746,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RtmpClient
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 746
    functionDepth: 0
    functionLinenumber: 746
    functionLinenumberEnd: 746
    functionName: brpc::RtmpClient::swap
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 1
    functionsReached:
    - brpc::RtmpClient::swap
    linkageType: ''
    returnType: void
    signature: void swap(RtmpClient& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 754
    functionName: brpc::RtmpHashCode
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpHashCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - hash_code
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 755
    functionDepth: 0
    functionLinenumber: 755
    functionLinenumberEnd: 758
    functionName: operator=(uint32_t hash_code)
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(uint32_t hash_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 759
    functionName: operator uint32_t() const
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator uint32_t() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 760
    functionDepth: 0
    functionLinenumber: 760
    functionLinenumberEnd: 760
    functionName: brpc::has_been_set
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_been_set() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.h:792,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 792
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 792
    functionName: '& stream_name() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - brpc::empty
    linkageType: ''
    returnType: std::string
    signature: std::string & stream_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 822
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 822
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientStreamOptions
    signature: RtmpClientStreamOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 917
      start: 917
    functionDepth: 0
    functionLinenumber: 917
    functionLinenumberEnd: 917
    functionName: ~RtmpMessageHandler()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpMessageHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 925
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 925
    functionName: ~RetryingClientMessageHandler()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RetryingClientMessageHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 953
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 953
    functionName: ~SubStreamCreator()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubStreamCreator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 993
      start: 993
    functionDepth: 0
    functionLinenumber: 993
    functionLinenumberEnd: 993
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpRetryingClientStreamOptions
    signature: RtmpRetryingClientStreamOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1058
    functionDepth: 0
    functionLinenumber: 1058
    functionLinenumberEnd: 1058
    functionName: ~RtmpService()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 9
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 10
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 11
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::size
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 12
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 345
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 346
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 348
    functionName: brpc::AVCNaluIterator::nalu_type
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AVCNaluType
    signature: AVCNaluType nalu_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 354
    functionName: brpc::AVCNaluIterator::set_end
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_end()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 386
    functionName: brpc::FlvWriterOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvWriterOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 581
    functionDepth: 0
    functionLinenumber: 581
    functionLinenumberEnd: 581
    functionName: brpc::RtmpStreamBase::stream_id
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 584
    functionName: brpc::RtmpStreamBase::chunk_stream_id
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t chunk_stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 590
    functionName: brpc::RtmpStreamBase::is_client_stream
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_client_stream() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 591
    functionName: brpc::RtmpStreamBase::is_server_stream
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_server_stream() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 594
    functionDepth: 0
    functionLinenumber: 594
    functionLinenumberEnd: 594
    functionName: brpc::RtmpStreamBase::is_stopped
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_stopped() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 597
    functionName: brpc::RtmpStreamBase::create_realtime_us
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t create_realtime_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 599
    functionName: brpc::RtmpStreamBase::is_paused
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_paused() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 602
    functionName: brpc::RtmpStreamBase::has_data_ever
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_data_ever() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.h:605,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 605
    functionName: brpc::RtmpStreamBase::socket
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * socket()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.h:606,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 606
    functionName: brpc::RtmpStreamBase::socket
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * socket() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.h:612,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 612
    functionName: brpc::RtmpStreamBase::is_server_accepted
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool is_server_accepted() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClient::swap
      Src: /src/brpc/src/brpc/rtmp.h:746,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RtmpClient
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 746
    functionDepth: 0
    functionLinenumber: 746
    functionLinenumberEnd: 746
    functionName: brpc::RtmpClient::swap
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 2
    functionsReached:
    - brpc::RtmpClient::swap
    linkageType: ''
    returnType: void
    signature: void swap(RtmpClient& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 754
    functionName: brpc::RtmpHashCode
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpHashCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - hash_code
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 755
    functionDepth: 0
    functionLinenumber: 755
    functionLinenumberEnd: 758
    functionName: operator=(uint32_t hash_code)
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(uint32_t hash_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 759
    functionName: operator uint32_t() const
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator uint32_t() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 760
    functionDepth: 0
    functionLinenumber: 760
    functionLinenumberEnd: 760
    functionName: brpc::has_been_set
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_been_set() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.h:792,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 792
      start: 791
    functionDepth: 1
    functionLinenumber: 791
    functionLinenumberEnd: 792
    functionName: '& stream_name() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: std::string
    signature: std::string & stream_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 822
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 822
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientStreamOptions
    signature: RtmpClientStreamOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 917
      start: 917
    functionDepth: 0
    functionLinenumber: 917
    functionLinenumberEnd: 917
    functionName: ~RtmpMessageHandler()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpMessageHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 925
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 925
    functionName: ~RetryingClientMessageHandler()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RetryingClientMessageHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 953
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 953
    functionName: ~SubStreamCreator()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubStreamCreator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 993
      start: 993
    functionDepth: 0
    functionLinenumber: 993
    functionLinenumberEnd: 993
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpRetryingClientStreamOptions
    signature: RtmpRetryingClientStreamOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1058
    functionDepth: 0
    functionLinenumber: 1058
    functionLinenumberEnd: 1058
    functionName: ~RtmpService()
    functionSourceFile: /src/brpc/src/brpc/rtmp.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExcludedServers*::IsExcluded
      Src: /src/brpc/src/brpc/excluded_servers.h:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - s
    - id
    argTypes:
    - ExcludedServers*
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::ExcludedServers::IsExcluded
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached:
    - ExcludedServers*::IsExcluded
    linkageType: ''
    returnType: bool
    signature: bool IsExcluded(const ExcludedServers* s, SocketId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ExcludedServers::size
      Src: /src/brpc/src/brpc/excluded_servers.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::ExcludedServers::size
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 1
    functionsReached:
    - brpc::ExcludedServers::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cap
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 53
    functionName: brpc::ExcludedServers::ExcludedServers
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExcludedServers(int cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: ~ExcludedServers()
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ExcludedServers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/excluded_servers.h:66,1
    - Dst: ExcludedServers::ExcludedServers
      Src: /src/brpc/src/brpc/excluded_servers.h:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cap
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 72
    functionName: brpc::ExcludedServers::Create
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 2
    functionsReached:
    - ExcludedServers::ExcludedServers
    - malloc
    linkageType: ''
    returnType: ExcludedServers
    signature: ExcludedServers * ExcludedServers::Create(int cap)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ExcludedServers*::~ExcludedServers
      Src: /src/brpc/src/brpc/excluded_servers.h:76,1
    - Dst: free
      Src: /src/brpc/src/brpc/excluded_servers.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - ExcludedServers*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 79
    functionName: brpc::ExcludedServers::Destroy
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 2
    functionsReached:
    - ExcludedServers*::~ExcludedServers
    - free
    linkageType: ''
    returnType: void
    signature: void ExcludedServers::Destroy(ExcludedServers* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/excluded_servers.h:82,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/excluded_servers.h:83,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/excluded_servers.h:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 87
    functionName: brpc::ExcludedServers::Add
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached:
    - elim_push
    - bottom
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void ExcludedServers::Add(SocketId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/excluded_servers.h:90,1
    - Dst: brpc::ExcludedServers::size
      Src: /src/brpc/src/brpc/excluded_servers.h:91,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/excluded_servers.h:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 89
    functionDepth: 2
    functionLinenumber: 89
    functionLinenumberEnd: 97
    functionName: brpc::ExcludedServers::IsExcluded
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached:
    - bottom
    - brpc::ExcludedServers::size
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool ExcludedServers::IsExcluded(SocketId id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExcludedServers*::IsExcluded
      Src: /src/brpc/src/brpc/excluded_servers.h:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - s
    - id
    argTypes:
    - ExcludedServers*
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::ExcludedServers::IsExcluded
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached:
    - ExcludedServers*::IsExcluded
    linkageType: ''
    returnType: bool
    signature: bool IsExcluded(const ExcludedServers* s, SocketId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ExcludedServers::size
      Src: /src/brpc/src/brpc/excluded_servers.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::ExcludedServers::size
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 3
    functionsReached:
    - brpc::ExcludedServers::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cap
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 53
    functionName: brpc::ExcludedServers::ExcludedServers
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ExcludedServers(int cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: ~ExcludedServers()
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ExcludedServers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/excluded_servers.h:66,1
    - Dst: ExcludedServers::ExcludedServers
      Src: /src/brpc/src/brpc/excluded_servers.h:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cap
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 72
    functionName: brpc::ExcludedServers::Create
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 2
    functionsReached:
    - ExcludedServers::ExcludedServers
    - malloc
    linkageType: ''
    returnType: ExcludedServers
    signature: ExcludedServers * ExcludedServers::Create(int cap)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ExcludedServers*::~ExcludedServers
      Src: /src/brpc/src/brpc/excluded_servers.h:76,1
    - Dst: free
      Src: /src/brpc/src/brpc/excluded_servers.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - ExcludedServers*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 79
    functionName: brpc::ExcludedServers::Destroy
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 2
    functionsReached:
    - ExcludedServers*::~ExcludedServers
    - free
    linkageType: ''
    returnType: void
    signature: void ExcludedServers::Destroy(ExcludedServers* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/excluded_servers.h:82,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/excluded_servers.h:83,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/excluded_servers.h:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 87
    functionName: brpc::ExcludedServers::Add
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached:
    - elim_push
    - bottom
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void ExcludedServers::Add(SocketId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/excluded_servers.h:90,1
    - Dst: brpc::ExcludedServers::size
      Src: /src/brpc/src/brpc/excluded_servers.h:91,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/excluded_servers.h:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 89
    functionDepth: 2
    functionLinenumber: 89
    functionLinenumberEnd: 97
    functionName: brpc::ExcludedServers::IsExcluded
    functionSourceFile: /src/brpc/src/brpc/excluded_servers.h
    functionUses: 0
    functionsReached:
    - bottom
    - brpc::ExcludedServers::size
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool ExcludedServers::IsExcluded(SocketId id) const
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - s
    argTypes:
    - GrpcStatus
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 52
    functionName: brpc::GrpcStatusToString
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * GrpcStatusToString(GrpcStatus s)
  - BBCount: 14
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 81
    functionName: brpc::ErrorCodeToGrpcStatus
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: GrpcStatus
    signature: GrpcStatus ErrorCodeToGrpcStatus(int error_code)
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 36
    argCount: 1
    argNames:
    - grpc_status
    argTypes:
    - GrpcStatus
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 119
    functionName: brpc::GrpcStatusToErrorCode
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GrpcStatusToErrorCode(GrpcStatus grpc_status)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::fill
      Src: /src/brpc/src/brpc/grpc.cpp:123,1
    - Dst: begin
      Src: /src/brpc/src/brpc/grpc.cpp:125,1
    - Dst: end
      Src: /src/brpc/src/brpc/grpc.cpp:126,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/grpc.cpp:136,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/grpc.cpp:139,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 13
    argCount: 2
    argNames:
    - ' str'
    - str_out
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 141
    functionName: brpc::PercentEncode
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 2
    functionsReached:
    - end
    - std::ostringstream::fill
    - std::ostringstream::str
    - std::setw
    - begin
    linkageType: ''
    returnType: void
    signature: void PercentEncode(const std::string& str, std::string* str_out)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 152
    functionName: brpc::hex_to_int
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int hex_to_int(char c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/grpc.cpp:156,1
    - Dst: end
      Src: /src/brpc/src/brpc/grpc.cpp:157,1
    - Dst: end
      Src: /src/brpc/src/brpc/grpc.cpp:159,1
    - Dst: brpc::hex_to_int
      Src: /src/brpc/src/brpc/grpc.cpp:160,1
    - Dst: brpc::hex_to_int
      Src: /src/brpc/src/brpc/grpc.cpp:161,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/grpc.cpp:168,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 2
    argNames:
    - ' str'
    - str_out
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 170
    functionName: brpc::PercentDecode
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 2
    functionsReached:
    - end
    - std::ostringstream::str
    - brpc::hex_to_int
    - begin
    linkageType: ''
    returnType: void
    signature: void PercentDecode(const std::string& str, std::string* str_out)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/grpc.cpp:173,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/grpc.cpp:177,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/grpc.cpp:177,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/grpc.cpp:186,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/grpc.cpp:186,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/grpc.cpp:206,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - grpc_timeout
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 207
    functionName: brpc::ConvertGrpcTimeoutToUS
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - strtol
    - CHECK
    - std::string*::data
    - std::string*::empty
    linkageType: ''
    returnType: int64_t
    signature: int64_t ConvertGrpcTimeoutToUS(const std::string* grpc_timeout)
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - s
    argTypes:
    - GrpcStatus
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 52
    functionName: brpc::GrpcStatusToString
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * GrpcStatusToString(GrpcStatus s)
  - BBCount: 14
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 81
    functionName: brpc::ErrorCodeToGrpcStatus
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: GrpcStatus
    signature: GrpcStatus ErrorCodeToGrpcStatus(int error_code)
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 36
    argCount: 1
    argNames:
    - grpc_status
    argTypes:
    - GrpcStatus
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 119
    functionName: brpc::GrpcStatusToErrorCode
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GrpcStatusToErrorCode(GrpcStatus grpc_status)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::fill
      Src: /src/brpc/src/brpc/grpc.cpp:123,1
    - Dst: begin
      Src: /src/brpc/src/brpc/grpc.cpp:125,1
    - Dst: end
      Src: /src/brpc/src/brpc/grpc.cpp:126,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/grpc.cpp:136,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/grpc.cpp:139,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 13
    argCount: 2
    argNames:
    - ' str'
    - str_out
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 141
    functionName: brpc::PercentEncode
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 2
    functionsReached:
    - end
    - std::ostringstream::fill
    - std::ostringstream::str
    - std::setw
    - begin
    linkageType: ''
    returnType: void
    signature: void PercentEncode(const std::string& str, std::string* str_out)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 152
    functionName: brpc::hex_to_int
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int hex_to_int(char c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/grpc.cpp:156,1
    - Dst: end
      Src: /src/brpc/src/brpc/grpc.cpp:157,1
    - Dst: end
      Src: /src/brpc/src/brpc/grpc.cpp:159,1
    - Dst: brpc::hex_to_int
      Src: /src/brpc/src/brpc/grpc.cpp:160,1
    - Dst: brpc::hex_to_int
      Src: /src/brpc/src/brpc/grpc.cpp:161,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/grpc.cpp:168,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 2
    argNames:
    - ' str'
    - str_out
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 170
    functionName: brpc::PercentDecode
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 2
    functionsReached:
    - end
    - std::ostringstream::str
    - brpc::hex_to_int
    - begin
    linkageType: ''
    returnType: void
    signature: void PercentDecode(const std::string& str, std::string* str_out)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/grpc.cpp:173,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/grpc.cpp:177,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/grpc.cpp:177,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/grpc.cpp:186,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/grpc.cpp:186,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/grpc.cpp:206,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - grpc_timeout
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 207
    functionName: brpc::ConvertGrpcTimeoutToUS
    functionSourceFile: /src/brpc/src/brpc/grpc.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - strtol
    - CHECK
    - std::string*::data
    - std::string*::empty
    linkageType: ''
    returnType: int64_t
    signature: int64_t ConvertGrpcTimeoutToUS(const std::string* grpc_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::Span::Span
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Span(Forbidden)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: ~Span()
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Span()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::Span::AsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AsParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cid
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: brpc::Span::set_log_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_log_id(uint64_t cid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: brpc::Span::set_base_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_base_cid(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::Span::set_ending_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ending_cid(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::Span::set_remote_side
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_remote_side(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::Span::set_protocol
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_protocol(ProtocolType p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: brpc::Span::set_error_code
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_error_code(int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: brpc::Span::set_request_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_size(int size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::Span::set_response_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_size(int size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - async
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: brpc::Span::set_async
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_async(bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: brpc::Span::set_base_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_base_real_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 108
    functionName: brpc::Span::set_received_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_received_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 110
    functionName: brpc::Span::set_start_parse_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_start_parse_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 112
    functionName: brpc::Span::set_start_callback_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_start_callback_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 114
    functionName: brpc::Span::set_start_send_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_start_send_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    functionName: brpc::Span::set_sent_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_sent_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 118
    functionName: brpc::Span::local_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: Span * local_parent() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: brpc::Span::tls_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: Span * tls_parent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::Span::trace_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t trace_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: brpc::Span::parent_span_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t parent_span_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: brpc::Span::span_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t span_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: brpc::Span::log_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t log_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: brpc::Span::base_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_id_t
    signature: bthread_id_t base_cid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: brpc::Span::ending_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_id_t
    signature: bthread_id_t ending_cid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: '& remote_side() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint & remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::Span::type
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SpanType
    signature: SpanType type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::Span::protocol
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType protocol() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: brpc::Span::error_code
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int error_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 133
    functionName: brpc::Span::request_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int request_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: brpc::Span::response_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int response_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: brpc::Span::received_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t received_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: brpc::Span::start_parse_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t start_parse_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: brpc::Span::start_callback_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t start_callback_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: brpc::Span::start_send_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t start_send_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: brpc::Span::sent_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t sent_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 140
    functionName: brpc::Span::async
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool async() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: '& full_method_name() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & full_method_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& info() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & info() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: brpc::Span::EndAsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EndAsParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 209
    functionName: ~SpanFilter()
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SpanFilter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/brpc/span.h:240,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - is_upstream_traced
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 237
    functionDepth: 2
    functionLinenumber: 237
    functionLinenumberEnd: 241
    functionName: brpc::IsTraceable
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - bvar::is_collectable
    linkageType: ''
    returnType: bool
    signature: bool IsTraceable(bool is_upstream_traced)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.h:244,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.h:245,1
    - Dst: brpc::Span::CreateBthreadSpan
      Src: /src/brpc/src/brpc/span.h:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 247
    functionName: brpc::CreateBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::Span::CreateBthreadSpan
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void * CreateBthreadSpan()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::Span::Span
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Span(Forbidden)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: ~Span()
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Span()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::Span::AsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AsParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cid
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: brpc::Span::set_log_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_log_id(uint64_t cid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: brpc::Span::set_base_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_base_cid(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::Span::set_ending_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ending_cid(bthread_id_t id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::Span::set_remote_side
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_remote_side(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::Span::set_protocol
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_protocol(ProtocolType p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: brpc::Span::set_error_code
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_error_code(int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: brpc::Span::set_request_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_size(int size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::Span::set_response_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_size(int size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - async
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: brpc::Span::set_async
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_async(bool async)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: brpc::Span::set_base_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_base_real_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 108
    functionName: brpc::Span::set_received_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_received_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 110
    functionName: brpc::Span::set_start_parse_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_start_parse_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 112
    functionName: brpc::Span::set_start_callback_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_start_callback_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 114
    functionName: brpc::Span::set_start_send_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_start_send_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    functionName: brpc::Span::set_sent_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_sent_us(int64_t tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 118
    functionName: brpc::Span::local_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: Span * local_parent() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: brpc::Span::tls_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: Span * tls_parent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::Span::trace_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t trace_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: brpc::Span::parent_span_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t parent_span_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: brpc::Span::span_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t span_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: brpc::Span::log_id
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t log_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: brpc::Span::base_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_id_t
    signature: bthread_id_t base_cid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: brpc::Span::ending_cid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_id_t
    signature: bthread_id_t ending_cid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: '& remote_side() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint & remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::Span::type
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SpanType
    signature: SpanType type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::Span::protocol
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType protocol() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: brpc::Span::error_code
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int error_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 133
    functionName: brpc::Span::request_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int request_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: brpc::Span::response_size
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int response_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: brpc::Span::received_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t received_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: brpc::Span::start_parse_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t start_parse_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: brpc::Span::start_callback_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t start_callback_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: brpc::Span::start_send_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t start_send_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: brpc::Span::sent_real_us
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t sent_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 140
    functionName: brpc::Span::async
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool async() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: '& full_method_name() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & full_method_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: '& info() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & info() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: brpc::Span::EndAsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EndAsParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 209
    functionName: ~SpanFilter()
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SpanFilter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/brpc/span.h:240,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - is_upstream_traced
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 237
    functionDepth: 2
    functionLinenumber: 237
    functionLinenumberEnd: 241
    functionName: brpc::IsTraceable
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - bvar::is_collectable
    linkageType: ''
    returnType: bool
    signature: bool IsTraceable(bool is_upstream_traced)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.h:244,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.h:245,1
    - Dst: brpc::Span::CreateBthreadSpan
      Src: /src/brpc/src/brpc/span.h:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 247
    functionName: brpc::CreateBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::Span::CreateBthreadSpan
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void * CreateBthreadSpan()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Reset
      Src: /src/brpc/src/brpc/socket_map.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::ChannelSignature
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 2
    functionsReached:
    - brpc::Reset
    linkageType: ''
    returnType: void
    signature: void ChannelSignature()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: brpc::Reset
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - ChannelSignature
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: operator==(const ChannelSignature& s1, const ChannelSignature& s2)
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ChannelSignature& s1, const ChannelSignature&
      s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - ChannelSignature
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: operator!=(const ChannelSignature& s1, const ChannelSignature& s2)
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const ChannelSignature& s1, const ChannelSignature&
      s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::SocketMapKey
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapKey(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' pt'
    - ' cs'
    argTypes:
    - butil::EndPoint
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: brpc::SocketMapKey
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapKey(const butil::EndPoint& pt, const ChannelSignature&
      cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' sn'
    - ' cs'
    argTypes:
    - ServerNode
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::SocketMapKey
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapKey(const ServerNode& sn, const ChannelSignature& cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - SocketMapKey
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    functionName: operator==(const SocketMapKey& k1, const SocketMapKey& k2)
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const SocketMapKey& k1, const SocketMapKey& k2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::DefaultHasher<butil::EndPoint>
      Src: /src/brpc/src/brpc/socket_map.h:70,1
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/socket_map.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 74
    functionName: operator()(const SocketMapKey& key) const
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached:
    - butil::DefaultHasher<std::string>
    - butil::DefaultHasher<butil::EndPoint>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const SocketMapKey& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 9
    functionsReached:
    - brpc::SocketMapInsert
    linkageType: ''
    returnType: int
    signature: "int SocketMapInsert(const SocketMapKey& key, SocketId* id,\n                    const
      std::shared_ptr<SocketSSLContext>& ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 97
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 10
    functionsReached:
    - brpc::SocketMapInsert
    linkageType: ''
    returnType: int
    signature: int SocketMapInsert(const SocketMapKey& key, SocketId* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: ~SocketCreator()
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketCreator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 164
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 1
    functionsReached:
    - brpc::SocketMap::Insert
    linkageType: ''
    returnType: int
    signature: "int Insert(const SocketMapKey& key, SocketId* id,\n               const
      std::shared_ptr<SocketSSLContext>& ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 169
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 2
    functionsReached:
    - brpc::SocketMap::Insert
    linkageType: ''
    returnType: int
    signature: int Insert(const SocketMapKey& key, SocketId* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketMapOptions
    signature: SocketMapOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Reset
      Src: /src/brpc/src/brpc/socket_map.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::ChannelSignature
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 2
    functionsReached:
    - brpc::Reset
    linkageType: ''
    returnType: void
    signature: void ChannelSignature()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: brpc::Reset
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - ChannelSignature
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: operator==(const ChannelSignature& s1, const ChannelSignature& s2)
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ChannelSignature& s1, const ChannelSignature&
      s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - ChannelSignature
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: operator!=(const ChannelSignature& s1, const ChannelSignature& s2)
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const ChannelSignature& s1, const ChannelSignature&
      s2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::SocketMapKey
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapKey(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' pt'
    - ' cs'
    argTypes:
    - butil::EndPoint
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: brpc::SocketMapKey
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapKey(const butil::EndPoint& pt, const ChannelSignature&
      cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' sn'
    - ' cs'
    argTypes:
    - ServerNode
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::SocketMapKey
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapKey(const ServerNode& sn, const ChannelSignature& cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - SocketMapKey
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    functionName: operator==(const SocketMapKey& k1, const SocketMapKey& k2)
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const SocketMapKey& k1, const SocketMapKey& k2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::DefaultHasher<butil::EndPoint>
      Src: /src/brpc/src/brpc/socket_map.h:70,1
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/socket_map.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 74
    functionName: operator()(const SocketMapKey& key) const
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached:
    - butil::DefaultHasher<std::string>
    - butil::DefaultHasher<butil::EndPoint>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const SocketMapKey& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 11
    functionsReached:
    - brpc::SocketMapInsert
    linkageType: ''
    returnType: int
    signature: "int SocketMapInsert(const SocketMapKey& key, SocketId* id,\n                    const
      std::shared_ptr<SocketSSLContext>& ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 97
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 12
    functionsReached:
    - brpc::SocketMapInsert
    linkageType: ''
    returnType: int
    signature: int SocketMapInsert(const SocketMapKey& key, SocketId* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: ~SocketCreator()
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketCreator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 164
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 3
    functionsReached:
    - brpc::SocketMap::Insert
    linkageType: ''
    returnType: int
    signature: "int Insert(const SocketMapKey& key, SocketId* id,\n               const
      std::shared_ptr<SocketSSLContext>& ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 169
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 4
    functionsReached:
    - brpc::SocketMap::Insert
    linkageType: ''
    returnType: int
    signature: int Insert(const SocketMapKey& key, SocketId* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketMapOptions
    signature: SocketMapOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency(int max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency(\n    const TimeoutConcurrencyConf&
      value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:53,1
    - Dst: std::strlen
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:54,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:54,1
    - Dst: butil::strncasecmp
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:57,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 2
    functionsReached:
    - butil::strncasecmp
    - std::strlen
    - DCHECK
    - brpc::size
    - data
    linkageType: ''
    returnType: bool
    signature: "bool CompareStringPieceWithoutCase(\n    const butil::StringPiece&
      s1, const char* s2)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringToInt
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:63,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 69
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - CopyToString
    - butil::StringToInt
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency(const butil::StringPiece&
      value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringToInt
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:73,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:76,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:80,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 82
    functionName: AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - CopyToString
    - butil::StringToInt
    - ResetMaxConcurrency
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:89,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 95
    functionName: AdaptiveMaxConcurrency::operator=(int max_concurrency)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ResetMaxConcurrency
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(int max_concurrency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 104
    functionName: AdaptiveMaxConcurrency::operator=(const TimeoutConcurrencyConf&
      value)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - ResetMaxConcurrency
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(const TimeoutConcurrencyConf&
      value)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 114
    functionName: '& AdaptiveMaxConcurrency::type() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & AdaptiveMaxConcurrency::type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:118,1
    - Dst: value
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' adaptive_concurrency'
    - ' concurrency'
    argTypes:
    - AdaptiveMaxConcurrency
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    functionName: "operator==(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \               const butil::StringPiece& concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - value
    - CompareStringPieceWithoutCase
    linkageType: ''
    returnType: bool
    signature: "bool operator==(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \               const butil::StringPiece& concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency(int max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency(\n    const TimeoutConcurrencyConf&
      value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:53,1
    - Dst: std::strlen
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:54,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:54,1
    - Dst: butil::strncasecmp
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:57,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 2
    functionsReached:
    - butil::strncasecmp
    - std::strlen
    - DCHECK
    - brpc::size
    - data
    linkageType: ''
    returnType: bool
    signature: "bool CompareStringPieceWithoutCase(\n    const butil::StringPiece&
      s1, const char* s2)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringToInt
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:63,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 69
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - CopyToString
    - butil::StringToInt
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency(const butil::StringPiece&
      value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringToInt
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:73,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:76,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:80,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 82
    functionName: AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - CopyToString
    - butil::StringToInt
    - ResetMaxConcurrency
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:89,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 95
    functionName: AdaptiveMaxConcurrency::operator=(int max_concurrency)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - ResetMaxConcurrency
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(int max_concurrency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 104
    functionName: AdaptiveMaxConcurrency::operator=(const TimeoutConcurrencyConf&
      value)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - ResetMaxConcurrency
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(const TimeoutConcurrencyConf&
      value)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 114
    functionName: '& AdaptiveMaxConcurrency::type() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & AdaptiveMaxConcurrency::type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:118,1
    - Dst: value
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' adaptive_concurrency'
    - ' concurrency'
    argTypes:
    - AdaptiveMaxConcurrency
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    functionName: "operator==(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \               const butil::StringPiece& concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - value
    - CompareStringPieceWithoutCase
    linkageType: ''
    returnType: bool
    signature: "bool operator==(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \               const butil::StringPiece& concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::Acceptor::listened_fd
    functionSourceFile: /src/brpc/src/brpc/acceptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int listened_fd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: brpc::Acceptor::status
    functionSourceFile: /src/brpc/src/brpc/acceptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Status
    signature: Status status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::Acceptor::listened_fd
    functionSourceFile: /src/brpc/src/brpc/acceptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int listened_fd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: brpc::Acceptor::status
    functionSourceFile: /src/brpc/src/brpc/acceptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Status
    signature: Status status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream_impl.h:55,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/stream_impl.h:66,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/stream_impl.h:68,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/stream_impl.h:70,1
    - Dst: Stream
      Src: /src/brpc/src/brpc/stream_impl.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 138
    functionName: brpc::SocketConnection
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached:
    - __format__
    - Stream
    - MergeFrom
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT SocketConnection
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: brpc::id
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamId
    signature: StreamId id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream_impl.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' remote_settings'
    argTypes:
    - StreamSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: brpc::SetRemoteSettings
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    linkageType: ''
    returnType: void
    signature: void SetRemoteSettings(const StreamSettings& remote_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream_impl.h:55,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/stream_impl.h:66,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/stream_impl.h:68,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/stream_impl.h:70,1
    - Dst: Stream
      Src: /src/brpc/src/brpc/stream_impl.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 138
    functionName: brpc::SocketConnection
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached:
    - __format__
    - Stream
    - MergeFrom
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT SocketConnection
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: brpc::id
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamId
    signature: StreamId id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream_impl.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' remote_settings'
    argTypes:
    - StreamSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: brpc::SetRemoteSettings
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    linkageType: ''
    returnType: void
    signature: void SetRemoteSettings(const StreamSettings& remote_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::ProtocolEntry
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProtocolEntry()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ProtocolMap>
      Src: /src/brpc/src/brpc/protocol.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: brpc::get_protocol_map
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ProtocolMap>
    linkageType: ''
    returnType: ProtocolEntry
    signature: ProtocolEntry * get_protocol_map()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:80,1
    - Dst: brpc::support_client
      Src: /src/brpc/src/brpc/protocol.cpp:83,1
    - Dst: brpc::support_server
      Src: /src/brpc/src/brpc/protocol.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:84,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:88,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/protocol.cpp:89,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:90,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:91,1
    - Dst: valid::store
      Src: /src/brpc/src/brpc/protocol.cpp:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - type
    - ' protocol'
    argTypes:
    - ProtocolType
    - Protocol
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 97
    functionName: brpc::RegisterProtocol
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - valid::load
    - brpc::get_protocol_map
    - BAIDU_SCOPED_LOCK
    - valid::store
    - LOG
    - brpc::support_client
    - brpc::support_server
    linkageType: ''
    returnType: int
    signature: int RegisterProtocol(ProtocolType type, const Protocol& protocol)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:103,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:106,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 111
    functionName: brpc::FindProtocol
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::get_protocol_map
    - LOG
    - valid::load
    linkageType: ''
    returnType: Protocol
    signature: Protocol * FindProtocol(ProtocolType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Protocol>*::clear
      Src: /src/brpc/src/brpc/protocol.cpp:114,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:115,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:117,1
    - Dst: std::vector<Protocol>*::push_back
      Src: /src/brpc/src/brpc/protocol.cpp:118,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<Protocol>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 121
    functionName: brpc::ListProtocols
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - std::vector<Protocol>*::push_back
    - brpc::get_protocol_map
    - valid::load
    - std::vector<Protocol>*::clear
    linkageType: ''
    returnType: void
    signature: void ListProtocols(std::vector<Protocol>* vec)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<std::pair<ProtocolType, Protocol> >*::clear
      Src: /src/brpc/src/brpc/protocol.cpp:124,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:125,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:127,1
    - Dst: std::vector<std::pair<ProtocolType, Protocol> >*::emplace_back
      Src: /src/brpc/src/brpc/protocol.cpp:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<std::pair<ProtocolType, Protocol> >*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 131
    functionName: brpc::ListProtocols
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::get_protocol_map
    - std::vector<std::pair<ProtocolType, Protocol> >*::emplace_back
    - std::vector<std::pair<ProtocolType, Protocol> >*::clear
    - valid::load
    linkageType: ''
    returnType: void
    signature: void ListProtocols(std::vector<std::pair<ProtocolType, Protocol> >*
      vec)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/protocol.cpp:137,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/protocol.cpp:139,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/protocol.cpp:140,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/protocol.cpp:142,1
    - Dst: brpc::SerializeAsCompressedData
      Src: /src/brpc/src/brpc/protocol.cpp:144,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/protocol.cpp:144,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/protocol.cpp:145,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/protocol.cpp:147,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 149
    functionName: brpc::SerializeRequestDefault
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 17
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_compress_type
    - brpc::SerializeAsCompressedData
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    linkageType: ''
    returnType: void
    signature: "void SerializeRequestDefault(butil::IOBuf* buf, Controller* cntl,\n
      \                            const google::protobuf::Message* request)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/protocol.cpp:155,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/protocol.cpp:155,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/protocol.cpp:158,1
    - Dst: data
      Src: /src/brpc/src/brpc/protocol.cpp:158,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/protocol.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 2
    functionsReached:
    - data
    - brpc::size
    - strncasecmp
    - strlen
    linkageType: ''
    returnType: bool
    signature: "bool CompareStringPieceWithoutCase(\n        const butil::StringPiece&
      s1, const char* s2)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/protocol.cpp:164,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:166,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:168,1
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/protocol.cpp:169,1
    - Dst: static_cast<ProtocolType>
      Src: /src/brpc/src/brpc/protocol.cpp:170,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:186,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/protocol.cpp:186,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 2
    argNames:
    - ' name'
    - print_log_on_unknown
    argTypes:
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 189
    functionName: brpc::StringToProtocolType
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - valid::load
    - brpc::GlobalInitializeOrDie
    - static_cast<ProtocolType>
    - brpc::CompareStringPieceWithoutCase
    - brpc::get_protocol_map
    - LOG
    linkageType: ''
    returnType: ProtocolType
    signature: "ProtocolType StringToProtocolType(const butil::StringPiece& name,\n
      \                                 bool print_log_on_unknown)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/protocol.cpp:193,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/protocol.cpp:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::ProtocolTypeToString
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::GlobalInitializeOrDie
    - brpc::FindProtocol
    linkageType: ''
    returnType: char
    signature: char * ProtocolTypeToString(ProtocolType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::io::CodedInputStream::SetTotalBytesLimit
      Src: /src/brpc/src/brpc/protocol.cpp:211,1
    - Dst: google::protobuf::io::CodedInputStream::SetTotalBytesLimit
      Src: /src/brpc/src/brpc/protocol.cpp:213,1
    - Dst: google::protobuf::Message*::ParseFromCodedStream
      Src: /src/brpc/src/brpc/protocol.cpp:216,1
    - Dst: google::protobuf::io::CodedInputStream::ConsumedEntireMessage
      Src: /src/brpc/src/brpc/protocol.cpp:216,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - input
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 217
    functionName: brpc::ParsePbFromZeroCopyStreamInlined
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::io::CodedInputStream::ConsumedEntireMessage
    - google::protobuf::io::CodedInputStream::SetTotalBytesLimit
    - google::protobuf::Message*::ParseFromCodedStream
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE ParsePbFromZeroCopyStreamInlined(\n    google::protobuf::Message*
      msg,\n    google::protobuf::io::ZeroCopyInputStream* input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NonreflectableMessage::_InternalParse
      Src: /src/brpc/src/brpc/protocol.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - input
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 223
    functionName: brpc::ParsePbTextFromZeroCopyStreamInlined
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::NonreflectableMessage::_InternalParse
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE ParsePbTextFromZeroCopyStreamInlined(\n    google::protobuf::Message*
      msg,\n    google::protobuf::io::ZeroCopyInputStream* input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - input
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 229
    functionName: brpc::ParsePbFromZeroCopyStream
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: "bool ParsePbFromZeroCopyStream(\n    google::protobuf::Message* msg,\n
      \   google::protobuf::io::ZeroCopyInputStream* input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbTextFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - google::protobuf::Message*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 234
    functionName: brpc::ParsePbTextFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbTextFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: bool ParsePbTextFromIOBuf(google::protobuf::Message* msg, const butil::IOBuf&
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - google::protobuf::Message*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: brpc::ParsePbFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: bool ParsePbFromIOBuf(google::protobuf::Message* msg, const butil::IOBuf&
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - msg
    - data
    - size
    argTypes:
    - google::protobuf::Message*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 245
    functionName: brpc::ParsePbFromArray
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: "bool ParsePbFromArray(google::protobuf::Message* msg,\n                      const
      void* data, size_t size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/protocol.cpp:248,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/protocol.cpp:248,1
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - ' str'
    argTypes:
    - google::protobuf::Message*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 2
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::ParsePbFromString
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 22
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    - brpc::size
    - data
    linkageType: ''
    returnType: bool
    signature: bool ParsePbFromString(google::protobuf::Message* msg, const std::string&
      str)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/protocol.cpp:256,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/protocol.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:258,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/protocol.cpp:258,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/protocol.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:261,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/protocol.cpp:261,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/protocol.cpp:262,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 268
    functionName: LogErrorTextAndDelete::operator()(Controller* c) const
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - LOG
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: void LogErrorTextAndDelete::operator()(Controller* c) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::ProtocolEntry
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProtocolEntry()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ProtocolMap>
      Src: /src/brpc/src/brpc/protocol.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: brpc::get_protocol_map
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 5
    functionsReached:
    - butil::get_leaky_singleton<ProtocolMap>
    linkageType: ''
    returnType: ProtocolEntry
    signature: ProtocolEntry * get_protocol_map()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:80,1
    - Dst: brpc::support_client
      Src: /src/brpc/src/brpc/protocol.cpp:83,1
    - Dst: brpc::support_server
      Src: /src/brpc/src/brpc/protocol.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:84,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:88,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/protocol.cpp:89,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:90,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:91,1
    - Dst: valid::store
      Src: /src/brpc/src/brpc/protocol.cpp:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - type
    - ' protocol'
    argTypes:
    - ProtocolType
    - Protocol
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 97
    functionName: brpc::RegisterProtocol
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - valid::load
    - brpc::get_protocol_map
    - BAIDU_SCOPED_LOCK
    - valid::store
    - LOG
    - brpc::support_client
    - brpc::support_server
    linkageType: ''
    returnType: int
    signature: int RegisterProtocol(ProtocolType type, const Protocol& protocol)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:103,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:106,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 111
    functionName: brpc::FindProtocol
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::get_protocol_map
    - LOG
    - valid::load
    linkageType: ''
    returnType: Protocol
    signature: Protocol * FindProtocol(ProtocolType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Protocol>*::clear
      Src: /src/brpc/src/brpc/protocol.cpp:114,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:115,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:117,1
    - Dst: std::vector<Protocol>*::push_back
      Src: /src/brpc/src/brpc/protocol.cpp:118,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<Protocol>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 121
    functionName: brpc::ListProtocols
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - std::vector<Protocol>*::push_back
    - brpc::get_protocol_map
    - valid::load
    - std::vector<Protocol>*::clear
    linkageType: ''
    returnType: void
    signature: void ListProtocols(std::vector<Protocol>* vec)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<std::pair<ProtocolType, Protocol> >*::clear
      Src: /src/brpc/src/brpc/protocol.cpp:124,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:125,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:127,1
    - Dst: std::vector<std::pair<ProtocolType, Protocol> >*::emplace_back
      Src: /src/brpc/src/brpc/protocol.cpp:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<std::pair<ProtocolType, Protocol> >*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 131
    functionName: brpc::ListProtocols
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::get_protocol_map
    - std::vector<std::pair<ProtocolType, Protocol> >*::emplace_back
    - std::vector<std::pair<ProtocolType, Protocol> >*::clear
    - valid::load
    linkageType: ''
    returnType: void
    signature: void ListProtocols(std::vector<std::pair<ProtocolType, Protocol> >*
      vec)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/protocol.cpp:137,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/protocol.cpp:139,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/protocol.cpp:140,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/protocol.cpp:142,1
    - Dst: brpc::SerializeAsCompressedData
      Src: /src/brpc/src/brpc/protocol.cpp:144,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/protocol.cpp:144,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/protocol.cpp:145,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/protocol.cpp:147,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 149
    functionName: brpc::SerializeRequestDefault
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 17
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_compress_type
    - brpc::SerializeAsCompressedData
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    linkageType: ''
    returnType: void
    signature: "void SerializeRequestDefault(butil::IOBuf* buf, Controller* cntl,\n
      \                            const google::protobuf::Message* request)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/protocol.cpp:155,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/protocol.cpp:155,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/protocol.cpp:158,1
    - Dst: data
      Src: /src/brpc/src/brpc/protocol.cpp:158,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/protocol.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 3
    functionsReached:
    - data
    - brpc::size
    - strncasecmp
    - strlen
    linkageType: ''
    returnType: bool
    signature: "bool CompareStringPieceWithoutCase(\n        const butil::StringPiece&
      s1, const char* s2)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/protocol.cpp:164,1
    - Dst: brpc::get_protocol_map
      Src: /src/brpc/src/brpc/protocol.cpp:166,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:168,1
    - Dst: brpc::CompareStringPieceWithoutCase
      Src: /src/brpc/src/brpc/protocol.cpp:169,1
    - Dst: static_cast<ProtocolType>
      Src: /src/brpc/src/brpc/protocol.cpp:170,1
    - Dst: valid::load
      Src: /src/brpc/src/brpc/protocol.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:186,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/protocol.cpp:186,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 2
    argNames:
    - ' name'
    - print_log_on_unknown
    argTypes:
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 189
    functionName: brpc::StringToProtocolType
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - valid::load
    - brpc::GlobalInitializeOrDie
    - static_cast<ProtocolType>
    - brpc::CompareStringPieceWithoutCase
    - brpc::get_protocol_map
    - LOG
    linkageType: ''
    returnType: ProtocolType
    signature: "ProtocolType StringToProtocolType(const butil::StringPiece& name,\n
      \                                 bool print_log_on_unknown)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/protocol.cpp:193,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/protocol.cpp:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::ProtocolTypeToString
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::GlobalInitializeOrDie
    - brpc::FindProtocol
    linkageType: ''
    returnType: char
    signature: char * ProtocolTypeToString(ProtocolType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::io::CodedInputStream::SetTotalBytesLimit
      Src: /src/brpc/src/brpc/protocol.cpp:211,1
    - Dst: google::protobuf::io::CodedInputStream::SetTotalBytesLimit
      Src: /src/brpc/src/brpc/protocol.cpp:213,1
    - Dst: google::protobuf::Message*::ParseFromCodedStream
      Src: /src/brpc/src/brpc/protocol.cpp:216,1
    - Dst: google::protobuf::io::CodedInputStream::ConsumedEntireMessage
      Src: /src/brpc/src/brpc/protocol.cpp:216,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - input
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 217
    functionName: brpc::ParsePbFromZeroCopyStreamInlined
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::io::CodedInputStream::ConsumedEntireMessage
    - google::protobuf::io::CodedInputStream::SetTotalBytesLimit
    - google::protobuf::Message*::ParseFromCodedStream
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE ParsePbFromZeroCopyStreamInlined(\n    google::protobuf::Message*
      msg,\n    google::protobuf::io::ZeroCopyInputStream* input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NonreflectableMessage::_InternalParse
      Src: /src/brpc/src/brpc/protocol.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - input
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 223
    functionName: brpc::ParsePbTextFromZeroCopyStreamInlined
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::NonreflectableMessage::_InternalParse
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE ParsePbTextFromZeroCopyStreamInlined(\n    google::protobuf::Message*
      msg,\n    google::protobuf::io::ZeroCopyInputStream* input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - input
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 229
    functionName: brpc::ParsePbFromZeroCopyStream
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: "bool ParsePbFromZeroCopyStream(\n    google::protobuf::Message* msg,\n
      \   google::protobuf::io::ZeroCopyInputStream* input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbTextFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - google::protobuf::Message*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 234
    functionName: brpc::ParsePbTextFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbTextFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: bool ParsePbTextFromIOBuf(google::protobuf::Message* msg, const butil::IOBuf&
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - ' buf'
    argTypes:
    - google::protobuf::Message*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: brpc::ParsePbFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: bool ParsePbFromIOBuf(google::protobuf::Message* msg, const butil::IOBuf&
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - msg
    - data
    - size
    argTypes:
    - google::protobuf::Message*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 245
    functionName: brpc::ParsePbFromArray
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    linkageType: ''
    returnType: bool
    signature: "bool ParsePbFromArray(google::protobuf::Message* msg,\n                      const
      void* data, size_t size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/protocol.cpp:248,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/protocol.cpp:248,1
    - Dst: brpc::ParsePbFromZeroCopyStreamInlined
      Src: /src/brpc/src/brpc/protocol.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - msg
    - ' str'
    argTypes:
    - google::protobuf::Message*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 2
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::ParsePbFromString
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 22
    functionsReached:
    - brpc::ParsePbFromZeroCopyStreamInlined
    - brpc::size
    - data
    linkageType: ''
    returnType: bool
    signature: bool ParsePbFromString(google::protobuf::Message* msg, const std::string&
      str)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/protocol.cpp:256,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/protocol.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:258,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/protocol.cpp:258,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/protocol.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/protocol.cpp:261,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/protocol.cpp:261,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/protocol.cpp:262,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 268
    functionName: LogErrorTextAndDelete::operator()(Controller* c) const
    functionSourceFile: /src/brpc/src/brpc/protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - LOG
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: void LogErrorTextAndDelete::operator()(Controller* c) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: brpc::RedisRequest::RedisRequest
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 22
    functionsReached:
    - brpc::RedisRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void RedisRequest::RedisRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:39,1
    - Dst: brpc::RedisRequest::MergeFrom
      Src: /src/brpc/src/brpc/redis.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: brpc::RedisRequest::RedisRequest
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 22
    functionsReached:
    - brpc::RedisRequest::SharedCtor
    - brpc::RedisRequest::MergeFrom
    linkageType: ''
    returnType: void
    signature: void RedisRequest::RedisRequest(const RedisRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: brpc::RedisRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisRequest::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/redis.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: RedisRequest::~RedisRequest()
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void RedisRequest::~RedisRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: brpc::RedisRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::RedisRequest::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisRequest::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/redis.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: brpc::RedisRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 10
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisRequest::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::RedisRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - size
    - static_cast<int>
    linkageType: ''
    returnType: size_t
    signature: size_t RedisRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/redis.cpp:73,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: brpc::RedisRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 1
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void RedisRequest::MergeFrom(const RedisRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::RedisRequest::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/redis.cpp:85,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:86,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:87,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - other
    argTypes:
    - RedisRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 90
    functionName: brpc::RedisRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void RedisRequest::Swap(RedisRequest* other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RedisCommandNoFormat
      Src: /src/brpc/src/brpc/redis.cpp:96,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:101,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - ' command'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 105
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 20
    functionsReached:
    - CHECK
    - RedisCommandNoFormat
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::AddCommand(const butil::StringPiece& command)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RedisCommandByComponents
      Src: /src/brpc/src/brpc/redis.cpp:112,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:113,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:117,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - components
    - n
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 121
    functionName: brpc::RedisRequest::AddCommandByComponents
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 4
    functionsReached:
    - RedisCommandByComponents
    - CHECK
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: "bool RedisRequest::AddCommandByComponents(const butil::StringPiece*
      components, \n                                         size_t n)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis.cpp:128,1
    - Dst: RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis.cpp:129,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis.cpp:130,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:131,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 139
    functionName: brpc::RedisRequest::AddCommandWithArgs
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - RedisCommandFormatV
    - CHECK
    - va_start
    - va_end
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::AddCommandWithArgs(const char* fmt, ...)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis.cpp:145,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:146,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:150,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:150,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - fmt
    - ap
    argTypes:
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 154
    functionName: brpc::RedisRequest::AddCommandV
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - RedisCommandFormatV
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::AddCommandV(const char* fmt, va_list ap)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 163
    functionName: brpc::RedisRequest::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::SerializeTo(butil::IOBuf* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 170
    functionName: brpc::RedisRequest::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata RedisRequest::GetMetadata() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis.cpp:174,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/redis.cpp:175,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/redis.cpp:182,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/redis.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 190
    functionName: brpc::RedisRequest::Print
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void RedisRequest::Print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/redis.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 195
    functionName: '& operator<<(std::ostream& os, const RedisRequest& r)'
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RedisRequest& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 201
    functionName: brpc::RedisResponse::RedisResponse
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 18
    functionsReached:
    - brpc::RedisResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void RedisResponse::RedisResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:205,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/src/brpc/redis.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 207
    functionName: brpc::RedisResponse::RedisResponse
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 18
    functionsReached:
    - brpc::RedisResponse::SharedCtor
    - brpc::RedisResponse::MergeFrom
    linkageType: ''
    returnType: void
    signature: void RedisResponse::RedisResponse(const RedisResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 213
    functionName: brpc::RedisResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/redis.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: RedisResponse::~RedisResponse()
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void RedisResponse::~RedisResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 220
    functionName: brpc::RedisResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 224
    functionName: brpc::RedisResponse::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisResponse::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/redis.cpp:227,1
    - Dst: clear
      Src: /src/brpc/src/brpc/redis.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 232
    functionName: brpc::RedisResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 6
    functionsReached:
    - Reset
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 236
    functionName: brpc::RedisResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RedisResponse::ByteSizeLong() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/redis.cpp:239,1
    - Dst: CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis.cpp:245,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis.cpp:253,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis.cpp:255,1
    - Dst: CopyFromSameArena
      Src: /src/brpc/src/brpc/redis.cpp:259,1
    - Dst: CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis.cpp:263,1
    - Dst: reply
      Src: /src/brpc/src/brpc/redis.cpp:263,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/brpc/redis.cpp:265,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 268
    functionName: brpc::RedisResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 7
    functionsReached:
    - allocate
    - CHECK_NE
    - RedisReply::RedisReply
    - reply
    - CopyFromSameArena
    - DCHECK_EQ
    - CopyFromDifferentArena
    linkageType: ''
    returnType: void
    signature: void RedisResponse::MergeFrom(const RedisResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 272
    functionName: brpc::RedisResponse::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisResponse::reply_size
    linkageType: ''
    returnType: bool
    signature: bool RedisResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::Swap
      Src: /src/brpc/src/brpc/redis.cpp:276,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:277,1
    - Dst: swap
      Src: /src/brpc/src/brpc/redis.cpp:278,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:279,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:280,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - other
    argTypes:
    - RedisResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 282
    functionName: brpc::RedisResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 1
    functionsReached:
    - swap
    - brpc::RedisResponse::Swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void RedisResponse::Swap(RedisResponse* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis.cpp:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 284
    functionDepth: 2
    functionLinenumber: 284
    functionLinenumberEnd: 289
    functionName: brpc::RedisResponse::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata RedisResponse::GetMetadata() const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:294,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis.cpp:295,1
    - Dst: brpc::RedisResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis.cpp:296,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:300,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:310,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis.cpp:314,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis.cpp:317,1
    - Dst: brpc::RedisResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis.cpp:318,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:322,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 2
    argNames:
    - ' buf'
    - reply_count
    argTypes:
    - butil::IOBuf
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 329
    functionName: brpc::RedisResponse::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 1
    functionsReached:
    - allocate
    - brpc::RedisResponse::reply_size
    - RedisReply::RedisReply
    - brpc::RedisResponse::ConsumePartialIOBuf
    - size
    - LOG
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisResponse::ConsumePartialIOBuf(butil::IOBuf& buf, int
      reply_count)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.cpp:332,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.cpp:334,1
    - Dst: reply
      Src: /src/brpc/src/brpc/redis.cpp:335,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.cpp:338,1
    - Dst: reply
      Src: /src/brpc/src/brpc/redis.cpp:342,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' response'
    argTypes:
    - std::ostream
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 347
    functionName: '& operator<<(std::ostream& os, const RedisResponse& response)'
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - reply_size
    - reply
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RedisResponse& response)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StringToLowerASCII
      Src: /src/brpc/src/brpc/redis.cpp:350,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis.cpp:351,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis.cpp:352,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:353,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - handler
    argTypes:
    - std::string
    - RedisCommandHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 358
    functionName: brpc::RedisService::AddCommandHandler
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - StringToLowerASCII
    - find
    - LOG
    - end
    linkageType: ''
    returnType: bool
    signature: bool RedisService::AddCommandHandler(const std::string& name, RedisCommandHandler*
      handler)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/redis.cpp:361,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/redis.cpp:361,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis.cpp:362,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 366
    functionName: brpc::RedisService::FindCommandHandler
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - as_string
    - find
    - end
    linkageType: ''
    returnType: RedisCommandHandler
    signature: RedisCommandHandler * RedisService::FindCommandHandler(const butil::StringPiece&
      name) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:369,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 371
    functionName: brpc::RedisCommandHandler::NewTransactionHandler
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RedisCommandHandler
    signature: RedisCommandHandler * RedisCommandHandler::NewTransactionHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 374
    functionName: RedisConnContext::~RedisConnContext()
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::~RedisConnContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisConnContext::Destroy
      Src: /src/brpc/src/brpc/redis.cpp:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 381
    functionName: brpc::RedisConnContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisConnContext::Destroy
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisConnContext::Destroy
      Src: /src/brpc/src/brpc/redis.cpp:385,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Destroyable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 388
    functionName: brpc::RedisConnContext::reset_session
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisConnContext::Destroy
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::reset_session(Destroyable* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: brpc::RedisRequest::RedisRequest
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 22
    functionsReached:
    - brpc::RedisRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void RedisRequest::RedisRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:39,1
    - Dst: brpc::RedisRequest::MergeFrom
      Src: /src/brpc/src/brpc/redis.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 2
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: brpc::RedisRequest::RedisRequest
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 22
    functionsReached:
    - brpc::RedisRequest::SharedCtor
    - brpc::RedisRequest::MergeFrom
    linkageType: ''
    returnType: void
    signature: void RedisRequest::RedisRequest(const RedisRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: brpc::RedisRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisRequest::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/redis.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: RedisRequest::~RedisRequest()
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void RedisRequest::~RedisRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: brpc::RedisRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::RedisRequest::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisRequest::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/redis.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: brpc::RedisRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 10
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisRequest::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::RedisRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - size
    - static_cast<int>
    linkageType: ''
    returnType: size_t
    signature: size_t RedisRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/redis.cpp:73,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: brpc::RedisRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 2
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void RedisRequest::MergeFrom(const RedisRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::RedisRequest::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/redis.cpp:85,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:86,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:87,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - other
    argTypes:
    - RedisRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 90
    functionName: brpc::RedisRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void RedisRequest::Swap(RedisRequest* other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RedisCommandNoFormat
      Src: /src/brpc/src/brpc/redis.cpp:96,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:101,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - ' command'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 105
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 20
    functionsReached:
    - CHECK
    - RedisCommandNoFormat
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::AddCommand(const butil::StringPiece& command)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RedisCommandByComponents
      Src: /src/brpc/src/brpc/redis.cpp:112,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:113,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:117,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:117,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - components
    - n
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 121
    functionName: brpc::RedisRequest::AddCommandByComponents
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 4
    functionsReached:
    - RedisCommandByComponents
    - CHECK
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: "bool RedisRequest::AddCommandByComponents(const butil::StringPiece*
      components, \n                                         size_t n)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis.cpp:128,1
    - Dst: RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis.cpp:129,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis.cpp:130,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:131,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 139
    functionName: brpc::RedisRequest::AddCommandWithArgs
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - RedisCommandFormatV
    - CHECK
    - va_start
    - va_end
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::AddCommandWithArgs(const char* fmt, ...)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis.cpp:145,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:146,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis.cpp:150,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/redis.cpp:150,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - fmt
    - ap
    argTypes:
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 154
    functionName: brpc::RedisRequest::AddCommandV
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - RedisCommandFormatV
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::AddCommandV(const char* fmt, va_list ap)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 163
    functionName: brpc::RedisRequest::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RedisRequest::SerializeTo(butil::IOBuf* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 170
    functionName: brpc::RedisRequest::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata RedisRequest::GetMetadata() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis.cpp:174,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/redis.cpp:175,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/redis.cpp:182,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/redis.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 190
    functionName: brpc::RedisRequest::Print
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void RedisRequest::Print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/redis.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 195
    functionName: '& operator<<(std::ostream& os, const RedisRequest& r)'
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RedisRequest& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 201
    functionName: brpc::RedisResponse::RedisResponse
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 18
    functionsReached:
    - brpc::RedisResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void RedisResponse::RedisResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::SharedCtor
      Src: /src/brpc/src/brpc/redis.cpp:205,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/src/brpc/redis.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 202
    functionDepth: 2
    functionLinenumber: 202
    functionLinenumberEnd: 207
    functionName: brpc::RedisResponse::RedisResponse
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 18
    functionsReached:
    - brpc::RedisResponse::SharedCtor
    - brpc::RedisResponse::MergeFrom
    linkageType: ''
    returnType: void
    signature: void RedisResponse::RedisResponse(const RedisResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 213
    functionName: brpc::RedisResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/redis.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: RedisResponse::~RedisResponse()
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void RedisResponse::~RedisResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 220
    functionName: brpc::RedisResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 224
    functionName: brpc::RedisResponse::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisResponse::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/redis.cpp:227,1
    - Dst: clear
      Src: /src/brpc/src/brpc/redis.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 232
    functionName: brpc::RedisResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 6
    functionsReached:
    - Reset
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 236
    functionName: brpc::RedisResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RedisResponse::ByteSizeLong() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/redis.cpp:239,1
    - Dst: CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis.cpp:245,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis.cpp:253,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis.cpp:255,1
    - Dst: CopyFromSameArena
      Src: /src/brpc/src/brpc/redis.cpp:259,1
    - Dst: CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis.cpp:263,1
    - Dst: reply
      Src: /src/brpc/src/brpc/redis.cpp:263,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/brpc/redis.cpp:265,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 268
    functionName: brpc::RedisResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 8
    functionsReached:
    - allocate
    - CHECK_NE
    - RedisReply::RedisReply
    - reply
    - CopyFromSameArena
    - DCHECK_EQ
    - CopyFromDifferentArena
    linkageType: ''
    returnType: void
    signature: void RedisResponse::MergeFrom(const RedisResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 272
    functionName: brpc::RedisResponse::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisResponse::reply_size
    linkageType: ''
    returnType: bool
    signature: bool RedisResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisResponse::Swap
      Src: /src/brpc/src/brpc/redis.cpp:276,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:277,1
    - Dst: swap
      Src: /src/brpc/src/brpc/redis.cpp:278,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:279,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis.cpp:280,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - other
    argTypes:
    - RedisResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 282
    functionName: brpc::RedisResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 2
    functionsReached:
    - swap
    - brpc::RedisResponse::Swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void RedisResponse::Swap(RedisResponse* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis.cpp:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 284
    functionDepth: 2
    functionLinenumber: 284
    functionLinenumberEnd: 289
    functionName: brpc::RedisResponse::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata RedisResponse::GetMetadata() const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:294,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis.cpp:295,1
    - Dst: brpc::RedisResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis.cpp:296,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:300,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:310,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis.cpp:314,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis.cpp:317,1
    - Dst: brpc::RedisResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis.cpp:318,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis.cpp:322,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 2
    argNames:
    - ' buf'
    - reply_count
    argTypes:
    - butil::IOBuf
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 329
    functionName: brpc::RedisResponse::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 2
    functionsReached:
    - allocate
    - brpc::RedisResponse::reply_size
    - RedisReply::RedisReply
    - brpc::RedisResponse::ConsumePartialIOBuf
    - size
    - LOG
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisResponse::ConsumePartialIOBuf(butil::IOBuf& buf, int
      reply_count)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.cpp:332,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.cpp:334,1
    - Dst: reply
      Src: /src/brpc/src/brpc/redis.cpp:335,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.cpp:338,1
    - Dst: reply
      Src: /src/brpc/src/brpc/redis.cpp:342,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' response'
    argTypes:
    - std::ostream
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 347
    functionName: '& operator<<(std::ostream& os, const RedisResponse& response)'
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - reply_size
    - reply
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RedisResponse& response)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StringToLowerASCII
      Src: /src/brpc/src/brpc/redis.cpp:350,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis.cpp:351,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis.cpp:352,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:353,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - handler
    argTypes:
    - std::string
    - RedisCommandHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 358
    functionName: brpc::RedisService::AddCommandHandler
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - StringToLowerASCII
    - find
    - LOG
    - end
    linkageType: ''
    returnType: bool
    signature: bool RedisService::AddCommandHandler(const std::string& name, RedisCommandHandler*
      handler)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/redis.cpp:361,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/redis.cpp:361,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis.cpp:362,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 366
    functionName: brpc::RedisService::FindCommandHandler
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - as_string
    - find
    - end
    linkageType: ''
    returnType: RedisCommandHandler
    signature: RedisCommandHandler * RedisService::FindCommandHandler(const butil::StringPiece&
      name) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis.cpp:369,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 371
    functionName: brpc::RedisCommandHandler::NewTransactionHandler
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RedisCommandHandler
    signature: RedisCommandHandler * RedisCommandHandler::NewTransactionHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 374
    functionName: RedisConnContext::~RedisConnContext()
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::~RedisConnContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisConnContext::Destroy
      Src: /src/brpc/src/brpc/redis.cpp:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 381
    functionName: brpc::RedisConnContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 3
    functionsReached:
    - brpc::RedisConnContext::Destroy
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisConnContext::Destroy
      Src: /src/brpc/src/brpc/redis.cpp:385,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Destroyable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 388
    functionName: brpc::RedisConnContext::reset_session
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisConnContext::Destroy
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::reset_session(Destroyable* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: channel_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::PartitionChannelBase::partition_count
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - channel_count
    linkageType: ''
    returnType: int
    signature: int partition_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::PartitionChannelBase::initialized
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/partition_channel.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: brpc::PartitionChannelBase::lb
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: SharedLoadBalancer
    signature: SharedLoadBalancer * lb()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: brpc::PartitionChannelBase::PartitionChannelBase
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannelBase::PartitionChannelBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 71
    functionName: PartitionChannelBase::~PartitionChannelBase()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannelBase::~PartitionChannelBase()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:82,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:93,1
    - Dst: brpc::PartitionChannelBase::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:98,1
    - Dst: AddChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:103,1
    - Dst: PartitionChannelOptions::call_mapper::get
      Src: /src/brpc/src/brpc/partition_channel.cpp:104,1
    - Dst: PartitionChannelOptions::response_merger::get
      Src: /src/brpc/src/brpc/partition_channel.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:106,1
    - Dst: brpc::ParallelChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:114,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 39
    argCount: 4
    argNames:
    - num_partition_kinds
    - partition_parser
    - load_balancer_name
    - options_in
    argTypes:
    - int
    - PartitionParser*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 120
    functionName: brpc::PartitionChannelBase::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::PartitionChannelBase::Init
    - PartitionChannelOptions::call_mapper::get
    - PartitionChannelOptions::response_merger::get
    - brpc::ParallelChannel::Init
    - AddChannel
    - SubChannel::SubChannel
    - LOG
    linkageType: ''
    returnType: int
    signature: "int PartitionChannelBase::Init(int num_partition_kinds,\n                               PartitionParser*
      partition_parser,\n                               const char* load_balancer_name,\n
      \                              const PartitionChannelOptions* options_in)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:124,1
    - Dst: tmp::clear
      Src: /src/brpc/src/brpc/partition_channel.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/partition_channel.cpp:127,1
    - Dst: ParseFromTag
      Src: /src/brpc/src/brpc/partition_channel.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:130,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:133,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:138,1
    - Dst: tmp::capacity
      Src: /src/brpc/src/brpc/partition_channel.cpp:142,1
    - Dst: tmp::reserve
      Src: /src/brpc/src/brpc/partition_channel.cpp:143,1
    - Dst: tmp::push_back
      Src: /src/brpc/src/brpc/partition_channel.cpp:145,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 21
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 147
    functionName: brpc::PartitionChannelBase::PartitionServersIntoTemps
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - tmp::push_back
    - tmp::clear
    - brpc::PartitionChannelBase::partition_count
    - tmp::capacity
    - tmp::reserve
    - ParseFromTag
    - size
    - LOG
    linkageType: ''
    returnType: void
    signature: "void PartitionChannelBase::PartitionServersIntoTemps(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:151,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:153,1
    - Dst: tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:154,1
    - Dst: brpc::PartitionChannelBase::lb
      Src: /src/brpc/src/brpc/partition_channel.cpp:155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 161
    functionName: brpc::PartitionChannelBase::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::PartitionChannelBase::partition_count
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::PartitionServersIntoTemps
    - tmp::empty
    linkageType: ''
    returnType: size_t
    signature: "size_t PartitionChannelBase::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:165,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:167,1
    - Dst: tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:168,1
    - Dst: brpc::PartitionChannelBase::lb
      Src: /src/brpc/src/brpc/partition_channel.cpp:169,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 163
    functionDepth: 2
    functionLinenumber: 163
    functionLinenumberEnd: 175
    functionName: brpc::PartitionChannelBase::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::PartitionChannelBase::partition_count
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::PartitionServersIntoTemps
    - tmp::empty
    linkageType: ''
    returnType: size_t
    signature: "size_t PartitionChannelBase::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::AddServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 177
    functionDepth: 3
    functionLinenumber: 177
    functionLinenumberEnd: 180
    functionName: brpc::PartitionChannelBase::OnAddedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::PartitionChannelBase::AddServersInBatch
    linkageType: ''
    returnType: void
    signature: "void PartitionChannelBase::OnAddedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::RemoveServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 3
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::PartitionChannelBase::OnRemovedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::PartitionChannelBase::RemoveServersInBatch
    linkageType: ''
    returnType: void
    signature: "void PartitionChannelBase::OnRemovedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::PartitionChannelOptions::PartitionChannelOptions
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannelOptions::PartitionChannelOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 196
    functionName: brpc::PartitionChannel::PartitionChannel
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannel::PartitionChannel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RemoveWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:201,1
    - Dst: reset
      Src: /src/brpc/src/brpc/partition_channel.cpp:203,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 209
    functionName: PartitionChannel::~PartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - RemoveWatcher
    - reset
    linkageType: ''
    returnType: void
    signature: void PartitionChannel::~PartitionChannel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/partition_channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:223,1
    - Dst: GetNamingServiceThread
      Src: /src/brpc/src/brpc/partition_channel.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:231,1
    - Dst: PartitionChannelBase::PartitionChannelBase
      Src: /src/brpc/src/brpc/partition_channel.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:236,1
    - Dst: brpc::PartitionChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:241,1
    - Dst: AddWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:246,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 5
    argNames:
    - num_partition_kinds
    - partition_parser
    - ns_url
    - load_balancer_name
    - options_in
    argTypes:
    - int
    - PartitionParser*
    - char*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 252
    functionName: brpc::PartitionChannel::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - GlobalInitializeOrDie
    - brpc::PartitionChannel::Init
    - AddWatcher
    - PartitionChannelBase::PartitionChannelBase
    - GetNamingServiceThread
    - LOG
    linkageType: ''
    returnType: int
    signature: "int PartitionChannel::Init(int num_partition_kinds,\n                           PartitionParser*
      partition_parser,\n                           const char* ns_url, \n                           const
      char* load_balancer_name,\n                           const PartitionChannelOptions*
      options_in)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannel::CallMethod
      Src: /src/brpc/src/brpc/partition_channel.cpp:261,1
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/partition_channel.cpp:263,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/partition_channel.cpp:264,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/partition_channel.cpp:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 5
    argNames:
    - method
    - controller
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 272
    functionName: brpc::PartitionChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Closure*::Run
    - static_cast<Controller*>
    - Controller*::SetFailed
    - brpc::PartitionChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: "void PartitionChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* controller,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannel::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 276
    functionName: brpc::PartitionChannel::partition_count
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::PartitionChannel::partition_count
    linkageType: ''
    returnType: int
    signature: int PartitionChannel::partition_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBase*>
      Src: /src/brpc/src/brpc/partition_channel.cpp:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 283
    functionName: brpc::PartitionChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ChannelBase*>
    linkageType: ''
    returnType: int
    signature: int PartitionChannel::CheckHealth()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/partition_channel.cpp:290,1
    - Dst: end
      Src: /src/brpc/src/brpc/partition_channel.cpp:291,1
    - Dst: PartChanMap::const_iterator::second::tmp::clear
      Src: /src/brpc/src/brpc/partition_channel.cpp:292,1
    - Dst: size
      Src: /src/brpc/src/brpc/partition_channel.cpp:294,1
    - Dst: ParseFromTag
      Src: /src/brpc/src/brpc/partition_channel.cpp:296,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:297,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:301,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:306,1
    - Dst: seek
      Src: /src/brpc/src/brpc/partition_channel.cpp:310,1
    - Dst: SubPartitionChannel::SubPartitionChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:313,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:315,1
    - Dst: SubPartitionChannel*::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:318,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/partition_channel.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:320,1
    - Dst: AddChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:326,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/partition_channel.cpp:335,1
    - Dst: SubPartitionChannel*::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:335,1
    - Dst: SubPartitionChannel*::tmp::capacity
      Src: /src/brpc/src/brpc/partition_channel.cpp:338,1
    - Dst: SubPartitionChannel*::tmp::reserve
      Src: /src/brpc/src/brpc/partition_channel.cpp:339,1
    - Dst: SubPartitionChannel*::tmp::push_back
      Src: /src/brpc/src/brpc/partition_channel.cpp:341,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 44
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 343
    functionName: brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - SubPartitionChannel::SubPartitionChannel
    - SubPartitionChannel*::tmp::capacity
    - SubPartitionChannel*::tmp::reserve
    - size
    - seek
    - CHECK_EQ
    - c_str
    - SubPartitionChannel*::partition_count
    - ParseFromTag
    - begin
    - AddChannel
    - PartChanMap::const_iterator::second::tmp::clear
    - SubPartitionChannel*::tmp::push_back
    - LOG
    - SubPartitionChannel*::Init
    linkageType: ''
    returnType: void
    signature: void PartitionServersIntoTemps(const std::vector<ServerId>& servers)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:346,1
    - Dst: begin
      Src: /src/brpc/src/brpc/partition_channel.cpp:347,1
    - Dst: end
      Src: /src/brpc/src/brpc/partition_channel.cpp:348,1
    - Dst: PartChanMap::const_iterator::second::tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:349,1
    - Dst: PartChanMap::const_iterator::second::AddServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:350,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 345
    functionDepth: 2
    functionLinenumber: 345
    functionLinenumberEnd: 356
    functionName: brpc::DynamicPartitionChannel::Partitioner::OnAddedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - begin
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    - PartChanMap::const_iterator::second::tmp::empty
    - PartChanMap::const_iterator::second::AddServersInBatch
    linkageType: ''
    returnType: void
    signature: void OnAddedServers(const std::vector<ServerId>& servers)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:359,1
    - Dst: begin
      Src: /src/brpc/src/brpc/partition_channel.cpp:361,1
    - Dst: end
      Src: /src/brpc/src/brpc/partition_channel.cpp:362,1
    - Dst: SubPartitionChannel*::tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:364,1
    - Dst: SubPartitionChannel*::RemoveServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:365,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/partition_channel.cpp:370,1
    - Dst: SubPartitionChannel*::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:371,1
    - Dst: RemoveAndDestroyChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:372,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/partition_channel.cpp:375,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/partition_channel.cpp:379,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/partition_channel.cpp:380,1
    - Dst: erase
      Src: /src/brpc/src/brpc/partition_channel.cpp:380,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 358
    functionDepth: 2
    functionLinenumber: 358
    functionLinenumberEnd: 382
    functionName: brpc::DynamicPartitionChannel::Partitioner::OnRemovedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::vector::push_back
    - SubPartitionChannel*::tmp::empty
    - RemoveAndDestroyChannel
    - CHECK_EQ
    - SubPartitionChannel*::partition_count
    - erase
    - begin
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    - SubPartitionChannel*::RemoveServersInBatch
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void OnRemovedServers(const std::vector<ServerId>& servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 387
    functionName: brpc::DynamicPartitionChannel::Partitioner::Partitioner
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Partitioner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 389
    functionDepth: 0
    functionLinenumber: 389
    functionLinenumberEnd: 391
    functionName: ~Partitioner()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Partitioner()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - schan
    - parser
    - load_balancer_name
    - options
    argTypes:
    - SelectiveChannel*
    - PartitionParser*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 404
    functionName: brpc::DynamicPartitionChannel::Partitioner::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int Init(SelectiveChannel* schan,\n             PartitionParser* parser,\n
      \            const char* load_balancer_name,\n             const PartitionChannelOptions*
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 408
    functionName: brpc::DynamicPartitionChannel::Partitioner::SubPartitionChannel
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubPartitionChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 425
    functionName: brpc::DynamicPartitionChannel::DynamicPartitionChannel
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DynamicPartitionChannel::DynamicPartitionChannel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RemoveWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:430,1
    - Dst: reset
      Src: /src/brpc/src/brpc/partition_channel.cpp:432,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 438
    functionName: DynamicPartitionChannel::~DynamicPartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - RemoveWatcher
    - reset
    linkageType: ''
    returnType: void
    signature: void DynamicPartitionChannel::~DynamicPartitionChannel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/partition_channel.cpp:445,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:447,1
    - Dst: GetNamingServiceThread
      Src: /src/brpc/src/brpc/partition_channel.cpp:454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:455,1
    - Dst: brpc::DynamicPartitionChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:459,1
    - Dst: Partitioner::Partitioner
      Src: /src/brpc/src/brpc/partition_channel.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:464,1
    - Dst: brpc::DynamicPartitionChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:469,1
    - Dst: AddWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:472,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:474,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 4
    argNames:
    - partition_parser
    - ns_url
    - load_balancer_name
    - options_in
    argTypes:
    - PartitionParser*
    - char*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 440
    functionDepth: 1
    functionLinenumber: 440
    functionLinenumberEnd: 480
    functionName: brpc::DynamicPartitionChannel::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - GlobalInitializeOrDie
    - AddWatcher
    - Partitioner::Partitioner
    - GetNamingServiceThread
    - brpc::DynamicPartitionChannel::Init
    - LOG
    linkageType: ''
    returnType: int
    signature: "int DynamicPartitionChannel::Init(\n    PartitionParser* partition_parser,\n
      \   const char* ns_url, \n    const char* load_balancer_name,\n    const PartitionChannelOptions*
      options_in)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DynamicPartitionChannel::CallMethod
      Src: /src/brpc/src/brpc/partition_channel.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - method
    - controller
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 489
    functionName: brpc::DynamicPartitionChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::DynamicPartitionChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: "void DynamicPartitionChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* controller,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: channel_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::PartitionChannelBase::partition_count
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 3
    functionsReached:
    - channel_count
    linkageType: ''
    returnType: int
    signature: int partition_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::PartitionChannelBase::initialized
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/partition_channel.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: brpc::PartitionChannelBase::lb
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - get
    linkageType: ''
    returnType: SharedLoadBalancer
    signature: SharedLoadBalancer * lb()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: brpc::PartitionChannelBase::PartitionChannelBase
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannelBase::PartitionChannelBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 71
    functionName: PartitionChannelBase::~PartitionChannelBase()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannelBase::~PartitionChannelBase()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:82,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:93,1
    - Dst: brpc::PartitionChannelBase::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:98,1
    - Dst: AddChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:103,1
    - Dst: PartitionChannelOptions::call_mapper::get
      Src: /src/brpc/src/brpc/partition_channel.cpp:104,1
    - Dst: PartitionChannelOptions::response_merger::get
      Src: /src/brpc/src/brpc/partition_channel.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:106,1
    - Dst: brpc::ParallelChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:114,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 39
    argCount: 4
    argNames:
    - num_partition_kinds
    - partition_parser
    - load_balancer_name
    - options_in
    argTypes:
    - int
    - PartitionParser*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 120
    functionName: brpc::PartitionChannelBase::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - brpc::PartitionChannelBase::Init
    - PartitionChannelOptions::call_mapper::get
    - PartitionChannelOptions::response_merger::get
    - brpc::ParallelChannel::Init
    - AddChannel
    - SubChannel::SubChannel
    - LOG
    linkageType: ''
    returnType: int
    signature: "int PartitionChannelBase::Init(int num_partition_kinds,\n                               PartitionParser*
      partition_parser,\n                               const char* load_balancer_name,\n
      \                              const PartitionChannelOptions* options_in)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:124,1
    - Dst: tmp::clear
      Src: /src/brpc/src/brpc/partition_channel.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/partition_channel.cpp:127,1
    - Dst: ParseFromTag
      Src: /src/brpc/src/brpc/partition_channel.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:130,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:133,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:138,1
    - Dst: tmp::capacity
      Src: /src/brpc/src/brpc/partition_channel.cpp:142,1
    - Dst: tmp::reserve
      Src: /src/brpc/src/brpc/partition_channel.cpp:143,1
    - Dst: tmp::push_back
      Src: /src/brpc/src/brpc/partition_channel.cpp:145,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 21
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 147
    functionName: brpc::PartitionChannelBase::PartitionServersIntoTemps
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - tmp::push_back
    - tmp::clear
    - brpc::PartitionChannelBase::partition_count
    - tmp::capacity
    - tmp::reserve
    - ParseFromTag
    - size
    - LOG
    linkageType: ''
    returnType: void
    signature: "void PartitionChannelBase::PartitionServersIntoTemps(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:151,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:153,1
    - Dst: tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:154,1
    - Dst: brpc::PartitionChannelBase::lb
      Src: /src/brpc/src/brpc/partition_channel.cpp:155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 161
    functionName: brpc::PartitionChannelBase::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::PartitionChannelBase::partition_count
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::PartitionServersIntoTemps
    - tmp::empty
    linkageType: ''
    returnType: size_t
    signature: "size_t PartitionChannelBase::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:165,1
    - Dst: brpc::PartitionChannelBase::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:167,1
    - Dst: tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:168,1
    - Dst: brpc::PartitionChannelBase::lb
      Src: /src/brpc/src/brpc/partition_channel.cpp:169,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 163
    functionDepth: 2
    functionLinenumber: 163
    functionLinenumberEnd: 175
    functionName: brpc::PartitionChannelBase::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::PartitionChannelBase::partition_count
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::PartitionServersIntoTemps
    - tmp::empty
    linkageType: ''
    returnType: size_t
    signature: "size_t PartitionChannelBase::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::AddServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 177
    functionDepth: 3
    functionLinenumber: 177
    functionLinenumberEnd: 180
    functionName: brpc::PartitionChannelBase::OnAddedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::PartitionChannelBase::AddServersInBatch
    linkageType: ''
    returnType: void
    signature: "void PartitionChannelBase::OnAddedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannelBase::RemoveServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 3
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::PartitionChannelBase::OnRemovedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::PartitionChannelBase::RemoveServersInBatch
    linkageType: ''
    returnType: void
    signature: "void PartitionChannelBase::OnRemovedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::PartitionChannelOptions::PartitionChannelOptions
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannelOptions::PartitionChannelOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 196
    functionName: brpc::PartitionChannel::PartitionChannel
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PartitionChannel::PartitionChannel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RemoveWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:201,1
    - Dst: reset
      Src: /src/brpc/src/brpc/partition_channel.cpp:203,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 209
    functionName: PartitionChannel::~PartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - RemoveWatcher
    - reset
    linkageType: ''
    returnType: void
    signature: void PartitionChannel::~PartitionChannel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/partition_channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:223,1
    - Dst: GetNamingServiceThread
      Src: /src/brpc/src/brpc/partition_channel.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:231,1
    - Dst: PartitionChannelBase::PartitionChannelBase
      Src: /src/brpc/src/brpc/partition_channel.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:236,1
    - Dst: brpc::PartitionChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:241,1
    - Dst: AddWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:246,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 5
    argNames:
    - num_partition_kinds
    - partition_parser
    - ns_url
    - load_balancer_name
    - options_in
    argTypes:
    - int
    - PartitionParser*
    - char*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 252
    functionName: brpc::PartitionChannel::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - GlobalInitializeOrDie
    - brpc::PartitionChannel::Init
    - AddWatcher
    - PartitionChannelBase::PartitionChannelBase
    - GetNamingServiceThread
    - LOG
    linkageType: ''
    returnType: int
    signature: "int PartitionChannel::Init(int num_partition_kinds,\n                           PartitionParser*
      partition_parser,\n                           const char* ns_url, \n                           const
      char* load_balancer_name,\n                           const PartitionChannelOptions*
      options_in)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannel::CallMethod
      Src: /src/brpc/src/brpc/partition_channel.cpp:261,1
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/partition_channel.cpp:263,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/partition_channel.cpp:264,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/partition_channel.cpp:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 5
    argNames:
    - method
    - controller
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 272
    functionName: brpc::PartitionChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::Closure*::Run
    - static_cast<Controller*>
    - Controller*::SetFailed
    - brpc::PartitionChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: "void PartitionChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* controller,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PartitionChannel::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 276
    functionName: brpc::PartitionChannel::partition_count
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - brpc::PartitionChannel::partition_count
    linkageType: ''
    returnType: int
    signature: int PartitionChannel::partition_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBase*>
      Src: /src/brpc/src/brpc/partition_channel.cpp:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 283
    functionName: brpc::PartitionChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ChannelBase*>
    linkageType: ''
    returnType: int
    signature: int PartitionChannel::CheckHealth()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/partition_channel.cpp:290,1
    - Dst: end
      Src: /src/brpc/src/brpc/partition_channel.cpp:291,1
    - Dst: PartChanMap::const_iterator::second::tmp::clear
      Src: /src/brpc/src/brpc/partition_channel.cpp:292,1
    - Dst: size
      Src: /src/brpc/src/brpc/partition_channel.cpp:294,1
    - Dst: ParseFromTag
      Src: /src/brpc/src/brpc/partition_channel.cpp:296,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:297,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:301,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:306,1
    - Dst: seek
      Src: /src/brpc/src/brpc/partition_channel.cpp:310,1
    - Dst: SubPartitionChannel::SubPartitionChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:313,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:315,1
    - Dst: SubPartitionChannel*::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:318,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/partition_channel.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:320,1
    - Dst: AddChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:326,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/partition_channel.cpp:335,1
    - Dst: SubPartitionChannel*::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:335,1
    - Dst: SubPartitionChannel*::tmp::capacity
      Src: /src/brpc/src/brpc/partition_channel.cpp:338,1
    - Dst: SubPartitionChannel*::tmp::reserve
      Src: /src/brpc/src/brpc/partition_channel.cpp:339,1
    - Dst: SubPartitionChannel*::tmp::push_back
      Src: /src/brpc/src/brpc/partition_channel.cpp:341,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 44
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 343
    functionName: brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - end
    - SubPartitionChannel::SubPartitionChannel
    - SubPartitionChannel*::tmp::capacity
    - SubPartitionChannel*::tmp::reserve
    - size
    - seek
    - CHECK_EQ
    - c_str
    - SubPartitionChannel*::partition_count
    - ParseFromTag
    - begin
    - AddChannel
    - PartChanMap::const_iterator::second::tmp::clear
    - SubPartitionChannel*::tmp::push_back
    - LOG
    - SubPartitionChannel*::Init
    linkageType: ''
    returnType: void
    signature: void PartitionServersIntoTemps(const std::vector<ServerId>& servers)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:346,1
    - Dst: begin
      Src: /src/brpc/src/brpc/partition_channel.cpp:347,1
    - Dst: end
      Src: /src/brpc/src/brpc/partition_channel.cpp:348,1
    - Dst: PartChanMap::const_iterator::second::tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:349,1
    - Dst: PartChanMap::const_iterator::second::AddServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:350,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 345
    functionDepth: 2
    functionLinenumber: 345
    functionLinenumberEnd: 356
    functionName: brpc::DynamicPartitionChannel::Partitioner::OnAddedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - begin
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    - PartChanMap::const_iterator::second::tmp::empty
    - PartChanMap::const_iterator::second::AddServersInBatch
    linkageType: ''
    returnType: void
    signature: void OnAddedServers(const std::vector<ServerId>& servers)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
      Src: /src/brpc/src/brpc/partition_channel.cpp:359,1
    - Dst: begin
      Src: /src/brpc/src/brpc/partition_channel.cpp:361,1
    - Dst: end
      Src: /src/brpc/src/brpc/partition_channel.cpp:362,1
    - Dst: SubPartitionChannel*::tmp::empty
      Src: /src/brpc/src/brpc/partition_channel.cpp:364,1
    - Dst: SubPartitionChannel*::RemoveServersInBatch
      Src: /src/brpc/src/brpc/partition_channel.cpp:365,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/partition_channel.cpp:370,1
    - Dst: SubPartitionChannel*::partition_count
      Src: /src/brpc/src/brpc/partition_channel.cpp:371,1
    - Dst: RemoveAndDestroyChannel
      Src: /src/brpc/src/brpc/partition_channel.cpp:372,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/partition_channel.cpp:375,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/partition_channel.cpp:379,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/partition_channel.cpp:380,1
    - Dst: erase
      Src: /src/brpc/src/brpc/partition_channel.cpp:380,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 358
    functionDepth: 2
    functionLinenumber: 358
    functionLinenumberEnd: 382
    functionName: brpc::DynamicPartitionChannel::Partitioner::OnRemovedServers
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::vector::push_back
    - SubPartitionChannel*::tmp::empty
    - RemoveAndDestroyChannel
    - CHECK_EQ
    - SubPartitionChannel*::partition_count
    - erase
    - begin
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    - SubPartitionChannel*::RemoveServersInBatch
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void OnRemovedServers(const std::vector<ServerId>& servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 387
    functionName: brpc::DynamicPartitionChannel::Partitioner::Partitioner
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Partitioner()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 389
    functionDepth: 0
    functionLinenumber: 389
    functionLinenumberEnd: 391
    functionName: ~Partitioner()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Partitioner()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - schan
    - parser
    - load_balancer_name
    - options
    argTypes:
    - SelectiveChannel*
    - PartitionParser*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 404
    functionName: brpc::DynamicPartitionChannel::Partitioner::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int Init(SelectiveChannel* schan,\n             PartitionParser* parser,\n
      \            const char* load_balancer_name,\n             const PartitionChannelOptions*
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 408
    functionName: brpc::DynamicPartitionChannel::Partitioner::SubPartitionChannel
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubPartitionChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 425
    functionName: brpc::DynamicPartitionChannel::DynamicPartitionChannel
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DynamicPartitionChannel::DynamicPartitionChannel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RemoveWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:430,1
    - Dst: reset
      Src: /src/brpc/src/brpc/partition_channel.cpp:432,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 438
    functionName: DynamicPartitionChannel::~DynamicPartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - RemoveWatcher
    - reset
    linkageType: ''
    returnType: void
    signature: void DynamicPartitionChannel::~DynamicPartitionChannel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/partition_channel.cpp:445,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:447,1
    - Dst: GetNamingServiceThread
      Src: /src/brpc/src/brpc/partition_channel.cpp:454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:455,1
    - Dst: brpc::DynamicPartitionChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:459,1
    - Dst: Partitioner::Partitioner
      Src: /src/brpc/src/brpc/partition_channel.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:464,1
    - Dst: brpc::DynamicPartitionChannel::Init
      Src: /src/brpc/src/brpc/partition_channel.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:469,1
    - Dst: AddWatcher
      Src: /src/brpc/src/brpc/partition_channel.cpp:472,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/partition_channel.cpp:474,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 4
    argNames:
    - partition_parser
    - ns_url
    - load_balancer_name
    - options_in
    argTypes:
    - PartitionParser*
    - char*
    - char*
    - PartitionChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 440
    functionDepth: 1
    functionLinenumber: 440
    functionLinenumberEnd: 480
    functionName: brpc::DynamicPartitionChannel::Init
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - GlobalInitializeOrDie
    - AddWatcher
    - Partitioner::Partitioner
    - GetNamingServiceThread
    - brpc::DynamicPartitionChannel::Init
    - LOG
    linkageType: ''
    returnType: int
    signature: "int DynamicPartitionChannel::Init(\n    PartitionParser* partition_parser,\n
      \   const char* ns_url, \n    const char* load_balancer_name,\n    const PartitionChannelOptions*
      options_in)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DynamicPartitionChannel::CallMethod
      Src: /src/brpc/src/brpc/partition_channel.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - method
    - controller
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 489
    functionName: brpc::DynamicPartitionChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 2
    functionsReached:
    - brpc::DynamicPartitionChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: "void DynamicPartitionChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* controller,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::schan::SubChannel::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::health_check_count
      Src: /src/brpc/src/brpc/selective_channel.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:53,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - Socket*::health_check_count
    - brpc::schan::SubChannel::CheckHealth
    - LOG
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: brpc::schan::SubChannel::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void AfterRevived(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::schan::GetSubChannelWeight
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - Weight
    linkageType: ''
    returnType: int
    signature: int GetSubChannelWeight(SocketUser* u)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::schan::ChannelBalancer::SelectOut
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectOut()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - user
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: ChannelBase
    signature: ChannelBase * channel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: brpc::schan::ChannelBalancer::ChannelBalancer
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::schan::Resource
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Resource()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - Sender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 116
    functionName: brpc::schan::SubDone::SubDone
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubDone(Sender* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: ~SubDone()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: ~Sender()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~Sender()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:161,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 165
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    - clear
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - begin
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::schan::ChannelBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::SharedLoadBalancer::Init
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::Init(const char* lb_name)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:177,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:179,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:195,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:205,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:210,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:214,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 41
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 223
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - Socket::Create
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - SocketUniquePtr::get
    - find
    - BAIDU_SCOPED_LOCK
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    - LOG
    - SocketUniquePtr::HCEnabled
    - AddServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:230,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:234,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:238,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - handle
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 243
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ReleaseAdditionalReference
    - ServerId
    - SocketUniquePtr::ReleaseHCRelatedReference
    - RemoveServer
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK_EQ
    - erase
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(SelectiveChannel::ChannelHandle
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 254
    functionName: brpc::schan::ChannelBalancer::SelectChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SelectServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::SelectChannel(const LoadBalancer::SelectIn& in,\n
      \                                         SelectOut* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:258,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:259,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:260,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 266
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::second::Failed
    - ChannelToIdMap::const_iterator::first::CheckHealth
    - BAIDU_SCOPED_LOCK
    - begin
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:272,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:275,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:276,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:277,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 282
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - BAIDU_SCOPED_LOCK
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: "void ChannelBalancer::Describe(std::ostream& os,\n                               const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 298
    functionName: brpc::schan::Sender::Sender
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Sender::Sender(Controller* cntl,\n               const google::protobuf::Message*
      request,\n               google::protobuf::Message* response,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:304,1
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: DLOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: _accessed::size
      Src: /src/brpc/src/brpc/selective_channel.cpp:315,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:317,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:319,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:321,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:325,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:331,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:344,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 27
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 300
    functionDepth: 1
    functionLinenumber: 300
    functionLinenumberEnd: 350
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - request_code
    - http_request
    - _accessed::size
    - connection_type
    - current_id
    - _lb::get
    - ChannelBalancer::SelectOut::fake_sock::id
    - timeout_ms
    - log_id
    - brpc::schan::Sender::PopFree
    - Controller*::set_request_code
    - ChannelBalancer::SelectOut::channel
    - Controller*::request_attachment
    - Controller*::set_request_compress_type
    - request_attachment
    - Controller*::http_request
    - CHECK
    - request_compress_type
    - berror
    - Controller*::set_connection_type
    - Controller*::set_type_of_service
    - Controller*::set_log_id
    - DLOG
    - static_cast<ChannelBalancer*>
    - SetFailed
    - has_request_code
    linkageType: ''
    returnType: int
    signature: int Sender::IssueRPC(int64_t start_realtime_us)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:358,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:371,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:376,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:379,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:381,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:385,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 391
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - response_attachment
    - connection_type
    - Controller*::OnVersionedRPCReturned
    - Controller*::ErrorCode
    - ErrorCode
    - bthread_id_lock
    - PushFree
    - Controller*::_response::GetReflection
    - Controller*::response_attachment
    - Socket::SetFailed
    - berror
    - Controller*::SetFailed
    - Controller*::set_connection_type
    - LOG
    - Failed
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:400,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:402,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:405,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 393
    functionDepth: 4
    functionLinenumber: 393
    functionLinenumberEnd: 410
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::schan::Sender::Clear
    - ErrorCode
    - sub_done::_cntl::call_id
    - CHECK_EQ
    - bthread_id_unlock
    - call_id
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:422,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 412
    functionDepth: 5
    functionLinenumber: 412
    functionLinenumberEnd: 425
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - Resource
    - bthread_id_unlock_and_destroy
    - brpc::schan::Sender::Run
    - call_id
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:438,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:442,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:447,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:451,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 455
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - Resource::response::Clear
    - Reset
    - Resource
    - SubDone::SubDone
    - New
    - CHECK
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:461,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:466,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 469
    functionName: brpc::schan::Sender::PushFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - brpc::schan::Sender::Clear
    linkageType: ''
    returnType: bool
    signature: bool Sender::PushFree(const Resource& r)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: sub_done::_cntl::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:476,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 484
    functionName: brpc::schan::Sender::SubController
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - sub_done::_cntl::Failed
    linkageType: ''
    returnType: Controller
    signature: Controller * Sender::SubController(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::schan::SubChannel::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::health_check_count
      Src: /src/brpc/src/brpc/selective_channel.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:53,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - Socket*::health_check_count
    - brpc::schan::SubChannel::CheckHealth
    - LOG
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: brpc::schan::SubChannel::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void AfterRevived(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::schan::GetSubChannelWeight
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - Weight
    linkageType: ''
    returnType: int
    signature: int GetSubChannelWeight(SocketUser* u)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::schan::ChannelBalancer::SelectOut
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectOut()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - user
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: ChannelBase
    signature: ChannelBase * channel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: brpc::schan::ChannelBalancer::ChannelBalancer
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::schan::Resource
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Resource()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - Sender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 116
    functionName: brpc::schan::SubDone::SubDone
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubDone(Sender* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: ~SubDone()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: ~Sender()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~Sender()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:161,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 165
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    - clear
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - begin
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::schan::ChannelBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::SharedLoadBalancer::Init
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::Init(const char* lb_name)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:177,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:179,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:195,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:205,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:210,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:214,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 41
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 223
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - Socket::Create
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - SocketUniquePtr::get
    - find
    - BAIDU_SCOPED_LOCK
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    - LOG
    - SocketUniquePtr::HCEnabled
    - AddServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:230,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:234,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:238,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - handle
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 243
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ReleaseAdditionalReference
    - ServerId
    - SocketUniquePtr::ReleaseHCRelatedReference
    - RemoveServer
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK_EQ
    - erase
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(SelectiveChannel::ChannelHandle
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 254
    functionName: brpc::schan::ChannelBalancer::SelectChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SelectServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::SelectChannel(const LoadBalancer::SelectIn& in,\n
      \                                         SelectOut* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:258,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:259,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:260,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 266
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::second::Failed
    - ChannelToIdMap::const_iterator::first::CheckHealth
    - BAIDU_SCOPED_LOCK
    - begin
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:272,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:275,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:276,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:277,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 282
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - BAIDU_SCOPED_LOCK
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: "void ChannelBalancer::Describe(std::ostream& os,\n                               const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 298
    functionName: brpc::schan::Sender::Sender
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Sender::Sender(Controller* cntl,\n               const google::protobuf::Message*
      request,\n               google::protobuf::Message* response,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:304,1
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: DLOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: _accessed::size
      Src: /src/brpc/src/brpc/selective_channel.cpp:315,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:317,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:319,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:321,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:325,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:331,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:344,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 27
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 300
    functionDepth: 2
    functionLinenumber: 300
    functionLinenumberEnd: 350
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - request_code
    - http_request
    - _accessed::size
    - connection_type
    - current_id
    - _lb::get
    - ChannelBalancer::SelectOut::fake_sock::id
    - timeout_ms
    - log_id
    - brpc::schan::Sender::PopFree
    - Controller*::set_request_code
    - ChannelBalancer::SelectOut::channel
    - Controller*::request_attachment
    - Controller*::set_request_compress_type
    - request_attachment
    - Controller*::http_request
    - CHECK
    - request_compress_type
    - berror
    - Controller*::set_connection_type
    - Controller*::set_type_of_service
    - Controller*::set_log_id
    - DLOG
    - static_cast<ChannelBalancer*>
    - SetFailed
    - has_request_code
    linkageType: ''
    returnType: int
    signature: int Sender::IssueRPC(int64_t start_realtime_us)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:358,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:371,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:376,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:379,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:381,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:385,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 391
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - response_attachment
    - connection_type
    - Controller*::OnVersionedRPCReturned
    - Controller*::ErrorCode
    - ErrorCode
    - bthread_id_lock
    - PushFree
    - Controller*::_response::GetReflection
    - Controller*::response_attachment
    - Socket::SetFailed
    - berror
    - Controller*::SetFailed
    - Controller*::set_connection_type
    - LOG
    - Failed
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:400,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:402,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:405,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 393
    functionDepth: 4
    functionLinenumber: 393
    functionLinenumberEnd: 410
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - brpc::schan::Sender::Clear
    - ErrorCode
    - sub_done::_cntl::call_id
    - CHECK_EQ
    - bthread_id_unlock
    - call_id
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:422,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 412
    functionDepth: 5
    functionLinenumber: 412
    functionLinenumberEnd: 425
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - Resource
    - bthread_id_unlock_and_destroy
    - brpc::schan::Sender::Run
    - call_id
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:438,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:442,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:447,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:451,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 455
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - Resource::response::Clear
    - Reset
    - Resource
    - SubDone::SubDone
    - New
    - CHECK
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:461,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:466,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 469
    functionName: brpc::schan::Sender::PushFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - brpc::schan::Sender::Clear
    linkageType: ''
    returnType: bool
    signature: bool Sender::PushFree(const Resource& r)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: sub_done::_cntl::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:476,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 484
    functionName: brpc::schan::Sender::SubController
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - sub_done::_cntl::Failed
    linkageType: ''
    returnType: Controller
    signature: Controller * Sender::SubController(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const schan::Sender*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sender
    - index
    argTypes:
    - RPCSender*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 491
    functionName: brpc::GetSubControllerOfSelectiveChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const schan::Sender*>
    linkageType: ''
    returnType: Controller
    signature: "Controller * GetSubControllerOfSelectiveChannel(\n    const RPCSender*
      sender, int index)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 495
    functionName: brpc::PassSerializeRequest
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PassSerializeRequest(butil::IOBuf*, Controller*,\n                                 const
      google::protobuf::Message*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 497
    functionName: brpc::SelectiveChannel::SelectiveChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::SelectiveChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 499
    functionName: SelectiveChannel::~SelectiveChannel()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::~SelectiveChannel()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/selective_channel.cpp:503,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:504,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:505,1
    - Dst: schan::ChannelBalancer::ChannelBalancer
      Src: /src/brpc/src/brpc/selective_channel.cpp:508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:510,1
    - Dst: schan::ChannelBalancer*::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:514,1
    - Dst: _lb::reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:518,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - lb_name
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 529
    functionName: brpc::SelectiveChannel::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 20
    functionsReached:
    - schan::ChannelBalancer*::Init
    - GlobalInitializeOrDie
    - schan::ChannelBalancer::ChannelBalancer
    - brpc::SelectiveChannel::initialized
    - LOG
    - _lb::reset
    linkageType: ''
    returnType: int
    signature: int SelectiveChannel::Init(const char* lb_name, const ChannelOptions*
      options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 533
    functionName: brpc::SelectiveChannel::initialized
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SelectiveChannel::initialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:538,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:540,1
    - Dst: schan::ChannelBalancer*::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:543,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 535
    functionDepth: 1
    functionLinenumber: 535
    functionLinenumberEnd: 544
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 18
    functionsReached:
    - static_cast<schan::ChannelBalancer*>
    - _lb::get
    - LOG
    - schan::ChannelBalancer*::AddChannel
    linkageType: ''
    returnType: int
    signature: "int SelectiveChannel::AddChannel(ChannelBase* sub_channel,\n                                 ChannelHandle*
      handle)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:548,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:548,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:550,1
    - Dst: schan::ChannelBalancer*::RemoveAndDestroyChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - handle
    argTypes:
    - ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 554
    functionName: brpc::SelectiveChannel::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - schan::ChannelBalancer*::RemoveAndDestroyChannel
    - static_cast<schan::ChannelBalancer*>
    - _lb::get
    - LOG
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::RemoveAndDestroyChannel(ChannelHandle handle)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:562,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:563,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:564,1
    - Dst: schan::Sender::Sender
      Src: /src/brpc/src/brpc/selective_channel.cpp:567,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/selective_channel.cpp:569,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:570,1
    - Dst: brpc::SelectiveChannel::CallMethod
      Src: /src/brpc/src/brpc/selective_channel.cpp:571,1
    - Dst: Join
      Src: /src/brpc/src/brpc/selective_channel.cpp:573,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/selective_channel.cpp:574,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/selective_channel.cpp:574,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 5
    argNames:
    - method
    - controller_base
    - request
    - response
    - user_done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 576
    functionName: brpc::SelectiveChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - Join
    - Controller*::OnRPCEnd
    - schan::Sender::Sender
    - brpc::SelectiveChannel::initialized
    - static_cast<Controller*>
    - Controller*::add_flag
    - Controller*::call_id
    - Controller*::SetFailed
    - brpc::SelectiveChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: "void SelectiveChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* controller_base,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      user_done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:580,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:580,1
    - Dst: schan::ChannelBalancer*::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:582,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 585
    functionName: brpc::SelectiveChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - schan::ChannelBalancer*::CheckHealth
    - static_cast<schan::ChannelBalancer*>
    - _lb::get
    linkageType: ''
    returnType: int
    signature: int SelectiveChannel::CheckHealth()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _lb::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:591,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 596
    functionName: brpc::SelectiveChannel::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - _lb::Describe
    linkageType: ''
    returnType: void
    signature: "void SelectiveChannel::Describe(\n    std::ostream& os, const DescribeOptions&
      options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::schan::SubChannel::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::health_check_count
      Src: /src/brpc/src/brpc/selective_channel.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:53,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - Socket*::health_check_count
    - brpc::schan::SubChannel::CheckHealth
    - LOG
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: brpc::schan::SubChannel::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void AfterRevived(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::schan::GetSubChannelWeight
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - Weight
    linkageType: ''
    returnType: int
    signature: int GetSubChannelWeight(SocketUser* u)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::schan::ChannelBalancer::SelectOut
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectOut()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - user
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: ChannelBase
    signature: ChannelBase * channel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: brpc::schan::ChannelBalancer::ChannelBalancer
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::schan::Resource
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Resource()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - Sender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 116
    functionName: brpc::schan::SubDone::SubDone
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubDone(Sender* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: ~SubDone()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: ~Sender()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~Sender()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:161,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 165
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    - clear
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - begin
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::schan::ChannelBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::SharedLoadBalancer::Init
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::Init(const char* lb_name)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:177,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:179,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:195,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:205,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:210,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:214,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 41
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 223
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - Socket::Create
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - SocketUniquePtr::get
    - find
    - BAIDU_SCOPED_LOCK
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    - LOG
    - SocketUniquePtr::HCEnabled
    - AddServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:230,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:234,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:238,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - handle
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 243
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ReleaseAdditionalReference
    - ServerId
    - SocketUniquePtr::ReleaseHCRelatedReference
    - RemoveServer
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK_EQ
    - erase
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(SelectiveChannel::ChannelHandle
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 254
    functionName: brpc::schan::ChannelBalancer::SelectChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SelectServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::SelectChannel(const LoadBalancer::SelectIn& in,\n
      \                                         SelectOut* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:258,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:259,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:260,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 266
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::second::Failed
    - ChannelToIdMap::const_iterator::first::CheckHealth
    - BAIDU_SCOPED_LOCK
    - begin
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:272,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:275,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:276,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:277,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 282
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - BAIDU_SCOPED_LOCK
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: "void ChannelBalancer::Describe(std::ostream& os,\n                               const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 298
    functionName: brpc::schan::Sender::Sender
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Sender::Sender(Controller* cntl,\n               const google::protobuf::Message*
      request,\n               google::protobuf::Message* response,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:304,1
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: DLOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: _accessed::size
      Src: /src/brpc/src/brpc/selective_channel.cpp:315,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:317,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:319,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:321,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:325,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:331,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:344,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 27
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 300
    functionDepth: 2
    functionLinenumber: 300
    functionLinenumberEnd: 350
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - request_code
    - http_request
    - _accessed::size
    - connection_type
    - current_id
    - _lb::get
    - ChannelBalancer::SelectOut::fake_sock::id
    - timeout_ms
    - log_id
    - brpc::schan::Sender::PopFree
    - Controller*::set_request_code
    - ChannelBalancer::SelectOut::channel
    - Controller*::request_attachment
    - Controller*::set_request_compress_type
    - request_attachment
    - Controller*::http_request
    - CHECK
    - request_compress_type
    - berror
    - Controller*::set_connection_type
    - Controller*::set_type_of_service
    - Controller*::set_log_id
    - DLOG
    - static_cast<ChannelBalancer*>
    - SetFailed
    - has_request_code
    linkageType: ''
    returnType: int
    signature: int Sender::IssueRPC(int64_t start_realtime_us)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:358,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:371,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:376,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:379,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:381,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:385,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 391
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - response_attachment
    - connection_type
    - Controller*::OnVersionedRPCReturned
    - Controller*::ErrorCode
    - ErrorCode
    - bthread_id_lock
    - PushFree
    - Controller*::_response::GetReflection
    - Controller*::response_attachment
    - Socket::SetFailed
    - berror
    - Controller*::SetFailed
    - Controller*::set_connection_type
    - LOG
    - Failed
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:400,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:402,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:405,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 393
    functionDepth: 4
    functionLinenumber: 393
    functionLinenumberEnd: 410
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - brpc::schan::Sender::Clear
    - ErrorCode
    - sub_done::_cntl::call_id
    - CHECK_EQ
    - bthread_id_unlock
    - call_id
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:422,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 412
    functionDepth: 5
    functionLinenumber: 412
    functionLinenumberEnd: 425
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 5
    functionsReached:
    - Resource
    - bthread_id_unlock_and_destroy
    - brpc::schan::Sender::Run
    - call_id
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:438,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:442,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:447,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:451,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 455
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - Resource::response::Clear
    - Reset
    - Resource
    - SubDone::SubDone
    - New
    - CHECK
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:461,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:466,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 469
    functionName: brpc::schan::Sender::PushFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - brpc::schan::Sender::Clear
    linkageType: ''
    returnType: bool
    signature: bool Sender::PushFree(const Resource& r)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: sub_done::_cntl::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:476,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 484
    functionName: brpc::schan::Sender::SubController
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - sub_done::_cntl::Failed
    linkageType: ''
    returnType: Controller
    signature: Controller * Sender::SubController(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::schan::SubChannel::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::health_check_count
      Src: /src/brpc/src/brpc/selective_channel.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:53,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 4
    functionsReached:
    - Socket*::health_check_count
    - brpc::schan::SubChannel::CheckHealth
    - LOG
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: brpc::schan::SubChannel::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void AfterRevived(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::schan::GetSubChannelWeight
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - Weight
    linkageType: ''
    returnType: int
    signature: int GetSubChannelWeight(SocketUser* u)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::schan::ChannelBalancer::SelectOut
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectOut()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - user
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: ChannelBase
    signature: ChannelBase * channel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: brpc::schan::ChannelBalancer::ChannelBalancer
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::schan::Resource
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Resource()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - owner
    argTypes:
    - Sender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 116
    functionName: brpc::schan::SubDone::SubDone
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubDone(Sender* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: ~SubDone()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: ~Sender()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~Sender()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:160,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:161,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 165
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    - clear
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - begin
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::schan::ChannelBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::SharedLoadBalancer::Init
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::Init(const char* lb_name)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:177,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:179,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:195,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:205,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:210,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:214,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 41
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 223
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - Socket::Create
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - SocketUniquePtr::get
    - find
    - BAIDU_SCOPED_LOCK
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    - LOG
    - SocketUniquePtr::HCEnabled
    - AddServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:230,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:232,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:234,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:238,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - handle
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 243
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ReleaseAdditionalReference
    - ServerId
    - SocketUniquePtr::ReleaseHCRelatedReference
    - RemoveServer
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK_EQ
    - erase
    - static_cast<SubChannel*>
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(SelectiveChannel::ChannelHandle
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 254
    functionName: brpc::schan::ChannelBalancer::SelectChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SelectServer
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::SelectChannel(const LoadBalancer::SelectIn& in,\n
      \                                         SelectOut* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:258,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:259,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:260,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 256
    functionDepth: 1
    functionLinenumber: 256
    functionLinenumberEnd: 266
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::second::Failed
    - ChannelToIdMap::const_iterator::first::CheckHealth
    - BAIDU_SCOPED_LOCK
    - begin
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:272,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:275,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:276,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:277,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 282
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - BAIDU_SCOPED_LOCK
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: "void ChannelBalancer::Describe(std::ostream& os,\n                               const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - cntl
    - request
    - response
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 298
    functionName: brpc::schan::Sender::Sender
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Sender::Sender(Controller* cntl,\n               const google::protobuf::Message*
      request,\n               google::protobuf::Message* response,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:304,1
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:308,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:311,1
    - Dst: DLOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: _accessed::size
      Src: /src/brpc/src/brpc/selective_channel.cpp:315,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:317,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:319,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:321,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:325,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:331,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:335,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:338,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:339,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:342,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:344,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 27
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 300
    functionDepth: 2
    functionLinenumber: 300
    functionLinenumberEnd: 350
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - request_code
    - http_request
    - _accessed::size
    - connection_type
    - current_id
    - _lb::get
    - ChannelBalancer::SelectOut::fake_sock::id
    - timeout_ms
    - log_id
    - brpc::schan::Sender::PopFree
    - Controller*::set_request_code
    - ChannelBalancer::SelectOut::channel
    - Controller*::request_attachment
    - Controller*::set_request_compress_type
    - request_attachment
    - Controller*::http_request
    - CHECK
    - request_compress_type
    - berror
    - Controller*::set_connection_type
    - Controller*::set_type_of_service
    - Controller*::set_log_id
    - DLOG
    - static_cast<ChannelBalancer*>
    - SetFailed
    - has_request_code
    linkageType: ''
    returnType: int
    signature: int Sender::IssueRPC(int64_t start_realtime_us)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:358,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:366,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:367,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:371,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:376,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:377,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:379,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:381,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:385,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 391
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - response_attachment
    - connection_type
    - Controller*::OnVersionedRPCReturned
    - Controller*::ErrorCode
    - ErrorCode
    - bthread_id_lock
    - PushFree
    - Controller*::_response::GetReflection
    - Controller*::response_attachment
    - Socket::SetFailed
    - berror
    - Controller*::SetFailed
    - Controller*::set_connection_type
    - LOG
    - Failed
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:400,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:402,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:403,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:405,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 393
    functionDepth: 4
    functionLinenumber: 393
    functionLinenumberEnd: 410
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - brpc::schan::Sender::Clear
    - ErrorCode
    - sub_done::_cntl::call_id
    - CHECK_EQ
    - bthread_id_unlock
    - call_id
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:422,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 412
    functionDepth: 5
    functionLinenumber: 412
    functionLinenumberEnd: 425
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 7
    functionsReached:
    - Resource
    - bthread_id_unlock_and_destroy
    - brpc::schan::Sender::Run
    - call_id
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:438,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:442,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:447,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:451,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 455
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 4
    functionsReached:
    - Resource::response::Clear
    - Reset
    - Resource
    - SubDone::SubDone
    - New
    - CHECK
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:461,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:466,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 469
    functionName: brpc::schan::Sender::PushFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - brpc::schan::Sender::Clear
    linkageType: ''
    returnType: bool
    signature: bool Sender::PushFree(const Resource& r)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: sub_done::_cntl::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:476,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 484
    functionName: brpc::schan::Sender::SubController
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - sub_done::_cntl::Failed
    linkageType: ''
    returnType: Controller
    signature: Controller * Sender::SubController(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const schan::Sender*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sender
    - index
    argTypes:
    - RPCSender*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 491
    functionName: brpc::GetSubControllerOfSelectiveChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const schan::Sender*>
    linkageType: ''
    returnType: Controller
    signature: "Controller * GetSubControllerOfSelectiveChannel(\n    const RPCSender*
      sender, int index)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 495
    functionName: brpc::PassSerializeRequest
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PassSerializeRequest(butil::IOBuf*, Controller*,\n                                 const
      google::protobuf::Message*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 497
    functionName: brpc::SelectiveChannel::SelectiveChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::SelectiveChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 499
    functionName: SelectiveChannel::~SelectiveChannel()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::~SelectiveChannel()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/selective_channel.cpp:503,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:504,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:505,1
    - Dst: schan::ChannelBalancer::ChannelBalancer
      Src: /src/brpc/src/brpc/selective_channel.cpp:508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:510,1
    - Dst: schan::ChannelBalancer*::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:514,1
    - Dst: _lb::reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:518,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - lb_name
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 529
    functionName: brpc::SelectiveChannel::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 20
    functionsReached:
    - schan::ChannelBalancer*::Init
    - GlobalInitializeOrDie
    - schan::ChannelBalancer::ChannelBalancer
    - brpc::SelectiveChannel::initialized
    - LOG
    - _lb::reset
    linkageType: ''
    returnType: int
    signature: int SelectiveChannel::Init(const char* lb_name, const ChannelOptions*
      options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 533
    functionName: brpc::SelectiveChannel::initialized
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SelectiveChannel::initialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:538,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:540,1
    - Dst: schan::ChannelBalancer*::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:543,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 535
    functionDepth: 1
    functionLinenumber: 535
    functionLinenumberEnd: 544
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 18
    functionsReached:
    - static_cast<schan::ChannelBalancer*>
    - _lb::get
    - LOG
    - schan::ChannelBalancer*::AddChannel
    linkageType: ''
    returnType: int
    signature: "int SelectiveChannel::AddChannel(ChannelBase* sub_channel,\n                                 ChannelHandle*
      handle)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:548,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:548,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:550,1
    - Dst: schan::ChannelBalancer*::RemoveAndDestroyChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - handle
    argTypes:
    - ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 554
    functionName: brpc::SelectiveChannel::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - schan::ChannelBalancer*::RemoveAndDestroyChannel
    - static_cast<schan::ChannelBalancer*>
    - _lb::get
    - LOG
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::RemoveAndDestroyChannel(ChannelHandle handle)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:562,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:563,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:564,1
    - Dst: schan::Sender::Sender
      Src: /src/brpc/src/brpc/selective_channel.cpp:567,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/selective_channel.cpp:569,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:570,1
    - Dst: brpc::SelectiveChannel::CallMethod
      Src: /src/brpc/src/brpc/selective_channel.cpp:571,1
    - Dst: Join
      Src: /src/brpc/src/brpc/selective_channel.cpp:573,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/selective_channel.cpp:574,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/selective_channel.cpp:574,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 5
    argNames:
    - method
    - controller_base
    - request
    - response
    - user_done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 576
    functionName: brpc::SelectiveChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    - Join
    - Controller*::OnRPCEnd
    - schan::Sender::Sender
    - brpc::SelectiveChannel::initialized
    - static_cast<Controller*>
    - Controller*::add_flag
    - Controller*::call_id
    - Controller*::SetFailed
    - brpc::SelectiveChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: "void SelectiveChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* controller_base,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      user_done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:580,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:580,1
    - Dst: schan::ChannelBalancer*::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:582,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 585
    functionName: brpc::SelectiveChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - schan::ChannelBalancer*::CheckHealth
    - static_cast<schan::ChannelBalancer*>
    - _lb::get
    linkageType: ''
    returnType: int
    signature: int SelectiveChannel::CheckHealth()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _lb::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:591,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 596
    functionName: brpc::SelectiveChannel::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - _lb::Describe
    linkageType: ''
    returnType: void
    signature: "void SelectiveChannel::Describe(\n    std::ostream& os, const DescribeOptions&
      options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: brpc::Controller::Inheritable
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Inheritable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 161
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 43
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 181
    functionName: brpc::Controller::timeout_ms
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeout_ms() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - policy
    argTypes:
    - BackupRequestPolicy*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: brpc::Controller::set_backup_request_policy
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_backup_request_policy(BackupRequestPolicy* policy)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 202
    functionName: brpc::Controller::max_retry
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int max_retry() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 205
    functionName: brpc::Controller::retried_count
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int retried_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 208
    functionName: brpc::Controller::has_backup_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 4
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_backup_request() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.h:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 218
    functionName: brpc::Controller::latency_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: int64_t
    signature: int64_t latency_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::Controller::response
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::Message
    signature: google::protobuf::Message * response() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - request_id
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 228
    functionName: brpc::Controller::set_request_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_id(std::string request_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tos
    argTypes:
    - short
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 235
    functionName: brpc::Controller::set_type_of_service
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type_of_service(short tos)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 239
    functionName: brpc::Controller::set_connection_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_connection_type(ConnectionType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: brpc::Controller::set_request_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_compress_type(CompressType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::Controller::set_request_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_checksum_type(ChecksumType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - request_code
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 251
    functionName: brpc::Controller::set_request_code
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void set_request_code(uint64_t request_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: brpc::Controller::has_request_code
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_request_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 253
    functionName: brpc::Controller::request_code
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t request_code() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HttpHeader::HttpHeader
      Src: /src/brpc/src/brpc/controller.h:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 261
    functionName: '& http_request()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - HttpHeader::HttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_request()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::Controller::has_http_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_http_request() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: brpc::Controller::release_http_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader * release_http_request()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UserFieldsMap::UserFieldsMap
      Src: /src/brpc/src/brpc/controller.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 274
    functionName: brpc::Controller::request_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - UserFieldsMap::UserFieldsMap
    linkageType: ''
    returnType: UserFieldsMap
    signature: UserFieldsMap * request_user_fields()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: brpc::Controller::has_request_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_request_user_fields() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UserFieldsMap::UserFieldsMap
      Src: /src/brpc/src/brpc/controller.h:280,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 283
    functionName: brpc::Controller::response_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - UserFieldsMap::UserFieldsMap
    linkageType: ''
    returnType: UserFieldsMap
    signature: UserFieldsMap * response_user_fields()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: brpc::Controller::has_response_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_response_user_fields() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 289
    functionName: '& request_attachment()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & request_attachment()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 291
    functionName: brpc::Controller::connection_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConnectionType
    signature: ConnectionType connection_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 293
    functionName: brpc::Controller::method
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::MethodDescriptor
    signature: google::protobuf::MethodDescriptor * method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 315
    functionName: brpc::Controller::sampled_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * sampled_request() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: brpc::Controller::response_will_be_read_progressively
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 16
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void response_will_be_read_progressively()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 329
    functionName: brpc::Controller::request_will_be_read_progressively
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void request_will_be_read_progressively()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 331
    functionName: brpc::Controller::is_response_read_progressively
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_response_read_progressively() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 345
    functionName: brpc::Controller::has_progressive_reader
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_progressive_reader() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 351
    functionName: brpc::Controller::ignore_eovercrowded
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void ignore_eovercrowded()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: brpc::Controller::set_pb_bytes_to_base64
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_pb_bytes_to_base64(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 356
    functionName: brpc::Controller::has_pb_bytes_to_base64
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_pb_bytes_to_base64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 360
    functionName: brpc::Controller::set_pb_single_repeated_to_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_pb_single_repeated_to_array(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 361
    functionName: brpc::Controller::has_pb_single_repeated_to_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_pb_single_repeated_to_array() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 365
    functionDepth: 1
    functionLinenumber: 365
    functionLinenumberEnd: 365
    functionName: brpc::Controller::set_pb_jsonify_empty_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_pb_jsonify_empty_array(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: brpc::Controller::has_pb_jsonify_empty_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_pb_jsonify_empty_array() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 372
    functionName: brpc::Controller::set_always_print_primitive_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_always_print_primitive_fields(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:373,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 373
    functionName: brpc::Controller::has_always_print_primitive_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_always_print_primitive_fields() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 384
    functionName: brpc::Controller::allow_done_to_run_in_place
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void allow_done_to_run_in_place()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 387
    functionName: brpc::Controller::is_done_allowed_to_run_in_place
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_done_allowed_to_run_in_place() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 397
    functionName: brpc::Controller::set_write_to_socket_in_background
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_write_to_socket_in_background(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 398
    functionName: brpc::Controller::write_to_socket_in_background
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool write_to_socket_in_background() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 423
    functionName: brpc::Controller::auth_context
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AuthContext
    signature: AuthContext * auth_context() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HttpHeader::HttpHeader
      Src: /src/brpc/src/brpc/controller.h:434,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 437
    functionName: '& http_response()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - HttpHeader::HttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_response()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 438
    functionName: brpc::Controller::has_http_response
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_http_response() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 443
    functionName: brpc::Controller::release_http_response
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader * release_http_response()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 447
    functionName: '& response_attachment()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & response_attachment()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - manage_or_not
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 453
    functionDepth: 1
    functionLinenumber: 453
    functionLinenumberEnd: 454
    functionName: brpc::Controller::manage_http_body_on_error
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void manage_http_body_on_error(bool manage_or_not)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 457
    functionName: brpc::Controller::does_manage_http_body_on_error
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool does_manage_http_body_on_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 466
    functionName: brpc::Controller::has_progressive_writer
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_progressive_writer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 469
    functionDepth: 0
    functionLinenumber: 469
    functionLinenumberEnd: 469
    functionName: brpc::Controller::set_response_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_compress_type(CompressType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 472
    functionName: brpc::Controller::set_response_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_checksum_type(ChecksumType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:486,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 486
    functionDepth: 1
    functionLinenumber: 486
    functionLinenumberEnd: 486
    functionName: brpc::Controller::IsCloseConnection
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool IsCloseConnection() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 490
    functionName: brpc::Controller::is_security_mode
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_security_mode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 494
    functionName: brpc::Controller::server
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/controller.h:502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 502
    functionName: brpc::Controller::mongo_session_data
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: MongoContext
    signature: MongoContext * mongo_session_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 513
    functionName: brpc::Controller::remote_side
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 519
    functionName: brpc::Controller::local_side
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 522
    functionName: brpc::Controller::request_protocol
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType request_protocol() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::ResetNonPods
      Src: /src/brpc/src/brpc/controller.h:527,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.h:528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 526
    functionDepth: 1
    functionLinenumber: 526
    functionLinenumberEnd: 529
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 43
    functionsReached:
    - brpc::Controller::ResetPods
    - brpc::Controller::ResetNonPods
    linkageType: ''
    returnType: void
    signature: void Reset() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 552
    functionName: brpc::Controller::ErrorCode
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 128
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ErrorCode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 555
    functionName: '& inheritable()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Inheritable
    signature: Inheritable & inheritable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:556,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 556
    functionName: brpc::Controller::has_log_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_log_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 557
    functionName: brpc::Controller::log_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t log_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 558
    functionDepth: 0
    functionLinenumber: 558
    functionLinenumberEnd: 558
    functionName: '& request_id() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & request_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 559
    functionName: brpc::Controller::request_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CompressType
    signature: CompressType request_compress_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: brpc::Controller::response_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: CompressType
    signature: CompressType response_compress_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    functionName: brpc::Controller::request_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ChecksumType
    signature: ChecksumType request_checksum_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 562
    functionName: brpc::Controller::response_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: ChecksumType
    signature: ChecksumType response_checksum_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DefaultHttpHeader
      Src: /src/brpc/src/brpc/controller.h:564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 563
    functionDepth: 1
    functionLinenumber: 563
    functionLinenumberEnd: 564
    functionName: '& http_request() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::DefaultHttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_request() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DefaultHttpHeader
      Src: /src/brpc/src/brpc/controller.h:567,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 566
    functionDepth: 1
    functionLinenumber: 566
    functionLinenumberEnd: 567
    functionName: '& http_response() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::DefaultHttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_response() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 569
    functionName: '& request_attachment() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & request_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 570
    functionDepth: 0
    functionLinenumber: 570
    functionLinenumberEnd: 570
    functionName: '& response_attachment() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & response_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 582
    functionName: brpc::Controller::LogPrefixDummy::LogPrefixDummy
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogPrefixDummy(const Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::LogPrefixDummy::DoPrintLogPrefix
      Src: /src/brpc/src/brpc/controller.h:583,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 583
    functionDepth: 1
    functionLinenumber: 583
    functionLinenumberEnd: 583
    functionName: brpc::Controller::LogPrefixDummy::DoPrintLogPrefix
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 1
    functionsReached:
    - brpc::Controller::LogPrefixDummy::DoPrintLogPrefix
    linkageType: ''
    returnType: void
    signature: void DoPrintLogPrefix(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogPrefixDummy
      Src: /src/brpc/src/brpc/controller.h:588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 588
    functionName: brpc::Controller::LogPrefix
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - LogPrefixDummy
    linkageType: ''
    returnType: LogPrefixDummy
    signature: LogPrefixDummy LogPrefix() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 591
    functionName: brpc::Controller::has_remote_stream
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_remote_stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' names'
    argTypes:
    - IdlNames
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 600
    functionName: brpc::Controller::set_idl_names
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_idl_names(const IdlNames& names)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    functionName: brpc::Controller::idl_names
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: IdlNames
    signature: IdlNames idl_names() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - result
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 607
    functionName: brpc::Controller::set_idl_result
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_idl_result(int64_t result)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 608
    functionName: brpc::Controller::idl_result
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t idl_result() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 610
    functionName: '& thrift_method_name()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & thrift_method_name()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 617
    functionName: brpc::Controller::deadline_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t deadline_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - AfterRpcRespFnType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 623
    functionName: brpc::Controller::set_after_rpc_resp_fn
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_after_rpc_resp_fn(AfterRpcRespFnType&& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ContentType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 629
    functionName: brpc::Controller::set_request_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_content_type(ContentType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 632
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 632
    functionName: brpc::Controller::request_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ContentType
    signature: ContentType request_content_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ContentType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 636
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 636
    functionName: brpc::Controller::set_response_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_content_type(ContentType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 639
    functionName: brpc::Controller::response_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: ContentType
    signature: ContentType response_content_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 713
    functionName: brpc::Controller::FailedInline
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool FailedInline() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - nretry
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 718
    functionName: brpc::Controller::get_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CallId
    signature: CallId get_id(int nretry) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:721,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 721
    functionName: brpc::Controller::is_health_check_call
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_health_check_call() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 724
    functionDepth: 0
    functionLinenumber: 724
    functionLinenumberEnd: 727
    functionName: brpc::Controller::current_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CallId
    signature: CallId current_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.h:736,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 736
    functionName: brpc::Controller::Call
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::Reset
    linkageType: ''
    returnType: void
    signature: void Call()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 758
    functionName: brpc::Controller::SingleServer
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SingleServer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - begin_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 766
    functionName: brpc::Controller::OnRPCBegin
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnRPCBegin(int64_t begin_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 774
    functionName: brpc::Controller::add_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void add_flag(uint32_t f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 775
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 775
    functionName: brpc::Controller::clear_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void clear_flag(uint32_t f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:777,1
    - Dst: brpc::Controller::clear_flag
      Src: /src/brpc/src/brpc/controller.h:777,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - f
    - t
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 777
      start: 776
    functionDepth: 1
    functionLinenumber: 776
    functionLinenumberEnd: 777
    functionName: brpc::Controller::set_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 6
    functionsReached:
    - brpc::Controller::add_flag
    - brpc::Controller::clear_flag
    linkageType: ''
    returnType: void
    signature: void set_flag(uint32_t f, bool t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 778
    functionName: brpc::Controller::has_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_flag(uint32_t f) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:780,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 780
    functionDepth: 1
    functionLinenumber: 780
    functionLinenumberEnd: 780
    functionName: brpc::Controller::set_used_by_rpc
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void set_used_by_rpc()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:781,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 781
    functionName: brpc::Controller::is_used_by_rpc
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_used_by_rpc() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:784,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 783
    functionDepth: 1
    functionLinenumber: 783
    functionLinenumberEnd: 785
    functionName: brpc::Controller::has_enabled_circuit_breaker
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_enabled_circuit_breaker() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 787
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 787
    functionName: '& protocol_param()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 788
    functionName: '& protocol_param() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: brpc::Controller::Inheritable
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Inheritable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 161
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 44
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 181
    functionName: brpc::Controller::timeout_ms
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeout_ms() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - policy
    argTypes:
    - BackupRequestPolicy*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: brpc::Controller::set_backup_request_policy
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_backup_request_policy(BackupRequestPolicy* policy)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 202
    functionName: brpc::Controller::max_retry
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int max_retry() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 205
    functionName: brpc::Controller::retried_count
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int retried_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 208
    functionName: brpc::Controller::has_backup_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 4
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_backup_request() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.h:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 218
    functionName: brpc::Controller::latency_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: int64_t
    signature: int64_t latency_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::Controller::response
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::Message
    signature: google::protobuf::Message * response() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - request_id
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 228
    functionName: brpc::Controller::set_request_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_id(std::string request_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tos
    argTypes:
    - short
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 235
    functionName: brpc::Controller::set_type_of_service
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type_of_service(short tos)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 239
    functionName: brpc::Controller::set_connection_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_connection_type(ConnectionType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: brpc::Controller::set_request_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_compress_type(CompressType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::Controller::set_request_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_checksum_type(ChecksumType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - request_code
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 251
    functionName: brpc::Controller::set_request_code
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void set_request_code(uint64_t request_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: brpc::Controller::has_request_code
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_request_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 253
    functionName: brpc::Controller::request_code
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t request_code() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HttpHeader::HttpHeader
      Src: /src/brpc/src/brpc/controller.h:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 261
    functionName: '& http_request()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - HttpHeader::HttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_request()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::Controller::has_http_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_http_request() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: brpc::Controller::release_http_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader * release_http_request()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UserFieldsMap::UserFieldsMap
      Src: /src/brpc/src/brpc/controller.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 274
    functionName: brpc::Controller::request_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - UserFieldsMap::UserFieldsMap
    linkageType: ''
    returnType: UserFieldsMap
    signature: UserFieldsMap * request_user_fields()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: brpc::Controller::has_request_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_request_user_fields() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UserFieldsMap::UserFieldsMap
      Src: /src/brpc/src/brpc/controller.h:280,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 283
    functionName: brpc::Controller::response_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - UserFieldsMap::UserFieldsMap
    linkageType: ''
    returnType: UserFieldsMap
    signature: UserFieldsMap * response_user_fields()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: brpc::Controller::has_response_user_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_response_user_fields() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 289
    functionName: '& request_attachment()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & request_attachment()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 291
    functionName: brpc::Controller::connection_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ConnectionType
    signature: ConnectionType connection_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 293
    functionName: brpc::Controller::method
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::MethodDescriptor
    signature: google::protobuf::MethodDescriptor * method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 315
    functionName: brpc::Controller::sampled_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * sampled_request() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: brpc::Controller::response_will_be_read_progressively
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 16
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void response_will_be_read_progressively()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 329
    functionName: brpc::Controller::request_will_be_read_progressively
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void request_will_be_read_progressively()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 331
    functionName: brpc::Controller::is_response_read_progressively
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_response_read_progressively() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 345
    functionName: brpc::Controller::has_progressive_reader
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_progressive_reader() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 351
    functionDepth: 1
    functionLinenumber: 351
    functionLinenumberEnd: 351
    functionName: brpc::Controller::ignore_eovercrowded
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void ignore_eovercrowded()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 2
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: brpc::Controller::set_pb_bytes_to_base64
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_pb_bytes_to_base64(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 356
    functionName: brpc::Controller::has_pb_bytes_to_base64
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_pb_bytes_to_base64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 360
    functionDepth: 2
    functionLinenumber: 360
    functionLinenumberEnd: 360
    functionName: brpc::Controller::set_pb_single_repeated_to_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_pb_single_repeated_to_array(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 361
    functionName: brpc::Controller::has_pb_single_repeated_to_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_pb_single_repeated_to_array() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 365
    functionDepth: 2
    functionLinenumber: 365
    functionLinenumberEnd: 365
    functionName: brpc::Controller::set_pb_jsonify_empty_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_pb_jsonify_empty_array(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: brpc::Controller::has_pb_jsonify_empty_array
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_pb_jsonify_empty_array() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 372
    functionDepth: 2
    functionLinenumber: 372
    functionLinenumberEnd: 372
    functionName: brpc::Controller::set_always_print_primitive_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_always_print_primitive_fields(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:373,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 373
    functionName: brpc::Controller::has_always_print_primitive_fields
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_always_print_primitive_fields() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 384
    functionName: brpc::Controller::allow_done_to_run_in_place
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void allow_done_to_run_in_place()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 387
    functionName: brpc::Controller::is_done_allowed_to_run_in_place
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_done_allowed_to_run_in_place() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 2
    functionLinenumber: 397
    functionLinenumberEnd: 397
    functionName: brpc::Controller::set_write_to_socket_in_background
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_write_to_socket_in_background(bool f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 398
    functionName: brpc::Controller::write_to_socket_in_background
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool write_to_socket_in_background() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 423
    functionName: brpc::Controller::auth_context
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AuthContext
    signature: AuthContext * auth_context() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HttpHeader::HttpHeader
      Src: /src/brpc/src/brpc/controller.h:434,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 437
    functionName: '& http_response()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - HttpHeader::HttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_response()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 438
    functionName: brpc::Controller::has_http_response
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_http_response() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 443
    functionName: brpc::Controller::release_http_response
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader * release_http_response()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 447
    functionName: '& response_attachment()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & response_attachment()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - manage_or_not
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 453
    functionDepth: 2
    functionLinenumber: 453
    functionLinenumberEnd: 454
    functionName: brpc::Controller::manage_http_body_on_error
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void manage_http_body_on_error(bool manage_or_not)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 457
    functionName: brpc::Controller::does_manage_http_body_on_error
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool does_manage_http_body_on_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 466
    functionName: brpc::Controller::has_progressive_writer
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_progressive_writer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 469
    functionDepth: 0
    functionLinenumber: 469
    functionLinenumberEnd: 469
    functionName: brpc::Controller::set_response_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_compress_type(CompressType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 472
    functionName: brpc::Controller::set_response_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_checksum_type(ChecksumType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:486,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 486
    functionDepth: 1
    functionLinenumber: 486
    functionLinenumberEnd: 486
    functionName: brpc::Controller::IsCloseConnection
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool IsCloseConnection() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 490
    functionName: brpc::Controller::is_security_mode
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_security_mode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 494
    functionName: brpc::Controller::server
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/controller.h:502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 502
    functionName: brpc::Controller::mongo_session_data
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: MongoContext
    signature: MongoContext * mongo_session_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 513
    functionName: brpc::Controller::remote_side
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 519
    functionName: brpc::Controller::local_side
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 522
    functionName: brpc::Controller::request_protocol
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType request_protocol() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::ResetNonPods
      Src: /src/brpc/src/brpc/controller.h:527,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.h:528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 526
    functionDepth: 1
    functionLinenumber: 526
    functionLinenumberEnd: 529
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 44
    functionsReached:
    - brpc::Controller::ResetPods
    - brpc::Controller::ResetNonPods
    linkageType: ''
    returnType: void
    signature: void Reset() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 552
    functionName: brpc::Controller::ErrorCode
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 128
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ErrorCode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 555
    functionName: '& inheritable()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Inheritable
    signature: Inheritable & inheritable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:556,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 556
    functionName: brpc::Controller::has_log_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_log_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 557
    functionName: brpc::Controller::log_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t log_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 558
    functionDepth: 0
    functionLinenumber: 558
    functionLinenumberEnd: 558
    functionName: '& request_id() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & request_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 559
    functionName: brpc::Controller::request_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CompressType
    signature: CompressType request_compress_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: brpc::Controller::response_compress_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: CompressType
    signature: CompressType response_compress_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    functionName: brpc::Controller::request_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ChecksumType
    signature: ChecksumType request_checksum_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 562
    functionName: brpc::Controller::response_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: ChecksumType
    signature: ChecksumType response_checksum_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultHttpHeader
      Src: /src/brpc/src/brpc/controller.h:564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 564
    functionName: '& http_request() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - DefaultHttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_request() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultHttpHeader
      Src: /src/brpc/src/brpc/controller.h:567,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 567
    functionName: '& http_response() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - DefaultHttpHeader
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & http_response() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 569
    functionName: '& request_attachment() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & request_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 570
    functionDepth: 0
    functionLinenumber: 570
    functionLinenumberEnd: 570
    functionName: '& response_attachment() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & response_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 582
    functionName: brpc::Controller::LogPrefixDummy::LogPrefixDummy
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogPrefixDummy(const Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::LogPrefixDummy::DoPrintLogPrefix
      Src: /src/brpc/src/brpc/controller.h:583,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 583
    functionDepth: 1
    functionLinenumber: 583
    functionLinenumberEnd: 583
    functionName: brpc::Controller::LogPrefixDummy::DoPrintLogPrefix
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached:
    - brpc::Controller::LogPrefixDummy::DoPrintLogPrefix
    linkageType: ''
    returnType: void
    signature: void DoPrintLogPrefix(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogPrefixDummy
      Src: /src/brpc/src/brpc/controller.h:588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 588
    functionName: brpc::Controller::LogPrefix
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - LogPrefixDummy
    linkageType: ''
    returnType: LogPrefixDummy
    signature: LogPrefixDummy LogPrefix() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 591
    functionName: brpc::Controller::has_remote_stream
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_remote_stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' names'
    argTypes:
    - IdlNames
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 600
    functionName: brpc::Controller::set_idl_names
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_idl_names(const IdlNames& names)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    functionName: brpc::Controller::idl_names
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: IdlNames
    signature: IdlNames idl_names() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - result
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 607
    functionName: brpc::Controller::set_idl_result
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_idl_result(int64_t result)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 608
    functionName: brpc::Controller::idl_result
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t idl_result() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 610
    functionName: '& thrift_method_name()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & thrift_method_name()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 617
    functionName: brpc::Controller::deadline_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t deadline_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - AfterRpcRespFnType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 623
    functionName: brpc::Controller::set_after_rpc_resp_fn
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_after_rpc_resp_fn(AfterRpcRespFnType&& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ContentType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 629
    functionName: brpc::Controller::set_request_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_content_type(ContentType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 632
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 632
    functionName: brpc::Controller::request_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ContentType
    signature: ContentType request_content_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ContentType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 636
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 636
    functionName: brpc::Controller::set_response_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_content_type(ContentType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 639
    functionName: brpc::Controller::response_content_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: ContentType
    signature: ContentType response_content_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 713
    functionName: brpc::Controller::FailedInline
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool FailedInline() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - nretry
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 718
    functionName: brpc::Controller::get_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CallId
    signature: CallId get_id(int nretry) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:721,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 721
    functionName: brpc::Controller::is_health_check_call
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_health_check_call() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 724
    functionDepth: 0
    functionLinenumber: 724
    functionLinenumberEnd: 727
    functionName: brpc::Controller::current_id
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CallId
    signature: CallId current_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.h:736,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 736
    functionName: brpc::Controller::Call
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::Reset
    linkageType: ''
    returnType: void
    signature: void Call()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 758
    functionName: brpc::Controller::SingleServer
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SingleServer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - begin_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 766
    functionName: brpc::Controller::OnRPCBegin
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnRPCBegin(int64_t begin_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 774
    functionName: brpc::Controller::add_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void add_flag(uint32_t f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 775
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 775
    functionName: brpc::Controller::clear_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void clear_flag(uint32_t f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:777,1
    - Dst: brpc::Controller::clear_flag
      Src: /src/brpc/src/brpc/controller.h:777,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - f
    - t
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 777
      start: 776
    functionDepth: 1
    functionLinenumber: 776
    functionLinenumberEnd: 777
    functionName: brpc::Controller::set_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 12
    functionsReached:
    - brpc::Controller::add_flag
    - brpc::Controller::clear_flag
    linkageType: ''
    returnType: void
    signature: void set_flag(uint32_t f, bool t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 778
    functionName: brpc::Controller::has_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 32
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_flag(uint32_t f) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:780,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 780
    functionDepth: 1
    functionLinenumber: 780
    functionLinenumberEnd: 780
    functionName: brpc::Controller::set_used_by_rpc
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void set_used_by_rpc()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:781,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 781
    functionName: brpc::Controller::is_used_by_rpc
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_used_by_rpc() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:784,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 783
    functionDepth: 1
    functionLinenumber: 783
    functionLinenumberEnd: 785
    functionName: brpc::Controller::has_enabled_circuit_breaker
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool has_enabled_circuit_breaker() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 787
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 787
    functionName: '& protocol_param()'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 788
    functionName: '& protocol_param() const'
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cntl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 960
      start: 959
    functionDepth: 0
    functionLinenumber: 959
    functionLinenumberEnd: 960
    functionName: CLOGD
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CLOGD(cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cntl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 960
    functionDepth: 0
    functionLinenumber: 960
    functionLinenumberEnd: 961
    functionName: CLOGI
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CLOGI(cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cntl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 962
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 962
    functionName: CLOGW
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CLOGW(cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cntl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 963
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 963
    functionName: CLOGE
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CLOGE(cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cntl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 963
    functionDepth: 0
    functionLinenumber: 963
    functionLinenumberEnd: 964
    functionName: CLOGF
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CLOGF(cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - v
    - ','
    - cntl
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 964
    functionDepth: 0
    functionLinenumber: 964
    functionLinenumberEnd: 965
    functionName: CVLOG
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CVLOG(v, cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~NamingServiceFilter()
    functionSourceFile: /src/brpc/src/brpc/naming_service_filter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingServiceFilter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~NamingServiceFilter()
    functionSourceFile: /src/brpc/src/brpc/naming_service_filter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingServiceFilter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - method2
    - request2
    - response2
    - flags2
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 47
    functionName: brpc::SubCall
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SubCall(const google::protobuf::MethodDescriptor* method2,\n
      \           const google::protobuf::Message* request2,\n            google::protobuf::Message*
      response2,\n            int flags2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::SubCall
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubCall()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SubCall
      Src: /src/brpc/src/brpc/parallel_channel.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::Bad
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 4
    functionsReached:
    - brpc::SubCall
    linkageType: ''
    returnType: SubCall
    signature: SubCall Bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::Skip
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: SubCall
    signature: SubCall Skip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: brpc::is_bad
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_bad() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::is_skip
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_skip() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CallMapper::Map
      Src: /src/brpc/src/brpc/parallel_channel.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - channel_index
    - channel_count
    - method
    - request
    - response
    argTypes:
    - int
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 102
    functionName: brpc::CallMapper::Map
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 1
    functionsReached:
    - brpc::CallMapper::Map
    linkageType: ''
    returnType: SubCall
    signature: "SubCall Map(int channel_index/*starting from 0*/,\n                        int
      channel_count,\n                        const google::protobuf::MethodDescriptor*
      method,\n                        const google::protobuf::Message* request,\n
      \                       google::protobuf::Message* response)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Bad
      Src: /src/brpc/src/brpc/parallel_channel.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - channel_index
    - method
    - request
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 112
    functionName: brpc::CallMapper::Map
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 1
    functionsReached:
    - brpc::Bad
    linkageType: ''
    returnType: SubCall
    signature: "SubCall Map(int channel_index/*starting from 0*/,\n                        const
      google::protobuf::MethodDescriptor* method,\n                        const google::protobuf::Message*
      request,\n                        google::protobuf::Message* response)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~CallMapper() override
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallMapper() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<const Req*>
      Src: /src/brpc/src/brpc/parallel_channel.h:120,1
    - Dst: Req*::New
      Src: /src/brpc/src/brpc/parallel_channel.h:121,1
    - Dst: Req*::MergeFrom
      Src: /src/brpc/src/brpc/parallel_channel.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req_base
    argTypes:
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 124
    functionName: brpc::Clone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - dynamic_cast<const Req*>
    - Req*::MergeFrom
    - Req*::New
    linkageType: ''
    returnType: Req
    signature: Req * Clone(const google::protobuf::Message* req_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: ~ResponseMerger() override
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ResponseMerger() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: brpc::ParallelChannel::channel_count
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t channel_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - method2
    - request2
    - response2
    - flags2
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 47
    functionName: brpc::SubCall
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SubCall(const google::protobuf::MethodDescriptor* method2,\n
      \           const google::protobuf::Message* request2,\n            google::protobuf::Message*
      response2,\n            int flags2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::SubCall
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubCall()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SubCall
      Src: /src/brpc/src/brpc/parallel_channel.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::Bad
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 5
    functionsReached:
    - brpc::SubCall
    linkageType: ''
    returnType: SubCall
    signature: SubCall Bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::Skip
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: SubCall
    signature: SubCall Skip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: brpc::is_bad
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_bad() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::is_skip
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_skip() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CallMapper::Map
      Src: /src/brpc/src/brpc/parallel_channel.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - channel_index
    - channel_count
    - method
    - request
    - response
    argTypes:
    - int
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 102
    functionName: brpc::CallMapper::Map
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 2
    functionsReached:
    - brpc::CallMapper::Map
    linkageType: ''
    returnType: SubCall
    signature: "SubCall Map(int channel_index/*starting from 0*/,\n                        int
      channel_count,\n                        const google::protobuf::MethodDescriptor*
      method,\n                        const google::protobuf::Message* request,\n
      \                       google::protobuf::Message* response)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Bad
      Src: /src/brpc/src/brpc/parallel_channel.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - channel_index
    - method
    - request
    - response
    argTypes:
    - int
    - google::protobuf::MethodDescriptor*
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 112
    functionName: brpc::CallMapper::Map
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 2
    functionsReached:
    - brpc::Bad
    linkageType: ''
    returnType: SubCall
    signature: "SubCall Map(int channel_index/*starting from 0*/,\n                        const
      google::protobuf::MethodDescriptor* method,\n                        const google::protobuf::Message*
      request,\n                        google::protobuf::Message* response)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~CallMapper() override
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CallMapper() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<const Req*>
      Src: /src/brpc/src/brpc/parallel_channel.h:120,1
    - Dst: Req*::New
      Src: /src/brpc/src/brpc/parallel_channel.h:121,1
    - Dst: Req*::MergeFrom
      Src: /src/brpc/src/brpc/parallel_channel.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req_base
    argTypes:
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 124
    functionName: brpc::Clone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - dynamic_cast<const Req*>
    - Req*::MergeFrom
    - Req*::New
    linkageType: ''
    returnType: Req
    signature: Req * Clone(const google::protobuf::Message* req_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: ~ResponseMerger() override
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ResponseMerger() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: brpc::ParallelChannel::channel_count
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t channel_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~AdaptiveMaxConcurrency()
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AdaptiveMaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: operator int() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator int() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: operator TimeoutConcurrencyConf() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator TimeoutConcurrencyConf() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: '& value() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cl
    argTypes:
    - ConcurrencyLimiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::AdaptiveMaxConcurrency::SetConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetConcurrencyLimiter(ConcurrencyLimiter* cl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' amc'
    argTypes:
    - std::ostream
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: '& operator<<(std::ostream& os, const AdaptiveMaxConcurrency& amc)'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AdaptiveMaxConcurrency&
      amc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' concurrency'
    - ' adaptive_concurrency'
    argTypes:
    - butil::StringPiece
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 92
    functionName: "operator==(const butil::StringPiece& concurrency,\n                       const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator==(const butil::StringPiece& concurrency,\n                       const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' adaptive_concurrency'
    - ' concurrency'
    argTypes:
    - AdaptiveMaxConcurrency
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: "operator!=(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \                      const butil::StringPiece& concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator!=(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \                      const butil::StringPiece& concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' concurrency'
    - ' adaptive_concurrency'
    argTypes:
    - butil::StringPiece
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: "operator!=(const butil::StringPiece& concurrency,\n                  const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator!=(const butil::StringPiece& concurrency,\n                  const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~AdaptiveMaxConcurrency()
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AdaptiveMaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: operator int() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator int() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: operator TimeoutConcurrencyConf() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator TimeoutConcurrencyConf() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: '& value() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cl
    argTypes:
    - ConcurrencyLimiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::AdaptiveMaxConcurrency::SetConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetConcurrencyLimiter(ConcurrencyLimiter* cl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' amc'
    argTypes:
    - std::ostream
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: '& operator<<(std::ostream& os, const AdaptiveMaxConcurrency& amc)'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AdaptiveMaxConcurrency&
      amc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' concurrency'
    - ' adaptive_concurrency'
    argTypes:
    - butil::StringPiece
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 92
    functionName: "operator==(const butil::StringPiece& concurrency,\n                       const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator==(const butil::StringPiece& concurrency,\n                       const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' adaptive_concurrency'
    - ' concurrency'
    argTypes:
    - AdaptiveMaxConcurrency
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: "operator!=(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \                      const butil::StringPiece& concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator!=(const AdaptiveMaxConcurrency& adaptive_concurrency,\n
      \                      const butil::StringPiece& concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' concurrency'
    - ' adaptive_concurrency'
    argTypes:
    - butil::StringPiece
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: "operator!=(const butil::StringPiece& concurrency,\n                  const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator!=(const butil::StringPiece& concurrency,\n                  const
      AdaptiveMaxConcurrency& adaptive_concurrency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~Destroyable()
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Destroyable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: T*::Destroy
      Src: /src/brpc/src/brpc/destroyable.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: operator()(T* obj) const
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached:
    - T*::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(T* obj) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: T*::Destroy
      Src: /src/brpc/src/brpc/destroyable.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: operator()(T* obj) const
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached:
    - T*::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(T* obj) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: brpc::DestroyingPtr
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyingPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::DestroyingPtr
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyingPtr(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~Destroyable()
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Destroyable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: T*::Destroy
      Src: /src/brpc/src/brpc/destroyable.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: operator()(T* obj) const
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached:
    - T*::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(T* obj) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: T*::Destroy
      Src: /src/brpc/src/brpc/destroyable.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: operator()(T* obj) const
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached:
    - T*::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(T* obj) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: brpc::DestroyingPtr
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyingPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::DestroyingPtr
    functionSourceFile: /src/brpc/src/brpc/destroyable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyingPtr(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/memcache.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: '& operator=(const MemcacheRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: MemcacheRequest
    signature: MemcacheRequest & operator=(const MemcacheRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: brpc::MemcacheRequest::pipelined_count
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int pipelined_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: '& raw_buffer()'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: '& raw_buffer() const'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: brpc::MemcacheRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/memcache.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 171
    functionName: '& operator=(const MemcacheResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: MemcacheResponse
    signature: MemcacheResponse & operator=(const MemcacheResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: '& LastError() const'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & LastError() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 189
    functionName: '& raw_buffer()'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 190
    functionName: '& raw_buffer() const'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 204
    functionName: brpc::MemcacheResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/memcache.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: '& operator=(const MemcacheRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: MemcacheRequest
    signature: MemcacheRequest & operator=(const MemcacheRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: brpc::MemcacheRequest::pipelined_count
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int pipelined_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: '& raw_buffer()'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: '& raw_buffer() const'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: brpc::MemcacheRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/memcache.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 171
    functionName: '& operator=(const MemcacheResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: MemcacheResponse
    signature: MemcacheResponse & operator=(const MemcacheResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: '& LastError() const'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & LastError() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 189
    functionName: '& raw_buffer()'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 190
    functionName: '& raw_buffer() const'
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & raw_buffer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 204
    functionName: brpc::MemcacheResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: brpc::SampledRequest::speed_limit
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * speed_limit() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/brpc/rpc_dump.h:69,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/rpc_dump.h:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 73
    functionName: brpc::AskToBeSampled
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.h
    functionUses: 0
    functionsReached:
    - bvar::is_collectable
    - SampledRequest::SampledRequest
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * AskToBeSampled()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: brpc::SampledRequest::speed_limit
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * speed_limit() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/brpc/rpc_dump.h:69,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/rpc_dump.h:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 73
    functionName: brpc::AskToBeSampled
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.h
    functionUses: 0
    functionsReached:
    - bvar::is_collectable
    - SampledRequest::SampledRequest
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * AskToBeSampled()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: brpc::has_ssl_options
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: '& ssl_options() const'
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ChannelSSLOptions
    signature: ChannelSSLOptions & ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ChannelOptions
    signature: ChannelOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/channel.h:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: brpc::Channel::SingleServer
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 6
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool SingleServer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: brpc::has_ssl_options
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: '& ssl_options() const'
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ChannelSSLOptions
    signature: ChannelSSLOptions & ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ChannelOptions
    signature: ChannelOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/channel.h:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: brpc::Channel::SingleServer
    functionSourceFile: /src/brpc/src/brpc/channel.h
    functionUses: 6
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool SingleServer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - flag
    - ','
    - validate_fn
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: BRPC_VALIDATE_GFLAG
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BRPC_VALIDATE_GFLAG(flag, validate_fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: brpc::security_mode
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool security_mode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::has_ssl_options
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: '& ssl_options() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ServerSSLOptions
    signature: ServerSSLOptions & ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - min_port2
    - max_port2
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 368
    functionName: brpc::PortRange
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PortRange(int min_port2, int max_port2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 392
    functionName: brpc::Server::is_user_service
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_user_service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 437
    functionName: brpc::Server::ThreadLocalOptions
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 542
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ServerOptions
    signature: ServerOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 545
    functionName: brpc::Server::status
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Status
    signature: Status status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.h:548,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 548
    functionDepth: 1
    functionLinenumber: 548
    functionLinenumberEnd: 548
    functionName: brpc::Server::IsRunning
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 2
    functionsReached:
    - brpc::Server::status
    linkageType: ''
    returnType: bool
    signature: bool IsRunning() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 557
    functionName: brpc::Server::first_service
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::Service
    signature: google::protobuf::Service * first_service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' version'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: brpc::Server::set_version
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_version(const std::string& version)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    functionName: '& version() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 564
    functionName: brpc::Server::listen_address
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint listen_address() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 568
    functionName: brpc::Server::last_start_time
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: time_t
    signature: time_t last_start_time() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 570
    functionDepth: 0
    functionLinenumber: 570
    functionLinenumberEnd: 570
    functionName: brpc::Server::session_local_data_pool
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SimpleDataPool
    signature: SimpleDataPool * session_local_data_pool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 572
    functionDepth: 0
    functionLinenumber: 572
    functionLinenumberEnd: 572
    functionName: '& thread_local_options() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThreadLocalOptions
    signature: ThreadLocalOptions & thread_local_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/brpc/server.h:608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 609
    functionName: brpc::Server::Concurrency
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: int
    signature: int Concurrency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 616
      start: 614
    functionDepth: 0
    functionLinenumber: 614
    functionLinenumberEnd: 616
    functionName: brpc::Server::has_progressive_read_method
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_progressive_read_method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/server.h:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 652
    functionDepth: 0
    functionLinenumber: 652
    functionLinenumberEnd: 656
    functionName: brpc::Server::service_count
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 12
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t service_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 659
    functionName: brpc::Server::builtin_service_count
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t builtin_service_count() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AdaptiveMaxConcurrency*::type
      Src: /src/brpc/src/brpc/server.h:719,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:723,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.h:724,1
    - Dst: T*::_status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:727,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - service
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 730
    functionName: brpc::Server::SetServiceMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached:
    - T*::_status::SetConcurrencyLimiter
    - LOG
    - AdaptiveMaxConcurrency*::type
    - brpc::Server::CreateConcurrencyLimiter
    linkageType: ''
    returnType: int
    signature: int SetServiceMaxConcurrency(T* service)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: brpc::security_mode
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool security_mode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::has_ssl_options
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: '& ssl_options() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ServerSSLOptions
    signature: ServerSSLOptions & ssl_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - min_port2
    - max_port2
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 368
    functionName: brpc::PortRange
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PortRange(int min_port2, int max_port2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 392
    functionName: brpc::Server::is_user_service
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_user_service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 437
    functionName: brpc::Server::ThreadLocalOptions
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 542
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ServerOptions
    signature: ServerOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 545
    functionName: brpc::Server::status
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: Status
    signature: Status status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.h:548,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 548
    functionDepth: 1
    functionLinenumber: 548
    functionLinenumberEnd: 548
    functionName: brpc::Server::IsRunning
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 2
    functionsReached:
    - brpc::Server::status
    linkageType: ''
    returnType: bool
    signature: bool IsRunning() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 557
    functionName: brpc::Server::first_service
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::Service
    signature: google::protobuf::Service * first_service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' version'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: brpc::Server::set_version
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_version(const std::string& version)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    functionName: '& version() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 564
    functionName: brpc::Server::listen_address
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint listen_address() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 568
    functionName: brpc::Server::last_start_time
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: time_t
    signature: time_t last_start_time() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 570
    functionDepth: 0
    functionLinenumber: 570
    functionLinenumberEnd: 570
    functionName: brpc::Server::session_local_data_pool
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SimpleDataPool
    signature: SimpleDataPool * session_local_data_pool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 572
    functionDepth: 0
    functionLinenumber: 572
    functionLinenumberEnd: 572
    functionName: '& thread_local_options() const'
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThreadLocalOptions
    signature: ThreadLocalOptions & thread_local_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/brpc/server.h:608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 609
    functionName: brpc::Server::Concurrency
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: int
    signature: int Concurrency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 616
      start: 614
    functionDepth: 0
    functionLinenumber: 614
    functionLinenumberEnd: 616
    functionName: brpc::Server::has_progressive_read_method
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_progressive_read_method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/server.h:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 652
    functionDepth: 0
    functionLinenumber: 652
    functionLinenumberEnd: 656
    functionName: brpc::Server::service_count
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 12
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t service_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 659
    functionName: brpc::Server::builtin_service_count
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t builtin_service_count() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AdaptiveMaxConcurrency*::type
      Src: /src/brpc/src/brpc/server.h:719,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:723,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.h:724,1
    - Dst: T*::_status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:727,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - service
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 730
    functionName: brpc::Server::SetServiceMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached:
    - T*::_status::SetConcurrencyLimiter
    - LOG
    - AdaptiveMaxConcurrency*::type
    - brpc::Server::CreateConcurrencyLimiter
    linkageType: ''
    returnType: int
    signature: int SetServiceMaxConcurrency(T* service)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ThriftFramedMessage::SharedCtor
      Src: /src/brpc/src/brpc/thrift_message.cpp:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: brpc::ThriftFramedMessage::ThriftFramedMessage
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftFramedMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::ThriftFramedMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: brpc::ThriftFramedMessage::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::SharedCtor()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/thrift_message.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 42
    functionName: ThriftFramedMessage::~ThriftFramedMessage()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::~ThriftFramedMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::ThriftFramedMessage::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::SharedDtor()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/thrift_message.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 54
    functionName: brpc::ThriftFramedMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::Clear()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/thrift_message.cpp:58,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_message.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: brpc::ThriftFramedMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - size
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t ThriftFramedMessage::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/thrift_message.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/thrift_message.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ThriftFramedMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: brpc::ThriftFramedMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - CHECK_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::MergeFrom(const ThriftFramedMessage& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:71,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:72,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:73,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - other
    argTypes:
    - ThriftFramedMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: brpc::ThriftFramedMessage::Swap
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::Swap(ThriftFramedMessage* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/thrift_message.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 83
    functionName: brpc::ThriftFramedMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata ThriftFramedMessage::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::_thrift_method_name::assign
      Src: /src/brpc/src/brpc/thrift_message.cpp:90,1
    - Dst: brpc::ThriftStub::CallMethod
      Src: /src/brpc/src/brpc/thrift_message.cpp:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 5
    argNames:
    - method_name
    - cntl
    - req
    - res
    - done
    argTypes:
    - char*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 92
    functionName: brpc::ThriftStub::CallMethod
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 1
    functionsReached:
    - brpc::ThriftStub::CallMethod
    - Controller*::_thrift_method_name::assign
    linkageType: ''
    returnType: void
    signature: "void ThriftStub::CallMethod(const char* method_name,\n                            Controller*
      cntl,\n                            const ThriftFramedMessage* req,\n                            ThriftFramedMessage*
      res,\n                            ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ThriftFramedMessage::SharedCtor
      Src: /src/brpc/src/brpc/thrift_message.cpp:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: brpc::ThriftFramedMessage::ThriftFramedMessage
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftFramedMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::ThriftFramedMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: brpc::ThriftFramedMessage::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::SharedCtor()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/thrift_message.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 42
    functionName: ThriftFramedMessage::~ThriftFramedMessage()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::~ThriftFramedMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::ThriftFramedMessage::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::SharedDtor()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/thrift_message.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 54
    functionName: brpc::ThriftFramedMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::Clear()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/thrift_message.cpp:58,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_message.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: brpc::ThriftFramedMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - size
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t ThriftFramedMessage::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/thrift_message.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/thrift_message.cpp:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ThriftFramedMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: brpc::ThriftFramedMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - CHECK_NE
    - LOG
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::MergeFrom(const ThriftFramedMessage& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:71,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:72,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:73,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/thrift_message.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - other
    argTypes:
    - ThriftFramedMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: brpc::ThriftFramedMessage::Swap
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage::Swap(ThriftFramedMessage* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/thrift_message.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 83
    functionName: brpc::ThriftFramedMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata ThriftFramedMessage::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::_thrift_method_name::assign
      Src: /src/brpc/src/brpc/thrift_message.cpp:90,1
    - Dst: brpc::ThriftStub::CallMethod
      Src: /src/brpc/src/brpc/thrift_message.cpp:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 5
    argNames:
    - method_name
    - cntl
    - req
    - res
    - done
    argTypes:
    - char*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 92
    functionName: brpc::ThriftStub::CallMethod
    functionSourceFile: /src/brpc/src/brpc/thrift_message.cpp
    functionUses: 2
    functionsReached:
    - brpc::ThriftStub::CallMethod
    - Controller*::_thrift_method_name::assign
    linkageType: ''
    returnType: void
    signature: "void ThriftStub::CallMethod(const char* method_name,\n                            Controller*
      cntl,\n                            const ThriftFramedMessage* req,\n                            ThriftFramedMessage*
      res,\n                            ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/retry_policy.cpp:26,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 5
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: brpc::RpcRetryPolicy::DoRetry
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - Controller*::ErrorCode
    linkageType: ''
    returnType: bool
    signature: bool RpcRetryPolicy::DoRetry(const Controller* controller) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RpcRetryPolicy::RpcRetryPolicy
      Src: /src/brpc/src/brpc/retry_policy.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: brpc::init_default_policy
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - RpcRetryPolicy::RpcRetryPolicy
    linkageType: ''
    returnType: void
    signature: void init_default_policy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/retry_policy.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: brpc::DefaultRetryPolicy
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: RetryPolicy
    signature: RetryPolicy * DefaultRetryPolicy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::deadline_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:60,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 65
    functionName: brpc::RpcRetryPolicyWithFixedBackoff::GetBackoffTimeMs
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Controller*::deadline_us
    linkageType: ''
    returnType: int32_t
    signature: "int32_t RpcRetryPolicyWithFixedBackoff::GetBackoffTimeMs(\n    const
      Controller* controller) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::deadline_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:70,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:70,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/src/brpc/retry_policy.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 76
    functionName: brpc::RpcRetryPolicyWithJitteredBackoff::GetBackoffTimeMs
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Controller*::deadline_us
    - butil::fast_rand_in
    linkageType: ''
    returnType: int32_t
    signature: "int32_t RpcRetryPolicyWithJitteredBackoff::GetBackoffTimeMs(\n    const
      Controller* controller) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/retry_policy.cpp:26,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 5
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: brpc::RpcRetryPolicy::DoRetry
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - Controller*::ErrorCode
    linkageType: ''
    returnType: bool
    signature: bool RpcRetryPolicy::DoRetry(const Controller* controller) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RpcRetryPolicy::RpcRetryPolicy
      Src: /src/brpc/src/brpc/retry_policy.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: brpc::init_default_policy
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - RpcRetryPolicy::RpcRetryPolicy
    linkageType: ''
    returnType: void
    signature: void init_default_policy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/retry_policy.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: brpc::DefaultRetryPolicy
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: RetryPolicy
    signature: RetryPolicy * DefaultRetryPolicy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::deadline_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:60,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 65
    functionName: brpc::RpcRetryPolicyWithFixedBackoff::GetBackoffTimeMs
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Controller*::deadline_us
    linkageType: ''
    returnType: int32_t
    signature: "int32_t RpcRetryPolicyWithFixedBackoff::GetBackoffTimeMs(\n    const
      Controller* controller) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::deadline_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:70,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/retry_policy.cpp:70,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/src/brpc/retry_policy.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 76
    functionName: brpc::RpcRetryPolicyWithJitteredBackoff::GetBackoffTimeMs
    functionSourceFile: /src/brpc/src/brpc/retry_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Controller*::deadline_us
    - butil::fast_rand_in
    linkageType: ''
    returnType: int32_t
    signature: "int32_t RpcRetryPolicyWithJitteredBackoff::GetBackoffTimeMs(\n    const
      Controller* controller) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reserve
      Src: /src/brpc/src/brpc/server_id.cpp:25,1
    - Dst: init
      Src: /src/brpc/src/brpc/server_id.cpp:26,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server_id.cpp:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 29
    functionName: brpc::ServerId2SocketIdMapper::ServerId2SocketIdMapper
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - reserve
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void ServerId2SocketIdMapper::ServerId2SocketIdMapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: ServerId2SocketIdMapper::~ServerId2SocketIdMapper()
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId2SocketIdMapper::~ServerId2SocketIdMapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::ServerId2SocketIdMapper::AddServer
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ServerId2SocketIdMapper::AddServer(const ServerId& server)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server_id.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server_id.cpp:41,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server_id.cpp:45,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ServerId2SocketIdMapper::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - seek
    - erase
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ServerId2SocketIdMapper::RemoveServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/server_id.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/server_id.cpp:54,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/server_id.cpp:55,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server_id.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: "& ServerId2SocketIdMapper::AddServers(\n    const std::vector<ServerId>&
      servers)"
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - size
    - clear
    - AddServer
    linkageType: ''
    returnType: std::vector<SocketId>
    signature: "std::vector<SocketId> & ServerId2SocketIdMapper::AddServers(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/server_id.cpp:64,1
    - Dst: size
      Src: /src/brpc/src/brpc/server_id.cpp:65,1
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/server_id.cpp:66,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server_id.cpp:67,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: "& ServerId2SocketIdMapper::RemoveServers(\n    const std::vector<ServerId>&
      servers)"
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - size
    - clear
    - RemoveServer
    linkageType: ''
    returnType: std::vector<SocketId>
    signature: "std::vector<SocketId> & ServerId2SocketIdMapper::RemoveServers(\n
      \   const std::vector<ServerId>& servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reserve
      Src: /src/brpc/src/brpc/server_id.cpp:25,1
    - Dst: init
      Src: /src/brpc/src/brpc/server_id.cpp:26,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server_id.cpp:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 29
    functionName: brpc::ServerId2SocketIdMapper::ServerId2SocketIdMapper
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - reserve
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void ServerId2SocketIdMapper::ServerId2SocketIdMapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: ServerId2SocketIdMapper::~ServerId2SocketIdMapper()
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId2SocketIdMapper::~ServerId2SocketIdMapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::ServerId2SocketIdMapper::AddServer
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ServerId2SocketIdMapper::AddServer(const ServerId& server)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server_id.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server_id.cpp:41,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server_id.cpp:45,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ServerId2SocketIdMapper::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - seek
    - erase
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ServerId2SocketIdMapper::RemoveServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/server_id.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/server_id.cpp:54,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/server_id.cpp:55,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server_id.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 60
    functionName: "& ServerId2SocketIdMapper::AddServers(\n    const std::vector<ServerId>&
      servers)"
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - size
    - clear
    - AddServer
    linkageType: ''
    returnType: std::vector<SocketId>
    signature: "std::vector<SocketId> & ServerId2SocketIdMapper::AddServers(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/server_id.cpp:64,1
    - Dst: size
      Src: /src/brpc/src/brpc/server_id.cpp:65,1
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/server_id.cpp:66,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server_id.cpp:67,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: "& ServerId2SocketIdMapper::RemoveServers(\n    const std::vector<ServerId>&
      servers)"
    functionSourceFile: /src/brpc/src/brpc/server_id.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - size
    - clear
    - RemoveServer
    linkageType: ''
    returnType: std::vector<SocketId>
    signature: "std::vector<SocketId> & ServerId2SocketIdMapper::RemoveServers(\n
      \   const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::Extension::Extension
    functionSourceFile: /src/brpc/src/brpc/extension.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Extension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::Extension::Extension
    functionSourceFile: /src/brpc/src/brpc/extension.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Extension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ~StreamCreator()
    functionSourceFile: /src/brpc/src/brpc/stream_creator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StreamCreator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~StreamUserData()
    functionSourceFile: /src/brpc/src/brpc/stream_creator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StreamUserData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ~StreamCreator()
    functionSourceFile: /src/brpc/src/brpc/stream_creator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StreamCreator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: ~StreamUserData()
    functionSourceFile: /src/brpc/src/brpc/stream_creator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~StreamUserData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~HealthReporter()
    functionSourceFile: /src/brpc/src/brpc/health_reporter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HealthReporter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~HealthReporter()
    functionSourceFile: /src/brpc/src/brpc/health_reporter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HealthReporter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - f
    argTypes:
    - Forbidden
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: brpc::IOEventData::IOEventData
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOEventData(Forbidden f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: input_cb
      Src: /src/brpc/src/brpc/event_dispatcher.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: brpc::IOEventData::CallInputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - input_cb
    linkageType: ''
    returnType: int
    signature: "int CallInputEventCallback(uint32_t events,\n                               const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: output_cb
      Src: /src/brpc/src/brpc/event_dispatcher.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: brpc::IOEventData::CallOutputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - output_cb
    linkageType: ''
    returnType: int
    signature: "int CallOutputEventCallback(uint32_t events,\n                                const
      bthread_attr_t& thread_attr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/event_dispatcher.h:153,1
    - Dst: EventDataUniquePtr::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:157,1
    - Dst: EventDataUniquePtr::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - event_data_id
    - events
    - ' thread_attr'
    argTypes:
    - IOEventDataId
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 159
    functionName: brpc::EventDispatcher::OnEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - EventDataUniquePtr::CallOutputEventCallback
    - EventDataUniquePtr::CallInputEventCallback
    linkageType: ''
    returnType: int
    signature: "int OnEvent(IOEventDataId event_data_id, uint32_t events,\n                       const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::OnEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - event_data_id
    - events
    - ' thread_attr'
    argTypes:
    - IOEventDataId
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 165
    functionName: brpc::EventDispatcher::CallInputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::OnEvent
    linkageType: ''
    returnType: int
    signature: "int CallInputEventCallback(IOEventDataId event_data_id,\n                                      uint32_t
      events,\n                                      const bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::OnEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - event_data_id
    - events
    - ' thread_attr'
    argTypes:
    - IOEventDataId
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 2
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: brpc::EventDispatcher::CallOutputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::OnEvent
    linkageType: ''
    returnType: int
    signature: "int CallOutputEventCallback(IOEventDataId event_data_id,\n                                       uint32_t
      events,\n                                       const bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/event_dispatcher.h:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: brpc::IOEvent::IOEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void IOEvent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Reset
      Src: /src/brpc/src/brpc/event_dispatcher.h:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: ~IOEvent()
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::Reset
    linkageType: ''
    returnType: void
    signature: void ~IOEvent()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:206,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/event_dispatcher.h:210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:211,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 5
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: brpc::IOEvent::Init
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::Stream::Create
    - LOG
    linkageType: ''
    returnType: int
    signature: int Init(void* user_data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::SetFailedById
      Src: /src/brpc/src/brpc/event_dispatcher.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 223
    functionName: brpc::IOEvent::Reset
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::VersionedRefWithId<T>::SetFailedById
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:228,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    functionName: brpc::IOEvent::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int AddConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:238,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:241,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 242
    functionName: brpc::IOEvent::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int RemoveConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:247,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 252
    functionName: brpc::IOEvent::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int RegisterEvent(int fd, bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:257,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: brpc::IOEvent::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int UnregisterEvent(int fd, bool pollin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bthread_tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: brpc::IOEvent::set_bthread_tag
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bthread_tag(bthread_tag_t bthread_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 269
    functionName: brpc::IOEvent::bthread_tag
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_tag_t
    signature: bthread_tag_t bthread_tag() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EventPipe::OnInputEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - user_data
    - events
    - ' thread_attr'
    argTypes:
    - void*
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 281
    functionName: brpc::IOEvent::OnInputEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - EventPipe::OnInputEvent
    linkageType: ''
    returnType: int
    signature: "int OnInputEvent(void* user_data, uint32_t events,\n                            const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EventPipe::OnOutputEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - user_data
    - events
    - ' thread_attr'
    argTypes:
    - void*
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 292
    functionName: brpc::IOEvent::OnOutputEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - EventPipe::OnOutputEvent
    linkageType: ''
    returnType: int
    signature: "int OnOutputEvent(void* user_data, uint32_t events,\n                             const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - f
    argTypes:
    - Forbidden
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: brpc::IOEventData::IOEventData
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOEventData(Forbidden f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: input_cb
      Src: /src/brpc/src/brpc/event_dispatcher.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: brpc::IOEventData::CallInputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - input_cb
    linkageType: ''
    returnType: int
    signature: "int CallInputEventCallback(uint32_t events,\n                               const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: output_cb
      Src: /src/brpc/src/brpc/event_dispatcher.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: brpc::IOEventData::CallOutputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - output_cb
    linkageType: ''
    returnType: int
    signature: "int CallOutputEventCallback(uint32_t events,\n                                const
      bthread_attr_t& thread_attr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/event_dispatcher.h:153,1
    - Dst: EventDataUniquePtr::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:157,1
    - Dst: EventDataUniquePtr::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - event_data_id
    - events
    - ' thread_attr'
    argTypes:
    - IOEventDataId
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 159
    functionName: brpc::EventDispatcher::OnEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 2
    functionsReached:
    - brpc::SetTrackMeAddress
    - EventDataUniquePtr::CallOutputEventCallback
    - EventDataUniquePtr::CallInputEventCallback
    linkageType: ''
    returnType: int
    signature: "int OnEvent(IOEventDataId event_data_id, uint32_t events,\n                       const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::OnEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - event_data_id
    - events
    - ' thread_attr'
    argTypes:
    - IOEventDataId
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 161
    functionDepth: 2
    functionLinenumber: 161
    functionLinenumberEnd: 165
    functionName: brpc::EventDispatcher::CallInputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::OnEvent
    linkageType: ''
    returnType: int
    signature: "int CallInputEventCallback(IOEventDataId event_data_id,\n                                      uint32_t
      events,\n                                      const bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::OnEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - event_data_id
    - events
    - ' thread_attr'
    argTypes:
    - IOEventDataId
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 2
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: brpc::EventDispatcher::CallOutputEventCallback
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::OnEvent
    linkageType: ''
    returnType: int
    signature: "int CallOutputEventCallback(IOEventDataId event_data_id,\n                                       uint32_t
      events,\n                                       const bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/event_dispatcher.h:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: brpc::IOEvent::IOEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void IOEvent()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/event_dispatcher.h:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: ~IOEvent()
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void ~IOEvent()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:206,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/event_dispatcher.h:210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:211,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 5
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: brpc::IOEvent::Init
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::Stream::Create
    - LOG
    linkageType: ''
    returnType: int
    signature: int Init(void* user_data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::SetFailedById
      Src: /src/brpc/src/brpc/event_dispatcher.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 223
    functionName: brpc::IOEvent::Reset
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - brpc::VersionedRefWithId<T>::SetFailedById
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:228,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    functionName: brpc::IOEvent::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int AddConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:238,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:241,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 242
    functionName: brpc::IOEvent::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int RemoveConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:247,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 252
    functionName: brpc::IOEvent::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int RegisterEvent(int fd, bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:257,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:260,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: brpc::IOEvent::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - LOG
    - GetGlobalEventDispatcher
    linkageType: ''
    returnType: int
    signature: int UnregisterEvent(int fd, bool pollin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bthread_tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: brpc::IOEvent::set_bthread_tag
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bthread_tag(bthread_tag_t bthread_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 269
    functionName: brpc::IOEvent::bthread_tag
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_tag_t
    signature: bthread_tag_t bthread_tag() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EventPipe::OnInputEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - user_data
    - events
    - ' thread_attr'
    argTypes:
    - void*
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 281
    functionName: brpc::IOEvent::OnInputEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - EventPipe::OnInputEvent
    linkageType: ''
    returnType: int
    signature: "int OnInputEvent(void* user_data, uint32_t events,\n                            const
      bthread_attr_t& thread_attr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EventPipe::OnOutputEvent
      Src: /src/brpc/src/brpc/event_dispatcher.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - user_data
    - events
    - ' thread_attr'
    argTypes:
    - void*
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 292
    functionName: brpc::IOEvent::OnOutputEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - EventPipe::OnOutputEvent
    linkageType: ''
    returnType: int
    signature: "int OnOutputEvent(void* user_data, uint32_t events,\n                             const
      bthread_attr_t& thread_attr)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: kqueue
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:30,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:32,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:35,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:35,1
    - Dst: pipe
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:39,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: brpc::EventDispatcher::EventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - butil::make_close_on_exec
    - kqueue
    - CHECK_EQ
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::EventDispatcher()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:46,1
    - Dst: Join
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:47,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:49,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:53,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: EventDispatcher::~EventDispatcher()
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - close
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::~EventDispatcher()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:65,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:86,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:86,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 90
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - berror
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::Start(const bthread_attr_t* thread_attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: brpc::EventDispatcher::Running
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool EventDispatcher::Running() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:101,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 105
    functionName: brpc::EventDispatcher::Stop
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Stop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 112
    functionName: brpc::EventDispatcher::Join
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Join()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:123,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:125,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:129,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:131,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 136
    functionName: brpc::EventDispatcher::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::RegisterEvent(IOEventDataId event_data_id,\n
      \                                  int fd, bool pollin)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:141,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:142,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:146,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 151
    functionName: brpc::EventDispatcher::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::UnregisterEvent(IOEventDataId event_data_id,\n
      \                                    int fd, bool pollin)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:159,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 162
    functionName: brpc::EventDispatcher::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::AddConsumer(IOEventDataId event_data_id, int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:176,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:177,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:178,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 181
    functionName: brpc::EventDispatcher::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::RemoveConsumer(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::Run
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 186
    functionName: brpc::EventDispatcher::RunThis
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::Run
    linkageType: ''
    returnType: void
    signature: void * EventDispatcher::RunThis(void* arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:191,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:191,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:203,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:208,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:210,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:212,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:217,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:219,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:221,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 188
    functionDepth: 3
    functionLinenumber: 188
    functionLinenumberEnd: 225
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 1
    functionsReached:
    - ARRAY_SIZE
    - brpc::EventDispatcher::CallOutputEventCallback
    - butil::cpuwide_time_ns
    - kevent
    - brpc::EventDispatcher::CallInputEventCallback
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: kqueue
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:30,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:32,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:35,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:35,1
    - Dst: pipe
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:39,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: brpc::EventDispatcher::EventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - butil::make_close_on_exec
    - kqueue
    - CHECK_EQ
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::EventDispatcher()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:46,1
    - Dst: Join
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:47,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:49,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:53,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: EventDispatcher::~EventDispatcher()
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - close
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::~EventDispatcher()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:65,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:86,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:86,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 90
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - berror
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::Start(const bthread_attr_t* thread_attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: brpc::EventDispatcher::Running
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool EventDispatcher::Running() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:101,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 105
    functionName: brpc::EventDispatcher::Stop
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Stop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 112
    functionName: brpc::EventDispatcher::Join
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Join()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:123,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:125,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:129,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:131,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 136
    functionName: brpc::EventDispatcher::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::RegisterEvent(IOEventDataId event_data_id,\n
      \                                  int fd, bool pollin)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:141,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:142,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:146,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 151
    functionName: brpc::EventDispatcher::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::UnregisterEvent(IOEventDataId event_data_id,\n
      \                                    int fd, bool pollin)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:159,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 162
    functionName: brpc::EventDispatcher::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::AddConsumer(IOEventDataId event_data_id, int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:176,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:177,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:178,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 181
    functionName: brpc::EventDispatcher::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - EV_SET
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::RemoveConsumer(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::Run
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 186
    functionName: brpc::EventDispatcher::RunThis
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::Run
    linkageType: ''
    returnType: void
    signature: void * EventDispatcher::RunThis(void* arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:191,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:191,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:203,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:208,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:210,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:212,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:217,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:219,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:221,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 188
    functionDepth: 3
    functionLinenumber: 188
    functionLinenumberEnd: 225
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 2
    functionsReached:
    - ARRAY_SIZE
    - brpc::EventDispatcher::CallOutputEventCallback
    - butil::cpuwide_time_ns
    - kevent
    - brpc::EventDispatcher::CallInputEventCallback
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket_inl.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - progress
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: brpc::Socket::MoreReadEvents
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool Socket::MoreReadEvents(int* progress)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_inl.h:34,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket_inl.h:35,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/socket_inl.h:40,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/socket_inl.h:41,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket_inl.h:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 44
    functionName: brpc::Socket::SetLogOff
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - remote_side
    - butil::endpoint2str
    - SetFailed
    - exchange
    - fd
    linkageType: ''
    returnType: void
    signature: void Socket::SetLogOff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_inl.h:47,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket_inl.h:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::Socket::IsAvailable
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool Socket::IsAvailable() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/socket_inl.h:54,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket_inl.h:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: brpc::Socket::PostponeEOF
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - fetch_add
    - CreatedByConnect
    linkageType: ''
    returnType: void
    signature: void Socket::PostponeEOF()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/socket_inl.h:60,1
    - Dst: brpc::Socket::CheckEOFInternal
      Src: /src/brpc/src/brpc/socket_inl.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::Socket::CheckEOF
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - brpc::Socket::CheckEOFInternal
    - CreatedByConnect
    linkageType: ''
    returnType: void
    signature: void Socket::CheckEOF()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket_inl.h:66,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket_inl.h:68,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/socket_inl.h:70,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket_inl.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 72
    functionName: brpc::Socket::CheckEOFInternal
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 1
    functionsReached:
    - SetFailed
    - description
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void Socket::CheckEOFInternal()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_or
      Src: /src/brpc/src/brpc/socket_inl.h:75,1
    - Dst: brpc::Socket::CheckEOFInternal
      Src: /src/brpc/src/brpc/socket_inl.h:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 74
    functionDepth: 2
    functionLinenumber: 74
    functionLinenumberEnd: 80
    functionName: brpc::Socket::SetEOF
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - fetch_or
    - brpc::Socket::CheckEOFInternal
    linkageType: ''
    returnType: void
    signature: void Socket::SetEOF()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_inl.h:83,1
    - Dst: Destroyable*::Destroy
      Src: /src/brpc/src/brpc/socket_inl.h:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - new_context
    argTypes:
    - Destroyable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 88
    functionName: brpc::Socket::reset_parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - Destroyable*::Destroy
    - exchange
    linkageType: ''
    returnType: void
    signature: void Socket::reset_parsing_context(Destroyable* new_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_inl.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: brpc::Socket::release_parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - exchange
    linkageType: ''
    returnType: Destroyable
    signature: Destroyable * Socket::release_parsing_context()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket_inl.h:97,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/socket_inl.h:102,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/socket_inl.h:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - T**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 106
    functionName: brpc::Socket::initialize_parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - compare_exchange_strong
    - Destroy
    linkageType: ''
    returnType: bool
    signature: bool Socket::initialize_parsing_context(T** ctx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_inl.h:110,1
    - Dst: std::deque<PipelinedInfo>::deque<PipelinedInfo>
      Src: /src/brpc/src/brpc/socket_inl.h:112,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/socket_inl.h:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' pi'
    argTypes:
    - PipelinedInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 115
    functionName: brpc::Socket::PushPipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - push_back
    - std::deque<PipelinedInfo>::deque<PipelinedInfo>
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void Socket::PushPipelinedInfo(const PipelinedInfo& pi)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_inl.h:118,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket_inl.h:119,1
    - Dst: front
      Src: /src/brpc/src/brpc/socket_inl.h:120,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/socket_inl.h:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - info
    argTypes:
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 125
    functionName: brpc::Socket::PopPipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - front
    - pop_front
    - empty
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool Socket::PopPipelinedInfo(PipelinedInfo* info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_inl.h:128,1
    - Dst: push_front
      Src: /src/brpc/src/brpc/socket_inl.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' pi'
    argTypes:
    - PipelinedInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 132
    functionName: brpc::Socket::GivebackPipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - push_front
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void Socket::GivebackPipelinedInfo(const PipelinedInfo& pi)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::Socket::ValidFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Socket::ValidFileDescriptor(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_inl.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 140
    functionName: brpc::Socket::GetSharedPart
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: Socket::SharedPart
    signature: Socket::SharedPart * Socket::GetSharedPart() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Socket::GetSharedPart
      Src: /src/brpc/src/brpc/socket_inl.h:143,1
    - Dst: GetOrNewSharedPartSlower
      Src: /src/brpc/src/brpc/socket_inl.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::Socket::GetOrNewSharedPart
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - brpc::Socket::GetSharedPart
    - GetOrNewSharedPartSlower
    linkageType: ''
    returnType: Socket::SharedPart
    signature: Socket::SharedPart * Socket::GetOrNewSharedPart()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket_inl.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - progress
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: brpc::Socket::MoreReadEvents
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool Socket::MoreReadEvents(int* progress)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_inl.h:34,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket_inl.h:35,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/socket_inl.h:40,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/socket_inl.h:41,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket_inl.h:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 44
    functionName: brpc::Socket::SetLogOff
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - remote_side
    - butil::endpoint2str
    - SetFailed
    - exchange
    - fd
    linkageType: ''
    returnType: void
    signature: void Socket::SetLogOff()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_inl.h:47,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket_inl.h:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::Socket::IsAvailable
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool Socket::IsAvailable() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/socket_inl.h:54,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket_inl.h:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: brpc::Socket::PostponeEOF
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - fetch_add
    - CreatedByConnect
    linkageType: ''
    returnType: void
    signature: void Socket::PostponeEOF()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/socket_inl.h:60,1
    - Dst: brpc::Socket::CheckEOFInternal
      Src: /src/brpc/src/brpc/socket_inl.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::Socket::CheckEOF
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - brpc::Socket::CheckEOFInternal
    - CreatedByConnect
    linkageType: ''
    returnType: void
    signature: void Socket::CheckEOF()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket_inl.h:66,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket_inl.h:68,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/socket_inl.h:70,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket_inl.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 72
    functionName: brpc::Socket::CheckEOFInternal
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 3
    functionsReached:
    - SetFailed
    - description
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void Socket::CheckEOFInternal()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_or
      Src: /src/brpc/src/brpc/socket_inl.h:75,1
    - Dst: brpc::Socket::CheckEOFInternal
      Src: /src/brpc/src/brpc/socket_inl.h:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 74
    functionDepth: 2
    functionLinenumber: 74
    functionLinenumberEnd: 80
    functionName: brpc::Socket::SetEOF
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - fetch_or
    - brpc::Socket::CheckEOFInternal
    linkageType: ''
    returnType: void
    signature: void Socket::SetEOF()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_inl.h:83,1
    - Dst: Destroyable*::Destroy
      Src: /src/brpc/src/brpc/socket_inl.h:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - new_context
    argTypes:
    - Destroyable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 88
    functionName: brpc::Socket::reset_parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - Destroyable*::Destroy
    - exchange
    linkageType: ''
    returnType: void
    signature: void Socket::reset_parsing_context(Destroyable* new_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_inl.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: brpc::Socket::release_parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - exchange
    linkageType: ''
    returnType: Destroyable
    signature: Destroyable * Socket::release_parsing_context()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket_inl.h:97,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/socket_inl.h:102,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/socket_inl.h:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - T**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 106
    functionName: brpc::Socket::initialize_parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - compare_exchange_strong
    - Destroy
    linkageType: ''
    returnType: bool
    signature: bool Socket::initialize_parsing_context(T** ctx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_inl.h:110,1
    - Dst: std::deque<PipelinedInfo>::deque<PipelinedInfo>
      Src: /src/brpc/src/brpc/socket_inl.h:112,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/socket_inl.h:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' pi'
    argTypes:
    - PipelinedInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 115
    functionName: brpc::Socket::PushPipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - push_back
    - std::deque<PipelinedInfo>::deque<PipelinedInfo>
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void Socket::PushPipelinedInfo(const PipelinedInfo& pi)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_inl.h:118,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket_inl.h:119,1
    - Dst: front
      Src: /src/brpc/src/brpc/socket_inl.h:120,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/socket_inl.h:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - info
    argTypes:
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 125
    functionName: brpc::Socket::PopPipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - front
    - pop_front
    - empty
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool Socket::PopPipelinedInfo(PipelinedInfo* info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_inl.h:128,1
    - Dst: push_front
      Src: /src/brpc/src/brpc/socket_inl.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' pi'
    argTypes:
    - PipelinedInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 132
    functionName: brpc::Socket::GivebackPipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - push_front
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void Socket::GivebackPipelinedInfo(const PipelinedInfo& pi)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::Socket::ValidFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Socket::ValidFileDescriptor(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_inl.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 140
    functionName: brpc::Socket::GetSharedPart
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 1
    functionsReached:
    - load
    linkageType: ''
    returnType: Socket::SharedPart
    signature: Socket::SharedPart * Socket::GetSharedPart() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Socket::GetSharedPart
      Src: /src/brpc/src/brpc/socket_inl.h:143,1
    - Dst: GetOrNewSharedPartSlower
      Src: /src/brpc/src/brpc/socket_inl.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::Socket::GetOrNewSharedPart
    functionSourceFile: /src/brpc/src/brpc/socket_inl.h
    functionUses: 0
    functionsReached:
    - brpc::Socket::GetSharedPart
    - GetOrNewSharedPartSlower
    linkageType: ''
    returnType: Socket::SharedPart
    signature: Socket::SharedPart * Socket::GetOrNewSharedPart()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 6
    argNames:
    - (
    - fmt
    - ','
    - args
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 45
    functionName: TRACEPRINTF
    functionSourceFile: /src/brpc/src/brpc/traceprintf.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TRACEPRINTF(fmt, args...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::StringToProtocolType
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' type'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::StringToProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 1
    functionsReached:
    - brpc::StringToProtocolType
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType StringToProtocolType(const butil::StringPiece& type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::AdaptiveProtocolType::AdaptiveProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveProtocolType()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::AdaptiveProtocolType::AdaptiveProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveProtocolType(ProtocolType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::AdaptiveProtocolType::AdaptiveProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveProtocolType(butil::StringPiece name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~AdaptiveProtocolType()
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AdaptiveProtocolType()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:52,1
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: operator=(ProtocolType type)
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void operator=(ProtocolType type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:58,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:60,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:61,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:61,1
    - Dst: StringToProtocolType
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:63,1
    - Dst: assign
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:65,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:65,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:65,1
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:67,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:69,1
    - Dst: assign
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:70,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:70,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:70,1
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:72,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - name
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 74
    functionName: operator=(butil::StringPiece name)
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached:
    - butil::StringPiece::substr
    - assign
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::data
    - clear
    - butil::StringPiece::empty
    - StringToProtocolType
    - butil::StringPiece::size
    - butil::StringPiece::find
    linkageType: ''
    returnType: void
    signature: void operator=(butil::StringPiece name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: operator ProtocolType() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator ProtocolType() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:79,1
    - Dst: ProtocolTypeToString
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:79,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::AdaptiveProtocolType::name
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - c_str
    - empty
    - ProtocolTypeToString
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: brpc::AdaptiveProtocolType::has_param
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool has_param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: '& param() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::StringToProtocolType
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' type'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::StringToProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - brpc::StringToProtocolType
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType StringToProtocolType(const butil::StringPiece& type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::AdaptiveProtocolType::AdaptiveProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveProtocolType()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::AdaptiveProtocolType::AdaptiveProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveProtocolType(ProtocolType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::AdaptiveProtocolType::AdaptiveProtocolType
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveProtocolType(butil::StringPiece name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~AdaptiveProtocolType()
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AdaptiveProtocolType()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:52,1
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: operator=(ProtocolType type)
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void operator=(ProtocolType type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:58,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:60,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:61,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:61,1
    - Dst: StringToProtocolType
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:63,1
    - Dst: assign
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:65,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:65,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:65,1
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:67,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:69,1
    - Dst: assign
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:70,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:70,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:70,1
    - Dst: clear
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:72,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - name
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 74
    functionName: operator=(butil::StringPiece name)
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached:
    - butil::StringPiece::substr
    - assign
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::data
    - clear
    - butil::StringPiece::empty
    - StringToProtocolType
    - butil::StringPiece::size
    - butil::StringPiece::find
    linkageType: ''
    returnType: void
    signature: void operator=(butil::StringPiece name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: operator ProtocolType() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator ProtocolType() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:79,1
    - Dst: ProtocolTypeToString
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:79,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::AdaptiveProtocolType::name
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - c_str
    - empty
    - ProtocolTypeToString
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/adaptive_protocol_type.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: brpc::AdaptiveProtocolType::has_param
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool has_param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: '& param() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & param() const
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 1
    argNames:
    - e
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 44
    functionName: brpc::ParseErrorToString
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ParseErrorToString(ParseError e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - err
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 53
    functionName: brpc::ParseResult::ParseResult
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParseResult(ParseError err)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - err
    - user_desc
    argTypes:
    - ParseError
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: brpc::ParseResult::ParseResult
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParseResult(ParseError err, const char* user_desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: brpc::ParseResult::ParseResult
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParseResult(InputMessageBase* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: brpc::ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 46
    functionsReached: []
    linkageType: ''
    returnType: ParseError
    signature: ParseError error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseErrorToString
      Src: /src/brpc/src/brpc/parse_result.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: brpc::ParseResult::error_str
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseErrorToString
    linkageType: ''
    returnType: char
    signature: char * error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/src/brpc/parse_result.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: brpc::ParseResult::is_ok
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 12
    functionsReached:
    - brpc::ParseResult::error
    linkageType: ''
    returnType: bool
    signature: bool is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::ParseResult::message
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 54
    functionsReached: []
    linkageType: ''
    returnType: InputMessageBase
    signature: InputMessageBase * message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseResult
      Src: /src/brpc/src/brpc/parse_result.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::MakeParseError
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseResult
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult MakeParseError(ParseError err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseResult
      Src: /src/brpc/src/brpc/parse_result.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - user_desc
    argTypes:
    - ParseError
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: brpc::MakeParseError
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseResult
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult MakeParseError(ParseError err, const char* user_desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseResult
      Src: /src/brpc/src/brpc/parse_result.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: brpc::MakeMessage
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseResult
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult MakeMessage(InputMessageBase* msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 1
    argNames:
    - e
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 44
    functionName: brpc::ParseErrorToString
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ParseErrorToString(ParseError e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - err
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 53
    functionName: brpc::ParseResult::ParseResult
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParseResult(ParseError err)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - err
    - user_desc
    argTypes:
    - ParseError
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: brpc::ParseResult::ParseResult
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParseResult(ParseError err, const char* user_desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: brpc::ParseResult::ParseResult
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParseResult(InputMessageBase* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: brpc::ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 47
    functionsReached: []
    linkageType: ''
    returnType: ParseError
    signature: ParseError error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseErrorToString
      Src: /src/brpc/src/brpc/parse_result.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: brpc::ParseResult::error_str
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseErrorToString
    linkageType: ''
    returnType: char
    signature: char * error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/src/brpc/parse_result.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: brpc::ParseResult::is_ok
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 12
    functionsReached:
    - brpc::ParseResult::error
    linkageType: ''
    returnType: bool
    signature: bool is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::ParseResult::message
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 54
    functionsReached: []
    linkageType: ''
    returnType: InputMessageBase
    signature: InputMessageBase * message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseResult
      Src: /src/brpc/src/brpc/parse_result.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::MakeParseError
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseResult
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult MakeParseError(ParseError err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseResult
      Src: /src/brpc/src/brpc/parse_result.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - user_desc
    argTypes:
    - ParseError
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: brpc::MakeParseError
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseResult
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult MakeParseError(ParseError err, const char* user_desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseResult
      Src: /src/brpc/src/brpc/parse_result.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: brpc::MakeMessage
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 0
    functionsReached:
    - ParseResult
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult MakeMessage(InputMessageBase* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: brpc::RedisReply::type
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RedisReplyType
    signature: RedisReplyType type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/redis_reply.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: '& operator<<(std::ostream& os, const RedisReply& r)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RedisReply& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: brpc::RedisReply::Reset
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisReply::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arena
    argTypes:
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::RedisReply::RedisReply
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::RedisReply(butil::Arena* arena)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: brpc::RedisReply::is_nil
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_nil() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 190
    functionName: brpc::RedisReply::is_error
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: brpc::RedisReply::is_integer
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_integer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 193
    functionName: brpc::RedisReply::is_string
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 194
    functionName: brpc::RedisReply::is_array
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_array() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/src/brpc/redis_reply.h:197,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:200,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:200,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 203
    functionName: brpc::RedisReply::integer
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - RedisReplyTypeToString
    - brpc::RedisReply::is_integer
    - CHECK
    linkageType: ''
    returnType: int64_t
    signature: int64_t RedisReply::integer() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:207,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: brpc::RedisReply::SetNullArray
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetNullArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 219
    functionName: brpc::RedisReply::SetNullString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetNullString()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: brpc::RedisReply::SetStatus
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetStatus(const butil::StringPiece& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_reply.h:226,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:227,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 229
    functionName: brpc::RedisReply::FormatStatus
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - va_start
    - brpc::RedisReply::FormatStringImpl
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatStatus(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 233
    functionName: brpc::RedisReply::SetError
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetError(const butil::StringPiece& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_reply.h:236,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:237,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 239
    functionName: brpc::RedisReply::FormatError
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - va_start
    - brpc::RedisReply::FormatStringImpl
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatError(const char* fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:243,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 248
    functionName: brpc::RedisReply::SetInteger
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetInteger(int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 252
    functionName: brpc::RedisReply::SetString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetString(const butil::StringPiece& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_reply.h:255,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:256,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 258
    functionName: brpc::RedisReply::FormatString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - va_start
    - brpc::RedisReply::FormatStringImpl
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatString(const char* fmt, ...)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/src/brpc/redis_reply.h:261,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:268,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:268,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 271
    functionName: brpc::RedisReply::c_str
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - RedisReplyTypeToString
    - brpc::RedisReply::is_string
    - CHECK
    linkageType: ''
    returnType: char
    signature: char * RedisReply::c_str() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/src/brpc/redis_reply.h:274,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:276,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:278,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:281,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:281,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:283,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 284
    functionName: brpc::RedisReply::data
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisReply::is_string
    - CHECK
    - RedisReplyTypeToString
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece RedisReply::data() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/src/brpc/redis_reply.h:287,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:294,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:294,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 297
    functionName: brpc::RedisReply::error_message
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::is_error
    - CHECK
    - RedisReplyTypeToString
    linkageType: ''
    returnType: char
    signature: char * RedisReply::error_message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 301
    functionName: brpc::RedisReply::size
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RedisReply::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: const_cast<RedisReply&>
      Src: /src/brpc/src/brpc/redis_reply.h:304,1
    - Dst: const_cast<const RedisReply*>
      Src: /src/brpc/src/brpc/redis_reply.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 306
    functionName: '& RedisReply::operator[](size_t index)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - const_cast<const RedisReply*>
    - const_cast<RedisReply&>
    linkageType: ''
    returnType: RedisReply
    signature: RedisReply & RedisReply::operator[](size_t index)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_array
      Src: /src/brpc/src/brpc/redis_reply.h:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 314
    functionName: '& RedisReply::operator[](size_t index) const'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - is_array
    linkageType: ''
    returnType: RedisReply
    signature: RedisReply & RedisReply::operator[](size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:317,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:318,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:319,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 323
    functionName: brpc::RedisReply::Swap
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void RedisReply::Swap(RedisReply& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 331
    functionName: brpc::RedisReply::CopyFromSameArena
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisReply::CopyFromSameArena(const RedisReply& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: brpc::RedisReply::type
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RedisReplyType
    signature: RedisReplyType type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/redis_reply.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: '& operator<<(std::ostream& os, const RedisReply& r)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RedisReply& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: brpc::RedisReply::Reset
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisReply::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arena
    argTypes:
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::RedisReply::RedisReply
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::RedisReply(butil::Arena* arena)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: brpc::RedisReply::is_nil
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_nil() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 190
    functionName: brpc::RedisReply::is_error
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: brpc::RedisReply::is_integer
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_integer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 193
    functionName: brpc::RedisReply::is_string
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 194
    functionName: brpc::RedisReply::is_array
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::is_array() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/src/brpc/redis_reply.h:197,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:200,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:200,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 203
    functionName: brpc::RedisReply::integer
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - RedisReplyTypeToString
    - brpc::RedisReply::is_integer
    - CHECK
    linkageType: ''
    returnType: int64_t
    signature: int64_t RedisReply::integer() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:207,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: brpc::RedisReply::SetNullArray
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetNullArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 219
    functionName: brpc::RedisReply::SetNullString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetNullString()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: brpc::RedisReply::SetStatus
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetStatus(const butil::StringPiece& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_reply.h:226,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:227,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 229
    functionName: brpc::RedisReply::FormatStatus
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - va_start
    - brpc::RedisReply::FormatStringImpl
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatStatus(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 233
    functionName: brpc::RedisReply::SetError
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetError(const butil::StringPiece& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_reply.h:236,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:237,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 239
    functionName: brpc::RedisReply::FormatError
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - va_start
    - brpc::RedisReply::FormatStringImpl
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatError(const char* fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.h:243,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 248
    functionName: brpc::RedisReply::SetInteger
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetInteger(int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 252
    functionName: brpc::RedisReply::SetString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetString(const butil::StringPiece& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_reply.h:255,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:256,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 258
    functionName: brpc::RedisReply::FormatString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - va_start
    - brpc::RedisReply::FormatStringImpl
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatString(const char* fmt, ...)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/src/brpc/redis_reply.h:261,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:268,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:268,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 271
    functionName: brpc::RedisReply::c_str
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - RedisReplyTypeToString
    - brpc::RedisReply::is_string
    - CHECK
    linkageType: ''
    returnType: char
    signature: char * RedisReply::c_str() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/src/brpc/redis_reply.h:274,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:276,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:278,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:281,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:281,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:283,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 284
    functionName: brpc::RedisReply::data
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisReply::is_string
    - CHECK
    - RedisReplyTypeToString
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece RedisReply::data() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/src/brpc/redis_reply.h:287,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:294,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:294,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 297
    functionName: brpc::RedisReply::error_message
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::is_error
    - CHECK
    - RedisReplyTypeToString
    linkageType: ''
    returnType: char
    signature: char * RedisReply::error_message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 301
    functionName: brpc::RedisReply::size
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RedisReply::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: const_cast<RedisReply&>
      Src: /src/brpc/src/brpc/redis_reply.h:304,1
    - Dst: const_cast<const RedisReply*>
      Src: /src/brpc/src/brpc/redis_reply.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 306
    functionName: '& RedisReply::operator[](size_t index)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - const_cast<const RedisReply*>
    - const_cast<RedisReply&>
    linkageType: ''
    returnType: RedisReply
    signature: RedisReply & RedisReply::operator[](size_t index)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_array
      Src: /src/brpc/src/brpc/redis_reply.h:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 314
    functionName: '& RedisReply::operator[](size_t index) const'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - is_array
    linkageType: ''
    returnType: RedisReply
    signature: RedisReply & RedisReply::operator[](size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:317,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:318,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:319,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 323
    functionName: brpc::RedisReply::Swap
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void RedisReply::Swap(RedisReply& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 331
    functionName: brpc::RedisReply::CopyFromSameArena
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisReply::CopyFromSameArena(const RedisReply& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - fail_limit
    - success_limit
    - ndone
    - nchan
    - memsize
    - cntl
    - user_done
    argTypes:
    - int
    - int
    - int
    - int
    - int
    - Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 57
    functionName: brpc::ParallelChannelDone::ParallelChannelDone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ParallelChannelDone(int fail_limit, int success_limit,\n                        int
      ndone, int nchan, int memsize,\n                        Controller* cntl, google::protobuf::Closure*
      user_done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: brpc::ParallelChannelDone::SubDone::SubDone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubDone()
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: ~SubDone() override
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubDone() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnSubDoneRun
      Src: /src/brpc/src/brpc/parallel_channel.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: brpc::ParallelChannelDone::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - OnSubDoneRun
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:116,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/parallel_channel.cpp:118,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:123,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/parallel_channel.cpp:125,1
    - Dst: ParallelChannelDone::ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:129,1
    - Dst: Controller*::SaveClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:136,1
    - Dst: auto::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:139,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:139,1
    - Dst: auto::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:140,1
    - Dst: ApplyClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:140,1
    - Dst: auto::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:141,1
    - Dst: allow_done_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:141,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:147,1
    - Dst: auto::sub_done_map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:148,1
    - Dst: auto::sub_done_map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:150,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:153,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 7
    argNames:
    - fail_limit
    - success_limit
    - ndone
    - aps
    - nchan
    - cntl
    - user_done
    argTypes:
    - int
    - int
    - int
    - SubCall*
    - int
    - Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 156
    functionName: brpc::ParallelChannelDone::Create
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - auto::sub_done_map
    - SubDone::SubDone
    - auto::sub_done
    - malloc
    - CHECK_EQ
    - Controller*::SaveClientSettings
    - BAIDU_UNLIKELY
    - ApplyClientSettings
    - is_skip
    - ParallelChannelDone::ParallelChannelDone
    - allow_done_to_run_in_place
    linkageType: ''
    returnType: ParallelChannelDone
    signature: "ParallelChannelDone * Create(\n        int fail_limit, int success_limit,\n
      \       int ndone, const SubCall* aps, int nchan,\n        Controller* cntl,
      google::protobuf::Closure* user_done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:161,1
    - Dst: ParallelChannelDone*::~ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:167,1
    - Dst: free
      Src: /src/brpc/src/brpc/parallel_channel.cpp:168,1
    - Dst: ParallelChannelDone*::~ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:172,1
    - Dst: ParallelChannelDone*::~ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:176,1
    - Dst: free
      Src: /src/brpc/src/brpc/parallel_channel.cpp:177,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - d
    argTypes:
    - ParallelChannelDone*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: brpc::ParallelChannelDone::Destroy
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - ParallelChannelDone*::~ParallelChannelDone
    - ParallelChannelDone*::sub_done
    - free
    linkageType: ''
    returnType: void
    signature: void Destroy(ParallelChannelDone* d)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/parallel_channel.cpp:183,1
    - Dst: _error_text::clear
      Src: /src/brpc/src/brpc/parallel_channel.cpp:188,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/parallel_channel.cpp:190,1
    - Dst: brpc::ParallelChannelDone::OnSubDoneRun
      Src: /src/brpc/src/brpc/parallel_channel.cpp:192,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 193
    functionName: brpc::ParallelChannelDone::Run
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - ErrorCode
    - brpc::ParallelChannelDone::OnSubDoneRun
    - CHECK
    - _error_text::clear
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ParallelChannelDone*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: brpc::ParallelChannelDone::RunOnComplete
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ParallelChannelDone*>
    linkageType: ''
    returnType: void
    signature: void * RunOnComplete(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:202,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 206
    functionName: brpc::ParallelChannelDone::SaveThreadInfoOfCallsite
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - bthread_self
    linkageType: ''
    returnType: void
    signature: void SaveThreadInfoOfCallsite()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:210,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - bthread_self
    linkageType: ''
    returnType: bool
    signature: bool IsSameThreadAsCallMethod() const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: SubDone*::cntl::ErrorCode
      Src: /src/brpc/src/brpc/parallel_channel.cpp:219,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:224,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:228,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:234,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:236,1
    - Dst: SubDone*::cntl::call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:237,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:249,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:258,1
    - Dst: load
      Src: /src/brpc/src/brpc/parallel_channel.cpp:268,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:273,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:273,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:273,1
    - Dst: fetch_or
      Src: /src/brpc/src/brpc/parallel_channel.cpp:282,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/parallel_channel.cpp:288,1
    - Dst: is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:291,1
    - Dst: brpc::ParallelChannelDone::IsSameThreadAsCallMethod
      Src: /src/brpc/src/brpc/parallel_channel.cpp:292,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/parallel_channel.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:299,1
    - Dst: brpc::ParallelChannelDone::OnComplete
      Src: /src/brpc/src/brpc/parallel_channel.cpp:300,1
    - Dst: brpc::ParallelChannelDone::OnComplete
      Src: /src/brpc/src/brpc/parallel_channel.cpp:303,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 36
    argCount: 1
    argNames:
    - fin
    argTypes:
    - SubDone*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 305
    functionName: brpc::ParallelChannelDone::OnSubDoneRun
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - SubDone*::cntl::call_id
    - brpc::ParallelChannelDone::OnComplete
    - brpc::ParallelChannelDone::sub_done
    - load
    - bthread_start_background
    - fetch_add
    - fetch_or
    - brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    - call_id
    - std::atomic_thread_fence
    - bthread_id_error
    - LOG
    - SubDone*::cntl::ErrorCode
    - is_done_allowed_to_run_in_place
    linkageType: ''
    returnType: void
    signature: void OnSubDoneRun(SubDone* fin)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/parallel_channel.cpp:318,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:321,1
    - Dst: SubDone*::cntl::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:323,1
    - Dst: _response::MergeFrom
      Src: /src/brpc/src/brpc/parallel_channel.cpp:326,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:329,1
    - Dst: what
      Src: /src/brpc/src/brpc/parallel_channel.cpp:329,1
    - Dst: SubDone*::merger::Merge
      Src: /src/brpc/src/brpc/parallel_channel.cpp:334,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:343,1
    - Dst: FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:356,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:360,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/parallel_channel.cpp:361,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:371,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:374,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:375,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/parallel_channel.cpp:376,1
    - Dst: _error_text::append
      Src: /src/brpc/src/brpc/parallel_channel.cpp:377,1
    - Dst: _error_text::append
      Src: /src/brpc/src/brpc/parallel_channel.cpp:378,1
    - Dst: _error_text::clear
      Src: /src/brpc/src/brpc/parallel_channel.cpp:389,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:392,1
    - Dst: OnRPCEnd
      Src: /src/brpc/src/brpc/parallel_channel.cpp:396,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:396,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:397,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:399,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:399,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 307
    functionDepth: 5
    functionLinenumber: 307
    functionLinenumberEnd: 400
    functionName: brpc::ParallelChannelDone::OnComplete
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - _response::MergeFrom
    - SubDone*::cntl::FailedInline
    - what
    - CHECK_EQ
    - call_id
    - _error_text::append
    - google::protobuf::Closure*::Run
    - brpc::ParallelChannelDone::sub_done
    - bthread_id_unlock_and_destroy
    - _error_text::clear
    - butil::gettimeofday_us
    - OnRPCEnd
    - Controller*::ErrorCode
    - snprintf
    - SubDone*::merger::Merge
    - Controller*::FailedInline
    - load
    - SetFailed
    - FailedInline
    linkageType: ''
    returnType: void
    signature: void OnComplete()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: brpc::ParallelChannelDone::sub_done_size
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int sub_done_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: brpc::ParallelChannelDone::sub_done
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: SubDone
    signature: SubDone * sub_done(int i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 404
    functionName: brpc::ParallelChannelDone::sub_done
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: SubDone
    signature: SubDone * sub_done(int i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 409
    functionName: '& sub_done_map(int i)'
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<int*>
    linkageType: ''
    returnType: int
    signature: int & sub_done_map(int i)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const int*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: brpc::ParallelChannelDone::sub_done_map
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const int*>
    linkageType: ''
    returnType: int
    signature: int sub_done_map(int i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 415
    functionName: brpc::ParallelChannelDone::sub_channel_size
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int sub_channel_size() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:421,1
    - Dst: brpc::ParallelChannelDone::sub_done_map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:423,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:425,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 429
    functionName: brpc::ParallelChannelDone::sub_channel_controller
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParallelChannelDone::sub_done_map
    - brpc::ParallelChannelDone::sub_done
    linkageType: ''
    returnType: Controller
    signature: Controller * sub_channel_controller(int i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParallelChannelDone::Destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:453,1
    - Dst: static_cast<ParallelChannelDone*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 454
    functionName: brpc::DestroyParallelChannelDone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParallelChannelDone::Destroy
    - static_cast<ParallelChannelDone*>
    linkageType: ''
    returnType: void
    signature: void DestroyParallelChannelDone(google::protobuf::Closure* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const ParallelChannelDone*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:458,1
    - Dst: ParallelChannelDone*::sub_channel_controller
      Src: /src/brpc/src/brpc/parallel_channel.cpp:459,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - i
    argTypes:
    - google::protobuf::Closure*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 460
    functionName: brpc::GetSubControllerOfParallelChannel
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - ParallelChannelDone*::sub_channel_controller
    - static_cast<const ParallelChannelDone*>
    linkageType: ''
    returnType: Controller
    signature: "Controller * GetSubControllerOfParallelChannel(\n    const google::protobuf::Closure*
      c, int i)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - options
    argTypes:
    - ParallelChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 462
    functionDepth: 0
    functionLinenumber: 462
    functionLinenumberEnd: 467
    functionName: brpc::ParallelChannel::Init
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::Init(const ParallelChannelOptions* options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:474,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/parallel_channel.cpp:477,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/parallel_channel.cpp:478,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:485,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 4
    argNames:
    - sub_channel
    - ownership
    - call_mapper
    - merger
    argTypes:
    - ChannelBase*
    - ChannelOwnership
    - CallMapper*
    - ResponseMerger*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 487
    functionName: brpc::ParallelChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 34
    functionsReached:
    - capacity
    - reserve
    - push_back
    - LOG
    linkageType: ''
    returnType: int
    signature: "int ParallelChannel::AddChannel(ChannelBase* sub_channel,\n                                ChannelOwnership
      ownership,\n                                CallMapper* call_mapper,\n                                ResponseMerger*
      merger)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:494,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/parallel_channel.cpp:497,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/parallel_channel.cpp:498,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:505,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 4
    argNames:
    - sub_channel
    - ownership
    - ' call_mapper'
    - ' merger'
    argTypes:
    - ChannelBase*
    - ChannelOwnership
    - butil::intrusive_ptr<CallMapper>
    - butil::intrusive_ptr<ResponseMerger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 507
    functionName: brpc::ParallelChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 34
    functionsReached:
    - capacity
    - reserve
    - push_back
    - LOG
    linkageType: ''
    returnType: int
    signature: "int ParallelChannel::AddChannel(ChannelBase* sub_channel,\n                                ChannelOwnership
      ownership,\n                                const butil::intrusive_ptr<CallMapper>&
      call_mapper,\n                                const butil::intrusive_ptr<ResponseMerger>&
      merger)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - ParallelChannel::SubChan
    - ParallelChannel::SubChan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 513
    functionName: "operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - ParallelChannel::SubChan
    - ParallelChannel::SubChan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: "operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:528,1
    - Dst: call_mapper::reset
      Src: /src/brpc/src/brpc/parallel_channel.cpp:529,1
    - Dst: merger::reset
      Src: /src/brpc/src/brpc/parallel_channel.cpp:530,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:534,1
    - Dst: back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:536,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:537,1
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:543,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: begin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: end
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: SortByChannelPtr
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: std::unique
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: begin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: end
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: EqualChannelPtr
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: begin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:551,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:553,1
    - Dst: clear
      Src: /src/brpc/src/brpc/parallel_channel.cpp:556,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 523
    functionDepth: 1
    functionLinenumber: 523
    functionLinenumberEnd: 557
    functionName: brpc::ParallelChannel::Reset
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - back
    - end
    - pop_back
    - SortByChannelPtr
    - std::sort
    - EqualChannelPtr
    - std::unique
    - CHECK_EQ
    - empty
    - clear
    - merger::reset
    - begin
    - call_mapper::reset
    - size
    linkageType: ''
    returnType: void
    signature: void ParallelChannel::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/parallel_channel.cpp:560,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 561
    functionName: ParallelChannel::~ParallelChannel()
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void ParallelChannel::~ParallelChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 563
    functionDepth: 1
    functionLinenumber: 563
    functionLinenumberEnd: 566
    functionName: brpc::HandleTimeout
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleTimeout(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:569,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:574,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:575,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:576,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:576,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 578
      start: 568
    functionDepth: 5
    functionLinenumber: 568
    functionLinenumberEnd: 578
    functionName: brpc::ParallelChannel::RunDoneAndDestroy
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - static_cast<Controller*>
    - Controller*::call_id
    linkageType: ''
    returnType: void
    signature: void * ParallelChannel::RunDoneAndDestroy(void* arg)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:586,1
    - Dst: Controller*::OnRPCBegin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:587,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:587,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:589,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:592,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/parallel_channel.cpp:593,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:595,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:596,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:597,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/parallel_channel.cpp:599,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:599,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:605,1
    - Dst: Controller*::set_used_by_rpc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:609,1
    - Dst: DEFINE_SMALL_ARRAY
      Src: /src/brpc/src/brpc/parallel_channel.cpp:615,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:623,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:627,1
    - Dst: call_mapper::Map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:634,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:636,1
    - Dst: is_bad
      Src: /src/brpc/src/brpc/parallel_channel.cpp:638,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:639,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/src/brpc/parallel_channel.cpp:644,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:646,1
    - Dst: SubCall
      Src: /src/brpc/src/brpc/parallel_channel.cpp:649,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:653,1
    - Dst: brpc::ParallelChannelDone::Create
      Src: /src/brpc/src/brpc/parallel_channel.cpp:681,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:684,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:690,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:691,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/parallel_channel.cpp:699,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:701,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:702,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:704,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:705,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:707,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/parallel_channel.cpp:709,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:712,1
    - Dst: ParallelChannelDone*::SaveThreadInfoOfCallsite
      Src: /src/brpc/src/brpc/parallel_channel.cpp:718,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:719,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/parallel_channel.cpp:719,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:723,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:724,1
    - Dst: ParallelChannelDone::SubDone*::cntl::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:726,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:726,1
    - Dst: chan::CallMethod
      Src: /src/brpc/src/brpc/parallel_channel.cpp:727,1
    - Dst: Join
      Src: /src/brpc/src/brpc/parallel_channel.cpp:736,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/parallel_channel.cpp:737,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:737,1
    - Dst: brpc::ParallelChannelDone::Destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:746,1
    - Dst: Controller*::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:749,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/parallel_channel.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:759,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:761,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:763,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:763,1
    CyclomaticComplexity: 40
    EdgeCount: 40
    ICount: 137
    argCount: 5
    argNames:
    - method
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 580
    functionDepth: 5
    functionLinenumber: 580
    functionLinenumberEnd: 764
    functionName: brpc::ParallelChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::is_used_by_rpc
    - google::protobuf::Message*::New
    - Controller*::is_done_allowed_to_run_in_place
    - bthread_start_background
    - CHECK_EQ
    - bthread_id_unlock
    - Controller*::SetFailed
    - google::protobuf::Closure*::Run
    - is_bad
    - Controller*::set_used_by_rpc
    - butil::microseconds_to_timespec
    - bthread_id_unlock_and_destroy
    - Controller*::add_flag
    - size
    - is_skip
    - LOG
    - LOG_IF
    - Controller*::OnRPCBegin
    - butil::gettimeofday_us
    - Controller*::request_attachment
    - Join
    - Controller*::set_timeout_ms
    - ParallelChannelDone::SubDone*::cntl::request_attachment
    - Controller*::OnRPCEnd
    - bthread_id_lock
    - static_cast<Controller*>
    - Controller*::timeout_ms
    - ParallelChannelDone*::sub_done
    - Controller*::FailedInline
    - brpc::ParallelChannelDone::Create
    - call_mapper::Map
    - chan::CallMethod
    - SubCall
    - brpc::ParallelChannelDone::Destroy
    - bthread_timer_add
    - ParallelChannelDone*::SaveThreadInfoOfCallsite
    - Controller*::call_id
    - DEFINE_SMALL_ARRAY
    linkageType: ''
    returnType: void
    signature: "void ParallelChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* cntl_base,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:767,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:770,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:771,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:772,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 778
    functionName: brpc::ParallelChannel::Weight
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - chan::Weight
    - size
    - empty
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::Weight()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:781,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:784,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:793,1
    - Dst: chan::CheckHealth
      Src: /src/brpc/src/brpc/parallel_channel.cpp:794,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 780
    functionDepth: 1
    functionLinenumber: 780
    functionLinenumberEnd: 800
    functionName: brpc::ParallelChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - size
    - empty
    - chan::CheckHealth
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:806,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:808,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 816
    functionName: brpc::ParallelChannel::Describe
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: "void ParallelChannel::Describe(\n    std::ostream& os, const DescribeOptions&
      options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - fail_limit
    - success_limit
    - ndone
    - nchan
    - memsize
    - cntl
    - user_done
    argTypes:
    - int
    - int
    - int
    - int
    - int
    - Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 57
    functionName: brpc::ParallelChannelDone::ParallelChannelDone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ParallelChannelDone(int fail_limit, int success_limit,\n                        int
      ndone, int nchan, int memsize,\n                        Controller* cntl, google::protobuf::Closure*
      user_done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: brpc::ParallelChannelDone::SubDone::SubDone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubDone()
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: ~SubDone() override
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SubDone() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnSubDoneRun
      Src: /src/brpc/src/brpc/parallel_channel.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: brpc::ParallelChannelDone::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - OnSubDoneRun
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:116,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/parallel_channel.cpp:118,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:123,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/parallel_channel.cpp:125,1
    - Dst: ParallelChannelDone::ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:129,1
    - Dst: Controller*::SaveClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:136,1
    - Dst: auto::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:139,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:139,1
    - Dst: auto::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:140,1
    - Dst: ApplyClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:140,1
    - Dst: auto::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:141,1
    - Dst: allow_done_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:141,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:147,1
    - Dst: auto::sub_done_map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:148,1
    - Dst: auto::sub_done_map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:150,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:153,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 7
    argNames:
    - fail_limit
    - success_limit
    - ndone
    - aps
    - nchan
    - cntl
    - user_done
    argTypes:
    - int
    - int
    - int
    - SubCall*
    - int
    - Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 156
    functionName: brpc::ParallelChannelDone::Create
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - auto::sub_done_map
    - SubDone::SubDone
    - auto::sub_done
    - malloc
    - CHECK_EQ
    - Controller*::SaveClientSettings
    - BAIDU_UNLIKELY
    - ApplyClientSettings
    - is_skip
    - ParallelChannelDone::ParallelChannelDone
    - allow_done_to_run_in_place
    linkageType: ''
    returnType: ParallelChannelDone
    signature: "ParallelChannelDone * Create(\n        int fail_limit, int success_limit,\n
      \       int ndone, const SubCall* aps, int nchan,\n        Controller* cntl,
      google::protobuf::Closure* user_done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:161,1
    - Dst: ParallelChannelDone*::~ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:167,1
    - Dst: free
      Src: /src/brpc/src/brpc/parallel_channel.cpp:168,1
    - Dst: ParallelChannelDone*::~ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:172,1
    - Dst: ParallelChannelDone*::~ParallelChannelDone
      Src: /src/brpc/src/brpc/parallel_channel.cpp:176,1
    - Dst: free
      Src: /src/brpc/src/brpc/parallel_channel.cpp:177,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - d
    argTypes:
    - ParallelChannelDone*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: brpc::ParallelChannelDone::Destroy
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached:
    - ParallelChannelDone*::~ParallelChannelDone
    - ParallelChannelDone*::sub_done
    - free
    linkageType: ''
    returnType: void
    signature: void Destroy(ParallelChannelDone* d)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/parallel_channel.cpp:183,1
    - Dst: _error_text::clear
      Src: /src/brpc/src/brpc/parallel_channel.cpp:188,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/parallel_channel.cpp:190,1
    - Dst: brpc::ParallelChannelDone::OnSubDoneRun
      Src: /src/brpc/src/brpc/parallel_channel.cpp:192,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 182
    functionDepth: 5
    functionLinenumber: 182
    functionLinenumberEnd: 193
    functionName: brpc::ParallelChannelDone::Run
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - ErrorCode
    - brpc::ParallelChannelDone::OnSubDoneRun
    - CHECK
    - _error_text::clear
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ParallelChannelDone*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: brpc::ParallelChannelDone::RunOnComplete
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ParallelChannelDone*>
    linkageType: ''
    returnType: void
    signature: void * RunOnComplete(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:202,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 206
    functionName: brpc::ParallelChannelDone::SaveThreadInfoOfCallsite
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - bthread_self
    linkageType: ''
    returnType: void
    signature: void SaveThreadInfoOfCallsite()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:210,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/parallel_channel.cpp:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - pthread_self
    - bthread_self
    linkageType: ''
    returnType: bool
    signature: bool IsSameThreadAsCallMethod() const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: SubDone*::cntl::ErrorCode
      Src: /src/brpc/src/brpc/parallel_channel.cpp:219,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:224,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:228,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:234,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:236,1
    - Dst: SubDone*::cntl::call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:237,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:249,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:258,1
    - Dst: load
      Src: /src/brpc/src/brpc/parallel_channel.cpp:268,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:273,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:273,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:273,1
    - Dst: fetch_or
      Src: /src/brpc/src/brpc/parallel_channel.cpp:282,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/parallel_channel.cpp:288,1
    - Dst: is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:291,1
    - Dst: brpc::ParallelChannelDone::IsSameThreadAsCallMethod
      Src: /src/brpc/src/brpc/parallel_channel.cpp:292,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/parallel_channel.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:299,1
    - Dst: brpc::ParallelChannelDone::OnComplete
      Src: /src/brpc/src/brpc/parallel_channel.cpp:300,1
    - Dst: brpc::ParallelChannelDone::OnComplete
      Src: /src/brpc/src/brpc/parallel_channel.cpp:303,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 36
    argCount: 1
    argNames:
    - fin
    argTypes:
    - SubDone*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 215
    functionDepth: 6
    functionLinenumber: 215
    functionLinenumberEnd: 305
    functionName: brpc::ParallelChannelDone::OnSubDoneRun
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached:
    - SubDone*::cntl::call_id
    - brpc::ParallelChannelDone::OnComplete
    - brpc::ParallelChannelDone::sub_done
    - load
    - bthread_start_background
    - fetch_add
    - fetch_or
    - brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    - call_id
    - std::atomic_thread_fence
    - bthread_id_error
    - LOG
    - SubDone*::cntl::ErrorCode
    - is_done_allowed_to_run_in_place
    linkageType: ''
    returnType: void
    signature: void OnSubDoneRun(SubDone* fin)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/parallel_channel.cpp:318,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:321,1
    - Dst: SubDone*::cntl::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:323,1
    - Dst: _response::MergeFrom
      Src: /src/brpc/src/brpc/parallel_channel.cpp:326,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:329,1
    - Dst: what
      Src: /src/brpc/src/brpc/parallel_channel.cpp:329,1
    - Dst: SubDone*::merger::Merge
      Src: /src/brpc/src/brpc/parallel_channel.cpp:334,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:343,1
    - Dst: FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:356,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:360,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/parallel_channel.cpp:361,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:371,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:374,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:375,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/parallel_channel.cpp:376,1
    - Dst: _error_text::append
      Src: /src/brpc/src/brpc/parallel_channel.cpp:377,1
    - Dst: _error_text::append
      Src: /src/brpc/src/brpc/parallel_channel.cpp:378,1
    - Dst: _error_text::clear
      Src: /src/brpc/src/brpc/parallel_channel.cpp:389,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:392,1
    - Dst: OnRPCEnd
      Src: /src/brpc/src/brpc/parallel_channel.cpp:396,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:396,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:397,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:399,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:399,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 307
    functionDepth: 5
    functionLinenumber: 307
    functionLinenumberEnd: 400
    functionName: brpc::ParallelChannelDone::OnComplete
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached:
    - _response::MergeFrom
    - SubDone*::cntl::FailedInline
    - what
    - CHECK_EQ
    - call_id
    - _error_text::append
    - google::protobuf::Closure*::Run
    - brpc::ParallelChannelDone::sub_done
    - bthread_id_unlock_and_destroy
    - _error_text::clear
    - butil::gettimeofday_us
    - OnRPCEnd
    - Controller*::ErrorCode
    - snprintf
    - SubDone*::merger::Merge
    - Controller*::FailedInline
    - load
    - SetFailed
    - FailedInline
    linkageType: ''
    returnType: void
    signature: void OnComplete()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: brpc::ParallelChannelDone::sub_done_size
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int sub_done_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: brpc::ParallelChannelDone::sub_done
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: SubDone
    signature: SubDone * sub_done(int i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 404
    functionName: brpc::ParallelChannelDone::sub_done
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: SubDone
    signature: SubDone * sub_done(int i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<int*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 409
    functionName: '& sub_done_map(int i)'
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<int*>
    linkageType: ''
    returnType: int
    signature: int & sub_done_map(int i)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const int*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: brpc::ParallelChannelDone::sub_done_map
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<const int*>
    linkageType: ''
    returnType: int
    signature: int sub_done_map(int i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 415
    functionName: brpc::ParallelChannelDone::sub_channel_size
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int sub_channel_size() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:421,1
    - Dst: brpc::ParallelChannelDone::sub_done_map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:423,1
    - Dst: brpc::ParallelChannelDone::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:425,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 429
    functionName: brpc::ParallelChannelDone::sub_channel_controller
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParallelChannelDone::sub_done_map
    - brpc::ParallelChannelDone::sub_done
    linkageType: ''
    returnType: Controller
    signature: Controller * sub_channel_controller(int i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParallelChannelDone::Destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:453,1
    - Dst: static_cast<ParallelChannelDone*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 454
    functionName: brpc::DestroyParallelChannelDone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParallelChannelDone::Destroy
    - static_cast<ParallelChannelDone*>
    linkageType: ''
    returnType: void
    signature: void DestroyParallelChannelDone(google::protobuf::Closure* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const ParallelChannelDone*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:458,1
    - Dst: ParallelChannelDone*::sub_channel_controller
      Src: /src/brpc/src/brpc/parallel_channel.cpp:459,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - i
    argTypes:
    - google::protobuf::Closure*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 460
    functionName: brpc::GetSubControllerOfParallelChannel
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - ParallelChannelDone*::sub_channel_controller
    - static_cast<const ParallelChannelDone*>
    linkageType: ''
    returnType: Controller
    signature: "Controller * GetSubControllerOfParallelChannel(\n    const google::protobuf::Closure*
      c, int i)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - options
    argTypes:
    - ParallelChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 462
    functionDepth: 0
    functionLinenumber: 462
    functionLinenumberEnd: 467
    functionName: brpc::ParallelChannel::Init
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::Init(const ParallelChannelOptions* options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:474,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/parallel_channel.cpp:477,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/parallel_channel.cpp:478,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:485,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 4
    argNames:
    - sub_channel
    - ownership
    - call_mapper
    - merger
    argTypes:
    - ChannelBase*
    - ChannelOwnership
    - CallMapper*
    - ResponseMerger*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 487
    functionName: brpc::ParallelChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 34
    functionsReached:
    - capacity
    - reserve
    - push_back
    - LOG
    linkageType: ''
    returnType: int
    signature: "int ParallelChannel::AddChannel(ChannelBase* sub_channel,\n                                ChannelOwnership
      ownership,\n                                CallMapper* call_mapper,\n                                ResponseMerger*
      merger)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:494,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/parallel_channel.cpp:497,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/parallel_channel.cpp:498,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:505,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 4
    argNames:
    - sub_channel
    - ownership
    - ' call_mapper'
    - ' merger'
    argTypes:
    - ChannelBase*
    - ChannelOwnership
    - butil::intrusive_ptr<CallMapper>
    - butil::intrusive_ptr<ResponseMerger>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 507
    functionName: brpc::ParallelChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 34
    functionsReached:
    - capacity
    - reserve
    - push_back
    - LOG
    linkageType: ''
    returnType: int
    signature: "int ParallelChannel::AddChannel(ChannelBase* sub_channel,\n                                ChannelOwnership
      ownership,\n                                const butil::intrusive_ptr<CallMapper>&
      call_mapper,\n                                const butil::intrusive_ptr<ResponseMerger>&
      merger)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - ParallelChannel::SubChan
    - ParallelChannel::SubChan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 513
    functionName: "operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - ParallelChannel::SubChan
    - ParallelChannel::SubChan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: "operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const ParallelChannel::SubChan& c1,\n                    const
      ParallelChannel::SubChan& c2) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:528,1
    - Dst: call_mapper::reset
      Src: /src/brpc/src/brpc/parallel_channel.cpp:529,1
    - Dst: merger::reset
      Src: /src/brpc/src/brpc/parallel_channel.cpp:530,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:534,1
    - Dst: back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:536,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/parallel_channel.cpp:537,1
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:543,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: begin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: end
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: SortByChannelPtr
      Src: /src/brpc/src/brpc/parallel_channel.cpp:548,1
    - Dst: std::unique
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: begin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: end
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: EqualChannelPtr
      Src: /src/brpc/src/brpc/parallel_channel.cpp:550,1
    - Dst: begin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:551,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:553,1
    - Dst: clear
      Src: /src/brpc/src/brpc/parallel_channel.cpp:556,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 523
    functionDepth: 1
    functionLinenumber: 523
    functionLinenumberEnd: 557
    functionName: brpc::ParallelChannel::Reset
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - back
    - end
    - pop_back
    - SortByChannelPtr
    - std::sort
    - EqualChannelPtr
    - std::unique
    - CHECK_EQ
    - empty
    - clear
    - merger::reset
    - begin
    - call_mapper::reset
    - size
    linkageType: ''
    returnType: void
    signature: void ParallelChannel::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/parallel_channel.cpp:560,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 561
    functionName: ParallelChannel::~ParallelChannel()
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void ParallelChannel::~ParallelChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/parallel_channel.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 563
    functionDepth: 1
    functionLinenumber: 563
    functionLinenumberEnd: 566
    functionName: brpc::HandleTimeout
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleTimeout(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:569,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:574,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:575,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:576,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:576,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 578
      start: 568
    functionDepth: 5
    functionLinenumber: 568
    functionLinenumberEnd: 578
    functionName: brpc::ParallelChannel::RunDoneAndDestroy
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - static_cast<Controller*>
    - Controller*::call_id
    linkageType: ''
    returnType: void
    signature: void * ParallelChannel::RunDoneAndDestroy(void* arg)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/parallel_channel.cpp:586,1
    - Dst: Controller*::OnRPCBegin
      Src: /src/brpc/src/brpc/parallel_channel.cpp:587,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:587,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:589,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/parallel_channel.cpp:592,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/parallel_channel.cpp:593,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:595,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:596,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:597,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/parallel_channel.cpp:599,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:599,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:605,1
    - Dst: Controller*::set_used_by_rpc
      Src: /src/brpc/src/brpc/parallel_channel.cpp:609,1
    - Dst: DEFINE_SMALL_ARRAY
      Src: /src/brpc/src/brpc/parallel_channel.cpp:615,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:623,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:627,1
    - Dst: call_mapper::Map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:634,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:636,1
    - Dst: is_bad
      Src: /src/brpc/src/brpc/parallel_channel.cpp:638,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:639,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/src/brpc/parallel_channel.cpp:644,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:646,1
    - Dst: SubCall
      Src: /src/brpc/src/brpc/parallel_channel.cpp:649,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:653,1
    - Dst: brpc::ParallelChannelDone::Create
      Src: /src/brpc/src/brpc/parallel_channel.cpp:681,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:684,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:690,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:691,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/parallel_channel.cpp:699,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:701,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:702,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:704,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:705,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:707,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/parallel_channel.cpp:709,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:712,1
    - Dst: ParallelChannelDone*::SaveThreadInfoOfCallsite
      Src: /src/brpc/src/brpc/parallel_channel.cpp:718,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:719,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/parallel_channel.cpp:719,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:723,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:724,1
    - Dst: ParallelChannelDone::SubDone*::cntl::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:726,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:726,1
    - Dst: chan::CallMethod
      Src: /src/brpc/src/brpc/parallel_channel.cpp:727,1
    - Dst: Join
      Src: /src/brpc/src/brpc/parallel_channel.cpp:736,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/parallel_channel.cpp:737,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:737,1
    - Dst: brpc::ParallelChannelDone::Destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:746,1
    - Dst: Controller*::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:749,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/parallel_channel.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:759,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:761,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:763,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:763,1
    CyclomaticComplexity: 40
    EdgeCount: 40
    ICount: 137
    argCount: 5
    argNames:
    - method
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - google::protobuf::MethodDescriptor*
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 580
    functionDepth: 5
    functionLinenumber: 580
    functionLinenumberEnd: 764
    functionName: brpc::ParallelChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::is_used_by_rpc
    - google::protobuf::Message*::New
    - Controller*::is_done_allowed_to_run_in_place
    - bthread_start_background
    - CHECK_EQ
    - bthread_id_unlock
    - Controller*::SetFailed
    - google::protobuf::Closure*::Run
    - is_bad
    - Controller*::set_used_by_rpc
    - butil::microseconds_to_timespec
    - bthread_id_unlock_and_destroy
    - Controller*::add_flag
    - size
    - is_skip
    - LOG
    - LOG_IF
    - Controller*::OnRPCBegin
    - butil::gettimeofday_us
    - Controller*::request_attachment
    - Join
    - Controller*::set_timeout_ms
    - ParallelChannelDone::SubDone*::cntl::request_attachment
    - Controller*::OnRPCEnd
    - bthread_id_lock
    - static_cast<Controller*>
    - Controller*::timeout_ms
    - ParallelChannelDone*::sub_done
    - Controller*::FailedInline
    - brpc::ParallelChannelDone::Create
    - call_mapper::Map
    - chan::CallMethod
    - SubCall
    - brpc::ParallelChannelDone::Destroy
    - bthread_timer_add
    - ParallelChannelDone*::SaveThreadInfoOfCallsite
    - Controller*::call_id
    - DEFINE_SMALL_ARRAY
    linkageType: ''
    returnType: void
    signature: "void ParallelChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      method,\n    google::protobuf::RpcController* cntl_base,\n    const google::protobuf::Message*
      request,\n    google::protobuf::Message* response,\n    google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:767,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:770,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:771,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:772,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 778
    functionName: brpc::ParallelChannel::Weight
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - chan::Weight
    - size
    - empty
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::Weight()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:781,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:784,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:793,1
    - Dst: chan::CheckHealth
      Src: /src/brpc/src/brpc/parallel_channel.cpp:794,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 780
    functionDepth: 1
    functionLinenumber: 780
    functionLinenumberEnd: 800
    functionName: brpc::ParallelChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - size
    - empty
    - chan::CheckHealth
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:806,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:808,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 816
    functionName: brpc::ParallelChannel::Describe
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: "void ParallelChannel::Describe(\n    std::ostream& os, const DescribeOptions&
      options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: brpc::VerifyOptions::VerifyOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VerifyOptions::VerifyOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::ChannelSSLOptions::ChannelSSLOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelSSLOptions::ChannelSSLOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 37
    functionName: brpc::ServerSSLOptions::ServerSSLOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerSSLOptions::ServerSSLOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: brpc::VerifyOptions::VerifyOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VerifyOptions::VerifyOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::ChannelSSLOptions::ChannelSSLOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelSSLOptions::ChannelSSLOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 37
    functionName: brpc::ServerSSLOptions::ServerSSLOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerSSLOptions::ServerSSLOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::StringToConnectionType
      Src: /src/brpc/src/brpc/adaptive_connection_type.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' type'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: brpc::StringToConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 1
    functionsReached:
    - brpc::StringToConnectionType
    linkageType: ''
    returnType: ConnectionType
    signature: ConnectionType StringToConnectionType(const butil::StringPiece& type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::AdaptiveConnectionType::AdaptiveConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveConnectionType()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::AdaptiveConnectionType::AdaptiveConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveConnectionType(ConnectionType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: ~AdaptiveConnectionType()
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AdaptiveConnectionType()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: operator=(ConnectionType type)
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(ConnectionType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: operator ConnectionType() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator ConnectionType() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/adaptive_connection_type.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: brpc::AdaptiveConnectionType::name
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 2
    functionsReached:
    - ConnectionTypeToString
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::AdaptiveConnectionType::has_error
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::StringToConnectionType
      Src: /src/brpc/src/brpc/adaptive_connection_type.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' type'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: brpc::StringToConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 2
    functionsReached:
    - brpc::StringToConnectionType
    linkageType: ''
    returnType: ConnectionType
    signature: ConnectionType StringToConnectionType(const butil::StringPiece& type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::AdaptiveConnectionType::AdaptiveConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveConnectionType()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::AdaptiveConnectionType::AdaptiveConnectionType
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AdaptiveConnectionType(ConnectionType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: ~AdaptiveConnectionType()
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AdaptiveConnectionType()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: operator=(ConnectionType type)
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator=(ConnectionType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: operator ConnectionType() const
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator ConnectionType() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/adaptive_connection_type.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: brpc::AdaptiveConnectionType::name
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 2
    functionsReached:
    - ConnectionTypeToString
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::AdaptiveConnectionType::has_error
    functionSourceFile: /src/brpc/src/brpc/adaptive_connection_type.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: brpc::MemcacheRequest::MemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::MemcacheRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:36,1
    - Dst: brpc::MemcacheRequest::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: brpc::MemcacheRequest::MemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheRequest::SharedCtor
    - brpc::MemcacheRequest::MergeFrom
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::MemcacheRequest(const MemcacheRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: brpc::MemcacheRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/memcache.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: MemcacheRequest::~MemcacheRequest()
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::~MemcacheRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 50
    functionName: brpc::MemcacheRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::MemcacheRequest::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: brpc::MemcacheRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:63,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/memcache.cpp:66,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:69,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/memcache.cpp:70,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:71,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/memcache.cpp:75,1
    - Dst: butil::IOBuf::fetch
      Src: /src/brpc/src/brpc/memcache.cpp:78,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:85,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/memcache.cpp:86,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:91,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 94
    functionName: brpc::MemcacheRequest::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - butil::IOBuf::size
    - ::google::protobuf::io::CodedInputStream*::Skip
    - butil::IOBuf::pop_front
    - butil::NetToHost32
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - LOG
    - butil::IOBuf::fetch
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::MergePartialFromCodedStream(\n    ::google::protobuf::io::CodedInputStream*
      input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:98,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:104,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 107
    functionName: brpc::MemcacheRequest::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - LOG
    linkageType: ''
    returnType: void
    signature: "void MemcacheRequest::SerializeWithCachedSizes(\n    ::google::protobuf::io::CodedOutputStream*
      output) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/memcache.cpp:110,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 113
    functionName: brpc::MemcacheRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - size
    - static_cast<int>
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:116,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: brpc::MemcacheRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 1
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::MergeFrom(const MemcacheRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: brpc::MemcacheRequest::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/memcache.cpp:127,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:128,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 131
    functionName: brpc::MemcacheRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::Swap(MemcacheRequest* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/memcache.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 2
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: brpc::MemcacheRequest::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata MemcacheRequest::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::MemcacheResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:147,1
    - Dst: brpc::MemcacheResponse::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheResponse::SharedCtor
    - brpc::MemcacheResponse::MergeFrom
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::MemcacheResponse(const MemcacheResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: brpc::MemcacheResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/memcache.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: MemcacheResponse::~MemcacheResponse()
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::~MemcacheResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 160
    functionName: brpc::MemcacheResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: brpc::MemcacheResponse::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 167
    functionName: brpc::MemcacheResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:171,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:176,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:177,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 181
    functionName: brpc::MemcacheResponse::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - LOG
    - ::google::protobuf::io::CodedInputStream*::Skip
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::MergePartialFromCodedStream(\n    ::google::protobuf::io::CodedInputStream*
      input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:185,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:191,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 194
    functionName: brpc::MemcacheResponse::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - LOG
    linkageType: ''
    returnType: void
    signature: "void MemcacheResponse::SerializeWithCachedSizes(\n    ::google::protobuf::io::CodedOutputStream*
      output) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/memcache.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 200
    functionName: brpc::MemcacheResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - size
    - static_cast<int>
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:203,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 208
    functionName: brpc::MemcacheResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 1
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::MergeFrom(const MemcacheResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/memcache.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: brpc::MemcacheResponse::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/memcache.cpp:216,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:217,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 219
    functionName: brpc::MemcacheResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::Swap(MemcacheResponse* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/memcache.cpp:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 226
    functionName: brpc::MemcacheResponse::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata MemcacheResponse::GetMetadata() const
  - BBCount: 12
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 1
    argNames:
    - st
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 256
    functionName: brpc::MemcacheResponse::status_str
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * MemcacheResponse::status_str(Status st)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:265,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:265,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:269,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:269,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:273,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:276,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:276,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:276,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - command
    - ' key'
    argTypes:
    - uint8_t
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 281
    functionName: brpc::MemcacheRequest::GetOrDelete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::HostToNet32
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::GetOrDelete(uint8_t command, const butil::StringPiece&
      key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::GetOrDelete
      Src: /src/brpc/src/brpc/memcache.cpp:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 283
    functionDepth: 2
    functionLinenumber: 283
    functionLinenumberEnd: 285
    functionName: brpc::MemcacheRequest::Get
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::GetOrDelete
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Get(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::GetOrDelete
      Src: /src/brpc/src/brpc/memcache.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 287
    functionDepth: 2
    functionLinenumber: 287
    functionLinenumberEnd: 289
    functionName: brpc::MemcacheRequest::Delete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::GetOrDelete
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Delete(const butil::StringPiece& key)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:317,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:319,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:321,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - timeout
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 332
    functionName: brpc::MemcacheRequest::Flush
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    - butil::HostToNet32
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Flush(uint32_t timeout)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:348,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:351,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:354,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:356,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:360,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:365,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:366,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:370,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:373,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:375,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:376,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:380,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:385,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:391,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:394,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:396,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:398,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:401,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:402,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:407,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 52
    argCount: 3
    argNames:
    - value
    - flags
    - cas_value
    argTypes:
    - butil::IOBuf*
    - uint32_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 409
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - copy_to
    - butil::IOBuf*::clear
    - pop_front
    - clear
    - butil::NetToHost32
    - cutn
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::PopGet(\n    butil::IOBuf* value, uint32_t*
      flags, uint64_t* cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/memcache.cpp:413,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/src/brpc/memcache.cpp:414,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - value
    - flags
    - cas_value
    argTypes:
    - std::string*
    - uint32_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 419
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 3
    functionsReached:
    - brpc::MemcacheResponse::PopGet
    - butil::IOBuf::IOBuf
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::PopGet(\n    std::string* value, uint32_t*
      flags, uint64_t* cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 426
    functionName: brpc::MemcacheResponse::PopDelete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopDelete()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:428,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 429
    functionName: brpc::MemcacheResponse::PopFlush
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopFlush()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:458,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:458,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:462,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:462,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:462,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:464,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:465,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:465,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:466,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:469,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:469,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:469,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:472,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:472,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 6
    argNames:
    - command
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - uint8_t
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 477
    functionName: brpc::MemcacheRequest::Store
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::HostToNet32
    - butil::HostToNet64
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Store(\n    uint8_t command, const butil::StringPiece&
      key, const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime,
      uint64_t cas_value)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:484,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:487,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:490,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:492,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:496,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:499,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:500,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:504,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:505,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:506,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:509,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:511,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/memcache.cpp:513,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:516,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 2
    argNames:
    - command
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 518
    functionName: brpc::MemcacheResponse::PopStore
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - copy_to
    - pop_front
    - clear
    - CHECK
    - cutn
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopStore(uint8_t command, uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 520
    functionDepth: 2
    functionLinenumber: 520
    functionLinenumberEnd: 524
    functionName: brpc::MemcacheRequest::Set
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::Store
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Set(\n    const butil::StringPiece& key, const
      butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 526
    functionDepth: 2
    functionLinenumber: 526
    functionLinenumberEnd: 530
    functionName: brpc::MemcacheRequest::Add
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Add(\n    const butil::StringPiece& key, const
      butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 532
    functionDepth: 2
    functionLinenumber: 532
    functionLinenumberEnd: 536
    functionName: brpc::MemcacheRequest::Replace
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Replace(\n    const butil::StringPiece& key,
      const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t
      cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/memcache.cpp:541,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:542,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 538
    functionDepth: 2
    functionLinenumber: 538
    functionLinenumberEnd: 546
    functionName: brpc::MemcacheRequest::Append
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    - LOG
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Append(\n    const butil::StringPiece& key,
      const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t
      cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/memcache.cpp:551,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:552,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:555,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 548
    functionDepth: 2
    functionLinenumber: 548
    functionLinenumberEnd: 556
    functionName: brpc::MemcacheRequest::Prepend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    - LOG
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Prepend(\n    const butil::StringPiece& key,
      const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t
      cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:559,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 558
    functionDepth: 2
    functionLinenumber: 558
    functionLinenumberEnd: 560
    functionName: brpc::MemcacheResponse::PopSet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopSet(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:562,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 2
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: brpc::MemcacheResponse::PopAdd
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopAdd(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 564
    functionDepth: 2
    functionLinenumber: 564
    functionLinenumberEnd: 566
    functionName: brpc::MemcacheResponse::PopReplace
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopReplace(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:568,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 567
    functionDepth: 2
    functionLinenumber: 567
    functionLinenumberEnd: 569
    functionName: brpc::MemcacheResponse::PopAppend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopAppend(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:571,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 570
    functionDepth: 2
    functionLinenumber: 570
    functionLinenumberEnd: 572
    functionName: brpc::MemcacheResponse::PopPrepend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopPrepend(uint64_t* cas_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:608,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:608,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:612,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:612,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:614,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:614,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:614,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:615,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:618,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:618,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:618,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 5
    argNames:
    - command
    - ' key'
    - delta
    - initial_value
    - exptime
    argTypes:
    - uint8_t
    - butil::StringPiece
    - uint64_t
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 623
    functionName: brpc::MemcacheRequest::Counter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::HostToNet32
    - butil::HostToNet64
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Counter(\n    uint8_t command, const butil::StringPiece&
      key, uint64_t delta,\n    uint64_t initial_value, uint32_t exptime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Counter
      Src: /src/brpc/src/brpc/memcache.cpp:627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' key'
    - delta
    - initial_value
    - exptime
    argTypes:
    - butil::StringPiece
    - uint64_t
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 2
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: brpc::MemcacheRequest::Increment
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::Counter
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Increment(const butil::StringPiece& key, uint64_t
      delta,\n                                uint64_t initial_value, uint32_t exptime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Counter
      Src: /src/brpc/src/brpc/memcache.cpp:632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' key'
    - delta
    - initial_value
    - exptime
    argTypes:
    - butil::StringPiece
    - uint64_t
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 630
    functionDepth: 2
    functionLinenumber: 630
    functionLinenumberEnd: 633
    functionName: brpc::MemcacheRequest::Decrement
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::Counter
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Decrement(const butil::StringPiece& key, uint64_t
      delta,\n                                uint64_t initial_value, uint32_t exptime)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:648,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:651,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:654,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:656,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:660,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:664,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:665,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:668,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:672,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:674,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:675,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:680,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:684,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/memcache.cpp:685,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:689,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - command
    - new_value
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 691
      start: 646
    functionDepth: 1
    functionLinenumber: 646
    functionLinenumberEnd: 691
    functionName: brpc::MemcacheResponse::PopCounter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - copy_to
    - pop_front
    - clear
    - cutn
    - size
    - butil::NetToHost64
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::PopCounter(\n    uint8_t command, uint64_t*
      new_value, uint64_t* cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopCounter
      Src: /src/brpc/src/brpc/memcache.cpp:694,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 695
      start: 693
    functionDepth: 2
    functionLinenumber: 693
    functionLinenumberEnd: 695
    functionName: brpc::MemcacheResponse::PopIncrement
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopCounter
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopIncrement(uint64_t* new_value, uint64_t*
      cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopCounter
      Src: /src/brpc/src/brpc/memcache.cpp:697,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 696
    functionDepth: 2
    functionLinenumber: 696
    functionLinenumberEnd: 698
    functionName: brpc::MemcacheResponse::PopDecrement
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopCounter
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopDecrement(uint64_t* new_value, uint64_t*
      cas_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:725,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:725,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:729,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:729,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:731,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:732,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:735,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:735,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:735,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' key'
    - exptime
    argTypes:
    - butil::StringPiece
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 740
    functionName: brpc::MemcacheRequest::Touch
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::HostToNet32
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Touch(const butil::StringPiece& key, uint32_t
      exptime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:757,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 762
      start: 745
    functionDepth: 1
    functionLinenumber: 745
    functionLinenumberEnd: 762
    functionName: brpc::MemcacheRequest::Version
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Version()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:768,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:771,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:774,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:776,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:780,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:784,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:785,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:788,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:790,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:794,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:795,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:799,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:800,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:802,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - version
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 767
    functionDepth: 1
    functionLinenumber: 767
    functionLinenumberEnd: 804
    functionName: brpc::MemcacheResponse::PopVersion
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - copy_to
    - std::string*::clear
    - pop_front
    - clear
    - cutn
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopVersion(std::string* version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: brpc::MemcacheRequest::MemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::MemcacheRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:36,1
    - Dst: brpc::MemcacheRequest::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 34
    functionDepth: 2
    functionLinenumber: 34
    functionLinenumberEnd: 38
    functionName: brpc::MemcacheRequest::MemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheRequest::SharedCtor
    - brpc::MemcacheRequest::MergeFrom
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::MemcacheRequest(const MemcacheRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: brpc::MemcacheRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/memcache.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: MemcacheRequest::~MemcacheRequest()
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::~MemcacheRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 50
    functionName: brpc::MemcacheRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::MemcacheRequest::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: brpc::MemcacheRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:63,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/memcache.cpp:66,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:69,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/memcache.cpp:70,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:71,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/memcache.cpp:75,1
    - Dst: butil::IOBuf::fetch
      Src: /src/brpc/src/brpc/memcache.cpp:78,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:85,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/memcache.cpp:86,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:91,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 94
    functionName: brpc::MemcacheRequest::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - butil::IOBuf::size
    - ::google::protobuf::io::CodedInputStream*::Skip
    - butil::IOBuf::pop_front
    - butil::NetToHost32
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - butil::IOBuf::empty
    - LOG
    - butil::IOBuf::fetch
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::MergePartialFromCodedStream(\n    ::google::protobuf::io::CodedInputStream*
      input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:98,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:104,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 107
    functionName: brpc::MemcacheRequest::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - LOG
    linkageType: ''
    returnType: void
    signature: "void MemcacheRequest::SerializeWithCachedSizes(\n    ::google::protobuf::io::CodedOutputStream*
      output) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/memcache.cpp:110,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 113
    functionName: brpc::MemcacheRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - size
    - static_cast<int>
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:116,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: brpc::MemcacheRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::MergeFrom(const MemcacheRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: brpc::MemcacheRequest::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/memcache.cpp:127,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:128,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 131
    functionName: brpc::MemcacheRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MemcacheRequest::Swap(MemcacheRequest* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/memcache.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 2
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: brpc::MemcacheRequest::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata MemcacheRequest::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::MemcacheResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::SharedCtor
      Src: /src/brpc/src/brpc/memcache.cpp:147,1
    - Dst: brpc::MemcacheResponse::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 2
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheResponse::SharedCtor
    - brpc::MemcacheResponse::MergeFrom
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::MemcacheResponse(const MemcacheResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: brpc::MemcacheResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/memcache.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: MemcacheResponse::~MemcacheResponse()
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::~MemcacheResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 160
    functionName: brpc::MemcacheResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: brpc::MemcacheResponse::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 167
    functionName: brpc::MemcacheResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:171,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:176,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:177,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 181
    functionName: brpc::MemcacheResponse::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - LOG
    - ::google::protobuf::io::CodedInputStream*::Skip
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::MergePartialFromCodedStream(\n    ::google::protobuf::io::CodedInputStream*
      input)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:185,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:191,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 194
    functionName: brpc::MemcacheResponse::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - LOG
    linkageType: ''
    returnType: void
    signature: "void MemcacheResponse::SerializeWithCachedSizes(\n    ::google::protobuf::io::CodedOutputStream*
      output) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/memcache.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 200
    functionName: brpc::MemcacheResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - size
    - static_cast<int>
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:203,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 208
    functionName: brpc::MemcacheResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::MergeFrom(const MemcacheResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/memcache.cpp:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: brpc::MemcacheResponse::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/memcache.cpp:216,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:217,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 219
    functionName: brpc::MemcacheResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MemcacheResponse::Swap(MemcacheResponse* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/memcache.cpp:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 226
    functionName: brpc::MemcacheResponse::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata MemcacheResponse::GetMetadata() const
  - BBCount: 12
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 1
    argNames:
    - st
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 256
    functionName: brpc::MemcacheResponse::status_str
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * MemcacheResponse::status_str(Status st)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:265,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:265,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:269,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:269,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:273,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:276,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:276,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:276,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - command
    - ' key'
    argTypes:
    - uint8_t
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 281
    functionName: brpc::MemcacheRequest::GetOrDelete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    - butil::HostToNet32
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::GetOrDelete(uint8_t command, const butil::StringPiece&
      key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::GetOrDelete
      Src: /src/brpc/src/brpc/memcache.cpp:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 283
    functionDepth: 2
    functionLinenumber: 283
    functionLinenumberEnd: 285
    functionName: brpc::MemcacheRequest::Get
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::GetOrDelete
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Get(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::GetOrDelete
      Src: /src/brpc/src/brpc/memcache.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 287
    functionDepth: 2
    functionLinenumber: 287
    functionLinenumberEnd: 289
    functionName: brpc::MemcacheRequest::Delete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::GetOrDelete
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Delete(const butil::StringPiece& key)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:317,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:319,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:321,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - timeout
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 332
    functionName: brpc::MemcacheRequest::Flush
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    - butil::HostToNet32
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Flush(uint32_t timeout)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:348,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:351,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:354,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:356,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:360,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:365,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:366,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:370,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:373,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:375,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:376,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:380,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:385,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:391,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:394,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:396,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:398,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:401,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:402,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:407,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 52
    argCount: 3
    argNames:
    - value
    - flags
    - cas_value
    argTypes:
    - butil::IOBuf*
    - uint32_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 409
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 3
    functionsReached:
    - butil::string_printf
    - copy_to
    - butil::IOBuf*::clear
    - pop_front
    - clear
    - butil::NetToHost32
    - cutn
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::PopGet(\n    butil::IOBuf* value, uint32_t*
      flags, uint64_t* cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/memcache.cpp:413,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/src/brpc/memcache.cpp:414,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - value
    - flags
    - cas_value
    argTypes:
    - std::string*
    - uint32_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 419
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 4
    functionsReached:
    - brpc::MemcacheResponse::PopGet
    - butil::IOBuf::IOBuf
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::PopGet(\n    std::string* value, uint32_t*
      flags, uint64_t* cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 424
    functionDepth: 2
    functionLinenumber: 424
    functionLinenumberEnd: 426
    functionName: brpc::MemcacheResponse::PopDelete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopDelete()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:428,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 427
    functionDepth: 2
    functionLinenumber: 427
    functionLinenumberEnd: 429
    functionName: brpc::MemcacheResponse::PopFlush
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopFlush()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:458,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:458,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:462,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:462,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:462,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:464,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:465,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:465,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:466,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:469,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:469,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:469,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:472,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:472,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 6
    argNames:
    - command
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - uint8_t
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 477
    functionName: brpc::MemcacheRequest::Store
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 5
    functionsReached:
    - append
    - butil::HostToNet32
    - butil::HostToNet64
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Store(\n    uint8_t command, const butil::StringPiece&
      key, const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime,
      uint64_t cas_value)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:484,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:487,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:490,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:492,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:496,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:499,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:500,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:504,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:505,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:506,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:509,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:511,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/memcache.cpp:513,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:516,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 2
    argNames:
    - command
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 518
    functionName: brpc::MemcacheResponse::PopStore
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 9
    functionsReached:
    - butil::string_printf
    - copy_to
    - pop_front
    - clear
    - CHECK
    - cutn
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopStore(uint8_t command, uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 520
    functionDepth: 2
    functionLinenumber: 520
    functionLinenumberEnd: 524
    functionName: brpc::MemcacheRequest::Set
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::Store
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Set(\n    const butil::StringPiece& key, const
      butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:529,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 526
    functionDepth: 2
    functionLinenumber: 526
    functionLinenumberEnd: 530
    functionName: brpc::MemcacheRequest::Add
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Add(\n    const butil::StringPiece& key, const
      butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 532
    functionDepth: 2
    functionLinenumber: 532
    functionLinenumberEnd: 536
    functionName: brpc::MemcacheRequest::Replace
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Replace(\n    const butil::StringPiece& key,
      const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t
      cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/memcache.cpp:541,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:542,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 538
    functionDepth: 2
    functionLinenumber: 538
    functionLinenumberEnd: 546
    functionName: brpc::MemcacheRequest::Append
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    - LOG
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Append(\n    const butil::StringPiece& key,
      const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t
      cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/memcache.cpp:551,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:552,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:555,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 548
    functionDepth: 2
    functionLinenumber: 548
    functionLinenumberEnd: 556
    functionName: brpc::MemcacheRequest::Prepend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Store
    - LOG
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Prepend(\n    const butil::StringPiece& key,
      const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime, uint64_t
      cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:559,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 558
    functionDepth: 2
    functionLinenumber: 558
    functionLinenumberEnd: 560
    functionName: brpc::MemcacheResponse::PopSet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopSet(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:562,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 561
    functionDepth: 2
    functionLinenumber: 561
    functionLinenumberEnd: 563
    functionName: brpc::MemcacheResponse::PopAdd
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopAdd(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 564
    functionDepth: 2
    functionLinenumber: 564
    functionLinenumberEnd: 566
    functionName: brpc::MemcacheResponse::PopReplace
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopReplace(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:568,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 567
    functionDepth: 2
    functionLinenumber: 567
    functionLinenumberEnd: 569
    functionName: brpc::MemcacheResponse::PopAppend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopAppend(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopStore
      Src: /src/brpc/src/brpc/memcache.cpp:571,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 570
    functionDepth: 2
    functionLinenumber: 570
    functionLinenumberEnd: 572
    functionName: brpc::MemcacheResponse::PopPrepend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::PopStore
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopPrepend(uint64_t* cas_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:608,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:608,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:612,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:612,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:614,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:614,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:614,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:615,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:618,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:618,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:618,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 5
    argNames:
    - command
    - ' key'
    - delta
    - initial_value
    - exptime
    argTypes:
    - uint8_t
    - butil::StringPiece
    - uint64_t
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 623
    functionName: brpc::MemcacheRequest::Counter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    - butil::HostToNet32
    - butil::HostToNet64
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Counter(\n    uint8_t command, const butil::StringPiece&
      key, uint64_t delta,\n    uint64_t initial_value, uint32_t exptime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Counter
      Src: /src/brpc/src/brpc/memcache.cpp:627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' key'
    - delta
    - initial_value
    - exptime
    argTypes:
    - butil::StringPiece
    - uint64_t
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 628
      start: 625
    functionDepth: 2
    functionLinenumber: 625
    functionLinenumberEnd: 628
    functionName: brpc::MemcacheRequest::Increment
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::Counter
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Increment(const butil::StringPiece& key, uint64_t
      delta,\n                                uint64_t initial_value, uint32_t exptime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheRequest::Counter
      Src: /src/brpc/src/brpc/memcache.cpp:632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' key'
    - delta
    - initial_value
    - exptime
    argTypes:
    - butil::StringPiece
    - uint64_t
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 630
    functionDepth: 2
    functionLinenumber: 630
    functionLinenumberEnd: 633
    functionName: brpc::MemcacheRequest::Decrement
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheRequest::Counter
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheRequest::Decrement(const butil::StringPiece& key, uint64_t
      delta,\n                                uint64_t initial_value, uint32_t exptime)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:648,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:651,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:654,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:656,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:660,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:664,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:665,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:668,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:672,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:674,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:675,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:680,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:684,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/memcache.cpp:685,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:689,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - command
    - new_value
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 691
      start: 646
    functionDepth: 1
    functionLinenumber: 646
    functionLinenumberEnd: 691
    functionName: brpc::MemcacheResponse::PopCounter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - copy_to
    - pop_front
    - clear
    - cutn
    - size
    - butil::NetToHost64
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: "bool MemcacheResponse::PopCounter(\n    uint8_t command, uint64_t*
      new_value, uint64_t* cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopCounter
      Src: /src/brpc/src/brpc/memcache.cpp:694,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 695
      start: 693
    functionDepth: 2
    functionLinenumber: 693
    functionLinenumberEnd: 695
    functionName: brpc::MemcacheResponse::PopIncrement
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopCounter
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopIncrement(uint64_t* new_value, uint64_t*
      cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::PopCounter
      Src: /src/brpc/src/brpc/memcache.cpp:697,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 696
    functionDepth: 2
    functionLinenumber: 696
    functionLinenumberEnd: 698
    functionName: brpc::MemcacheResponse::PopDecrement
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - brpc::MemcacheResponse::PopCounter
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopDecrement(uint64_t* new_value, uint64_t*
      cas_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/memcache.cpp:725,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:725,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:729,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:729,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:731,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:732,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:735,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:735,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:735,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' key'
    - exptime
    argTypes:
    - butil::StringPiece
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 740
    functionName: brpc::MemcacheRequest::Touch
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::HostToNet32
    - data
    - size
    - butil::HostToNet16
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Touch(const butil::StringPiece& key, uint32_t
      exptime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:757,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 762
      start: 745
    functionDepth: 1
    functionLinenumber: 745
    functionLinenumberEnd: 762
    functionName: brpc::MemcacheRequest::Version
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - append
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Version()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:768,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:771,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:774,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:776,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:780,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:784,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:785,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:788,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:790,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:794,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:795,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:799,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:800,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:802,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - version
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 767
    functionDepth: 1
    functionLinenumber: 767
    functionLinenumberEnd: 804
    functionName: brpc::MemcacheResponse::PopVersion
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - copy_to
    - std::string*::clear
    - pop_front
    - clear
    - cutn
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopVersion(std::string* version)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::KVMap::KVMap
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void KVMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/kvmap.h:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - KVMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: brpc::KVMap::Swap
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void Swap(KVMap &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/kvmap.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: brpc::KVMap::Clear
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/kvmap.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::KVMap::Get
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: std::string
    signature: std::string * Get(const char* key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/kvmap.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: brpc::KVMap::Get
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: std::string
    signature: std::string * Get(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::KVMap::Set
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Set(const std::string& key, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - value
    argTypes:
    - std::string
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: brpc::KVMap::Set
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Set(const std::string& key, const char* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/kvmap.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: brpc::KVMap::Set
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - std::to_string
    linkageType: ''
    returnType: void
    signature: void Set(const std::string& key, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/kvmap.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: brpc::KVMap::Remove
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: void
    signature: void Remove(const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/kvmap.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::KVMap::Remove
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: void
    signature: void Remove(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/kvmap.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: brpc::KVMap::Begin
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - begin
    linkageType: ''
    returnType: Iterator
    signature: Iterator Begin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: end
      Src: /src/brpc/src/brpc/kvmap.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: brpc::KVMap::End
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - end
    linkageType: ''
    returnType: Iterator
    signature: Iterator End() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/kvmap.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: brpc::KVMap::Count
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t Count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::KVMap::KVMap
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void KVMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/kvmap.h:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - KVMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: brpc::KVMap::Swap
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void Swap(KVMap &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/kvmap.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: brpc::KVMap::Clear
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/kvmap.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::KVMap::Get
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: std::string
    signature: std::string * Get(const char* key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/kvmap.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: brpc::KVMap::Get
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: std::string
    signature: std::string * Get(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::KVMap::Set
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Set(const std::string& key, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - value
    argTypes:
    - std::string
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: brpc::KVMap::Set
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Set(const std::string& key, const char* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/kvmap.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: brpc::KVMap::Set
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - std::to_string
    linkageType: ''
    returnType: void
    signature: void Set(const std::string& key, const T& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/kvmap.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: brpc::KVMap::Remove
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: void
    signature: void Remove(const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/kvmap.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::KVMap::Remove
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: void
    signature: void Remove(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/kvmap.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: brpc::KVMap::Begin
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - begin
    linkageType: ''
    returnType: Iterator
    signature: Iterator Begin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: end
      Src: /src/brpc/src/brpc/kvmap.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: brpc::KVMap::End
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - end
    linkageType: ''
    returnType: Iterator
    signature: Iterator End() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/kvmap.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: brpc::KVMap::Count
    functionSourceFile: /src/brpc/src/brpc/kvmap.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t Count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' service_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 68
    functionName: brpc::RestfulMap::RestfulMap
    functionSourceFile: /src/brpc/src/brpc/restful.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RestfulMap(const std::string& service_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: '& service_name() const'
    functionSourceFile: /src/brpc/src/brpc/restful.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & service_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RestfulMap::size
      Src: /src/brpc/src/brpc/restful.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::RestfulMap::size
    functionSourceFile: /src/brpc/src/brpc/restful.h
    functionUses: 1
    functionsReached:
    - brpc::RestfulMap::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' service_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 68
    functionName: brpc::RestfulMap::RestfulMap
    functionSourceFile: /src/brpc/src/brpc/restful.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RestfulMap(const std::string& service_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: '& service_name() const'
    functionSourceFile: /src/brpc/src/brpc/restful.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & service_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RestfulMap::size
      Src: /src/brpc/src/brpc/restful.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::RestfulMap::size
    functionSourceFile: /src/brpc/src/brpc/restful.h
    functionUses: 2
    functionsReached:
    - brpc::RestfulMap::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NsheadMessage::SharedCtor
      Src: /src/brpc/src/brpc/nshead_message.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::NsheadMessage::NsheadMessage
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - brpc::NsheadMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::NsheadMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NsheadMessage::SharedCtor
      Src: /src/brpc/src/brpc/nshead_message.cpp:32,1
    - Dst: brpc::NsheadMessage::MergeFrom
      Src: /src/brpc/src/brpc/nshead_message.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - NsheadMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::NsheadMessage::NsheadMessage
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - brpc::NsheadMessage::MergeFrom
    - brpc::NsheadMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::NsheadMessage(const NsheadMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/nshead_message.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: brpc::NsheadMessage::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/nshead_message.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: NsheadMessage::~NsheadMessage()
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::~NsheadMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::NsheadMessage::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/nshead_message.cpp:48,1
    - Dst: clear
      Src: /src/brpc/src/brpc/nshead_message.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: brpc::NsheadMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 1
    functionsReached:
    - clear
    - memset
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_message.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::NsheadMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t NsheadMessage::ByteSizeLong() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/nshead_message.cpp:57,1
    - Dst: dynamic_cast<const NsheadMessage*>
      Src: /src/brpc/src/brpc/nshead_message.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/nshead_message.cpp:60,1
    - Dst: brpc::NsheadMessage::MergeFrom
      Src: /src/brpc/src/brpc/nshead_message.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ::google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: brpc::NsheadMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - CHECK_NE
    - LOG
    - dynamic_cast<const NsheadMessage*>
    - brpc::NsheadMessage::MergeFrom
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::MergeFrom(const ::google::protobuf::Message& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/nshead_message.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - NsheadMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: brpc::NsheadMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::MergeFrom(const NsheadMessage& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/nshead_message.cpp:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: brpc::NsheadMessage::Swap
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::Swap(NsheadMessage* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/nshead_message.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 88
    functionName: brpc::NsheadMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata NsheadMessage::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NsheadMessage::SharedCtor
      Src: /src/brpc/src/brpc/nshead_message.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::NsheadMessage::NsheadMessage
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - brpc::NsheadMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::NsheadMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NsheadMessage::SharedCtor
      Src: /src/brpc/src/brpc/nshead_message.cpp:32,1
    - Dst: brpc::NsheadMessage::MergeFrom
      Src: /src/brpc/src/brpc/nshead_message.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - NsheadMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::NsheadMessage::NsheadMessage
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 2
    functionsReached:
    - brpc::NsheadMessage::MergeFrom
    - brpc::NsheadMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::NsheadMessage(const NsheadMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/nshead_message.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: brpc::NsheadMessage::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 4
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/nshead_message.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: NsheadMessage::~NsheadMessage()
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::~NsheadMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::NsheadMessage::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/nshead_message.cpp:48,1
    - Dst: clear
      Src: /src/brpc/src/brpc/nshead_message.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: brpc::NsheadMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 1
    functionsReached:
    - clear
    - memset
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_message.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::NsheadMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t NsheadMessage::ByteSizeLong() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/nshead_message.cpp:57,1
    - Dst: dynamic_cast<const NsheadMessage*>
      Src: /src/brpc/src/brpc/nshead_message.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/nshead_message.cpp:60,1
    - Dst: brpc::NsheadMessage::MergeFrom
      Src: /src/brpc/src/brpc/nshead_message.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ::google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: brpc::NsheadMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 4
    functionsReached:
    - CHECK_NE
    - LOG
    - dynamic_cast<const NsheadMessage*>
    - brpc::NsheadMessage::MergeFrom
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::MergeFrom(const ::google::protobuf::Message& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/nshead_message.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - NsheadMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: brpc::NsheadMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 4
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::MergeFrom(const NsheadMessage& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/nshead_message.cpp:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: brpc::NsheadMessage::Swap
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void NsheadMessage::Swap(NsheadMessage* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/nshead_message.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 88
    functionName: brpc::NsheadMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/nshead_message.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata NsheadMessage::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~PartitionParser()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PartitionParser()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 119
    functionName: brpc::PartitionChannel::initialized
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: brpc::DynamicPartitionChannel::initialized
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBase*>
      Src: /src/brpc/src/brpc/partition_channel.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::DynamicPartitionChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached:
    - static_cast<ChannelBase*>
    linkageType: ''
    returnType: int
    signature: int CheckHealth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~PartitionParser()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PartitionParser()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 119
    functionName: brpc::PartitionChannel::initialized
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: brpc::DynamicPartitionChannel::initialized
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBase*>
      Src: /src/brpc/src/brpc/partition_channel.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::DynamicPartitionChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/partition_channel.h
    functionUses: 0
    functionsReached:
    - static_cast<ChannelBase*>
    linkageType: ''
    returnType: int
    signature: int CheckHealth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~ConcurrencyLimiter()
    functionSourceFile: /src/brpc/src/brpc/concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/concurrency_limiter.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: brpc::ConcurrencyLimiterExtension
    functionSourceFile: /src/brpc/src/brpc/concurrency_limiter.h
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: Extension<const ConcurrencyLimiter>
    signature: Extension<const ConcurrencyLimiter> * ConcurrencyLimiterExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~ConcurrencyLimiter()
    functionSourceFile: /src/brpc/src/brpc/concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/concurrency_limiter.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: brpc::ConcurrencyLimiterExtension
    functionSourceFile: /src/brpc/src/brpc/concurrency_limiter.h
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: Extension<const ConcurrencyLimiter>
    signature: Extension<const ConcurrencyLimiter> * ConcurrencyLimiterExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::NonreflectableMessage::NonreflectableMessage
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonreflectableMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::NonreflectableMessage::NonreflectableMessage
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonreflectableMessage(const NonreflectableMessage&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - NonreflectableMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: '& operator=(const NonreflectableMessage& other)'
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: NonreflectableMessage
    signature: NonreflectableMessage & operator=(const NonreflectableMessage& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: '& operator=(const T& other)'
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: NonreflectableMessage
    signature: NonreflectableMessage & operator=(const T& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: base
      Src: /src/brpc/src/brpc/nonreflectable_message.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: brpc::NonreflectableMessage::GetClassData
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - base
    linkageType: ''
    returnType: ClassData
    signature: ClassData * GetClassData() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/brpc/nonreflectable_message.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::NonreflectableMessage::New
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: Message
    signature: Message * New() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::google::protobuf::Arena::Create<T>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arena
    argTypes:
    - ::google::protobuf::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::NonreflectableMessage::New
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - ::google::protobuf::Arena::Create<T>
    linkageType: ''
    returnType: Message
    signature: Message * New(::google::protobuf::Arena* arena) const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NonreflectableMessage::Clear
      Src: /src/brpc/src/brpc/nonreflectable_message.h:88,1
    - Dst: brpc::NonreflectableMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ::google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 90
    functionName: brpc::NonreflectableMessage::CopyFrom
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - brpc::NonreflectableMessage::MergeFrom
    - brpc::NonreflectableMessage::Clear
    linkageType: ''
    returnType: void
    signature: void CopyFrom(const ::google::protobuf::Message& other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NonreflectableMessage::Clear
      Src: /src/brpc/src/brpc/nonreflectable_message.h:96,1
    - Dst: brpc::NonreflectableMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - NonreflectableMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 98
    functionName: brpc::NonreflectableMessage::CopyFrom
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - brpc::NonreflectableMessage::MergeFrom
    - brpc::NonreflectableMessage::Clear
    linkageType: ''
    returnType: void
    signature: void CopyFrom(const NonreflectableMessage& other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::google::protobuf::DynamicCastToGenerated<T>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:107,1
    - Dst: ::google::protobuf::internal::DynamicCastToGenerated<const T>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:109,1
    - Dst: brpc::NonreflectableMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:112,1
    - Dst: brpc::ThriftFramedMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ::google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 100
    functionDepth: 2
    functionLinenumber: 100
    functionLinenumberEnd: 116
    functionName: brpc::NonreflectableMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 3
    functionsReached:
    - brpc::NonreflectableMessage::MergeFrom
    - brpc::ThriftFramedMessage::MergeFrom
    - ::google::protobuf::internal::DynamicCastToGenerated<const T>
    - ::google::protobuf::DynamicCastToGenerated<T>
    linkageType: ''
    returnType: void
    signature: void MergeFrom(const ::google::protobuf::Message& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::NonreflectableMessage::InitializationErrorString
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string InitializationErrorString() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: brpc::NonreflectableMessage::DiscardUnknownFields
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscardUnknownFields() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::NonreflectableMessage::SpaceUsedLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t SpaceUsedLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: brpc::NonreflectableMessage::GetTypeName
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::std::string
    signature: ::std::string GetTypeName() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: brpc::NonreflectableMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Clear() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 149
    functionName: brpc::NonreflectableMessage::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MergePartialFromCodedStream(::google::protobuf::io::CodedInputStream*)
      override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::NonreflectableMessage::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsInitialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: brpc::NonreflectableMessage::_InternalParse
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: "char * _InternalParse(\n            const char* ptr, ::google::protobuf::internal::ParseContext*)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: brpc::NonreflectableMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::NonreflectableMessage::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializeWithCachedSizes(::google::protobuf::io::CodedOutputStream*)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: brpc::NonreflectableMessage::InternalSerializeWithCachedSizesToArray
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: "uint8_t * InternalSerializeWithCachedSizesToArray(\n            uint8_t*
      ptr, ::google::protobuf::io::EpsCopyOutputStream*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::NonreflectableMessage::_InternalSerialize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: "uint8_t * _InternalSerialize(\n            uint8_t* ptr, ::google::protobuf::io::EpsCopyOutputStream*)
      const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    functionName: brpc::NonreflectableMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 197
    functionName: brpc::NonreflectableMessage::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetCachedSize(int) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const ::google::protobuf::Descriptor*>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:205,1
    - Dst: reinterpret_cast<const ::google::protobuf::Reflection*>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 208
    functionName: brpc::NonreflectableMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const ::google::protobuf::Reflection*>
    - reinterpret_cast<const ::google::protobuf::Descriptor*>
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: brpc::NonreflectableMessage::descriptor
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - default_instance
    linkageType: ''
    returnType: ::google::protobuf::Descriptor
    signature: ::google::protobuf::Descriptor * descriptor() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: '& default_instance() noexcept'
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & default_instance() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::google::protobuf::internal::MessageCreator
      Src: /src/brpc/src/brpc/nonreflectable_message.h:233,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:268,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 270
    functionName: brpc::NonreflectableMessage::NonreflectableMessageClassData
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - default_instance
    - ::google::protobuf::internal::MessageCreator
    linkageType: ''
    returnType: void
    signature: void NonreflectableMessageClassData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::NonreflectableMessage::NonreflectableMessage
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonreflectableMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::NonreflectableMessage::NonreflectableMessage
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NonreflectableMessage(const NonreflectableMessage&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - NonreflectableMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: '& operator=(const NonreflectableMessage& other)'
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: NonreflectableMessage
    signature: NonreflectableMessage & operator=(const NonreflectableMessage& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: '& operator=(const T& other)'
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: NonreflectableMessage
    signature: NonreflectableMessage & operator=(const T& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: base
      Src: /src/brpc/src/brpc/nonreflectable_message.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: brpc::NonreflectableMessage::GetClassData
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - base
    linkageType: ''
    returnType: ClassData
    signature: ClassData * GetClassData() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/brpc/nonreflectable_message.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::NonreflectableMessage::New
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: Message
    signature: Message * New() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::google::protobuf::Arena::Create<T>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arena
    argTypes:
    - ::google::protobuf::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::NonreflectableMessage::New
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - ::google::protobuf::Arena::Create<T>
    linkageType: ''
    returnType: Message
    signature: Message * New(::google::protobuf::Arena* arena) const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NonreflectableMessage::Clear
      Src: /src/brpc/src/brpc/nonreflectable_message.h:88,1
    - Dst: brpc::NonreflectableMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ::google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 84
    functionDepth: 3
    functionLinenumber: 84
    functionLinenumberEnd: 90
    functionName: brpc::NonreflectableMessage::CopyFrom
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - brpc::NonreflectableMessage::MergeFrom
    - brpc::NonreflectableMessage::Clear
    linkageType: ''
    returnType: void
    signature: void CopyFrom(const ::google::protobuf::Message& other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NonreflectableMessage::Clear
      Src: /src/brpc/src/brpc/nonreflectable_message.h:96,1
    - Dst: brpc::NonreflectableMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - NonreflectableMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 92
    functionDepth: 3
    functionLinenumber: 92
    functionLinenumberEnd: 98
    functionName: brpc::NonreflectableMessage::CopyFrom
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - brpc::NonreflectableMessage::MergeFrom
    - brpc::NonreflectableMessage::Clear
    linkageType: ''
    returnType: void
    signature: void CopyFrom(const NonreflectableMessage& other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::google::protobuf::DynamicCastToGenerated<T>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:107,1
    - Dst: ::google::protobuf::internal::DynamicCastToGenerated<const T>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:109,1
    - Dst: brpc::NonreflectableMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:112,1
    - Dst: brpc::ThriftFramedMessage::MergeFrom
      Src: /src/brpc/src/brpc/nonreflectable_message.h:114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ::google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 100
    functionDepth: 2
    functionLinenumber: 100
    functionLinenumberEnd: 116
    functionName: brpc::NonreflectableMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 6
    functionsReached:
    - brpc::NonreflectableMessage::MergeFrom
    - brpc::ThriftFramedMessage::MergeFrom
    - ::google::protobuf::internal::DynamicCastToGenerated<const T>
    - ::google::protobuf::DynamicCastToGenerated<T>
    linkageType: ''
    returnType: void
    signature: void MergeFrom(const ::google::protobuf::Message& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::NonreflectableMessage::InitializationErrorString
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string InitializationErrorString() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: brpc::NonreflectableMessage::DiscardUnknownFields
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscardUnknownFields() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::NonreflectableMessage::SpaceUsedLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t SpaceUsedLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: brpc::NonreflectableMessage::GetTypeName
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::std::string
    signature: ::std::string GetTypeName() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: brpc::NonreflectableMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Clear() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 149
    functionName: brpc::NonreflectableMessage::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MergePartialFromCodedStream(::google::protobuf::io::CodedInputStream*)
      override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::NonreflectableMessage::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsInitialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: brpc::NonreflectableMessage::_InternalParse
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: "char * _InternalParse(\n            const char* ptr, ::google::protobuf::internal::ParseContext*)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: brpc::NonreflectableMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::NonreflectableMessage::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializeWithCachedSizes(::google::protobuf::io::CodedOutputStream*)
      const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: brpc::NonreflectableMessage::InternalSerializeWithCachedSizesToArray
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: "uint8_t * InternalSerializeWithCachedSizesToArray(\n            uint8_t*
      ptr, ::google::protobuf::io::EpsCopyOutputStream*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::NonreflectableMessage::_InternalSerialize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: "uint8_t * _InternalSerialize(\n            uint8_t* ptr, ::google::protobuf::io::EpsCopyOutputStream*)
      const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    functionName: brpc::NonreflectableMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 197
    functionName: brpc::NonreflectableMessage::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetCachedSize(int) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const ::google::protobuf::Descriptor*>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:205,1
    - Dst: reinterpret_cast<const ::google::protobuf::Reflection*>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 208
    functionName: brpc::NonreflectableMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const ::google::protobuf::Reflection*>
    - reinterpret_cast<const ::google::protobuf::Descriptor*>
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: brpc::NonreflectableMessage::descriptor
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - default_instance
    linkageType: ''
    returnType: ::google::protobuf::Descriptor
    signature: ::google::protobuf::Descriptor * descriptor() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: '& default_instance() noexcept'
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & default_instance() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::google::protobuf::internal::MessageCreator
      Src: /src/brpc/src/brpc/nonreflectable_message.h:233,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:268,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 270
    functionName: brpc::NonreflectableMessage::NonreflectableMessageClassData
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - default_instance
    - ::google::protobuf::internal::MessageCreator
    linkageType: ''
    returnType: void
    signature: void NonreflectableMessageClassData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: ~ProgressiveReader()
    functionSourceFile: /src/brpc/src/brpc/progressive_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ProgressiveReader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: ~ProgressiveReader()
    functionSourceFile: /src/brpc/src/brpc/progressive_reader.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ProgressiveReader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~Awaitable()
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - promise_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable(promise_type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::experimental::Awaitable::promise
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: promise_type
    signature: promise_type * promise()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: '& awaitable()'
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Awaitable<void>
    signature: Awaitable<void> & awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~Awaitable()
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - promise_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable(promise_type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::experimental::Awaitable::promise
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: promise_type
    signature: promise_type * promise()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: '& awaitable()'
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Awaitable<void>
    signature: Awaitable<void> & awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~Awaitable()
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - promise_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable(promise_type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::experimental::Awaitable::promise
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: promise_type
    signature: promise_type * promise()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: '& awaitable()'
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Awaitable<void>
    signature: Awaitable<void> & awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~Awaitable()
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - promise_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::experimental::Awaitable::Awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Awaitable(promise_type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::experimental::Awaitable::promise
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: promise_type
    signature: promise_type * promise()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: '& awaitable()'
    functionSourceFile: /src/brpc/src/brpc/coroutine.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Awaitable<void>
    signature: Awaitable<void> & awaitable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/http2.cpp:29,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/http2.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 34
    functionName: brpc::H2Settings::H2Settings
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 4
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void H2Settings::H2Settings()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/http2.cpp:38,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/http2.cpp:43,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/http2.cpp:48,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - log_error
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 52
    functionName: brpc::H2Settings::IsValid
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached:
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool H2Settings::IsValid(bool log_error) const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - H2Settings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 66
    functionName: '& operator<<(std::ostream& os, const H2Settings& s)'
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2Settings& s)
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - e
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 86
    functionName: brpc::H2ErrorToString
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2ErrorToString(H2Error e)
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 1
    argNames:
    - e
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 113
    functionName: brpc::H2ErrorToStatusCode
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int H2ErrorToStatusCode(H2Error e)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/http2.cpp:29,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/http2.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 34
    functionName: brpc::H2Settings::H2Settings
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 4
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void H2Settings::H2Settings()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/http2.cpp:38,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/http2.cpp:43,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/http2.cpp:48,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - log_error
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 52
    functionName: brpc::H2Settings::IsValid
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached:
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool H2Settings::IsValid(bool log_error) const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - H2Settings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 66
    functionName: '& operator<<(std::ostream& os, const H2Settings& s)'
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2Settings& s)
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - e
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 86
    functionName: brpc::H2ErrorToString
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2ErrorToString(H2Error e)
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 1
    argNames:
    - e
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 113
    functionName: brpc::H2ErrorToStatusCode
    functionSourceFile: /src/brpc/src/brpc/http2.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int H2ErrorToStatusCode(H2Error e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::internal::get_pointer
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get_pointer(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - function
    - self_deleting
    argTypes:
    - FunctionType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 125
    functionName: brpc::internal::FunctionClosure0::FunctionClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FunctionClosure0(FunctionType function, bool self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: ~FunctionClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: brpc::internal::FunctionClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' object'
    - method
    - self_deleting
    argTypes:
    - Pointer
    - MethodType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 145
    functionName: brpc::internal::MethodClosure0::MethodClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodClosure0(const Pointer& object, MethodType method, bool
      self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 146
    functionName: ~MethodClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::internal::MethodClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - function
    - self_deleting
    - arg1
    argTypes:
    - FunctionType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: brpc::internal::FunctionClosure1::FunctionClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure1(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: ~FunctionClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: brpc::internal::FunctionClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: brpc::internal::MethodClosure1::MethodClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure1(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: ~MethodClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: brpc::internal::MethodClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::internal::FunctionClosure2::FunctionClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure2(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: ~FunctionClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: brpc::internal::FunctionClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: brpc::internal::MethodClosure2::MethodClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure2(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: ~MethodClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: brpc::internal::MethodClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 264
    functionName: brpc::internal::FunctionClosure3::FunctionClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure3(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: ~FunctionClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 271
    functionName: brpc::internal::FunctionClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: brpc::internal::MethodClosure3::MethodClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure3(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: ~MethodClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:294,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 296
    functionName: brpc::internal::MethodClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 315
    functionName: brpc::internal::FunctionClosure4::FunctionClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure4(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 316
    functionName: ~FunctionClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: brpc::internal::FunctionClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 341
    functionName: brpc::internal::MethodClosure4::MethodClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure4(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: ~MethodClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:346,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 348
    functionName: brpc::internal::MethodClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 368
    functionName: brpc::internal::FunctionClosure5::FunctionClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure5(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 369
    functionName: ~FunctionClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 375
    functionName: brpc::internal::FunctionClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: brpc::internal::MethodClosure5::MethodClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure5(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 396
    functionName: ~MethodClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:400,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 402
    functionName: brpc::internal::MethodClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    functionName: brpc::internal::FunctionClosure6::FunctionClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure6(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 424
    functionName: ~FunctionClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 430
    functionName: brpc::internal::FunctionClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 451
    functionName: brpc::internal::MethodClosure6::MethodClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure6(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    functionName: ~MethodClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 458
    functionName: brpc::internal::MethodClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 480
    functionName: brpc::internal::FunctionClosure7::FunctionClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure7(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 481
    functionName: ~FunctionClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 487
    functionName: brpc::internal::FunctionClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 509
    functionName: brpc::internal::MethodClosure7::MethodClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure7(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 510
    functionName: ~MethodClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:514,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 516
    functionName: brpc::internal::MethodClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 540
    functionName: brpc::internal::FunctionClosure8::FunctionClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure8(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: ~FunctionClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 547
    functionName: brpc::internal::FunctionClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 570
    functionName: brpc::internal::MethodClosure8::MethodClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure8(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    functionName: ~MethodClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: brpc::internal::MethodClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 602
    functionName: brpc::internal::FunctionClosure9::FunctionClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure9(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 603
    functionName: ~FunctionClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 609
    functionName: brpc::internal::FunctionClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 633
    functionName: brpc::internal::MethodClosure9::MethodClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure9(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 634
    functionName: ~MethodClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 640
    functionName: brpc::internal::MethodClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 665
    functionName: brpc::internal::FunctionClosure10::FunctionClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure10(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 666
    functionName: ~FunctionClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:670,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 672
    functionName: brpc::internal::FunctionClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 13
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 697
    functionName: brpc::internal::MethodClosure10::MethodClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure10(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 698
    functionName: ~MethodClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 700
    functionDepth: 0
    functionLinenumber: 700
    functionLinenumberEnd: 704
    functionName: brpc::internal::MethodClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::internal::get_pointer
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get_pointer(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - function
    - self_deleting
    argTypes:
    - FunctionType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 125
    functionName: brpc::internal::FunctionClosure0::FunctionClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FunctionClosure0(FunctionType function, bool self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: ~FunctionClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: brpc::internal::FunctionClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' object'
    - method
    - self_deleting
    argTypes:
    - Pointer
    - MethodType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 145
    functionName: brpc::internal::MethodClosure0::MethodClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodClosure0(const Pointer& object, MethodType method, bool
      self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 146
    functionName: ~MethodClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::internal::MethodClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - function
    - self_deleting
    - arg1
    argTypes:
    - FunctionType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: brpc::internal::FunctionClosure1::FunctionClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure1(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: ~FunctionClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: brpc::internal::FunctionClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: brpc::internal::MethodClosure1::MethodClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure1(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: ~MethodClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: brpc::internal::MethodClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::internal::FunctionClosure2::FunctionClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure2(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: ~FunctionClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: brpc::internal::FunctionClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: brpc::internal::MethodClosure2::MethodClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure2(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: ~MethodClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: brpc::internal::MethodClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 264
    functionName: brpc::internal::FunctionClosure3::FunctionClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure3(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: ~FunctionClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 271
    functionName: brpc::internal::FunctionClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: brpc::internal::MethodClosure3::MethodClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure3(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: ~MethodClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:294,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 296
    functionName: brpc::internal::MethodClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 315
    functionName: brpc::internal::FunctionClosure4::FunctionClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure4(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 316
    functionName: ~FunctionClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: brpc::internal::FunctionClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 341
    functionName: brpc::internal::MethodClosure4::MethodClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure4(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: ~MethodClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:346,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 348
    functionName: brpc::internal::MethodClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 368
    functionName: brpc::internal::FunctionClosure5::FunctionClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure5(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 369
    functionName: ~FunctionClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 375
    functionName: brpc::internal::FunctionClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: brpc::internal::MethodClosure5::MethodClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure5(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 396
    functionName: ~MethodClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:400,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 402
    functionName: brpc::internal::MethodClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    functionName: brpc::internal::FunctionClosure6::FunctionClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure6(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 424
    functionName: ~FunctionClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 430
    functionName: brpc::internal::FunctionClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 451
    functionName: brpc::internal::MethodClosure6::MethodClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure6(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    functionName: ~MethodClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 458
    functionName: brpc::internal::MethodClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 480
    functionName: brpc::internal::FunctionClosure7::FunctionClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure7(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 481
    functionName: ~FunctionClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 487
    functionName: brpc::internal::FunctionClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 509
    functionName: brpc::internal::MethodClosure7::MethodClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure7(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 510
    functionName: ~MethodClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:514,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 516
    functionName: brpc::internal::MethodClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 540
    functionName: brpc::internal::FunctionClosure8::FunctionClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure8(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: ~FunctionClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 547
    functionName: brpc::internal::FunctionClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 570
    functionName: brpc::internal::MethodClosure8::MethodClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure8(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    functionName: ~MethodClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: brpc::internal::MethodClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 602
    functionName: brpc::internal::FunctionClosure9::FunctionClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure9(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 603
    functionName: ~FunctionClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 609
    functionName: brpc::internal::FunctionClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 633
    functionName: brpc::internal::MethodClosure9::MethodClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure9(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 634
    functionName: ~MethodClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 640
    functionName: brpc::internal::MethodClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 665
    functionName: brpc::internal::FunctionClosure10::FunctionClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure10(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 666
    functionName: ~FunctionClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:670,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 672
    functionName: brpc::internal::FunctionClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 13
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 697
    functionName: brpc::internal::MethodClosure10::MethodClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure10(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 698
    functionName: ~MethodClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 700
    functionDepth: 0
    functionLinenumber: 700
    functionLinenumberEnd: 704
    functionName: brpc::internal::MethodClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure0::FunctionClosure0
      Src: /src/brpc/src/brpc/callback.h:726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 725
    functionDepth: 0
    functionLinenumber: 725
    functionLinenumberEnd: 727
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure0::FunctionClosure0
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewCallback(void (*function)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure0::FunctionClosure0
      Src: /src/brpc/src/brpc/callback.h:731,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 730
    functionDepth: 0
    functionLinenumber: 730
    functionLinenumberEnd: 732
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure0::FunctionClosure0
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewPermanentCallback(void (*function)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
      Src: /src/brpc/src/brpc/callback.h:737,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' object'
    argTypes:
    - Pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 738
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 738
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewCallback(const Pointer& object, void
      (Class::*method)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
      Src: /src/brpc/src/brpc/callback.h:743,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' object'
    argTypes:
    - Pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 744
      start: 742
    functionDepth: 0
    functionLinenumber: 742
    functionLinenumberEnd: 744
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewPermanentCallback(const Pointer& object,
      void (Class::*method)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
      Src: /src/brpc/src/brpc/callback.h:750,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg1
    argTypes:
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 751
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1),\n
      \                           Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
      Src: /src/brpc/src/brpc/callback.h:757,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg1
    argTypes:
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 755
    functionDepth: 0
    functionLinenumber: 755
    functionLinenumberEnd: 758
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1),\n
      \                                    Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
        Arg1>
      Src: /src/brpc/src/brpc/callback.h:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' object'
    - arg1
    argTypes:
    - Pointer
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 765
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
      Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(const Pointer& object, void
      (Class::*method)(Arg1),\n                            Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
        Arg1>
      Src: /src/brpc/src/brpc/callback.h:771,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' object'
    - arg1
    argTypes:
    - Pointer
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 772
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
      Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(const Pointer&
      object, void (Class::*method)(Arg1),\n                                     Arg1
      arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:778,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg1
    - arg2
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 780
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2),\n
      \                           Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:786,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg1
    - arg2
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 788
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2),\n                                     Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
        Pointer, Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:794,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' object'
    - arg1
    - arg2
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 796
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
      Pointer, Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(const Pointer& object, void
      (Class::*method)(Arg1, Arg2),\n                            Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
        Pointer, Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:803,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' object'
    - arg1
    - arg2
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 805
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
      Pointer, Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2),\n    Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2,
        Arg3>
      Src: /src/brpc/src/brpc/callback.h:811,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - arg1
    - arg2
    - arg3
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 809
    functionDepth: 0
    functionLinenumber: 809
    functionLinenumberEnd: 813
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2,
        Arg3>
      Src: /src/brpc/src/brpc/callback.h:819,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - arg1
    - arg2
    - arg3
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 821
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3),\n\t\t\t\t\t\t\t\tArg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
        Pointer, Arg1, Arg2, Arg3>
      Src: /src/brpc/src/brpc/callback.h:828,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 830
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
      Pointer, Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
        Pointer, Arg1, Arg2, Arg3>
      Src: /src/brpc/src/brpc/callback.h:837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 834
    functionDepth: 0
    functionLinenumber: 834
    functionLinenumberEnd: 839
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
      Pointer, Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n\t\tconst Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3),\n\t\tArg1 arg1, Arg2 arg2,
      Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1,
        Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:845,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 843
    functionDepth: 0
    functionLinenumber: 843
    functionLinenumberEnd: 847
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1, Arg2,
      Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4
      arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1,
        Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:853,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 855
      start: 851
    functionDepth: 0
    functionLinenumber: 851
    functionLinenumberEnd: 855
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1, Arg2,
      Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3,
      Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:862,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 859
    functionDepth: 0
    functionLinenumber: 859
    functionLinenumberEnd: 864
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4),\n    Arg1 arg1, Arg2 arg2, Arg3
      arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:871,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 873
      start: 868
    functionDepth: 0
    functionLinenumber: 868
    functionLinenumberEnd: 873
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4),\n    Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
        Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:879,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 881
      start: 877
    functionDepth: 0
    functionLinenumber: 877
    functionLinenumberEnd: 881
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
      Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3,
      Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
        Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:887,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 889
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
      Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5),\n                            Arg1 arg1, Arg2 arg2,
      Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:896,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 898
      start: 893
    functionDepth: 0
    functionLinenumber: 893
    functionLinenumberEnd: 898
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5),\n    Arg1 arg1, Arg2 arg2,
      Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:905,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 907
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 907
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5),\n    Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:913,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 915
      start: 911
    functionDepth: 0
    functionLinenumber: 911
    functionLinenumberEnd: 915
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6),\n                            Arg1 arg1, Arg2 arg2,
      Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 919
    functionDepth: 0
    functionLinenumber: 919
    functionLinenumberEnd: 923
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6),\n                            Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6>::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:930,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 927
    functionDepth: 0
    functionLinenumber: 927
    functionLinenumberEnd: 932
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::MethodClosure6<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6),\n    Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6>::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:939,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 936
    functionDepth: 0
    functionLinenumber: 936
    functionLinenumberEnd: 941
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::MethodClosure6<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6),\n    Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:947,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 949
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7),\n                            Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:955,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 957
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7),\n                            Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:965,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 967
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 967
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7),\n    Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:975,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 972
    functionDepth: 0
    functionLinenumber: 972
    functionLinenumberEnd: 977
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7),\n    Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:985,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 983
    functionDepth: 0
    functionLinenumber: 983
    functionLinenumberEnd: 987
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n                            Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:994,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 996
      start: 992
    functionDepth: 0
    functionLinenumber: 992
    functionLinenumberEnd: 996
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4,
        Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:1005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1007
      start: 1002
    functionDepth: 0
    functionLinenumber: 1002
    functionLinenumberEnd: 1007
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n    Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4,
        Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:1015,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1012
    functionDepth: 0
    functionLinenumber: 1012
    functionLinenumberEnd: 1017
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n
      \   Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7,
      Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9>::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1024,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1026
      start: 1022
    functionDepth: 0
    functionLinenumber: 1022
    functionLinenumberEnd: 1026
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>::FunctionClosure9<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9>::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1033,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1035
      start: 1031
    functionDepth: 0
    functionLinenumber: 1031
    functionLinenumberEnd: 1035
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>::FunctionClosure9<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3,
        Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1045
      start: 1040
    functionDepth: 0
    functionLinenumber: 1040
    functionLinenumberEnd: 1045
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
      Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9),\n
      \   Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7,
      Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3,
        Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1053,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 1050
    functionDepth: 0
    functionLinenumber: 1050
    functionLinenumberEnd: 1055
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
      Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6,
      Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7,
        Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1061,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1063
      start: 1059
    functionDepth: 0
    functionLinenumber: 1059
    functionLinenumberEnd: 1063
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7,
        Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1070,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1072
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2,
        Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1080,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 11
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1077
    functionDepth: 0
    functionLinenumber: 1077
    functionLinenumberEnd: 1082
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3,
      Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9,
      Arg10),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6,
      Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2,
        Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1090,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 11
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1087
    functionDepth: 0
    functionLinenumber: 1087
    functionLinenumberEnd: 1092
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3,
      Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::internal::get_pointer
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get_pointer(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - function
    - self_deleting
    argTypes:
    - FunctionType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 125
    functionName: brpc::internal::FunctionClosure0::FunctionClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FunctionClosure0(FunctionType function, bool self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: ~FunctionClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: brpc::internal::FunctionClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' object'
    - method
    - self_deleting
    argTypes:
    - Pointer
    - MethodType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 145
    functionName: brpc::internal::MethodClosure0::MethodClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodClosure0(const Pointer& object, MethodType method, bool
      self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 146
    functionName: ~MethodClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::internal::MethodClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - function
    - self_deleting
    - arg1
    argTypes:
    - FunctionType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: brpc::internal::FunctionClosure1::FunctionClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure1(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: ~FunctionClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: brpc::internal::FunctionClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: brpc::internal::MethodClosure1::MethodClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure1(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: ~MethodClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: brpc::internal::MethodClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::internal::FunctionClosure2::FunctionClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure2(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: ~FunctionClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: brpc::internal::FunctionClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: brpc::internal::MethodClosure2::MethodClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure2(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: ~MethodClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: brpc::internal::MethodClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 264
    functionName: brpc::internal::FunctionClosure3::FunctionClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure3(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: ~FunctionClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 271
    functionName: brpc::internal::FunctionClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: brpc::internal::MethodClosure3::MethodClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure3(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: ~MethodClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:294,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 296
    functionName: brpc::internal::MethodClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 315
    functionName: brpc::internal::FunctionClosure4::FunctionClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure4(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 316
    functionName: ~FunctionClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: brpc::internal::FunctionClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 341
    functionName: brpc::internal::MethodClosure4::MethodClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure4(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: ~MethodClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:346,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 348
    functionName: brpc::internal::MethodClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 368
    functionName: brpc::internal::FunctionClosure5::FunctionClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure5(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 369
    functionName: ~FunctionClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 375
    functionName: brpc::internal::FunctionClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: brpc::internal::MethodClosure5::MethodClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure5(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 396
    functionName: ~MethodClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:400,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 402
    functionName: brpc::internal::MethodClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    functionName: brpc::internal::FunctionClosure6::FunctionClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure6(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 424
    functionName: ~FunctionClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 430
    functionName: brpc::internal::FunctionClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 451
    functionName: brpc::internal::MethodClosure6::MethodClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure6(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    functionName: ~MethodClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 458
    functionName: brpc::internal::MethodClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 480
    functionName: brpc::internal::FunctionClosure7::FunctionClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure7(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 481
    functionName: ~FunctionClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 487
    functionName: brpc::internal::FunctionClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 509
    functionName: brpc::internal::MethodClosure7::MethodClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure7(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 510
    functionName: ~MethodClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:514,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 516
    functionName: brpc::internal::MethodClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 540
    functionName: brpc::internal::FunctionClosure8::FunctionClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure8(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: ~FunctionClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 547
    functionName: brpc::internal::FunctionClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 570
    functionName: brpc::internal::MethodClosure8::MethodClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure8(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    functionName: ~MethodClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: brpc::internal::MethodClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 602
    functionName: brpc::internal::FunctionClosure9::FunctionClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure9(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 603
    functionName: ~FunctionClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 609
    functionName: brpc::internal::FunctionClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 633
    functionName: brpc::internal::MethodClosure9::MethodClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure9(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 634
    functionName: ~MethodClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 640
    functionName: brpc::internal::MethodClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 665
    functionName: brpc::internal::FunctionClosure10::FunctionClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure10(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 666
    functionName: ~FunctionClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:670,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 672
    functionName: brpc::internal::FunctionClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 13
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 697
    functionName: brpc::internal::MethodClosure10::MethodClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure10(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 698
    functionName: ~MethodClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 700
    functionDepth: 0
    functionLinenumber: 700
    functionLinenumberEnd: 704
    functionName: brpc::internal::MethodClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::internal::get_pointer
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get_pointer(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - function
    - self_deleting
    argTypes:
    - FunctionType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 125
    functionName: brpc::internal::FunctionClosure0::FunctionClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FunctionClosure0(FunctionType function, bool self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: ~FunctionClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: brpc::internal::FunctionClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' object'
    - method
    - self_deleting
    argTypes:
    - Pointer
    - MethodType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 145
    functionName: brpc::internal::MethodClosure0::MethodClosure0
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodClosure0(const Pointer& object, MethodType method, bool
      self_deleting)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 146
    functionName: ~MethodClosure0()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure0()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::internal::MethodClosure0::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - function
    - self_deleting
    - arg1
    argTypes:
    - FunctionType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: brpc::internal::FunctionClosure1::FunctionClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure1(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: ~FunctionClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: brpc::internal::FunctionClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: brpc::internal::MethodClosure1::MethodClosure1
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure1(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: ~MethodClosure1()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: brpc::internal::MethodClosure1::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::internal::FunctionClosure2::FunctionClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure2(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: ~FunctionClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: brpc::internal::FunctionClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: brpc::internal::MethodClosure2::MethodClosure2
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure2(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 240
    functionName: ~MethodClosure2()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure2()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 246
    functionName: brpc::internal::MethodClosure2::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 264
    functionName: brpc::internal::FunctionClosure3::FunctionClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure3(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 265
    functionName: ~FunctionClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 271
    functionName: brpc::internal::FunctionClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: brpc::internal::MethodClosure3::MethodClosure3
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure3(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: ~MethodClosure3()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure3()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:294,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 296
    functionName: brpc::internal::MethodClosure3::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 6
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 315
    functionName: brpc::internal::FunctionClosure4::FunctionClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure4(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 316
    functionName: ~FunctionClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: brpc::internal::FunctionClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 341
    functionName: brpc::internal::MethodClosure4::MethodClosure4
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure4(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: ~MethodClosure4()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure4()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:346,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 348
    functionName: brpc::internal::MethodClosure4::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 7
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 368
    functionName: brpc::internal::FunctionClosure5::FunctionClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure5(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 369
    functionName: ~FunctionClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 375
    functionName: brpc::internal::FunctionClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: brpc::internal::MethodClosure5::MethodClosure5
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure5(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 396
    functionName: ~MethodClosure5()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure5()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:400,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 402
    functionName: brpc::internal::MethodClosure5::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 8
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    functionName: brpc::internal::FunctionClosure6::FunctionClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure6(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 424
    functionName: ~FunctionClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 430
    functionName: brpc::internal::FunctionClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 451
    functionName: brpc::internal::MethodClosure6::MethodClosure6
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure6(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    functionName: ~MethodClosure6()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure6()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 458
    functionName: brpc::internal::MethodClosure6::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 9
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 480
    functionName: brpc::internal::FunctionClosure7::FunctionClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure7(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 481
    functionName: ~FunctionClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 487
    functionName: brpc::internal::FunctionClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 509
    functionName: brpc::internal::MethodClosure7::MethodClosure7
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure7(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 510
    functionName: ~MethodClosure7()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure7()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:514,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 516
    functionName: brpc::internal::MethodClosure7::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 10
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 540
    functionName: brpc::internal::FunctionClosure8::FunctionClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure8(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: ~FunctionClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 547
    functionName: brpc::internal::FunctionClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 570
    functionName: brpc::internal::MethodClosure8::MethodClosure8
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure8(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    functionName: ~MethodClosure8()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure8()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: brpc::internal::MethodClosure8::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 11
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 602
    functionName: brpc::internal::FunctionClosure9::FunctionClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure9(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 603
    functionName: ~FunctionClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 609
    functionName: brpc::internal::FunctionClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 633
    functionName: brpc::internal::MethodClosure9::MethodClosure9
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure9(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 634
    functionName: ~MethodClosure9()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure9()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 640
    functionName: brpc::internal::MethodClosure9::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 12
    argNames:
    - function
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - FunctionType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 665
    functionName: brpc::internal::FunctionClosure10::FunctionClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FunctionClosure10(FunctionType function, bool self_deleting,\n
      \                  Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 666
    functionName: ~FunctionClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~FunctionClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/brpc/src/brpc/callback.h:670,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 672
    functionName: brpc::internal::FunctionClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - function_
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 13
    argNames:
    - ' object'
    - method
    - self_deleting
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - MethodType
    - bool
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 697
    functionName: brpc::internal::MethodClosure10::MethodClosure10
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MethodClosure10(const Pointer& object, MethodType method, bool
      self_deleting,\n                 Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4,
      Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 698
    functionName: ~MethodClosure10()
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MethodClosure10()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_pointer
      Src: /src/brpc/src/brpc/callback.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 700
    functionDepth: 0
    functionLinenumber: 700
    functionLinenumberEnd: 704
    functionName: brpc::internal::MethodClosure10::Run
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - get_pointer
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure0::FunctionClosure0
      Src: /src/brpc/src/brpc/callback.h:726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 725
    functionDepth: 0
    functionLinenumber: 725
    functionLinenumberEnd: 727
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure0::FunctionClosure0
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewCallback(void (*function)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure0::FunctionClosure0
      Src: /src/brpc/src/brpc/callback.h:731,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 730
    functionDepth: 0
    functionLinenumber: 730
    functionLinenumberEnd: 732
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure0::FunctionClosure0
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewPermanentCallback(void (*function)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
      Src: /src/brpc/src/brpc/callback.h:737,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' object'
    argTypes:
    - Pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 738
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 738
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewCallback(const Pointer& object, void
      (Class::*method)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
      Src: /src/brpc/src/brpc/callback.h:743,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' object'
    argTypes:
    - Pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 744
      start: 742
    functionDepth: 0
    functionLinenumber: 742
    functionLinenumberEnd: 744
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure0<Class, Pointer>::MethodClosure0<Class, Pointer>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: ::google::protobuf::Closure * NewPermanentCallback(const Pointer& object,
      void (Class::*method)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
      Src: /src/brpc/src/brpc/callback.h:750,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg1
    argTypes:
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 751
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1),\n
      \                           Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
      Src: /src/brpc/src/brpc/callback.h:757,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg1
    argTypes:
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 755
    functionDepth: 0
    functionLinenumber: 755
    functionLinenumberEnd: 758
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure1<Arg1>::FunctionClosure1<Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1),\n
      \                                    Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
        Arg1>
      Src: /src/brpc/src/brpc/callback.h:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' object'
    - arg1
    argTypes:
    - Pointer
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 765
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
      Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(const Pointer& object, void
      (Class::*method)(Arg1),\n                            Arg1 arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
        Arg1>
      Src: /src/brpc/src/brpc/callback.h:771,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' object'
    - arg1
    argTypes:
    - Pointer
    - Arg1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 772
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure1<Class, Pointer, Arg1>::MethodClosure1<Class, Pointer,
      Arg1>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(const Pointer&
      object, void (Class::*method)(Arg1),\n                                     Arg1
      arg1)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:778,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg1
    - arg2
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 780
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2),\n
      \                           Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:786,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg1
    - arg2
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 788
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure2<Arg1, Arg2>::FunctionClosure2<Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2),\n                                     Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
        Pointer, Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:794,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' object'
    - arg1
    - arg2
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 796
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
      Pointer, Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(const Pointer& object, void
      (Class::*method)(Arg1, Arg2),\n                            Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
        Pointer, Arg1, Arg2>
      Src: /src/brpc/src/brpc/callback.h:803,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' object'
    - arg1
    - arg2
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 805
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure2<Class, Pointer, Arg1, Arg2>::MethodClosure2<Class,
      Pointer, Arg1, Arg2>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2),\n    Arg1 arg1, Arg2 arg2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2,
        Arg3>
      Src: /src/brpc/src/brpc/callback.h:811,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - arg1
    - arg2
    - arg3
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 809
    functionDepth: 0
    functionLinenumber: 809
    functionLinenumberEnd: 813
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2,
        Arg3>
      Src: /src/brpc/src/brpc/callback.h:819,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - arg1
    - arg2
    - arg3
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 821
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure3<Arg1, Arg2, Arg3>::FunctionClosure3<Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3),\n\t\t\t\t\t\t\t\tArg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
        Pointer, Arg1, Arg2, Arg3>
      Src: /src/brpc/src/brpc/callback.h:828,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 830
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
      Pointer, Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
        Pointer, Arg1, Arg2, Arg3>
      Src: /src/brpc/src/brpc/callback.h:837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 834
    functionDepth: 0
    functionLinenumber: 834
    functionLinenumberEnd: 839
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>::MethodClosure3<Class,
      Pointer, Arg1, Arg2, Arg3>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n\t\tconst Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3),\n\t\tArg1 arg1, Arg2 arg2,
      Arg3 arg3)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1,
        Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:845,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 843
    functionDepth: 0
    functionLinenumber: 843
    functionLinenumberEnd: 847
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1, Arg2,
      Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4
      arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1,
        Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:853,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 855
      start: 851
    functionDepth: 0
    functionLinenumber: 851
    functionLinenumberEnd: 855
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>::FunctionClosure4<Arg1, Arg2,
      Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3,
      Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:862,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 859
    functionDepth: 0
    functionLinenumber: 859
    functionLinenumberEnd: 864
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4),\n    Arg1 arg1, Arg2 arg2, Arg3
      arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4>
      Src: /src/brpc/src/brpc/callback.h:871,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 873
      start: 868
    functionDepth: 0
    functionLinenumber: 868
    functionLinenumberEnd: 873
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>::MethodClosure4<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4),\n    Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
        Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:879,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 881
      start: 877
    functionDepth: 0
    functionLinenumber: 877
    functionLinenumberEnd: 881
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
      Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5),\n                            Arg1 arg1, Arg2 arg2, Arg3 arg3,
      Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
        Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:887,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 889
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>::FunctionClosure5<Arg1,
      Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5),\n                            Arg1 arg1, Arg2 arg2,
      Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:896,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 898
      start: 893
    functionDepth: 0
    functionLinenumber: 893
    functionLinenumberEnd: 898
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5),\n    Arg1 arg1, Arg2 arg2,
      Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
        Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
      Src: /src/brpc/src/brpc/callback.h:905,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 907
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 907
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>::MethodClosure5<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5),\n    Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:913,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 915
      start: 911
    functionDepth: 0
    functionLinenumber: 911
    functionLinenumberEnd: 915
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6),\n                            Arg1 arg1, Arg2 arg2,
      Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 919
    functionDepth: 0
    functionLinenumber: 919
    functionLinenumberEnd: 923
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::FunctionClosure6<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6),\n                            Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6>::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:930,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 927
    functionDepth: 0
    functionLinenumber: 927
    functionLinenumberEnd: 932
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::MethodClosure6<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6),\n    Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6>::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
      Src: /src/brpc/src/brpc/callback.h:939,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 936
    functionDepth: 0
    functionLinenumber: 936
    functionLinenumberEnd: 941
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::MethodClosure6<Class,
      Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6),\n    Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:947,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 949
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7),\n                            Arg1 arg1, Arg2
      arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:955,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 957
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::FunctionClosure7<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7),\n                            Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:965,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 967
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 967
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7),\n    Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7>
      Src: /src/brpc/src/brpc/callback.h:975,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 972
    functionDepth: 0
    functionLinenumber: 972
    functionLinenumberEnd: 977
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7>::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7),\n    Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:985,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 983
    functionDepth: 0
    functionLinenumber: 983
    functionLinenumberEnd: 987
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n                            Arg1 arg1,
      Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
        Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:994,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 8
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 996
      start: 992
    functionDepth: 0
    functionLinenumber: 992
    functionLinenumberEnd: 996
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>::FunctionClosure8<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4,
        Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:1005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1007
      start: 1002
    functionDepth: 0
    functionLinenumber: 1002
    functionLinenumberEnd: 1007
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n    Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4,
        Arg5, Arg6, Arg7, Arg8>
      Src: /src/brpc/src/brpc/callback.h:1015,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1012
    functionDepth: 0
    functionLinenumber: 1012
    functionLinenumberEnd: 1017
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8),\n
      \   Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7,
      Arg8 arg8)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9>::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1024,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1026
      start: 1022
    functionDepth: 0
    functionLinenumber: 1022
    functionLinenumberEnd: 1026
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>::FunctionClosure9<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9>::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1033,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 9
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1035
      start: 1031
    functionDepth: 0
    functionLinenumber: 1031
    functionLinenumberEnd: 1035
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>::FunctionClosure9<Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3,
        Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1045
      start: 1040
    functionDepth: 0
    functionLinenumber: 1040
    functionLinenumberEnd: 1045
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
      Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9),\n
      \   Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7,
      Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3,
        Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>
      Src: /src/brpc/src/brpc/callback.h:1053,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 1050
    functionDepth: 0
    functionLinenumber: 1050
    functionLinenumberEnd: 1055
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9>::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
      Arg6, Arg7, Arg8, Arg9>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6,
      Arg7 arg7, Arg8 arg8, Arg9 arg9)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7,
        Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1061,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1063
      start: 1059
    functionDepth: 0
    functionLinenumber: 1059
    functionLinenumberEnd: 1063
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(void (*function)(Arg1, Arg2,
      Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
        Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7,
        Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1070,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 10
    argNames:
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1072
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(void (*function)(Arg1,
      Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10),\n                            Arg1
      arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8
      arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2,
        Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1080,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 11
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1077
    functionDepth: 0
    functionLinenumber: 1077
    functionLinenumberEnd: 1082
    functionName: brpc::NewCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 17
    functionsReached:
    - internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3,
      Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewCallback(\n    const Pointer& object,
      void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9,
      Arg10),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6,
      Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5,
        Arg6, Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2,
        Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
      Src: /src/brpc/src/brpc/callback.h:1090,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 11
    argNames:
    - ' object'
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    - arg6
    - arg7
    - arg8
    - arg9
    - arg10
    argTypes:
    - Pointer
    - Arg1
    - Arg2
    - Arg3
    - Arg4
    - Arg5
    - Arg6
    - Arg7
    - Arg8
    - Arg9
    - Arg10
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1087
    functionDepth: 0
    functionLinenumber: 1087
    functionLinenumberEnd: 1092
    functionName: brpc::NewPermanentCallback
    functionSourceFile: /src/brpc/src/brpc/callback.h
    functionUses: 0
    functionsReached:
    - internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6,
      Arg7, Arg8, Arg9, Arg10>::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3,
      Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>
    linkageType: ''
    returnType: ::google::protobuf::Closure
    signature: "::google::protobuf::Closure * NewPermanentCallback(\n    const Pointer&
      object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8,
      Arg9, Arg10),\n    Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6
      arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: brpc::DefaultRpcPBMessages
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultRpcPBMessages()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: brpc::Request
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: brpc::Response
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<DefaultRpcPBMessages>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:35,1
    - Dst: GetRequestPrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:36,1
    - Dst: GetResponsePrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - ::google::protobuf::Service
    - ::google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 39
    functionName: brpc::DefaultRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached:
    - GetResponsePrototype
    - GetRequestPrototype
    - butil::get_object<DefaultRpcPBMessages>
    linkageType: ''
    returnType: RpcPBMessages
    signature: "RpcPBMessages * DefaultRpcPBMessageFactory::Get(\n        const ::google::protobuf::Service&
      service,\n        const ::google::protobuf::MethodDescriptor& method)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DefaultRpcPBMessages*>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:42,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 48
    functionName: brpc::DefaultRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    - static_cast<DefaultRpcPBMessages*>
    linkageType: ''
    returnType: void
    signature: void DefaultRpcPBMessageFactory::Return(RpcPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 23
    functionName: brpc::DefaultRpcPBMessages
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultRpcPBMessages()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 24
    functionName: brpc::Request
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: brpc::Response
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<DefaultRpcPBMessages>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:35,1
    - Dst: GetRequestPrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:36,1
    - Dst: GetResponsePrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - ::google::protobuf::Service
    - ::google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 39
    functionName: brpc::DefaultRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached:
    - GetResponsePrototype
    - GetRequestPrototype
    - butil::get_object<DefaultRpcPBMessages>
    linkageType: ''
    returnType: RpcPBMessages
    signature: "RpcPBMessages * DefaultRpcPBMessageFactory::Get(\n        const ::google::protobuf::Service&
      service,\n        const ::google::protobuf::MethodDescriptor& method)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DefaultRpcPBMessages*>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:42,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 48
    functionName: brpc::DefaultRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    - static_cast<DefaultRpcPBMessages*>
    linkageType: ''
    returnType: void
    signature: void DefaultRpcPBMessageFactory::Return(RpcPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::AMFInputStream::AMFInputStream
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFInputStream(google::protobuf::io::ZeroCopyInputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: ~AMFInputStream()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AMFInputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: brpc::AMFInputStream::popped_bytes
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t popped_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: brpc::AMFInputStream::good
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::AMFInputStream::set_bad
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 87
    functionName: brpc::AMFOutputStream::AMFOutputStream
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream(google::protobuf::io::ZeroCopyOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: done
      Src: /src/brpc/src/brpc/amf.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: ~AMFOutputStream()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - done
    linkageType: ''
    returnType: void
    signature: void ~AMFOutputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::AMFOutputStream::pushed_bytes
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t pushed_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::AMFOutputStream::good
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: brpc::AMFOutputStream::set_bad
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: ~AMFField()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~AMFField()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::SlowerClear
      Src: /src/brpc/src/brpc/amf.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: brpc::AMFField::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFField::SlowerClear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 159
    functionName: brpc::AMFField::type
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AMFMarker
    signature: AMFMarker type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 162
    functionName: brpc::AMFField::IsString
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    functionName: brpc::AMFField::IsBool
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsBool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    functionName: brpc::AMFField::IsNumber
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsNumber() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 166
    functionName: brpc::AMFField::IsObject
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsObject() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 167
    functionName: brpc::AMFField::IsArray
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsArray() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/amf.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 170
    functionName: brpc::AMFField::AsString
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece AsString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::AMFField::AsBool
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AsBool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: brpc::AMFField::AsNumber
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double AsNumber() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: '& AsObject() const'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject & AsObject() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: '& AsArray() const'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray & AsArray() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/amf.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 209
    functionName: brpc::AMFObject::Remove
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: void
    signature: void Remove(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/amf.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: brpc::AMFObject::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::begin
      Src: /src/brpc/src/brpc/amf.h:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::AMFObject::begin
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::begin
    linkageType: ''
    returnType: iterator
    signature: iterator begin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::begin
      Src: /src/brpc/src/brpc/amf.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::AMFObject::begin
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::begin
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator begin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.h:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::AMFObject::end
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::end
    linkageType: ''
    returnType: iterator
    signature: iterator end()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: brpc::AMFObject::end
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::end
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator end() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.h:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 237
    functionName: ~AMFArray()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~AMFArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: brpc::AMFArray::size
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' val'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::AMFArray::AddString
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddString(const butil::StringPiece& val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::AMFArray::AddBool
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddBool(bool val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::AMFArray::AddNumber
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddNumber(double val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::AMFArray::AddNull
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddNull()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::AMFArray::AddUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddUndefined()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::AMFArray::AddUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddUnsupported()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 250
    functionName: brpc::AMFArray::AddObject
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AddObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: brpc::AMFArray::AddArray
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AddArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:264,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: '& AMFArray::operator[](size_t index) const'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - arraysize
    linkageType: ''
    returnType: AMFField
    signature: AMFField & AMFArray::operator[](size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:268,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 270
    functionName: '& AMFArray::operator[](size_t index)'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - arraysize
    linkageType: ''
    returnType: AMFField
    signature: AMFField & AMFArray::operator[](size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::AMFInputStream::AMFInputStream
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFInputStream(google::protobuf::io::ZeroCopyInputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: ~AMFInputStream()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AMFInputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: brpc::AMFInputStream::popped_bytes
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t popped_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: brpc::AMFInputStream::good
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::AMFInputStream::set_bad
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 87
    functionName: brpc::AMFOutputStream::AMFOutputStream
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream(google::protobuf::io::ZeroCopyOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: done
      Src: /src/brpc/src/brpc/amf.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: ~AMFOutputStream()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - done
    linkageType: ''
    returnType: void
    signature: void ~AMFOutputStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::AMFOutputStream::pushed_bytes
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t pushed_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::AMFOutputStream::good
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool good()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: brpc::AMFOutputStream::set_bad
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_bad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: ~AMFField()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~AMFField()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::SlowerClear
      Src: /src/brpc/src/brpc/amf.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 157
    functionName: brpc::AMFField::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFField::SlowerClear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 159
    functionName: brpc::AMFField::type
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AMFMarker
    signature: AMFMarker type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 162
    functionName: brpc::AMFField::IsString
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    functionName: brpc::AMFField::IsBool
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsBool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    functionName: brpc::AMFField::IsNumber
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsNumber() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 166
    functionName: brpc::AMFField::IsObject
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsObject() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 167
    functionName: brpc::AMFField::IsArray
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsArray() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/amf.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 170
    functionName: brpc::AMFField::AsString
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece AsString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::AMFField::AsBool
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AsBool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: brpc::AMFField::AsNumber
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double AsNumber() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: '& AsObject() const'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject & AsObject() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: '& AsArray() const'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray & AsArray() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/amf.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 209
    functionName: brpc::AMFObject::Remove
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: void
    signature: void Remove(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/amf.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: brpc::AMFObject::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::begin
      Src: /src/brpc/src/brpc/amf.h:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::AMFObject::begin
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 3
    functionsReached:
    - brpc::AMFObject::begin
    linkageType: ''
    returnType: iterator
    signature: iterator begin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::begin
      Src: /src/brpc/src/brpc/amf.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::AMFObject::begin
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 4
    functionsReached:
    - brpc::AMFObject::begin
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator begin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.h:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::AMFObject::end
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 3
    functionsReached:
    - brpc::AMFObject::end
    linkageType: ''
    returnType: iterator
    signature: iterator end()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: brpc::AMFObject::end
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 4
    functionsReached:
    - brpc::AMFObject::end
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator end() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.h:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 237
    functionName: ~AMFArray()
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - Clear
    linkageType: ''
    returnType: void
    signature: void ~AMFArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: brpc::AMFArray::size
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' val'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::AMFArray::AddString
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddString(const butil::StringPiece& val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::AMFArray::AddBool
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddBool(bool val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::AMFArray::AddNumber
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddNumber(double val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::AMFArray::AddNull
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddNull()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::AMFArray::AddUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddUndefined()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::AMFArray::AddUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: void
    signature: void AddUnsupported()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 250
    functionName: brpc::AMFArray::AddObject
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AddObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFArray::AddField
      Src: /src/brpc/src/brpc/amf.h:251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: brpc::AMFArray::AddArray
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AddField
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AddArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:264,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: '& AMFArray::operator[](size_t index) const'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - arraysize
    linkageType: ''
    returnType: AMFField
    signature: AMFField & AMFArray::operator[](size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:268,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.h:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 270
    functionName: '& AMFArray::operator[](size_t index)'
    functionSourceFile: /src/brpc/src/brpc/amf.h
    functionUses: 0
    functionsReached:
    - arraysize
    linkageType: ''
    returnType: AMFField
    signature: AMFField & AMFArray::operator[](size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - outbuf
    - d
    argTypes:
    - char*
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 47
    functionName: brpc::AppendDecimal
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - fast_memcpy
    linkageType: ''
    returnType: size_t
    signature: size_t AppendDecimal(char* outbuf, unsigned long d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendDecimal
      Src: /src/brpc/src/brpc/redis_command.cpp:56,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - std::string
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 53
    functionDepth: 2
    functionLinenumber: 53
    functionLinenumberEnd: 60
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::AppendDecimal
    linkageType: ''
    returnType: void
    signature: void AppendHeader(std::string& buf, char fc, unsigned long value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendDecimal
      Src: /src/brpc/src/brpc/redis_command.cpp:64,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - butil::IOBuf
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 61
    functionDepth: 2
    functionLinenumber: 61
    functionLinenumberEnd: 68
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::AppendDecimal
    linkageType: ''
    returnType: void
    signature: void AppendHeader(butil::IOBuf& buf, char fc, unsigned long value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:71,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/redis_command.cpp:71,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:72,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:73,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/redis_command.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - out
    - compbuf
    - ncomp
    argTypes:
    - std::string*
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 3
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: brpc::FlushComponent
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - std::string*::append
    - std::string*::size
    - brpc::AppendHeader
    linkageType: ''
    returnType: void
    signature: void FlushComponent(std::string* out, std::string* compbuf, int* ncomp)
  - BBCount: 32
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:87,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:89,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:91,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:93,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:103,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:104,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:105,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:111,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:112,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:115,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:115,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:120,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:121,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:124,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:127,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:130,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:138,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:139,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:141,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:146,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:147,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:149,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:154,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:167,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:170,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:175,1
    - Dst: va_copy
      Src: /src/brpc/src/brpc/redis_command.cpp:179,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:182,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:188,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:196,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:206,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:216,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:226,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:227,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:234,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:235,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:241,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_command.cpp:243,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:245,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:251,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:261,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:263,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:264,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:268,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:269,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/redis_command.cpp:272,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:276,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:277,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:278,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 153
    argCount: 3
    argNames:
    - outbuf
    - fmt
    - ap
    argTypes:
    - butil::IOBuf*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 84
    functionDepth: 4
    functionLinenumber: 84
    functionLinenumberEnd: 279
    functionName: brpc::RedisCommandFormatV
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - va_copy
    - strchr
    - va_end
    - butil::Status::OK
    - std::string::back
    - isdigit
    - vsnprintf
    - brpc::FlushComponent
    - std::string::append
    - memcpy
    - LOG_IF
    - std::string::push_back
    - BuiltinServiceTest::TestStatus
    - strlen
    - va_arg
    - brpc::AppendHeader
    - std::string::reserve
    - std::min
    - std::string::pop_back
    - std::string::empty
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RedisCommandFormatV(butil::IOBuf* outbuf, const char*
      fmt, va_list ap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_command.cpp:283,1
    - Dst: brpc::RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis_command.cpp:284,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - fmt
    argTypes:
    - butil::IOBuf*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 281
    functionDepth: 5
    functionLinenumber: 281
    functionLinenumberEnd: 287
    functionName: brpc::RedisCommandFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - va_end
    - brpc::RedisCommandFormatV
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RedisCommandFormat(butil::IOBuf* buf, const char* fmt,
      ...)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:292,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:294,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:296,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:298,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:301,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:305,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:306,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:307,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:313,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:314,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:317,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:317,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:322,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:323,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:326,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:329,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:332,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:337,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:337,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:340,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:341,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:344,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:345,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:348,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:349,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:350,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 47
    argCount: 2
    argNames:
    - outbuf
    - ' cmd'
    argTypes:
    - butil::IOBuf*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 289
    functionDepth: 4
    functionLinenumber: 289
    functionLinenumberEnd: 351
    functionName: brpc::RedisCommandNoFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - std::string::back
    - std::string::reserve
    - std::min
    - butil::IOBuf*::append
    - std::string::pop_back
    - brpc::FlushComponent
    - std::string::empty
    - brpc::size
    - data
    - brpc::AppendHeader
    - butil::Status::OK
    - std::string::push_back
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RedisCommandNoFormat(butil::IOBuf* outbuf, const butil::StringPiece&
      cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:357,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:359,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:361,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:361,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:363,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:365,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - output
    - components
    - ncomponents
    argTypes:
    - butil::IOBuf*
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 353
    functionDepth: 3
    functionLinenumber: 353
    functionLinenumberEnd: 366
    functionName: brpc::RedisCommandByComponents
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::size
    - data
    - brpc::AppendHeader
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status RedisCommandByComponents(butil::IOBuf* output,\n                                      const
      butil::StringPiece* components,\n                                      size_t
      ncomponents)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 371
    functionName: brpc::RedisCommandParser::RedisCommandParser
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::RedisCommandParser()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 375
    functionName: brpc::RedisCommandParser::ParsedArgsSize
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t RedisCommandParser::ParsedArgsSize()
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:380,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_command.cpp:380,1
    - Dst: std::isalpha
      Src: /src/brpc/src/brpc/redis_command.cpp:386,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:386,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:389,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:390,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:390,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:391,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:396,1
    - Dst: std::vector<butil::StringPiece>*::clear
      Src: /src/brpc/src/brpc/redis_command.cpp:400,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/redis_command.cpp:405,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:405,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:406,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:408,1
    - Dst: std::vector<butil::StringPiece>*::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:410,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:410,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:413,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:423,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:423,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:424,1
    - Dst: std::vector<butil::StringPiece>*::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:425,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:425,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:432,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:432,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:433,1
    - Dst: std::vector<butil::StringPiece>*::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:434,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:434,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:437,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:445,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:447,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_command.cpp:452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:463,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:468,1
    - Dst: resize
      Src: /src/brpc/src/brpc/redis_command.cpp:472,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/src/brpc/redis_command.cpp:473,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_command.cpp:475,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:483,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:487,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:490,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:491,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:492,1
    - Dst: set
      Src: /src/brpc/src/brpc/redis_command.cpp:494,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:498,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:504,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/src/brpc/redis_command.cpp:508,1
    - Dst: std::vector<butil::StringPiece>*::swap
      Src: /src/brpc/src/brpc/redis_command.cpp:510,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/src/brpc/redis_command.cpp:511,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 103
    argCount: 3
    argNames:
    - ' buf'
    - args
    - arena
    argTypes:
    - butil::IOBuf
    - std::vector<butil::StringPiece>*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 513
    functionName: brpc::RedisCommandParser::Consume
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 6
    functionsReached:
    - static_cast<unsigned char>
    - strtoll
    - static_cast<const char *>
    - brpc::RedisCommandParser::Reset
    - cutn
    - static_cast<char*>
    - brpc::RedisCommandParser::Consume
    - memcpy
    - size
    - LOG
    - std::vector<butil::StringPiece>*::clear
    - copy_to
    - butil::Arena*::allocate
    - CHECK
    - fetch1
    - std::vector<butil::StringPiece>*::swap
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char *>
    - std::vector<butil::StringPiece>*::push_back
    - resize
    - std::isalpha
    - pop_front
    - set
    - tolower
    linkageType: ''
    returnType: ParseError
    signature: "ParseError RedisCommandParser::Consume(butil::IOBuf& buf,\n                                       std::vector<butil::StringPiece>*
      args,\n                                       butil::Arena* arena)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/redis_command.cpp:519,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 515
    functionDepth: 1
    functionLinenumber: 515
    functionLinenumberEnd: 520
    functionName: brpc::RedisCommandParser::Reset
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 3
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - outbuf
    - d
    argTypes:
    - char*
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 47
    functionName: brpc::AppendDecimal
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - fast_memcpy
    linkageType: ''
    returnType: size_t
    signature: size_t AppendDecimal(char* outbuf, unsigned long d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendDecimal
      Src: /src/brpc/src/brpc/redis_command.cpp:56,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - std::string
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 53
    functionDepth: 2
    functionLinenumber: 53
    functionLinenumberEnd: 60
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 4
    functionsReached:
    - append
    - brpc::AppendDecimal
    linkageType: ''
    returnType: void
    signature: void AppendHeader(std::string& buf, char fc, unsigned long value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendDecimal
      Src: /src/brpc/src/brpc/redis_command.cpp:64,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - butil::IOBuf
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 61
    functionDepth: 2
    functionLinenumber: 61
    functionLinenumberEnd: 68
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 4
    functionsReached:
    - append
    - brpc::AppendDecimal
    linkageType: ''
    returnType: void
    signature: void AppendHeader(butil::IOBuf& buf, char fc, unsigned long value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:71,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/redis_command.cpp:71,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:72,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:73,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/redis_command.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - out
    - compbuf
    - ncomp
    argTypes:
    - std::string*
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 3
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: brpc::FlushComponent
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - std::string*::clear
    - std::string*::append
    - std::string*::size
    - brpc::AppendHeader
    linkageType: ''
    returnType: void
    signature: void FlushComponent(std::string* out, std::string* compbuf, int* ncomp)
  - BBCount: 32
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:87,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:89,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:91,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:93,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:103,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:104,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:105,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:111,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:112,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:115,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:115,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:120,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:121,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:124,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:127,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:130,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:138,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:139,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:141,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:146,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:147,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:149,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:154,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:167,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:170,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:175,1
    - Dst: va_copy
      Src: /src/brpc/src/brpc/redis_command.cpp:179,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:182,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:188,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:196,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:206,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:216,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:226,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:227,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:234,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:235,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:241,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_command.cpp:243,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:245,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:251,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:261,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:263,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:264,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:268,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:269,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/redis_command.cpp:272,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:276,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:277,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:278,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 153
    argCount: 3
    argNames:
    - outbuf
    - fmt
    - ap
    argTypes:
    - butil::IOBuf*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 84
    functionDepth: 4
    functionLinenumber: 84
    functionLinenumberEnd: 279
    functionName: brpc::RedisCommandFormatV
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::append
    - va_copy
    - strchr
    - va_end
    - butil::Status::OK
    - std::string::back
    - isdigit
    - vsnprintf
    - brpc::FlushComponent
    - std::string::append
    - memcpy
    - LOG_IF
    - std::string::push_back
    - BuiltinServiceTest::TestStatus
    - strlen
    - va_arg
    - brpc::AppendHeader
    - std::string::reserve
    - std::min
    - std::string::pop_back
    - std::string::empty
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RedisCommandFormatV(butil::IOBuf* outbuf, const char*
      fmt, va_list ap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/redis_command.cpp:283,1
    - Dst: brpc::RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis_command.cpp:284,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - fmt
    argTypes:
    - butil::IOBuf*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 281
    functionDepth: 5
    functionLinenumber: 281
    functionLinenumberEnd: 287
    functionName: brpc::RedisCommandFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - va_end
    - brpc::RedisCommandFormatV
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RedisCommandFormat(butil::IOBuf* buf, const char* fmt,
      ...)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:292,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:294,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:296,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:298,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:301,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:305,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:306,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:307,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:313,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:314,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:317,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:317,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:322,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:323,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:326,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:329,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:332,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:337,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:337,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:340,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:341,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:344,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:345,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:348,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:349,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:350,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 47
    argCount: 2
    argNames:
    - outbuf
    - ' cmd'
    argTypes:
    - butil::IOBuf*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 289
    functionDepth: 4
    functionLinenumber: 289
    functionLinenumberEnd: 351
    functionName: brpc::RedisCommandNoFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - std::string::back
    - std::string::reserve
    - std::min
    - butil::IOBuf*::append
    - std::string::pop_back
    - brpc::FlushComponent
    - std::string::empty
    - brpc::size
    - data
    - brpc::AppendHeader
    - butil::Status::OK
    - std::string::push_back
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RedisCommandNoFormat(butil::IOBuf* outbuf, const butil::StringPiece&
      cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:357,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:359,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:361,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:361,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:363,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:365,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - output
    - components
    - ncomponents
    argTypes:
    - butil::IOBuf*
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 353
    functionDepth: 3
    functionLinenumber: 353
    functionLinenumberEnd: 366
    functionName: brpc::RedisCommandByComponents
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::size
    - data
    - brpc::AppendHeader
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status RedisCommandByComponents(butil::IOBuf* output,\n                                      const
      butil::StringPiece* components,\n                                      size_t
      ncomponents)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 371
    functionName: brpc::RedisCommandParser::RedisCommandParser
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::RedisCommandParser()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 375
    functionName: brpc::RedisCommandParser::ParsedArgsSize
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t RedisCommandParser::ParsedArgsSize()
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:380,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_command.cpp:380,1
    - Dst: std::isalpha
      Src: /src/brpc/src/brpc/redis_command.cpp:386,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:386,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:389,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:390,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:390,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:391,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:396,1
    - Dst: std::vector<butil::StringPiece>*::clear
      Src: /src/brpc/src/brpc/redis_command.cpp:400,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/redis_command.cpp:405,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:405,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:406,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:408,1
    - Dst: std::vector<butil::StringPiece>*::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:410,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:410,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:413,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:423,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:423,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:424,1
    - Dst: std::vector<butil::StringPiece>*::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:425,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:425,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:432,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:432,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:433,1
    - Dst: std::vector<butil::StringPiece>*::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:434,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:434,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:437,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:445,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:447,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_command.cpp:452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:463,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:468,1
    - Dst: resize
      Src: /src/brpc/src/brpc/redis_command.cpp:472,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/src/brpc/redis_command.cpp:473,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_command.cpp:475,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:483,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:487,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:490,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:491,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:492,1
    - Dst: set
      Src: /src/brpc/src/brpc/redis_command.cpp:494,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:498,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:504,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/src/brpc/redis_command.cpp:508,1
    - Dst: std::vector<butil::StringPiece>*::swap
      Src: /src/brpc/src/brpc/redis_command.cpp:510,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/src/brpc/redis_command.cpp:511,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 103
    argCount: 3
    argNames:
    - ' buf'
    - args
    - arena
    argTypes:
    - butil::IOBuf
    - std::vector<butil::StringPiece>*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 513
    functionName: brpc::RedisCommandParser::Consume
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 7
    functionsReached:
    - static_cast<unsigned char>
    - strtoll
    - static_cast<const char *>
    - brpc::RedisCommandParser::Reset
    - cutn
    - static_cast<char*>
    - brpc::RedisCommandParser::Consume
    - memcpy
    - size
    - LOG
    - std::vector<butil::StringPiece>*::clear
    - copy_to
    - butil::Arena*::allocate
    - CHECK
    - fetch1
    - std::vector<butil::StringPiece>*::swap
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char *>
    - std::vector<butil::StringPiece>*::push_back
    - resize
    - std::isalpha
    - pop_front
    - set
    - tolower
    linkageType: ''
    returnType: ParseError
    signature: "ParseError RedisCommandParser::Consume(butil::IOBuf& buf,\n                                       std::vector<butil::StringPiece>*
      args,\n                                       butil::Arena* arena)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/redis_command.cpp:519,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 515
    functionDepth: 1
    functionLinenumber: 515
    functionLinenumberEnd: 520
    functionName: brpc::RedisCommandParser::Reset
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 4
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~CircuitBreaker()
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CircuitBreaker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: brpc::CircuitBreaker::isolated_times
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int isolated_times() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: brpc::CircuitBreaker::isolation_duration_ms
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int isolation_duration_ms() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: ~CircuitBreaker()
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CircuitBreaker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: brpc::CircuitBreaker::isolated_times
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int isolated_times() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: brpc::CircuitBreaker::isolation_duration_ms
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int isolation_duration_ms() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~MongoContext()
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MongoContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - context
    argTypes:
    - MongoContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: brpc::MongoContextMessage::MongoContextMessage
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MongoContextMessage(MongoContext *context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: brpc::MongoContextMessage::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/mongo_service_adaptor.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::MongoContextMessage::context
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: MongoContext
    signature: MongoContext * context()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: ~MongoServiceAdaptor()
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MongoServiceAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~MongoContext()
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MongoContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - context
    argTypes:
    - MongoContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: brpc::MongoContextMessage::MongoContextMessage
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MongoContextMessage(MongoContext *context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: brpc::MongoContextMessage::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/mongo_service_adaptor.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::MongoContextMessage::context
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: MongoContext
    signature: MongoContext * context()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: ~MongoServiceAdaptor()
    functionSourceFile: /src/brpc/src/brpc/mongo_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~MongoServiceAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    functionSourceFile: /src/brpc/src/brpc/periodic_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int
    signature: int PeriodicNamingService::GetNamingServiceAccessIntervalMs() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:41,1
    - Dst: GetServers
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:42,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:45,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:50,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:51,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:60,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:60,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:61,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:64,1
    - Dst: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:64,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:66,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:69,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 73
    functionName: brpc::PeriodicNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/periodic_naming_service.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_usleep
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    - GetServers
    - NamingServiceActions*::ResetServers
    - bthread_self
    - std::vector::clear
    - PLOG
    linkageType: ''
    returnType: int
    signature: "int PeriodicNamingService::RunNamingService(\n    const char* service_name,
      NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    functionSourceFile: /src/brpc/src/brpc/periodic_naming_service.cpp
    functionUses: 1
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int
    signature: int PeriodicNamingService::GetNamingServiceAccessIntervalMs() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:41,1
    - Dst: GetServers
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:42,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:45,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:50,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:51,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:60,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:60,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:61,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:64,1
    - Dst: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:64,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:66,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/periodic_naming_service.cpp:69,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 36
    functionDepth: 2
    functionLinenumber: 36
    functionLinenumberEnd: 73
    functionName: brpc::PeriodicNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/periodic_naming_service.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_usleep
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    - GetServers
    - NamingServiceActions*::ResetServers
    - bthread_self
    - std::vector::clear
    - PLOG
    linkageType: ''
    returnType: int
    signature: "int PeriodicNamingService::RunNamingService(\n    const char* service_name,
      NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 115
    functionName: brpc::PrintRevision
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintRevision(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/brpc/controller.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: brpc::CreateVars
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder<int64_t>::Adder<int64_t>
    linkageType: ''
    returnType: void
    signature: void CreateVars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:140,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:140,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 143
    functionName: brpc::Controller::Controller
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 320
    functionsReached:
    - brpc::Controller::ResetPods
    - CHECK_EQ
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void Controller::Controller()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:146,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:146,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' parent_ctx'
    argTypes:
    - Inheritable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::Controller::Controller
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 320
    functionsReached:
    - brpc::Controller::ResetPods
    - CHECK_EQ
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void Controller::Controller(const Inheritable& parent_ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cntl::FlushSessionKV
      Src: /src/brpc/src/brpc/controller.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' f'
    argTypes:
    - std::ostream
    - SessionKVFlusher
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: '& operator<<(std::ostream& os, const SessionKVFlusher& f)'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - cntl::FlushSessionKV
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const SessionKVFlusher&
      f)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Count
      Src: /src/brpc/src/brpc/controller.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:163,1
    - Dst: ResetNonPods
      Src: /src/brpc/src/brpc/controller.cpp:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 166
    functionName: Controller::~Controller()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ResetNonPods
    - Count
    linkageType: ''
    returnType: void
    signature: void Controller::~Controller()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/controller.cpp:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 173
    functionName: brpc::IgnoreAllRead::OnReadOnePart
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: brpc::IgnoreAllRead::OnEndOfMessage
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IgnoreAllRead::IgnoreAllRead
      Src: /src/brpc/src/brpc/controller.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    functionName: brpc::CreateIgnoreAllRead
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - IgnoreAllRead::IgnoreAllRead
    linkageType: ''
    returnType: void
    signature: void CreateIgnoreAllRead()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::Submit
      Src: /src/brpc/src/brpc/controller.cpp:187,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:187,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:189,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:190,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:191,1
    - Dst: _session_local_data_pool::Return
      Src: /src/brpc/src/brpc/controller.cpp:193,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:195,1
    - Dst: brpc::Controller::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:198,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/controller.cpp:199,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:199,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:202,1
    - Dst: DestroyParallelChannelDone
      Src: /src/brpc/src/brpc/controller.cpp:205,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:208,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:209,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/src/brpc/controller.cpp:210,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:211,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:216,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:217,1
    - Dst: MarkRPCAsDone
      Src: /src/brpc/src/brpc/controller.cpp:219,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/controller.cpp:219,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:220,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:223,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:228,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:229,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:231,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:234,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:237,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 238
    functionName: brpc::Controller::ResetNonPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - DestroyParallelChannelDone
    - brpc::Controller::Failed
    - brpc::Controller::Reset
    - brpc::Controller::is_used_by_rpc
    - reset
    - butil::cpuwide_time_us
    - brpc::Span::Submit
    - CHECK_NE
    - brpc::ExcludedServers::Destroy
    - clear
    - bthread_id_error
    - brpc::Controller::has_progressive_reader
    - _session_local_data_pool::Return
    - bthread_id_cancel
    - butil::EndPoint
    - CHECK
    - pthread_once
    - MarkRPCAsDone
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void Controller::ResetNonPods()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/controller.cpp:246,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:276,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:297,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 240
    functionDepth: 2
    functionLinenumber: 240
    functionLinenumberEnd: 301
    functionName: brpc::Controller::ResetPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - brpc::Controller::Reset
    - brpc::Controller::set_pb_bytes_to_base64
    - clear
    linkageType: ''
    returnType: void
    signature: void Controller::ResetPods()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller::Call*::sending_sock::release
      Src: /src/brpc/src/brpc/controller.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Controller::Call*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 317
    functionName: Controller::Call::Call(Controller::Call* rhs)
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller::Call*::sending_sock::release
    linkageType: ''
    returnType: void
    signature: void Controller::Call::Call(Controller::Call* rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:320,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 321
    functionName: Controller::Call::~Call()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - get
    linkageType: ''
    returnType: void
    signature: void Controller::Call::~Call()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 331
    functionName: Controller::Call::Reset()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void Controller::Call::Reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:339,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 341
    functionName: brpc::Controller::set_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 18
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_timeout_ms(int64_t timeout_ms)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 343
    functionDepth: 1
    functionLinenumber: 343
    functionLinenumberEnd: 350
    functionName: brpc::Controller::set_backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_backup_request_ms(int64_t timeout_ms)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetBackupRequestMs
      Src: /src/brpc/src/brpc/controller.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:357,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 360
    functionName: brpc::Controller::backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - GetBackupRequestMs
    linkageType: ''
    returnType: int64_t
    signature: int64_t Controller::backup_request_ms() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:364,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - max_retry
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 371
    functionName: brpc::Controller::set_max_retry
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 10
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_max_retry(int max_retry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 376
    functionName: brpc::Controller::set_log_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void Controller::set_log_id(uint64_t log_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 381
    functionName: brpc::Controller::Failed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 185
    functionsReached:
    - brpc::Controller::FailedInline
    linkageType: ''
    returnType: bool
    signature: bool Controller::Failed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 385
    functionName: brpc::Controller::ErrorText
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 187
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string Controller::ErrorText() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: brpc::StartCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 8
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void StartCancel(CallId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 395
    functionName: brpc::Controller::StartCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::StartCancel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::is_security_mode
      Src: /src/brpc/src/brpc/controller.cpp:402,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/controller.cpp:403,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:403,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:404,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/controller.cpp:406,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:407,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:407,1
    - Dst: MD5
      Src: /src/brpc/src/brpc/controller.cpp:409,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:411,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:412,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:414,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:416,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 398
    functionDepth: 2
    functionLinenumber: 398
    functionLinenumberEnd: 419
    functionName: brpc::Controller::AppendServerIdentiy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - size
    - snprintf
    - push_back
    - MD5
    - listen_address
    - butil::my_ip_cstr
    - brpc::Controller::is_security_mode
    - butil::string_appendf
    - reserve
    linkageType: ''
    returnType: void
    signature: void Controller::AppendServerIdentiy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/controller.cpp:422,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/controller.cpp:422,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:423,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:424,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:425,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/controller.cpp:427,1
    - Dst: brpc::ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/controller.cpp:428,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:428,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/controller.cpp:430,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:435,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 439
    functionName: brpc::UpdateResponseHeader
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::Failed
    - Controller*::ErrorCode
    - DCHECK
    - Controller*::response_attachment
    - Controller*::ErrorText
    - Controller*::server
    - brpc::ErrorCodeToStatusCode
    - Controller*::request_protocol
    linkageType: ''
    returnType: void
    signature: void UpdateResponseHeader(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:443,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:444,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:447,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:449,1
    - Dst: append
      Src: /src/brpc/src/brpc/controller.cpp:451,1
    - Dst: set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:453,1
    - Dst: Annotate
      Src: /src/brpc/src/brpc/controller.cpp:454,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:456,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' reason'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 441
    functionDepth: 3
    functionLinenumber: 441
    functionLinenumberEnd: 457
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::Controller::AppendServerIdentiy
    - set_error_code
    - UpdateResponseHeader
    - push_back
    - empty
    - butil::string_appendf
    - Annotate
    linkageType: ''
    returnType: void
    signature: void Controller::SetFailed(const std::string& reason)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:461,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:465,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:466,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:469,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:471,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:473,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:475,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:478,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:479,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:480,1
    - Dst: set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:482,1
    - Dst: AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:483,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:483,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:485,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 459
    functionDepth: 3
    functionLinenumber: 459
    functionLinenumberEnd: 486
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - AnnotateCStr
    - brpc::Controller::AppendServerIdentiy
    - set_error_code
    - va_start
    - UpdateResponseHeader
    - push_back
    - CHECK
    - empty
    - butil::string_vappendf
    - c_str
    - butil::string_appendf
    - size
    - va_end
    linkageType: ''
    returnType: void
    signature: void Controller::SetFailed(int error_code, const char* reason_fmt,
      ...)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:492,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:493,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:494,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:497,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:499,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:501,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:503,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:506,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:507,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:508,1
    - Dst: set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:510,1
    - Dst: AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:511,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:511,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:513,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - reason_fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 488
    functionDepth: 3
    functionLinenumber: 488
    functionLinenumberEnd: 514
    functionName: brpc::Controller::CloseConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - AnnotateCStr
    - brpc::Controller::AppendServerIdentiy
    - brpc::Controller::add_flag
    - set_error_code
    - va_start
    - UpdateResponseHeader
    - push_back
    - c_str
    - empty
    - butil::string_vappendf
    - butil::string_appendf
    - size
    - va_end
    linkageType: ''
    returnType: void
    signature: void Controller::CloseConnection(const char* reason_fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 519
    functionName: brpc::Controller::IsCanceled
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: bool
    signature: bool Controller::IsCanceled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - cb
    - id
    argTypes:
    - google::protobuf::Closure*
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 524
    functionName: brpc::RunOnCancelThread::RunOnCancelThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunOnCancelThread(google::protobuf::Closure* cb, bthread_id_t
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RunOnCancelThread::Run
      Src: /src/brpc/src/brpc/controller.cpp:527,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 526
    functionDepth: 1
    functionLinenumber: 526
    functionLinenumberEnd: 529
    functionName: brpc::RunOnCancelThread::RunThis
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::RunOnCancelThread::Run
    linkageType: ''
    returnType: void
    signature: void * RunThis(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RunOnCancelThread::Run
      Src: /src/brpc/src/brpc/controller.cpp:532,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:533,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:533,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 531
    functionDepth: 5
    functionLinenumber: 531
    functionLinenumberEnd: 535
    functionName: brpc::RunOnCancelThread::Run
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - brpc::RunOnCancelThread::Run
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:546,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:547,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:547,1
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:554,1
    - Dst: RunOnCancelThread::RunOnCancelThread
      Src: /src/brpc/src/brpc/controller.cpp:553,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:556,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/controller.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 542
    functionDepth: 5
    functionLinenumber: 542
    functionLinenumberEnd: 558
    functionName: brpc::Controller::RunOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - RunOnCancelThread::RunOnCancelThread
    - bthread_start_urgent
    - static_cast<google::protobuf::Closure*>
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    linkageType: ''
    returnType: int
    signature: int Controller::RunOnCancel(bthread_id_t id, void* data, int error_code)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:568,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:572,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/controller.cpp:576,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/controller.cpp:577,1
    - Dst: SocketUniquePtr::NotifyOnFailed
      Src: /src/brpc/src/brpc/controller.cpp:580,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/controller.cpp:581,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - callback
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 560
    functionDepth: 3
    functionLinenumber: 560
    functionLinenumberEnd: 582
    functionName: brpc::Controller::NotifyOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - ClosureGuard::release
    - bthread_id_create
    - SocketUniquePtr::NotifyOnFailed
    - brpc::SetTrackMeAddress
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::NotifyOnCancel(google::protobuf::Closure* callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/controller.cpp:585,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 584
    functionDepth: 5
    functionLinenumber: 584
    functionLinenumberEnd: 586
    functionName: brpc::Join
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 9
    functionsReached:
    - bthread_id_join
    linkageType: ''
    returnType: void
    signature: void Join(CallId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/controller.cpp:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 588
    functionDepth: 5
    functionLinenumber: 588
    functionLinenumberEnd: 590
    functionName: brpc::JoinResponse
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_join
    linkageType: ''
    returnType: void
    signature: void JoinResponse(CallId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 595
    functionName: brpc::HandleTimeout
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleTimeout(void* arg)
  - BBCount: 23
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:601,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:602,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:603,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:608,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:614,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:615,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:615,1
    - Dst: DoBackup
      Src: /src/brpc/src/brpc/controller.cpp:624,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:627,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:627,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:633,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/controller.cpp:634,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:636,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:640,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:643,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:645,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:646,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:648,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:652,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:655,1
    - Dst: Call::Call
      Src: /src/brpc/src/brpc/controller.cpp:656,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:658,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:662,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:663,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:663,1
    - Dst: DefaultRetryPolicy
      Src: /src/brpc/src/brpc/controller.cpp:665,1
    - Dst: auto::DoRetry
      Src: /src/brpc/src/brpc/controller.cpp:666,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:670,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:670,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:671,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:673,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:674,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:676,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:680,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:682,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/controller.cpp:688,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:690,1
    - Dst: auto::GetBackoffTimeMs
      Src: /src/brpc/src/brpc/controller.cpp:694,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:696,1
    - Dst: auto::CanRetryBackoffInPthread
      Src: /src/brpc/src/brpc/controller.cpp:698,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/brpc/controller.cpp:699,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/controller.cpp:700,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:702,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:706,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:706,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:737,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:738,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:746,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:747,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:748,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:752,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:753,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:755,1
    CyclomaticComplexity: 41
    EdgeCount: 41
    ICount: 101
    argCount: 3
    argNames:
    - ' info'
    - new_bthread
    - saved_error
    argTypes:
    - CompletionInfo
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 757
      start: 597
    functionDepth: 4
    functionLinenumber: 597
    functionLinenumberEnd: 757
    functionName: brpc::Controller::OnVersionedRPCReturned
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - response_attachment
    - brpc::Controller::add_flag
    - bthread_usleep
    - bthread_id_about_to_destroy
    - bthread_start_background
    - CHECK_EQ
    - bthread_id_unlock
    - brpc::Controller::timeout_ms
    - brpc::ExcludedServers::Create
    - Add
    - Call::Call
    - DoBackup
    - brpc::Controller::SingleServer
    - brpc::Controller::IssueRPC
    - butil::microseconds_to_timespec
    - brpc::Controller::get_id
    - auto::GetBackoffTimeMs
    - LOG
    - DefaultRetryPolicy
    - butil::gettimeofday_us
    - brpc::Controller::EndRPC
    - Clear
    - auto::DoRetry
    - CHECK
    - auto::CanRetryBackoffInPthread
    - bthread::TaskGroup*::is_current_pthread_task
    - brpc::Controller::has_flag
    - OnComplete
    - brpc::Controller::FailedInline
    - std::min
    - brpc::Controller::current_id
    - bthread_timer_add
    - brpc::Controller::SetFailed
    linkageType: ''
    returnType: void
    signature: "void Controller::OnVersionedRPCReturned(const CompletionInfo& info,\n
      \                                       bool new_bthread, int saved_error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/controller.cpp:760,1
    - Dst: Controller*::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:761,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 763
    functionName: brpc::Controller::RunEndRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - Controller*::EndRPC
    linkageType: ''
    returnType: void
    signature: void * Controller::RunEndRPC(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 765
    functionDepth: 0
    functionLinenumber: 765
    functionLinenumberEnd: 773
    functionName: brpc::does_error_affect_main_socket
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool does_error_affect_main_socket(int error_code)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: DestroyStreamUserData
      Src: /src/brpc/src/brpc/controller.cpp:782,1
    - Dst: AddRecentError
      Src: /src/brpc/src/brpc/controller.cpp:788,1
    - Dst: FeedbackCircuitBreaker
      Src: /src/brpc/src/brpc/controller.cpp:792,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:793,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/controller.cpp:797,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:805,1
    - Dst: id
      Src: /src/brpc/src/brpc/controller.cpp:806,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:807,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:817,1
    - Dst: ReturnToPool
      Src: /src/brpc/src/brpc/controller.cpp:822,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:826,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:834,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:836,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:839,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:842,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:850,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:857,1
    - Dst: SocketUniquePtr::SetLogOff
      Src: /src/brpc/src/brpc/controller.cpp:859,1
    - Dst: Controller*::_lb::Feedback
      Src: /src/brpc/src/brpc/controller.cpp:866,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:870,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 54
    argCount: 4
    argNames:
    - c
    - error_code
    - responded
    - end_of_rpc
    argTypes:
    - Controller*
    - int
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 871
      start: 779
    functionDepth: 1
    functionLinenumber: 779
    functionLinenumberEnd: 871
    functionName: "Controller::Call::OnComplete(\n        Controller* c, int error_code/*note*/,
      bool responded, bool end_of_rpc)"
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - FeedbackCircuitBreaker
    - butil::gettimeofday_us
    - SetFailed
    - reset
    - DestroyStreamUserData
    - Controller*::_lb::Feedback
    - SocketUniquePtr::SetLogOff
    - is_read_progressive
    - AddRecentError
    - ReturnToPool
    - brpc::SetTrackMeAddress
    - Socket::SetFailed
    - Controller*::connection_type
    - does_error_affect_main_socket
    - id
    - OnProgressiveReadCompleted
    linkageType: ''
    returnType: void
    signature: "void Controller::Call::OnComplete(\n        Controller* c, int error_code/*note*/,
      bool responded, bool end_of_rpc)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/controller.cpp:875,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:880,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:882,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:883,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:895,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:900,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:900,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:901,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:908,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:909,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:912,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:914,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:917,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:918,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:921,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:921,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:922,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:923,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:926,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:927,1
    - Dst: DestroyStreamCreator
      Src: /src/brpc/src/brpc/controller.cpp:935,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:941,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:944,1
    - Dst: set_ending_cid
      Src: /src/brpc/src/brpc/controller.cpp:946,1
    - Dst: set_async
      Src: /src/brpc/src/brpc/controller.cpp:947,1
    - Dst: brpc::Controller::SubmitSpan
      Src: /src/brpc/src/brpc/controller.cpp:951,1
    - Dst: DoNothing
      Src: /src/brpc/src/brpc/controller.cpp:958,1
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:970,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:970,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:971,1
    - Dst: Run
      Src: /src/brpc/src/brpc/controller.cpp:972,1
    - Dst: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:979,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:980,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:980,1
    - Dst: RunUserCode
      Src: /src/brpc/src/brpc/controller.cpp:983,1
    - Dst: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:990,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:991,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:991,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 68
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CompletionInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 993
      start: 873
    functionDepth: 5
    functionLinenumber: 873
    functionLinenumberEnd: 993
    functionName: brpc::Controller::EndRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - set_async
    - bthread_about_to_quit
    - Run
    - DoNothing
    - CHECK_EQ
    - DestroyStreamCreator
    - set_ending_cid
    - reset
    - RunUserCode
    - brpc::Controller::OnRPCEnd
    - sending_sock::get
    - bthread_id_unlock_and_destroy
    - brpc::Controller::get_id
    - clear
    - brpc::Controller::HandleStreamConnection
    - sending_sock::remote_side
    - butil::gettimeofday_us
    - brpc::Controller::SubmitSpan
    - CHECK
    - brpc::Controller::has_flag
    - OnComplete
    - bthread_timer_del
    - sending_sock::local_side
    - brpc::Controller::current_id
    linkageType: ''
    returnType: void
    signature: void Controller::EndRPC(const CompletionInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:998,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - end_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 995
    functionDepth: 1
    functionLinenumber: 995
    functionLinenumberEnd: 1000
    functionName: brpc::Controller::OnRPCEnd
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::Controller::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void Controller::OnRPCEnd(int64_t end_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/controller.cpp:1003,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 1002
    functionDepth: 0
    functionLinenumber: 1002
    functionLinenumberEnd: 1004
    functionName: brpc::Controller::RunDoneInBackupThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    linkageType: ''
    returnType: void
    signature: void Controller::RunDoneInBackupThread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:1009,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:1009,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1011,1
    - Dst: Run
      Src: /src/brpc/src/brpc/controller.cpp:1012,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1015,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1015,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1006
    functionDepth: 5
    functionLinenumber: 1006
    functionLinenumberEnd: 1017
    functionName: brpc::Controller::DoneInBackupThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    - butil::gettimeofday_us
    - brpc::Controller::OnRPCEnd
    - Run
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Controller::DoneInBackupThread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1020,1
    - Dst: set_start_callback_us
      Src: /src/brpc/src/brpc/controller.cpp:1021,1
    - Dst: local_parent
      Src: /src/brpc/src/brpc/controller.cpp:1022,1
    - Dst: local_parent
      Src: /src/brpc/src/brpc/controller.cpp:1023,1
    - Dst: brpc::Span::Submit
      Src: /src/brpc/src/brpc/controller.cpp:1025,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 1019
    functionDepth: 1
    functionLinenumber: 1019
    functionLinenumberEnd: 1027
    functionName: brpc::Controller::SubmitSpan
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Span::Submit
    - butil::cpuwide_time_us
    - set_start_callback_us
    - local_parent
    linkageType: ''
    returnType: void
    signature: void Controller::SubmitSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1030,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1032,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:1032,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1034,1
    - Dst: brpc::Controller::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/controller.cpp:1042,1
    - Dst: brpc::Controller::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1043,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1029
    functionDepth: 5
    functionLinenumber: 1029
    functionLinenumberEnd: 1044
    functionName: brpc::Controller::HandleSendFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::ErrorText
    - brpc::Controller::FailedInline
    - brpc::Controller::OnVersionedRPCReturned
    - brpc::Controller::current_id
    - brpc::Controller::SetFailed
    - brpc::Controller::is_done_allowed_to_run_in_place
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::HandleSendFailed()
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1065,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:1070,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1071,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1073,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1073,1
    - Dst: brpc::Controller::has_enabled_circuit_breaker
      Src: /src/brpc/src/brpc/controller.cpp:1079,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:1081,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1084,1
    - Dst: brpc::Controller::is_health_check_call
      Src: /src/brpc/src/brpc/controller.cpp:1085,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/controller.cpp:1085,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1086,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1087,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1088,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1089,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1095,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/controller.cpp:1097,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/controller.cpp:1102,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1103,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/controller.cpp:1103,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1104,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1107,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1112,1
    - Dst: OnCreatingStream
      Src: /src/brpc/src/brpc/controller.cpp:1116,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1117,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1118,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1121,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1121,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1127,1
    - Dst: Span*::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1129,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1130,1
    - Dst: sending_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:1137,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/controller.cpp:1137,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1144,1
    - Dst: SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/src/brpc/controller.cpp:1148,1
    - Dst: SocketUniquePtr::GetShortSocket
      Src: /src/brpc/src/brpc/controller.cpp:1150,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1152,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1153,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1154,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1157,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1158,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/controller.cpp:1159,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1160,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1166,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1169,1
    - Dst: SocketUniquePtr::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1170,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1172,1
    - Dst: sending_sock::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1175,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1177,1
    - Dst: sending_sock::read_will_be_progressive
      Src: /src/brpc/src/brpc/controller.cpp:1180,1
    - Dst: sending_sock::FightAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1190,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1193,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1194,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1195,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/controller.cpp:1199,1
    - Dst: _pack_request
      Src: /src/brpc/src/brpc/controller.cpp:1201,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1205,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1209,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1209,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1211,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1218,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:1219,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1222,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1232,1
    - Dst: brpc::Controller::write_to_socket_in_background
      Src: /src/brpc/src/brpc/controller.cpp:1233,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/controller.cpp:1238,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1240,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/controller.cpp:1242,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1243,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/controller.cpp:1247,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1247,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/controller.cpp:1248,1
    - Dst: Span*::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1250,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1258,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1260,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1260,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 129
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1261
      start: 1046
    functionDepth: 6
    functionLinenumber: 1046
    functionLinenumberEnd: 1261
    functionName: brpc::Controller::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - Span*::Annotate
    - sending_sock::Write
    - sending_sock::SetAuthentication
    - CHECK_EQ
    - bthread_id_unlock
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Controller::has_enabled_circuit_breaker
    - sending_sock::set_type_of_service
    - butil::cpuwide_time_us
    - brpc::Controller::has_request_code
    - SocketUniquePtr::GetPooledSocket
    - brpc::Controller::IssueRPC
    - brpc::Controller::SingleServer
    - butil::microseconds_to_timespec
    - Describe
    - brpc::Controller::ErrorCode
    - OnCreatingStream
    - SocketUniquePtr::GetShortSocket
    - SocketUniquePtr::reset
    - brpc::Controller::write_to_socket_in_background
    - Span*::set_remote_side
    - std::ostringstream::str
    - SocketUniquePtr::id
    - _pack_request
    - butil::IOBuf::size
    - SocketUniquePtr::IsAvailable
    - brpc::Controller::is_health_check_call
    - ConnectionTypeToString
    - SocketUniquePtr::preferred_index
    - SocketMessagePtr::EstimatedByteSize
    - sending_sock::FightAuthentication
    - brpc::Controller::HandleSendFailed
    - berror
    - SelectServer
    - Span*::set_request_size
    - brpc::Controller::has_flag
    - endpoint2str
    - SocketUniquePtr::set_preferred_index
    - sending_sock::reset
    - Span*::set_sent_us
    - brpc::Controller::FailedInline
    - SocketUniquePtr::release
    - std::min
    - brpc::Controller::current_id
    - sending_sock::read_will_be_progressive
    - brpc::Controller::SetFailed
    - sending_sock::set_preferred_index
    - brpc::Controller::is_response_read_progressively
    - SocketUniquePtr::remote_side
    linkageType: ''
    returnType: void
    signature: void Controller::IssueRPC(int64_t start_realtime_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1263
    functionDepth: 1
    functionLinenumber: 1263
    functionLinenumberEnd: 1271
    functionName: brpc::Controller::set_auth_context
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_auth_context(const AuthContext* ctx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/controller.cpp:1275,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:1276,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1282,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1284,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1286,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1288,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:1289,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1290,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1292,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1293,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1294,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1294,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1295,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1296,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1296,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1298,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1298,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1299,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1299,1
    - Dst: std::unique_ptr::cntl::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1310,1
    - Dst: OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
      Src: /src/brpc/src/brpc/controller.cpp:1314,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:1317,1
    - Dst: func
      Src: /src/brpc/src/brpc/controller.cpp:1318,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1321
      start: 1273
    functionDepth: 4
    functionLinenumber: 1273
    functionLinenumberEnd: 1321
    functionName: brpc::Controller::HandleSocketFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller*::is_used_by_rpc
    - OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
    - func
    - Controller*::ErrorCode
    - bthread_start_background
    - butil::endpoint2str
    - bthread_id_unlock
    - static_cast<Controller*>
    - Controller*::backup_request_ms
    - empty
    - c_str
    - berror
    - Controller*::timeout_ms
    - Controller*::SetFailed
    - std::unique_ptr::cntl::OnVersionedRPCReturned
    - Controller*::remote_side
    linkageType: ''
    returnType: int
    signature: "int Controller::HandleSocketFailed(bthread_id_t id, void* data, int
      error_code,\n                                   const std::string& error_text)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/brpc/controller.cpp:1326,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1334,1
    - Dst: bthread_id_create2
      Src: /src/brpc/src/brpc/controller.cpp:1334,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/brpc/controller.cpp:1335,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:1337,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1341
      start: 1323
    functionDepth: 3
    functionLinenumber: 1323
    functionLinenumberEnd: 1341
    functionName: brpc::Controller::call_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 69
    functionsReached:
    - bthread_id_cancel
    - bthread_id_create2
    - CHECK_EQ
    - butil::atomic*::compare_exchange_strong
    - butil::atomic*::load
    linkageType: ''
    returnType: CallId
    signature: CallId Controller::call_id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::log_id
      Src: /src/brpc/src/brpc/controller.cpp:1352,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - ClientSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1355
      start: 1343
    functionDepth: 2
    functionLinenumber: 1343
    functionLinenumberEnd: 1355
    functionName: brpc::Controller::SaveClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_request_code
    - brpc::Controller::log_id
    linkageType: ''
    returnType: void
    signature: void Controller::SaveClientSettings(ClientSettings* s) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:1358,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1359,1
    - Dst: brpc::Controller::set_backup_request_policy
      Src: /src/brpc/src/brpc/controller.cpp:1360,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/src/brpc/controller.cpp:1361,1
    - Dst: brpc::Controller::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1362,1
    - Dst: brpc::Controller::set_connection_type
      Src: /src/brpc/src/brpc/controller.cpp:1363,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/src/brpc/controller.cpp:1364,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/src/brpc/controller.cpp:1365,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/src/brpc/controller.cpp:1366,1
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.cpp:1367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - ClientSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1369
      start: 1357
    functionDepth: 2
    functionLinenumber: 1357
    functionLinenumberEnd: 1369
    functionName: brpc::Controller::ApplyClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_type_of_service
    - brpc::Controller::set_backup_request_ms
    - brpc::Controller::set_connection_type
    - brpc::Controller::set_backup_request_policy
    - brpc::Controller::set_flag
    - brpc::Controller::set_log_id
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::set_request_checksum_type
    - brpc::Controller::set_max_retry
    linkageType: ''
    returnType: void
    signature: void Controller::ApplyClientSettings(const ClientSettings& s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSubControllerOfSelectiveChannel
      Src: /src/brpc/src/brpc/controller.cpp:1374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1377
      start: 1371
    functionDepth: 0
    functionLinenumber: 1371
    functionLinenumberEnd: 1377
    functionName: brpc::Controller::sub_count
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 42
    functionsReached:
    - GetSubControllerOfSelectiveChannel
    linkageType: ''
    returnType: int
    signature: int Controller::sub_count() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetSubControllerOfParallelChannel
      Src: /src/brpc/src/brpc/controller.cpp:1381,1
    - Dst: GetSubControllerOfSelectiveChannel
      Src: /src/brpc/src/brpc/controller.cpp:1384,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1387
      start: 1379
    functionDepth: 0
    functionLinenumber: 1379
    functionLinenumberEnd: 1387
    functionName: brpc::Controller::sub
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 40
    functionsReached:
    - GetSubControllerOfSelectiveChannel
    - GetSubControllerOfParallelChannel
    linkageType: ''
    returnType: Controller
    signature: Controller * Controller::sub(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::trace_id
      Src: /src/brpc/src/brpc/controller.cpp:1389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1389
      start: 1389
    functionDepth: 1
    functionLinenumber: 1389
    functionLinenumberEnd: 1389
    functionName: brpc::Controller::trace_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::trace_id
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t Controller::trace_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::span_id
      Src: /src/brpc/src/brpc/controller.cpp:1390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1390
      start: 1390
    functionDepth: 1
    functionLinenumber: 1390
    functionLinenumberEnd: 1390
    functionName: brpc::Controller::span_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::span_id
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t Controller::span_id() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SimpleDataPool*::Borrow
      Src: /src/brpc/src/brpc/controller.cpp:1399,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1404
      start: 1392
    functionDepth: 0
    functionLinenumber: 1392
    functionLinenumberEnd: 1404
    functionName: brpc::Controller::session_local_data
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - SimpleDataPool*::Borrow
    linkageType: ''
    returnType: void
    signature: void * Controller::session_local_data()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1407,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:1408,1
    - Dst: brpc::Controller::has_remote_stream
      Src: /src/brpc/src/brpc/controller.cpp:1408,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:1411,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1413,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1415,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1416,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1420,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1421,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1422,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1430,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1431,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1432,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1434,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1435,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1436,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1437,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1438,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1443,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1444,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/controller.cpp:1446,1
    - Dst: mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1446,1
    - Dst: clear_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1447,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1449,1
    - Dst: set_stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1450,1
    - Dst: Stream*::SetHostSocket
      Src: /src/brpc/src/brpc/controller.cpp:1451,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1452,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 40
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1406
    functionDepth: 4
    functionLinenumber: 1406
    functionLinenumberEnd: 1455
    functionName: brpc::Controller::HandleStreamConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - Stream*::SetHostSocket
    - stream_id
    - brpc::SetTrackMeAddress
    - set_stream_id
    - brpc::Stream::SetFailed
    - clear_extra_stream_ids
    - mutable_extra_stream_ids
    - size
    - std::move
    - conn
    - brpc::Controller::has_remote_stream
    - CHECK
    - brpc::policy::SendStreamRst
    - brpc::Controller::FailedInline
    - Stream*::SetConnected
    - brpc::Controller::SetFailed
    - empty
    - c_str
    - extra_stream_ids
    linkageType: ''
    returnType: void
    signature: void Controller::HandleStreamConnection(Socket *host_socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/controller.cpp:1460,1
    - Dst: length
      Src: /src/brpc/src/brpc/controller.cpp:1460,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/controller.cpp:1461,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1463,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1464,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1465,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1466,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1467,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/controller.cpp:1468,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 2
    argNames:
    - ' source'
    - output
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1471
      start: 1459
    functionDepth: 2
    functionLinenumber: 1459
    functionLinenumberEnd: 1471
    functionName: brpc::WebEscape
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - std::string*::reserve
    - std::string*::push_back
    - brpc::size
    - length
    - std::string*::append
    linkageType: ''
    returnType: void
    signature: void WebEscape(const std::string& source, std::string* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/controller.cpp:1475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' source'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1473
    functionDepth: 1
    functionLinenumber: 1473
    functionLinenumberEnd: 1477
    functionName: brpc::WebEscape
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::WebEscape
    linkageType: ''
    returnType: std::string
    signature: std::string WebEscape(const std::string& source)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req
    argTypes:
    - SampledRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1482
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1482
    functionName: brpc::Controller::reset_sampled_request
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Controller::reset_sampled_request(SampledRequest* req)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1484
    functionDepth: 0
    functionLinenumber: 1484
    functionLinenumberEnd: 1488
    functionName: brpc::Controller::release_sampled_request
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * Controller::release_sampled_request()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - sc
    argTypes:
    - StreamCreator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1496
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1496
    functionName: brpc::Controller::set_stream_creator
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_stream_creator(StreamCreator* sc)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_progressive_writer
      Src: /src/brpc/src/brpc/controller.cpp:1500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1509,1
    - Dst: sending_sock::ReAddress
      Src: /src/brpc/src/brpc/controller.cpp:1513,1
    - Dst: SocketUniquePtr::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/controller.cpp:1516,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1518,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/controller.cpp:1519,1
    - Dst: ProgressiveAttachment::ProgressiveAttachment
      Src: /src/brpc/src/brpc/controller.cpp:1518,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - stop_style
    argTypes:
    - StopStyle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1521
      start: 1498
    functionDepth: 1
    functionLinenumber: 1498
    functionLinenumberEnd: 1521
    functionName: brpc::Controller::CreateProgressiveAttachment
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - reset
    - SocketUniquePtr::fail_me_at_server_stop
    - ProgressiveAttachment::ProgressiveAttachment
    - brpc::Controller::has_progressive_writer
    - LOG
    - sending_sock::ReAddress
    linkageType: ''
    returnType: butil::intrusive_ptr<ProgressiveAttachment>
    signature: butil::intrusive_ptr<ProgressiveAttachment> Controller::CreateProgressiveAttachment(StopStyle
      stop_style)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1525,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1528,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1529,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1530,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1535,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1536,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:1538,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1539,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1540,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:1543,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:1544,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1545
      start: 1523
    functionDepth: 2
    functionLinenumber: 1523
    functionLinenumberEnd: 1545
    functionName: brpc::Controller::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 14
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - brpc::Controller::add_flag
    - brpc::Controller::is_response_read_progressively
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Controller::has_progressive_reader
    - LOG
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: void Controller::ReadProgressiveAttachmentBy(ProgressiveReader* r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - MongoContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1549
      start: 1547
    functionDepth: 0
    functionLinenumber: 1547
    functionLinenumberEnd: 1549
    functionName: brpc::Controller::set_mongo_session_data
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Controller::set_mongo_session_data(MongoContext* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1552,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/controller.cpp:1553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1554
      start: 1551
    functionDepth: 1
    functionLinenumber: 1551
    functionLinenumberEnd: 1554
    functionName: brpc::Controller::is_ssl
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - sending_sock::get
    - Socket*::is_ssl
    linkageType: ''
    returnType: bool
    signature: bool Controller::is_ssl() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1557,1
    - Dst: Socket*::GetPeerCertificate
      Src: /src/brpc/src/brpc/controller.cpp:1558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1556
    functionDepth: 1
    functionLinenumber: 1556
    functionLinenumberEnd: 1559
    functionName: brpc::Controller::get_peer_certificate
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - sending_sock::get
    - Socket*::GetPeerCertificate
    linkageType: ''
    returnType: x509_st
    signature: x509_st * Controller::get_peer_certificate() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1562,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/controller.cpp:1564,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/controller.cpp:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - level
    - optname
    - optval
    - optlen
    argTypes:
    - int
    - int
    - void*
    - socklen_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1569
      start: 1561
    functionDepth: 1
    functionLinenumber: 1561
    functionLinenumberEnd: 1569
    functionName: brpc::Controller::GetSockOption
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - sending_sock::get
    - getsockopt
    - Socket*::fd
    linkageType: ''
    returnType: int
    signature: int Controller::GetSockOption(int level, int optname, void* optval,
      socklen_t* optlen)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _after_rpc_resp_fn
      Src: /src/brpc/src/brpc/controller.cpp:1573,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - req
    - res
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1576
      start: 1571
    functionDepth: 0
    functionLinenumber: 1571
    functionLinenumberEnd: 1576
    functionName: brpc::Controller::CallAfterRpcResp
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - _after_rpc_resp_fn
    linkageType: ''
    returnType: void
    signature: void Controller::CallAfterRpcResp(const google::protobuf::Message*
      req, const google::protobuf::Message* res)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: s_prev_sigint_handler
      Src: /src/brpc/src/brpc/controller.cpp:1592,1
    - Dst: s_prev_sigterm_handler
      Src: /src/brpc/src/brpc/controller.cpp:1595,1
    - Dst: s_prev_sighup_handler
      Src: /src/brpc/src/brpc/controller.cpp:1598,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - signo
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1600
      start: 1589
    functionDepth: 0
    functionLinenumber: 1589
    functionLinenumberEnd: 1600
    functionName: brpc::quit_handler
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - s_prev_sigterm_handler
    - s_prev_sighup_handler
    - s_prev_sigint_handler
    linkageType: ''
    returnType: void
    signature: void quit_handler(int signo)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1606,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1609,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1612,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1616,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1619,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1622,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1627,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1630,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1633,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1636
      start: 1604
    functionDepth: 1
    functionLinenumber: 1604
    functionLinenumberEnd: 1636
    functionName: brpc::RegisterQuitSignalOrDie
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - RELEASE_ASSERT_VERBOSE
    - signal
    linkageType: ''
    returnType: void
    signature: void RegisterQuitSignalOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:1639,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1641
      start: 1638
    functionDepth: 0
    functionLinenumber: 1638
    functionLinenumberEnd: 1641
    functionName: brpc::IsAskedToQuit
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsAskedToQuit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: raise
      Src: /src/brpc/src/brpc/controller.cpp:1644,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1645
      start: 1643
    functionDepth: 0
    functionLinenumber: 1643
    functionLinenumberEnd: 1645
    functionName: brpc::AskToQuit
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - raise
    linkageType: ''
    returnType: void
    signature: void AskToQuit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1648
      start: 1648
    functionDepth: 0
    functionLinenumber: 1648
    functionLinenumberEnd: 1648
    functionName: brpc::DoNothingClosure::Run
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<DoNothingClosure>
      Src: /src/brpc/src/brpc/controller.cpp:1651,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1650
    functionDepth: 0
    functionLinenumber: 1650
    functionLinenumberEnd: 1652
    functionName: brpc::DoNothing
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 8
    functionsReached:
    - butil::get_leaky_singleton<DoNothingClosure>
    linkageType: ''
    returnType: google::protobuf::Closure
    signature: google::protobuf::Closure * DoNothing()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1656,1
    - Dst: KVMap::KVMap
      Src: /src/brpc/src/brpc/controller.cpp:1656,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:1658,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1659
    functionName: '& Controller::SessionKV()'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - KVMap::KVMap
    - reset
    - get
    linkageType: ''
    returnType: KVMap
    signature: KVMap & Controller::SessionKV()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Count
      Src: /src/brpc/src/brpc/controller.cpp:1666,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1671,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1672,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1680,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1680,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1688,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1688,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1692
      start: 1665
    functionDepth: 1
    functionLinenumber: 1665
    functionLinenumberEnd: 1692
    functionName: brpc::Controller::FlushSessionKV
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - request_id
    - Count
    - End
    - Begin
    linkageType: ''
    returnType: void
    signature: void Controller::FlushSessionKV(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoPrintLogPrefix
      Src: /src/brpc/src/brpc/controller.cpp:1695,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - Controller::LogPrefixDummy
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1697
      start: 1694
    functionDepth: 0
    functionLinenumber: 1694
    functionLinenumberEnd: 1697
    functionName: '& operator<<(std::ostream& os, const Controller::LogPrefixDummy&
      p)'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - DoPrintLogPrefix
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Controller::LogPrefixDummy&
      p)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1701,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1702,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1714
      start: 1699
    functionDepth: 0
    functionLinenumber: 1699
    functionLinenumberEnd: 1714
    functionName: brpc::Controller::DoPrintLogPrefix
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - request_id
    linkageType: ''
    returnType: void
    signature: void Controller::DoPrintLogPrefix(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 115
    functionName: brpc::PrintRevision
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintRevision(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/brpc/controller.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: brpc::CreateVars
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder<int64_t>::Adder<int64_t>
    linkageType: ''
    returnType: void
    signature: void CreateVars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:140,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:140,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 139
    functionDepth: 3
    functionLinenumber: 139
    functionLinenumberEnd: 143
    functionName: brpc::Controller::Controller
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 320
    functionsReached:
    - brpc::Controller::ResetPods
    - CHECK_EQ
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void Controller::Controller()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:146,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:146,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' parent_ctx'
    argTypes:
    - Inheritable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 3
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::Controller::Controller
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 320
    functionsReached:
    - brpc::Controller::ResetPods
    - CHECK_EQ
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void Controller::Controller(const Inheritable& parent_ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cntl::FlushSessionKV
      Src: /src/brpc/src/brpc/controller.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' f'
    argTypes:
    - std::ostream
    - SessionKVFlusher
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: '& operator<<(std::ostream& os, const SessionKVFlusher& f)'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - cntl::FlushSessionKV
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const SessionKVFlusher&
      f)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Count
      Src: /src/brpc/src/brpc/controller.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:163,1
    - Dst: ResetNonPods
      Src: /src/brpc/src/brpc/controller.cpp:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 166
    functionName: Controller::~Controller()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ResetNonPods
    - Count
    linkageType: ''
    returnType: void
    signature: void Controller::~Controller()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/controller.cpp:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 173
    functionName: brpc::IgnoreAllRead::OnReadOnePart
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: brpc::IgnoreAllRead::OnEndOfMessage
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IgnoreAllRead::IgnoreAllRead
      Src: /src/brpc/src/brpc/controller.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    functionName: brpc::CreateIgnoreAllRead
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - IgnoreAllRead::IgnoreAllRead
    linkageType: ''
    returnType: void
    signature: void CreateIgnoreAllRead()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::Submit
      Src: /src/brpc/src/brpc/controller.cpp:187,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:187,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:189,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:190,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:191,1
    - Dst: _session_local_data_pool::Return
      Src: /src/brpc/src/brpc/controller.cpp:193,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:195,1
    - Dst: brpc::Controller::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:198,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/controller.cpp:199,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:199,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:202,1
    - Dst: DestroyParallelChannelDone
      Src: /src/brpc/src/brpc/controller.cpp:205,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:208,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:209,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/src/brpc/controller.cpp:210,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:211,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:216,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:217,1
    - Dst: MarkRPCAsDone
      Src: /src/brpc/src/brpc/controller.cpp:219,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/controller.cpp:219,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:220,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:223,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:228,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:229,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:231,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:234,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:237,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 185
    functionDepth: 3
    functionLinenumber: 185
    functionLinenumberEnd: 238
    functionName: brpc::Controller::ResetNonPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - DestroyParallelChannelDone
    - brpc::Controller::Failed
    - brpc::Controller::Reset
    - brpc::Controller::is_used_by_rpc
    - reset
    - butil::cpuwide_time_us
    - brpc::Span::Submit
    - CHECK_NE
    - brpc::ExcludedServers::Destroy
    - clear
    - bthread_id_error
    - brpc::Controller::has_progressive_reader
    - _session_local_data_pool::Return
    - bthread_id_cancel
    - butil::EndPoint
    - CHECK
    - pthread_once
    - MarkRPCAsDone
    - brpc::Controller::ReadProgressiveAttachmentBy
    linkageType: ''
    returnType: void
    signature: void Controller::ResetNonPods()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/controller.cpp:246,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:276,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:297,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 240
    functionDepth: 2
    functionLinenumber: 240
    functionLinenumberEnd: 301
    functionName: brpc::Controller::ResetPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 6
    functionsReached:
    - brpc::Controller::Reset
    - brpc::Controller::set_pb_bytes_to_base64
    - clear
    linkageType: ''
    returnType: void
    signature: void Controller::ResetPods()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller::Call*::sending_sock::release
      Src: /src/brpc/src/brpc/controller.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Controller::Call*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 317
    functionName: Controller::Call::Call(Controller::Call* rhs)
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller::Call*::sending_sock::release
    linkageType: ''
    returnType: void
    signature: void Controller::Call::Call(Controller::Call* rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:320,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 321
    functionName: Controller::Call::~Call()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - get
    linkageType: ''
    returnType: void
    signature: void Controller::Call::~Call()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 331
    functionName: Controller::Call::Reset()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void Controller::Call::Reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:339,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 341
    functionName: brpc::Controller::set_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 19
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_timeout_ms(int64_t timeout_ms)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 343
    functionDepth: 1
    functionLinenumber: 343
    functionLinenumberEnd: 350
    functionName: brpc::Controller::set_backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 3
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_backup_request_ms(int64_t timeout_ms)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetBackupRequestMs
      Src: /src/brpc/src/brpc/controller.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:357,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 360
    functionName: brpc::Controller::backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - GetBackupRequestMs
    linkageType: ''
    returnType: int64_t
    signature: int64_t Controller::backup_request_ms() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:364,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - max_retry
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 371
    functionName: brpc::Controller::set_max_retry
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 11
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_max_retry(int max_retry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 376
    functionName: brpc::Controller::set_log_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 3
    functionsReached:
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void Controller::set_log_id(uint64_t log_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 381
    functionName: brpc::Controller::Failed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 186
    functionsReached:
    - brpc::Controller::FailedInline
    linkageType: ''
    returnType: bool
    signature: bool Controller::Failed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 385
    functionName: brpc::Controller::ErrorText
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 188
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string Controller::ErrorText() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: brpc::StartCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 8
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void StartCancel(CallId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 395
    functionName: brpc::Controller::StartCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::StartCancel()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::is_security_mode
      Src: /src/brpc/src/brpc/controller.cpp:402,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/controller.cpp:403,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:403,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:404,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/controller.cpp:406,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:407,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:407,1
    - Dst: MD5
      Src: /src/brpc/src/brpc/controller.cpp:409,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:411,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:412,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:414,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:416,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 398
    functionDepth: 2
    functionLinenumber: 398
    functionLinenumberEnd: 419
    functionName: brpc::Controller::AppendServerIdentiy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 3
    functionsReached:
    - size
    - snprintf
    - push_back
    - MD5
    - listen_address
    - butil::my_ip_cstr
    - brpc::Controller::is_security_mode
    - butil::string_appendf
    - reserve
    linkageType: ''
    returnType: void
    signature: void Controller::AppendServerIdentiy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/controller.cpp:422,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/controller.cpp:422,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:423,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:424,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:425,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/controller.cpp:427,1
    - Dst: brpc::ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/controller.cpp:428,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:428,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/controller.cpp:430,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:435,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 439
    functionName: brpc::UpdateResponseHeader
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::Failed
    - Controller*::ErrorCode
    - DCHECK
    - Controller*::response_attachment
    - Controller*::ErrorText
    - Controller*::server
    - brpc::ErrorCodeToStatusCode
    - Controller*::request_protocol
    linkageType: ''
    returnType: void
    signature: void UpdateResponseHeader(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:443,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:444,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:447,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:449,1
    - Dst: append
      Src: /src/brpc/src/brpc/controller.cpp:451,1
    - Dst: set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:453,1
    - Dst: Annotate
      Src: /src/brpc/src/brpc/controller.cpp:454,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:456,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' reason'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 441
    functionDepth: 3
    functionLinenumber: 441
    functionLinenumberEnd: 457
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - append
    - brpc::Controller::AppendServerIdentiy
    - set_error_code
    - UpdateResponseHeader
    - push_back
    - empty
    - butil::string_appendf
    - Annotate
    linkageType: ''
    returnType: void
    signature: void Controller::SetFailed(const std::string& reason)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:461,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:465,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:466,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:469,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:471,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:473,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:475,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:478,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:479,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:480,1
    - Dst: set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:482,1
    - Dst: AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:483,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:483,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:485,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 459
    functionDepth: 3
    functionLinenumber: 459
    functionLinenumberEnd: 486
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - AnnotateCStr
    - brpc::Controller::AppendServerIdentiy
    - set_error_code
    - va_start
    - UpdateResponseHeader
    - push_back
    - CHECK
    - empty
    - butil::string_vappendf
    - c_str
    - butil::string_appendf
    - size
    - va_end
    linkageType: ''
    returnType: void
    signature: void Controller::SetFailed(int error_code, const char* reason_fmt,
      ...)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:492,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:493,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:494,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:497,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:499,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:501,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:503,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:506,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:507,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:508,1
    - Dst: set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:510,1
    - Dst: AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:511,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:511,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:513,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - reason_fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 488
    functionDepth: 3
    functionLinenumber: 488
    functionLinenumberEnd: 514
    functionName: brpc::Controller::CloseConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - AnnotateCStr
    - brpc::Controller::AppendServerIdentiy
    - brpc::Controller::add_flag
    - set_error_code
    - va_start
    - UpdateResponseHeader
    - push_back
    - c_str
    - empty
    - butil::string_vappendf
    - butil::string_appendf
    - size
    - va_end
    linkageType: ''
    returnType: void
    signature: void Controller::CloseConnection(const char* reason_fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 519
    functionName: brpc::Controller::IsCanceled
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: bool
    signature: bool Controller::IsCanceled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - cb
    - id
    argTypes:
    - google::protobuf::Closure*
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 524
    functionName: brpc::RunOnCancelThread::RunOnCancelThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunOnCancelThread(google::protobuf::Closure* cb, bthread_id_t
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RunOnCancelThread::Run
      Src: /src/brpc/src/brpc/controller.cpp:527,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 526
    functionDepth: 6
    functionLinenumber: 526
    functionLinenumberEnd: 529
    functionName: brpc::RunOnCancelThread::RunThis
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::RunOnCancelThread::Run
    linkageType: ''
    returnType: void
    signature: void * RunThis(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RunOnCancelThread::Run
      Src: /src/brpc/src/brpc/controller.cpp:532,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:533,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:533,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 531
    functionDepth: 5
    functionLinenumber: 531
    functionLinenumberEnd: 535
    functionName: brpc::RunOnCancelThread::Run
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - brpc::RunOnCancelThread::Run
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:546,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:547,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:547,1
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:554,1
    - Dst: RunOnCancelThread::RunOnCancelThread
      Src: /src/brpc/src/brpc/controller.cpp:553,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:556,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/controller.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - id
    - data
    - error_code
    argTypes:
    - bthread_id_t
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 542
    functionDepth: 5
    functionLinenumber: 542
    functionLinenumberEnd: 558
    functionName: brpc::Controller::RunOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - RunOnCancelThread::RunOnCancelThread
    - bthread_start_urgent
    - static_cast<google::protobuf::Closure*>
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    linkageType: ''
    returnType: int
    signature: int Controller::RunOnCancel(bthread_id_t id, void* data, int error_code)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:568,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:572,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/controller.cpp:576,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/controller.cpp:577,1
    - Dst: SocketUniquePtr::NotifyOnFailed
      Src: /src/brpc/src/brpc/controller.cpp:580,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/controller.cpp:581,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - callback
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 560
    functionDepth: 3
    functionLinenumber: 560
    functionLinenumberEnd: 582
    functionName: brpc::Controller::NotifyOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - ClosureGuard::release
    - bthread_id_create
    - SocketUniquePtr::NotifyOnFailed
    - brpc::SetTrackMeAddress
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::NotifyOnCancel(google::protobuf::Closure* callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/controller.cpp:585,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 584
    functionDepth: 5
    functionLinenumber: 584
    functionLinenumberEnd: 586
    functionName: brpc::Join
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 9
    functionsReached:
    - bthread_id_join
    linkageType: ''
    returnType: void
    signature: void Join(CallId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/controller.cpp:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 588
    functionDepth: 5
    functionLinenumber: 588
    functionLinenumberEnd: 590
    functionName: brpc::JoinResponse
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_join
    linkageType: ''
    returnType: void
    signature: void JoinResponse(CallId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 595
    functionName: brpc::HandleTimeout
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void HandleTimeout(void* arg)
  - BBCount: 23
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:601,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:602,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:603,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:608,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:614,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:615,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:615,1
    - Dst: DoBackup
      Src: /src/brpc/src/brpc/controller.cpp:624,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:627,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:627,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:633,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/controller.cpp:634,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:636,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:640,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:643,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:645,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:646,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:648,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:652,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:655,1
    - Dst: Call::Call
      Src: /src/brpc/src/brpc/controller.cpp:656,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:658,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:662,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:663,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:663,1
    - Dst: DefaultRetryPolicy
      Src: /src/brpc/src/brpc/controller.cpp:665,1
    - Dst: auto::DoRetry
      Src: /src/brpc/src/brpc/controller.cpp:666,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:670,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:670,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:671,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:673,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:674,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:676,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:680,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:682,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/controller.cpp:688,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:690,1
    - Dst: auto::GetBackoffTimeMs
      Src: /src/brpc/src/brpc/controller.cpp:694,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:696,1
    - Dst: auto::CanRetryBackoffInPthread
      Src: /src/brpc/src/brpc/controller.cpp:698,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/brpc/controller.cpp:699,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/controller.cpp:700,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:702,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:706,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:706,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:737,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:738,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:746,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:747,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:748,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:752,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:753,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:755,1
    CyclomaticComplexity: 41
    EdgeCount: 41
    ICount: 101
    argCount: 3
    argNames:
    - ' info'
    - new_bthread
    - saved_error
    argTypes:
    - CompletionInfo
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 757
      start: 597
    functionDepth: 7
    functionLinenumber: 597
    functionLinenumberEnd: 757
    functionName: brpc::Controller::OnVersionedRPCReturned
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - response_attachment
    - brpc::Controller::add_flag
    - bthread_usleep
    - bthread_id_about_to_destroy
    - bthread_start_background
    - CHECK_EQ
    - bthread_id_unlock
    - brpc::Controller::timeout_ms
    - brpc::ExcludedServers::Create
    - Add
    - Call::Call
    - DoBackup
    - brpc::Controller::SingleServer
    - brpc::Controller::IssueRPC
    - butil::microseconds_to_timespec
    - brpc::Controller::get_id
    - auto::GetBackoffTimeMs
    - LOG
    - DefaultRetryPolicy
    - butil::gettimeofday_us
    - brpc::Controller::EndRPC
    - Clear
    - auto::DoRetry
    - CHECK
    - auto::CanRetryBackoffInPthread
    - bthread::TaskGroup*::is_current_pthread_task
    - brpc::Controller::has_flag
    - OnComplete
    - brpc::Controller::FailedInline
    - std::min
    - brpc::Controller::current_id
    - bthread_timer_add
    - brpc::Controller::SetFailed
    linkageType: ''
    returnType: void
    signature: "void Controller::OnVersionedRPCReturned(const CompletionInfo& info,\n
      \                                       bool new_bthread, int saved_error)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/controller.cpp:760,1
    - Dst: Controller*::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:761,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 763
    functionName: brpc::Controller::RunEndRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - Controller*::EndRPC
    linkageType: ''
    returnType: void
    signature: void * Controller::RunEndRPC(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 765
    functionDepth: 0
    functionLinenumber: 765
    functionLinenumberEnd: 773
    functionName: brpc::does_error_affect_main_socket
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool does_error_affect_main_socket(int error_code)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: DestroyStreamUserData
      Src: /src/brpc/src/brpc/controller.cpp:782,1
    - Dst: AddRecentError
      Src: /src/brpc/src/brpc/controller.cpp:788,1
    - Dst: FeedbackCircuitBreaker
      Src: /src/brpc/src/brpc/controller.cpp:792,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:793,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/controller.cpp:797,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:805,1
    - Dst: id
      Src: /src/brpc/src/brpc/controller.cpp:806,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:807,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:817,1
    - Dst: ReturnToPool
      Src: /src/brpc/src/brpc/controller.cpp:822,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:826,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:834,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:836,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:839,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:842,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:850,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:857,1
    - Dst: SocketUniquePtr::SetLogOff
      Src: /src/brpc/src/brpc/controller.cpp:859,1
    - Dst: Controller*::_lb::Feedback
      Src: /src/brpc/src/brpc/controller.cpp:866,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:870,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 54
    argCount: 4
    argNames:
    - c
    - error_code
    - responded
    - end_of_rpc
    argTypes:
    - Controller*
    - int
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 871
      start: 779
    functionDepth: 1
    functionLinenumber: 779
    functionLinenumberEnd: 871
    functionName: "Controller::Call::OnComplete(\n        Controller* c, int error_code/*note*/,
      bool responded, bool end_of_rpc)"
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - FeedbackCircuitBreaker
    - butil::gettimeofday_us
    - SetFailed
    - reset
    - DestroyStreamUserData
    - Controller*::_lb::Feedback
    - SocketUniquePtr::SetLogOff
    - is_read_progressive
    - AddRecentError
    - ReturnToPool
    - brpc::SetTrackMeAddress
    - Socket::SetFailed
    - Controller*::connection_type
    - does_error_affect_main_socket
    - id
    - OnProgressiveReadCompleted
    linkageType: ''
    returnType: void
    signature: "void Controller::Call::OnComplete(\n        Controller* c, int error_code/*note*/,
      bool responded, bool end_of_rpc)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/controller.cpp:875,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:880,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:882,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:883,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:895,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:900,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:900,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:901,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:908,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:909,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:912,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:914,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:917,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:918,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:921,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:921,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:922,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:923,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:926,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:927,1
    - Dst: DestroyStreamCreator
      Src: /src/brpc/src/brpc/controller.cpp:935,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:941,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:944,1
    - Dst: set_ending_cid
      Src: /src/brpc/src/brpc/controller.cpp:946,1
    - Dst: set_async
      Src: /src/brpc/src/brpc/controller.cpp:947,1
    - Dst: brpc::Controller::SubmitSpan
      Src: /src/brpc/src/brpc/controller.cpp:951,1
    - Dst: DoNothing
      Src: /src/brpc/src/brpc/controller.cpp:958,1
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:970,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:970,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:971,1
    - Dst: Run
      Src: /src/brpc/src/brpc/controller.cpp:972,1
    - Dst: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:979,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:980,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:980,1
    - Dst: RunUserCode
      Src: /src/brpc/src/brpc/controller.cpp:983,1
    - Dst: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:990,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:991,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:991,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 68
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CompletionInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 993
      start: 873
    functionDepth: 5
    functionLinenumber: 873
    functionLinenumberEnd: 993
    functionName: brpc::Controller::EndRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - set_async
    - bthread_about_to_quit
    - Run
    - DoNothing
    - CHECK_EQ
    - DestroyStreamCreator
    - set_ending_cid
    - reset
    - RunUserCode
    - brpc::Controller::OnRPCEnd
    - sending_sock::get
    - bthread_id_unlock_and_destroy
    - brpc::Controller::get_id
    - clear
    - brpc::Controller::HandleStreamConnection
    - sending_sock::remote_side
    - butil::gettimeofday_us
    - brpc::Controller::SubmitSpan
    - CHECK
    - brpc::Controller::has_flag
    - OnComplete
    - bthread_timer_del
    - sending_sock::local_side
    - brpc::Controller::current_id
    linkageType: ''
    returnType: void
    signature: void Controller::EndRPC(const CompletionInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:998,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - end_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 995
    functionDepth: 1
    functionLinenumber: 995
    functionLinenumberEnd: 1000
    functionName: brpc::Controller::OnRPCEnd
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 5
    functionsReached:
    - brpc::Controller::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void Controller::OnRPCEnd(int64_t end_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/controller.cpp:1003,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 1002
    functionDepth: 0
    functionLinenumber: 1002
    functionLinenumberEnd: 1004
    functionName: brpc::Controller::RunDoneInBackupThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    linkageType: ''
    returnType: void
    signature: void Controller::RunDoneInBackupThread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:1009,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:1009,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1011,1
    - Dst: Run
      Src: /src/brpc/src/brpc/controller.cpp:1012,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1015,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1015,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1006
    functionDepth: 5
    functionLinenumber: 1006
    functionLinenumberEnd: 1017
    functionName: brpc::Controller::DoneInBackupThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    - butil::gettimeofday_us
    - brpc::Controller::OnRPCEnd
    - Run
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Controller::DoneInBackupThread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1020,1
    - Dst: set_start_callback_us
      Src: /src/brpc/src/brpc/controller.cpp:1021,1
    - Dst: local_parent
      Src: /src/brpc/src/brpc/controller.cpp:1022,1
    - Dst: local_parent
      Src: /src/brpc/src/brpc/controller.cpp:1023,1
    - Dst: brpc::Span::Submit
      Src: /src/brpc/src/brpc/controller.cpp:1025,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 1019
    functionDepth: 1
    functionLinenumber: 1019
    functionLinenumberEnd: 1027
    functionName: brpc::Controller::SubmitSpan
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::Span::Submit
    - butil::cpuwide_time_us
    - set_start_callback_us
    - local_parent
    linkageType: ''
    returnType: void
    signature: void Controller::SubmitSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1030,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1032,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:1032,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1034,1
    - Dst: brpc::Controller::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/controller.cpp:1042,1
    - Dst: brpc::Controller::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1043,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1029
    functionDepth: 5
    functionLinenumber: 1029
    functionLinenumberEnd: 1044
    functionName: brpc::Controller::HandleSendFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::ErrorText
    - brpc::Controller::FailedInline
    - brpc::Controller::OnVersionedRPCReturned
    - brpc::Controller::current_id
    - brpc::Controller::SetFailed
    - brpc::Controller::is_done_allowed_to_run_in_place
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::HandleSendFailed()
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1065,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:1070,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1071,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1073,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1073,1
    - Dst: brpc::Controller::has_enabled_circuit_breaker
      Src: /src/brpc/src/brpc/controller.cpp:1079,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:1081,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1084,1
    - Dst: brpc::Controller::is_health_check_call
      Src: /src/brpc/src/brpc/controller.cpp:1085,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/controller.cpp:1085,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1086,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1087,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1088,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1089,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1095,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/controller.cpp:1097,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/controller.cpp:1102,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1103,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/controller.cpp:1103,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1104,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1107,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1112,1
    - Dst: OnCreatingStream
      Src: /src/brpc/src/brpc/controller.cpp:1116,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1117,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1118,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1121,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1121,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1127,1
    - Dst: Span*::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1129,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1130,1
    - Dst: sending_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:1137,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/controller.cpp:1137,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1144,1
    - Dst: SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/src/brpc/controller.cpp:1148,1
    - Dst: SocketUniquePtr::GetShortSocket
      Src: /src/brpc/src/brpc/controller.cpp:1150,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1152,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1153,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1154,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1157,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1158,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/controller.cpp:1159,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1160,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1166,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1169,1
    - Dst: SocketUniquePtr::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1170,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1172,1
    - Dst: sending_sock::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1175,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1177,1
    - Dst: sending_sock::read_will_be_progressive
      Src: /src/brpc/src/brpc/controller.cpp:1180,1
    - Dst: sending_sock::FightAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1190,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1193,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1194,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1195,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/controller.cpp:1199,1
    - Dst: _pack_request
      Src: /src/brpc/src/brpc/controller.cpp:1201,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1205,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1209,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1209,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1211,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1218,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:1219,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1222,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1232,1
    - Dst: brpc::Controller::write_to_socket_in_background
      Src: /src/brpc/src/brpc/controller.cpp:1233,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/controller.cpp:1238,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1240,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/controller.cpp:1242,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1243,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/controller.cpp:1247,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1247,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/controller.cpp:1248,1
    - Dst: Span*::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1250,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1258,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1260,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1260,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 129
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1261
      start: 1046
    functionDepth: 6
    functionLinenumber: 1046
    functionLinenumberEnd: 1261
    functionName: brpc::Controller::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - Span*::Annotate
    - sending_sock::Write
    - sending_sock::SetAuthentication
    - CHECK_EQ
    - bthread_id_unlock
    - brpc::SetTrackMeAddress
    - butil::IOBuf::IOBuf
    - brpc::Controller::has_enabled_circuit_breaker
    - sending_sock::set_type_of_service
    - butil::cpuwide_time_us
    - brpc::Controller::has_request_code
    - SocketUniquePtr::GetPooledSocket
    - brpc::Controller::IssueRPC
    - brpc::Controller::SingleServer
    - butil::microseconds_to_timespec
    - Describe
    - brpc::Controller::ErrorCode
    - OnCreatingStream
    - SocketUniquePtr::GetShortSocket
    - SocketUniquePtr::reset
    - brpc::Controller::write_to_socket_in_background
    - Span*::set_remote_side
    - std::ostringstream::str
    - SocketUniquePtr::id
    - _pack_request
    - butil::IOBuf::size
    - SocketUniquePtr::IsAvailable
    - brpc::Controller::is_health_check_call
    - ConnectionTypeToString
    - SocketUniquePtr::preferred_index
    - SocketMessagePtr::EstimatedByteSize
    - sending_sock::FightAuthentication
    - brpc::Controller::HandleSendFailed
    - berror
    - SelectServer
    - Span*::set_request_size
    - brpc::Controller::has_flag
    - endpoint2str
    - SocketUniquePtr::set_preferred_index
    - sending_sock::reset
    - Span*::set_sent_us
    - brpc::Controller::FailedInline
    - SocketUniquePtr::release
    - std::min
    - brpc::Controller::current_id
    - sending_sock::read_will_be_progressive
    - brpc::Controller::SetFailed
    - sending_sock::set_preferred_index
    - brpc::Controller::is_response_read_progressively
    - SocketUniquePtr::remote_side
    linkageType: ''
    returnType: void
    signature: void Controller::IssueRPC(int64_t start_realtime_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1263
    functionDepth: 1
    functionLinenumber: 1263
    functionLinenumberEnd: 1271
    functionName: brpc::Controller::set_auth_context
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_auth_context(const AuthContext* ctx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/controller.cpp:1275,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:1276,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1282,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1284,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1286,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1288,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:1289,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1290,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1292,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1293,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1294,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1294,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1295,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1296,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1296,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1298,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1298,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1299,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1299,1
    - Dst: std::unique_ptr::cntl::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1310,1
    - Dst: OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
      Src: /src/brpc/src/brpc/controller.cpp:1314,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:1317,1
    - Dst: func
      Src: /src/brpc/src/brpc/controller.cpp:1318,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 4
    argNames:
    - id
    - data
    - error_code
    - ' error_text'
    argTypes:
    - bthread_id_t
    - void*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1321
      start: 1273
    functionDepth: 4
    functionLinenumber: 1273
    functionLinenumberEnd: 1321
    functionName: brpc::Controller::HandleSocketFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller*::is_used_by_rpc
    - OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
    - func
    - Controller*::ErrorCode
    - bthread_start_background
    - butil::endpoint2str
    - bthread_id_unlock
    - static_cast<Controller*>
    - Controller*::backup_request_ms
    - empty
    - c_str
    - berror
    - Controller*::timeout_ms
    - Controller*::SetFailed
    - std::unique_ptr::cntl::OnVersionedRPCReturned
    - Controller*::remote_side
    linkageType: ''
    returnType: int
    signature: "int Controller::HandleSocketFailed(bthread_id_t id, void* data, int
      error_code,\n                                   const std::string& error_text)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/brpc/controller.cpp:1326,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1334,1
    - Dst: bthread_id_create2
      Src: /src/brpc/src/brpc/controller.cpp:1334,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/brpc/controller.cpp:1335,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:1337,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1341
      start: 1323
    functionDepth: 3
    functionLinenumber: 1323
    functionLinenumberEnd: 1341
    functionName: brpc::Controller::call_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 69
    functionsReached:
    - bthread_id_cancel
    - bthread_id_create2
    - CHECK_EQ
    - butil::atomic*::compare_exchange_strong
    - butil::atomic*::load
    linkageType: ''
    returnType: CallId
    signature: CallId Controller::call_id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::log_id
      Src: /src/brpc/src/brpc/controller.cpp:1352,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - ClientSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1355
      start: 1343
    functionDepth: 2
    functionLinenumber: 1343
    functionLinenumberEnd: 1355
    functionName: brpc::Controller::SaveClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_request_code
    - brpc::Controller::log_id
    linkageType: ''
    returnType: void
    signature: void Controller::SaveClientSettings(ClientSettings* s) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:1358,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1359,1
    - Dst: brpc::Controller::set_backup_request_policy
      Src: /src/brpc/src/brpc/controller.cpp:1360,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/src/brpc/controller.cpp:1361,1
    - Dst: brpc::Controller::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1362,1
    - Dst: brpc::Controller::set_connection_type
      Src: /src/brpc/src/brpc/controller.cpp:1363,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/src/brpc/controller.cpp:1364,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/src/brpc/controller.cpp:1365,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/src/brpc/controller.cpp:1366,1
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.cpp:1367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - ClientSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1369
      start: 1357
    functionDepth: 2
    functionLinenumber: 1357
    functionLinenumberEnd: 1369
    functionName: brpc::Controller::ApplyClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_type_of_service
    - brpc::Controller::set_backup_request_ms
    - brpc::Controller::set_connection_type
    - brpc::Controller::set_backup_request_policy
    - brpc::Controller::set_flag
    - brpc::Controller::set_log_id
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::set_request_checksum_type
    - brpc::Controller::set_max_retry
    linkageType: ''
    returnType: void
    signature: void Controller::ApplyClientSettings(const ClientSettings& s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSubControllerOfSelectiveChannel
      Src: /src/brpc/src/brpc/controller.cpp:1374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1377
      start: 1371
    functionDepth: 0
    functionLinenumber: 1371
    functionLinenumberEnd: 1377
    functionName: brpc::Controller::sub_count
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 42
    functionsReached:
    - GetSubControllerOfSelectiveChannel
    linkageType: ''
    returnType: int
    signature: int Controller::sub_count() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetSubControllerOfParallelChannel
      Src: /src/brpc/src/brpc/controller.cpp:1381,1
    - Dst: GetSubControllerOfSelectiveChannel
      Src: /src/brpc/src/brpc/controller.cpp:1384,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1387
      start: 1379
    functionDepth: 0
    functionLinenumber: 1379
    functionLinenumberEnd: 1387
    functionName: brpc::Controller::sub
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 40
    functionsReached:
    - GetSubControllerOfSelectiveChannel
    - GetSubControllerOfParallelChannel
    linkageType: ''
    returnType: Controller
    signature: Controller * Controller::sub(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::trace_id
      Src: /src/brpc/src/brpc/controller.cpp:1389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1389
      start: 1389
    functionDepth: 1
    functionLinenumber: 1389
    functionLinenumberEnd: 1389
    functionName: brpc::Controller::trace_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::Controller::trace_id
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t Controller::trace_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::span_id
      Src: /src/brpc/src/brpc/controller.cpp:1390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1390
      start: 1390
    functionDepth: 1
    functionLinenumber: 1390
    functionLinenumberEnd: 1390
    functionName: brpc::Controller::span_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::Controller::span_id
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t Controller::span_id() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SimpleDataPool*::Borrow
      Src: /src/brpc/src/brpc/controller.cpp:1399,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1404
      start: 1392
    functionDepth: 0
    functionLinenumber: 1392
    functionLinenumberEnd: 1404
    functionName: brpc::Controller::session_local_data
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - SimpleDataPool*::Borrow
    linkageType: ''
    returnType: void
    signature: void * Controller::session_local_data()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1407,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:1408,1
    - Dst: brpc::Controller::has_remote_stream
      Src: /src/brpc/src/brpc/controller.cpp:1408,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:1411,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1413,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1415,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1416,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1420,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1421,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1422,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1430,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1431,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1432,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1434,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1435,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1436,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1437,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1438,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1443,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1444,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/controller.cpp:1446,1
    - Dst: mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1446,1
    - Dst: clear_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1447,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1449,1
    - Dst: set_stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1450,1
    - Dst: Stream*::SetHostSocket
      Src: /src/brpc/src/brpc/controller.cpp:1451,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1452,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 40
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1406
    functionDepth: 4
    functionLinenumber: 1406
    functionLinenumberEnd: 1455
    functionName: brpc::Controller::HandleStreamConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - Stream*::SetHostSocket
    - stream_id
    - brpc::SetTrackMeAddress
    - set_stream_id
    - brpc::Stream::SetFailed
    - clear_extra_stream_ids
    - mutable_extra_stream_ids
    - size
    - std::move
    - conn
    - brpc::Controller::has_remote_stream
    - CHECK
    - brpc::policy::SendStreamRst
    - brpc::Controller::FailedInline
    - Stream*::SetConnected
    - brpc::Controller::SetFailed
    - empty
    - c_str
    - extra_stream_ids
    linkageType: ''
    returnType: void
    signature: void Controller::HandleStreamConnection(Socket *host_socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/controller.cpp:1460,1
    - Dst: length
      Src: /src/brpc/src/brpc/controller.cpp:1460,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/controller.cpp:1461,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1463,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1464,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1465,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1466,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1467,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/controller.cpp:1468,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 2
    argNames:
    - ' source'
    - output
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1471
      start: 1459
    functionDepth: 2
    functionLinenumber: 1459
    functionLinenumberEnd: 1471
    functionName: brpc::WebEscape
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - std::string*::reserve
    - std::string*::push_back
    - brpc::size
    - length
    - std::string*::append
    linkageType: ''
    returnType: void
    signature: void WebEscape(const std::string& source, std::string* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/controller.cpp:1475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' source'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1473
    functionDepth: 1
    functionLinenumber: 1473
    functionLinenumberEnd: 1477
    functionName: brpc::WebEscape
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::WebEscape
    linkageType: ''
    returnType: std::string
    signature: std::string WebEscape(const std::string& source)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req
    argTypes:
    - SampledRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1482
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1482
    functionName: brpc::Controller::reset_sampled_request
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Controller::reset_sampled_request(SampledRequest* req)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1484
    functionDepth: 0
    functionLinenumber: 1484
    functionLinenumberEnd: 1488
    functionName: brpc::Controller::release_sampled_request
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * Controller::release_sampled_request()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - sc
    argTypes:
    - StreamCreator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1496
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1496
    functionName: brpc::Controller::set_stream_creator
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_stream_creator(StreamCreator* sc)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_progressive_writer
      Src: /src/brpc/src/brpc/controller.cpp:1500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1509,1
    - Dst: sending_sock::ReAddress
      Src: /src/brpc/src/brpc/controller.cpp:1513,1
    - Dst: SocketUniquePtr::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/controller.cpp:1516,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1518,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/controller.cpp:1519,1
    - Dst: ProgressiveAttachment::ProgressiveAttachment
      Src: /src/brpc/src/brpc/controller.cpp:1518,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - stop_style
    argTypes:
    - StopStyle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1521
      start: 1498
    functionDepth: 1
    functionLinenumber: 1498
    functionLinenumberEnd: 1521
    functionName: brpc::Controller::CreateProgressiveAttachment
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - reset
    - SocketUniquePtr::fail_me_at_server_stop
    - ProgressiveAttachment::ProgressiveAttachment
    - brpc::Controller::has_progressive_writer
    - LOG
    - sending_sock::ReAddress
    linkageType: ''
    returnType: butil::intrusive_ptr<ProgressiveAttachment>
    signature: butil::intrusive_ptr<ProgressiveAttachment> Controller::CreateProgressiveAttachment(StopStyle
      stop_style)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1525,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1528,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1529,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1530,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1535,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1536,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:1538,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1539,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1540,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:1543,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:1544,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1545
      start: 1523
    functionDepth: 2
    functionLinenumber: 1523
    functionLinenumberEnd: 1545
    functionName: brpc::Controller::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 16
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - brpc::Controller::add_flag
    - brpc::Controller::is_response_read_progressively
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Controller::has_progressive_reader
    - LOG
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: void Controller::ReadProgressiveAttachmentBy(ProgressiveReader* r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - MongoContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1549
      start: 1547
    functionDepth: 0
    functionLinenumber: 1547
    functionLinenumberEnd: 1549
    functionName: brpc::Controller::set_mongo_session_data
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Controller::set_mongo_session_data(MongoContext* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1552,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/controller.cpp:1553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1554
      start: 1551
    functionDepth: 1
    functionLinenumber: 1551
    functionLinenumberEnd: 1554
    functionName: brpc::Controller::is_ssl
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - sending_sock::get
    - Socket*::is_ssl
    linkageType: ''
    returnType: bool
    signature: bool Controller::is_ssl() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1557,1
    - Dst: Socket*::GetPeerCertificate
      Src: /src/brpc/src/brpc/controller.cpp:1558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1556
    functionDepth: 1
    functionLinenumber: 1556
    functionLinenumberEnd: 1559
    functionName: brpc::Controller::get_peer_certificate
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - sending_sock::get
    - Socket*::GetPeerCertificate
    linkageType: ''
    returnType: x509_st
    signature: x509_st * Controller::get_peer_certificate() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1562,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/controller.cpp:1564,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/controller.cpp:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - level
    - optname
    - optval
    - optlen
    argTypes:
    - int
    - int
    - void*
    - socklen_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1569
      start: 1561
    functionDepth: 1
    functionLinenumber: 1561
    functionLinenumberEnd: 1569
    functionName: brpc::Controller::GetSockOption
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - sending_sock::get
    - getsockopt
    - Socket*::fd
    linkageType: ''
    returnType: int
    signature: int Controller::GetSockOption(int level, int optname, void* optval,
      socklen_t* optlen)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _after_rpc_resp_fn
      Src: /src/brpc/src/brpc/controller.cpp:1573,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - req
    - res
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1576
      start: 1571
    functionDepth: 0
    functionLinenumber: 1571
    functionLinenumberEnd: 1576
    functionName: brpc::Controller::CallAfterRpcResp
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - _after_rpc_resp_fn
    linkageType: ''
    returnType: void
    signature: void Controller::CallAfterRpcResp(const google::protobuf::Message*
      req, const google::protobuf::Message* res)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: s_prev_sigint_handler
      Src: /src/brpc/src/brpc/controller.cpp:1592,1
    - Dst: s_prev_sigterm_handler
      Src: /src/brpc/src/brpc/controller.cpp:1595,1
    - Dst: s_prev_sighup_handler
      Src: /src/brpc/src/brpc/controller.cpp:1598,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - signo
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1600
      start: 1589
    functionDepth: 0
    functionLinenumber: 1589
    functionLinenumberEnd: 1600
    functionName: brpc::quit_handler
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - s_prev_sigterm_handler
    - s_prev_sighup_handler
    - s_prev_sigint_handler
    linkageType: ''
    returnType: void
    signature: void quit_handler(int signo)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1606,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1609,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1612,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1616,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1619,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1622,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1627,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1630,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1633,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1636
      start: 1604
    functionDepth: 1
    functionLinenumber: 1604
    functionLinenumberEnd: 1636
    functionName: brpc::RegisterQuitSignalOrDie
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - RELEASE_ASSERT_VERBOSE
    - signal
    linkageType: ''
    returnType: void
    signature: void RegisterQuitSignalOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:1639,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1641
      start: 1638
    functionDepth: 0
    functionLinenumber: 1638
    functionLinenumberEnd: 1641
    functionName: brpc::IsAskedToQuit
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsAskedToQuit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: raise
      Src: /src/brpc/src/brpc/controller.cpp:1644,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1645
      start: 1643
    functionDepth: 0
    functionLinenumber: 1643
    functionLinenumberEnd: 1645
    functionName: brpc::AskToQuit
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - raise
    linkageType: ''
    returnType: void
    signature: void AskToQuit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1648
      start: 1648
    functionDepth: 0
    functionLinenumber: 1648
    functionLinenumberEnd: 1648
    functionName: brpc::DoNothingClosure::Run
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<DoNothingClosure>
      Src: /src/brpc/src/brpc/controller.cpp:1651,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1650
    functionDepth: 0
    functionLinenumber: 1650
    functionLinenumberEnd: 1652
    functionName: brpc::DoNothing
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 8
    functionsReached:
    - butil::get_leaky_singleton<DoNothingClosure>
    linkageType: ''
    returnType: google::protobuf::Closure
    signature: google::protobuf::Closure * DoNothing()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1656,1
    - Dst: KVMap::KVMap
      Src: /src/brpc/src/brpc/controller.cpp:1656,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:1658,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1659
    functionName: '& Controller::SessionKV()'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - KVMap::KVMap
    - reset
    - get
    linkageType: ''
    returnType: KVMap
    signature: KVMap & Controller::SessionKV()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Count
      Src: /src/brpc/src/brpc/controller.cpp:1666,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1671,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1672,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1680,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1680,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1688,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1688,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1692
      start: 1665
    functionDepth: 1
    functionLinenumber: 1665
    functionLinenumberEnd: 1692
    functionName: brpc::Controller::FlushSessionKV
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - request_id
    - Count
    - End
    - Begin
    linkageType: ''
    returnType: void
    signature: void Controller::FlushSessionKV(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoPrintLogPrefix
      Src: /src/brpc/src/brpc/controller.cpp:1695,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - Controller::LogPrefixDummy
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1697
      start: 1694
    functionDepth: 0
    functionLinenumber: 1694
    functionLinenumberEnd: 1697
    functionName: '& operator<<(std::ostream& os, const Controller::LogPrefixDummy&
      p)'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - DoPrintLogPrefix
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Controller::LogPrefixDummy&
      p)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1701,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1702,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1714
      start: 1699
    functionDepth: 0
    functionLinenumber: 1699
    functionLinenumberEnd: 1714
    functionName: brpc::Controller::DoPrintLogPrefix
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - request_id
    linkageType: ''
    returnType: void
    signature: void Controller::DoPrintLogPrefix(std::ostream& os) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:31,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:38,1
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:42,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 47
    functionName: brpc::AMFInputStream::cutn
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - memcpy
    - Next
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cutn(void* out, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: brpc::AMFInputStream::check_emptiness
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - Next
    linkageType: ''
    returnType: bool
    signature: bool AMFInputStream::check_emptiness()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 62
    functionName: brpc::AMFInputStream::cut_u8
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u8(uint8_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/amf_inl.h:67,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:74,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/amf_inl.h:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint16_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 77
    functionName: brpc::AMFInputStream::cut_u16
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cutn
    - butil::NetToHost16
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u16(uint16_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/amf_inl.h:82,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:89,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/amf_inl.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 92
    functionName: brpc::AMFInputStream::cut_u32
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cutn
    - butil::NetToHost32
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u32(uint32_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/amf_inl.h:97,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:104,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/amf_inl.h:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 107
    functionName: brpc::AMFInputStream::cut_u64
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - butil::NetToHost64
    - brpc::AMFInputStream::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u64(uint64_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/brpc/amf_inl.h:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 114
    functionName: brpc::AMFOutputStream::done
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::done()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:120,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:126,1
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:129,1
    - Dst: brpc::AMFOutputStream::set_bad
      Src: /src/brpc/src/brpc/amf_inl.h:134,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 136
    functionName: brpc::AMFOutputStream::putn
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - fast_memcpy
    - Next
    - brpc::AMFOutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::putn(const void* data, int n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:147,1
    - Dst: brpc::AMFOutputStream::set_bad
      Src: /src/brpc/src/brpc/amf_inl.h:150,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 151
    functionName: brpc::AMFOutputStream::put_u8
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - Next
    - brpc::AMFOutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u8(uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/amf_inl.h:154,1
    - Dst: brpc::AMFOutputStream::putn
      Src: /src/brpc/src/brpc/amf_inl.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: brpc::AMFOutputStream::put_u16
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - brpc::AMFOutputStream::putn
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u16(uint16_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/amf_inl.h:159,1
    - Dst: brpc::AMFOutputStream::putn
      Src: /src/brpc/src/brpc/amf_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 158
    functionDepth: 2
    functionLinenumber: 158
    functionLinenumberEnd: 161
    functionName: brpc::AMFOutputStream::put_u32
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - brpc::AMFOutputStream::putn
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u32(uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/amf_inl.h:164,1
    - Dst: brpc::AMFOutputStream::putn
      Src: /src/brpc/src/brpc/amf_inl.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 2
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::AMFOutputStream::put_u64
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFOutputStream::putn
    - butil::HostToNet64
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u64(uint64_t val)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:31,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:38,1
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:42,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 47
    functionName: brpc::AMFInputStream::cutn
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 4
    functionsReached:
    - memcpy
    - Next
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cutn(void* out, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: brpc::AMFInputStream::check_emptiness
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - Next
    linkageType: ''
    returnType: bool
    signature: bool AMFInputStream::check_emptiness()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 62
    functionName: brpc::AMFInputStream::cut_u8
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u8(uint8_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/amf_inl.h:67,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:74,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/amf_inl.h:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint16_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 77
    functionName: brpc::AMFInputStream::cut_u16
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cutn
    - butil::NetToHost16
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u16(uint16_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/amf_inl.h:82,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:89,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/amf_inl.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 92
    functionName: brpc::AMFInputStream::cut_u32
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cutn
    - butil::NetToHost32
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u32(uint32_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/amf_inl.h:97,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/src/brpc/amf_inl.h:104,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/amf_inl.h:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 107
    functionName: brpc::AMFInputStream::cut_u64
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - butil::NetToHost64
    - brpc::AMFInputStream::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t AMFInputStream::cut_u64(uint64_t* val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/brpc/amf_inl.h:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 114
    functionName: brpc::AMFOutputStream::done
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::done()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:120,1
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/amf_inl.h:126,1
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:129,1
    - Dst: brpc::AMFOutputStream::set_bad
      Src: /src/brpc/src/brpc/amf_inl.h:134,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 136
    functionName: brpc::AMFOutputStream::putn
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 3
    functionsReached:
    - fast_memcpy
    - Next
    - brpc::AMFOutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::putn(const void* data, int n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/brpc/amf_inl.h:147,1
    - Dst: brpc::AMFOutputStream::set_bad
      Src: /src/brpc/src/brpc/amf_inl.h:150,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 151
    functionName: brpc::AMFOutputStream::put_u8
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - Next
    - brpc::AMFOutputStream::set_bad
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u8(uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/amf_inl.h:154,1
    - Dst: brpc::AMFOutputStream::putn
      Src: /src/brpc/src/brpc/amf_inl.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 156
    functionName: brpc::AMFOutputStream::put_u16
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - brpc::AMFOutputStream::putn
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u16(uint16_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/amf_inl.h:159,1
    - Dst: brpc::AMFOutputStream::putn
      Src: /src/brpc/src/brpc/amf_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 158
    functionDepth: 2
    functionLinenumber: 158
    functionLinenumberEnd: 161
    functionName: brpc::AMFOutputStream::put_u32
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - brpc::AMFOutputStream::putn
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u32(uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/amf_inl.h:164,1
    - Dst: brpc::AMFOutputStream::putn
      Src: /src/brpc/src/brpc/amf_inl.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 2
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::AMFOutputStream::put_u64
    functionSourceFile: /src/brpc/src/brpc/amf_inl.h
    functionUses: 0
    functionsReached:
    - brpc::AMFOutputStream::putn
    - butil::HostToNet64
    linkageType: ''
    returnType: void
    signature: void AMFOutputStream::put_u64(uint64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedResponse::SharedCtor
      Src: /src/brpc/src/brpc/serialized_response.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::SerializedResponse::SerializedResponse
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 2
    functionsReached:
    - brpc::SerializedResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SerializedResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedResponse::SharedCtor
      Src: /src/brpc/src/brpc/serialized_response.cpp:32,1
    - Dst: brpc::SerializedResponse::MergeFrom
      Src: /src/brpc/src/brpc/serialized_response.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::SerializedResponse::SerializedResponse
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 2
    functionsReached:
    - brpc::SerializedResponse::SharedCtor
    - brpc::SerializedResponse::MergeFrom
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SerializedResponse(const SerializedResponse&
      from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::SerializedResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/serialized_response.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: SerializedResponse::~SerializedResponse()
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::~SerializedResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: brpc::SerializedResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/serialized_response.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::SerializedResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/serialized_response.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::SerializedResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t SerializedResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/serialized_response.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: brpc::SerializedResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 1
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::MergeFrom(const SerializedResponse& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/serialized_response.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - other
    argTypes:
    - SerializedResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::SerializedResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::Swap(SerializedResponse* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/serialized_response.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: brpc::SerializedResponse::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata SerializedResponse::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedResponse::SharedCtor
      Src: /src/brpc/src/brpc/serialized_response.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::SerializedResponse::SerializedResponse
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 2
    functionsReached:
    - brpc::SerializedResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SerializedResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedResponse::SharedCtor
      Src: /src/brpc/src/brpc/serialized_response.cpp:32,1
    - Dst: brpc::SerializedResponse::MergeFrom
      Src: /src/brpc/src/brpc/serialized_response.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::SerializedResponse::SerializedResponse
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 2
    functionsReached:
    - brpc::SerializedResponse::SharedCtor
    - brpc::SerializedResponse::MergeFrom
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SerializedResponse(const SerializedResponse&
      from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::SerializedResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/serialized_response.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: SerializedResponse::~SerializedResponse()
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::~SerializedResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: brpc::SerializedResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/serialized_response.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::SerializedResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/serialized_response.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::SerializedResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t SerializedResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/serialized_response.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: brpc::SerializedResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 2
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::MergeFrom(const SerializedResponse& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/serialized_response.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - other
    argTypes:
    - SerializedResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::SerializedResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void SerializedResponse::Swap(SerializedResponse* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/serialized_response.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: brpc::SerializedResponse::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/serialized_response.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata SerializedResponse::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - factory
    argTypes:
    - DataFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 29
    functionName: brpc::SimpleDataPool::SimpleDataPool
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::SimpleDataPool(const DataFactory* factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: SimpleDataPool::~SimpleDataPool()
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::~SimpleDataPool()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:40,1
    - Dst: store
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:46,1
    - Dst: DataFactory*::DestroyData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:53,1
    - Dst: free
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:56,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - factory
    argTypes:
    - DataFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 58
    functionName: brpc::SimpleDataPool::Reset
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - DataFactory*::DestroyData
    - store
    - free
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::Reset(const DataFactory* factory)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:64,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:69,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:70,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:75,1
    - Dst: free
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:76,1
    - Dst: CreateData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:83,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:87,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 1
    argNames:
    - n
    argTypes:
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 90
    functionName: brpc::SimpleDataPool::Reserve
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - free
    - fetch_add
    - CreateData
    - BAIDU_SCOPED_LOCK
    - malloc
    - memcpy
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::Reserve(unsigned n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:94,1
    - Dst: CreateData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:99,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:101,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 104
    functionName: brpc::SimpleDataPool::Borrow
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - CreateData
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void * SimpleDataPool::Borrow()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ResetData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:110,1
    - Dst: DestroyData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:111,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:116,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:118,1
    - Dst: DestroyData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:122,1
    - Dst: free
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:123,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 129
    functionName: brpc::SimpleDataPool::Return
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - ResetData
    - free
    - DestroyData
    - malloc
    - memcpy
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::Return(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: brpc::SimpleDataPool::stat
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: SimpleDataPool::Stat
    signature: SimpleDataPool::Stat SimpleDataPool::stat() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - factory
    argTypes:
    - DataFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 29
    functionName: brpc::SimpleDataPool::SimpleDataPool
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::SimpleDataPool(const DataFactory* factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: SimpleDataPool::~SimpleDataPool()
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::~SimpleDataPool()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:40,1
    - Dst: store
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:46,1
    - Dst: DataFactory*::DestroyData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:53,1
    - Dst: free
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:56,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - factory
    argTypes:
    - DataFactory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 58
    functionName: brpc::SimpleDataPool::Reset
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - DataFactory*::DestroyData
    - store
    - free
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::Reset(const DataFactory* factory)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:64,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:69,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:70,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:75,1
    - Dst: free
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:76,1
    - Dst: CreateData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:83,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:87,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 1
    argNames:
    - n
    argTypes:
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 90
    functionName: brpc::SimpleDataPool::Reserve
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - free
    - fetch_add
    - CreateData
    - BAIDU_SCOPED_LOCK
    - malloc
    - memcpy
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::Reserve(unsigned n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:94,1
    - Dst: CreateData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:99,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:101,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 104
    functionName: brpc::SimpleDataPool::Borrow
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - CreateData
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void * SimpleDataPool::Borrow()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ResetData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:110,1
    - Dst: DestroyData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:111,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:116,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:118,1
    - Dst: DestroyData
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:122,1
    - Dst: free
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:123,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 129
    functionName: brpc::SimpleDataPool::Return
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - ResetData
    - free
    - DestroyData
    - malloc
    - memcpy
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void SimpleDataPool::Return(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/simple_data_pool.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: brpc::SimpleDataPool::stat
    functionSourceFile: /src/brpc/src/brpc/simple_data_pool.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: SimpleDataPool::Stat
    signature: SimpleDataPool::Stat SimpleDataPool::stat() const
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - marker
    argTypes:
    - AMFMarker
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 50
    functionName: brpc::marker2str
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * marker2str(AMFMarker marker)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - marker
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::marker2str
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::marker2str
    linkageType: ''
    returnType: char
    signature: char * marker2str(uint8_t marker)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: brpc::AMFField::AMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFField::AMFField()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsString
      Src: /src/brpc/src/brpc/amf.cpp:65,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:67,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:68,1
    - Dst: brpc::AMFField::IsObject
      Src: /src/brpc/src/brpc/amf.cpp:70,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:71,1
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:72,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 75
    functionName: brpc::AMFField::AMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::IsString
    - AMFArray::AMFArray
    - AMFObject::AMFObject
    - brpc::AMFField::IsObject
    - brpc::AMFField::IsArray
    - malloc
    - memcpy
    linkageType: ''
    returnType: void
    signature: void AMFField::AMFField(const AMFField& rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.cpp:78,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/amf.cpp:83,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:85,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:86,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/amf.cpp:88,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:89,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/amf.cpp:90,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:91,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 94
    functionName: '& AMFField::operator=(const AMFField& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - IsString
    - AMFArray::AMFArray
    - AMFObject::AMFObject
    - Clear
    - malloc
    - IsArray
    - IsObject
    - memcpy
    linkageType: ''
    returnType: AMFField
    signature: AMFField & AMFField::operator=(const AMFField& rhs)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::type
      Src: /src/brpc/src/brpc/amf.cpp:97,1
    - Dst: free
      Src: /src/brpc/src/brpc/amf.cpp:119,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 132
    functionName: brpc::AMFField::SlowerClear
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFField::type
    - free
    linkageType: ''
    returnType: void
    signature: void AMFField::SlowerClear()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::find_cstr
      Src: /src/brpc/src/brpc/amf.cpp:136,1
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.cpp:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 141
    functionName: brpc::AMFObject::Find
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFObject::end
    - butil::find_cstr
    linkageType: ''
    returnType: AMFField
    signature: AMFField * AMFObject::Find(const char* name) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:145,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:146,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:149,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:150,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:151,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:153,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:155,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:155,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:156,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:157,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 162
    functionName: brpc::AMFField::SetString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    - malloc
    - data
    - memcpy
    - size
    linkageType: ''
    returnType: void
    signature: void AMFField::SetString(const butil::StringPiece& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 170
    functionName: brpc::AMFField::SetBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetBool(bool val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: brpc::AMFField::SetNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetNumber(double val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:182,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: brpc::AMFField::SetNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetNull()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 192
    functionName: brpc::AMFField::SetUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetUndefined()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 199
    functionName: brpc::AMFField::SetUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetUnsupported()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsObject
      Src: /src/brpc/src/brpc/amf.cpp:202,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:203,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 208
    functionName: brpc::AMFField::MutableObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::AMFObject
    - brpc::AMFField::IsObject
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AMFField::MutableObject()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:211,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:212,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 217
    functionName: brpc::AMFField::MutableArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFArray::AMFArray
    - brpc::AMFField::Clear
    - brpc::AMFField::IsArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AMFField::MutableArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/src/brpc/amf.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' str'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: brpc::AMFObject::SetString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::SetString
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetString(const std::string& name, const butil::StringPiece&
      str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 227
    functionName: brpc::AMFObject::SetBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::SetBool
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetBool(const std::string& name, bool val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetNumber
      Src: /src/brpc/src/brpc/amf.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: brpc::AMFObject::SetNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::SetNumber
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetNumber(const std::string& name, double val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetNull
      Src: /src/brpc/src/brpc/amf.cpp:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: brpc::AMFObject::SetNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::SetNull
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetNull(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetUndefined
      Src: /src/brpc/src/brpc/amf.cpp:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: brpc::AMFObject::SetUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::SetUndefined
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetUndefined(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: brpc::AMFObject::SetUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::SetUnsupported
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetUnsupported(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: brpc::AMFObject::MutableObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::MutableObject
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AMFObject::MutableObject(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::MutableArray
      Src: /src/brpc/src/brpc/amf.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 251
    functionName: brpc::AMFObject::MutableArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFObject::MutableArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AMFObject::MutableArray(const std::string& name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u16
      Src: /src/brpc/src/brpc/amf.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:256,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:259,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 265
    functionName: brpc::ReadAMFShortStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u16
    - std::string*::resize
    - AMFInputStream*::cutn
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFShortStringBody(std::string* str, AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:270,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:273,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:274,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:275,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 279
    functionName: brpc::ReadAMFLongStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cutn
    - std::string*::resize
    - AMFInputStream*::cut_u32
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFLongStringBody(std::string* str, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:284,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:288,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:292,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:292,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 281
    functionDepth: 2
    functionLinenumber: 281
    functionLinenumberEnd: 294
    functionName: brpc::ReadAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::marker2str
    - brpc::ReadAMFLongStringBody
    - AMFInputStream*::cut_u8
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFString(std::string* str, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:299,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:311,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:311,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 313
    functionName: brpc::ReadAMFBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFBool(bool* val, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:318,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:328,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:328,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 330
    functionName: brpc::ReadAMFNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u64
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNumber(double* val, AMFInputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFNumber
      Src: /src/brpc/src/brpc/amf.cpp:334,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 332
    functionDepth: 2
    functionLinenumber: 332
    functionLinenumberEnd: 339
    functionName: brpc::ReadAMFUint32
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::ReadAMFNumber
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUint32(uint32_t* val, AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:343,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:350,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:350,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 352
    functionName: brpc::ReadAMFNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNull(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:363,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:363,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 365
    functionName: brpc::ReadAMFUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUndefined(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:370,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:376,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:376,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 378
    functionName: brpc::ReadAMFUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUnsupported(AMFInputStream* stream)
  - BBCount: 38
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:389,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:392,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:393,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:400,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:404,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:405,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:406,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/brpc/amf.cpp:409,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:416,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:421,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:421,1
    - Dst: google::protobuf::Reflection*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:423,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:429,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:434,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:435,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:437,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:444,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:451,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:451,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/brpc/amf.cpp:453,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:454,1
    - Dst: brpc::SkipAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:459,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:477,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:477,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:480,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:484,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:485,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:489,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:490,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:491,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:493,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 104
    argCount: 3
    argNames:
    - stream
    - message
    - field
    argTypes:
    - AMFInputStream*
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 384
    functionDepth: 2
    functionLinenumber: 384
    functionLinenumberEnd: 499
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::marker2str
    - brpc::ReadAMFObjectBody
    - google::protobuf::FieldDescriptor*::full_name
    - brpc::ReadAMFLongStringBody
    - google::protobuf::Reflection*::MutableMessage
    - AMFInputStream*::cut_u8
    - google::protobuf::Message*::GetReflection
    - AMFInputStream*::cut_u64
    - google::protobuf::Reflection*::SetDouble
    - google::protobuf::Reflection*::SetBool
    - CHECK
    - google::protobuf::FieldDescriptor*::cpp_type
    - LOG
    - brpc::SkipAMFObjectBody
    - brpc::ReadAMFShortStringBody
    - google::protobuf::Reflection*::SetString
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectField(AMFInputStream* stream,\n                               google::protobuf::Message*
      message,\n                               const google::protobuf::FieldDescriptor*
      field)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:503,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:505,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:506,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:509,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:513,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:519,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:520,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:520,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:522,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - message
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 501
    functionDepth: 3
    functionLinenumber: 501
    functionLinenumberEnd: 527
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFInputStream*::cut_u8
    - google::protobuf::Descriptor*::full_name
    - brpc::ReadAMFObjectField
    - std::string::empty
    - google::protobuf::Message*::GetDescriptor
    - google::protobuf::Descriptor*::FindFieldByName
    - LOG
    - RPC_VLOG_IF
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectBody(google::protobuf::Message* message,\n                              AMFInputStream*
      stream)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:531,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:532,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:535,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:539,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:545,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 529
    functionDepth: 3
    functionLinenumber: 529
    functionLinenumberEnd: 550
    functionName: brpc::SkipAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::ReadAMFObjectField
    - AMFInputStream*::cut_u8
    - std::string::empty
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool SkipAMFObjectBody(AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:556,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:559,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:563,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:566,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:567,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:567,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:569,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - message
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 552
    functionDepth: 3
    functionLinenumber: 552
    functionLinenumberEnd: 574
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u32
    - brpc::ReadAMFObjectField
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Message*::GetDescriptor
    - google::protobuf::Descriptor*::FindFieldByName
    - LOG
    - RPC_VLOG_IF
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFEcmaArrayBody(google::protobuf::Message* message,\n                                 AMFInputStream*
      stream)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:579,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:583,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:587,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:592,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:592,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/amf.cpp:595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:596,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/amf.cpp:597,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - msg
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 576
    functionDepth: 4
    functionLinenumber: 576
    functionLinenumberEnd: 601
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFEcmaArrayBody
    - LOG
    - google::protobuf::Message*::InitializationErrorString
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(google::protobuf::Message* msg, AMFInputStream*
      stream)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:613,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:614,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:620,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:621,1
    - Dst: AMFObject*::SetNumber
      Src: /src/brpc/src/brpc/amf.cpp:625,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:630,1
    - Dst: AMFObject*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:633,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:637,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:640,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:645,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:650,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:650,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:660,1
    - Dst: AMFObject*::MutableArray
      Src: /src/brpc/src/brpc/amf.cpp:660,1
    - Dst: AMFObject*::SetNull
      Src: /src/brpc/src/brpc/amf.cpp:665,1
    - Dst: AMFObject*::SetUndefined
      Src: /src/brpc/src/brpc/amf.cpp:668,1
    - Dst: AMFObject*::SetUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:679,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:679,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:682,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:686,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:687,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:690,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 82
    argCount: 3
    argNames:
    - stream
    - obj
    - ' name'
    argTypes:
    - AMFInputStream*
    - AMFObject*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 609
    functionDepth: 4
    functionLinenumber: 609
    functionLinenumberEnd: 694
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - brpc::marker2str
    - AMFObject*::SetNumber
    - brpc::ReadAMFObjectBody
    - AMFObject*::MutableObject
    - AMFObject*::SetUndefined
    - AMFObject*::SetBool
    - brpc::ReadAMFLongStringBody
    - AMFObject*::MutableArray
    - AMFInputStream*::cut_u8
    - AMFObject*::SetUnsupported
    - AMFObject*::SetString
    - AMFInputStream*::cut_u64
    - CHECK
    - AMFObject*::SetNull
    - brpc::ReadAMFArrayBody
    - brpc::ReadAMFEcmaArrayBody
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectField(AMFInputStream* stream,\n                               AMFObject*
      obj,\n                               const std::string& name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:698,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:699,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:701,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:702,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:706,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:712,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 696
    functionDepth: 3
    functionLinenumber: 696
    functionLinenumberEnd: 717
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - brpc::ReadAMFObjectField
    - AMFInputStream*::cut_u8
    - std::string::empty
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObjectBody(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:721,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:722,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:727,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:728,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:731,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 719
    functionDepth: 3
    functionLinenumber: 719
    functionLinenumberEnd: 736
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::ReadAMFObjectField
    - AMFInputStream*::cut_u32
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFEcmaArrayBody(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:740,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:741,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:745,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:749,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:754,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:754,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 738
    functionDepth: 4
    functionLinenumber: 738
    functionLinenumberEnd: 758
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFEcmaArrayBody
    - LOG
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:762,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:763,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:769,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:770,1
    - Dst: AMFArray*::AddNumber
      Src: /src/brpc/src/brpc/amf.cpp:774,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:778,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:779,1
    - Dst: AMFArray*::AddBool
      Src: /src/brpc/src/brpc/amf.cpp:782,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:786,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:789,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:793,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:794,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:799,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:799,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:804,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:804,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:809,1
    - Dst: AMFArray*::AddArray
      Src: /src/brpc/src/brpc/amf.cpp:809,1
    - Dst: AMFArray*::AddNull
      Src: /src/brpc/src/brpc/amf.cpp:814,1
    - Dst: AMFArray*::AddUndefined
      Src: /src/brpc/src/brpc/amf.cpp:817,1
    - Dst: AMFArray*::AddUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:820,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:828,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:828,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:831,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:835,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:836,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:839,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 82
    argCount: 2
    argNames:
    - stream
    - arr
    argTypes:
    - AMFInputStream*
    - AMFArray*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 760
    functionDepth: 4
    functionLinenumber: 760
    functionLinenumberEnd: 843
    functionName: brpc::ReadAMFArrayItem
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::marker2str
    - AMFArray*::AddArray
    - brpc::ReadAMFObjectBody
    - AMFArray*::AddUnsupported
    - AMFArray*::AddUndefined
    - brpc::ReadAMFLongStringBody
    - AMFArray*::AddNull
    - brpc::ReadAMFArrayBody
    - AMFInputStream*::cut_u8
    - AMFArray*::AddBool
    - AMFInputStream*::cut_u64
    - CHECK
    - AMFArray*::AddObject
    - AMFArray*::AddString
    - AMFArray*::AddNumber
    - LOG
    - brpc::ReadAMFEcmaArrayBody
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayItem(AMFInputStream* stream, AMFArray* arr)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:847,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:848,1
    - Dst: brpc::ReadAMFArrayItem
      Src: /src/brpc/src/brpc/amf.cpp:852,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - arr
    - stream
    argTypes:
    - AMFArray*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 857
      start: 845
    functionDepth: 5
    functionLinenumber: 845
    functionLinenumberEnd: 857
    functionName: brpc::ReadAMFArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::ReadAMFArrayItem
    - AMFInputStream*::cut_u32
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayBody(AMFArray* arr, AMFInputStream* stream)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:861,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:862,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:866,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:871,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:871,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - arr
    - stream
    argTypes:
    - AMFArray*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 875
      start: 859
    functionDepth: 6
    functionLinenumber: 859
    functionLinenumberEnd: 875
    functionName: brpc::ReadAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::ReadAMFArrayBody
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArray(AMFArray* arr, AMFInputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 880
      start: 879
    functionDepth: 0
    functionLinenumber: 879
    functionLinenumberEnd: 880
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFArray::AMFArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:884,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:884,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:888,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 882
    functionDepth: 1
    functionLinenumber: 882
    functionLinenumberEnd: 891
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::AMFArray(const AMFArray& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: '& AMFArray::~AMFArray'
      Src: /src/brpc/src/brpc/amf.cpp:895,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:896,1
    - Dst: RemoveLastField
      Src: /src/brpc/src/brpc/amf.cpp:902,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 893
    functionDepth: 0
    functionLinenumber: 893
    functionLinenumberEnd: 905
    functionName: '& AMFArray::operator=(const AMFArray& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - '& AMFArray::~AMFArray'
    - AMFArray::AMFArray
    - RemoveLastField
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray & AMFArray::operator=(const AMFArray& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:908,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:908,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:910,1
    - Dst: clear
      Src: /src/brpc/src/brpc/amf.cpp:913,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 907
    functionDepth: 1
    functionLinenumber: 907
    functionLinenumberEnd: 914
    functionName: brpc::AMFArray::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::AMFArray::Clear
    - std::min
    - clear
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::Clear()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:917,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:920,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:921,1
    - Dst: resize
      Src: /src/brpc/src/brpc/amf.cpp:925,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:925,1
    - Dst: back
      Src: /src/brpc/src/brpc/amf.cpp:927,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 916
    functionDepth: 1
    functionLinenumber: 916
    functionLinenumberEnd: 928
    functionName: brpc::AMFArray::AddField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 16
    functionsReached:
    - brpc::AMFArray::size
    - back
    - arraysize
    - resize
    linkageType: ''
    returnType: AMFField
    signature: AMFField * AMFArray::AddField()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:934,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:935,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/amf.cpp:938,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 940
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 940
    functionName: brpc::AMFArray::RemoveLastField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::Clear
    - pop_back
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::RemoveLastField()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:945,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:946,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:947,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:947,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:948,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:948,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:948,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:950,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:951,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:951,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:952,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:952,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:952,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' str'
    - stream
    argTypes:
    - butil::StringPiece
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 954
      start: 944
    functionDepth: 2
    functionLinenumber: 944
    functionLinenumberEnd: 954
    functionName: brpc::WriteAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::put_u32
    - AMFOutputStream*::put_u8
    - AMFOutputStream*::put_u16
    - brpc::size
    - data
    - AMFOutputStream*::putn
    linkageType: ''
    returnType: void
    signature: void WriteAMFString(const butil::StringPiece& str, AMFOutputStream*
      stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:957,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:958,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 959
    functionName: brpc::WriteAMFBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFBool(bool val, AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:962,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:964,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 965
    functionName: brpc::WriteAMFNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u64
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFNumber(double val, AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::WriteAMFNumber
      Src: /src/brpc/src/brpc/amf.cpp:968,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 967
    functionDepth: 1
    functionLinenumber: 967
    functionLinenumberEnd: 969
    functionName: brpc::WriteAMFUint32
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::WriteAMFNumber
    linkageType: ''
    returnType: void
    signature: void WriteAMFUint32(uint32_t val, AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:972,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 973
      start: 971
    functionDepth: 0
    functionLinenumber: 971
    functionLinenumberEnd: 973
    functionName: brpc::WriteAMFNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFNull(AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:976,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 975
    functionDepth: 0
    functionLinenumber: 975
    functionLinenumberEnd: 977
    functionName: brpc::WriteAMFUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFUndefined(AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:980,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 981
      start: 979
    functionDepth: 0
    functionLinenumber: 979
    functionLinenumberEnd: 981
    functionName: brpc::WriteAMFUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFUnsupported(AMFOutputStream* stream)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:985,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:986,1
    - Dst: GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:987,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/amf.cpp:988,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/amf.cpp:989,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/brpc/amf.cpp:990,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:991,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:992,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/brpc/amf.cpp:994,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/brpc/amf.cpp:996,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:997,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:997,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:998,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/brpc/amf.cpp:1003,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1004,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1005,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1006,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1008,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1008,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1009,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1009,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1009,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:1010,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1015,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1016,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1018,1
    - Dst: google::protobuf::Reflection*::GetDouble
      Src: /src/brpc/src/brpc/amf.cpp:1019,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1021,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1024,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1025,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1027,1
    - Dst: google::protobuf::Reflection*::GetBool
      Src: /src/brpc/src/brpc/amf.cpp:1028,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1032,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: google::protobuf::Reflection*::GetString
      Src: /src/brpc/src/brpc/amf.cpp:1035,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1036,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1038,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1038,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1039,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1039,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1039,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1041,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1042,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1042,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1047,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/brpc/amf.cpp:1047,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1050,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1051,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:1051,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1055,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1056,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 67
    argCount: 2
    argNames:
    - ' message'
    - stream
    argTypes:
    - google::protobuf::Message
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1057
      start: 983
    functionDepth: 2
    functionLinenumber: 983
    functionLinenumberEnd: 1057
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::Reflection*::GetBool
    - google::protobuf::Reflection*::GetMessage
    - AMFOutputStream*::put_u32
    - AMFOutputStream*::good
    - google::protobuf::FieldDescriptor*::full_name
    - std::string::data
    - AMFOutputStream*::put_u16
    - LOG
    - google::protobuf::Reflection*::HasField
    - brpc::WriteAMFObject
    - AMFOutputStream*::put_u8
    - google::protobuf::Reflection*::GetDouble
    - google::protobuf::Descriptor*::field_count
    - brpc::size
    - google::protobuf::FieldDescriptor*::is_repeated
    - GetReflection
    - AMFOutputStream*::putn
    - AMFOutputStream*::set_bad
    - google::protobuf::Descriptor*::field
    - google::protobuf::Reflection*::GetString
    - GetDescriptor
    - AMFOutputStream*::put_u64
    - data
    - google::protobuf::FieldDescriptor*::cpp_type
    - std::string::size
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: void
    signature: "void WriteAMFObject(const google::protobuf::Message& message,\n                    AMFOutputStream*
      stream)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1060,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1062,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1063,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1065,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1068,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1069,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1069,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1072,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1073,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1074,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1074,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1078,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1079,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1080,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1080,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1085,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1085,1
    - Dst: brpc::WriteAMFArray
      Src: /src/brpc/src/brpc/amf.cpp:1088,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1088,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1091,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1097,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:1109,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 2
    argNames:
    - ' field'
    - stream
    argTypes:
    - AMFField
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1059
    functionDepth: 3
    functionLinenumber: 1059
    functionLinenumberEnd: 1112
    functionName: brpc::WriteAMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AsBool
    - brpc::marker2str
    - brpc::WriteAMFArray
    - AMFOutputStream*::putn
    - type
    - brpc::WriteAMFObject
    - AsArray
    - AMFOutputStream*::put_u8
    - AsObject
    - AMFOutputStream*::put_u16
    - AMFOutputStream*::put_u64
    - butil::StringPiece::data
    - CHECK
    - AMFOutputStream*::put_u32
    - LOG
    - butil::StringPiece::size
    - AsString
    - AsNumber
    linkageType: ''
    returnType: void
    signature: void WriteAMFField(const AMFField& field, AMFOutputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1115,1
    - Dst: begin
      Src: /src/brpc/src/brpc/amf.cpp:1116,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1116,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1118,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1119,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1120,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1122,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1122,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1126,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1130,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' obj'
    - stream
    argTypes:
    - AMFObject
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1132
      start: 1114
    functionDepth: 4
    functionLinenumber: 1114
    functionLinenumberEnd: 1132
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - AMFOutputStream*::set_bad
    - end
    - AMFOutputStream*::put_u8
    - AMFOutputStream*::put_u16
    - data
    - brpc::size
    - brpc::WriteAMFField
    - begin
    - LOG
    - AMFOutputStream*::good
    - AMFOutputStream*::putn
    linkageType: ''
    returnType: void
    signature: void WriteAMFObject(const AMFObject& obj, AMFOutputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1135,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1137,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1138,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' arr'
    - stream
    argTypes:
    - AMFArray
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1144
      start: 1134
    functionDepth: 4
    functionLinenumber: 1134
    functionLinenumberEnd: 1144
    functionName: brpc::WriteAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::put_u8
    - brpc::WriteAMFField
    - brpc::size
    - AMFOutputStream*::put_u32
    - LOG
    - AMFOutputStream*::good
    linkageType: ''
    returnType: void
    signature: void WriteAMFArray(const AMFArray& arr, AMFOutputStream* stream)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1147,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1149,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1151,1
    - Dst: marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1169,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1172,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 2
    argNames:
    - ' os'
    - ' field'
    argTypes:
    - std::ostream
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1177
      start: 1146
    functionDepth: 0
    functionLinenumber: 1146
    functionLinenumberEnd: 1177
    functionName: '& operator<<(std::ostream& os, const AMFField& field)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AsBool
    - type
    - AsArray
    - AsObject
    - marker2str
    - AsString
    - AsNumber
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AMFField& field)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/amf.cpp:1182,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - AMFObject
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1191
      start: 1179
    functionDepth: 0
    functionLinenumber: 1179
    functionLinenumberEnd: 1191
    functionName: '& operator<<(std::ostream& os, const AMFObject& obj)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - end
    - begin
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AMFObject& obj)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:1196,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:1198,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' arr'
    argTypes:
    - std::ostream
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1209
    functionName: '& operator<<(std::ostream& os, const AMFArray& arr)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AMFArray& arr)
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - marker
    argTypes:
    - AMFMarker
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 50
    functionName: brpc::marker2str
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * marker2str(AMFMarker marker)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - marker
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::marker2str
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 15
    functionsReached:
    - brpc::marker2str
    linkageType: ''
    returnType: char
    signature: char * marker2str(uint8_t marker)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: brpc::AMFField::AMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFField::AMFField()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsString
      Src: /src/brpc/src/brpc/amf.cpp:65,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:67,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:68,1
    - Dst: brpc::AMFField::IsObject
      Src: /src/brpc/src/brpc/amf.cpp:70,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:71,1
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:72,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 75
    functionName: brpc::AMFField::AMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::IsString
    - AMFArray::AMFArray
    - AMFObject::AMFObject
    - brpc::AMFField::IsObject
    - brpc::AMFField::IsArray
    - malloc
    - memcpy
    linkageType: ''
    returnType: void
    signature: void AMFField::AMFField(const AMFField& rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.cpp:78,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/amf.cpp:83,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:85,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:86,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/amf.cpp:88,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:89,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/amf.cpp:90,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:91,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 94
    functionName: '& AMFField::operator=(const AMFField& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - IsString
    - AMFArray::AMFArray
    - AMFObject::AMFObject
    - Clear
    - malloc
    - IsArray
    - IsObject
    - memcpy
    linkageType: ''
    returnType: AMFField
    signature: AMFField & AMFField::operator=(const AMFField& rhs)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::type
      Src: /src/brpc/src/brpc/amf.cpp:97,1
    - Dst: free
      Src: /src/brpc/src/brpc/amf.cpp:119,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 132
    functionName: brpc::AMFField::SlowerClear
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFField::type
    - free
    linkageType: ''
    returnType: void
    signature: void AMFField::SlowerClear()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::find_cstr
      Src: /src/brpc/src/brpc/amf.cpp:136,1
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.cpp:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 141
    functionName: brpc::AMFObject::Find
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFObject::end
    - butil::find_cstr
    linkageType: ''
    returnType: AMFField
    signature: AMFField * AMFObject::Find(const char* name) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:145,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:146,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:149,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:150,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:151,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:153,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:155,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:155,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:156,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:157,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 162
    functionName: brpc::AMFField::SetString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    - malloc
    - data
    - memcpy
    - size
    linkageType: ''
    returnType: void
    signature: void AMFField::SetString(const butil::StringPiece& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 170
    functionName: brpc::AMFField::SetBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetBool(bool val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: brpc::AMFField::SetNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetNumber(double val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:182,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: brpc::AMFField::SetNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetNull()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 192
    functionName: brpc::AMFField::SetUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetUndefined()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:196,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 199
    functionName: brpc::AMFField::SetUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: void
    signature: void AMFField::SetUnsupported()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsObject
      Src: /src/brpc/src/brpc/amf.cpp:202,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:203,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:205,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 208
    functionName: brpc::AMFField::MutableObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::AMFObject
    - brpc::AMFField::IsObject
    - brpc::AMFField::Clear
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AMFField::MutableObject()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:211,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:212,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 217
    functionName: brpc::AMFField::MutableArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFArray::AMFArray
    - brpc::AMFField::Clear
    - brpc::AMFField::IsArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AMFField::MutableArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/src/brpc/amf.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' str'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: brpc::AMFObject::SetString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - brpc::AMFObject::SetString
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetString(const std::string& name, const butil::StringPiece&
      str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 227
    functionName: brpc::AMFObject::SetBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::SetBool
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetBool(const std::string& name, bool val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetNumber
      Src: /src/brpc/src/brpc/amf.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: brpc::AMFObject::SetNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::SetNumber
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetNumber(const std::string& name, double val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetNull
      Src: /src/brpc/src/brpc/amf.cpp:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: brpc::AMFObject::SetNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::SetNull
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetNull(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetUndefined
      Src: /src/brpc/src/brpc/amf.cpp:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: brpc::AMFObject::SetUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::SetUndefined
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetUndefined(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: brpc::AMFObject::SetUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::SetUnsupported
    linkageType: ''
    returnType: void
    signature: void AMFObject::SetUnsupported(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: brpc::AMFObject::MutableObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::MutableObject
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AMFObject::MutableObject(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::MutableArray
      Src: /src/brpc/src/brpc/amf.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 251
    functionName: brpc::AMFObject::MutableArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::AMFObject::MutableArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AMFObject::MutableArray(const std::string& name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u16
      Src: /src/brpc/src/brpc/amf.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:256,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:259,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:261,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 265
    functionName: brpc::ReadAMFShortStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 9
    functionsReached:
    - AMFInputStream*::cut_u16
    - std::string*::resize
    - AMFInputStream*::cutn
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFShortStringBody(std::string* str, AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:270,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:273,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:274,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:275,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 279
    functionName: brpc::ReadAMFLongStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 4
    functionsReached:
    - AMFInputStream*::cutn
    - std::string*::resize
    - AMFInputStream*::cut_u32
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFLongStringBody(std::string* str, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:284,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:288,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:292,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:292,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 281
    functionDepth: 2
    functionLinenumber: 281
    functionLinenumberEnd: 294
    functionName: brpc::ReadAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::marker2str
    - brpc::ReadAMFLongStringBody
    - AMFInputStream*::cut_u8
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFString(std::string* str, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:299,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:311,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:311,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 313
    functionName: brpc::ReadAMFBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFBool(bool* val, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:318,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:328,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:328,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 330
    functionName: brpc::ReadAMFNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFInputStream*::cut_u64
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNumber(double* val, AMFInputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFNumber
      Src: /src/brpc/src/brpc/amf.cpp:334,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 332
    functionDepth: 2
    functionLinenumber: 332
    functionLinenumberEnd: 339
    functionName: brpc::ReadAMFUint32
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::ReadAMFNumber
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUint32(uint32_t* val, AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:343,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:350,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:350,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 341
    functionDepth: 1
    functionLinenumber: 341
    functionLinenumberEnd: 352
    functionName: brpc::ReadAMFNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNull(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:363,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:363,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 365
    functionName: brpc::ReadAMFUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUndefined(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:370,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:376,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:376,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 378
    functionName: brpc::ReadAMFUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUnsupported(AMFInputStream* stream)
  - BBCount: 38
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:389,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:392,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:393,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:400,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:404,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:405,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:406,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/brpc/amf.cpp:409,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:416,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:421,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:421,1
    - Dst: google::protobuf::Reflection*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:423,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:429,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:434,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:435,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:437,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:444,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:451,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:451,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/brpc/amf.cpp:453,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:454,1
    - Dst: brpc::SkipAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:459,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:477,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:477,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:480,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:484,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:485,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:489,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:490,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:491,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:493,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 104
    argCount: 3
    argNames:
    - stream
    - message
    - field
    argTypes:
    - AMFInputStream*
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 384
    functionDepth: 4
    functionLinenumber: 384
    functionLinenumberEnd: 499
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - brpc::marker2str
    - brpc::ReadAMFObjectBody
    - google::protobuf::FieldDescriptor*::full_name
    - brpc::ReadAMFLongStringBody
    - google::protobuf::Reflection*::MutableMessage
    - AMFInputStream*::cut_u8
    - google::protobuf::Message*::GetReflection
    - AMFInputStream*::cut_u64
    - google::protobuf::Reflection*::SetDouble
    - google::protobuf::Reflection*::SetBool
    - CHECK
    - google::protobuf::FieldDescriptor*::cpp_type
    - LOG
    - brpc::SkipAMFObjectBody
    - brpc::ReadAMFShortStringBody
    - google::protobuf::Reflection*::SetString
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectField(AMFInputStream* stream,\n                               google::protobuf::Message*
      message,\n                               const google::protobuf::FieldDescriptor*
      field)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:503,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:505,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:506,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:509,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:513,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:519,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:520,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:520,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:522,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - message
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 501
    functionDepth: 3
    functionLinenumber: 501
    functionLinenumberEnd: 527
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 6
    functionsReached:
    - AMFInputStream*::cut_u8
    - google::protobuf::Descriptor*::full_name
    - brpc::ReadAMFObjectField
    - std::string::empty
    - google::protobuf::Message*::GetDescriptor
    - google::protobuf::Descriptor*::FindFieldByName
    - LOG
    - RPC_VLOG_IF
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectBody(google::protobuf::Message* message,\n                              AMFInputStream*
      stream)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:531,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:532,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:535,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:539,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:545,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 529
    functionDepth: 3
    functionLinenumber: 529
    functionLinenumberEnd: 550
    functionName: brpc::SkipAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::ReadAMFObjectField
    - AMFInputStream*::cut_u8
    - std::string::empty
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool SkipAMFObjectBody(AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:556,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:559,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:563,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:566,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:567,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:567,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:569,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - message
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 552
    functionDepth: 3
    functionLinenumber: 552
    functionLinenumberEnd: 574
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 4
    functionsReached:
    - AMFInputStream*::cut_u32
    - brpc::ReadAMFObjectField
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Message*::GetDescriptor
    - google::protobuf::Descriptor*::FindFieldByName
    - LOG
    - RPC_VLOG_IF
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFEcmaArrayBody(google::protobuf::Message* message,\n                                 AMFInputStream*
      stream)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:579,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:583,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:587,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:592,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:592,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/amf.cpp:595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:596,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/amf.cpp:597,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - msg
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 576
    functionDepth: 4
    functionLinenumber: 576
    functionLinenumberEnd: 601
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFEcmaArrayBody
    - LOG
    - google::protobuf::Message*::InitializationErrorString
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(google::protobuf::Message* msg, AMFInputStream*
      stream)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:613,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:614,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:620,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:621,1
    - Dst: AMFObject*::SetNumber
      Src: /src/brpc/src/brpc/amf.cpp:625,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:630,1
    - Dst: AMFObject*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:633,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:637,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:640,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:645,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:650,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:650,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:660,1
    - Dst: AMFObject*::MutableArray
      Src: /src/brpc/src/brpc/amf.cpp:660,1
    - Dst: AMFObject*::SetNull
      Src: /src/brpc/src/brpc/amf.cpp:665,1
    - Dst: AMFObject*::SetUndefined
      Src: /src/brpc/src/brpc/amf.cpp:668,1
    - Dst: AMFObject*::SetUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:679,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:679,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:682,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:686,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:687,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:690,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 82
    argCount: 3
    argNames:
    - stream
    - obj
    - ' name'
    argTypes:
    - AMFInputStream*
    - AMFObject*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 609
    functionDepth: 6
    functionLinenumber: 609
    functionLinenumberEnd: 694
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 8
    functionsReached:
    - brpc::marker2str
    - AMFObject*::SetNumber
    - brpc::ReadAMFObjectBody
    - AMFObject*::MutableObject
    - AMFObject*::SetUndefined
    - AMFObject*::SetBool
    - brpc::ReadAMFLongStringBody
    - AMFObject*::MutableArray
    - AMFInputStream*::cut_u8
    - AMFObject*::SetUnsupported
    - AMFObject*::SetString
    - AMFInputStream*::cut_u64
    - CHECK
    - AMFObject*::SetNull
    - brpc::ReadAMFArrayBody
    - brpc::ReadAMFEcmaArrayBody
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectField(AMFInputStream* stream,\n                               AMFObject*
      obj,\n                               const std::string& name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:698,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:699,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:701,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:702,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:706,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:712,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 696
    functionDepth: 3
    functionLinenumber: 696
    functionLinenumberEnd: 717
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 8
    functionsReached:
    - brpc::ReadAMFObjectField
    - AMFInputStream*::cut_u8
    - std::string::empty
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObjectBody(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:721,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:722,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:727,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:728,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:731,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 719
    functionDepth: 3
    functionLinenumber: 719
    functionLinenumberEnd: 736
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 6
    functionsReached:
    - brpc::ReadAMFObjectField
    - AMFInputStream*::cut_u32
    - LOG
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFEcmaArrayBody(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:740,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:741,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:745,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:749,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:754,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:754,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 738
    functionDepth: 4
    functionLinenumber: 738
    functionLinenumberEnd: 758
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFEcmaArrayBody
    - LOG
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:762,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:763,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:769,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:770,1
    - Dst: AMFArray*::AddNumber
      Src: /src/brpc/src/brpc/amf.cpp:774,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:778,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:779,1
    - Dst: AMFArray*::AddBool
      Src: /src/brpc/src/brpc/amf.cpp:782,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:786,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:789,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:793,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:794,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:799,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:799,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:804,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:804,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:809,1
    - Dst: AMFArray*::AddArray
      Src: /src/brpc/src/brpc/amf.cpp:809,1
    - Dst: AMFArray*::AddNull
      Src: /src/brpc/src/brpc/amf.cpp:814,1
    - Dst: AMFArray*::AddUndefined
      Src: /src/brpc/src/brpc/amf.cpp:817,1
    - Dst: AMFArray*::AddUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:820,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:828,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:828,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:831,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:835,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:836,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:839,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 82
    argCount: 2
    argNames:
    - stream
    - arr
    argTypes:
    - AMFInputStream*
    - AMFArray*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 760
    functionDepth: 6
    functionLinenumber: 760
    functionLinenumberEnd: 843
    functionName: brpc::ReadAMFArrayItem
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::marker2str
    - AMFArray*::AddArray
    - brpc::ReadAMFObjectBody
    - AMFArray*::AddUnsupported
    - AMFArray*::AddUndefined
    - brpc::ReadAMFLongStringBody
    - AMFArray*::AddNull
    - brpc::ReadAMFArrayBody
    - AMFInputStream*::cut_u8
    - AMFArray*::AddBool
    - AMFInputStream*::cut_u64
    - CHECK
    - AMFArray*::AddObject
    - AMFArray*::AddString
    - AMFArray*::AddNumber
    - LOG
    - brpc::ReadAMFEcmaArrayBody
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayItem(AMFInputStream* stream, AMFArray* arr)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:847,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:848,1
    - Dst: brpc::ReadAMFArrayItem
      Src: /src/brpc/src/brpc/amf.cpp:852,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - arr
    - stream
    argTypes:
    - AMFArray*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 857
      start: 845
    functionDepth: 5
    functionLinenumber: 845
    functionLinenumberEnd: 857
    functionName: brpc::ReadAMFArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - brpc::ReadAMFArrayItem
    - AMFInputStream*::cut_u32
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayBody(AMFArray* arr, AMFInputStream* stream)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:861,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:862,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:866,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:871,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:871,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - arr
    - stream
    argTypes:
    - AMFArray*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 875
      start: 859
    functionDepth: 6
    functionLinenumber: 859
    functionLinenumberEnd: 875
    functionName: brpc::ReadAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::ReadAMFArrayBody
    - LOG
    - brpc::marker2str
    - AMFInputStream*::cut_u8
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArray(AMFArray* arr, AMFInputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 880
      start: 879
    functionDepth: 0
    functionLinenumber: 879
    functionLinenumberEnd: 880
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFArray::AMFArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:884,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:884,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:888,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 882
    functionDepth: 1
    functionLinenumber: 882
    functionLinenumberEnd: 891
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::AMFArray(const AMFArray& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: '& AMFArray::~AMFArray'
      Src: /src/brpc/src/brpc/amf.cpp:895,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:896,1
    - Dst: RemoveLastField
      Src: /src/brpc/src/brpc/amf.cpp:902,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 893
    functionDepth: 0
    functionLinenumber: 893
    functionLinenumberEnd: 905
    functionName: '& AMFArray::operator=(const AMFArray& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - '& AMFArray::~AMFArray'
    - AMFArray::AMFArray
    - RemoveLastField
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray & AMFArray::operator=(const AMFArray& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:908,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:908,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:910,1
    - Dst: clear
      Src: /src/brpc/src/brpc/amf.cpp:913,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 907
    functionDepth: 1
    functionLinenumber: 907
    functionLinenumberEnd: 914
    functionName: brpc::AMFArray::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - brpc::AMFArray::Clear
    - std::min
    - clear
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::Clear()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:917,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:920,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:921,1
    - Dst: resize
      Src: /src/brpc/src/brpc/amf.cpp:925,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:925,1
    - Dst: back
      Src: /src/brpc/src/brpc/amf.cpp:927,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 916
    functionDepth: 1
    functionLinenumber: 916
    functionLinenumberEnd: 928
    functionName: brpc::AMFArray::AddField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 16
    functionsReached:
    - brpc::AMFArray::size
    - back
    - arraysize
    - resize
    linkageType: ''
    returnType: AMFField
    signature: AMFField * AMFArray::AddField()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:934,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:935,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/amf.cpp:938,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 940
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 940
    functionName: brpc::AMFArray::RemoveLastField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::Clear
    - pop_back
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::RemoveLastField()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:945,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:946,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:947,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:947,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:948,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:948,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:948,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:950,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:951,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:951,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:952,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:952,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:952,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' str'
    - stream
    argTypes:
    - butil::StringPiece
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 954
      start: 944
    functionDepth: 2
    functionLinenumber: 944
    functionLinenumberEnd: 954
    functionName: brpc::WriteAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::put_u32
    - AMFOutputStream*::put_u8
    - AMFOutputStream*::put_u16
    - brpc::size
    - data
    - AMFOutputStream*::putn
    linkageType: ''
    returnType: void
    signature: void WriteAMFString(const butil::StringPiece& str, AMFOutputStream*
      stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:957,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:958,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 959
    functionName: brpc::WriteAMFBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFBool(bool val, AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:962,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:964,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 965
    functionName: brpc::WriteAMFNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::put_u64
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFNumber(double val, AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::WriteAMFNumber
      Src: /src/brpc/src/brpc/amf.cpp:968,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 967
    functionDepth: 1
    functionLinenumber: 967
    functionLinenumberEnd: 969
    functionName: brpc::WriteAMFUint32
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - brpc::WriteAMFNumber
    linkageType: ''
    returnType: void
    signature: void WriteAMFUint32(uint32_t val, AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:972,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 973
      start: 971
    functionDepth: 0
    functionLinenumber: 971
    functionLinenumberEnd: 973
    functionName: brpc::WriteAMFNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFNull(AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:976,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 975
    functionDepth: 0
    functionLinenumber: 975
    functionLinenumberEnd: 977
    functionName: brpc::WriteAMFUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFUndefined(AMFOutputStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:980,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 981
      start: 979
    functionDepth: 0
    functionLinenumber: 979
    functionLinenumberEnd: 981
    functionName: brpc::WriteAMFUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::put_u8
    linkageType: ''
    returnType: void
    signature: void WriteAMFUnsupported(AMFOutputStream* stream)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:985,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:986,1
    - Dst: GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:987,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/amf.cpp:988,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/amf.cpp:989,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/brpc/amf.cpp:990,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:991,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:992,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/brpc/amf.cpp:994,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/brpc/amf.cpp:996,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:997,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:997,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:998,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/brpc/amf.cpp:1003,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1004,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1005,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1006,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1008,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1008,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1009,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1009,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1009,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:1010,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1015,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1016,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1018,1
    - Dst: google::protobuf::Reflection*::GetDouble
      Src: /src/brpc/src/brpc/amf.cpp:1019,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1021,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1024,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1025,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1027,1
    - Dst: google::protobuf::Reflection*::GetBool
      Src: /src/brpc/src/brpc/amf.cpp:1028,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1032,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: google::protobuf::Reflection*::GetString
      Src: /src/brpc/src/brpc/amf.cpp:1035,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1036,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1038,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1038,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1039,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1039,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1039,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1041,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1042,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1042,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1047,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/brpc/amf.cpp:1047,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1050,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1051,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:1051,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1055,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1056,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 67
    argCount: 2
    argNames:
    - ' message'
    - stream
    argTypes:
    - google::protobuf::Message
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1057
      start: 983
    functionDepth: 2
    functionLinenumber: 983
    functionLinenumberEnd: 1057
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::Reflection*::GetBool
    - google::protobuf::Reflection*::GetMessage
    - AMFOutputStream*::put_u32
    - AMFOutputStream*::good
    - google::protobuf::FieldDescriptor*::full_name
    - std::string::data
    - AMFOutputStream*::put_u16
    - LOG
    - google::protobuf::Reflection*::HasField
    - brpc::WriteAMFObject
    - AMFOutputStream*::put_u8
    - google::protobuf::Reflection*::GetDouble
    - google::protobuf::Descriptor*::field_count
    - brpc::size
    - google::protobuf::FieldDescriptor*::is_repeated
    - GetReflection
    - AMFOutputStream*::putn
    - AMFOutputStream*::set_bad
    - google::protobuf::Descriptor*::field
    - google::protobuf::Reflection*::GetString
    - GetDescriptor
    - AMFOutputStream*::put_u64
    - data
    - google::protobuf::FieldDescriptor*::cpp_type
    - std::string::size
    - google::protobuf::FieldDescriptor*::name
    linkageType: ''
    returnType: void
    signature: "void WriteAMFObject(const google::protobuf::Message& message,\n                    AMFOutputStream*
      stream)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1060,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1062,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1063,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1065,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1068,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1069,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1069,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1072,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1073,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1074,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1074,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1078,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1079,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1080,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1080,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1085,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1085,1
    - Dst: brpc::WriteAMFArray
      Src: /src/brpc/src/brpc/amf.cpp:1088,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1088,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1091,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1097,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:1109,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 2
    argNames:
    - ' field'
    - stream
    argTypes:
    - AMFField
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1059
    functionDepth: 5
    functionLinenumber: 1059
    functionLinenumberEnd: 1112
    functionName: brpc::WriteAMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AsBool
    - brpc::marker2str
    - brpc::WriteAMFArray
    - AMFOutputStream*::putn
    - type
    - brpc::WriteAMFObject
    - AsArray
    - AMFOutputStream*::put_u8
    - AsObject
    - AMFOutputStream*::put_u16
    - AMFOutputStream*::put_u64
    - butil::StringPiece::data
    - CHECK
    - AMFOutputStream*::put_u32
    - LOG
    - butil::StringPiece::size
    - AsString
    - AsNumber
    linkageType: ''
    returnType: void
    signature: void WriteAMFField(const AMFField& field, AMFOutputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1115,1
    - Dst: begin
      Src: /src/brpc/src/brpc/amf.cpp:1116,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1116,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1118,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1119,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1120,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1122,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1122,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1126,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1130,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' obj'
    - stream
    argTypes:
    - AMFObject
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1132
      start: 1114
    functionDepth: 4
    functionLinenumber: 1114
    functionLinenumberEnd: 1132
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - AMFOutputStream*::set_bad
    - end
    - AMFOutputStream*::put_u8
    - AMFOutputStream*::put_u16
    - data
    - brpc::size
    - brpc::WriteAMFField
    - begin
    - LOG
    - AMFOutputStream*::good
    - AMFOutputStream*::putn
    linkageType: ''
    returnType: void
    signature: void WriteAMFObject(const AMFObject& obj, AMFOutputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1135,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1137,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1138,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' arr'
    - stream
    argTypes:
    - AMFArray
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1144
      start: 1134
    functionDepth: 4
    functionLinenumber: 1134
    functionLinenumberEnd: 1144
    functionName: brpc::WriteAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFOutputStream*::put_u8
    - brpc::WriteAMFField
    - brpc::size
    - AMFOutputStream*::put_u32
    - LOG
    - AMFOutputStream*::good
    linkageType: ''
    returnType: void
    signature: void WriteAMFArray(const AMFArray& arr, AMFOutputStream* stream)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1147,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1149,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1151,1
    - Dst: marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1169,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1172,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 2
    argNames:
    - ' os'
    - ' field'
    argTypes:
    - std::ostream
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1177
      start: 1146
    functionDepth: 0
    functionLinenumber: 1146
    functionLinenumberEnd: 1177
    functionName: '& operator<<(std::ostream& os, const AMFField& field)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AsBool
    - type
    - AsArray
    - AsObject
    - marker2str
    - AsString
    - AsNumber
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AMFField& field)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/amf.cpp:1182,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - AMFObject
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1191
      start: 1179
    functionDepth: 0
    functionLinenumber: 1179
    functionLinenumberEnd: 1191
    functionName: '& operator<<(std::ostream& os, const AMFObject& obj)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - end
    - begin
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AMFObject& obj)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:1196,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:1198,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' arr'
    argTypes:
    - std::ostream
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1209
    functionName: '& operator<<(std::ostream& os, const AMFArray& arr)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AMFArray& arr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: brpc::NsheadClosure::additional_space
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * additional_space()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: brpc::NsheadClosure::received_us
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t received_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: brpc::NsheadServiceOptions
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadServiceOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - generate_status2
    - additional_space2
    argTypes:
    - bool
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::NsheadServiceOptions
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadServiceOptions(bool generate_status2, size_t additional_space2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: brpc::NsheadClosure::additional_space
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * additional_space()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: brpc::NsheadClosure::received_us
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t received_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: brpc::NsheadServiceOptions
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadServiceOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - generate_status2
    - additional_space2
    argTypes:
    - bool
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::NsheadServiceOptions
    functionSourceFile: /src/brpc/src/brpc/nshead_service.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadServiceOptions(bool generate_status2, size_t additional_space2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/esp_message.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::EspMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/esp_message.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/esp_message.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::EspMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/esp_message.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~SocketMessage()
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::SocketMessage::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t EstimatedByteSize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket_message.h:54,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket_message.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - SocketMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: operator()(SocketMessage* msg) const
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void operator()(SocketMessage* msg) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket_message.h:54,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket_message.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - SocketMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: operator()(SocketMessage* msg) const
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void operator()(SocketMessage* msg) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - SocketMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 71
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr(SocketMessage* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T&>
      Src: /src/brpc/src/brpc/socket_message.h:78,1
    - Dst: SocketMessagePtr<>::operator*
      Src: /src/brpc/src/brpc/socket_message.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - SocketMessagePtr<>::operator*
    - static_cast<T&>
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/socket_message.h:79,1
    - Dst: SocketMessagePtr<>::operator->
      Src: /src/brpc/src/brpc/socket_message.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - SocketMessagePtr<>::operator->
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/socket_message.h:80,1
    - Dst: bvar::detail::UniqueLockBase::release
      Src: /src/brpc/src/brpc/socket_message.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: brpc::release
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::release
    - static_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~SocketMessage()
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::SocketMessage::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t EstimatedByteSize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket_message.h:54,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket_message.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - SocketMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: operator()(SocketMessage* msg) const
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void operator()(SocketMessage* msg) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket_message.h:54,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket_message.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - SocketMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: operator()(SocketMessage* msg) const
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void operator()(SocketMessage* msg) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - SocketMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 71
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr(SocketMessage* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: brpc::SocketMessagePtr
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMessagePtr(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T&>
      Src: /src/brpc/src/brpc/socket_message.h:78,1
    - Dst: SocketMessagePtr<>::operator*
      Src: /src/brpc/src/brpc/socket_message.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - SocketMessagePtr<>::operator*
    - static_cast<T&>
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/socket_message.h:79,1
    - Dst: SocketMessagePtr<>::operator->
      Src: /src/brpc/src/brpc/socket_message.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - SocketMessagePtr<>::operator->
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/socket_message.h:80,1
    - Dst: bvar::detail::UniqueLockBase::release
      Src: /src/brpc/src/brpc/socket_message.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: brpc::release
    functionSourceFile: /src/brpc/src/brpc/socket_message.h
    functionUses: 0
    functionsReached:
    - bvar::detail::UniqueLockBase::release
    - static_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/src/brpc/uri.h:71,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/uri.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' url'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::URI::SetHttpURL
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 13
    functionsReached:
    - brpc::URI::SetHttpURL
    - c_str
    linkageType: ''
    returnType: int
    signature: int SetHttpURL(const std::string& url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetHttpURL
      Src: /src/brpc/src/brpc/uri.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - url
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: operator=(const char* url)
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - SetHttpURL
    linkageType: ''
    returnType: void
    signature: void operator=(const char* url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetHttpURL
      Src: /src/brpc/src/brpc/uri.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' url'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: operator=(const std::string& url)
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - SetHttpURL
    linkageType: ''
    returnType: void
    signature: void operator=(const std::string& url)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: '& status() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status & status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: '& scheme() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & scheme() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/uri.h:81,1
    - Dst: scheme
      Src: /src/brpc/src/brpc/uri.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: brpc::URI::std
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - scheme
    - schema
    linkageType: ''
    returnType: BAIDU_DEPRECATED
    signature: BAIDU_DEPRECATED std
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: '& host() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & host() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: brpc::URI::port
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int port() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: '& path() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & path() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: '& user_info() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & user_info() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: '& fragment() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & fragment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' scheme'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: brpc::URI::set_scheme
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_scheme(const std::string& scheme)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::set_scheme
      Src: /src/brpc/src/brpc/uri.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: brpc::URI::set_schema
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - brpc::URI::set_scheme
    linkageType: ''
    returnType: BAIDU_DEPRECATED
    signature: BAIDU_DEPRECATED set_schema(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: brpc::URI::set_path
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_path(const std::string& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' host'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::URI::set_host
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_host(const std::string& host)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::URI::set_port
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_port(int port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/src/brpc/uri.h:103,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/uri.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::URI::SetH2Path
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 3
    functionsReached:
    - c_str
    - brpc::URI::SetH2Path
    linkageType: ''
    returnType: void
    signature: void SetH2Path(const std::string& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 108
    functionName: brpc::URI::GetQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 11
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: std::string
    signature: std::string * GetQuery(const char* key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 110
    functionName: brpc::URI::GetQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 11
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: std::string
    signature: std::string * GetQuery(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: brpc::URI::QueryBegin
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 4
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: QueryIterator
    signature: QueryIterator QueryBegin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::URI::QueryEnd
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 4
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: QueryIterator
    signature: QueryIterator QueryEnd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: brpc::URI::QueryCount
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 2
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: size_t
    signature: size_t QueryCount() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InitializeQueryMap
      Src: /src/brpc/src/brpc/uri.h:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 142
    functionName: '& get_query_map() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - InitializeQueryMap
    linkageType: ''
    returnType: QueryMap
    signature: QueryMap & get_query_map() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 167
    functionName: brpc::URI::SetQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 3
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: void
    signature: void URI::SetQuery(const std::string& key, const std::string& value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 175
    functionName: brpc::URI::RemoveQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 2
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: size_t
    signature: size_t URI::RemoveQuery(const char* key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 183
    functionName: brpc::URI::RemoveQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 2
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: size_t
    signature: size_t URI::RemoveQuery(const std::string& key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.h:188,1
    - Dst: AppendQueryString
      Src: /src/brpc/src/brpc/uri.h:189,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 192
    functionName: '& URI::query() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - clear
    - AppendQueryString
    linkageType: ''
    returnType: std::string
    signature: std::string & URI::query() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/uri.h:195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' uri'
    argTypes:
    - std::ostream
    - URI
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 197
    functionName: '& operator<<(std::ostream& os, const URI& uri)'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const URI& uri)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str_begin
    - str_end
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: brpc::QuerySplitter::QuerySplitter
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QuerySplitter(const char* str_begin, const char* str_end)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str_begin
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 208
    functionName: brpc::QuerySplitter::QuerySplitter
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QuerySplitter(const char* str_begin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - sp
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: brpc::QuerySplitter::QuerySplitter
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QuerySplitter(const butil::StringPiece &sp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/src/brpc/uri.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::QueryRemover::key
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 10
    functionsReached:
    - brpc::QueryRemover::key
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece key()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/src/brpc/uri.h:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::QueryRemover::value
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 6
    functionsReached:
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key_and_value
      Src: /src/brpc/src/brpc/uri.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: brpc::QueryRemover::key_and_value
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 3
    functionsReached:
    - brpc::QueryRemover::key_and_value
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece key_and_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: operator const void*() const
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/src/brpc/uri.h:71,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/uri.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' url'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::URI::SetHttpURL
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 14
    functionsReached:
    - brpc::URI::SetHttpURL
    - c_str
    linkageType: ''
    returnType: int
    signature: int SetHttpURL(const std::string& url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetHttpURL
      Src: /src/brpc/src/brpc/uri.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - url
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: operator=(const char* url)
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - SetHttpURL
    linkageType: ''
    returnType: void
    signature: void operator=(const char* url)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetHttpURL
      Src: /src/brpc/src/brpc/uri.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' url'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: operator=(const std::string& url)
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - SetHttpURL
    linkageType: ''
    returnType: void
    signature: void operator=(const std::string& url)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: '& status() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status & status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: '& scheme() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & scheme() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/uri.h:81,1
    - Dst: scheme
      Src: /src/brpc/src/brpc/uri.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: brpc::URI::std
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - scheme
    - schema
    linkageType: ''
    returnType: BAIDU_DEPRECATED
    signature: BAIDU_DEPRECATED std
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: '& host() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & host() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: brpc::URI::port
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int port() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: '& path() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & path() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: '& user_info() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & user_info() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: '& fragment() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & fragment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' scheme'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: brpc::URI::set_scheme
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_scheme(const std::string& scheme)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::set_scheme
      Src: /src/brpc/src/brpc/uri.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: brpc::URI::set_schema
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - brpc::URI::set_scheme
    linkageType: ''
    returnType: BAIDU_DEPRECATED
    signature: BAIDU_DEPRECATED set_schema(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: brpc::URI::set_path
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_path(const std::string& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' host'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::URI::set_host
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_host(const std::string& host)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::URI::set_port
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_port(int port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::SetH2Path
      Src: /src/brpc/src/brpc/uri.h:103,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/uri.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::URI::SetH2Path
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 4
    functionsReached:
    - c_str
    - brpc::URI::SetH2Path
    linkageType: ''
    returnType: void
    signature: void SetH2Path(const std::string& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 108
    functionName: brpc::URI::GetQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 11
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: std::string
    signature: std::string * GetQuery(const char* key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 110
    functionName: brpc::URI::GetQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 11
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: std::string
    signature: std::string * GetQuery(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: brpc::URI::QueryBegin
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 4
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: QueryIterator
    signature: QueryIterator QueryBegin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::URI::QueryEnd
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 4
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: QueryIterator
    signature: QueryIterator QueryEnd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: brpc::URI::QueryCount
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 2
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: size_t
    signature: size_t QueryCount() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InitializeQueryMap
      Src: /src/brpc/src/brpc/uri.h:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 142
    functionName: '& get_query_map() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - InitializeQueryMap
    linkageType: ''
    returnType: QueryMap
    signature: QueryMap & get_query_map() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 167
    functionName: brpc::URI::SetQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 3
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: void
    signature: void URI::SetQuery(const std::string& key, const std::string& value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 175
    functionName: brpc::URI::RemoveQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 2
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: size_t
    signature: size_t URI::RemoveQuery(const char* key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_query_map
      Src: /src/brpc/src/brpc/uri.h:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 183
    functionName: brpc::URI::RemoveQuery
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 2
    functionsReached:
    - get_query_map
    linkageType: ''
    returnType: size_t
    signature: size_t URI::RemoveQuery(const std::string& key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/uri.h:188,1
    - Dst: AppendQueryString
      Src: /src/brpc/src/brpc/uri.h:189,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 192
    functionName: '& URI::query() const'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - clear
    - AppendQueryString
    linkageType: ''
    returnType: std::string
    signature: std::string & URI::query() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/uri.h:195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' uri'
    argTypes:
    - std::ostream
    - URI
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 197
    functionName: '& operator<<(std::ostream& os, const URI& uri)'
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const URI& uri)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str_begin
    - str_end
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: brpc::QuerySplitter::QuerySplitter
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QuerySplitter(const char* str_begin, const char* str_end)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str_begin
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 208
    functionName: brpc::QuerySplitter::QuerySplitter
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QuerySplitter(const char* str_begin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - sp
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: brpc::QuerySplitter::QuerySplitter
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void QuerySplitter(const butil::StringPiece &sp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/src/brpc/uri.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::QueryRemover::key
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 11
    functionsReached:
    - brpc::QueryRemover::key
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece key()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/src/brpc/uri.h:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::QueryRemover::value
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 7
    functionsReached:
    - brpc::QueryRemover::value
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::QueryRemover::key_and_value
      Src: /src/brpc/src/brpc/uri.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: brpc::QueryRemover::key_and_value
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 4
    functionsReached:
    - brpc::QueryRemover::key_and_value
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece key_and_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: operator const void*() const
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::Swap
      Src: /src/brpc/src/brpc/uri.h:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - brpc::URI
    - brpc::URI
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 270
    functionDepth: 2
    functionLinenumber: 270
    functionLinenumberEnd: 272
    functionName: std::swap
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 27
    functionsReached:
    - brpc::URI::Swap
    linkageType: ''
    returnType: void
    signature: void swap(brpc::URI &lhs, brpc::URI &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::Swap
      Src: /src/brpc/src/brpc/uri.h:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - brpc::URI
    - brpc::URI
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 270
    functionDepth: 2
    functionLinenumber: 270
    functionLinenumberEnd: 272
    functionName: std::swap
    functionSourceFile: /src/brpc/src/brpc/uri.h
    functionUses: 27
    functionsReached:
    - brpc::URI::Swap
    linkageType: ''
    returnType: void
    signature: void swap(brpc::URI &lhs, brpc::URI &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ~BackupRequestPolicy()
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BackupRequestPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ~BackupRequestPolicy()
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BackupRequestPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/channel_base.h:39,1
    - Dst: abort
      Src: /src/brpc/src/brpc/channel_base.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::ChannelBase::Weight
    functionSourceFile: /src/brpc/src/brpc/channel_base.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: int
    signature: int Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/channel_base.h:39,1
    - Dst: abort
      Src: /src/brpc/src/brpc/channel_base.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::ChannelBase::Weight
    functionSourceFile: /src/brpc/src/brpc/channel_base.h
    functionUses: 0
    functionsReached:
    - abort
    - CHECK
    linkageType: ''
    returnType: int
    signature: int Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~SendNsheadPbResponse()
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SendNsheadPbResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - adaptor2
    - cntl2
    - ns_res2
    - done2
    argTypes:
    - NsheadPbServiceAdaptor*
    - Controller*
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 68
    functionName: brpc::SendNsheadPbResponse::SendNsheadPbResponse
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SendNsheadPbResponse::SendNsheadPbResponse(\n    const NsheadPbServiceAdaptor*
      adaptor2,\n    Controller* cntl2,\n    NsheadMessage* ns_res2,\n    NsheadClosure*
      done2)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: received_us
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:72,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:73,1
    - Dst: SerializeResponseToIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:74,1
    - Dst: get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:74,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:77,1
    - Dst: brpc::SendNsheadPbResponse::~SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:80,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:89,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:90,1
    - Dst: NsheadClosure*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 93
    functionName: brpc::SendNsheadPbResponse::Run
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - received_us
    - MethodStatus*::OnResponded
    - get
    - SerializeResponseToIOBuf
    - IsCloseConnection
    - NsheadClosure*::Run
    - Failed
    - brpc::SendNsheadPbResponse::~SendNsheadPbResponse
    linkageType: ''
    returnType: void
    signature: void SendNsheadPbResponse::Run()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NsheadClosure*::additional_space
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:99,1
    - Dst: SendNsheadPbResponse::SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:99,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:103,1
    - Dst: ParseNsheadMeta
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:106,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:107,1
    - Dst: NsheadMeta*::has_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:110,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:111,1
    - Dst: NsheadMeta*::log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:111,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:115,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:116,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:118,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:118,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:119,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:120,1
    - Dst: Server::MethodProperty*::status::OnRequested
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:124,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:128,1
    - Dst: NsheadClosure*::SetMethodName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:129,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:129,1
    - Dst: SendNsheadPbResponse*::pbreq::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:130,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:130,1
    - Dst: SendNsheadPbResponse*::pbres::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: ParseRequestFromIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:134,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:139,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:139,1
    - Dst: SendNsheadPbResponse*::pbres::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:140,1
    - Dst: SendNsheadPbResponse*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:143,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 5
    argNames:
    - ' server'
    - controller
    - ' request'
    - response
    - done
    argTypes:
    - Server
    - Controller*
    - NsheadMessage
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 95
    functionDepth: 2
    functionLinenumber: 95
    functionLinenumberEnd: 144
    functionName: brpc::NsheadPbServiceAdaptor::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - ParseNsheadMeta
    - SendNsheadPbResponse*::Run
    - SendNsheadPbResponse*::pbreq::get
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - google::protobuf::Service*::GetRequestPrototype
    - NsheadClosure*::SetMethodName
    - SendNsheadPbResponse*::pbres::get
    - SendNsheadPbResponse*::pbres::reset
    - NsheadMeta*::log_id
    - google::protobuf::Service*::CallMethod
    - NsheadMeta*::has_log_id
    - Server::MethodProperty*::status::OnRequested
    - SendNsheadPbResponse::SendNsheadPbResponse
    - NsheadMeta*::full_method_name
    - Controller*::set_log_id
    - Controller*::Failed
    - ParseRequestFromIOBuf
    - ControllerPrivateAccessor
    - Server::MethodProperty*::service::GetDescriptor
    - NsheadClosure*::additional_space
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::Service*::GetResponsePrototype
    - SendNsheadPbResponse*::pbreq::reset
    linkageType: ''
    returnType: void
    signature: "void NsheadPbServiceAdaptor::ProcessNsheadRequest(\n    const Server&
      server, Controller* controller,\n    const NsheadMessage& request, NsheadMessage*
      response,\n    NsheadClosure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~SendNsheadPbResponse()
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SendNsheadPbResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - adaptor2
    - cntl2
    - ns_res2
    - done2
    argTypes:
    - NsheadPbServiceAdaptor*
    - Controller*
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 68
    functionName: brpc::SendNsheadPbResponse::SendNsheadPbResponse
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SendNsheadPbResponse::SendNsheadPbResponse(\n    const NsheadPbServiceAdaptor*
      adaptor2,\n    Controller* cntl2,\n    NsheadMessage* ns_res2,\n    NsheadClosure*
      done2)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: received_us
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:72,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:73,1
    - Dst: SerializeResponseToIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:74,1
    - Dst: get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:74,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:77,1
    - Dst: brpc::SendNsheadPbResponse::~SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:80,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:89,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:90,1
    - Dst: NsheadClosure*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 93
    functionName: brpc::SendNsheadPbResponse::Run
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - received_us
    - MethodStatus*::OnResponded
    - get
    - SerializeResponseToIOBuf
    - IsCloseConnection
    - NsheadClosure*::Run
    - Failed
    - brpc::SendNsheadPbResponse::~SendNsheadPbResponse
    linkageType: ''
    returnType: void
    signature: void SendNsheadPbResponse::Run()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NsheadClosure*::additional_space
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:99,1
    - Dst: SendNsheadPbResponse::SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:99,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:103,1
    - Dst: ParseNsheadMeta
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:106,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:107,1
    - Dst: NsheadMeta*::has_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:110,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:111,1
    - Dst: NsheadMeta*::log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:111,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:115,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:116,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:118,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:118,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:119,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:120,1
    - Dst: Server::MethodProperty*::status::OnRequested
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:124,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:128,1
    - Dst: NsheadClosure*::SetMethodName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:129,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:129,1
    - Dst: SendNsheadPbResponse*::pbreq::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:130,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:130,1
    - Dst: SendNsheadPbResponse*::pbres::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: ParseRequestFromIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:134,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:139,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:139,1
    - Dst: SendNsheadPbResponse*::pbres::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:140,1
    - Dst: SendNsheadPbResponse*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:143,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 5
    argNames:
    - ' server'
    - controller
    - ' request'
    - response
    - done
    argTypes:
    - Server
    - Controller*
    - NsheadMessage
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 95
    functionDepth: 2
    functionLinenumber: 95
    functionLinenumberEnd: 144
    functionName: brpc::NsheadPbServiceAdaptor::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - ParseNsheadMeta
    - SendNsheadPbResponse*::Run
    - SendNsheadPbResponse*::pbreq::get
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - google::protobuf::Service*::GetRequestPrototype
    - NsheadClosure*::SetMethodName
    - SendNsheadPbResponse*::pbres::get
    - SendNsheadPbResponse*::pbres::reset
    - NsheadMeta*::log_id
    - google::protobuf::Service*::CallMethod
    - NsheadMeta*::has_log_id
    - Server::MethodProperty*::status::OnRequested
    - SendNsheadPbResponse::SendNsheadPbResponse
    - NsheadMeta*::full_method_name
    - Controller*::set_log_id
    - Controller*::Failed
    - ParseRequestFromIOBuf
    - ControllerPrivateAccessor
    - Server::MethodProperty*::service::GetDescriptor
    - NsheadClosure*::additional_space
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::Service*::GetResponsePrototype
    - SendNsheadPbResponse*::pbreq::reset
    linkageType: ''
    returnType: void
    signature: "void NsheadPbServiceAdaptor::ProcessNsheadRequest(\n    const Server&
      server, Controller* controller,\n    const NsheadMessage& request, NsheadMessage*
      response,\n    NsheadClosure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' movable_httpsock'
    - before_http_1_1
    argTypes:
    - SocketUniquePtr
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::ProgressiveAttachment::ProgressiveAttachment
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: "void ProgressiveAttachment::ProgressiveAttachment(SocketUniquePtr&
      movable_httpsock,\n                                             bool before_http_1_1)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:46,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:46,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:47,1
    - Dst: empty
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:47,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:50,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:51,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:52,1
    - Dst: Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:55,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:63,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:67,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 69
    functionName: ProgressiveAttachment::~ProgressiveAttachment()
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - load
    - Write
    - CHECK
    - empty
    - ReleaseAdditionalReference
    - bthread_id_error
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void ProgressiveAttachment::~ProgressiveAttachment()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::ToHex
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char ToHex(uint32_t size/*0-15*/)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ToHex
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - butil::IOBuf*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 94
    functionName: brpc::AppendChunkHead
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::ToHex
    linkageType: ''
    returnType: void
    signature: void AppendChunkHead(butil::IOBuf* buf, uint32_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendChunkHead
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:99,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:99,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:100,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:101,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - chunk_buf
    - ' data'
    - before_http_1_1
    argTypes:
    - butil::IOBuf*
    - butil::IOBuf
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 105
    functionName: brpc::AppendAsChunk
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::AppendChunkHead
    - brpc::size
    linkageType: ''
    returnType: void
    signature: "void AppendAsChunk(butil::IOBuf* chunk_buf, const butil::IOBuf& data,\n
      \                         bool before_http_1_1)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendChunkHead
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:110,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:111,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:112,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - chunk_buf
    - data
    - length
    - before_http_1_1
    argTypes:
    - butil::IOBuf*
    - void*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 116
    functionName: brpc::AppendAsChunk
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::AppendChunkHead
    linkageType: ''
    returnType: void
    signature: "void AppendAsChunk(butil::IOBuf* chunk_buf, const void* data,\n                          size_t
      length, bool before_http_1_1)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:119,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:120,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:126,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:131,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:136,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:143,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:144,1
    - Dst: brpc::ProgressiveAttachment::Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:145,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - ' data'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 150
    functionName: brpc::ProgressiveAttachment::Write
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 1
    functionsReached:
    - AppendAsChunk
    - brpc::ProgressiveAttachment::Write
    - load
    - empty
    - size
    - butil::IOBuf::IOBuf
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int ProgressiveAttachment::Write(const butil::IOBuf& data)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:154,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:159,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:162,1
    - Dst: size
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:164,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:169,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:176,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:177,1
    - Dst: brpc::ProgressiveAttachment::Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:178,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 183
    functionName: brpc::ProgressiveAttachment::Write
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 2
    functionsReached:
    - AppendAsChunk
    - brpc::ProgressiveAttachment::Write
    - load
    - size
    - butil::IOBuf::IOBuf
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int ProgressiveAttachment::Write(const void* data, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:204,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:205,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:206,1
    - Dst: store
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:208,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:210,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:216,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:217,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:218,1
    - Dst: brpc::ProgressiveAttachment::Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:221,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - rpc_failed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 225
    functionName: brpc::ProgressiveAttachment::MarkRPCAsDone
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - brpc::ProgressiveAttachment::Write
    - store
    - empty
    - butil::IOBuf::swap
    - std::unique_lock::unlock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void ProgressiveAttachment::MarkRPCAsDone(bool rpc_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ProgressiveAttachment::remote_side
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:228,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: brpc::ProgressiveAttachment::remote_side
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 1
    functionsReached:
    - brpc::ProgressiveAttachment::remote_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint ProgressiveAttachment::remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ProgressiveAttachment::local_side
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:232,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 233
    functionName: brpc::ProgressiveAttachment::local_side
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 1
    functionsReached:
    - brpc::ProgressiveAttachment::local_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint ProgressiveAttachment::local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:236,1
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 235
    functionDepth: 5
    functionLinenumber: 235
    functionLinenumberEnd: 239
    functionName: brpc::RunOnFailed
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<google::protobuf::Closure*>
    linkageType: ''
    returnType: int
    signature: int RunOnFailed(bthread_id_t id, void* data, int)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:247,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:248,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:251,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:255,1
    - Dst: berror
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:255,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:256,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:258,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 241
    functionDepth: 3
    functionLinenumber: 241
    functionLinenumberEnd: 259
    functionName: brpc::ProgressiveAttachment::NotifyOnStopped
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - bthread_id_create
    - NotifyOnFailed
    - berror
    - LOG
    linkageType: ''
    returnType: void
    signature: void ProgressiveAttachment::NotifyOnStopped(google::protobuf::Closure*
      done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' movable_httpsock'
    - before_http_1_1
    argTypes:
    - SocketUniquePtr
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::ProgressiveAttachment::ProgressiveAttachment
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: "void ProgressiveAttachment::ProgressiveAttachment(SocketUniquePtr&
      movable_httpsock,\n                                             bool before_http_1_1)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:46,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:46,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:47,1
    - Dst: empty
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:47,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:50,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:51,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:52,1
    - Dst: Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:55,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:63,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:67,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 69
    functionName: ProgressiveAttachment::~ProgressiveAttachment()
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - load
    - Write
    - CHECK
    - empty
    - ReleaseAdditionalReference
    - bthread_id_error
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void ProgressiveAttachment::~ProgressiveAttachment()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::ToHex
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char ToHex(uint32_t size/*0-15*/)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ToHex
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - butil::IOBuf*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 94
    functionName: brpc::AppendChunkHead
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::append
    - brpc::ToHex
    linkageType: ''
    returnType: void
    signature: void AppendChunkHead(butil::IOBuf* buf, uint32_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendChunkHead
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:99,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:99,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:100,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:101,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - chunk_buf
    - ' data'
    - before_http_1_1
    argTypes:
    - butil::IOBuf*
    - butil::IOBuf
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 105
    functionName: brpc::AppendAsChunk
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::AppendChunkHead
    - brpc::size
    linkageType: ''
    returnType: void
    signature: "void AppendAsChunk(butil::IOBuf* chunk_buf, const butil::IOBuf& data,\n
      \                         bool before_http_1_1)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AppendChunkHead
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:110,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:111,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:112,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - chunk_buf
    - data
    - length
    - before_http_1_1
    argTypes:
    - butil::IOBuf*
    - void*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 116
    functionName: brpc::AppendAsChunk
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::AppendChunkHead
    linkageType: ''
    returnType: void
    signature: "void AppendAsChunk(butil::IOBuf* chunk_buf, const void* data,\n                          size_t
      length, bool before_http_1_1)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:119,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:120,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:126,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:131,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:136,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:143,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:144,1
    - Dst: brpc::ProgressiveAttachment::Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:145,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - ' data'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 150
    functionName: brpc::ProgressiveAttachment::Write
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 4
    functionsReached:
    - AppendAsChunk
    - brpc::ProgressiveAttachment::Write
    - load
    - empty
    - size
    - butil::IOBuf::IOBuf
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int ProgressiveAttachment::Write(const butil::IOBuf& data)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:154,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:159,1
    - Dst: load
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:162,1
    - Dst: size
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:164,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:169,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:176,1
    - Dst: AppendAsChunk
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:177,1
    - Dst: brpc::ProgressiveAttachment::Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:178,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 183
    functionName: brpc::ProgressiveAttachment::Write
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 5
    functionsReached:
    - AppendAsChunk
    - brpc::ProgressiveAttachment::Write
    - load
    - size
    - butil::IOBuf::IOBuf
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int ProgressiveAttachment::Write(const void* data, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:204,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:205,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:206,1
    - Dst: store
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:208,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:210,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:216,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:217,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:218,1
    - Dst: brpc::ProgressiveAttachment::Write
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:221,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - rpc_failed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 225
    functionName: brpc::ProgressiveAttachment::MarkRPCAsDone
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - brpc::ProgressiveAttachment::Write
    - store
    - empty
    - butil::IOBuf::swap
    - std::unique_lock::unlock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void ProgressiveAttachment::MarkRPCAsDone(bool rpc_failed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ProgressiveAttachment::remote_side
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:228,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: brpc::ProgressiveAttachment::remote_side
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 2
    functionsReached:
    - brpc::ProgressiveAttachment::remote_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint ProgressiveAttachment::remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ProgressiveAttachment::local_side
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:232,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 233
    functionName: brpc::ProgressiveAttachment::local_side
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 2
    functionsReached:
    - brpc::ProgressiveAttachment::local_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint ProgressiveAttachment::local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:236,1
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 235
    functionDepth: 5
    functionLinenumber: 235
    functionLinenumberEnd: 239
    functionName: brpc::RunOnFailed
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<google::protobuf::Closure*>
    linkageType: ''
    returnType: int
    signature: int RunOnFailed(bthread_id_t id, void* data, int)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:247,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:248,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:251,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:255,1
    - Dst: berror
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:255,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:256,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/progressive_attachment.cpp:258,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 241
    functionDepth: 3
    functionLinenumber: 241
    functionLinenumberEnd: 259
    functionName: brpc::ProgressiveAttachment::NotifyOnStopped
    functionSourceFile: /src/brpc/src/brpc/progressive_attachment.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - bthread_id_create
    - NotifyOnFailed
    - berror
    - LOG
    linkageType: ''
    returnType: void
    signature: void ProgressiveAttachment::NotifyOnStopped(google::protobuf::Closure*
      done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket_map.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: brpc::GlobalSocketCreator::CreateSocket
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - get_client_side_messenger
    linkageType: ''
    returnType: int
    signature: int CreateSocket(const SocketOptions& opt, SocketId* id) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SocketMap::SocketMap
      Src: /src/brpc/src/brpc/socket_map.cpp:69,1
    - Dst: GlobalSocketCreator::GlobalSocketCreator
      Src: /src/brpc/src/brpc/socket_map.cpp:71,1
    - Dst: SocketMap*::Init
      Src: /src/brpc/src/brpc/socket_map.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:75,1
    - Dst: exit
      Src: /src/brpc/src/brpc/socket_map.cpp:76,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket_map.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: brpc::CreateClientSideSocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - GlobalSocketCreator::GlobalSocketCreator
    - exit
    - store
    - SocketMap*::Init
    - SocketMap::SocketMap
    - LOG
    linkageType: ''
    returnType: void
    signature: void CreateClientSideSocketMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 85
    functionName: brpc::get_client_side_socket_map
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: SocketMap
    signature: SocketMap * get_client_side_socket_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/src/brpc/socket_map.cpp:87,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/socket_map.cpp:88,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: brpc::get_or_new_client_side_socket_map
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - load
    - brpc::get_or_new_client_side_messenger
    linkageType: ''
    returnType: SocketMap
    signature: SocketMap * get_or_new_client_side_socket_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_or_new_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - use_rdma
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - bool
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 97
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 12
    functionsReached:
    - brpc::get_or_new_client_side_socket_map
    linkageType: ''
    returnType: int
    signature: "int SocketMapInsert(const SocketMapKey& key, SocketId* id,\n                    const
      std::shared_ptr<SocketSSLContext>& ssl_ctx,\n                    bool use_rdma,\n
      \                   const HealthCheckOption& hc_option)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:100,1
    - Dst: SocketMap*::Find
      Src: /src/brpc/src/brpc/socket_map.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: brpc::SocketMapFind
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 8
    functionsReached:
    - SocketMap*::Find
    - brpc::get_client_side_socket_map
    linkageType: ''
    returnType: int
    signature: int SocketMapFind(const SocketMapKey& key, SocketId* id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:108,1
    - Dst: SocketMap*::Remove
      Src: /src/brpc/src/brpc/socket_map.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 116
    functionName: brpc::SocketMapRemove
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 6
    functionsReached:
    - brpc::get_client_side_socket_map
    - SocketMap*::Remove
    linkageType: ''
    returnType: void
    signature: void SocketMapRemove(const SocketMapKey& key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:119,1
    - Dst: SocketMap*::List
      Src: /src/brpc/src/brpc/socket_map.cpp:121,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 125
    functionName: brpc::SocketMapList
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - std::vector<SocketId>*::clear
    - SocketMap*::List
    - brpc::get_client_side_socket_map
    linkageType: ''
    returnType: void
    signature: void SocketMapList(std::vector<SocketId>* ids)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 136
    functionName: brpc::SocketMapOptions::SocketMapOptions
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapOptions::SocketMapOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 142
    functionName: brpc::SocketMap::SocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMap::SocketMap()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/socket_map.cpp:147,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/socket_map.cpp:148,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket_map.cpp:150,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:153,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:153,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:155,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:166,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/socket_map.cpp:166,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 144
    functionDepth: 3
    functionLinenumber: 144
    functionLinenumberEnd: 175
    functionName: SocketMap::~SocketMap()
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::ostringstream::str
    - bthread_join
    - SingleConnection*::socket::Failed
    - empty
    - begin
    - SingleConnection*::socket::HCEnabled
    - LOG
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void SocketMap::~SocketMap()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:184,1
    - Dst: init
      Src: /src/brpc/src/brpc/socket_map.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:188,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket_map.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:195,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - SocketMapOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 177
    functionDepth: 4
    functionLinenumber: 177
    functionLinenumberEnd: 201
    functionName: brpc::SocketMap::Init
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - init
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: int
    signature: int SocketMap::Init(const SocketMapOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/socket_map.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 211
    functionName: brpc::SocketMap::Print
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void SocketMap::Print(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SocketMap*>
      Src: /src/brpc/src/brpc/socket_map.cpp:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 215
    functionName: brpc::SocketMap::PrintSocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SocketMap*>
    linkageType: ''
    returnType: void
    signature: void SocketMap::PrintSocketMap(std::ostream& os, void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_map.cpp:219,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/socket_map.cpp:221,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/socket_map.cpp:223,1
    - Dst: bvar::PassiveStatus<std::string>::string>
      Src: /src/brpc/src/brpc/socket_map.cpp:222,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 225
    functionName: brpc::SocketMap::ShowSocketMapInBvarIfNeed
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - bvar::PassiveStatus<std::string>::string>
    - butil::BasicStringPiece::BasicStringPiece
    - exchange
    - snprintf
    linkageType: ''
    returnType: void
    signature: void SocketMap::ShowSocketMapInBvarIfNeed()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:231,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:234,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:236,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:236,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:238,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:242,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:243,1
    - Dst: socket_creator::CreateSocket
      Src: /src/brpc/src/brpc/socket_map.cpp:255,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket_map.cpp:256,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket_map.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:265,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:268,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:274,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket_map.cpp:274,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket_map.cpp:274,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:277,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - use_rdma
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - bool
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 279
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 4
    functionsReached:
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - brpc::SocketMap::ReleaseReference
    - SocketUniquePtr::get
    - SocketUniquePtr::release
    - socket_creator::CreateSocket
    - SingleConnection*::socket::Failed
    - erase
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - std::unique_lock::unlock
    - SingleConnection*::socket::HCEnabled
    - seek
    - PLOG
    - LOG
    - SocketUniquePtr::HCEnabled
    - SingleConnection*::socket::id
    linkageType: ''
    returnType: int
    signature: "int SocketMap::Insert(const SocketMapKey& key, SocketId* id,\n                      const
      std::shared_ptr<SocketSSLContext>& ssl_ctx,\n                      bool use_rdma,\n
      \                     const HealthCheckOption& hc_option)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - expected_id
    argTypes:
    - SocketMapKey
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 283
    functionName: brpc::SocketMap::Remove
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketMap::RemoveInternal
    linkageType: ''
    returnType: void
    signature: void SocketMap::Remove(const SocketMapKey& key, SocketId expected_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:288,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:291,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:296,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:306,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:309,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:310,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket_map.cpp:311,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:312,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 3
    argNames:
    - ' key'
    - expected_id
    - remove_orphan
    argTypes:
    - SocketMapKey
    - SocketId
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 285
    functionDepth: 2
    functionLinenumber: 285
    functionLinenumberEnd: 315
    functionName: brpc::SocketMap::RemoveInternal
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - butil::cpuwide_time_us
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - brpc::SocketMap::ReleaseReference
    - erase
    - seek
    - Socket*::ReleaseAdditionalReference
    - std::unique_lock::unlock
    - SingleConnection*::socket::id
    linkageType: ''
    returnType: void
    signature: "void SocketMap::RemoveInternal(const SocketMapKey& key,\n                               SocketId
      expected_id,\n                               bool remove_orphan)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:318,1
    - Dst: Socket*::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/socket_map.cpp:319,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 324
    functionName: brpc::SocketMap::ReleaseReference
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 2
    functionsReached:
    - Socket*::ReleaseHCRelatedReference
    - Socket*::HCEnabled
    linkageType: ''
    returnType: void
    signature: void SocketMap::ReleaseReference(Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:327,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:328,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:330,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 334
    functionName: brpc::SocketMap::Find
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - SingleConnection*::socket::id
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int SocketMap::Find(const SocketMapKey& key, SocketId* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:337,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:338,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:339,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:339,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:340,1
    - Dst: Map::iterator::second::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 342
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - end
    - Map::iterator::second::socket::id
    - std::vector<SocketId>*::push_back
    - BAIDU_SCOPED_LOCK
    - begin
    - std::vector<SocketId>*::clear
    linkageType: ''
    returnType: void
    signature: void SocketMap::List(std::vector<SocketId>* ids)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::EndPoint>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:345,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:346,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:347,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:347,1
    - Dst: std::vector<butil::EndPoint>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:348,1
    - Dst: Map::iterator::second::socket::remote_side
      Src: /src/brpc/src/brpc/socket_map.cpp:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pts
    argTypes:
    - std::vector<butil::EndPoint>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 350
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - std::vector<butil::EndPoint>*::clear
    - end
    - std::vector<butil::EndPoint>*::push_back
    - BAIDU_SCOPED_LOCK
    - begin
    - Map::iterator::second::socket::remote_side
    linkageType: ''
    returnType: void
    signature: void SocketMap::List(std::vector<butil::EndPoint>* pts)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketMapKey>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:353,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:354,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:355,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:356,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:356,1
    - Dst: std::vector<SocketMapKey>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:359,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - defer_us
    - out
    argTypes:
    - int64_t
    - std::vector<SocketMapKey>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 362
    functionName: brpc::SocketMap::ListOrphans
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::cpuwide_time_us
    - std::vector<SocketMapKey>*::clear
    - BAIDU_SCOPED_LOCK
    - std::vector<SocketMapKey>*::push_back
    - begin
    linkageType: ''
    returnType: void
    signature: void SocketMap::ListOrphans(int64_t defer_us, std::vector<SocketMapKey>*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SocketMap*>
      Src: /src/brpc/src/brpc/socket_map.cpp:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 364
    functionDepth: 0
    functionLinenumber: 364
    functionLinenumberEnd: 367
    functionName: brpc::SocketMap::RunWatchConnections
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SocketMap*>
    linkageType: ''
    returnType: void
    signature: void * SocketMap::RunWatchConnections(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/socket_map.cpp:374,1
    - Dst: brpc::SocketMap::List
      Src: /src/brpc/src/brpc/socket_map.cpp:381,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:384,1
    - Dst: SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/src/brpc/socket_map.cpp:385,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:387,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:389,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/socket_map.cpp:390,1
    - Dst: brpc::SocketMap::ListOrphans
      Src: /src/brpc/src/brpc/socket_map.cpp:403,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:404,1
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:405,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 369
    functionDepth: 3
    functionLinenumber: 369
    functionLinenumberEnd: 408
    functionName: brpc::SocketMap::WatchConnections
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - SocketUniquePtr::ListPooledSockets
    - brpc::SocketMap::RemoveInternal
    - brpc::SocketMap::ListOrphans
    - brpc::SetTrackMeAddress
    - brpc::SocketMap::List
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void SocketMap::WatchConnections()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket_map.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: brpc::GlobalSocketCreator::CreateSocket
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - get_client_side_messenger
    linkageType: ''
    returnType: int
    signature: int CreateSocket(const SocketOptions& opt, SocketId* id) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SocketMap::SocketMap
      Src: /src/brpc/src/brpc/socket_map.cpp:69,1
    - Dst: GlobalSocketCreator::GlobalSocketCreator
      Src: /src/brpc/src/brpc/socket_map.cpp:71,1
    - Dst: SocketMap*::Init
      Src: /src/brpc/src/brpc/socket_map.cpp:74,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:75,1
    - Dst: exit
      Src: /src/brpc/src/brpc/socket_map.cpp:76,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket_map.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: brpc::CreateClientSideSocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - GlobalSocketCreator::GlobalSocketCreator
    - exit
    - store
    - SocketMap*::Init
    - SocketMap::SocketMap
    - LOG
    linkageType: ''
    returnType: void
    signature: void CreateClientSideSocketMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 85
    functionName: brpc::get_client_side_socket_map
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 3
    functionsReached:
    - load
    linkageType: ''
    returnType: SocketMap
    signature: SocketMap * get_client_side_socket_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/src/brpc/socket_map.cpp:87,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/socket_map.cpp:88,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: brpc::get_or_new_client_side_socket_map
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    - load
    - brpc::get_or_new_client_side_messenger
    linkageType: ''
    returnType: SocketMap
    signature: SocketMap * get_or_new_client_side_socket_map()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_or_new_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - use_rdma
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - bool
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 97
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 12
    functionsReached:
    - brpc::get_or_new_client_side_socket_map
    linkageType: ''
    returnType: int
    signature: "int SocketMapInsert(const SocketMapKey& key, SocketId* id,\n                    const
      std::shared_ptr<SocketSSLContext>& ssl_ctx,\n                    bool use_rdma,\n
      \                   const HealthCheckOption& hc_option)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:100,1
    - Dst: SocketMap*::Find
      Src: /src/brpc/src/brpc/socket_map.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: brpc::SocketMapFind
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 8
    functionsReached:
    - SocketMap*::Find
    - brpc::get_client_side_socket_map
    linkageType: ''
    returnType: int
    signature: int SocketMapFind(const SocketMapKey& key, SocketId* id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:108,1
    - Dst: SocketMap*::Remove
      Src: /src/brpc/src/brpc/socket_map.cpp:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 116
    functionName: brpc::SocketMapRemove
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 6
    functionsReached:
    - brpc::get_client_side_socket_map
    - SocketMap*::Remove
    linkageType: ''
    returnType: void
    signature: void SocketMapRemove(const SocketMapKey& key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:119,1
    - Dst: SocketMap*::List
      Src: /src/brpc/src/brpc/socket_map.cpp:121,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 125
    functionName: brpc::SocketMapList
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - std::vector<SocketId>*::clear
    - SocketMap*::List
    - brpc::get_client_side_socket_map
    linkageType: ''
    returnType: void
    signature: void SocketMapList(std::vector<SocketId>* ids)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 136
    functionName: brpc::SocketMapOptions::SocketMapOptions
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMapOptions::SocketMapOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 142
    functionName: brpc::SocketMap::SocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketMap::SocketMap()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/socket_map.cpp:147,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/socket_map.cpp:148,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket_map.cpp:150,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:153,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:153,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:155,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:166,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/socket_map.cpp:166,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 144
    functionDepth: 3
    functionLinenumber: 144
    functionLinenumberEnd: 175
    functionName: SocketMap::~SocketMap()
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::ostringstream::str
    - bthread_join
    - SingleConnection*::socket::Failed
    - empty
    - begin
    - SingleConnection*::socket::HCEnabled
    - LOG
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void SocketMap::~SocketMap()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:184,1
    - Dst: init
      Src: /src/brpc/src/brpc/socket_map.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:188,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket_map.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:195,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - SocketMapOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 177
    functionDepth: 4
    functionLinenumber: 177
    functionLinenumberEnd: 201
    functionName: brpc::SocketMap::Init
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - init
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: int
    signature: int SocketMap::Init(const SocketMapOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/socket_map.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 211
    functionName: brpc::SocketMap::Print
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void SocketMap::Print(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SocketMap*>
      Src: /src/brpc/src/brpc/socket_map.cpp:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 215
    functionName: brpc::SocketMap::PrintSocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SocketMap*>
    linkageType: ''
    returnType: void
    signature: void SocketMap::PrintSocketMap(std::ostream& os, void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket_map.cpp:219,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/socket_map.cpp:221,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/socket_map.cpp:223,1
    - Dst: bvar::PassiveStatus<std::string>::string>
      Src: /src/brpc/src/brpc/socket_map.cpp:222,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 225
    functionName: brpc::SocketMap::ShowSocketMapInBvarIfNeed
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 2
    functionsReached:
    - bvar::PassiveStatus<std::string>::string>
    - butil::BasicStringPiece::BasicStringPiece
    - exchange
    - snprintf
    linkageType: ''
    returnType: void
    signature: void SocketMap::ShowSocketMapInBvarIfNeed()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:231,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:234,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:236,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:236,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:238,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:242,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:243,1
    - Dst: socket_creator::CreateSocket
      Src: /src/brpc/src/brpc/socket_map.cpp:255,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket_map.cpp:256,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket_map.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:265,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:268,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:274,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket_map.cpp:274,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket_map.cpp:274,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:277,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - use_rdma
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - bool
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 279
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 4
    functionsReached:
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - brpc::SocketMap::ReleaseReference
    - SocketUniquePtr::get
    - SocketUniquePtr::release
    - socket_creator::CreateSocket
    - SingleConnection*::socket::Failed
    - erase
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - std::unique_lock::unlock
    - SingleConnection*::socket::HCEnabled
    - seek
    - PLOG
    - LOG
    - SocketUniquePtr::HCEnabled
    - SingleConnection*::socket::id
    linkageType: ''
    returnType: int
    signature: "int SocketMap::Insert(const SocketMapKey& key, SocketId* id,\n                      const
      std::shared_ptr<SocketSSLContext>& ssl_ctx,\n                      bool use_rdma,\n
      \                     const HealthCheckOption& hc_option)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - expected_id
    argTypes:
    - SocketMapKey
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 3
    functionLinenumber: 281
    functionLinenumberEnd: 283
    functionName: brpc::SocketMap::Remove
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketMap::RemoveInternal
    linkageType: ''
    returnType: void
    signature: void SocketMap::Remove(const SocketMapKey& key, SocketId expected_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:288,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:291,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:296,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:306,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:309,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:310,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket_map.cpp:311,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:312,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 3
    argNames:
    - ' key'
    - expected_id
    - remove_orphan
    argTypes:
    - SocketMapKey
    - SocketId
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 285
    functionDepth: 2
    functionLinenumber: 285
    functionLinenumberEnd: 315
    functionName: brpc::SocketMap::RemoveInternal
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 3
    functionsReached:
    - butil::cpuwide_time_us
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - brpc::SocketMap::ReleaseReference
    - erase
    - seek
    - Socket*::ReleaseAdditionalReference
    - std::unique_lock::unlock
    - SingleConnection*::socket::id
    linkageType: ''
    returnType: void
    signature: "void SocketMap::RemoveInternal(const SocketMapKey& key,\n                               SocketId
      expected_id,\n                               bool remove_orphan)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:318,1
    - Dst: Socket*::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/socket_map.cpp:319,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 324
    functionName: brpc::SocketMap::ReleaseReference
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 4
    functionsReached:
    - Socket*::ReleaseHCRelatedReference
    - Socket*::HCEnabled
    linkageType: ''
    returnType: void
    signature: void SocketMap::ReleaseReference(Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:327,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:328,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:330,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 334
    functionName: brpc::SocketMap::Find
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - SingleConnection*::socket::id
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int SocketMap::Find(const SocketMapKey& key, SocketId* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:337,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:338,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:339,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:339,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:340,1
    - Dst: Map::iterator::second::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 342
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - end
    - Map::iterator::second::socket::id
    - std::vector<SocketId>*::push_back
    - BAIDU_SCOPED_LOCK
    - begin
    - std::vector<SocketId>*::clear
    linkageType: ''
    returnType: void
    signature: void SocketMap::List(std::vector<SocketId>* ids)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<butil::EndPoint>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:345,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:346,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:347,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:347,1
    - Dst: std::vector<butil::EndPoint>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:348,1
    - Dst: Map::iterator::second::socket::remote_side
      Src: /src/brpc/src/brpc/socket_map.cpp:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pts
    argTypes:
    - std::vector<butil::EndPoint>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 350
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - std::vector<butil::EndPoint>*::clear
    - end
    - std::vector<butil::EndPoint>*::push_back
    - BAIDU_SCOPED_LOCK
    - begin
    - Map::iterator::second::socket::remote_side
    linkageType: ''
    returnType: void
    signature: void SocketMap::List(std::vector<butil::EndPoint>* pts)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketMapKey>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:353,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:354,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:355,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:356,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:356,1
    - Dst: std::vector<SocketMapKey>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:359,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - defer_us
    - out
    argTypes:
    - int64_t
    - std::vector<SocketMapKey>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 362
    functionName: brpc::SocketMap::ListOrphans
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - end
    - butil::cpuwide_time_us
    - std::vector<SocketMapKey>*::clear
    - BAIDU_SCOPED_LOCK
    - std::vector<SocketMapKey>*::push_back
    - begin
    linkageType: ''
    returnType: void
    signature: void SocketMap::ListOrphans(int64_t defer_us, std::vector<SocketMapKey>*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SocketMap*>
      Src: /src/brpc/src/brpc/socket_map.cpp:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 364
    functionDepth: 0
    functionLinenumber: 364
    functionLinenumberEnd: 367
    functionName: brpc::SocketMap::RunWatchConnections
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SocketMap*>
    linkageType: ''
    returnType: void
    signature: void * SocketMap::RunWatchConnections(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/socket_map.cpp:374,1
    - Dst: brpc::SocketMap::List
      Src: /src/brpc/src/brpc/socket_map.cpp:381,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:384,1
    - Dst: SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/src/brpc/socket_map.cpp:385,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:387,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:389,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/socket_map.cpp:390,1
    - Dst: brpc::SocketMap::ListOrphans
      Src: /src/brpc/src/brpc/socket_map.cpp:403,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:404,1
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:405,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 369
    functionDepth: 3
    functionLinenumber: 369
    functionLinenumberEnd: 408
    functionName: brpc::SocketMap::WatchConnections
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - SocketUniquePtr::ListPooledSockets
    - brpc::SocketMap::RemoveInternal
    - brpc::SocketMap::ListOrphans
    - brpc::SetTrackMeAddress
    - brpc::SocketMap::List
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void SocketMap::WatchConnections()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ip
    - port
    - ' tag2'
    argTypes:
    - butil::ip_t
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(butil::ip_t ip, int port, const std::string& tag2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' pt'
    - ' tag2'
    argTypes:
    - butil::EndPoint
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(const butil::EndPoint& pt, const std::string& tag2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ip
    - port
    argTypes:
    - butil::ip_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(butil::ip_t ip, int port)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' n1'
    - ' n2'
    argTypes:
    - ServerNode
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 49
    functionName: operator<(const ServerNode& n1, const ServerNode& n2)
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ServerNode& n1, const ServerNode& n2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' n1'
    - ' n2'
    argTypes:
    - ServerNode
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: operator==(const ServerNode& n1, const ServerNode& n2)
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ServerNode& n1, const ServerNode& n2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' n1'
    - ' n2'
    argTypes:
    - ServerNode
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: operator!=(const ServerNode& n1, const ServerNode& n2)
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const ServerNode& n1, const ServerNode& n2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tag::empty
      Src: /src/brpc/src/brpc/server_node.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' n'
    argTypes:
    - std::ostream
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 63
    functionName: '& operator<<(std::ostream& os, const ServerNode& n)'
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached:
    - tag::empty
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ServerNode& n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ip
    - port
    - ' tag2'
    argTypes:
    - butil::ip_t
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(butil::ip_t ip, int port, const std::string& tag2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' pt'
    - ' tag2'
    argTypes:
    - butil::EndPoint
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(const butil::EndPoint& pt, const std::string& tag2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ip
    - port
    argTypes:
    - butil::ip_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::ServerNode
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerNode(butil::ip_t ip, int port)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' n1'
    - ' n2'
    argTypes:
    - ServerNode
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 49
    functionName: operator<(const ServerNode& n1, const ServerNode& n2)
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ServerNode& n1, const ServerNode& n2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' n1'
    - ' n2'
    argTypes:
    - ServerNode
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: operator==(const ServerNode& n1, const ServerNode& n2)
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ServerNode& n1, const ServerNode& n2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' n1'
    - ' n2'
    argTypes:
    - ServerNode
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: operator!=(const ServerNode& n1, const ServerNode& n2)
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const ServerNode& n1, const ServerNode& n2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tag::empty
      Src: /src/brpc/src/brpc/server_node.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' n'
    argTypes:
    - std::ostream
    - ServerNode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 63
    functionName: '& operator<<(std::ostream& os, const ServerNode& n)'
    functionSourceFile: /src/brpc/src/brpc/server_node.h
    functionUses: 0
    functionsReached:
    - tag::empty
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ServerNode& n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 45
    functionName: Acceptor::Acceptor
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Acceptor::Acceptor(bthread_keytable_pool_t* pool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Acceptor::StopAccept
      Src: /src/brpc/src/brpc/acceptor.cpp:48,1
    - Dst: Acceptor::Join
      Src: /src/brpc/src/brpc/acceptor.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: Acceptor::~Acceptor()
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Acceptor::Join
    - Acceptor::StopAccept
    linkageType: ''
    returnType: void
    signature: void Acceptor::~Acceptor()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:61,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:66,1
    - Dst: Acceptor::Initialize
      Src: /src/brpc/src/brpc/acceptor.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:75,1
    - Dst: status
      Src: /src/brpc/src/brpc/acceptor.cpp:75,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/acceptor.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:82,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/acceptor.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:99,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 4
    argNames:
    - listened_fd
    - idle_timeout_sec
    - ' ssl_ctx'
    - force_ssl
    argTypes:
    - int
    - int
    - std::shared_ptr<SocketSSLContext>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 52
    functionDepth: 4
    functionLinenumber: 52
    functionLinenumberEnd: 106
    functionName: Acceptor::StartAccept
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - bthread_start_background
    - BAIDU_SCOPED_LOCK
    - status
    - LOG
    - Acceptor::Initialize
    linkageType: ''
    returnType: int
    signature: "int Acceptor::StartAccept(int listened_fd, int idle_timeout_sec,\n
      \                         const std::shared_ptr<SocketSSLContext>& ssl_ctx,\n
      \                         bool force_ssl)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Acceptor*>
      Src: /src/brpc/src/brpc/acceptor.cpp:109,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/acceptor.cpp:112,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:114,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/acceptor.cpp:115,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/acceptor.cpp:117,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/acceptor.cpp:118,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 108
    functionDepth: 2
    functionLinenumber: 108
    functionLinenumberEnd: 123
    functionName: Acceptor::CloseIdleConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Acceptor*::ListConnections
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - static_cast<Acceptor*>
    - brpc::SetTrackMeAddress
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * Acceptor::CloseIdleConnections(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:131,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:139,1
    - Dst: Acceptor::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:144,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/acceptor.cpp:146,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/acceptor.cpp:148,1
    - Dst: SocketUniquePtr::shall_fail_me_at_server_stop
      Src: /src/brpc/src/brpc/acceptor.cpp:149,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:155,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/acceptor.cpp:160,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 164
    functionName: Acceptor::StopAccept
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::ReleaseAdditionalReference
    - Acceptor::ListConnections
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::shall_fail_me_at_server_stop
    - Socket::SetFailed
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void Acceptor::StopAccept(int /*closewait_ms*/)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/acceptor.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 172
    functionName: Acceptor::Initialize
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    functionsReached:
    - init
    - LOG
    linkageType: ''
    returnType: int
    signature: int Acceptor::Initialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/acceptor.cpp:181,1
    - Dst: Wait
      Src: /src/brpc/src/brpc/acceptor.cpp:182,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/acceptor.cpp:187,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/acceptor.cpp:191,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/acceptor.cpp:192,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:196,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 175
    functionDepth: 3
    functionLinenumber: 175
    functionLinenumberEnd: 199
    functionName: Acceptor::Join
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    functionsReached:
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - empty
    - Wait
    - std::unique_lock::unlock
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void Acceptor::Join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/acceptor.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 205
    functionName: Acceptor::ConnectionCount
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t Acceptor::ConnectionCount() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:210,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/acceptor.cpp:213,1
    - Dst: std::vector<SocketId>*::reserve
      Src: /src/brpc/src/brpc/acceptor.cpp:216,1
    - Dst: Acceptor::ConnectionCount
      Src: /src/brpc/src/brpc/acceptor.cpp:216,1
    - Dst: begin
      Src: /src/brpc/src/brpc/acceptor.cpp:223,1
    - Dst: end
      Src: /src/brpc/src/brpc/acceptor.cpp:224,1
    - Dst: save_iterator
      Src: /src/brpc/src/brpc/acceptor.cpp:230,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/acceptor.cpp:232,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/acceptor.cpp:233,1
    - Dst: restore_iterator
      Src: /src/brpc/src/brpc/acceptor.cpp:234,1
    - Dst: begin
      Src: /src/brpc/src/brpc/acceptor.cpp:235,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/acceptor.cpp:236,1
    - Dst: end
      Src: /src/brpc/src/brpc/acceptor.cpp:238,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/acceptor.cpp:242,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - conn_list
    - max_copied
    argTypes:
    - std::vector<SocketId>*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 244
    functionName: Acceptor::ListConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    functionsReached:
    - Acceptor::ConnectionCount
    - end
    - std::vector<SocketId>*::reserve
    - std::vector<SocketId>*::push_back
    - std::unique_lock::lock
    - save_iterator
    - begin
    - std::unique_lock::unlock
    - std::vector<SocketId>*::clear
    - LOG
    - restore_iterator
    linkageType: ''
    returnType: void
    signature: "void Acceptor::ListConnections(std::vector<SocketId>* conn_list,\n
      \                              size_t max_copied)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Acceptor::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:247,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/acceptor.cpp:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - conn_list
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: Acceptor::ListConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 2
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - Acceptor::ListConnections
    linkageType: ''
    returnType: void
    signature: void Acceptor::ListConnections(std::vector<SocketId>* conn_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OnNewConnectionsUntilEAGAIN
      Src: /src/brpc/src/brpc/acceptor.cpp:339,1
    - Dst: Socket*::Failed
      Src: /src/brpc/src/brpc/acceptor.cpp:340,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/acceptor.cpp:343,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - acception
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 344
    functionName: Acceptor::OnNewConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - OnNewConnectionsUntilEAGAIN
    - Socket*::Failed
    - Socket*::MoreReadEvents
    linkageType: ''
    returnType: void
    signature: void Acceptor::OnNewConnections(Socket* acception)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:347,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/acceptor.cpp:348,1
    - Dst: Broadcast
      Src: /src/brpc/src/brpc/acceptor.cpp:353,1
    - Dst: erase
      Src: /src/brpc/src/brpc/acceptor.cpp:358,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/acceptor.cpp:358,1
    - Dst: empty
      Src: /src/brpc/src/brpc/acceptor.cpp:359,1
    - Dst: Broadcast
      Src: /src/brpc/src/brpc/acceptor.cpp:360,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sock
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 362
    functionName: Acceptor::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - Broadcast
    - erase
    - empty
    - Socket*::id
    linkageType: ''
    returnType: void
    signature: void Acceptor::BeforeRecycle(Socket* sock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' bug'
    argTypes:
    - BugInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: operator==(const BugInfo& bug) const
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const BugInfo& bug) const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getuid
      Src: /src/brpc/src/brpc/trackme.cpp:82,1
    - Dst: getpwuid
      Src: /src/brpc/src/brpc/trackme.cpp:83,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/trackme.cpp:89,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/trackme.cpp:94,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/trackme.cpp:102,1
    - Dst: getline
      Src: /src/brpc/src/brpc/trackme.cpp:103,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/trackme.cpp:103,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/trackme.cpp:107,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/trackme.cpp:108,1
    - Dst: free
      Src: /src/brpc/src/brpc/trackme.cpp:112,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/trackme.cpp:113,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - container_port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 115
    functionName: brpc::ReadJPaasHostPort
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - fopen
    - free
    - strtol
    - getpwuid
    - snprintf
    - getline
    - getuid
    - RPC_VLOG_IF
    - butil::ScopedFILE::get
    linkageType: ''
    returnType: int
    signature: int ReadJPaasHostPort(int container_port)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/trackme.cpp:119,1
    - Dst: brpc::ReadJPaasHostPort
      Src: /src/brpc/src/brpc/trackme.cpp:123,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/trackme.cpp:129,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/trackme.cpp:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - pt
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 118
    functionDepth: 2
    functionLinenumber: 118
    functionLinenumberEnd: 131
    functionName: brpc::SetTrackMeAddress
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 120
    functionsReached:
    - butil::endpoint2str
    - brpc::ReadJPaasHostPort
    - std::string::string
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void SetTrackMeAddress(butil::EndPoint pt)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/trackme.cpp:134,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/trackme.cpp:135,1
    - Dst: TrackMeResponse*::severity
      Src: /src/brpc/src/brpc/trackme.cpp:138,1
    - Dst: TrackMeResponse*::error_text
      Src: /src/brpc/src/brpc/trackme.cpp:139,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/trackme.cpp:142,1
    - Dst: BugInfo::BugInfo
      Src: /src/brpc/src/brpc/trackme.cpp:149,1
    - Dst: TrackMeResponse*::severity
      Src: /src/brpc/src/brpc/trackme.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:160,1
    - Dst: TrackMeResponse*::error_text
      Src: /src/brpc/src/brpc/trackme.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:164,1
    - Dst: TrackMeResponse*::error_text
      Src: /src/brpc/src/brpc/trackme.cpp:165,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:168,1
    - Dst: TrackMeResponse*::severity
      Src: /src/brpc/src/brpc/trackme.cpp:168,1
    - Dst: TrackMeResponse*::has_new_interval
      Src: /src/brpc/src/brpc/trackme.cpp:172,1
    - Dst: TrackMeResponse*::new_interval
      Src: /src/brpc/src/brpc/trackme.cpp:176,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/trackme.cpp:177,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/trackme.cpp:178,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 43
    argCount: 2
    argNames:
    - cntl
    - res
    argTypes:
    - Controller*
    - TrackMeResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 187
    functionName: brpc::HandleTrackMeResponse
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - BugInfo::BugInfo
    - Controller*::Failed
    - std::min
    - TrackMeResponse*::new_interval
    - BAIDU_SCOPED_LOCK
    - TrackMeResponse*::has_new_interval
    - Controller*::ErrorText
    - TrackMeResponse*::severity
    - LOG
    - TrackMeResponse*::error_text
    linkageType: ''
    returnType: void
    signature: void HandleTrackMeResponse(Controller* cntl, TrackMeResponse* res)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/trackme.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:196,1
    - Dst: Channel*::Init
      Src: /src/brpc/src/brpc/trackme.cpp:202,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/trackme.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:203,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/trackme.cpp:209,1
    - Dst: TrackMeRequest::set_rpc_version
      Src: /src/brpc/src/brpc/trackme.cpp:212,1
    - Dst: TrackMeRequest::set_server_addr
      Src: /src/brpc/src/brpc/trackme.cpp:213,1
    - Dst: TrackMeResponse::TrackMeResponse
      Src: /src/brpc/src/brpc/trackme.cpp:214,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/trackme.cpp:215,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: brpc::policy::MurmurHash32
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: data
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/src/brpc/trackme.cpp:218,1
    - Dst: TrackMeService_Stub::TrackMe
      Src: /src/brpc/src/brpc/trackme.cpp:219,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - ' mu'
    argTypes:
    - std::unique_lock<pthread_mutex_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 189
    functionDepth: 2
    functionLinenumber: 189
    functionLinenumberEnd: 220
    functionName: brpc::TrackMeNow
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached:
    - Channel*::Init
    - Controller::Controller
    - unlock
    - brpc::policy::MurmurHash32
    - Channel::Channel
    - TrackMeRequest::set_rpc_version
    - brpc::NewCallback
    - c_str
    - Controller*::set_request_code
    - data
    - brpc::size
    - TrackMeResponse::TrackMeResponse
    - TrackMeRequest::set_server_addr
    - LOG
    - TrackMeService_Stub::TrackMe
    linkageType: ''
    returnType: void
    signature: void TrackMeNow(std::unique_lock<pthread_mutex_t>& mu)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/trackme.cpp:225,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/trackme.cpp:228,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/trackme.cpp:234,1
    - Dst: brpc::TrackMeNow
      Src: /src/brpc/src/brpc/trackme.cpp:238,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 224
    functionDepth: 3
    functionLinenumber: 224
    functionLinenumberEnd: 240
    functionName: brpc::TrackMe
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached:
    - brpc::empty
    - butil::gettimeofday_us
    - brpc::TrackMeNow
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: void
    signature: void TrackMe()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' bug'
    argTypes:
    - BugInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: operator==(const BugInfo& bug) const
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const BugInfo& bug) const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getuid
      Src: /src/brpc/src/brpc/trackme.cpp:82,1
    - Dst: getpwuid
      Src: /src/brpc/src/brpc/trackme.cpp:83,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/trackme.cpp:89,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/trackme.cpp:94,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/trackme.cpp:102,1
    - Dst: getline
      Src: /src/brpc/src/brpc/trackme.cpp:103,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/trackme.cpp:103,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/trackme.cpp:107,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/trackme.cpp:108,1
    - Dst: free
      Src: /src/brpc/src/brpc/trackme.cpp:112,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/trackme.cpp:113,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - container_port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 115
    functionName: brpc::ReadJPaasHostPort
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 1
    functionsReached:
    - memcmp
    - fopen
    - free
    - strtol
    - getpwuid
    - snprintf
    - getline
    - getuid
    - RPC_VLOG_IF
    - butil::ScopedFILE::get
    linkageType: ''
    returnType: int
    signature: int ReadJPaasHostPort(int container_port)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/trackme.cpp:119,1
    - Dst: brpc::ReadJPaasHostPort
      Src: /src/brpc/src/brpc/trackme.cpp:123,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/trackme.cpp:129,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/trackme.cpp:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - pt
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 118
    functionDepth: 2
    functionLinenumber: 118
    functionLinenumberEnd: 131
    functionName: brpc::SetTrackMeAddress
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 120
    functionsReached:
    - butil::endpoint2str
    - brpc::ReadJPaasHostPort
    - std::string::string
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void SetTrackMeAddress(butil::EndPoint pt)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/trackme.cpp:134,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/trackme.cpp:135,1
    - Dst: TrackMeResponse*::severity
      Src: /src/brpc/src/brpc/trackme.cpp:138,1
    - Dst: TrackMeResponse*::error_text
      Src: /src/brpc/src/brpc/trackme.cpp:139,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/trackme.cpp:142,1
    - Dst: BugInfo::BugInfo
      Src: /src/brpc/src/brpc/trackme.cpp:149,1
    - Dst: TrackMeResponse*::severity
      Src: /src/brpc/src/brpc/trackme.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:160,1
    - Dst: TrackMeResponse*::error_text
      Src: /src/brpc/src/brpc/trackme.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:164,1
    - Dst: TrackMeResponse*::error_text
      Src: /src/brpc/src/brpc/trackme.cpp:165,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:168,1
    - Dst: TrackMeResponse*::severity
      Src: /src/brpc/src/brpc/trackme.cpp:168,1
    - Dst: TrackMeResponse*::has_new_interval
      Src: /src/brpc/src/brpc/trackme.cpp:172,1
    - Dst: TrackMeResponse*::new_interval
      Src: /src/brpc/src/brpc/trackme.cpp:176,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/trackme.cpp:177,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/trackme.cpp:178,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 43
    argCount: 2
    argNames:
    - cntl
    - res
    argTypes:
    - Controller*
    - TrackMeResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 187
    functionName: brpc::HandleTrackMeResponse
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - BugInfo::BugInfo
    - Controller*::Failed
    - std::min
    - TrackMeResponse*::new_interval
    - BAIDU_SCOPED_LOCK
    - TrackMeResponse*::has_new_interval
    - Controller*::ErrorText
    - TrackMeResponse*::severity
    - LOG
    - TrackMeResponse*::error_text
    linkageType: ''
    returnType: void
    signature: void HandleTrackMeResponse(Controller* cntl, TrackMeResponse* res)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/trackme.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:196,1
    - Dst: Channel*::Init
      Src: /src/brpc/src/brpc/trackme.cpp:202,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/trackme.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/trackme.cpp:203,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/trackme.cpp:209,1
    - Dst: TrackMeRequest::set_rpc_version
      Src: /src/brpc/src/brpc/trackme.cpp:212,1
    - Dst: TrackMeRequest::set_server_addr
      Src: /src/brpc/src/brpc/trackme.cpp:213,1
    - Dst: TrackMeResponse::TrackMeResponse
      Src: /src/brpc/src/brpc/trackme.cpp:214,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/trackme.cpp:215,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: brpc::policy::MurmurHash32
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: data
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/trackme.cpp:216,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/src/brpc/trackme.cpp:218,1
    - Dst: TrackMeService_Stub::TrackMe
      Src: /src/brpc/src/brpc/trackme.cpp:219,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - ' mu'
    argTypes:
    - std::unique_lock<pthread_mutex_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 189
    functionDepth: 2
    functionLinenumber: 189
    functionLinenumberEnd: 220
    functionName: brpc::TrackMeNow
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 1
    functionsReached:
    - Channel*::Init
    - Controller::Controller
    - unlock
    - brpc::policy::MurmurHash32
    - Channel::Channel
    - TrackMeRequest::set_rpc_version
    - brpc::NewCallback
    - c_str
    - Controller*::set_request_code
    - data
    - brpc::size
    - TrackMeResponse::TrackMeResponse
    - TrackMeRequest::set_server_addr
    - LOG
    - TrackMeService_Stub::TrackMe
    linkageType: ''
    returnType: void
    signature: void TrackMeNow(std::unique_lock<pthread_mutex_t>& mu)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/trackme.cpp:225,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/trackme.cpp:228,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/trackme.cpp:234,1
    - Dst: brpc::TrackMeNow
      Src: /src/brpc/src/brpc/trackme.cpp:238,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 224
    functionDepth: 3
    functionLinenumber: 224
    functionLinenumberEnd: 240
    functionName: brpc::TrackMe
    functionSourceFile: /src/brpc/src/brpc/trackme.cpp
    functionUses: 0
    functionsReached:
    - brpc::empty
    - butil::gettimeofday_us
    - brpc::TrackMeNow
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: void
    signature: void TrackMe()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: validate_connect_timeout_as_unreachable
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate_connect_timeout_as_unreachable(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:134,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.cpp:135,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 137
    functionName: SocketPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic::atomic
    - butil::EndPoint::EndPoint
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT SocketPool
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/socket.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 162
    functionName: ExtendedSocketStat
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void ExtendedSocketStat()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - creator_socket_id2
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 214
    functionName: Socket::SharedPart::SharedPart(SocketId creator_socket_id2)
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Socket::SharedPart::SharedPart(SocketId creator_socket_id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 220
    functionName: Socket::SharedPart::~SharedPart()
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - exchange
    linkageType: ''
    returnType: void
    signature: void Socket::SharedPart::~SharedPart()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ExtendedSocketStat::ExtendedSocketStat
      Src: /src/brpc/src/brpc/socket.cpp:225,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:233,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:234,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:235,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:236,1
    - Dst: ExtendedSocketStat*::_minute_counter::Add
      Src: /src/brpc/src/brpc/socket.cpp:266,1
    - Dst: ExtendedSocketStat*::_minute_counter::TryPop
      Src: /src/brpc/src/brpc/socket.cpp:273,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 34
    argCount: 1
    argNames:
    - now_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 279
    functionName: Socket::SharedPart::UpdateStatsEverySecond(int64_t now_ms)
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ExtendedSocketStat*::_minute_counter::TryPop
    - ExtendedSocketStat*::_minute_counter::Add
    - load
    - ExtendedSocketStat::ExtendedSocketStat
    linkageType: ''
    returnType: void
    signature: void Socket::SharedPart::UpdateStatsEverySecond(int64_t now_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SocketVarsCollector::SocketVarsCollector
      Src: /src/brpc/src/brpc/socket.cpp:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 286
    functionName: CreateVars
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketVarsCollector::SocketVarsCollector
    linkageType: ''
    returnType: void
    signature: void CreateVars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:289,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/socket.cpp:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 290
    functionName: Socket::CreateVarsOnce
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void Socket::CreateVarsOnce()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: channel_conn::get_value
      Src: /src/brpc/src/brpc/socket.cpp:295,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 298
    functionName: GetChannelConnectionCount
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - channel_conn::get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetChannelConnectionCount()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SocketUser*>
      Src: /src/brpc/src/brpc/socket.cpp:301,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket.cpp:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 302
    functionName: Socket::CreatedByConnect
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - get_client_side_messenger
    - static_cast<SocketUser*>
    linkageType: ''
    returnType: bool
    signature: bool Socket::CreatedByConnect() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket.cpp:310,1
    - Dst: set_extra
      Src: /src/brpc/src/brpc/socket.cpp:316,1
    - Dst: set
      Src: /src/brpc/src/brpc/socket.cpp:321,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:326,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:331,1
    - Dst: get
      Src: /src/brpc/src/brpc/socket.cpp:335,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:339,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:342,1
    - Dst: reset_extra
      Src: /src/brpc/src/brpc/socket.cpp:345,1
    - Dst: get
      Src: /src/brpc/src/brpc/socket.cpp:348,1
    - Dst: reset
      Src: /src/brpc/src/brpc/socket.cpp:351,1
    - Dst: set_ptr_and_extra
      Src: /src/brpc/src/brpc/socket.cpp:358,1
    - Dst: user_message
      Src: /src/brpc/src/brpc/socket.cpp:362,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket.cpp:365,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket.cpp:368,1
    - Dst: set_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:370,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 384
    functionName: Socket::WriteRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - reset
    - set_ptr_and_extra
    - reset_extra
    - set_extra
    - user_message
    - set_pipelined_count_and_user_message
    - get
    - SocketMessage*::AppendAndDestroySelf
    - butil::IOBuf::IOBuf
    - set
    - extra
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Socket::WriteRequest
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_extra
      Src: /src/brpc/src/brpc/socket.cpp:316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - notify_on_success
    - shutdown_write
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 318
    functionName: clear_and_set_control_bits
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - set_extra
    linkageType: ''
    returnType: void
    signature: "void clear_and_set_control_bits(bool notify_on_success,\n                                    bool
      shutdown_write)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set
      Src: /src/brpc/src/brpc/socket.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    functionName: set_socket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - set
    linkageType: ''
    returnType: void
    signature: void set_socket(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 327
    functionName: is_notify_on_success
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - extra
    linkageType: ''
    returnType: bool
    signature: bool is_notify_on_success() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 332
    functionName: need_shutdown_write
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 2
    functionsReached:
    - extra
    linkageType: ''
    returnType: bool
    signature: bool need_shutdown_write() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/socket.cpp:335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 334
    functionDepth: 1
    functionLinenumber: 334
    functionLinenumberEnd: 336
    functionName: get_socket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * get_socket() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 340
    functionName: pipelined_count
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - extra
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t pipelined_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: get_auth_flags
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - extra
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_auth_flags() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_extra
      Src: /src/brpc/src/brpc/socket.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 346
    functionName: clear_pipelined_count_and_auth_flags
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - reset_extra
    linkageType: ''
    returnType: void
    signature: void clear_pipelined_count_and_auth_flags()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/socket.cpp:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 349
    functionName: user_message
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - get
    linkageType: ''
    returnType: SocketMessage
    signature: SocketMessage * user_message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/socket.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 352
    functionName: clear_user_message
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void clear_user_message()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_ptr_and_extra
      Src: /src/brpc/src/brpc/socket.cpp:358,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - pc
    - msg
    - auth_flags
    argTypes:
    - uint32_t
    - SocketMessage*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 359
    functionName: set_pipelined_count_and_user_message
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - set_ptr_and_extra
    linkageType: ''
    returnType: void
    signature: "void set_pipelined_count_and_user_message(\n        uint32_t pc, SocketMessage*
      msg, uint32_t auth_flags)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: user_message
      Src: /src/brpc/src/brpc/socket.cpp:362,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket.cpp:365,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket.cpp:368,1
    - Dst: set_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:370,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 374
    functionName: reset_pipelined_count_and_user_message
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketMessage*::AppendAndDestroySelf
    - user_message
    - set_pipelined_count_and_user_message
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: bool
    signature: bool reset_pipelined_count_and_user_message()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: user_message
      Src: /src/brpc/src/brpc/socket.cpp:387,1
    - Dst: clear_user_message
      Src: /src/brpc/src/brpc/socket.cpp:389,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket.cpp:391,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/socket.cpp:392,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:394,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:395,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/src/brpc/socket.cpp:395,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/socket.cpp:395,1
    - Dst: Socket*::_unwritten_bytes::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:400,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:400,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:401,1
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/socket.cpp:405,1
    - Dst: get_auth_flags
      Src: /src/brpc/src/brpc/socket.cpp:412,1
    - Dst: clear_pipelined_count_and_auth_flags
      Src: /src/brpc/src/brpc/socket.cpp:414,1
    - Dst: Socket*::PushPipelinedInfo
      Src: /src/brpc/src/brpc/socket.cpp:415,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 417
    functionName: Socket::WriteRequest::Setup(Socket* s)
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - get_auth_flags
    - butil::Status::error_code
    - Socket*::_unwritten_bytes::fetch_add
    - clear_pipelined_count_and_auth_flags
    - bthread_id_error2
    - size
    - Socket*::PushPipelinedInfo
    - butil::Status::error_cstr
    - clear_user_message
    - clear
    - pipelined_count
    - SocketMessage*::AppendAndDestroySelf
    - user_message
    - butil::Status::ok
    linkageType: ''
    returnType: void
    signature: void Socket::WriteRequest::Setup(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 425
    functionName: Socket::EpollOutRequest::EpollOutRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EpollOutRequest()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/socket.cpp:431,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 427
    functionDepth: 2
    functionLinenumber: 427
    functionLinenumberEnd: 434
    functionName: ~EpollOutRequest() override
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - bthread_timer_del
    linkageType: ''
    returnType: void
    signature: void ~EpollOutRequest() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 439
    functionName: Socket::EpollOutRequest::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket::CreateVarsOnce
      Src: /src/brpc/src/brpc/socket.cpp:496,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/brpc/socket.cpp:497,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/src/brpc/socket.cpp:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - Forbidden
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 449
    functionDepth: 2
    functionLinenumber: 449
    functionLinenumberEnd: 499
    functionName: Socket::Socket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_init
    - bthread::butex_create_checked<butil::atomic<int> >
    - Socket::CreateVarsOnce
    linkageType: ''
    returnType: void
    signature: void Socket::Socket(Forbidden f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/brpc/socket.cpp:502,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/socket.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 501
    functionDepth: 2
    functionLinenumber: 501
    functionLinenumberEnd: 504
    functionName: Socket::~Socket()
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void Socket::~Socket()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/socket.cpp:507,1
    - Dst: Socket::WriteRequest*::data::empty
      Src: /src/brpc/src/brpc/socket.cpp:507,1
    - Dst: Socket::AddOutputMessages
      Src: /src/brpc/src/brpc/socket.cpp:508,1
    - Dst: Socket::WriteRequest*::is_notify_on_success
      Src: /src/brpc/src/brpc/socket.cpp:510,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/socket.cpp:511,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:514,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:515,1
    - Dst: Socket::NotifyOnFailed
      Src: /src/brpc/src/brpc/socket.cpp:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - p
    argTypes:
    - Socket::WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 506
    functionDepth: 1
    functionLinenumber: 506
    functionLinenumberEnd: 520
    functionName: Socket::ReturnSuccessfulWriteRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::AddOutputMessages
    - Socket::WriteRequest*::is_notify_on_success
    - Socket::WriteRequest*::data::empty
    - butil::return_object
    - DCHECK
    - Socket::NotifyOnFailed
    - bthread_id_error
    - Failed
    linkageType: ''
    returnType: void
    signature: void Socket::ReturnSuccessfulWriteRequest(Socket::WriteRequest* p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Socket::WriteRequest*::reset_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:524,1
    - Dst: Socket::CancelUnwrittenBytes
      Src: /src/brpc/src/brpc/socket.cpp:525,1
    - Dst: Socket::WriteRequest*::data::size
      Src: /src/brpc/src/brpc/socket.cpp:525,1
    - Dst: Socket::WriteRequest*::data::clear
      Src: /src/brpc/src/brpc/socket.cpp:527,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/socket.cpp:529,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:531,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - p
    - error_code
    - ' error_text'
    argTypes:
    - Socket::WriteRequest*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 522
    functionDepth: 3
    functionLinenumber: 522
    functionLinenumberEnd: 533
    functionName: Socket::ReturnFailedWriteRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::CancelUnwrittenBytes
    - Socket::WriteRequest*::reset_pipelined_count_and_user_message
    - bthread_id_error2
    - butil::return_object
    - Socket::WriteRequest*::data::clear
    - Socket::WriteRequest*::data::size
    linkageType: ''
    returnType: void
    signature: "void Socket::ReturnFailedWriteRequest(Socket::WriteRequest* p, int
      error_code,\n                                      const std::string& error_text)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket::ReturnFailedWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:540,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - req
    - error_code
    - ' error_text'
    argTypes:
    - Socket::WriteRequest*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 535
    functionDepth: 4
    functionLinenumber: 535
    functionLinenumberEnd: 544
    functionName: Socket::ReleaseWriteRequestsExceptLast
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::ReturnFailedWriteRequest
    linkageType: ''
    returnType: Socket::WriteRequest
    signature: "Socket::WriteRequest * Socket::ReleaseWriteRequestsExceptLast(\n    Socket::WriteRequest*
      req, int error_code, const std::string& error_text)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:547,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:547,1
    - Dst: IsWriteShutdown
      Src: /src/brpc/src/brpc/socket.cpp:547,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:550,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:551,1
    - Dst: non_zero_error_code
      Src: /src/brpc/src/brpc/socket.cpp:552,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:554,1
    - Dst: Socket::ReleaseWriteRequestsExceptLast
      Src: /src/brpc/src/brpc/socket.cpp:561,1
    - Dst: Socket::WriteRequest*::reset_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:562,1
    - Dst: Socket::CancelUnwrittenBytes
      Src: /src/brpc/src/brpc/socket.cpp:563,1
    - Dst: Socket::WriteRequest*::data::size
      Src: /src/brpc/src/brpc/socket.cpp:563,1
    - Dst: Socket::WriteRequest*::data::clear
      Src: /src/brpc/src/brpc/socket.cpp:565,1
    - Dst: Socket::IsWriteComplete
      Src: /src/brpc/src/brpc/socket.cpp:566,1
    - Dst: Socket::ReturnFailedWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:567,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - req
    argTypes:
    - Socket::WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 546
    functionDepth: 5
    functionLinenumber: 546
    functionLinenumberEnd: 568
    functionName: Socket::ReleaseAllFailedWriteRequests
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::CancelUnwrittenBytes
    - Socket::ReturnFailedWriteRequest
    - non_zero_error_code
    - Socket::WriteRequest*::reset_pipelined_count_and_user_message
    - Socket::ReleaseWriteRequestsExceptLast
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - IsWriteShutdown
    - Socket::WriteRequest*::data::clear
    - CHECK
    - Socket::WriteRequest*::data::size
    - Failed
    - Socket::IsWriteComplete
    linkageType: ''
    returnType: void
    signature: void Socket::ReleaseAllFailedWriteRequests(Socket::WriteRequest* req)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:576,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/socket.cpp:577,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:578,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:581,1
    - Dst: butil::get_remote_side
      Src: /src/brpc/src/brpc/socket.cpp:583,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/brpc/socket.cpp:586,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/socket.cpp:591,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/socket.cpp:594,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:595,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:596,1
    - Dst: butil::make_no_delay
      Src: /src/brpc/src/brpc/socket.cpp:601,1
    - Dst: Socket::SetSocketOptions
      Src: /src/brpc/src/brpc/socket.cpp:603,1
    - Dst: AddConsumer
      Src: /src/brpc/src/brpc/socket.cpp:606,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:607,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:607,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:609,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 570
    functionDepth: 1
    functionLinenumber: 570
    functionLinenumberEnd: 614
    functionName: Socket::ResetFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::EndPoint
    - butil::make_no_delay
    - Socket::SetSocketOptions
    - butil::make_close_on_exec
    - PLOG
    - store
    - butil::get_local_side
    - AddConsumer
    - id
    - butil::make_non_blocking
    - butil::get_remote_side
    - ValidFileDescriptor
    linkageType: ''
    returnType: int
    signature: int Socket::ResetFileDescriptor(int fd)
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:618,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:619,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:624,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:625,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:632,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:633,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:640,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:642,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:652,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:653,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:659,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:662,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:667,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:670,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:675,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:678,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:683,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:686,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:691,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:694,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:699,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:702,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 56
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 706
    functionName: Socket::SetSocketOptions
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 3
    functionsReached:
    - PLOG
    - setsockopt
    linkageType: ''
    returnType: void
    signature: void Socket::SetSocketOptions(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/socket.cpp:712,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' options'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 711
    functionDepth: 5
    functionLinenumber: 711
    functionLinenumberEnd: 713
    functionName: Socket::Create
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 60
    functionsReached:
    - brpc::Stream::Create
    linkageType: ''
    returnType: int
    signature: int Socket::Create(const SocketOptions& options, SocketId* id)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/socket.cpp:716,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:716,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:717,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:718,1
    - Dst: set_bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:721,1
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/socket.cpp:722,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/socket.cpp:723,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:727,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:727,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:728,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:732,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:739,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket.cpp:739,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:740,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:741,1
    - Dst: reset_parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:742,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:747,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:748,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:749,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/socket.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:752,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:752,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:753,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:753,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:762,1
    - Dst: rdma::RdmaEndpoint::RdmaEndpoint
      Src: /src/brpc/src/brpc/socket.cpp:764,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:767,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:768,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:769,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:778,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:782,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:784,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:785,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:786,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/socket.cpp:788,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:790,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:790,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:791,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:791,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:794,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:795,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:798,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:798,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:801,1
    - Dst: Socket::DoConnect
      Src: /src/brpc/src/brpc/socket.cpp:803,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:805,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:807,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/socket.cpp:808,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:809,1
    - Dst: Socket::ResetFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:815,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:817,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:818,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:819,1
    - Dst: Socket::HoldHCRelatedRef
      Src: /src/brpc/src/brpc/socket.cpp:822,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/socket.cpp:823,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 89
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 715
    functionDepth: 3
    functionLinenumber: 715
    functionLinenumberEnd: 826
    functionName: Socket::OnCreated
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - set_bthread_tag
    - Reset
    - bthread_id_create
    - Init
    - bthread_id_list_init
    - butil::endpoint2str
    - id
    - auto::dismiss
    - butil::cpuwide_time_us
    - reset_parsing_context
    - butil::MakeScopeGuard
    - Socket::ResetFileDescriptor
    - Socket::DoConnect
    - store
    - PLOG
    - LOG
    - butil::EndPoint
    - CHECK
    - berror
    - load
    - rdma::RdmaEndpoint::RdmaEndpoint
    - empty
    - Socket::SetFailed
    - Socket::HoldHCRelatedRef
    - ValidFileDescriptor
    linkageType: ''
    returnType: int
    signature: int Socket::OnCreated(const SocketOptions& options)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Socket::CreatedByConnect
      Src: /src/brpc/src/brpc/socket.cpp:829,1
    - Dst: swap
      Src: /src/brpc/src/brpc/socket.cpp:832,1
    - Dst: std::shared_ptr::StopConnect
      Src: /src/brpc/src/brpc/socket.cpp:833,1
    - Dst: SocketConnection*::BeforeRecycle
      Src: /src/brpc/src/brpc/socket.cpp:838,1
    - Dst: SocketUser*::BeforeRecycle
      Src: /src/brpc/src/brpc/socket.cpp:843,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:845,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:847,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/socket.cpp:852,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:854,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:855,1
    - Dst: RemoveConsumer
      Src: /src/brpc/src/brpc/socket.cpp:857,1
    - Dst: close
      Src: /src/brpc/src/brpc/socket.cpp:859,1
    - Dst: reset_parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:873,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:874,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:876,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:877,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/socket.cpp:879,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/socket.cpp:882,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:897,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:900,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:901,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 53
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 828
    functionDepth: 3
    functionLinenumber: 828
    functionLinenumberEnd: 905
    functionName: Socket::BeforeRecycled
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread_id_list_destroy
    - SocketUser*::BeforeRecycle
    - brpc::SetTrackMeAddress
    - swap
    - Socket::CreatedByConnect
    - reset_parsing_context
    - store
    - clear
    - RemoveConsumer
    - bthread_id_error
    - std::shared_ptr::StopConnect
    - SharedPart*::RemoveRefManually
    - SocketUniquePtr::ReleaseAdditionalReference
    - SocketConnection*::BeforeRecycle
    - load
    - close
    - SSL_free
    - exchange
    - ValidFileDescriptor
    linkageType: ''
    returnType: void
    signature: void Socket::BeforeRecycled()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:909,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:912,1
    - Dst: HCEnabled
      Src: /src/brpc/src/brpc/socket.cpp:917,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:919,1
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:923,1
    - Dst: MarkAsBroken
      Src: /src/brpc/src/brpc/socket.cpp:923,1
    - Dst: StartHealthCheck
      Src: /src/brpc/src/brpc/socket.cpp:924,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:924,1
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:925,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/src/brpc/socket.cpp:925,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:929,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:933,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/brpc/socket.cpp:934,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:937,1
    - Dst: bthread_id_list_reset2_pthreadsafe
      Src: /src/brpc/src/brpc/socket.cpp:937,1
    - Dst: Socket::ResetAllStreams
      Src: /src/brpc/src/brpc/socket.cpp:940,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - error_code
    - ' error_text'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 907
    functionDepth: 5
    functionLinenumber: 907
    functionLinenumberEnd: 949
    functionName: Socket::OnFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - Socket::ResetAllStreams
    - StartHealthCheck
    - MarkAsBroken
    - fetch_add
    - compare_exchange_strong
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bthread::butex_wake_all
    - CHECK_EQ
    - bthread_id_list_reset2_pthreadsafe
    - isolation_duration_ms
    - id
    - HCEnabled
    linkageType: ''
    returnType: void
    signature: void Socket::OnFailed(int error_code, const std::string& error_text)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket::AfterRevived
      Src: /src/brpc/src/brpc/socket.cpp:953,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:955,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket.cpp:955,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 951
    functionDepth: 1
    functionLinenumber: 951
    functionLinenumberEnd: 957
    functionName: Socket::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - Socket::AfterRevived
    - LOG
    - description
    linkageType: ''
    returnType: void
    signature: void Socket::AfterRevived()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/socket.cpp:962,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:963,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/socket.cpp:965,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/socket.cpp:967,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/socket.cpp:968,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:968,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:969,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/socket.cpp:971,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 974
      start: 959
    functionDepth: 1
    functionLinenumber: 959
    functionLinenumberEnd: 974
    functionName: Socket::OnDescription
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - std::string::reserve
    - local_side
    - butil::string_appendf
    - butil::endpoint2str
    - fd
    linkageType: ''
    returnType: std::string
    signature: std::string Socket::OnDescription() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddReference
      Src: /src/brpc/src/brpc/socket.cpp:979,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 981
      start: 976
    functionDepth: 0
    functionLinenumber: 976
    functionLinenumberEnd: 981
    functionName: Socket::HoldHCRelatedRef
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - AddReference
    linkageType: ''
    returnType: void
    signature: void Socket::HoldHCRelatedRef()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Dereference
      Src: /src/brpc/src/brpc/socket.cpp:986,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 988
      start: 983
    functionDepth: 0
    functionLinenumber: 983
    functionLinenumberEnd: 988
    functionName: Socket::ReleaseHCRelatedReference
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Dereference
    linkageType: ''
    returnType: void
    signature: void Socket::ReleaseHCRelatedReference()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/socket.cpp:991,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:991,1
    - Dst: versioned_ref
      Src: /src/brpc/src/brpc/socket.cpp:997,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:998,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:999,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:999,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1002,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/socket.cpp:1003,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:1004,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1007,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:1008,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:1016,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:1025,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1026,1
    - Dst: RemoveConsumer
      Src: /src/brpc/src/brpc/socket.cpp:1028,1
    - Dst: close
      Src: /src/brpc/src/brpc/socket.cpp:1030,1
    - Dst: Socket::CreatedByConnect
      Src: /src/brpc/src/brpc/socket.cpp:1031,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/socket.cpp:1038,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:1043,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/socket.cpp:1045,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1049,1
    - Dst: reset_parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:1052,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:1055,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1056,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1057,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:1058,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/socket.cpp:1059,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1061,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1061,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:1065,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1066,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1067,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1068,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:1070,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:1072,1
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1076,1
    - Dst: SharedPart*::circuit_breaker::Reset
      Src: /src/brpc/src/brpc/socket.cpp:1078,1
    - Dst: SharedPart*::recent_error_count::store
      Src: /src/brpc/src/brpc/socket.cpp:1079,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 66
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 990
    functionDepth: 3
    functionLinenumber: 990
    functionLinenumberEnd: 1082
    functionName: Socket::WaitAndReset
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread_usleep
    - bthread_id_create
    - VersionOfVRef
    - SharedPart*::recent_error_count::store
    - id
    - GetSharedPart
    - Socket::CreatedByConnect
    - butil::cpuwide_time_us
    - reset_parsing_context
    - NRefOfVRef
    - PLOG_IF
    - store
    - RemoveConsumer
    - clear
    - bthread_id_error
    - LOG
    - butil::EndPoint
    - BAIDU_SCOPED_LOCK
    - versioned_ref
    - berror
    - SharedPart*::circuit_breaker::Reset
    - VersionOfVRefId
    - close
    - SSL_free
    - exchange
    - ValidFileDescriptor
    linkageType: ''
    returnType: int
    signature: int Socket::WaitAndReset(int32_t expected_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1085,1
    - Dst: SharedPart*::recent_error_count::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1087,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1084
    functionDepth: 0
    functionLinenumber: 1084
    functionLinenumberEnd: 1089
    functionName: Socket::AddRecentError
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetSharedPart
    - SharedPart*::recent_error_count::fetch_add
    linkageType: ''
    returnType: void
    signature: void Socket::AddRecentError()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1092,1
    - Dst: SharedPart*::recent_error_count::load
      Src: /src/brpc/src/brpc/socket.cpp:1094,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1097
      start: 1091
    functionDepth: 0
    functionLinenumber: 1091
    functionLinenumberEnd: 1097
    functionName: Socket::recent_error_count
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetSharedPart
    - SharedPart*::recent_error_count::load
    linkageType: ''
    returnType: int64_t
    signature: int64_t Socket::recent_error_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1100,1
    - Dst: SharedPart*::circuit_breaker::isolated_times
      Src: /src/brpc/src/brpc/socket.cpp:1102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1099
    functionDepth: 0
    functionLinenumber: 1099
    functionLinenumberEnd: 1105
    functionName: Socket::isolated_times
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetSharedPart
    - SharedPart*::circuit_breaker::isolated_times
    linkageType: ''
    returnType: int
    signature: int Socket::isolated_times() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1108,1
    - Dst: OnCallEnd
      Src: /src/brpc/src/brpc/socket.cpp:1108,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1109,1
    - Dst: Socket::main_socket_id
      Src: /src/brpc/src/brpc/socket.cpp:1109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1110,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1113
      start: 1107
    functionDepth: 1
    functionLinenumber: 1107
    functionLinenumberEnd: 1113
    functionName: Socket::FeedbackCircuitBreaker
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - Socket::main_socket_id
    - OnCallEnd
    - Socket::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void Socket::FeedbackCircuitBreaker(int error_code, int64_t latency_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: last_active_time_us
      Src: /src/brpc/src/brpc/socket.cpp:1116,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:1117,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:1120,1
    - Dst: shall_fail_me_at_server_stop
      Src: /src/brpc/src/brpc/socket.cpp:1123,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1127,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:1130,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - idle_seconds
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1131
      start: 1115
    functionDepth: 1
    functionLinenumber: 1115
    functionLinenumberEnd: 1131
    functionName: Socket::ReleaseReferenceIfIdle
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - shall_fail_me_at_server_stop
    - butil::cpuwide_time_us
    - last_active_time_us
    - ReleaseAdditionalReference
    - Socket::SetFailed
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: int Socket::ReleaseReferenceIfIdle(int idle_seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1136
      start: 1134
    functionDepth: 1
    functionLinenumber: 1134
    functionLinenumberEnd: 1136
    functionName: Socket::SetFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 25
    functionsReached:
    - Socket::SetFailed
    linkageType: ''
    returnType: int
    signature: int Socket::SetFailed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/socket.cpp:1142,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/brpc/socket.cpp:1143,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/socket.cpp:1144,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - error_code
    - error_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1147
      start: 1138
    functionDepth: 2
    functionLinenumber: 1138
    functionLinenumberEnd: 1147
    functionName: Socket::SetFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 25
    functionsReached:
    - brpc::Stream::SetFailed
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: int
    signature: int Socket::SetFailed(int error_code, const char* error_fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:1151,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1156
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1156
    functionName: Socket::SetFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 25
    functionsReached:
    - Address
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: int
    signature: int Socket::SetFailed(SocketId id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:1159,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:1160,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/src/brpc/socket.cpp:1161,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1162,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:1164,1
    - Dst: non_zero_error_code
      Src: /src/brpc/src/brpc/socket.cpp:1167,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1169,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:1170,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1172
      start: 1158
    functionDepth: 5
    functionLinenumber: 1158
    functionLinenumberEnd: 1172
    functionName: Socket::NotifyOnFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - bthread_id_list_add
    - non_zero_error_code
    - bthread_id_error2
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - bthread_id_error
    - Failed
    linkageType: ''
    returnType: void
    signature: void Socket::NotifyOnFailed(bthread_id_t id)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SlotOfVRefId<Socket>
      Src: /src/brpc/src/brpc/socket.cpp:1176,1
    - Dst: address_resource
      Src: /src/brpc/src/brpc/socket.cpp:1177,1
    - Dst: Socket*::versioned_ref
      Src: /src/brpc/src/brpc/socket.cpp:1179,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1180,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/socket.cpp:1180,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1182,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1185,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/socket.cpp:1185,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1187,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - id
    - nref
    argTypes:
    - SocketId
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1193
      start: 1175
    functionDepth: 0
    functionLinenumber: 1175
    functionLinenumberEnd: 1193
    functionName: Socket::Status
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 3
    functionsReached:
    - Socket*::versioned_ref
    - address_resource
    - SlotOfVRefId<Socket>
    - VersionOfVRef
    - VersionOfVRefId
    - NRefOfVRef
    linkageType: ''
    returnType: int
    signature: int Socket::Status(SocketId id, int32_t* nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SocketUniquePtr::_on_edge_triggered_events
      Src: /src/brpc/src/brpc/socket.cpp:1198,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:1198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1200
      start: 1195
    functionDepth: 1
    functionLinenumber: 1195
    functionLinenumberEnd: 1200
    functionName: Socket::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::get
    - SocketUniquePtr::_on_edge_triggered_events
    linkageType: ''
    returnType: void
    signature: void * Socket::ProcessEvent(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:1213,1
    - Dst: Socket::WriteRequest*::data::empty
      Src: /src/brpc/src/brpc/socket.cpp:1218,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:1223,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/socket.cpp:1231,1
    - Dst: sched_yield
      Src: /src/brpc/src/brpc/socket.cpp:1242,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:1248,1
    - Dst: WriteRequest*::Setup
      Src: /src/brpc/src/brpc/socket.cpp:1257,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 3
    argNames:
    - old_head
    - singular_node
    - new_tail
    argTypes:
    - Socket::WriteRequest*
    - bool
    - Socket::WriteRequest**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1210
    functionDepth: 1
    functionLinenumber: 1210
    functionLinenumberEnd: 1263
    functionName: Socket::IsWriteComplete
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - sched_yield
    - WriteRequest*::Setup
    - Socket::WriteRequest*::data::empty
    - CHECK_NE
    - compare_exchange_strong
    - CHECK
    linkageType: ''
    returnType: bool
    signature: "bool Socket::IsWriteComplete(Socket::WriteRequest* old_head,\n                             bool
      singular_node,\n                             Socket::WriteRequest** new_tail)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1266,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:1271,1
    - Dst: RegisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1272,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/socket.cpp:1276,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/brpc/socket.cpp:1284,1
    - Dst: UnregisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1284,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - fd
    - pollin
    - abstime
    argTypes:
    - int
    - bool
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1288
      start: 1265
    functionDepth: 4
    functionLinenumber: 1265
    functionLinenumberEnd: 1288
    functionName: Socket::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - UnregisterEvent
    - bthread::butex_wait
    - load
    - RegisterEvent
    - butil::ignore_result
    - ValidFileDescriptor
    linkageType: ''
    returnType: int
    signature: int Socket::WaitEpollOut(int fd, bool pollin, const timespec* abstime)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/brpc/socket.cpp:1299,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:1299,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1300,1
    - Dst: socket
      Src: /src/brpc/src/brpc/socket.cpp:1303,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1305,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1308,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/socket.cpp:1308,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1310,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/socket.cpp:1310,1
    - Dst: test_listen_connect
      Src: /src/brpc/src/brpc/socket.cpp:1312,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1315,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:1315,1
    - Dst: EpollOutRequest::EpollOutRequest
      Src: /src/brpc/src/brpc/socket.cpp:1319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1321,1
    - Dst: bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:1332,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/socket.cpp:1334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1335,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1343,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:1343,1
    - Dst: SocketUniquePtr::_io_event::RegisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1347,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1349,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1350,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1351,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/socket.cpp:1362,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1366,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1366,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1367,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1367,1
    - Dst: Socket::WaitEpollOut
      Src: /src/brpc/src/brpc/socket.cpp:1373,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1374,1
    - Dst: Socket::CheckConnected
      Src: /src/brpc/src/brpc/socket.cpp:1377,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/socket.cpp:1381,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 59
    argCount: 2
    argNames:
    - abstime
    - data
    argTypes:
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1290
    functionDepth: 6
    functionLinenumber: 1290
    functionLinenumberEnd: 1382
    functionName: Socket::Connect
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::endpoint2sockaddr
    - CHECK_EQ
    - test_listen_connect
    - brpc::SetTrackMeAddress
    - Socket::WaitEpollOut
    - remote_side
    - butil::fd_guard::release
    - Socket::CheckConnected
    - PLOG
    - LOG
    - bthread_tag
    - Socket::Create
    - berror
    - socket
    - SocketUniquePtr::_io_event::RegisterEvent
    - butil::make_close_on_exec
    - bthread_timer_add
    - EpollOutRequest::EpollOutRequest
    - SocketUniquePtr::SetFailed
    - butil::make_non_blocking
    linkageType: ''
    returnType: int
    signature: "int Socket::Connect(const timespec* abstime,\n                    int
      (*on_connect)(int, int, void*), void* data)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:1390,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1391,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/socket.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:1401,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1402,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/brpc/socket.cpp:1402,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1403,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:1403,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:1404,1
    - Dst: SSLHandshake
      Src: /src/brpc/src/brpc/socket.cpp:1409,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - sockfd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1410
      start: 1384
    functionDepth: 1
    functionLinenumber: 1384
    functionLinenumberEnd: 1410
    functionName: Socket::CheckConnected
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - getsockopt
    - remote_side
    - CHECK_NE
    - SSLHandshake
    - butil::EndPoint::EndPoint
    - CHECK_EQ
    - butil::get_local_side
    - id
    - PLOG
    - LOG
    linkageType: ''
    returnType: int
    signature: int Socket::CheckConnected(int sockfd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:1415,1
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:1417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - abstime
    - data
    argTypes:
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1419
      start: 1412
    functionDepth: 7
    functionLinenumber: 1412
    functionLinenumberEnd: 1419
    functionName: Socket::DoConnect
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - Socket::Connect
    linkageType: ''
    returnType: int
    signature: "int Socket::DoConnect(const timespec* abstime,\n                      int
      (*on_connect)(int, int, void*), void* data)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:1422,1
    - Dst: set_bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:1426,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/socket.cpp:1426,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/socket.cpp:1429,1
    - Dst: WriteRequest*::set_socket
      Src: /src/brpc/src/brpc/socket.cpp:1430,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:1430,1
    - Dst: Socket::DoConnect
      Src: /src/brpc/src/brpc/socket.cpp:1431,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket.cpp:1434,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - abstime
    - req
    argTypes:
    - timespec*
    - WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1436
      start: 1421
    functionDepth: 8
    functionLinenumber: 1421
    functionLinenumberEnd: 1436
    functionName: Socket::ConnectIfNot
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - set_bthread_tag
    - bthread_self_tag
    - SocketUniquePtr::get
    - SocketUniquePtr::release
    - load
    - WriteRequest*::set_socket
    - Socket::DoConnect
    - ReAddress
    linkageType: ''
    returnType: int
    signature: int Socket::ConnectIfNot(const timespec* abstime, WriteRequest* req)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1439,1
    - Dst: bthread::butex_wake_except
      Src: /src/brpc/src/brpc/socket.cpp:1440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1441
      start: 1438
    functionDepth: 3
    functionLinenumber: 1438
    functionLinenumberEnd: 1441
    functionName: Socket::WakeAsEpollOut
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - bthread::butex_wake_except
    linkageType: ''
    returnType: void
    signature: void Socket::WakeAsEpollOut()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<SocketId>
      Src: /src/brpc/src/brpc/socket.cpp:1445,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket.cpp:1451,1
    - Dst: dynamic_cast<EpollOutRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1456,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/socket.cpp:1456,1
    - Dst: SocketUniquePtr::HandleEpollOutRequest
      Src: /src/brpc/src/brpc/socket.cpp:1458,1
    - Dst: SocketUniquePtr::_epollout_butex::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1463,1
    - Dst: bthread::butex_wake_except
      Src: /src/brpc/src/brpc/socket.cpp:1464,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1466
      start: 1443
    functionDepth: 3
    functionLinenumber: 1443
    functionLinenumberEnd: 1466
    functionName: Socket::OnOutputEvent
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::HandleEpollOutRequest
    - SocketUniquePtr::_epollout_butex::fetch_add
    - reinterpret_cast<SocketId>
    - bthread::butex_wake_except
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - dynamic_cast<EpollOutRequest*>
    linkageType: ''
    returnType: int
    signature: "int Socket::OnOutputEvent(void* user_data, uint32_t,\n                          const
      bthread_attr_t&)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:1471,1
    - Dst: dynamic_cast<EpollOutRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1474,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/socket.cpp:1474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1476,1
    - Dst: SocketUniquePtr::HandleEpollOutRequest
      Src: /src/brpc/src/brpc/socket.cpp:1479,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1480
      start: 1468
    functionDepth: 3
    functionLinenumber: 1468
    functionLinenumberEnd: 1480
    functionName: Socket::HandleEpollOutTimeout
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::HandleEpollOutRequest
    - SocketUniquePtr::user
    - dynamic_cast<EpollOutRequest*>
    - brpc::SetTrackMeAddress
    - LOG
    linkageType: ''
    returnType: void
    signature: void Socket::HandleEpollOutTimeout(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1486,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/brpc/socket.cpp:1491,1
    - Dst: UnregisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1491,1
    - Dst: EpollOutRequest*::on_epollout_event
      Src: /src/brpc/src/brpc/socket.cpp:1492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - error_code
    - req
    argTypes:
    - int
    - EpollOutRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1482
    functionDepth: 2
    functionLinenumber: 1482
    functionLinenumberEnd: 1493
    functionName: Socket::HandleEpollOutRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::ignore_result
    - UnregisterEvent
    - EpollOutRequest*::on_epollout_event
    - Socket::SetFailed
    linkageType: ''
    returnType: int
    signature: int Socket::HandleEpollOutRequest(int error_code, EpollOutRequest*
      req)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriteRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1496,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1498,1
    - Dst: Socket*::GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1499,1
    - Dst: SharedPart*::num_continuous_connect_timeouts::store
      Src: /src/brpc/src/brpc/socket.cpp:1501,1
    - Dst: WriteRequest*::Setup
      Src: /src/brpc/src/brpc/socket.cpp:1504,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket.cpp:1506,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1508,1
    - Dst: KeepWrite
      Src: /src/brpc/src/brpc/socket.cpp:1509,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1512,1
    - Dst: SocketUniquePtr::GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1514,1
    - Dst: SharedPart*::num_continuous_connect_timeouts::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1515,1
    - Dst: SharedPart*::num_continuous_connect_timeouts::store
      Src: /src/brpc/src/brpc/socket.cpp:1520,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1526,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/socket.cpp:1527,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1527,1
    - Dst: SocketUniquePtr::ReleaseAllFailedWriteRequests
      Src: /src/brpc/src/brpc/socket.cpp:1528,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - err
    - data
    argTypes:
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1530
      start: 1495
    functionDepth: 4
    functionLinenumber: 1495
    functionLinenumberEnd: 1530
    functionName: Socket::AfterAppConnected
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - WriteRequest*::Setup
    - SocketUniquePtr::ReleaseAllFailedWriteRequests
    - SharedPart*::num_continuous_connect_timeouts::store
    - WriteRequest*::get_socket
    - bthread_start_background
    - SocketUniquePtr::SetFailed
    - SocketUniquePtr::GetOrNewSharedPart
    - KeepWrite
    - SharedPart*::num_continuous_connect_timeouts::fetch_add
    - SocketUniquePtr::description
    - Socket*::GetSharedPart
    - static_cast<WriteRequest*>
    - PLOG
    - berror
    linkageType: ''
    returnType: void
    signature: void Socket::AfterAppConnected(int err, void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/socket.cpp:1534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1536
      start: 1532
    functionDepth: 0
    functionLinenumber: 1532
    functionLinenumberEnd: 1536
    functionName: RunClosure
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: void * RunClosure(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriteRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1539,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1540,1
    - Dst: Socket*::ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:1541,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket.cpp:1547,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/socket.cpp:1548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/socket.cpp:1549,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1552,1
    - Dst: Socket::CheckConnectedAndKeepWrite
      Src: /src/brpc/src/brpc/socket.cpp:1556,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - fd
    - err
    - data
    argTypes:
    - int
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1558
      start: 1538
    functionDepth: 4
    functionLinenumber: 1538
    functionLinenumberEnd: 1558
    functionName: Socket::KeepWriteIfConnected
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - WriteRequest*::get_socket
    - bthread_start_background
    - Socket*::ssl_state
    - std::unique_ptr::release
    - Socket::CheckConnectedAndKeepWrite
    - static_cast<WriteRequest*>
    - PLOG
    - std::unique_ptr::get
    linkageType: ''
    returnType: int
    signature: int Socket::KeepWriteIfConnected(int fd, int err, void* data)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriteRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1562,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1563,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/brpc/socket.cpp:1565,1
    - Dst: Socket*::CheckConnected
      Src: /src/brpc/src/brpc/socket.cpp:1567,1
    - Dst: Socket*::ResetFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1568,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/socket.cpp:1569,1
    - Dst: Socket*::_app_connect::StartConnect
      Src: /src/brpc/src/brpc/socket.cpp:1573,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1573,1
    - Dst: Socket::AfterAppConnected
      Src: /src/brpc/src/brpc/socket.cpp:1577,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/socket.cpp:1580,1
    - Dst: Socket::AfterAppConnected
      Src: /src/brpc/src/brpc/socket.cpp:1585,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 3
    argNames:
    - fd
    - err
    - data
    argTypes:
    - int
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1587
      start: 1560
    functionDepth: 5
    functionLinenumber: 1560
    functionLinenumberEnd: 1587
    functionName: Socket::CheckConnectedAndKeepWrite
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - Socket*::CheckConnected
    - CHECK_GE
    - Socket*::ResetFileDescriptor
    - WriteRequest*::get_socket
    - butil::fd_guard::release
    - Socket*::CreatedByConnect
    - Socket*::_app_connect::StartConnect
    - Socket::AfterAppConnected
    - static_cast<WriteRequest*>
    linkageType: ''
    returnType: void
    signature: void Socket::CheckConnectedAndKeepWrite(int fd, int err, void* data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:1591,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - id_wait
    - ec
    argTypes:
    - bthread_id_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1597
      start: 1589
    functionDepth: 1
    functionLinenumber: 1589
    functionLinenumberEnd: 1597
    functionName: SetError
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 14
    functionsReached:
    - bthread_id_error
    linkageType: ''
    returnType: int
    signature: int SetError(bthread_id_t id_wait, int ec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:1600,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:1601,1
    - Dst: non_zero_error_code
      Src: /src/brpc/src/brpc/socket.cpp:1602,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1605,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:1606,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1609,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1614,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - id_wait
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1617
      start: 1599
    functionDepth: 5
    functionLinenumber: 1599
    functionLinenumberEnd: 1617
    functionName: Socket::ConductError
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - non_zero_error_code
    - bthread_id_error2
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - Failed
    linkageType: ''
    returnType: int
    signature: int Socket::ConductError(bthread_id_t id_wait)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:1620,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:1623,1
    - Dst: SSL_get_peer_certificate
      Src: /src/brpc/src/brpc/socket.cpp:1624,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1625
      start: 1619
    functionDepth: 1
    functionLinenumber: 1619
    functionLinenumberEnd: 1625
    functionName: Socket::GetPeerCertificate
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SSL_get_peer_certificate
    - ssl_state
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: X509
    signature: X509 * Socket::GetPeerCertificate() const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/socket.cpp:1632,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1633,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1636,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1638,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:1640,1
    - Dst: Socket::ConductError
      Src: /src/brpc/src/brpc/socket.cpp:1641,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1648,1
    - Dst: butil::get_object<WriteRequest>
      Src: /src/brpc/src/brpc/socket.cpp:1651,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1653,1
    - Dst: WriteRequest*::data::swap
      Src: /src/brpc/src/brpc/socket.cpp:1656,1
    - Dst: WriteRequest*::clear_and_set_control_bits
      Src: /src/brpc/src/brpc/socket.cpp:1661,1
    - Dst: WriteRequest*::set_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:1662,1
    - Dst: StartWrite
      Src: /src/brpc/src/brpc/socket.cpp:1664,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 2
    argNames:
    - data
    - options_in
    argTypes:
    - butil::IOBuf*
    - WriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1627
    functionDepth: 6
    functionLinenumber: 1627
    functionLinenumberEnd: 1665
    functionName: Socket::Write
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SetError
    - butil::IOBuf*::empty
    - WriteRequest*::data::swap
    - WriteRequest*::set_pipelined_count_and_user_message
    - StartWrite
    - butil::get_object<WriteRequest>
    - Socket::ConductError
    - Failed
    - LOG
    - WriteRequest*::clear_and_set_control_bits
    linkageType: ''
    returnType: int
    signature: int Socket::Write(butil::IOBuf* data, const WriteOptions* options_in)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1673,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1675,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:1678,1
    - Dst: Socket::ConductError
      Src: /src/brpc/src/brpc/socket.cpp:1679,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1686,1
    - Dst: butil::get_object<WriteRequest>
      Src: /src/brpc/src/brpc/socket.cpp:1689,1
    - Dst: SetError
      Src: /src/brpc/src/brpc/socket.cpp:1691,1
    - Dst: WriteRequest*::clear_and_set_control_bits
      Src: /src/brpc/src/brpc/socket.cpp:1698,1
    - Dst: WriteRequest*::set_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:1699,1
    - Dst: release
      Src: /src/brpc/src/brpc/socket.cpp:1700,1
    - Dst: StartWrite
      Src: /src/brpc/src/brpc/socket.cpp:1701,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - ' msg'
    - options_in
    argTypes:
    - SocketMessagePtr<>
    - WriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1702
      start: 1667
    functionDepth: 6
    functionLinenumber: 1667
    functionLinenumberEnd: 1702
    functionName: Socket::Write
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SetError
    - WriteRequest*::set_pipelined_count_and_user_message
    - StartWrite
    - butil::get_object<WriteRequest>
    - release
    - Socket::ConductError
    - Failed
    - LOG
    - WriteRequest*::clear_and_set_control_bits
    linkageType: ''
    returnType: int
    signature: int Socket::Write(SocketMessagePtr<>& msg, const WriteOptions* options_in)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2108,1
    - Dst: DetectSSLState
      Src: /src/brpc/src/brpc/socket.cpp:2110,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2110,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2111,1
    - Dst: SSLHandshake
      Src: /src/brpc/src/brpc/socket.cpp:2121,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2121,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2128,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2136,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2141,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/src/brpc/socket.cpp:2142,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2142,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:2145,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2145,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2149,1
    - Dst: append_from_SSL_channel
      Src: /src/brpc/src/brpc/socket.cpp:2150,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/socket.cpp:2167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2171,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2171,1
    - Dst: SSLError
      Src: /src/brpc/src/brpc/socket.cpp:2172,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/brpc/socket.cpp:2178,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:2180,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2180,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 58
    argCount: 1
    argNames:
    - size_hint
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2186
      start: 2107
    functionDepth: 1
    functionLinenumber: 2107
    functionLinenumberEnd: 2186
    functionName: Socket::DoRead
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - DetectSSLState
    - ERR_get_error
    - SSLError
    - SSLHandshake
    - append_from_file_descriptor
    - BAIDU_SCOPED_LOCK
    - append_from_SSL_channel
    - CHECK_EQ
    - CHECK
    - BIO_fd_non_fatal_error
    - PLOG_IF
    - LOG
    - ssl_state
    - fd
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t Socket::DoRead(size_t size_hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2191,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/src/brpc/socket.cpp:2197,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/socket.cpp:2203,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2204,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - auth_error
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2208
      start: 2188
    functionDepth: 5
    functionLinenumber: 2188
    functionLinenumberEnd: 2208
    functionName: Socket::FightAuthentication
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_id_join
    - bthread_id_trylock
    linkageType: ''
    returnType: int
    signature: int Socket::FightAuthentication(int* auth_error)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2214,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2219,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket.cpp:2219,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:2221,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/socket.cpp:2221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2223
      start: 2210
    functionDepth: 5
    functionLinenumber: 2210
    functionLinenumberEnd: 2223
    functionName: Socket::SetAuthentication
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - description
    - compare_exchange_strong
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - Socket::SetFailed
    linkageType: ''
    returnType: void
    signature: void Socket::SetAuthentication(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2227,1
    - Dst: AuthContext::AuthContext
      Src: /src/brpc/src/brpc/socket.cpp:2231,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2234
      start: 2225
    functionDepth: 1
    functionLinenumber: 2225
    functionLinenumberEnd: 2234
    functionName: Socket::mutable_auth_context
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - AuthContext::AuthContext
    - LOG
    linkageType: ''
    returnType: AuthContext
    signature: AuthContext * Socket::mutable_auth_context()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<SocketId>
      Src: /src/brpc/src/brpc/socket.cpp:2238,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:2240,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/socket.cpp:2248,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2250,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2252,1
    - Dst: SocketUniquePtr::_nevent::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2263,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket.cpp:2271,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/socket.cpp:2275,1
    - Dst: Socket::ProcessEvent
      Src: /src/brpc/src/brpc/socket.cpp:2279,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket.cpp:2282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2284,1
    - Dst: Socket::ProcessEvent
      Src: /src/brpc/src/brpc/socket.cpp:2285,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/socket.cpp:2288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2289,1
    - Dst: Socket::ProcessEvent
      Src: /src/brpc/src/brpc/socket.cpp:2290,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 3
    argNames:
    - user_data
    - events
    - ' thread_attr'
    argTypes:
    - void*
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2294
      start: 2236
    functionDepth: 4
    functionLinenumber: 2236
    functionLinenumberEnd: 2294
    functionName: Socket::OnInputEvent
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<SocketId>
    - SocketUniquePtr::_nevent::fetch_add
    - bthread_start_urgent
    - bthread_self_tag
    - Socket::ProcessEvent
    - SocketUniquePtr::release
    - bthread_start_background
    - SocketUniquePtr::fd
    - CHECK
    - Address
    - LOG
    linkageType: ''
    returnType: int
    signature: "int Socket::OnInputEvent(void* user_data, uint32_t events,\n                         const
      bthread_attr_t& thread_attr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::Dereference
      Src: /src/brpc/src/brpc/socket.cpp:2298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2300
      start: 2296
    functionDepth: 0
    functionLinenumber: 2296
    functionLinenumberEnd: 2300
    functionName: DereferenceSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 2
    functionsReached:
    - Socket*::Dereference
    linkageType: ''
    returnType: void
    signature: void DereferenceSocket(Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2303,1
    - Dst: SharedPart*::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/socket.cpp:2305,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - now_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2307
      start: 2302
    functionDepth: 0
    functionLinenumber: 2302
    functionLinenumberEnd: 2307
    functionName: Socket::UpdateStatsEverySecond
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetSharedPart
    - SharedPart*::UpdateStatsEverySecond
    linkageType: ''
    returnType: void
    signature: void Socket::UpdateStatsEverySecond(int64_t now_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2311
      start: 2311
    functionDepth: 0
    functionLinenumber: 2311
    functionLinenumberEnd: 2311
    functionName: ObjectPtr
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObjectPtr(const T* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObjectPtr
      Src: /src/brpc/src/brpc/socket.cpp:2316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2316
      start: 2316
    functionDepth: 1
    functionLinenumber: 2316
    functionLinenumberEnd: 2316
    functionName: ShowObject
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ObjectPtr
    linkageType: ''
    returnType: ObjectPtr<T>
    signature: ObjectPtr<T> ShowObject(const T* obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/socket.cpp:2321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - ObjectPtr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2324
      start: 2319
    functionDepth: 1
    functionLinenumber: 2319
    functionLinenumberEnd: 2324
    functionName: '& operator<<(std::ostream& os, const ObjectPtr<T>& obj)'
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ObjectPtr<T>& obj)
  - BBCount: 26
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket.cpp:2328,1
    - Dst: SocketUniquePtr::versioned_ref
      Src: /src/brpc/src/brpc/socket.cpp:2342,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2347,1
    - Dst: SocketUniquePtr::_pipeline_q::size
      Src: /src/brpc/src/brpc/socket.cpp:2349,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2353,1
    - Dst: bthread::get_sizes
      Src: /src/brpc/src/brpc/socket.cpp:2355,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/socket.cpp:2356,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/socket.cpp:2359,1
    - Dst: SocketUniquePtr::GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2360,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:2361,1
    - Dst: SharedPart*::ref_count
      Src: /src/brpc/src/brpc/socket.cpp:2363,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2365,1
    - Dst: SocketPool*::ListSockets
      Src: /src/brpc/src/brpc/socket.cpp:2369,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket.cpp:2370,1
    - Dst: SocketPool*::_numfree::load
      Src: /src/brpc/src/brpc/socket.cpp:2377,1
    - Dst: SocketPool*::_numinflight::load
      Src: /src/brpc/src/brpc/socket.cpp:2379,1
    - Dst: SharedPart*::in_size::load
      Src: /src/brpc/src/brpc/socket.cpp:2384,1
    - Dst: SharedPart*::in_num_messages::load
      Src: /src/brpc/src/brpc/socket.cpp:2385,1
    - Dst: SharedPart*::out_size::load
      Src: /src/brpc/src/brpc/socket.cpp:2386,1
    - Dst: SharedPart*::out_num_messages::load
      Src: /src/brpc/src/brpc/socket.cpp:2387,1
    - Dst: SocketUniquePtr::_fd::load
      Src: /src/brpc/src/brpc/socket.cpp:2390,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:2391,1
    - Dst: SocketUniquePtr::_nevent::load
      Src: /src/brpc/src/brpc/socket.cpp:2394,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/socket.cpp:2397,1
    - Dst: ShowObject
      Src: /src/brpc/src/brpc/socket.cpp:2401,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/socket.cpp:2402,1
    - Dst: dynamic_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/socket.cpp:2404,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/socket.cpp:2404,1
    - Dst: InputMessenger*::NameOfProtocol
      Src: /src/brpc/src/brpc/socket.cpp:2406,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2408,1
    - Dst: SocketUniquePtr::_read_buf::size
      Src: /src/brpc/src/brpc/socket.cpp:2413,1
    - Dst: SocketUniquePtr::parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2425,1
    - Dst: dynamic_cast<Describable*>
      Src: /src/brpc/src/brpc/socket.cpp:2426,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/socket.cpp:2428,1
    - Dst: Describable*::Describe
      Src: /src/brpc/src/brpc/socket.cpp:2432,1
    - Dst: ShowObject
      Src: /src/brpc/src/brpc/socket.cpp:2435,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2437,1
    - Dst: SocketUniquePtr::_ninprocess::load
      Src: /src/brpc/src/brpc/socket.cpp:2441,1
    - Dst: SocketUniquePtr::_auth_flag_error::load
      Src: /src/brpc/src/brpc/socket.cpp:2442,1
    - Dst: SocketUniquePtr::_logoff_flag::load
      Src: /src/brpc/src/brpc/socket.cpp:2445,1
    - Dst: SocketUniquePtr::additional_ref_status
      Src: /src/brpc/src/brpc/socket.cpp:2447,1
    - Dst: SocketUniquePtr::_total_streams_unconsumed_size::load
      Src: /src/brpc/src/brpc/socket.cpp:2449,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::load
      Src: /src/brpc/src/brpc/socket.cpp:2451,1
    - Dst: SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/src/brpc/socket.cpp:2453,1
    - Dst: SocketUniquePtr::_write_head::load
      Src: /src/brpc/src/brpc/socket.cpp:2460,1
    - Dst: SSLStateToString
      Src: /src/brpc/src/brpc/socket.cpp:2461,1
    - Dst: SocketUniquePtr::_ssl_ctx::get
      Src: /src/brpc/src/brpc/socket.cpp:2462,1
    - Dst: SocketSSLContext*::sni_name::empty
      Src: /src/brpc/src/brpc/socket.cpp:2465,1
    - Dst: Print
      Src: /src/brpc/src/brpc/socket.cpp:2471,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2480,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2489,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2493,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2503,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2507,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2517,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2521,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2531,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2540,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2560,1
    - Dst: SocketUniquePtr::_rdma_ep::DebugInfo
      Src: /src/brpc/src/brpc/socket.cpp:2595,1
    - Dst: SocketUniquePtr::_io_event::bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:2598,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 116
    argCount: 2
    argNames:
    - ' os'
    - id
    argTypes:
    - std::ostream
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2599
      start: 2326
    functionDepth: 2
    functionLinenumber: 2326
    functionLinenumberEnd: 2599
    functionName: Socket::DebugSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - getsockopt
    - Describable*::Describe
    - SSLStateToString
    - Print
    - SocketPool*::_numinflight::load
    - VersionOfVRef
    - SocketUniquePtr::_read_buf::size
    - arraysize
    - SocketUniquePtr::additional_ref_status
    - SharedPart*::out_size::load
    - SocketUniquePtr::_write_head::load
    - SocketUniquePtr::_fd::load
    - SharedPart*::socket_pool::load
    - SharedPart*::out_num_messages::load
    - SocketUniquePtr::_io_event::bthread_tag
    - dynamic_cast<Describable*>
    - SocketUniquePtr::ssl_state
    - butil::cpuwide_time_us
    - SocketUniquePtr::_rdma_ep::DebugInfo
    - SocketUniquePtr::_nevent::load
    - bthread::get_sizes
    - SharedPart*::in_size::load
    - SharedPart*::in_num_messages::load
    - SocketUniquePtr::_pipeline_q::size
    - NRefOfVRef
    - SocketUniquePtr::_logoff_flag::load
    - SocketUniquePtr::_agent_socket_id::load
    - InputMessenger*::NameOfProtocol
    - SocketUniquePtr::_ssl_ctx::get
    - butil::gettimeofday_us
    - SharedPart*::ref_count
    - SocketUniquePtr::id
    - SocketSSLContext*::sni_name::empty
    - SocketUniquePtr::_ninprocess::load
    - SocketPool*::_numfree::load
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - SocketUniquePtr::preferred_index
    - SocketUniquePtr::GetSharedPart
    - SocketUniquePtr::versioned_ref
    - SocketPool*::ListSockets
    - dynamic_cast<InputMessenger*>
    - SocketUniquePtr::_total_streams_unconsumed_size::load
    - butil::class_name_str
    - SocketUniquePtr::_auth_flag_error::load
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::parsing_context
    - SocketUniquePtr::_ninflight_app_health_check::load
    - std::vector::size
    - ShowObject
    linkageType: ''
    returnType: void
    signature: void Socket::DebugSocket(std::ostream& os, SocketId id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2603,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/socket.cpp:2606,1
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:2607,1
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/socket.cpp:2609,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2613
      start: 2601
    functionDepth: 7
    functionLinenumber: 2601
    functionLinenumberEnd: 2613
    functionName: Socket::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - bvar::FileDumper::close
    - Socket::Connect
    - LOG
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int Socket::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2616,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:2617,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2618,1
    - Dst: std::set<StreamId>::set<StreamId>
      Src: /src/brpc/src/brpc/socket.cpp:2622,1
    - Dst: insert
      Src: /src/brpc/src/brpc/socket.cpp:2624,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2627
      start: 2615
    functionDepth: 0
    functionLinenumber: 2615
    functionLinenumberEnd: 2627
    functionName: Socket::AddStream
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - std::set<StreamId>::set<StreamId>
    - insert
    - Failed
    - lock
    linkageType: ''
    returnType: int
    signature: int Socket::AddStream(StreamId stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2630,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2632,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2633,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket.cpp:2636,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2637,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2639
      start: 2629
    functionDepth: 1
    functionLinenumber: 2629
    functionLinenumberEnd: 2639
    functionName: Socket::RemoveStream
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - erase
    - CHECK
    - lock
    - unlock
    linkageType: ''
    returnType: int
    signature: int Socket::RemoveStream(StreamId stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/socket.cpp:2642,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:2642,1
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2644,1
    - Dst: std::set::swap
      Src: /src/brpc/src/brpc/socket.cpp:2649,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2651,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/socket.cpp:2652,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/socket.cpp:2653,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2654,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/socket.cpp:2654,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - error_code
    - ' error_text'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2656
      start: 2641
    functionDepth: 2
    functionLinenumber: 2641
    functionLinenumberEnd: 2656
    functionName: Socket::ResetAllStreams
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - brpc::Stream::SetFailed
    - std::set::begin
    - unlock
    - std::set::end
    - std::set::swap
    - DCHECK
    - c_str
    - Failed
    - lock
    linkageType: ''
    returnType: void
    signature: void Socket::ResetAllStreams(int error_code, const std::string& error_text)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::CheckHealth
      Src: /src/brpc/src/brpc/socket.cpp:2659,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2660
      start: 2658
    functionDepth: 0
    functionLinenumber: 2658
    functionLinenumberEnd: 2660
    functionName: SocketUser::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket*::CheckHealth
    linkageType: ''
    returnType: int
    signature: int SocketUser::CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2664
      start: 2662
    functionDepth: 1
    functionLinenumber: 2662
    functionLinenumberEnd: 2664
    functionName: SocketUser::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void SocketUser::AfterRevived(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2673
      start: 2668
    functionDepth: 0
    functionLinenumber: 2668
    functionLinenumberEnd: 2673
    functionName: SocketPool::SocketPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketPool::SocketPool(const SocketOptions& opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/socket.cpp:2676,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket.cpp:2677,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2679,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2680,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2683
      start: 2675
    functionDepth: 3
    functionLinenumber: 2675
    functionLinenumberEnd: 2683
    functionName: SocketPool::~SocketPool()
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - end
    - SocketUniquePtr::ReleaseAdditionalReference
    - brpc::SetTrackMeAddress
    - begin
    linkageType: ''
    returnType: void
    signature: void SocketPool::~SocketPool()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2706,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket.cpp:2707,1
    - Dst: back
      Src: /src/brpc/src/brpc/socket.cpp:2710,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/socket.cpp:2711,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2713,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2716,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2717,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket.cpp:2725,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2726,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2727,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2731
      start: 2685
    functionDepth: 3
    functionLinenumber: 2685
    functionLinenumberEnd: 2731
    functionName: SocketPool::GetSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - back
    - get_client_side_messenger
    - pop_back
    - fetch_add
    - BAIDU_SCOPED_LOCK
    - empty
    - brpc::SetTrackMeAddress
    - fetch_sub
    linkageType: ''
    returnType: int
    signature: int SocketPool::GetSocket(SocketUniquePtr* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2738,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/socket.cpp:2740,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2741,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/socket.cpp:2742,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2745,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2746,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - sock
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2749
      start: 2733
    functionDepth: 1
    functionLinenumber: 2733
    functionLinenumberEnd: 2749
    functionName: SocketPool::ReturnSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - Socket*::SetFailed
    - BAIDU_SCOPED_LOCK
    - push_back
    - Socket*::id
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void SocketPool::ReturnSocket(Socket* sock)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket.cpp:2752,1
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2755,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:2756,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:2757,1
    - Dst: std::vector<SocketId>*::capacity
      Src: /src/brpc/src/brpc/socket.cpp:2760,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2761,1
    - Dst: std::vector<SocketId>*::reserve
      Src: /src/brpc/src/brpc/socket.cpp:2762,1
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2763,1
    - Dst: std::vector<SocketId>*::insert
      Src: /src/brpc/src/brpc/socket.cpp:2766,1
    - Dst: std::vector<SocketId>*::end
      Src: /src/brpc/src/brpc/socket.cpp:2766,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket.cpp:2766,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket.cpp:2766,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/socket.cpp:2769,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2772,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - out
    - max_count
    argTypes:
    - std::vector<SocketId>*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2773
      start: 2751
    functionDepth: 1
    functionLinenumber: 2751
    functionLinenumberEnd: 2773
    functionName: SocketPool::ListSockets
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::vector<SocketId>*::capacity
    - unlock
    - std::vector<SocketId>*::reserve
    - std::vector<SocketId>*::push_back
    - std::vector<SocketId>*::insert
    - begin
    - size
    - std::vector<SocketId>*::clear
    - lock
    - std::vector<SocketId>*::end
    linkageType: ''
    returnType: void
    signature: void SocketPool::ListSockets(std::vector<SocketId>* out, size_t max_count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2777,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:2779,1
    - Dst: SharedPart::SharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2779,1
    - Dst: SharedPart*::AddRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2780,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2782,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2784,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2785,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2790
      start: 2775
    functionDepth: 1
    functionLinenumber: 2775
    functionLinenumberEnd: 2790
    functionName: Socket::GetOrNewSharedPartSlower
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::RemoveRefManually
    - SharedPart*::AddRefManually
    - SharedPart::SharedPart
    - compare_exchange_strong
    - CHECK
    - id
    - GetSharedPart
    linkageType: ''
    returnType: Socket::SharedPart
    signature: Socket::SharedPart * Socket::GetOrNewSharedPartSlower()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2793,1
    - Dst: SharedPart*::AddRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2794,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:2796,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2798,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - main_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2800
      start: 2792
    functionDepth: 0
    functionLinenumber: 2792
    functionLinenumberEnd: 2800
    functionName: Socket::ShareStats
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::AddRefManually
    - exchange
    - Socket*::GetOrNewSharedPart
    - SharedPart*::RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void Socket::ShareStats(Socket* main_socket)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2804,1
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2807,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2809,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2813,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:2816,1
    - Dst: user
      Src: /src/brpc/src/brpc/socket.cpp:2817,1
    - Dst: SocketPool::SocketPool
      Src: /src/brpc/src/brpc/socket.cpp:2823,1
    - Dst: SharedPart*::socket_pool::compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2825,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2828,1
    - Dst: SocketPool*::GetSocket
      Src: /src/brpc/src/brpc/socket.cpp:2832,1
    - Dst: Socket::ShareStats
      Src: /src/brpc/src/brpc/socket.cpp:2835,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2836,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2836,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2837,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - pooled_socket
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2841
      start: 2802
    functionDepth: 1
    functionLinenumber: 2802
    functionLinenumberEnd: 2841
    functionName: Socket::GetPooledSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - user
    - remote_side
    - SocketPool::SocketPool
    - SharedPart*::socket_pool::compare_exchange_strong
    - Socket::ShareStats
    - CHECK
    - parsing_context
    - LOG
    - SharedPart*::socket_pool::load
    - SocketPool*::GetSocket
    linkageType: ''
    returnType: int
    signature: int Socket::GetPooledSocket(SocketUniquePtr* pooled_socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:2844,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2846,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2847,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2852,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2853,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2854,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2857,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2857,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2858,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:2865,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:2869,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2869,1
    - Dst: SocketPool*::ReturnSocket
      Src: /src/brpc/src/brpc/socket.cpp:2870,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2871,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2873
      start: 2843
    functionDepth: 2
    functionLinenumber: 2843
    functionLinenumberEnd: 2873
    functionName: Socket::ReturnToPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::RemoveRefManually
    - butil::cpuwide_time_us
    - CHECK
    - store
    - SocketPool*::ReturnSocket
    - Socket::SetFailed
    - parsing_context
    - exchange
    - LOG
    - SharedPart*::socket_pool::load
    linkageType: ''
    returnType: int
    signature: int Socket::ReturnToPool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2876,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2878,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2881
      start: 2875
    functionDepth: 0
    functionLinenumber: 2875
    functionLinenumberEnd: 2881
    functionName: Socket::HasSocketPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetSharedPart
    - SharedPart*::socket_pool::load
    linkageType: ''
    returnType: bool
    signature: bool Socket::HasSocketPool() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket.cpp:2884,1
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2885,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2889,1
    - Dst: SocketPool*::ListSockets
      Src: /src/brpc/src/brpc/socket.cpp:2893,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - max_count
    argTypes:
    - std::vector<SocketId>*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2894
      start: 2883
    functionDepth: 1
    functionLinenumber: 2883
    functionLinenumberEnd: 2894
    functionName: Socket::ListPooledSockets
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketPool*::ListSockets
    - std::vector<SocketId>*::clear
    - GetSharedPart
    - SharedPart*::socket_pool::load
    linkageType: ''
    returnType: void
    signature: void Socket::ListPooledSockets(std::vector<SocketId>* out, size_t max_count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2897,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2901,1
    - Dst: SocketPool*::_numfree::load
      Src: /src/brpc/src/brpc/socket.cpp:2905,1
    - Dst: SocketPool*::_numinflight::load
      Src: /src/brpc/src/brpc/socket.cpp:2906,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - numfree
    - numinflight
    argTypes:
    - int*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2908
      start: 2896
    functionDepth: 0
    functionLinenumber: 2896
    functionLinenumberEnd: 2908
    functionName: Socket::GetPooledSocketStats
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketPool*::_numinflight::load
    - GetSharedPart
    - SocketPool*::_numfree::load
    - SharedPart*::socket_pool::load
    linkageType: ''
    returnType: bool
    signature: bool Socket::GetPooledSocketStats(int* numfree, int* numinflight)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2912,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:2917,1
    - Dst: user
      Src: /src/brpc/src/brpc/socket.cpp:2918,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket.cpp:2924,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2925,1
    - Dst: Socket::ShareStats
      Src: /src/brpc/src/brpc/socket.cpp:2928,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - short_socket
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2930
      start: 2910
    functionDepth: 3
    functionLinenumber: 2910
    functionLinenumberEnd: 2930
    functionName: Socket::GetShortSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - user
    - remote_side
    - get_client_side_messenger
    - Socket::ShareStats
    - brpc::SetTrackMeAddress
    - LOG
    linkageType: ''
    returnType: int
    signature: int Socket::GetShortSocket(SocketUniquePtr* short_socket)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2933,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2936,1
    - Dst: checkfn
      Src: /src/brpc/src/brpc/socket.cpp:2937,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:2937,1
    - Dst: SocketUniquePtr*::swap
      Src: /src/brpc/src/brpc/socket.cpp:2938,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2941,1
    - Dst: Socket::GetShortSocket
      Src: /src/brpc/src/brpc/socket.cpp:2944,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2945,1
    - Dst: checkfn
      Src: /src/brpc/src/brpc/socket.cpp:2948,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:2948,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2951,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2954,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/socket.cpp:2955,1
    - Dst: SocketUniquePtr*::swap
      Src: /src/brpc/src/brpc/socket.cpp:2956,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2959,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 25
    argCount: 1
    argNames:
    - out
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2962
      start: 2932
    functionDepth: 4
    functionLinenumber: 2932
    functionLinenumberEnd: 2962
    functionName: Socket::GetAgentSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - checkfn
    - SocketUniquePtr::ReleaseAdditionalReference
    - SocketUniquePtr::get
    - SocketUniquePtr::id
    - load
    - compare_exchange_strong
    - brpc::SetTrackMeAddress
    - SocketUniquePtr*::swap
    - LOG
    - Socket::GetShortSocket
    linkageType: ''
    returnType: int
    signature: int Socket::GetAgentSocket(SocketUniquePtr* out, bool (*checkfn)(Socket*))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2965,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:2969,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - out
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2970
      start: 2964
    functionDepth: 0
    functionLinenumber: 2964
    functionLinenumberEnd: 2970
    functionName: Socket::PeekAgentSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Address
    - load
    linkageType: ''
    returnType: int
    signature: int Socket::PeekAgentSocket(SocketUniquePtr* out) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/socket.cpp:2973,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/socket.cpp:2974,1
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2976,1
    - Dst: memset
      Src: /src/brpc/src/brpc/socket.cpp:2980,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - s
    argTypes:
    - SocketStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2982
      start: 2972
    functionDepth: 1
    functionLinenumber: 2972
    functionLinenumberEnd: 2982
    functionName: Socket::GetStat
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    - memset
    - GetSharedPart
    linkageType: ''
    returnType: void
    signature: void Socket::GetStat(SocketStat* s) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2985,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2985,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2986
      start: 2984
    functionDepth: 0
    functionLinenumber: 2984
    functionLinenumberEnd: 2986
    functionName: Socket::AddInputBytes
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void Socket::AddInputBytes(size_t bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2988,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2988,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2989
      start: 2987
    functionDepth: 0
    functionLinenumber: 2987
    functionLinenumberEnd: 2989
    functionName: Socket::AddInputMessages
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void Socket::AddInputMessages(size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2992,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2996
      start: 2990
    functionDepth: 0
    functionLinenumber: 2990
    functionLinenumberEnd: 2996
    functionName: Socket::CancelUnwrittenBytes
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 2
    functionsReached:
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void Socket::CancelUnwrittenBytes(size_t bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2998,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2998,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:2999,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2999,1
    - Dst: Socket::CancelUnwrittenBytes
      Src: /src/brpc/src/brpc/socket.cpp:3001,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3002
      start: 2997
    functionDepth: 1
    functionLinenumber: 2997
    functionLinenumberEnd: 3002
    functionName: Socket::AddOutputBytes
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - Socket::CancelUnwrittenBytes
    - butil::cpuwide_time_us
    - fetch_add
    - store
    linkageType: ''
    returnType: void
    signature: void Socket::AddOutputBytes(size_t bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:3004,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:3004,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3005
      start: 3003
    functionDepth: 0
    functionLinenumber: 3003
    functionLinenumberEnd: 3005
    functionName: Socket::AddOutputMessages
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - GetOrNewSharedPart
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void Socket::AddOutputMessages(size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:3008,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3013
      start: 3007
    functionDepth: 0
    functionLinenumber: 3007
    functionLinenumberEnd: 3013
    functionName: Socket::main_socket_id
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - GetSharedPart
    linkageType: ''
    returnType: SocketId
    signature: SocketId Socket::main_socket_id() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/socket.cpp:3016,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:3017,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:3018,1
    - Dst: Socket::ReturnToPool
      Src: /src/brpc/src/brpc/socket.cpp:3021,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:3023,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3026
      start: 3015
    functionDepth: 3
    functionLinenumber: 3015
    functionLinenumberEnd: 3026
    functionName: Socket::OnProgressiveReadCompleted
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::ReturnToPool
    - load
    - is_read_progressive
    - Socket::SetFailed
    - exchange
    linkageType: ''
    returnType: void
    signature: void Socket::OnProgressiveReadCompleted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3030
      start: 3028
    functionDepth: 0
    functionLinenumber: 3028
    functionLinenumberEnd: 3030
    functionName: SocketSSLContext::SocketSSLContext
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketSSLContext::SocketSSLContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_free
      Src: /src/brpc/src/brpc/socket.cpp:3034,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3036
      start: 3032
    functionDepth: 0
    functionLinenumber: 3032
    functionLinenumberEnd: 3036
    functionName: SocketSSLContext::~SocketSSLContext()
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SSL_CTX_free
    linkageType: ''
    returnType: void
    signature: void SocketSSLContext::~SocketSSLContext()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:3044,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:3045,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:3049,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:3050,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' sock'
    argTypes:
    - ostream
    - brpc::Socket
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3056
      start: 3042
    functionDepth: 0
    functionLinenumber: 3042
    functionLinenumberEnd: 3056
    functionName: '& operator<<(ostream& os, const brpc::Socket& sock)'
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - id
    - remote_side
    - local_side
    - fd
    linkageType: ''
    returnType: ostream
    signature: ostream & operator<<(ostream& os, const brpc::Socket& sock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:3044,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:3045,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:3049,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:3050,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' sock'
    argTypes:
    - ostream
    - brpc::Socket
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3056
      start: 3042
    functionDepth: 0
    functionLinenumber: 3042
    functionLinenumberEnd: 3056
    functionName: '& operator<<(ostream& os, const brpc::Socket& sock)'
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - id
    - remote_side
    - local_side
    - fd
    linkageType: ''
    returnType: ostream
    signature: ostream & operator<<(ostream& os, const brpc::Socket& sock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: brpc::DescribeOptions
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DescribeOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: ~Describable()
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Describable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/describable.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::Describable::Describe
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void Describe(std::ostream& os, const DescribeOptions&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~NonConstDescribable()
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NonConstDescribable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/describable.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: brpc::NonConstDescribable::Describe
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void Describe(std::ostream& os, const DescribeOptions&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Describe
      Src: /src/brpc/src/brpc/describable.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - Describable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 59
    functionName: '& operator<<(std::ostream& os, const Describable& obj)'
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - Describe
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Describable& obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Describe
      Src: /src/brpc/src/brpc/describable.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - NonConstDescribable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: "& operator<<(std::ostream& os,\n                                NonConstDescribable&
      obj)"
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - Describe
    linkageType: ''
    returnType: std::ostream
    signature: "std::ostream & operator<<(std::ostream& os,\n                                NonConstDescribable&
      obj)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rdbuf
      Src: /src/brpc/src/brpc/describable.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' dest'
    - indent
    argTypes:
    - std::ostream
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: brpc::IndentingOStream::IndentingOStream
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - rdbuf
    linkageType: ''
    returnType: void
    signature: void IndentingOStream(std::ostream& dest, int indent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sputn
      Src: /src/brpc/src/brpc/describable.h:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/describable.h:100,1
    - Dst: size
      Src: /src/brpc/src/brpc/describable.h:100,1
    - Dst: sputc
      Src: /src/brpc/src/brpc/describable.h:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: brpc::IndentingOStream::overflow
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - size
    - sputn
    - sputc
    - data
    linkageType: ''
    returnType: int
    signature: int overflow(int ch) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: brpc::DescribeOptions
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DescribeOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: ~Describable()
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Describable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/describable.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::Describable::Describe
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void Describe(std::ostream& os, const DescribeOptions&) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: ~NonConstDescribable()
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NonConstDescribable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/describable.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: brpc::NonConstDescribable::Describe
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: void
    signature: void Describe(std::ostream& os, const DescribeOptions&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Describe
      Src: /src/brpc/src/brpc/describable.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - Describable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 59
    functionName: '& operator<<(std::ostream& os, const Describable& obj)'
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - Describe
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Describable& obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Describe
      Src: /src/brpc/src/brpc/describable.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - NonConstDescribable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: "& operator<<(std::ostream& os,\n                                NonConstDescribable&
      obj)"
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - Describe
    linkageType: ''
    returnType: std::ostream
    signature: "std::ostream & operator<<(std::ostream& os,\n                                NonConstDescribable&
      obj)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rdbuf
      Src: /src/brpc/src/brpc/describable.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' dest'
    - indent
    argTypes:
    - std::ostream
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 96
    functionName: brpc::IndentingOStream::IndentingOStream
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - rdbuf
    linkageType: ''
    returnType: void
    signature: void IndentingOStream(std::ostream& dest, int indent)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sputn
      Src: /src/brpc/src/brpc/describable.h:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/describable.h:100,1
    - Dst: size
      Src: /src/brpc/src/brpc/describable.h:100,1
    - Dst: sputc
      Src: /src/brpc/src/brpc/describable.h:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: brpc::IndentingOStream::overflow
    functionSourceFile: /src/brpc/src/brpc/describable.h
    functionUses: 0
    functionsReached:
    - size
    - sputn
    - sputc
    - data
    linkageType: ''
    returnType: int
    signature: int overflow(int ch) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedRequest::SharedCtor
      Src: /src/brpc/src/brpc/serialized_request.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::SerializedRequest::SerializedRequest
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 3
    functionsReached:
    - brpc::SerializedRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SerializedRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedRequest::SharedCtor
      Src: /src/brpc/src/brpc/serialized_request.cpp:32,1
    - Dst: brpc::SerializedRequest::MergeFrom
      Src: /src/brpc/src/brpc/serialized_request.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::SerializedRequest::SerializedRequest
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 3
    functionsReached:
    - brpc::SerializedRequest::MergeFrom
    - brpc::SerializedRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SerializedRequest(const SerializedRequest&
      from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::SerializedRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/serialized_request.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: SerializedRequest::~SerializedRequest()
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::~SerializedRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: brpc::SerializedRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/serialized_request.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::SerializedRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 1
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/serialized_request.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::SerializedRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t SerializedRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/serialized_request.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: brpc::SerializedRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 1
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::MergeFrom(const SerializedRequest& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/serialized_request.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - other
    argTypes:
    - SerializedRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::SerializedRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::Swap(SerializedRequest* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/serialized_request.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: brpc::SerializedRequest::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata SerializedRequest::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedRequest::SharedCtor
      Src: /src/brpc/src/brpc/serialized_request.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::SerializedRequest::SerializedRequest
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 3
    functionsReached:
    - brpc::SerializedRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SerializedRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SerializedRequest::SharedCtor
      Src: /src/brpc/src/brpc/serialized_request.cpp:32,1
    - Dst: brpc::SerializedRequest::MergeFrom
      Src: /src/brpc/src/brpc/serialized_request.cpp:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::SerializedRequest::SerializedRequest
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 3
    functionsReached:
    - brpc::SerializedRequest::MergeFrom
    - brpc::SerializedRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SerializedRequest(const SerializedRequest&
      from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::SerializedRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/serialized_request.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: SerializedRequest::~SerializedRequest()
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::~SerializedRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: brpc::SerializedRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/serialized_request.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::SerializedRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 1
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/serialized_request.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::SerializedRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t SerializedRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/serialized_request.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: brpc::SerializedRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 2
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::MergeFrom(const SerializedRequest& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/serialized_request.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - other
    argTypes:
    - SerializedRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::SerializedRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void SerializedRequest::Swap(SerializedRequest* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/serialized_request.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: brpc::SerializedRequest::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/serialized_request.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata SerializedRequest::GetMetadata() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:31,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::remove_last_char
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::empty
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece remove_last_char(butil::StringPiece s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: service_name::empty
      Src: /src/brpc/src/brpc/restful.cpp:38,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:42,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - RestfulMethodPath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 47
    functionName: '& operator<<(std::ostream& os, const RestfulMethodPath& p)'
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - remove_last_char
    - service_name::empty
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RestfulMethodPath&
      p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: size
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: size
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: size
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: empty
      Src: /src/brpc/src/brpc/restful.cpp:52,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:53,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:54,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:57,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:58,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:59,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:60,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:60,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:60,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:62,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:63,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:63,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 66
    functionName: brpc::RestfulMethodPath::to_string
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - std::string::append
    - empty
    - butil::StringPiece::data
    - remove_last_char
    - size
    - butil::StringPiece::size
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string RestfulMethodPath::to_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - RestfulMethodPath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::DebugPrinter
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DebugPrinter(const RestfulMethodPath& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - DebugPrinter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: '& operator<<(std::ostream& os, const DebugPrinter& p)'
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const DebugPrinter& p)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/restful.cpp:84,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:86,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:97,1
    - Dst: brpc::is_url_char
      Src: /src/brpc/src/brpc/restful.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:102,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:103,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/restful.cpp:114,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/restful.cpp:115,1
    - Dst: RestfulMethodPath*::service_name::clear
      Src: /src/brpc/src/brpc/restful.cpp:123,1
    - Dst: RestfulMethodPath*::prefix::clear
      Src: /src/brpc/src/brpc/restful.cpp:124,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:128,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/restful.cpp:129,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/restful.cpp:131,1
    - Dst: RestfulMethodPath*::service_name::assign
      Src: /src/brpc/src/brpc/restful.cpp:133,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:133,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/restful.cpp:134,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:135,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:136,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:136,1
    - Dst: RestfulMethodPath*::prefix::empty
      Src: /src/brpc/src/brpc/restful.cpp:139,1
    - Dst: RestfulMethodPath*::prefix::reserve
      Src: /src/brpc/src/brpc/restful.cpp:140,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:140,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:142,1
    - Dst: RestfulMethodPath*::prefix::append
      Src: /src/brpc/src/brpc/restful.cpp:143,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:143,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:143,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:146,1
    - Dst: butil::StringPiece::back
      Src: /src/brpc/src/brpc/restful.cpp:147,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:150,1
    - Dst: RestfulMethodPath*::service_name::assign
      Src: /src/brpc/src/brpc/restful.cpp:156,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:156,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:156,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:157,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:160,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:164,1
    - Dst: RestfulMethodPath*::prefix::append
      Src: /src/brpc/src/brpc/restful.cpp:165,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:165,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:165,1
    - Dst: RestfulMethodPath*::postfix::clear
      Src: /src/brpc/src/brpc/restful.cpp:172,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:174,1
    - Dst: RestfulMethodPath*::postfix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:175,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:177,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:178,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:178,1
    - Dst: RestfulMethodPath*::postfix::empty
      Src: /src/brpc/src/brpc/restful.cpp:180,1
    - Dst: RestfulMethodPath*::postfix::reserve
      Src: /src/brpc/src/brpc/restful.cpp:181,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:181,1
    - Dst: RestfulMethodPath*::postfix::append
      Src: /src/brpc/src/brpc/restful.cpp:183,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:183,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:183,1
    - Dst: RestfulMethodPath*::postfix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:184,1
    - Dst: RestfulMethodPath*::postfix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:187,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:189,1
    - Dst: brpc::DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:192,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 77
    argCount: 2
    argNames:
    - path
    - path_out
    argTypes:
    - butil::StringPiece
    - RestfulMethodPath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 194
    functionName: brpc::ParseRestfulPath
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - RestfulMethodPath*::postfix::push_back
    - RestfulMethodPath*::postfix::empty
    - brpc::is_url_char
    - butil::StringPiece::data
    - RestfulMethodPath*::postfix::append
    - VLOG
    - RestfulMethodPath*::prefix::append
    - butil::StringPiece::substr
    - RestfulMethodPath*::prefix::empty
    - RestfulMethodPath*::postfix::reserve
    - RestfulMethodPath*::prefix::push_back
    - brpc::DebugPrinter
    - RestfulMethodPath*::postfix::clear
    - butil::StringPiece::back
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    - butil::StringPiece::remove_prefix
    - RestfulMethodPath*::service_name::assign
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::find
    - RestfulMethodPath*::prefix::reserve
    - RestfulMethodPath*::prefix::clear
    - butil::StringSplitter::field
    - RestfulMethodPath*::service_name::clear
    linkageType: ''
    returnType: bool
    signature: "bool ParseRestfulPath(butil::StringPiece path,\n                      RestfulMethodPath*
      path_out)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:199,1
    - Dst: std::vector<RestfulMapping>*::clear
      Src: /src/brpc/src/brpc/restful.cpp:202,1
    - Dst: std::vector<RestfulMapping>*::reserve
      Src: /src/brpc/src/brpc/restful.cpp:203,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:205,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:205,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/restful.cpp:205,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:210,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:211,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:225,1
    - Dst: brpc::ParseRestfulPath
      Src: /src/brpc/src/brpc/restful.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:227,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/restful.cpp:232,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:234,1
    - Dst: RestfulMapping::method_name::assign
      Src: /src/brpc/src/brpc/restful.cpp:238,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:238,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:239,1
    - Dst: std::vector<RestfulMapping>*::push_back
      Src: /src/brpc/src/brpc/restful.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:247,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/restful.cpp:248,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:248,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:248,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 37
    argCount: 2
    argNames:
    - ' mappings'
    - list
    argTypes:
    - butil::StringPiece
    - std::vector<RestfulMapping>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 253
    functionName: brpc::ParseRestfulMappings
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::vector<RestfulMapping>*::reserve
    - butil::StringPiece::size
    - butil::StringSplitter::length
    - brpc::ParseRestfulPath
    - std::vector<RestfulMapping>*::push_back
    - std::vector<RestfulMapping>*::clear
    - RestfulMapping::method_name::assign
    - butil::StringSplitter::field
    - butil::StringPiece::data
    - brpc::size
    - data
    - butil::BasicStringPiece::BasicStringPiece
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::trim_spaces
    linkageType: ''
    returnType: bool
    signature: "bool ParseRestfulMappings(const butil::StringPiece& mappings,\n                          std::vector<RestfulMapping>*
      list)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClearMethods
      Src: /src/brpc/src/brpc/restful.cpp:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 257
    functionName: RestfulMap::~RestfulMap()
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - ClearMethods
    linkageType: ''
    returnType: void
    signature: void RestfulMap::~RestfulMap()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:266,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/restful.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:272,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/restful.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:277,1
    - Dst: to_string
      Src: /src/brpc/src/brpc/restful.cpp:283,1
    - Dst: find
      Src: /src/brpc/src/brpc/restful.cpp:284,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:286,1
    - Dst: DedupMap::const_iterator::second::method::full_name
      Src: /src/brpc/src/brpc/restful.cpp:287,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/restful.cpp:299,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 5
    argNames:
    - ' path'
    - service
    - ' params'
    - ' method_name'
    - status
    argTypes:
    - RestfulMethodPath
    - google::protobuf::Service*
    - Server::MethodProperty::OpaqueParams
    - std::string
    - MethodStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 301
    functionName: brpc::RestfulMap::AddMethod
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - end
    - find
    - to_string
    - google::protobuf::Service*::GetDescriptor
    - LOG
    - DedupMap::const_iterator::second::method::full_name
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: bool
    signature: "bool RestfulMap::AddMethod(const RestfulMethodPath& path,\n                           google::protobuf::Service*
      service,\n                           const Server::MethodProperty::OpaqueParams&
      params,\n                           const std::string& method_name,\n                           MethodStatus*
      status)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:304,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:305,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:306,1
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:311,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 312
    functionName: brpc::RestfulMap::ClearMethods
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void RestfulMap::ClearMethods()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: prefix::compare
      Src: /src/brpc/src/brpc/restful.cpp:319,1
    - Dst: std::lexicographical_compare
      Src: /src/brpc/src/brpc/restful.cpp:329,1
    - Dst: postfix::rbegin
      Src: /src/brpc/src/brpc/restful.cpp:330,1
    - Dst: postfix::rend
      Src: /src/brpc/src/brpc/restful.cpp:330,1
    - Dst: postfix::rbegin
      Src: /src/brpc/src/brpc/restful.cpp:331,1
    - Dst: postfix::rend
      Src: /src/brpc/src/brpc/restful.cpp:331,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - e1
    - e2
    argTypes:
    - RestfulMethodProperty*
    - RestfulMethodProperty*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 333
    functionName: "operator()(const RestfulMethodProperty* e1,\n                    const
      RestfulMethodProperty* e2) const"
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::lexicographical_compare
    - prefix::compare
    - postfix::rend
    - postfix::rbegin
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const RestfulMethodProperty* e1,\n                    const
      RestfulMethodProperty* e2) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:337,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/restful.cpp:338,1
    - Dst: brpc::RestfulMap::size
      Src: /src/brpc/src/brpc/restful.cpp:338,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:339,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:339,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/restful.cpp:341,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/restful.cpp:343,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:343,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:343,1
    - Dst: CompareItemInPathList
      Src: /src/brpc/src/brpc/restful.cpp:344,1
    - Dst: VLOG_IS_ON
      Src: /src/brpc/src/brpc/restful.cpp:345,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:348,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:349,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:352,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/restful.cpp:352,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 336
    functionDepth: 2
    functionLinenumber: 336
    functionLinenumberEnd: 354
    functionName: brpc::RestfulMap::PrepareForFinding
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::ostringstream::str
    - VLOG_IS_ON
    - std::sort
    - brpc::RestfulMap::size
    - CompareItemInPathList
    - push_back
    - clear
    - begin
    - VLOG
    - reserve
    linkageType: ''
    returnType: void
    signature: void RestfulMap::PrepareForFinding()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece*::empty
      Src: /src/brpc/src/brpc/restful.cpp:360,1
    - Dst: butil::StringPiece*::back
      Src: /src/brpc/src/brpc/restful.cpp:363,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:364,1
    - Dst: butil::StringPiece*::rfind
      Src: /src/brpc/src/brpc/restful.cpp:366,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:370,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/restful.cpp:370,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - path
    argTypes:
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 372
    functionName: brpc::RemoveLastComponent
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::back
    - butil::StringPiece*::remove_suffix
    - butil::StringPiece*::empty
    - butil::StringPiece*::size
    - butil::StringPiece*::rfind
    linkageType: ''
    returnType: bool
    signature: bool RemoveLastComponent(butil::StringPiece* path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/restful.cpp:377,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/restful.cpp:377,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:378,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:378,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/restful.cpp:378,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:380,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:381,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:381,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:381,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:383,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 375
    functionDepth: 2
    functionLinenumber: 375
    functionLinenumberEnd: 385
    functionName: brpc::NormalizeSlashes
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string::append
    - brpc::size
    - data
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string NormalizeSlashes(const butil::StringPiece& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/restful.cpp:390,1
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:391,1
    - Dst: erase
      Src: /src/brpc/src/brpc/restful.cpp:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 394
    functionName: brpc::RestfulMap::RemoveByPathString
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - erase
    - empty
    - clear
    linkageType: ''
    returnType: size_t
    signature: size_t RestfulMap::RemoveByPathString(const std::string& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' path'
    - p
    argTypes:
    - butil::StringPiece
    - RestfulMethodProperty*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 400
    functionName: "operator()(const butil::StringPiece& path,\n                    const
      RestfulMethodProperty* p) const"
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const butil::StringPiece& path,\n                    const
      RestfulMethodProperty* p) const"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/restful.cpp:406,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:407,1
    - Dst: NormalizeSlashes
      Src: /src/brpc/src/brpc/restful.cpp:410,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:412,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:414,1
    - Dst: std::upper_bound
      Src: /src/brpc/src/brpc/restful.cpp:419,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:419,1
    - Dst: PrefixLess
      Src: /src/brpc/src/brpc/restful.cpp:420,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:421,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/restful.cpp:430,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:431,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:434,1
    - Dst: prefix::empty
      Src: /src/brpc/src/brpc/restful.cpp:446,1
    - Dst: prefix::size
      Src: /src/brpc/src/brpc/restful.cpp:448,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/restful.cpp:453,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/restful.cpp:456,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:457,1
    - Dst: postfix::size
      Src: /src/brpc/src/brpc/restful.cpp:457,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:458,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:459,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:463,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:466,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:469,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:473,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:474,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:477,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:489,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/restful.cpp:491,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:491,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:491,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/restful.cpp:493,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:493,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:493,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/restful.cpp:496,1
    - Dst: RemoveLastComponent
      Src: /src/brpc/src/brpc/restful.cpp:500,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 59
    argCount: 2
    argNames:
    - ' method_path'
    - unresolved_path
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 504
    functionName: brpc::RestfulMap::FindMethodProperty
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - prefix::size
    - postfix::size
    - butil::StringPiece::data
    - VLOG
    - butil::StringPiece::starts_with
    - butil::StringPiece::remove_suffix
    - RemoveLastComponent
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    - PrefixLess
    - butil::StringPiece::remove_prefix
    - DebugPrinter
    - NormalizeSlashes
    - begin
    - butil::StringPiece::ends_with
    - end
    - std::upper_bound
    - empty
    - std::string*::assign
    - prefix::empty
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nRestfulMap::FindMethodProperty(const butil::StringPiece&
      method_path,\n                               std::string* unresolved_path) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:31,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::remove_last_char
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::empty
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece remove_last_char(butil::StringPiece s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: service_name::empty
      Src: /src/brpc/src/brpc/restful.cpp:38,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:42,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - RestfulMethodPath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 47
    functionName: '& operator<<(std::ostream& os, const RestfulMethodPath& p)'
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - remove_last_char
    - service_name::empty
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RestfulMethodPath&
      p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: size
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: size
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: size
      Src: /src/brpc/src/brpc/restful.cpp:51,1
    - Dst: empty
      Src: /src/brpc/src/brpc/restful.cpp:52,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:53,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:54,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:57,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:58,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:59,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:60,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:60,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:60,1
    - Dst: remove_last_char
      Src: /src/brpc/src/brpc/restful.cpp:62,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:63,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:63,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 66
    functionName: brpc::RestfulMethodPath::to_string
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - std::string::append
    - empty
    - butil::StringPiece::data
    - remove_last_char
    - size
    - butil::StringPiece::size
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string RestfulMethodPath::to_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - RestfulMethodPath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::DebugPrinter
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DebugPrinter(const RestfulMethodPath& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - DebugPrinter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: '& operator<<(std::ostream& os, const DebugPrinter& p)'
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const DebugPrinter& p)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/restful.cpp:84,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:86,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:97,1
    - Dst: brpc::is_url_char
      Src: /src/brpc/src/brpc/restful.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:102,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:103,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/restful.cpp:114,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/restful.cpp:115,1
    - Dst: RestfulMethodPath*::service_name::clear
      Src: /src/brpc/src/brpc/restful.cpp:123,1
    - Dst: RestfulMethodPath*::prefix::clear
      Src: /src/brpc/src/brpc/restful.cpp:124,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:128,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/restful.cpp:129,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/restful.cpp:131,1
    - Dst: RestfulMethodPath*::service_name::assign
      Src: /src/brpc/src/brpc/restful.cpp:133,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:133,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/restful.cpp:134,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:135,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:136,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:136,1
    - Dst: RestfulMethodPath*::prefix::empty
      Src: /src/brpc/src/brpc/restful.cpp:139,1
    - Dst: RestfulMethodPath*::prefix::reserve
      Src: /src/brpc/src/brpc/restful.cpp:140,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:140,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:142,1
    - Dst: RestfulMethodPath*::prefix::append
      Src: /src/brpc/src/brpc/restful.cpp:143,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:143,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:143,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:146,1
    - Dst: butil::StringPiece::back
      Src: /src/brpc/src/brpc/restful.cpp:147,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:150,1
    - Dst: RestfulMethodPath*::service_name::assign
      Src: /src/brpc/src/brpc/restful.cpp:156,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:156,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:156,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:157,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:160,1
    - Dst: RestfulMethodPath*::prefix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:164,1
    - Dst: RestfulMethodPath*::prefix::append
      Src: /src/brpc/src/brpc/restful.cpp:165,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:165,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:165,1
    - Dst: RestfulMethodPath*::postfix::clear
      Src: /src/brpc/src/brpc/restful.cpp:172,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:174,1
    - Dst: RestfulMethodPath*::postfix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:175,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:177,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:178,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:178,1
    - Dst: RestfulMethodPath*::postfix::empty
      Src: /src/brpc/src/brpc/restful.cpp:180,1
    - Dst: RestfulMethodPath*::postfix::reserve
      Src: /src/brpc/src/brpc/restful.cpp:181,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:181,1
    - Dst: RestfulMethodPath*::postfix::append
      Src: /src/brpc/src/brpc/restful.cpp:183,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:183,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:183,1
    - Dst: RestfulMethodPath*::postfix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:184,1
    - Dst: RestfulMethodPath*::postfix::push_back
      Src: /src/brpc/src/brpc/restful.cpp:187,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:189,1
    - Dst: brpc::DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:192,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 77
    argCount: 2
    argNames:
    - path
    - path_out
    argTypes:
    - butil::StringPiece
    - RestfulMethodPath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 194
    functionName: brpc::ParseRestfulPath
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 1
    functionsReached:
    - butil::StringSplitter::length
    - RestfulMethodPath*::postfix::push_back
    - RestfulMethodPath*::postfix::empty
    - brpc::is_url_char
    - butil::StringPiece::data
    - RestfulMethodPath*::postfix::append
    - VLOG
    - RestfulMethodPath*::prefix::append
    - butil::StringPiece::substr
    - RestfulMethodPath*::prefix::empty
    - RestfulMethodPath*::postfix::reserve
    - RestfulMethodPath*::prefix::push_back
    - brpc::DebugPrinter
    - RestfulMethodPath*::postfix::clear
    - butil::StringPiece::back
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    - butil::StringPiece::remove_prefix
    - RestfulMethodPath*::service_name::assign
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::find
    - RestfulMethodPath*::prefix::reserve
    - RestfulMethodPath*::prefix::clear
    - butil::StringSplitter::field
    - RestfulMethodPath*::service_name::clear
    linkageType: ''
    returnType: bool
    signature: "bool ParseRestfulPath(butil::StringPiece path,\n                      RestfulMethodPath*
      path_out)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:199,1
    - Dst: std::vector<RestfulMapping>*::clear
      Src: /src/brpc/src/brpc/restful.cpp:202,1
    - Dst: std::vector<RestfulMapping>*::reserve
      Src: /src/brpc/src/brpc/restful.cpp:203,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:205,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:205,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/restful.cpp:205,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:210,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:211,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:225,1
    - Dst: brpc::ParseRestfulPath
      Src: /src/brpc/src/brpc/restful.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:227,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/restful.cpp:232,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:234,1
    - Dst: RestfulMapping::method_name::assign
      Src: /src/brpc/src/brpc/restful.cpp:238,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:238,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:239,1
    - Dst: std::vector<RestfulMapping>*::push_back
      Src: /src/brpc/src/brpc/restful.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:247,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/restful.cpp:248,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:248,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:248,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 37
    argCount: 2
    argNames:
    - ' mappings'
    - list
    argTypes:
    - butil::StringPiece
    - std::vector<RestfulMapping>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 253
    functionName: brpc::ParseRestfulMappings
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::vector<RestfulMapping>*::reserve
    - butil::StringPiece::size
    - butil::StringSplitter::length
    - brpc::ParseRestfulPath
    - std::vector<RestfulMapping>*::push_back
    - std::vector<RestfulMapping>*::clear
    - RestfulMapping::method_name::assign
    - butil::StringSplitter::field
    - butil::StringPiece::data
    - brpc::size
    - data
    - butil::BasicStringPiece::BasicStringPiece
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::trim_spaces
    linkageType: ''
    returnType: bool
    signature: "bool ParseRestfulMappings(const butil::StringPiece& mappings,\n                          std::vector<RestfulMapping>*
      list)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClearMethods
      Src: /src/brpc/src/brpc/restful.cpp:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 257
    functionName: RestfulMap::~RestfulMap()
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - ClearMethods
    linkageType: ''
    returnType: void
    signature: void RestfulMap::~RestfulMap()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:266,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/restful.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:272,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/restful.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:277,1
    - Dst: to_string
      Src: /src/brpc/src/brpc/restful.cpp:283,1
    - Dst: find
      Src: /src/brpc/src/brpc/restful.cpp:284,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:286,1
    - Dst: DedupMap::const_iterator::second::method::full_name
      Src: /src/brpc/src/brpc/restful.cpp:287,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/restful.cpp:299,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 5
    argNames:
    - ' path'
    - service
    - ' params'
    - ' method_name'
    - status
    argTypes:
    - RestfulMethodPath
    - google::protobuf::Service*
    - Server::MethodProperty::OpaqueParams
    - std::string
    - MethodStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 301
    functionName: brpc::RestfulMap::AddMethod
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - end
    - find
    - to_string
    - google::protobuf::Service*::GetDescriptor
    - LOG
    - DedupMap::const_iterator::second::method::full_name
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: bool
    signature: "bool RestfulMap::AddMethod(const RestfulMethodPath& path,\n                           google::protobuf::Service*
      service,\n                           const Server::MethodProperty::OpaqueParams&
      params,\n                           const std::string& method_name,\n                           MethodStatus*
      status)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:304,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:305,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:306,1
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:311,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 312
    functionName: brpc::RestfulMap::ClearMethods
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void RestfulMap::ClearMethods()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: prefix::compare
      Src: /src/brpc/src/brpc/restful.cpp:319,1
    - Dst: std::lexicographical_compare
      Src: /src/brpc/src/brpc/restful.cpp:329,1
    - Dst: postfix::rbegin
      Src: /src/brpc/src/brpc/restful.cpp:330,1
    - Dst: postfix::rend
      Src: /src/brpc/src/brpc/restful.cpp:330,1
    - Dst: postfix::rbegin
      Src: /src/brpc/src/brpc/restful.cpp:331,1
    - Dst: postfix::rend
      Src: /src/brpc/src/brpc/restful.cpp:331,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - e1
    - e2
    argTypes:
    - RestfulMethodProperty*
    - RestfulMethodProperty*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 333
    functionName: "operator()(const RestfulMethodProperty* e1,\n                    const
      RestfulMethodProperty* e2) const"
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::lexicographical_compare
    - prefix::compare
    - postfix::rend
    - postfix::rbegin
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const RestfulMethodProperty* e1,\n                    const
      RestfulMethodProperty* e2) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:337,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/restful.cpp:338,1
    - Dst: brpc::RestfulMap::size
      Src: /src/brpc/src/brpc/restful.cpp:338,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:339,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:339,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/restful.cpp:341,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/restful.cpp:343,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:343,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:343,1
    - Dst: CompareItemInPathList
      Src: /src/brpc/src/brpc/restful.cpp:344,1
    - Dst: VLOG_IS_ON
      Src: /src/brpc/src/brpc/restful.cpp:345,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:348,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:349,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:352,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/restful.cpp:352,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 336
    functionDepth: 2
    functionLinenumber: 336
    functionLinenumberEnd: 354
    functionName: brpc::RestfulMap::PrepareForFinding
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::ostringstream::str
    - VLOG_IS_ON
    - std::sort
    - brpc::RestfulMap::size
    - CompareItemInPathList
    - push_back
    - clear
    - begin
    - VLOG
    - reserve
    linkageType: ''
    returnType: void
    signature: void RestfulMap::PrepareForFinding()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece*::empty
      Src: /src/brpc/src/brpc/restful.cpp:360,1
    - Dst: butil::StringPiece*::back
      Src: /src/brpc/src/brpc/restful.cpp:363,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:364,1
    - Dst: butil::StringPiece*::rfind
      Src: /src/brpc/src/brpc/restful.cpp:366,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:370,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/restful.cpp:370,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - path
    argTypes:
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 372
    functionName: brpc::RemoveLastComponent
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::back
    - butil::StringPiece*::remove_suffix
    - butil::StringPiece*::empty
    - butil::StringPiece*::size
    - butil::StringPiece*::rfind
    linkageType: ''
    returnType: bool
    signature: bool RemoveLastComponent(butil::StringPiece* path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/restful.cpp:377,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/restful.cpp:377,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:378,1
    - Dst: data
      Src: /src/brpc/src/brpc/restful.cpp:378,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/restful.cpp:378,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:380,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/restful.cpp:381,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/restful.cpp:381,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/restful.cpp:381,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/restful.cpp:383,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 375
    functionDepth: 2
    functionLinenumber: 375
    functionLinenumberEnd: 385
    functionName: brpc::NormalizeSlashes
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string::append
    - brpc::size
    - data
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string NormalizeSlashes(const butil::StringPiece& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/restful.cpp:390,1
    - Dst: clear
      Src: /src/brpc/src/brpc/restful.cpp:391,1
    - Dst: erase
      Src: /src/brpc/src/brpc/restful.cpp:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 394
    functionName: brpc::RestfulMap::RemoveByPathString
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - erase
    - empty
    - clear
    linkageType: ''
    returnType: size_t
    signature: size_t RestfulMap::RemoveByPathString(const std::string& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' path'
    - p
    argTypes:
    - butil::StringPiece
    - RestfulMethodProperty*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 400
    functionName: "operator()(const butil::StringPiece& path,\n                    const
      RestfulMethodProperty* p) const"
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool operator()(const butil::StringPiece& path,\n                    const
      RestfulMethodProperty* p) const"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/restful.cpp:406,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/restful.cpp:407,1
    - Dst: NormalizeSlashes
      Src: /src/brpc/src/brpc/restful.cpp:410,1
    - Dst: end
      Src: /src/brpc/src/brpc/restful.cpp:412,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:414,1
    - Dst: std::upper_bound
      Src: /src/brpc/src/brpc/restful.cpp:419,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:419,1
    - Dst: PrefixLess
      Src: /src/brpc/src/brpc/restful.cpp:420,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:421,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/restful.cpp:430,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:431,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:434,1
    - Dst: prefix::empty
      Src: /src/brpc/src/brpc/restful.cpp:446,1
    - Dst: prefix::size
      Src: /src/brpc/src/brpc/restful.cpp:448,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/restful.cpp:453,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/restful.cpp:456,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/restful.cpp:457,1
    - Dst: postfix::size
      Src: /src/brpc/src/brpc/restful.cpp:457,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:458,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:459,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:463,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:466,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:469,1
    - Dst: begin
      Src: /src/brpc/src/brpc/restful.cpp:473,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/restful.cpp:474,1
    - Dst: DebugPrinter
      Src: /src/brpc/src/brpc/restful.cpp:477,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/restful.cpp:489,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/restful.cpp:491,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:491,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:491,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/restful.cpp:493,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/restful.cpp:493,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/restful.cpp:493,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/restful.cpp:496,1
    - Dst: RemoveLastComponent
      Src: /src/brpc/src/brpc/restful.cpp:500,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 59
    argCount: 2
    argNames:
    - ' method_path'
    - unresolved_path
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 504
    functionName: brpc::RestfulMap::FindMethodProperty
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - prefix::size
    - postfix::size
    - butil::StringPiece::data
    - VLOG
    - butil::StringPiece::starts_with
    - butil::StringPiece::remove_suffix
    - RemoveLastComponent
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    - PrefixLess
    - butil::StringPiece::remove_prefix
    - DebugPrinter
    - NormalizeSlashes
    - begin
    - butil::StringPiece::ends_with
    - end
    - std::upper_bound
    - empty
    - std::string*::assign
    - prefix::empty
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nRestfulMap::FindMethodProperty(const butil::StringPiece&
      method_path,\n                               std::string* unresolved_path) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<Extension<T> >
      Src: /src/brpc/src/brpc/extension_inl.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 30
    functionName: brpc::Extension<T>::instance
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 6
    functionsReached:
    - butil::get_leaky_singleton<Extension<T> >
    linkageType: ''
    returnType: Extension<T>
    signature: Extension<T> * Extension<T>::instance()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/extension_inl.h:35,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/extension_inl.h:38,1
    - Dst: seek
      Src: /src/brpc/src/brpc/extension_inl.h:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/extension_inl.h:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - ' name'
    - instance
    argTypes:
    - std::string
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 45
    functionName: brpc::Extension<T>::Register
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - seek
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int Extension<T>::Register(const std::string& name, T* instance)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::Register
      Src: /src/brpc/src/brpc/extension_inl.h:49,1
    - Dst: exit
      Src: /src/brpc/src/brpc/extension_inl.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' name'
    - instance
    argTypes:
    - std::string
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 2
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: brpc::Extension<T>::RegisterOrDie
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::Register
    - exit
    linkageType: ''
    returnType: int
    signature: int Extension<T>::RegisterOrDie(const std::string& name, T* instance)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/extension_inl.h:60,1
    - Dst: seek
      Src: /src/brpc/src/brpc/extension_inl.h:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 66
    functionName: brpc::Extension<T>::Find
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: T
    signature: T * Extension<T>::Find(const char* name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/extension_inl.h:70,1
    - Dst: begin
      Src: /src/brpc/src/brpc/extension_inl.h:72,1
    - Dst: end
      Src: /src/brpc/src/brpc/extension_inl.h:72,1
    - Dst: typename butil::CaseIgnoredFlatMap<T*>::iterator::first::data
      Src: /src/brpc/src/brpc/extension_inl.h:75,1
    - Dst: begin
      Src: /src/brpc/src/brpc/extension_inl.h:76,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' os'
    - separator
    argTypes:
    - std::ostream
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 82
    functionName: brpc::Extension<T>::List
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - end
    - typename butil::CaseIgnoredFlatMap<T*>::iterator::first::data
    - begin
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void Extension<T>::List(std::ostream& os, char separator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<Extension<T> >
      Src: /src/brpc/src/brpc/extension_inl.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 30
    functionName: brpc::Extension<T>::instance
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 6
    functionsReached:
    - butil::get_leaky_singleton<Extension<T> >
    linkageType: ''
    returnType: Extension<T>
    signature: Extension<T> * Extension<T>::instance()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/extension_inl.h:35,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/extension_inl.h:38,1
    - Dst: seek
      Src: /src/brpc/src/brpc/extension_inl.h:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/extension_inl.h:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - ' name'
    - instance
    argTypes:
    - std::string
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 45
    functionName: brpc::Extension<T>::Register
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 1
    functionsReached:
    - seek
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int Extension<T>::Register(const std::string& name, T* instance)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::Register
      Src: /src/brpc/src/brpc/extension_inl.h:49,1
    - Dst: exit
      Src: /src/brpc/src/brpc/extension_inl.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' name'
    - instance
    argTypes:
    - std::string
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 2
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: brpc::Extension<T>::RegisterOrDie
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - brpc::Extension<T>::Register
    - exit
    linkageType: ''
    returnType: int
    signature: int Extension<T>::RegisterOrDie(const std::string& name, T* instance)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/extension_inl.h:60,1
    - Dst: seek
      Src: /src/brpc/src/brpc/extension_inl.h:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 66
    functionName: brpc::Extension<T>::Find
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: T
    signature: T * Extension<T>::Find(const char* name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/extension_inl.h:70,1
    - Dst: begin
      Src: /src/brpc/src/brpc/extension_inl.h:72,1
    - Dst: end
      Src: /src/brpc/src/brpc/extension_inl.h:72,1
    - Dst: typename butil::CaseIgnoredFlatMap<T*>::iterator::first::data
      Src: /src/brpc/src/brpc/extension_inl.h:75,1
    - Dst: begin
      Src: /src/brpc/src/brpc/extension_inl.h:76,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' os'
    - separator
    argTypes:
    - std::ostream
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 82
    functionName: brpc::Extension<T>::List
    functionSourceFile: /src/brpc/src/brpc/extension_inl.h
    functionUses: 0
    functionsReached:
    - end
    - typename butil::CaseIgnoredFlatMap<T*>::iterator::first::data
    - begin
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void Extension<T>::List(std::ostream& os, char separator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fill
      Src: /src/brpc/src/brpc/server.cpp:85,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/server.cpp:86,1
    - Dst: std::setfill
      Src: /src/brpc/src/brpc/server.cpp:86,1
    - Dst: fill
      Src: /src/brpc/src/brpc/server.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' tm'
    argTypes:
    - std::ostream
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: '& operator<<(std::ostream& os, const timeval& tm)'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::setw
    - fill
    - std::setfill
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const timeval& tm)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - Server::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 112
    functionName: brpc::status_str
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * status_str(Server::Status s)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 160
    functionName: brpc::ServerOptions::ServerOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 50
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerOptions::ServerOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/server.cpp:164,1
    - Dst: ServerSSLOptions::ServerSSLOptions
      Src: /src/brpc/src/brpc/server.cpp:164,1
    - Dst: get
      Src: /src/brpc/src/brpc/server.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 167
    functionName: brpc::ServerOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 7
    functionsReached:
    - reset
    - get
    - ServerSSLOptions::ServerSSLOptions
    linkageType: ''
    returnType: ServerSSLOptions
    signature: ServerSSLOptions * ServerOptions::mutable_ssl_options()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 175
    functionName: Server::MethodProperty::OpaqueParams::OpaqueParams()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server::MethodProperty::OpaqueParams::OpaqueParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 185
    functionName: Server::MethodProperty::MethodProperty()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server::MethodProperty::MethodProperty()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::microseconds_to_timeval
      Src: /src/brpc/src/brpc/server.cpp:188,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: brpc::GetUptime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - butil::cpuwide_time_us
    - butil::microseconds_to_timeval
    linkageType: ''
    returnType: timeval
    signature: timeval GetUptime(void* arg/*start_time*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:193,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/server.cpp:196,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/server.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 199
    functionName: brpc::PrintStartTime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - localtime_r
    - static_cast<Server*>
    linkageType: ''
    returnType: void
    signature: void PrintStartTime(std::ostream& os, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/server.cpp:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: brpc::PrintSupportedLB
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancerExtension
    linkageType: ''
    returnType: void
    signature: void PrintSupportedLB(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/server.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 1
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: brpc::PrintSupportedNS
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::NamingServiceExtension
    linkageType: ''
    returnType: void
    signature: void PrintSupportedNS(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/server.cpp:211,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:212,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 218
    functionName: brpc::PrintSupportedProtocols
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListProtocols
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void PrintSupportedProtocols(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListCompressHandler
      Src: /src/brpc/src/brpc/server.cpp:222,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:223,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 229
    functionName: brpc::PrintSupportedCompressions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListCompressHandler
    linkageType: ''
    returnType: void
    signature: void PrintSupportedCompressions(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListChecksumHandler
      Src: /src/brpc/src/brpc/server.cpp:233,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:234,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 240
    functionName: brpc::PrintSupportedChecksums
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListChecksumHandler
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void PrintSupportedChecksums(std::ostream& os, void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/server.cpp:246,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/server.cpp:247,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 254
    functionName: brpc::PrintEnabledProfilers
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - has_TCMALLOC_SAMPLE_PARAMETER
    - IsHeapProfilerEnabled
    linkageType: ''
    returnType: void
    signature: void PrintEnabledProfilers(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: brpc::GetConnectionCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetConnectionCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: brpc::GetServiceCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetServiceCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: brpc::GetBuiltinServiceCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBuiltinServiceCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Vector::Vector
      Src: /src/brpc/src/brpc/server.cpp:293,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 292
    functionDepth: 2
    functionLinenumber: 292
    functionLinenumberEnd: 299
    functionName: brpc::GetSessionLocalDataCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bvar::Vector::Vector
    - static_cast<Server*>
    linkageType: ''
    returnType: bvar::Vector<unsigned, 2>
    signature: bvar::Vector<unsigned, 2> GetSessionLocalDataCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/brpc/server.cpp:302,1
    - Dst: static_cast<int*>
      Src: /src/brpc/src/brpc/server.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 303
    functionName: brpc::cast_no_barrier_int
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: int
    signature: int cast_no_barrier_int(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_info_name::empty
      Src: /src/brpc/src/brpc/server.cpp:306,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/server.cpp:307,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/src/brpc/server.cpp:307,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/server.cpp:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 311
    functionName: brpc::Server::ServerPrefix
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - brpc::Server::listen_address
    - std::string
    - server_info_name::empty
    linkageType: ''
    returnType: std::string
    signature: std::string Server::ServerPrefix() const
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:314,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:316,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/server.cpp:317,1
    - Dst: Server*::_nerror_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:321,1
    - Dst: Server*::_eps_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:323,1
    - Dst: Server*::_concurrency_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:325,1
    - Dst: Server*::session_local_data_pool
      Src: /src/brpc/src/brpc/server.cpp:344,1
    - Dst: bvar::PassiveStatus::expose_as
      Src: /src/brpc/src/brpc/server.cpp:345,1
    - Dst: bvar::PassiveStatus::set_vector_names
      Src: /src/brpc/src/brpc/server.cpp:346,1
    - Dst: Server*::_method_map::begin
      Src: /src/brpc/src/brpc/server.cpp:350,1
    - Dst: Server*::_method_map::end
      Src: /src/brpc/src/brpc/server.cpp:351,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/server.cpp:354,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/server.cpp:354,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:355,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: MethodMap::iterator::second::method::full_name
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: MethodMap::iterator::second::status::Expose
      Src: /src/brpc/src/brpc/server.cpp:357,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:360,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:361,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:361,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:363,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:364,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:364,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:368,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:369,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:369,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/server.cpp:373,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/server.cpp:376,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:380,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:384,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/server.cpp:385,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/server.cpp:389,1
    - Dst: Server*::_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:393,1
    - Dst: Server*::_internal_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:396,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/server.cpp:398,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:399,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:401,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:402,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:405,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:407,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:408,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 313
    functionDepth: 3
    functionLinenumber: 313
    functionLinenumberEnd: 412
    functionName: brpc::Server::UpdateDerivedVars
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::_method_map::end
    - bthread_usleep
    - Server*::ServerPrefix
    - SocketUniquePtr::UpdateStatsEverySecond
    - bvar::PassiveStatus::set_vector_names
    - Server*::_am::ListConnections
    - brpc::SetTrackMeAddress
    - bvar::PassiveStatus::expose_as
    - butil::cpuwide_time_us
    - Server*::_eps_bvar::expose_as
    - std::string::resize
    - PLOG_IF
    - Server*::session_local_data_pool
    - Server*::_method_map::begin
    - static_cast<Server*>
    - bvar::to_underscored_name
    - LOG
    - Server*::_internal_am::ListConnections
    - std::string::push_back
    - butil::gettimeofday_us
    - Server*::_nerror_bvar::expose_as
    - butil::cpuwide_time_ms
    - Server*::options
    - Server*::_concurrency_bvar::expose_as
    - MethodMap::iterator::second::status::Expose
    - Expose
    - std::vector::size
    - MethodMap::iterator::second::method::full_name
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void * Server::UpdateDerivedVars(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:416,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/server.cpp:418,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 422
    functionName: '& Server::ServiceProperty::service_name() const'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - service_name
    - GetDescriptor
    linkageType: ''
    returnType: std::string
    signature: std::string & Server::ServiceProperty::service_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/server.cpp:443,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 445
    functionName: brpc::Server::Server
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 146
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void Server::Server(ProfilerLinker)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/server.cpp:448,1
    - Dst: Join
      Src: /src/brpc/src/brpc/server.cpp:449,1
    - Dst: ClearServices
      Src: /src/brpc/src/brpc/server.cpp:450,1
    - Dst: Server::FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:451,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:483,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:484,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:484,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 447
    functionDepth: 1
    functionLinenumber: 447
    functionLinenumberEnd: 497
    functionName: Server::~Server()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - pid_file::empty
    - Server::FreeSSLContexts
    - Stop
    - Join
    - pid_file::c_str
    - ClearServices
    - unlink
    linkageType: ''
    returnType: void
    signature: void Server::~Server()
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:501,1
    - Dst: StatusService::StatusService
      Src: /src/brpc/src/brpc/server.cpp:501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:502,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:505,1
    - Dst: VarsService::VarsService
      Src: /src/brpc/src/brpc/server.cpp:505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:506,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:509,1
    - Dst: ConnectionsService::ConnectionsService
      Src: /src/brpc/src/brpc/server.cpp:509,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:510,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:513,1
    - Dst: FlagsService::FlagsService
      Src: /src/brpc/src/brpc/server.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:514,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:517,1
    - Dst: RpczService::RpczService
      Src: /src/brpc/src/brpc/server.cpp:517,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:518,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:521,1
    - Dst: HotspotsService::HotspotsService
      Src: /src/brpc/src/brpc/server.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:522,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:525,1
    - Dst: IndexService::IndexService
      Src: /src/brpc/src/brpc/server.cpp:525,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:526,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:531,1
    - Dst: VersionService::VersionService
      Src: /src/brpc/src/brpc/server.cpp:531,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:532,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:535,1
    - Dst: HealthService::HealthService
      Src: /src/brpc/src/brpc/server.cpp:535,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:536,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:539,1
    - Dst: ProtobufsService::ProtobufsService
      Src: /src/brpc/src/brpc/server.cpp:539,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:540,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:543,1
    - Dst: BadMethodService::BadMethodService
      Src: /src/brpc/src/brpc/server.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:544,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:547,1
    - Dst: ListService::ListService
      Src: /src/brpc/src/brpc/server.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:548,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:551,1
    - Dst: PrometheusMetricsService::PrometheusMetricsService
      Src: /src/brpc/src/brpc/server.cpp:551,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:552,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:556,1
    - Dst: ThreadsService::ThreadsService
      Src: /src/brpc/src/brpc/server.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:557,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:560,1
    - Dst: MemoryService::MemoryService
      Src: /src/brpc/src/brpc/server.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:561,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:566,1
    - Dst: VLogService::VLogService
      Src: /src/brpc/src/brpc/server.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:567,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:572,1
    - Dst: PProfService::PProfService
      Src: /src/brpc/src/brpc/server.cpp:572,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:573,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:577,1
    - Dst: DirService::DirService
      Src: /src/brpc/src/brpc/server.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:578,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:581,1
    - Dst: BthreadsService::BthreadsService
      Src: /src/brpc/src/brpc/server.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:582,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:585,1
    - Dst: IdsService::IdsService
      Src: /src/brpc/src/brpc/server.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:586,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:589,1
    - Dst: SocketsService::SocketsService
      Src: /src/brpc/src/brpc/server.cpp:589,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:590,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:593,1
    - Dst: GetFaviconService::GetFaviconService
      Src: /src/brpc/src/brpc/server.cpp:593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:594,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:597,1
    - Dst: GetJsService::GetJsService
      Src: /src/brpc/src/brpc/server.cpp:597,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:598,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:601,1
    - Dst: GrpcHealthCheckService::GrpcHealthCheckService
      Src: /src/brpc/src/brpc/server.cpp:601,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:602,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 98
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 499
    functionDepth: 1
    functionLinenumber: 499
    functionLinenumberEnd: 606
    functionName: brpc::Server::AddBuiltinServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - ListService::ListService
    - VarsService::VarsService
    - FlagsService::FlagsService
    - StatusService::StatusService
    - ProtobufsService::ProtobufsService
    - SocketsService::SocketsService
    - IndexService::IndexService
    - GrpcHealthCheckService::GrpcHealthCheckService
    - DirService::DirService
    - HotspotsService::HotspotsService
    - GetJsService::GetJsService
    - VLogService::VLogService
    - brpc::Server::AddBuiltinService
    - GetFaviconService::GetFaviconService
    - HealthService::HealthService
    - LOG
    - BthreadsService::BthreadsService
    - RpczService::RpczService
    - ConnectionsService::ConnectionsService
    - BadMethodService::BadMethodService
    - ThreadsService::ThreadsService
    - VersionService::VersionService
    - PProfService::PProfService
    - MemoryService::MemoryService
    - PrometheusMetricsService::PrometheusMetricsService
    - IdsService::IdsService
    linkageType: ''
    returnType: int
    signature: int Server::AddBuiltinServices()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:612,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:612,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 613
    functionName: brpc::is_http_protocol
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: bool
    signature: bool is_http_protocol(const char* name)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: enabled_protocols::c_str
      Src: /src/brpc/src/brpc/server.cpp:617,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:619,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:619,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/server.cpp:620,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:622,1
    - Dst: Acceptor::Acceptor
      Src: /src/brpc/src/brpc/server.cpp:623,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:625,1
    - Dst: ListProtocols
      Src: /src/brpc/src/brpc/server.cpp:630,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:631,1
    - Dst: is_http_protocol
      Src: /src/brpc/src/brpc/server.cpp:637,1
    - Dst: std::set::erase
      Src: /src/brpc/src/brpc/server.cpp:638,1
    - Dst: Acceptor*::AddHandler
      Src: /src/brpc/src/brpc/server.cpp:649,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:650,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:656,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/server.cpp:659,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/server.cpp:660,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:665,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:665,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 669
      start: 615
    functionDepth: 1
    functionLinenumber: 615
    functionLinenumberEnd: 669
    functionName: brpc::Server::BuildAcceptor
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - std::set::insert
    - std::set::begin
    - butil::StringSplitter::length
    - std::set::end
    - ListProtocols
    - butil::StringSplitter::field
    - std::set::empty
    - enabled_protocols::c_str
    - Acceptor*::AddHandler
    - is_http_protocol
    - std::set::erase
    - LOG
    - std::vector::size
    - Acceptor::Acceptor
    linkageType: ''
    returnType: Acceptor
    signature: Acceptor * Server::BuildAcceptor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/server.cpp:675,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 682
    functionName: brpc::Server::InitializeOnce
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - GlobalInitializeOrDie
    linkageType: ''
    returnType: int
    signature: int Server::InitializeOnce()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:686,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:692,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:693,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:693,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:694,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/server.cpp:698,1
    - Dst: Protocol*::support_server
      Src: /src/brpc/src/brpc/server.cpp:699,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:700,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:703,1
    - Dst: ALPNProtocolToString
      Src: /src/brpc/src/brpc/server.cpp:703,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/server.cpp:705,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - options
    argTypes:
    - ServerSSLOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 684
    functionDepth: 1
    functionLinenumber: 684
    functionLinenumberEnd: 707
    functionName: brpc::Server::InitALPNOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - ALPNProtocolToString
    - std::move
    - butil::StringSplitter::length
    - FindProtocol
    - butil::StringSplitter::field
    - data
    - std::string::append
    - butil::StringPiece::trim_spaces
    - LOG
    - Protocol*::support_server
    linkageType: ''
    returnType: int
    signature: int Server::InitALPNOptions(const ServerSSLOptions* options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const DataFactory*>
      Src: /src/brpc/src/brpc/server.cpp:710,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 709
    functionDepth: 0
    functionLinenumber: 709
    functionLinenumberEnd: 711
    functionName: brpc::CreateServerTLS
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const DataFactory*>
    linkageType: ''
    returnType: void
    signature: void * CreateServerTLS(const void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const DataFactory*>
      Src: /src/brpc/src/brpc/server.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - void_factory
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 712
    functionDepth: 0
    functionLinenumber: 712
    functionLinenumberEnd: 714
    functionName: brpc::DestroyServerTLS
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const DataFactory*>
    linkageType: ''
    returnType: void
    signature: void DestroyServerTLS(void* data, const void* void_factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BthreadInitArgs*::bthread_init_fn
      Src: /src/brpc/src/brpc/server.cpp:727,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:730,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 725
    functionDepth: 2
    functionLinenumber: 725
    functionLinenumberEnd: 733
    functionName: brpc::BthreadInitEntry
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - BthreadInitArgs*::bthread_init_fn
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * BthreadInitEntry(void* void_args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::Stop
      Src: /src/brpc/src/brpc/server.cpp:738,1
    - Dst: Server*::Join
      Src: /src/brpc/src/brpc/server.cpp:739,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 741
    functionName: operator()(Server* s) const
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::Join
    - Server*::Stop
    linkageType: ''
    returnType: void
    signature: void operator()(Server* s) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getsockname
      Src: /src/brpc/src/brpc/server.cpp:747,1
    - Dst: ntohs
      Src: /src/brpc/src/brpc/server.cpp:750,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 744
    functionDepth: 0
    functionLinenumber: 744
    functionLinenumberEnd: 751
    functionName: brpc::get_port_from_fd
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - ntohs
    - getsockname
    linkageType: ''
    returnType: int
    signature: int get_port_from_fd(int fd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/server.cpp:755,1
    - Dst: ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/server.cpp:760,1
    - Dst: type
      Src: /src/brpc/src/brpc/server.cpp:760,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:762,1
    - Dst: value
      Src: /src/brpc/src/brpc/server.cpp:762,1
    - Dst: ConcurrencyLimiter*::New
      Src: /src/brpc/src/brpc/server.cpp:765,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' amc'
    - out
    argTypes:
    - AdaptiveMaxConcurrency
    - ConcurrencyLimiter**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 772
    functionName: brpc::Server::CreateConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - value
    - ConcurrencyLimiter*::New
    - type
    - ConcurrencyLimiterExtension
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool Server::CreateConcurrencyLimiter(const AdaptiveMaxConcurrency&
      amc,\n                                      ConcurrencyLimiter** out)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:777,1
    - Dst: ServerOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:780,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:781,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:789,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 793
      start: 775
    functionDepth: 1
    functionLinenumber: 775
    functionLinenumberEnd: 793
    functionName: brpc::OptionsAvailableOverRdma
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - ServerOptions*::has_ssl_options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool OptionsAvailableOverRdma(const ServerOptions* opt)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:808,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:811,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:814,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:815,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:816,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:818,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:819,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:819,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:823,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:827,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:830,1
    - Dst: DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/src/brpc/server.cpp:841,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' dst'
    - ' src'
    argTypes:
    - ServerOptions
    - ServerOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 799
    functionDepth: 1
    functionLinenumber: 799
    functionLinenumberEnd: 843
    functionName: brpc::copy_and_fill_server_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - pid_file::empty
    - DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - FREE_PTR_IF_NOT_REUSED
    - pid_file::c_str
    - unlink
    linkageType: ''
    returnType: void
    signature: void copy_and_fill_server_options(ServerOptions& dst, const ServerOptions&
      src)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 806
    functionName: FREE_PTR_IF_NOT_REUSED
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FREE_PTR_IF_NOT_REUSED(ptr)
  - BBCount: 67
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:851,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:857,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:861,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:862,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:862,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:865,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:868,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:868,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:871,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:871,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:872,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:872,1
    - Dst: copy_and_fill_server_options
      Src: /src/brpc/src/brpc/server.cpp:877,1
    - Dst: ServerOptions
      Src: /src/brpc/src/brpc/server.cpp:877,1
    - Dst: h2_settings::IsValid
      Src: /src/brpc/src/brpc/server.cpp:879,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:880,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:886,1
    - Dst: OptionsAvailableOverRdma
      Src: /src/brpc/src/brpc/server.cpp:894,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/server.cpp:897,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/server.cpp:898,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:902,1
    - Dst: http_master_service::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:911,1
    - Dst: google::protobuf::ServiceDescriptor*::FindMethodByName
      Src: /src/brpc/src/brpc/server.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:915,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:918,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:919,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:920,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:923,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:924,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:925,1
    - Dst: SimpleDataPool::SimpleDataPool
      Src: /src/brpc/src/brpc/server.cpp:937,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:939,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:943,1
    - Dst: Reserve
      Src: /src/brpc/src/brpc/server.cpp:945,1
    - Dst: bthread_keytable_pool_t::bthread_keytable_pool_t
      Src: /src/brpc/src/brpc/server.cpp:954,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/src/brpc/server.cpp:955,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:956,1
    - Dst: bthread_key_create2
      Src: /src/brpc/src/brpc/server.cpp:964,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:966,1
    - Dst: bthread_keytable_pool_reserve
      Src: /src/brpc/src/brpc/server.cpp:970,1
    - Dst: brpc::Server::ThreadLocalOptions
      Src: /src/brpc/src/brpc/server.cpp:977,1
    - Dst: BthreadInitArgs::BthreadInitArgs
      Src: /src/brpc/src/brpc/server.cpp:985,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:996,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:1004,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1022,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1027,1
    - Dst: FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:1033,1
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1034,1
    - Dst: brpc::Server::InitALPNOptions
      Src: /src/brpc/src/brpc/server.cpp:1038,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1038,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1041,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/server.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1043,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1046,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1049,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1051,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1052,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1053,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1058,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/src/brpc/server.cpp:1067,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1068,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1075,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1081,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1082,1
    - Dst: ServiceMap::const_iterator::second::restful_map::PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1084,1
    - Dst: PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1088,1
    - Dst: bthread_setconcurrency_by_tag
      Src: /src/brpc/src/brpc/server.cpp:1098,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1101,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1102,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1104,1
    - Dst: AdaptiveMaxConcurrency*::type
      Src: /src/brpc/src/brpc/server.cpp:1107,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1111,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1112,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1115,1
    - Dst: MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1116,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1119,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1131,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1153,1
    - Dst: get_port_from_fd
      Src: /src/brpc/src/brpc/server.cpp:1160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1162,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1169,1
    - Dst: time
      Src: /src/brpc/src/brpc/server.cpp:1178,1
    - Dst: brpc::Server::GenerateVersionIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1179,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/server.cpp:1180,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1186,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1199,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1213,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1219,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1227,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1230,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1233,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1236,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:1239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1241,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1248,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1248,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1260,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:1260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1263,1
    - Dst: butil::my_hostname
      Src: /src/brpc/src/brpc/server.cpp:1263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1266,1
    - Dst: SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/server.cpp:1272,1
    CyclomaticComplexity: 88
    EdgeCount: 88
    ICount: 303
    argCount: 3
    argNames:
    - ' endpoint'
    - ' port_range'
    - opt
    argTypes:
    - butil::EndPoint
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1274
      start: 845
    functionDepth: 4
    functionLinenumber: 845
    functionLinenumberEnd: 1274
    functionName: brpc::Server::StartInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_create2
    - bthread_keytable_pool_init
    - brpc::Server::ThreadLocalOptions
    - butil::is_endpoint_extended
    - brpc::Server::InitializeOnce
    - Reset
    - SetTrackMeAddress
    - copy_and_fill_server_options
    - bthread_usleep
    - brpc::Server::InitALPNOptions
    - bthread_start_background
    - SimpleDataPool::SimpleDataPool
    - bthread_join
    - PrepareForFinding
    - MethodMap::iterator::second::status::SetConcurrencyLimiter
    - certificate::empty
    - fetch_add
    - CHECK_EQ
    - butil::my_hostname
    - brpc::Server::status
    - status_str
    - BthreadInitArgs::BthreadInitArgs
    - StartAccept
    - bthread_keytable_pool_t::bthread_keytable_pool_t
    - butil::fd_guard::release
    - std::unique_ptr::release
    - size
    - time
    - LOG
    - brpc::Server::SetServiceMaxConcurrency
    - get_port_from_fd
    - brpc::Server::PutPidFileIfNeeded
    - std::ostringstream::str
    - brpc::Server::BuildAcceptor
    - brpc::rdma::GlobalRdmaInitializeOrDie
    - AddCertificate
    - ServerOptions
    - brpc::Server::AddBuiltinServices
    - bthread_setconcurrency_by_tag
    - h2_settings::IsValid
    - butil::EndPoint
    - version
    - brpc::Server::GenerateVersionIfNeeded
    - brpc::rdma::InitPollingModeWithTag
    - begin
    - OptionsAvailableOverRdma
    - mutable_ssl_options
    - http_master_service::GetDescriptor
    - Reserve
    - end
    - google::protobuf::MethodDescriptor*::output_type
    - ServiceMap::const_iterator::second::restful_map::PrepareForFinding
    - google::protobuf::ServiceDescriptor*::FindMethodByName
    - google::protobuf::MethodDescriptor*::input_type
    - FreeSSLContexts
    - MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
    - AdaptiveMaxConcurrency*::type
    - brpc::Server::CreateConcurrencyLimiter
    - butil::my_ip
    - has_ssl_options
    - bthread_keytable_pool_reserve
    linkageType: ''
    returnType: int
    signature: "int Server::StartInternal(const butil::EndPoint& endpoint,\n                          const
      PortRange& port_range,\n                          const ServerOptions *opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1277,1
    - Dst: PortRange
      Src: /src/brpc/src/brpc/server.cpp:1278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' endpoint'
    - opt
    argTypes:
    - butil::EndPoint
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1276
    functionDepth: 5
    functionLinenumber: 1276
    functionLinenumberEnd: 1279
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 142
    functionsReached:
    - PortRange
    - brpc::Server::StartInternal
    linkageType: ''
    returnType: int
    signature: int Server::Start(const butil::EndPoint& endpoint, const ServerOptions*
      opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1282,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1283,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1284,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1285,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1288,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ip_port_str
    - opt
    argTypes:
    - char*
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1281
    functionDepth: 1
    functionLinenumber: 1281
    functionLinenumberEnd: 1289
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 143
    functionsReached:
    - hostname2endpoint
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - str2endpoint
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::Start(const char* ip_port_str, const ServerOptions* opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1293,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1296,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - port
    - opt
    argTypes:
    - int
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1297
      start: 1291
    functionDepth: 1
    functionLinenumber: 1291
    functionLinenumberEnd: 1297
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 144
    functionsReached:
    - brpc::Server::Start
    - LOG
    - butil::EndPoint
    linkageType: ''
    returnType: int
    signature: int Server::Start(int port, const ServerOptions* opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/server.cpp:1302,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/server.cpp:1303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1304,1
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1307,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1307,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ip_str
    - port_range
    - opt
    argTypes:
    - char*
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1308
      start: 1299
    functionDepth: 5
    functionLinenumber: 1299
    functionLinenumberEnd: 1308
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 144
    functionsReached:
    - butil::EndPoint
    - butil::str2ip
    - brpc::Server::StartInternal
    - LOG
    - butil::hostname2ip
    linkageType: ''
    returnType: int
    signature: "int Server::Start(const char* ip_str, PortRange port_range,\n                  const
      ServerOptions *opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1311,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1311,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - port_range
    - opt
    argTypes:
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1310
    functionDepth: 5
    functionLinenumber: 1310
    functionLinenumberEnd: 1312
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 144
    functionsReached:
    - brpc::Server::StartInternal
    - butil::EndPoint
    linkageType: ''
    returnType: int
    signature: int Server::Start(PortRange port_range, const ServerOptions* opt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1320,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1320,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1323,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1330
      start: 1314
    functionDepth: 1
    functionLinenumber: 1314
    functionLinenumberEnd: 1330
    functionName: brpc::Server::Stop
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 48
    functionsReached:
    - version
    - StopAccept
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::Stop(int timeout_ms)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Join
      Src: /src/brpc/src/brpc/server.cpp:1338,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/src/brpc/server.cpp:1341,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:1347,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1355,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/src/brpc/server.cpp:1355,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1365,1
    - Dst: bthread_key_delete
      Src: /src/brpc/src/brpc/server.cpp:1365,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/server.cpp:1373,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1374,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/server.cpp:1378,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1381
      start: 1333
    functionDepth: 3
    functionLinenumber: 1333
    functionLinenumberEnd: 1381
    functionName: brpc::Server::Join
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 49
    functionsReached:
    - Reset
    - brpc::Server::Join
    - bthread_key_delete
    - bthread_join
    - CHECK_EQ
    - bthread_keytable_pool_destroy
    - fetch_sub
    - bthread_stop
    linkageType: ''
    returnType: int
    signature: int Server::Join()
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1387,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1390,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1391,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1392,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1392,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:1397,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1398,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1398,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1402,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1402,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1407,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1407,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1408,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1408,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1411,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1411,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1414,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1415,1
    - Dst: ServiceProperty*::service_name
      Src: /src/brpc/src/brpc/server.cpp:1416,1
    - Dst: google::protobuf::ServiceDescriptor*::file
      Src: /src/brpc/src/brpc/server.cpp:1421,1
    - Dst: dynamic_cast<Tabbed*>
      Src: /src/brpc/src/brpc/server.cpp:1423,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1424,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:1425,1
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1441,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1442,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1442,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1449,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1449,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:1450,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1451,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1451,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1455,1
    - Dst: brpc::Server::RemoveMethodsOf
      Src: /src/brpc/src/brpc/server.cpp:1456,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1464,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1465,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:1475,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/server.cpp:1476,1
    - Dst: ParseRestfulMappings
      Src: /src/brpc/src/brpc/server.cpp:1479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1480,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1481,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/server.cpp:1484,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1486,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1487,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:1505,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1507,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1510,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1511,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1516,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1518,1
    - Dst: AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1529,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1531,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1535,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1535,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1537,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1538,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1540,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1540,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1544,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1548,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1550,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1555,1
    - Dst: RestfulMap*::AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1565,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1567,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1568,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1573,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1577,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1577,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1579,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1580,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1582,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1582,1
    - Dst: TabInfoList::TabInfoList
      Src: /src/brpc/src/brpc/server.cpp:1596,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1598,1
    - Dst: Tabbed*::GetTabInfo
      Src: /src/brpc/src/brpc/server.cpp:1599,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1600,1
    - Dst: valid
      Src: /src/brpc/src/brpc/server.cpp:1603,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1604,1
    - Dst: resize
      Src: /src/brpc/src/brpc/server.cpp:1606,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1607,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 160
    argCount: 3
    argNames:
    - service
    - is_builtin_service
    - ' svc_opt'
    argTypes:
    - google::protobuf::Service*
    - bool
    - ServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1613
      start: 1383
    functionDepth: 1
    functionLinenumber: 1383
    functionLinenumberEnd: 1613
    functionName: brpc::Server::AddServiceInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - brpc::Server::InitializeOnce
    - Tabbed*::GetTabInfo
    - brpc::Server::RemoveService
    - ServiceProperty*::service_name
    - std::vector::empty
    - brpc::Server::status
    - RestfulMap*::AddMethod
    - status_str
    - google::protobuf::MethodDescriptor*::full_name
    - path::to_string
    - dynamic_cast<Tabbed*>
    - google::protobuf::ServiceDescriptor*::file
    - google::protobuf::ServiceDescriptor*::method
    - std::string::append
    - ParseRestfulMappings
    - size
    - butil::StringPiece::empty
    - LOG
    - MethodProperty*::http_url::append
    - google::protobuf::ServiceDescriptor*::full_name
    - std::string::push_back
    - TabInfoList::TabInfoList
    - google::protobuf::ServiceDescriptor*::name
    - version
    - AddMethod
    - brpc::Server::RemoveMethodsOf
    - butil::StringPiece::trim_spaces
    - google::protobuf::MethodDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - MethodStatus::MethodStatus
    - MethodProperty*::http_url::empty
    - std::string::reserve
    - google::protobuf::ServiceDescriptor*::method_count
    - std::string::string
    - resize
    - RestfulMap::RestfulMap
    - empty
    - valid
    - seek
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: "int Server::AddServiceInternal(google::protobuf::Service* service,\n
      \                              bool is_builtin_service,\n                               const
      ServiceOptions& svc_opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1626
      start: 1615
    functionDepth: 0
    functionLinenumber: 1615
    functionLinenumberEnd: 1626
    functionName: brpc::ServiceOptions::ServiceOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServiceOptions::ServiceOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - service
    - ownership
    argTypes:
    - google::protobuf::Service*
    - ServiceOwnership
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1633
      start: 1628
    functionDepth: 2
    functionLinenumber: 1628
    functionLinenumberEnd: 1633
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 116
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       ServiceOwnership
      ownership)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/src/brpc/server.cpp:1642,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1644,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 4
    argNames:
    - service
    - ownership
    - ' restful_mappings'
    - allow_default_url
    argTypes:
    - google::protobuf::Service*
    - ServiceOwnership
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1645
      start: 1635
    functionDepth: 2
    functionLinenumber: 1635
    functionLinenumberEnd: 1645
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 116
    functionsReached:
    - as_string
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       ServiceOwnership
      ownership,\n                       const butil::StringPiece& restful_mappings,\n
      \                      bool allow_default_url)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1649,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service
    - ' options'
    argTypes:
    - google::protobuf::Service*
    - ServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1650
      start: 1647
    functionDepth: 2
    functionLinenumber: 1647
    functionLinenumberEnd: 1650
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 116
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       const
      ServiceOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1656
      start: 1652
    functionDepth: 2
    functionLinenumber: 1652
    functionLinenumberEnd: 1656
    functionName: brpc::Server::AddBuiltinService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: int Server::AddBuiltinService(google::protobuf::Service* service)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1659,1
    - Dst: google::protobuf::ServiceDescriptor*::file
      Src: /src/brpc/src/brpc/server.cpp:1660,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1662,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:1663,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1664,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1664,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/server.cpp:1666,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:1667,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1667,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1667,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1668,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1668,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:1669,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1670,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1670,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1674,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1674,1
    - Dst: MethodProperty*::http_url::c_str
      Src: /src/brpc/src/brpc/server.cpp:1678,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:1680,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:1680,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:1681,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/server.cpp:1683,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/server.cpp:1683,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/server.cpp:1683,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1685,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:1688,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:1688,1
    - Dst: FindServicePropertyByName
      Src: /src/brpc/src/brpc/server.cpp:1689,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/server.cpp:1693,1
    - Dst: RemoveByPathString
      Src: /src/brpc/src/brpc/server.cpp:1694,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1698,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/server.cpp:1703,1
    - Dst: ServiceProperty*::restful_map::RemoveByPathString
      Src: /src/brpc/src/brpc/server.cpp:1704,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1705,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1715,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1715,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 43
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1717
      start: 1658
    functionDepth: 1
    functionLinenumber: 1658
    functionLinenumberEnd: 1717
    functionName: brpc::Server::RemoveMethodsOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringPiece::data
    - ServiceProperty*::restful_map::RemoveByPathString
    - google::protobuf::MethodDescriptor*::full_name
    - google::protobuf::ServiceDescriptor*::file
    - RemoveByPathString
    - google::protobuf::ServiceDescriptor*::method
    - butil::StringPiece::CopyToString
    - std::string::append
    - MethodProperty*::http_url::c_str
    - LOG
    - butil::StringPiece::size
    - std::string::push_back
    - FindServicePropertyByName
    - google::protobuf::ServiceDescriptor*::name
    - std::string::clear
    - erase
    - butil::StringPiece::trim_spaces
    - google::protobuf::MethodDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - std::string::reserve
    - google::protobuf::ServiceDescriptor*::method_count
    - butil::StringSplitter::field
    - seek
    linkageType: ''
    returnType: void
    signature: void Server::RemoveMethodsOf(google::protobuf::Service* service)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1721,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1725,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1726,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1727,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1727,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1727,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1731,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1732,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1732,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1734,1
    - Dst: brpc::Server::RemoveMethodsOf
      Src: /src/brpc/src/brpc/server.cpp:1737,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1742,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1742,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1743,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1743,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1754
      start: 1719
    functionDepth: 2
    functionLinenumber: 1719
    functionLinenumberEnd: 1754
    functionName: brpc::Server::RemoveService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 7
    functionsReached:
    - google::protobuf::ServiceDescriptor*::name
    - version
    - seek
    - erase
    - brpc::Server::RemoveMethodsOf
    - brpc::Server::status
    - status_str
    - google::protobuf::Service*::GetDescriptor
    - LOG
    - google::protobuf::ServiceDescriptor*::full_name
    linkageType: ''
    returnType: int
    signature: int Server::RemoveService(google::protobuf::Service* service)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1757,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/server.cpp:1758,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1758,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1759,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1760,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1760,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1763,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1764,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1770,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1771,1
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:1777,1
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:1778,1
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:1779,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1783
      start: 1756
    functionDepth: 1
    functionLinenumber: 1756
    functionLinenumberEnd: 1783
    functionName: brpc::Server::ClearServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - end
    - brpc::Server::status
    - version
    - clear
    - begin
    - status_str
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void Server::ClearServices()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1787,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1789
      start: 1785
    functionDepth: 0
    functionLinenumber: 1785
    functionLinenumberEnd: 1789
    functionName: brpc::Server::FindServiceByFullName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - seek
    linkageType: ''
    returnType: google::protobuf::Service
    signature: "google::protobuf::Service * Server::FindServiceByFullName(\n    const
      butil::StringPiece& full_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1793,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1795
      start: 1791
    functionDepth: 0
    functionLinenumber: 1791
    functionLinenumberEnd: 1795
    functionName: brpc::Server::FindServiceByName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - seek
    linkageType: ''
    returnType: google::protobuf::Service
    signature: "google::protobuf::Service * Server::FindServiceByName(\n    const
      butil::StringPiece& name) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ConnectionCount
      Src: /src/brpc/src/brpc/server.cpp:1800,1
    - Dst: ConnectionCount
      Src: /src/brpc/src/brpc/server.cpp:1803,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/src/brpc/server.cpp:1805,1
    - Dst: brpc::Server::builtin_service_count
      Src: /src/brpc/src/brpc/server.cpp:1806,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ServerStatistics*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1807
      start: 1797
    functionDepth: 1
    functionLinenumber: 1797
    functionLinenumberEnd: 1807
    functionName: brpc::Server::GetStat
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - brpc::Server::builtin_service_count
    - ConnectionCount
    - brpc::Server::service_count
    linkageType: ''
    returnType: void
    signature: void Server::GetStat(ServerStatistics* stat) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<google::protobuf::Service*>*::clear
      Src: /src/brpc/src/brpc/server.cpp:1813,1
    - Dst: std::vector<google::protobuf::Service*>*::reserve
      Src: /src/brpc/src/brpc/server.cpp:1814,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/src/brpc/server.cpp:1814,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1815,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1816,1
    - Dst: ServiceMap::const_iterator::second::is_user_service
      Src: /src/brpc/src/brpc/server.cpp:1817,1
    - Dst: std::vector<google::protobuf::Service*>*::push_back
      Src: /src/brpc/src/brpc/server.cpp:1818,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - services
    argTypes:
    - std::vector<google::protobuf::Service*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1821
      start: 1809
    functionDepth: 1
    functionLinenumber: 1809
    functionLinenumberEnd: 1821
    functionName: brpc::Server::ListServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - end
    - brpc::Server::service_count
    - std::vector<google::protobuf::Service*>*::clear
    - ServiceMap::const_iterator::second::is_user_service
    - std::vector<google::protobuf::Service*>*::reserve
    - std::vector<google::protobuf::Service*>*::push_back
    - begin
    linkageType: ''
    returnType: void
    signature: void Server::ListServices(std::vector<google::protobuf::Service*> *services)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1824,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/server.cpp:1829,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/src/brpc/server.cpp:1829,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1830,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1831,1
    - Dst: ServiceMap::const_iterator::second::is_user_service
      Src: /src/brpc/src/brpc/server.cpp:1832,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1833,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1834,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1836,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1836,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1840,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1841,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1843,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1843,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1848,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1849,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1851,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1851,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1856,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1857,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1859,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1859,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1863,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1864,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1866,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1866,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1868
      start: 1823
    functionDepth: 1
    functionLinenumber: 1823
    functionLinenumberEnd: 1868
    functionName: brpc::Server::GenerateVersionIfNeeded
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - append
    - end
    - brpc::Server::service_count
    - butil::class_name_str
    - ServiceMap::const_iterator::second::is_user_service
    - push_back
    - empty
    - begin
    - reserve
    linkageType: ''
    returnType: void
    signature: void Server::GenerateVersionIfNeeded()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:1871,1
    - Dst: pid_file::find
      Src: /src/brpc/src/brpc/server.cpp:1876,1
    - Dst: pid_file::find
      Src: /src/brpc/src/brpc/server.cpp:1877,1
    - Dst: pid_file::substr
      Src: /src/brpc/src/brpc/server.cpp:1878,1
    - Dst: mkdir
      Src: /src/brpc/src/brpc/server.cpp:1879,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/server.cpp:1879,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/server.cpp:1886,1
    - Dst: pid_file::clear
      Src: /src/brpc/src/brpc/server.cpp:1887,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1870
    functionDepth: 1
    functionLinenumber: 1870
    functionLinenumberEnd: 1890
    functionName: brpc::Server::PutPidFileIfNeeded
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - pid_file::empty
    - pid_file::find
    - std::string::c_str
    - mkdir
    - pid_file::substr
    - pid_file::clear
    - PLOG
    linkageType: ''
    returnType: void
    signature: void Server::PutPidFileIfNeeded()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - Server::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 112
    functionName: brpc::status_str
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * status_str(Server::Status s)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 160
    functionName: brpc::ServerOptions::ServerOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 50
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerOptions::ServerOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/server.cpp:164,1
    - Dst: ServerSSLOptions::ServerSSLOptions
      Src: /src/brpc/src/brpc/server.cpp:164,1
    - Dst: get
      Src: /src/brpc/src/brpc/server.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 167
    functionName: brpc::ServerOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 7
    functionsReached:
    - reset
    - get
    - ServerSSLOptions::ServerSSLOptions
    linkageType: ''
    returnType: ServerSSLOptions
    signature: ServerSSLOptions * ServerOptions::mutable_ssl_options()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 175
    functionName: Server::MethodProperty::OpaqueParams::OpaqueParams()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server::MethodProperty::OpaqueParams::OpaqueParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 185
    functionName: Server::MethodProperty::MethodProperty()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server::MethodProperty::MethodProperty()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::microseconds_to_timeval
      Src: /src/brpc/src/brpc/server.cpp:188,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: brpc::GetUptime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - butil::cpuwide_time_us
    - butil::microseconds_to_timeval
    linkageType: ''
    returnType: timeval
    signature: timeval GetUptime(void* arg/*start_time*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:193,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/server.cpp:196,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/server.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 199
    functionName: brpc::PrintStartTime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - localtime_r
    - static_cast<Server*>
    linkageType: ''
    returnType: void
    signature: void PrintStartTime(std::ostream& os, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/server.cpp:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: brpc::PrintSupportedLB
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancerExtension
    linkageType: ''
    returnType: void
    signature: void PrintSupportedLB(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/server.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 1
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: brpc::PrintSupportedNS
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::NamingServiceExtension
    linkageType: ''
    returnType: void
    signature: void PrintSupportedNS(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/server.cpp:211,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:212,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 218
    functionName: brpc::PrintSupportedProtocols
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListProtocols
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void PrintSupportedProtocols(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListCompressHandler
      Src: /src/brpc/src/brpc/server.cpp:222,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:223,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 229
    functionName: brpc::PrintSupportedCompressions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListCompressHandler
    linkageType: ''
    returnType: void
    signature: void PrintSupportedCompressions(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListChecksumHandler
      Src: /src/brpc/src/brpc/server.cpp:233,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:234,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 240
    functionName: brpc::PrintSupportedChecksums
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListChecksumHandler
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void PrintSupportedChecksums(std::ostream& os, void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/server.cpp:246,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/server.cpp:247,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 254
    functionName: brpc::PrintEnabledProfilers
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - has_TCMALLOC_SAMPLE_PARAMETER
    - IsHeapProfilerEnabled
    linkageType: ''
    returnType: void
    signature: void PrintEnabledProfilers(std::ostream& os, void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: brpc::GetConnectionCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetConnectionCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: brpc::GetServiceCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetServiceCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: brpc::GetBuiltinServiceCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBuiltinServiceCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Vector::Vector
      Src: /src/brpc/src/brpc/server.cpp:293,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 292
    functionDepth: 2
    functionLinenumber: 292
    functionLinenumberEnd: 299
    functionName: brpc::GetSessionLocalDataCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bvar::Vector::Vector
    - static_cast<Server*>
    linkageType: ''
    returnType: bvar::Vector<unsigned, 2>
    signature: bvar::Vector<unsigned, 2> GetSessionLocalDataCount(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/brpc/server.cpp:302,1
    - Dst: static_cast<int*>
      Src: /src/brpc/src/brpc/server.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 303
    functionName: brpc::cast_no_barrier_int
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: int
    signature: int cast_no_barrier_int(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_info_name::empty
      Src: /src/brpc/src/brpc/server.cpp:306,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/server.cpp:307,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/src/brpc/server.cpp:307,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/server.cpp:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 311
    functionName: brpc::Server::ServerPrefix
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - brpc::Server::listen_address
    - std::string
    - server_info_name::empty
    linkageType: ''
    returnType: std::string
    signature: std::string Server::ServerPrefix() const
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:314,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:316,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/server.cpp:317,1
    - Dst: Server*::_nerror_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:321,1
    - Dst: Server*::_eps_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:323,1
    - Dst: Server*::_concurrency_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:325,1
    - Dst: Server*::session_local_data_pool
      Src: /src/brpc/src/brpc/server.cpp:344,1
    - Dst: bvar::PassiveStatus::expose_as
      Src: /src/brpc/src/brpc/server.cpp:345,1
    - Dst: bvar::PassiveStatus::set_vector_names
      Src: /src/brpc/src/brpc/server.cpp:346,1
    - Dst: Server*::_method_map::begin
      Src: /src/brpc/src/brpc/server.cpp:350,1
    - Dst: Server*::_method_map::end
      Src: /src/brpc/src/brpc/server.cpp:351,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/server.cpp:354,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/server.cpp:354,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:355,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: MethodMap::iterator::second::method::full_name
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: MethodMap::iterator::second::status::Expose
      Src: /src/brpc/src/brpc/server.cpp:357,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:360,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:361,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:361,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:363,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:364,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:364,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:368,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:369,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:369,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/server.cpp:373,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/server.cpp:376,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:380,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:384,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/server.cpp:385,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/server.cpp:389,1
    - Dst: Server*::_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:393,1
    - Dst: Server*::_internal_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:396,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/server.cpp:398,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:399,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:401,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:402,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:405,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:407,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:408,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 313
    functionDepth: 3
    functionLinenumber: 313
    functionLinenumberEnd: 412
    functionName: brpc::Server::UpdateDerivedVars
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::_method_map::end
    - bthread_usleep
    - Server*::ServerPrefix
    - SocketUniquePtr::UpdateStatsEverySecond
    - bvar::PassiveStatus::set_vector_names
    - Server*::_am::ListConnections
    - brpc::SetTrackMeAddress
    - bvar::PassiveStatus::expose_as
    - butil::cpuwide_time_us
    - Server*::_eps_bvar::expose_as
    - std::string::resize
    - PLOG_IF
    - Server*::session_local_data_pool
    - Server*::_method_map::begin
    - static_cast<Server*>
    - bvar::to_underscored_name
    - LOG
    - Server*::_internal_am::ListConnections
    - std::string::push_back
    - butil::gettimeofday_us
    - Server*::_nerror_bvar::expose_as
    - butil::cpuwide_time_ms
    - Server*::options
    - Server*::_concurrency_bvar::expose_as
    - MethodMap::iterator::second::status::Expose
    - Expose
    - std::vector::size
    - MethodMap::iterator::second::method::full_name
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void * Server::UpdateDerivedVars(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:416,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/server.cpp:418,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 422
    functionName: '& Server::ServiceProperty::service_name() const'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - service_name
    - GetDescriptor
    linkageType: ''
    returnType: std::string
    signature: std::string & Server::ServiceProperty::service_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/server.cpp:443,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 445
    functionName: brpc::Server::Server
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 146
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void Server::Server(ProfilerLinker)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/server.cpp:448,1
    - Dst: Join
      Src: /src/brpc/src/brpc/server.cpp:449,1
    - Dst: ClearServices
      Src: /src/brpc/src/brpc/server.cpp:450,1
    - Dst: Server::FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:451,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:483,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:484,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:484,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 447
    functionDepth: 1
    functionLinenumber: 447
    functionLinenumberEnd: 497
    functionName: Server::~Server()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - pid_file::empty
    - Server::FreeSSLContexts
    - Stop
    - Join
    - pid_file::c_str
    - ClearServices
    - unlink
    linkageType: ''
    returnType: void
    signature: void Server::~Server()
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:501,1
    - Dst: StatusService::StatusService
      Src: /src/brpc/src/brpc/server.cpp:501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:502,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:505,1
    - Dst: VarsService::VarsService
      Src: /src/brpc/src/brpc/server.cpp:505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:506,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:509,1
    - Dst: ConnectionsService::ConnectionsService
      Src: /src/brpc/src/brpc/server.cpp:509,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:510,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:513,1
    - Dst: FlagsService::FlagsService
      Src: /src/brpc/src/brpc/server.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:514,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:517,1
    - Dst: RpczService::RpczService
      Src: /src/brpc/src/brpc/server.cpp:517,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:518,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:521,1
    - Dst: HotspotsService::HotspotsService
      Src: /src/brpc/src/brpc/server.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:522,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:525,1
    - Dst: IndexService::IndexService
      Src: /src/brpc/src/brpc/server.cpp:525,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:526,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:531,1
    - Dst: VersionService::VersionService
      Src: /src/brpc/src/brpc/server.cpp:531,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:532,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:535,1
    - Dst: HealthService::HealthService
      Src: /src/brpc/src/brpc/server.cpp:535,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:536,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:539,1
    - Dst: ProtobufsService::ProtobufsService
      Src: /src/brpc/src/brpc/server.cpp:539,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:540,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:543,1
    - Dst: BadMethodService::BadMethodService
      Src: /src/brpc/src/brpc/server.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:544,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:547,1
    - Dst: ListService::ListService
      Src: /src/brpc/src/brpc/server.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:548,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:551,1
    - Dst: PrometheusMetricsService::PrometheusMetricsService
      Src: /src/brpc/src/brpc/server.cpp:551,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:552,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:556,1
    - Dst: ThreadsService::ThreadsService
      Src: /src/brpc/src/brpc/server.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:557,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:560,1
    - Dst: MemoryService::MemoryService
      Src: /src/brpc/src/brpc/server.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:561,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:566,1
    - Dst: VLogService::VLogService
      Src: /src/brpc/src/brpc/server.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:567,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:572,1
    - Dst: PProfService::PProfService
      Src: /src/brpc/src/brpc/server.cpp:572,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:573,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:577,1
    - Dst: DirService::DirService
      Src: /src/brpc/src/brpc/server.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:578,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:581,1
    - Dst: BthreadsService::BthreadsService
      Src: /src/brpc/src/brpc/server.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:582,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:585,1
    - Dst: IdsService::IdsService
      Src: /src/brpc/src/brpc/server.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:586,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:589,1
    - Dst: SocketsService::SocketsService
      Src: /src/brpc/src/brpc/server.cpp:589,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:590,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:593,1
    - Dst: GetFaviconService::GetFaviconService
      Src: /src/brpc/src/brpc/server.cpp:593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:594,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:597,1
    - Dst: GetJsService::GetJsService
      Src: /src/brpc/src/brpc/server.cpp:597,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:598,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:601,1
    - Dst: GrpcHealthCheckService::GrpcHealthCheckService
      Src: /src/brpc/src/brpc/server.cpp:601,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:602,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 98
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 499
    functionDepth: 3
    functionLinenumber: 499
    functionLinenumberEnd: 606
    functionName: brpc::Server::AddBuiltinServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - ListService::ListService
    - VarsService::VarsService
    - FlagsService::FlagsService
    - StatusService::StatusService
    - ProtobufsService::ProtobufsService
    - SocketsService::SocketsService
    - IndexService::IndexService
    - GrpcHealthCheckService::GrpcHealthCheckService
    - DirService::DirService
    - HotspotsService::HotspotsService
    - GetJsService::GetJsService
    - VLogService::VLogService
    - brpc::Server::AddBuiltinService
    - GetFaviconService::GetFaviconService
    - HealthService::HealthService
    - LOG
    - BthreadsService::BthreadsService
    - RpczService::RpczService
    - ConnectionsService::ConnectionsService
    - BadMethodService::BadMethodService
    - ThreadsService::ThreadsService
    - VersionService::VersionService
    - PProfService::PProfService
    - MemoryService::MemoryService
    - PrometheusMetricsService::PrometheusMetricsService
    - IdsService::IdsService
    linkageType: ''
    returnType: int
    signature: int Server::AddBuiltinServices()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:612,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:612,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 613
    functionName: brpc::is_http_protocol
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: bool
    signature: bool is_http_protocol(const char* name)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: enabled_protocols::c_str
      Src: /src/brpc/src/brpc/server.cpp:617,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:619,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:619,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/server.cpp:620,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:622,1
    - Dst: Acceptor::Acceptor
      Src: /src/brpc/src/brpc/server.cpp:623,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:625,1
    - Dst: ListProtocols
      Src: /src/brpc/src/brpc/server.cpp:630,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:631,1
    - Dst: is_http_protocol
      Src: /src/brpc/src/brpc/server.cpp:637,1
    - Dst: std::set::erase
      Src: /src/brpc/src/brpc/server.cpp:638,1
    - Dst: Acceptor*::AddHandler
      Src: /src/brpc/src/brpc/server.cpp:649,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:650,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:656,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/server.cpp:659,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/server.cpp:660,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:665,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:665,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 669
      start: 615
    functionDepth: 1
    functionLinenumber: 615
    functionLinenumberEnd: 669
    functionName: brpc::Server::BuildAcceptor
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - std::set::insert
    - std::set::begin
    - butil::StringSplitter::length
    - std::set::end
    - ListProtocols
    - butil::StringSplitter::field
    - std::set::empty
    - enabled_protocols::c_str
    - Acceptor*::AddHandler
    - is_http_protocol
    - std::set::erase
    - LOG
    - std::vector::size
    - Acceptor::Acceptor
    linkageType: ''
    returnType: Acceptor
    signature: Acceptor * Server::BuildAcceptor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/server.cpp:675,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 682
    functionName: brpc::Server::InitializeOnce
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - GlobalInitializeOrDie
    linkageType: ''
    returnType: int
    signature: int Server::InitializeOnce()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:686,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:692,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:693,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:693,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:694,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/server.cpp:698,1
    - Dst: Protocol*::support_server
      Src: /src/brpc/src/brpc/server.cpp:699,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:700,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:703,1
    - Dst: ALPNProtocolToString
      Src: /src/brpc/src/brpc/server.cpp:703,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/server.cpp:705,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - options
    argTypes:
    - ServerSSLOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 684
    functionDepth: 1
    functionLinenumber: 684
    functionLinenumberEnd: 707
    functionName: brpc::Server::InitALPNOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - ALPNProtocolToString
    - std::move
    - butil::StringSplitter::length
    - FindProtocol
    - butil::StringSplitter::field
    - data
    - std::string::append
    - butil::StringPiece::trim_spaces
    - LOG
    - Protocol*::support_server
    linkageType: ''
    returnType: int
    signature: int Server::InitALPNOptions(const ServerSSLOptions* options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const DataFactory*>
      Src: /src/brpc/src/brpc/server.cpp:710,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 709
    functionDepth: 0
    functionLinenumber: 709
    functionLinenumberEnd: 711
    functionName: brpc::CreateServerTLS
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const DataFactory*>
    linkageType: ''
    returnType: void
    signature: void * CreateServerTLS(const void* args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const DataFactory*>
      Src: /src/brpc/src/brpc/server.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - void_factory
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 712
    functionDepth: 0
    functionLinenumber: 712
    functionLinenumberEnd: 714
    functionName: brpc::DestroyServerTLS
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const DataFactory*>
    linkageType: ''
    returnType: void
    signature: void DestroyServerTLS(void* data, const void* void_factory)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BthreadInitArgs*::bthread_init_fn
      Src: /src/brpc/src/brpc/server.cpp:727,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:730,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 725
    functionDepth: 2
    functionLinenumber: 725
    functionLinenumberEnd: 733
    functionName: brpc::BthreadInitEntry
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - BthreadInitArgs*::bthread_init_fn
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * BthreadInitEntry(void* void_args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::Stop
      Src: /src/brpc/src/brpc/server.cpp:738,1
    - Dst: Server*::Join
      Src: /src/brpc/src/brpc/server.cpp:739,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 741
    functionName: operator()(Server* s) const
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::Join
    - Server*::Stop
    linkageType: ''
    returnType: void
    signature: void operator()(Server* s) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getsockname
      Src: /src/brpc/src/brpc/server.cpp:747,1
    - Dst: ntohs
      Src: /src/brpc/src/brpc/server.cpp:750,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 744
    functionDepth: 0
    functionLinenumber: 744
    functionLinenumberEnd: 751
    functionName: brpc::get_port_from_fd
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - ntohs
    - getsockname
    linkageType: ''
    returnType: int
    signature: int get_port_from_fd(int fd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/server.cpp:755,1
    - Dst: ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/server.cpp:760,1
    - Dst: type
      Src: /src/brpc/src/brpc/server.cpp:760,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:762,1
    - Dst: value
      Src: /src/brpc/src/brpc/server.cpp:762,1
    - Dst: ConcurrencyLimiter*::New
      Src: /src/brpc/src/brpc/server.cpp:765,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' amc'
    - out
    argTypes:
    - AdaptiveMaxConcurrency
    - ConcurrencyLimiter**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 772
    functionName: brpc::Server::CreateConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - value
    - ConcurrencyLimiter*::New
    - type
    - ConcurrencyLimiterExtension
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool Server::CreateConcurrencyLimiter(const AdaptiveMaxConcurrency&
      amc,\n                                      ConcurrencyLimiter** out)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:777,1
    - Dst: ServerOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:780,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:781,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:789,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 793
      start: 775
    functionDepth: 1
    functionLinenumber: 775
    functionLinenumberEnd: 793
    functionName: brpc::OptionsAvailableOverRdma
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - ServerOptions*::has_ssl_options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool OptionsAvailableOverRdma(const ServerOptions* opt)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:808,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:811,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:814,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:815,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:816,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:818,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:819,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:819,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:823,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:827,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:830,1
    - Dst: DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/src/brpc/server.cpp:841,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' dst'
    - ' src'
    argTypes:
    - ServerOptions
    - ServerOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 799
    functionDepth: 1
    functionLinenumber: 799
    functionLinenumberEnd: 843
    functionName: brpc::copy_and_fill_server_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - pid_file::empty
    - DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - FREE_PTR_IF_NOT_REUSED
    - pid_file::c_str
    - unlink
    linkageType: ''
    returnType: void
    signature: void copy_and_fill_server_options(ServerOptions& dst, const ServerOptions&
      src)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 806
    functionName: FREE_PTR_IF_NOT_REUSED
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FREE_PTR_IF_NOT_REUSED(ptr)
  - BBCount: 67
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:851,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:857,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:861,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:862,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:862,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:865,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:868,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:868,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:871,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:871,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:872,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:872,1
    - Dst: copy_and_fill_server_options
      Src: /src/brpc/src/brpc/server.cpp:877,1
    - Dst: ServerOptions
      Src: /src/brpc/src/brpc/server.cpp:877,1
    - Dst: h2_settings::IsValid
      Src: /src/brpc/src/brpc/server.cpp:879,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:880,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:886,1
    - Dst: OptionsAvailableOverRdma
      Src: /src/brpc/src/brpc/server.cpp:894,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/server.cpp:897,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/server.cpp:898,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:902,1
    - Dst: http_master_service::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:911,1
    - Dst: google::protobuf::ServiceDescriptor*::FindMethodByName
      Src: /src/brpc/src/brpc/server.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:915,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:918,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:919,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:920,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:923,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:924,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:925,1
    - Dst: SimpleDataPool::SimpleDataPool
      Src: /src/brpc/src/brpc/server.cpp:937,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:939,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:943,1
    - Dst: Reserve
      Src: /src/brpc/src/brpc/server.cpp:945,1
    - Dst: bthread_keytable_pool_t::bthread_keytable_pool_t
      Src: /src/brpc/src/brpc/server.cpp:954,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/src/brpc/server.cpp:955,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:956,1
    - Dst: bthread_key_create2
      Src: /src/brpc/src/brpc/server.cpp:964,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:966,1
    - Dst: bthread_keytable_pool_reserve
      Src: /src/brpc/src/brpc/server.cpp:970,1
    - Dst: brpc::Server::ThreadLocalOptions
      Src: /src/brpc/src/brpc/server.cpp:977,1
    - Dst: BthreadInitArgs::BthreadInitArgs
      Src: /src/brpc/src/brpc/server.cpp:985,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:996,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:1004,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1022,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1027,1
    - Dst: FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:1033,1
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1034,1
    - Dst: brpc::Server::InitALPNOptions
      Src: /src/brpc/src/brpc/server.cpp:1038,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1038,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1041,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/server.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1043,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1046,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1049,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1051,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1052,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1053,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1058,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/src/brpc/server.cpp:1067,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1068,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1075,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1081,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1082,1
    - Dst: ServiceMap::const_iterator::second::restful_map::PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1084,1
    - Dst: PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1088,1
    - Dst: bthread_setconcurrency_by_tag
      Src: /src/brpc/src/brpc/server.cpp:1098,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1101,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1102,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1104,1
    - Dst: AdaptiveMaxConcurrency*::type
      Src: /src/brpc/src/brpc/server.cpp:1107,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1111,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1112,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1115,1
    - Dst: MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1116,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1119,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1131,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1153,1
    - Dst: get_port_from_fd
      Src: /src/brpc/src/brpc/server.cpp:1160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1162,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1169,1
    - Dst: time
      Src: /src/brpc/src/brpc/server.cpp:1178,1
    - Dst: brpc::Server::GenerateVersionIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1179,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/server.cpp:1180,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1186,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1199,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1213,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1219,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1227,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1230,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1233,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1236,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:1239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1241,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1248,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1248,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1260,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:1260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1263,1
    - Dst: butil::my_hostname
      Src: /src/brpc/src/brpc/server.cpp:1263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1266,1
    - Dst: SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/server.cpp:1272,1
    CyclomaticComplexity: 88
    EdgeCount: 88
    ICount: 303
    argCount: 3
    argNames:
    - ' endpoint'
    - ' port_range'
    - opt
    argTypes:
    - butil::EndPoint
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1274
      start: 845
    functionDepth: 4
    functionLinenumber: 845
    functionLinenumberEnd: 1274
    functionName: brpc::Server::StartInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - bthread_key_create2
    - bthread_keytable_pool_init
    - brpc::Server::ThreadLocalOptions
    - butil::is_endpoint_extended
    - brpc::Server::InitializeOnce
    - Reset
    - SetTrackMeAddress
    - copy_and_fill_server_options
    - bthread_usleep
    - brpc::Server::InitALPNOptions
    - bthread_start_background
    - SimpleDataPool::SimpleDataPool
    - bthread_join
    - PrepareForFinding
    - MethodMap::iterator::second::status::SetConcurrencyLimiter
    - certificate::empty
    - fetch_add
    - CHECK_EQ
    - butil::my_hostname
    - brpc::Server::status
    - status_str
    - BthreadInitArgs::BthreadInitArgs
    - StartAccept
    - bthread_keytable_pool_t::bthread_keytable_pool_t
    - butil::fd_guard::release
    - std::unique_ptr::release
    - size
    - time
    - LOG
    - brpc::Server::SetServiceMaxConcurrency
    - get_port_from_fd
    - brpc::Server::PutPidFileIfNeeded
    - std::ostringstream::str
    - brpc::Server::BuildAcceptor
    - brpc::rdma::GlobalRdmaInitializeOrDie
    - AddCertificate
    - ServerOptions
    - brpc::Server::AddBuiltinServices
    - bthread_setconcurrency_by_tag
    - h2_settings::IsValid
    - butil::EndPoint
    - version
    - brpc::Server::GenerateVersionIfNeeded
    - brpc::rdma::InitPollingModeWithTag
    - begin
    - OptionsAvailableOverRdma
    - mutable_ssl_options
    - http_master_service::GetDescriptor
    - Reserve
    - end
    - google::protobuf::MethodDescriptor*::output_type
    - ServiceMap::const_iterator::second::restful_map::PrepareForFinding
    - google::protobuf::ServiceDescriptor*::FindMethodByName
    - google::protobuf::MethodDescriptor*::input_type
    - FreeSSLContexts
    - MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
    - AdaptiveMaxConcurrency*::type
    - brpc::Server::CreateConcurrencyLimiter
    - butil::my_ip
    - has_ssl_options
    - bthread_keytable_pool_reserve
    linkageType: ''
    returnType: int
    signature: "int Server::StartInternal(const butil::EndPoint& endpoint,\n                          const
      PortRange& port_range,\n                          const ServerOptions *opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1277,1
    - Dst: PortRange
      Src: /src/brpc/src/brpc/server.cpp:1278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' endpoint'
    - opt
    argTypes:
    - butil::EndPoint
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1276
    functionDepth: 5
    functionLinenumber: 1276
    functionLinenumberEnd: 1279
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 144
    functionsReached:
    - PortRange
    - brpc::Server::StartInternal
    linkageType: ''
    returnType: int
    signature: int Server::Start(const butil::EndPoint& endpoint, const ServerOptions*
      opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1282,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1283,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1284,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1285,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1288,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ip_port_str
    - opt
    argTypes:
    - char*
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1281
    functionDepth: 1
    functionLinenumber: 1281
    functionLinenumberEnd: 1289
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 145
    functionsReached:
    - hostname2endpoint
    - butil::EndPoint::EndPoint
    - brpc::Server::Start
    - str2endpoint
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::Start(const char* ip_port_str, const ServerOptions* opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1293,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1296,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - port
    - opt
    argTypes:
    - int
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1297
      start: 1291
    functionDepth: 1
    functionLinenumber: 1291
    functionLinenumberEnd: 1297
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 146
    functionsReached:
    - brpc::Server::Start
    - LOG
    - butil::EndPoint
    linkageType: ''
    returnType: int
    signature: int Server::Start(int port, const ServerOptions* opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/server.cpp:1302,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/server.cpp:1303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1304,1
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1307,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1307,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ip_str
    - port_range
    - opt
    argTypes:
    - char*
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1308
      start: 1299
    functionDepth: 5
    functionLinenumber: 1299
    functionLinenumberEnd: 1308
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 146
    functionsReached:
    - butil::EndPoint
    - butil::str2ip
    - brpc::Server::StartInternal
    - LOG
    - butil::hostname2ip
    linkageType: ''
    returnType: int
    signature: "int Server::Start(const char* ip_str, PortRange port_range,\n                  const
      ServerOptions *opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1311,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1311,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - port_range
    - opt
    argTypes:
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1310
    functionDepth: 5
    functionLinenumber: 1310
    functionLinenumberEnd: 1312
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 146
    functionsReached:
    - brpc::Server::StartInternal
    - butil::EndPoint
    linkageType: ''
    returnType: int
    signature: int Server::Start(PortRange port_range, const ServerOptions* opt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1320,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1320,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1323,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1330
      start: 1314
    functionDepth: 1
    functionLinenumber: 1314
    functionLinenumberEnd: 1330
    functionName: brpc::Server::Stop
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 48
    functionsReached:
    - version
    - StopAccept
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::Stop(int timeout_ms)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Join
      Src: /src/brpc/src/brpc/server.cpp:1338,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/src/brpc/server.cpp:1341,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:1347,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1355,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/src/brpc/server.cpp:1355,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1365,1
    - Dst: bthread_key_delete
      Src: /src/brpc/src/brpc/server.cpp:1365,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/server.cpp:1373,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1374,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/server.cpp:1378,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1381
      start: 1333
    functionDepth: 3
    functionLinenumber: 1333
    functionLinenumberEnd: 1381
    functionName: brpc::Server::Join
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 50
    functionsReached:
    - Reset
    - brpc::Server::Join
    - bthread_key_delete
    - bthread_join
    - CHECK_EQ
    - bthread_keytable_pool_destroy
    - fetch_sub
    - bthread_stop
    linkageType: ''
    returnType: int
    signature: int Server::Join()
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1387,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1390,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1391,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1392,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1392,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:1397,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1398,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1398,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1402,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1402,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1407,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1407,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1408,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1408,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1411,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1411,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1414,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1415,1
    - Dst: ServiceProperty*::service_name
      Src: /src/brpc/src/brpc/server.cpp:1416,1
    - Dst: google::protobuf::ServiceDescriptor*::file
      Src: /src/brpc/src/brpc/server.cpp:1421,1
    - Dst: dynamic_cast<Tabbed*>
      Src: /src/brpc/src/brpc/server.cpp:1423,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1424,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:1425,1
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1441,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1442,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1442,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1449,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1449,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:1450,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1451,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1451,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1455,1
    - Dst: brpc::Server::RemoveMethodsOf
      Src: /src/brpc/src/brpc/server.cpp:1456,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1464,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1465,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:1475,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/server.cpp:1476,1
    - Dst: ParseRestfulMappings
      Src: /src/brpc/src/brpc/server.cpp:1479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1480,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1481,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/server.cpp:1484,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1486,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1487,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:1505,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1507,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1510,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1511,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1516,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1518,1
    - Dst: AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1529,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1531,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1535,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1535,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1537,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1538,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1540,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1540,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1544,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1548,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1550,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1555,1
    - Dst: RestfulMap*::AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1565,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1567,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1568,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1573,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1577,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1577,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1579,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1580,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1582,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1582,1
    - Dst: TabInfoList::TabInfoList
      Src: /src/brpc/src/brpc/server.cpp:1596,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1598,1
    - Dst: Tabbed*::GetTabInfo
      Src: /src/brpc/src/brpc/server.cpp:1599,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1600,1
    - Dst: valid
      Src: /src/brpc/src/brpc/server.cpp:1603,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1604,1
    - Dst: resize
      Src: /src/brpc/src/brpc/server.cpp:1606,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1607,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 160
    argCount: 3
    argNames:
    - service
    - is_builtin_service
    - ' svc_opt'
    argTypes:
    - google::protobuf::Service*
    - bool
    - ServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1613
      start: 1383
    functionDepth: 3
    functionLinenumber: 1383
    functionLinenumberEnd: 1613
    functionName: brpc::Server::AddServiceInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 6
    functionsReached:
    - brpc::Server::InitializeOnce
    - Tabbed*::GetTabInfo
    - brpc::Server::RemoveService
    - ServiceProperty*::service_name
    - std::vector::empty
    - brpc::Server::status
    - RestfulMap*::AddMethod
    - status_str
    - google::protobuf::MethodDescriptor*::full_name
    - path::to_string
    - dynamic_cast<Tabbed*>
    - google::protobuf::ServiceDescriptor*::file
    - google::protobuf::ServiceDescriptor*::method
    - std::string::append
    - ParseRestfulMappings
    - size
    - butil::StringPiece::empty
    - LOG
    - MethodProperty*::http_url::append
    - google::protobuf::ServiceDescriptor*::full_name
    - std::string::push_back
    - TabInfoList::TabInfoList
    - google::protobuf::ServiceDescriptor*::name
    - version
    - AddMethod
    - brpc::Server::RemoveMethodsOf
    - butil::StringPiece::trim_spaces
    - google::protobuf::MethodDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - MethodStatus::MethodStatus
    - MethodProperty*::http_url::empty
    - std::string::reserve
    - google::protobuf::ServiceDescriptor*::method_count
    - std::string::string
    - resize
    - RestfulMap::RestfulMap
    - empty
    - valid
    - seek
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: "int Server::AddServiceInternal(google::protobuf::Service* service,\n
      \                              bool is_builtin_service,\n                               const
      ServiceOptions& svc_opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1626
      start: 1615
    functionDepth: 0
    functionLinenumber: 1615
    functionLinenumberEnd: 1626
    functionName: brpc::ServiceOptions::ServiceOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServiceOptions::ServiceOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - service
    - ownership
    argTypes:
    - google::protobuf::Service*
    - ServiceOwnership
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1633
      start: 1628
    functionDepth: 2
    functionLinenumber: 1628
    functionLinenumberEnd: 1633
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 116
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       ServiceOwnership
      ownership)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/src/brpc/server.cpp:1642,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1644,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 4
    argNames:
    - service
    - ownership
    - ' restful_mappings'
    - allow_default_url
    argTypes:
    - google::protobuf::Service*
    - ServiceOwnership
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1645
      start: 1635
    functionDepth: 2
    functionLinenumber: 1635
    functionLinenumberEnd: 1645
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 116
    functionsReached:
    - as_string
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       ServiceOwnership
      ownership,\n                       const butil::StringPiece& restful_mappings,\n
      \                      bool allow_default_url)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1649,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service
    - ' options'
    argTypes:
    - google::protobuf::Service*
    - ServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1650
      start: 1647
    functionDepth: 2
    functionLinenumber: 1647
    functionLinenumberEnd: 1650
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 116
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       const
      ServiceOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1656
      start: 1652
    functionDepth: 2
    functionLinenumber: 1652
    functionLinenumberEnd: 1656
    functionName: brpc::Server::AddBuiltinService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: int Server::AddBuiltinService(google::protobuf::Service* service)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1659,1
    - Dst: google::protobuf::ServiceDescriptor*::file
      Src: /src/brpc/src/brpc/server.cpp:1660,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1662,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:1663,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1664,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1664,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/server.cpp:1666,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:1667,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1667,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1667,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1668,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1668,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:1669,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1670,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1670,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1674,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1674,1
    - Dst: MethodProperty*::http_url::c_str
      Src: /src/brpc/src/brpc/server.cpp:1678,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:1680,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:1680,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:1681,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/server.cpp:1683,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/server.cpp:1683,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/server.cpp:1683,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1685,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:1688,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:1688,1
    - Dst: FindServicePropertyByName
      Src: /src/brpc/src/brpc/server.cpp:1689,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/server.cpp:1693,1
    - Dst: RemoveByPathString
      Src: /src/brpc/src/brpc/server.cpp:1694,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1698,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/server.cpp:1703,1
    - Dst: ServiceProperty*::restful_map::RemoveByPathString
      Src: /src/brpc/src/brpc/server.cpp:1704,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1705,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1715,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1715,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 43
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1717
      start: 1658
    functionDepth: 1
    functionLinenumber: 1658
    functionLinenumberEnd: 1717
    functionName: brpc::Server::RemoveMethodsOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringPiece::data
    - ServiceProperty*::restful_map::RemoveByPathString
    - google::protobuf::MethodDescriptor*::full_name
    - google::protobuf::ServiceDescriptor*::file
    - RemoveByPathString
    - google::protobuf::ServiceDescriptor*::method
    - butil::StringPiece::CopyToString
    - std::string::append
    - MethodProperty*::http_url::c_str
    - LOG
    - butil::StringPiece::size
    - std::string::push_back
    - FindServicePropertyByName
    - google::protobuf::ServiceDescriptor*::name
    - std::string::clear
    - erase
    - butil::StringPiece::trim_spaces
    - google::protobuf::MethodDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - std::string::reserve
    - google::protobuf::ServiceDescriptor*::method_count
    - butil::StringSplitter::field
    - seek
    linkageType: ''
    returnType: void
    signature: void Server::RemoveMethodsOf(google::protobuf::Service* service)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1721,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1725,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1726,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1727,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1727,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1727,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1731,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1732,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1732,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1734,1
    - Dst: brpc::Server::RemoveMethodsOf
      Src: /src/brpc/src/brpc/server.cpp:1737,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1742,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1742,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:1743,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1743,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1754
      start: 1719
    functionDepth: 2
    functionLinenumber: 1719
    functionLinenumberEnd: 1754
    functionName: brpc::Server::RemoveService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 8
    functionsReached:
    - google::protobuf::ServiceDescriptor*::name
    - version
    - seek
    - erase
    - brpc::Server::RemoveMethodsOf
    - brpc::Server::status
    - status_str
    - google::protobuf::Service*::GetDescriptor
    - LOG
    - google::protobuf::ServiceDescriptor*::full_name
    linkageType: ''
    returnType: int
    signature: int Server::RemoveService(google::protobuf::Service* service)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1757,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/server.cpp:1758,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1758,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1759,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1760,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1760,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1763,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1764,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1770,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1771,1
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:1777,1
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:1778,1
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:1779,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1783
      start: 1756
    functionDepth: 1
    functionLinenumber: 1756
    functionLinenumberEnd: 1783
    functionName: brpc::Server::ClearServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - end
    - brpc::Server::status
    - version
    - clear
    - begin
    - status_str
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void Server::ClearServices()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1787,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1789
      start: 1785
    functionDepth: 0
    functionLinenumber: 1785
    functionLinenumberEnd: 1789
    functionName: brpc::Server::FindServiceByFullName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - seek
    linkageType: ''
    returnType: google::protobuf::Service
    signature: "google::protobuf::Service * Server::FindServiceByFullName(\n    const
      butil::StringPiece& full_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1793,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1795
      start: 1791
    functionDepth: 0
    functionLinenumber: 1791
    functionLinenumberEnd: 1795
    functionName: brpc::Server::FindServiceByName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - seek
    linkageType: ''
    returnType: google::protobuf::Service
    signature: "google::protobuf::Service * Server::FindServiceByName(\n    const
      butil::StringPiece& name) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ConnectionCount
      Src: /src/brpc/src/brpc/server.cpp:1800,1
    - Dst: ConnectionCount
      Src: /src/brpc/src/brpc/server.cpp:1803,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/src/brpc/server.cpp:1805,1
    - Dst: brpc::Server::builtin_service_count
      Src: /src/brpc/src/brpc/server.cpp:1806,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ServerStatistics*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1807
      start: 1797
    functionDepth: 1
    functionLinenumber: 1797
    functionLinenumberEnd: 1807
    functionName: brpc::Server::GetStat
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - brpc::Server::builtin_service_count
    - ConnectionCount
    - brpc::Server::service_count
    linkageType: ''
    returnType: void
    signature: void Server::GetStat(ServerStatistics* stat) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<google::protobuf::Service*>*::clear
      Src: /src/brpc/src/brpc/server.cpp:1813,1
    - Dst: std::vector<google::protobuf::Service*>*::reserve
      Src: /src/brpc/src/brpc/server.cpp:1814,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/src/brpc/server.cpp:1814,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1815,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1816,1
    - Dst: ServiceMap::const_iterator::second::is_user_service
      Src: /src/brpc/src/brpc/server.cpp:1817,1
    - Dst: std::vector<google::protobuf::Service*>*::push_back
      Src: /src/brpc/src/brpc/server.cpp:1818,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - services
    argTypes:
    - std::vector<google::protobuf::Service*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1821
      start: 1809
    functionDepth: 1
    functionLinenumber: 1809
    functionLinenumberEnd: 1821
    functionName: brpc::Server::ListServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - end
    - brpc::Server::service_count
    - std::vector<google::protobuf::Service*>*::clear
    - ServiceMap::const_iterator::second::is_user_service
    - std::vector<google::protobuf::Service*>*::reserve
    - std::vector<google::protobuf::Service*>*::push_back
    - begin
    linkageType: ''
    returnType: void
    signature: void Server::ListServices(std::vector<google::protobuf::Service*> *services)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1824,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/server.cpp:1829,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/src/brpc/server.cpp:1829,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1830,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1831,1
    - Dst: ServiceMap::const_iterator::second::is_user_service
      Src: /src/brpc/src/brpc/server.cpp:1832,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1833,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1834,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1836,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1836,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1840,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1841,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1843,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1843,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1848,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1849,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1851,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1851,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1856,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1857,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1859,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1859,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1863,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/server.cpp:1864,1
    - Dst: append
      Src: /src/brpc/src/brpc/server.cpp:1866,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/server.cpp:1866,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1868
      start: 1823
    functionDepth: 1
    functionLinenumber: 1823
    functionLinenumberEnd: 1868
    functionName: brpc::Server::GenerateVersionIfNeeded
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - append
    - end
    - brpc::Server::service_count
    - butil::class_name_str
    - ServiceMap::const_iterator::second::is_user_service
    - push_back
    - empty
    - begin
    - reserve
    linkageType: ''
    returnType: void
    signature: void Server::GenerateVersionIfNeeded()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:1871,1
    - Dst: pid_file::find
      Src: /src/brpc/src/brpc/server.cpp:1876,1
    - Dst: pid_file::find
      Src: /src/brpc/src/brpc/server.cpp:1877,1
    - Dst: pid_file::substr
      Src: /src/brpc/src/brpc/server.cpp:1878,1
    - Dst: mkdir
      Src: /src/brpc/src/brpc/server.cpp:1879,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/server.cpp:1879,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/server.cpp:1886,1
    - Dst: pid_file::clear
      Src: /src/brpc/src/brpc/server.cpp:1887,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1870
    functionDepth: 1
    functionLinenumber: 1870
    functionLinenumberEnd: 1890
    functionName: brpc::Server::PutPidFileIfNeeded
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 4
    functionsReached:
    - pid_file::empty
    - pid_file::find
    - std::string::c_str
    - mkdir
    - pid_file::substr
    - pid_file::clear
    - PLOG
    linkageType: ''
    returnType: void
    signature: void Server::PutPidFileIfNeeded()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsAskedToQuit
      Src: /src/brpc/src/brpc/server.cpp:1904,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:1905,1
    - Dst: Stop
      Src: /src/brpc/src/brpc/server.cpp:1907,1
    - Dst: Join
      Src: /src/brpc/src/brpc/server.cpp:1908,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1909
      start: 1903
    functionDepth: 2
    functionLinenumber: 1903
    functionLinenumberEnd: 1909
    functionName: Server::RunUntilAskedToQuit
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - IsAskedToQuit
    - Stop
    - Join
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void Server::RunUntilAskedToQuit()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server::ThreadLocalOptions*>
      Src: /src/brpc/src/brpc/server.cpp:1913,1
    - Dst: bthread_get_assigned_data
      Src: /src/brpc/src/brpc/server.cpp:1913,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/server.cpp:1917,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/server.cpp:1918,1
    - Dst: bthread_getspecific
      Src: /src/brpc/src/brpc/server.cpp:1921,1
    - Dst: Server::ThreadLocalOptions*::thread_local_data_factory::CreateData
      Src: /src/brpc/src/brpc/server.cpp:1923,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1925,1
    - Dst: bthread_setspecific
      Src: /src/brpc/src/brpc/server.cpp:1925,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1929
      start: 1911
    functionDepth: 3
    functionLinenumber: 1911
    functionLinenumberEnd: 1929
    functionName: thread_local_data
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bthread_setspecific
    - bthread_getspecific
    - CHECK_EQ
    - CHECK
    - bthread_get_assigned_data
    - BAIDU_UNLIKELY
    - Server::ThreadLocalOptions*::thread_local_data_factory::CreateData
    - static_cast<const Server::ThreadLocalOptions*>
    linkageType: ''
    returnType: void
    signature: void * thread_local_data()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:1934,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' os'
    - link
    - tab_name
    - current_tab_name
    argTypes:
    - std::ostream
    - char*
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1938
      start: 1931
    functionDepth: 0
    functionLinenumber: 1931
    functionLinenumberEnd: 1938
    functionName: tabs_li
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: void
    signature: "void tabs_li(std::ostream& os, const char* link,\n                    const
      char* tab_name, const char* current_tab_name)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1944,1
    - Dst: tabs_li
      Src: /src/brpc/src/brpc/server.cpp:1946,1
    - Dst: path::c_str
      Src: /src/brpc/src/brpc/server.cpp:1946,1
    - Dst: tab_name::c_str
      Src: /src/brpc/src/brpc/server.cpp:1946,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - current_tab_name
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1953
      start: 1940
    functionDepth: 1
    functionLinenumber: 1940
    functionLinenumberEnd: 1953
    functionName: Server::PrintTabsBody
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - size
    - tabs_li
    - path::c_str
    - tab_name::c_str
    linkageType: ''
    returnType: void
    signature: "void Server::PrintTabsBody(std::ostream& os,\n                           const
      char* current_tab_name) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1960,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/server.cpp:1964,1
    - Dst: Server::Server
      Src: /src/brpc/src/brpc/server.cpp:1966,1
    - Dst: Server*::set_version
      Src: /src/brpc/src/brpc/server.cpp:1967,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/server.cpp:1967,1
    - Dst: GetProgramName
      Src: /src/brpc/src/brpc/server.cpp:1968,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/server.cpp:1971,1
    - Dst: Server*::Start
      Src: /src/brpc/src/brpc/server.cpp:1972,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1973,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1983,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/server.cpp:1984,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1958
    functionDepth: 1
    functionLinenumber: 1958
    functionLinenumberEnd: 1986
    functionName: StartDummyServerAt
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - Server*::set_version
    - Server*::Start
    - bthread_self_tag
    - BAIDU_SCOPED_LOCK
    - Server::Server
    - listen_address
    - LOG
    - GetProgramName
    linkageType: ''
    returnType: int
    signature: int StartDummyServerAt(int port, ProfilerLinker)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1990
      start: 1988
    functionDepth: 0
    functionLinenumber: 1988
    functionLinenumberEnd: 1990
    functionName: IsDummyServerRunning
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsDummyServerRunning()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1994,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' fullname'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1995
      start: 1992
    functionDepth: 0
    functionLinenumber: 1992
    functionLinenumberEnd: 1995
    functionName: Server::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: Server::MethodProperty
    signature: 'Server::MethodProperty *

      Server::FindMethodPropertyByFullName(const butil::StringPiece& fullname) const'
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2000,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2000,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/server.cpp:2004,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:2004,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2004,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2005,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/server.cpp:2006,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2006,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:2006,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2006,1
    - Dst: Server::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/server.cpp:2007,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/server.cpp:2007,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:2010,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:2011,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:2011,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2011,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:2012,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:2013,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:2013,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2013,1
    - Dst: Server::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/server.cpp:2014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 2
    argNames:
    - ' service_name'
    - ' method_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2016
      start: 1997
    functionDepth: 1
    functionLinenumber: 1997
    functionLinenumberEnd: 2016
    functionName: Server::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - std::string::reserve
    - memcpy
    - Server::FindMethodPropertyByFullName
    - std::string::append
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nServer::FindMethodPropertyByFullName(const
      butil::StringPiece& service_name/*full*/,\n                                     const
      butil::StringPiece& method_name) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Server::FindServicePropertyByName
      Src: /src/brpc/src/brpc/server.cpp:2021,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:2025,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:2026,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:2029,1
    - Dst: Server::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/server.cpp:2030,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:2030,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - ' service_name'
    - method_index
    argTypes:
    - butil::StringPiece
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2018
    functionDepth: 1
    functionLinenumber: 2018
    functionLinenumberEnd: 2031
    functionName: Server::FindMethodPropertyByNameAndIndex
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::ServiceDescriptor*::method
    - Server::FindServicePropertyByName
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::FindMethodPropertyByFullName
    - Server::ServiceProperty*::service::GetDescriptor
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nServer::FindMethodPropertyByNameAndIndex(const
      butil::StringPiece& service_name,\n                                         int
      method_index) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2035,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' fullname'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2036
      start: 2033
    functionDepth: 0
    functionLinenumber: 2033
    functionLinenumberEnd: 2036
    functionName: Server::FindServicePropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: 'Server::ServiceProperty *

      Server::FindServicePropertyByFullName(const butil::StringPiece& fullname) const'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2040,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2041
      start: 2038
    functionDepth: 0
    functionLinenumber: 2038
    functionLinenumberEnd: 2041
    functionName: Server::FindServicePropertyByName
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - seek
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: 'Server::ServiceProperty *

      Server::FindServicePropertyByName(const butil::StringPiece& name) const'
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2044,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2045,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:2049,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2050,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2051,1
    - Dst: std::make_shared<SocketSSLContext>
      Src: /src/brpc/src/brpc/server.cpp:2057,1
    - Dst: CreateServerSSLContext
      Src: /src/brpc/src/brpc/server.cpp:2058,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2060,1
    - Dst: SSL_CTX_set_tlsext_servername_callback
      Src: /src/brpc/src/brpc/server.cpp:2067,1
    - Dst: SSL_CTX_set_tlsext_servername_arg
      Src: /src/brpc/src/brpc/server.cpp:2068,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/server.cpp:2071,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2072,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - ' cert'
    argTypes:
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2077
      start: 2043
    functionDepth: 1
    functionLinenumber: 2043
    functionLinenumberEnd: 2077
    functionName: Server::AddCertificate
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - SSL_CTX_set_tlsext_servername_arg
    - std::make_shared<SocketSSLContext>
    - ssl_options
    - SSL_CTX_set_tlsext_servername_callback
    - Modify
    - std::string::append
    - CreateServerSSLContext
    - has_ssl_options
    - seek
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::AddCertificate(const CertInfo& cert)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: filters::size
      Src: /src/brpc/src/brpc/server.cpp:2080,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/server.cpp:2081,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/server.cpp:2083,1
    - Dst: CertMap*::seek
      Src: /src/brpc/src/brpc/server.cpp:2089,1
    - Dst: CertMap*::insert
      Src: /src/brpc/src/brpc/server.cpp:2090,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2092,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' bg'
    - ' ssl_ctx'
    argTypes:
    - CertMaps
    - SSLContext
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2096
      start: 2079
    functionDepth: 1
    functionLinenumber: 2079
    functionLinenumberEnd: 2096
    functionName: Server::AddCertMapping
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - CertMap*::seek
    - strncmp
    - c_str
    - filters::size
    - LOG
    - CertMap*::insert
    linkageType: ''
    returnType: bool
    signature: bool Server::AddCertMapping(CertMaps& bg, const SSLContext& ssl_ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2099,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2100,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:2104,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2111,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/server.cpp:2116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2117,1
    - Dst: erase
      Src: /src/brpc/src/brpc/server.cpp:2121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - ' cert'
    argTypes:
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2123
      start: 2098
    functionDepth: 1
    functionLinenumber: 2098
    functionLinenumberEnd: 2123
    functionName: Server::RemoveCertificate
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - Modify
    - erase
    - std::string::append
    - has_ssl_options
    - seek
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::RemoveCertificate(const CertInfo& cert)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: filters::size
      Src: /src/brpc/src/brpc/server.cpp:2126,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/server.cpp:2127,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/server.cpp:2129,1
    - Dst: CertMap*::seek
      Src: /src/brpc/src/brpc/server.cpp:2135,1
    - Dst: CertMap*::erase
      Src: /src/brpc/src/brpc/server.cpp:2137,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - ' bg'
    - ' ssl_ctx'
    argTypes:
    - CertMaps
    - SSLContext
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2141
      start: 2125
    functionDepth: 0
    functionLinenumber: 2125
    functionLinenumberEnd: 2141
    functionName: Server::RemoveCertMapping
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - CertMap*::seek
    - strncmp
    - c_str
    - filters::size
    - CertMap*::erase
    linkageType: ''
    returnType: bool
    signature: bool Server::RemoveCertMapping(CertMaps& bg, const SSLContext& ssl_ctx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2145,1
    - Dst: SSLContextMap::init
      Src: /src/brpc/src/brpc/server.cpp:2150,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2151,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2157,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2158,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:2161,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:2163,1
    - Dst: SSLContextMap::seek
      Src: /src/brpc/src/brpc/server.cpp:2164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2165,1
    - Dst: std::make_shared<SocketSSLContext>
      Src: /src/brpc/src/brpc/server.cpp:2171,1
    - Dst: CreateServerSSLContext
      Src: /src/brpc/src/brpc/server.cpp:2172,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2174,1
    - Dst: SSL_CTX_set_tlsext_servername_callback
      Src: /src/brpc/src/brpc/server.cpp:2180,1
    - Dst: SSL_CTX_set_tlsext_servername_arg
      Src: /src/brpc/src/brpc/server.cpp:2181,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/server.cpp:2186,1
    - Dst: swap
      Src: /src/brpc/src/brpc/server.cpp:2190,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 1
    argNames:
    - ' certs'
    argTypes:
    - std::vector<CertInfo>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2192
      start: 2143
    functionDepth: 1
    functionLinenumber: 2143
    functionLinenumberEnd: 2192
    functionName: Server::ResetCertificates
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - SSL_CTX_set_tlsext_servername_arg
    - swap
    - std::make_shared<SocketSSLContext>
    - ssl_options
    - SSLContextMap::init
    - SSL_CTX_set_tlsext_servername_callback
    - Modify
    - std::string::append
    - CreateServerSSLContext
    - has_ssl_options
    - size
    - SSLContextMap::seek
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::ResetCertificates(const std::vector<CertInfo>& certs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cert_map::clear
      Src: /src/brpc/src/brpc/server.cpp:2195,1
    - Dst: wildcard_cert_map::clear
      Src: /src/brpc/src/brpc/server.cpp:2196,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:2199,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:2199,1
    - Dst: filters::size
      Src: /src/brpc/src/brpc/server.cpp:2201,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/server.cpp:2202,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/server.cpp:2204,1
    - Dst: CertMap*::seek
      Src: /src/brpc/src/brpc/server.cpp:2210,1
    - Dst: CertMap*::insert
      Src: /src/brpc/src/brpc/server.cpp:2211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2213,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' ctx_map'
    argTypes:
    - CertMaps
    - SSLContextMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2218
      start: 2194
    functionDepth: 1
    functionLinenumber: 2194
    functionLinenumberEnd: 2218
    functionName: Server::ResetCertMappings
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - end
    - wildcard_cert_map::clear
    - CertMap*::seek
    - c_str
    - strncmp
    - filters::size
    - begin
    - LOG
    - cert_map::clear
    - CertMap*::insert
    linkageType: ''
    returnType: bool
    signature: bool Server::ResetCertMappings(CertMaps& bg, const SSLContextMap& ctx_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/server.cpp:2221,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/server.cpp:2222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2224
      start: 2220
    functionDepth: 1
    functionLinenumber: 2220
    functionLinenumberEnd: 2224
    functionName: Server::FreeSSLContexts
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - Modify
    - clear
    linkageType: ''
    returnType: void
    signature: void Server::FreeSSLContexts()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cert_map::clear
      Src: /src/brpc/src/brpc/server.cpp:2227,1
    - Dst: wildcard_cert_map::clear
      Src: /src/brpc/src/brpc/server.cpp:2228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' bg'
    argTypes:
    - CertMaps
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2230
      start: 2226
    functionDepth: 1
    functionLinenumber: 2226
    functionLinenumberEnd: 2230
    functionName: Server::ClearCertMapping
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - wildcard_cert_map::clear
    - cert_map::clear
    linkageType: ''
    returnType: bool
    signature: bool Server::ClearCertMapping(CertMaps& bg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsRunning
      Src: /src/brpc/src/brpc/server.cpp:2233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2240
      start: 2232
    functionDepth: 1
    functionLinenumber: 2232
    functionLinenumberEnd: 2240
    functionName: Server::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - IsRunning
    - LOG
    linkageType: ''
    returnType: int
    signature: int Server::ResetMaxConcurrency(int max_concurrency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2244,1
    - Dst: MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/server.cpp:2244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - mp
    argTypes:
    - MethodProperty*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2250
      start: 2242
    functionDepth: 1
    functionLinenumber: 2242
    functionLinenumberEnd: 2250
    functionName: '& Server::MaxConcurrencyOf(MethodProperty* mp)'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - MethodProperty*::method::full_name
    - LOG
    linkageType: ''
    returnType: AdaptiveMaxConcurrency
    signature: AdaptiveMaxConcurrency & Server::MaxConcurrencyOf(MethodProperty* mp)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - mp
    argTypes:
    - MethodProperty*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2257
      start: 2252
    functionDepth: 0
    functionLinenumber: 2252
    functionLinenumberEnd: 2257
    functionName: Server::MaxConcurrencyOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int Server::MaxConcurrencyOf(const MethodProperty* mp) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str<NsheadService>
      Src: /src/brpc/src/brpc/server.cpp:2261,1
    - Dst: options
      Src: /src/brpc/src/brpc/server.cpp:2262,1
    - Dst: options
      Src: /src/brpc/src/brpc/server.cpp:2265,1
    - Dst: butil::class_name_str<ThriftService>
      Src: /src/brpc/src/brpc/server.cpp:2268,1
    - Dst: options
      Src: /src/brpc/src/brpc/server.cpp:2269,1
    - Dst: options
      Src: /src/brpc/src/brpc/server.cpp:2272,1
    - Dst: butil::class_name_str<BaiduMasterService>
      Src: /src/brpc/src/brpc/server.cpp:2275,1
    - Dst: options
      Src: /src/brpc/src/brpc/server.cpp:2276,1
    - Dst: options
      Src: /src/brpc/src/brpc/server.cpp:2279,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2282,1
    - Dst: MaxConcurrencyOf
      Src: /src/brpc/src/brpc/server.cpp:2286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2290,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2293
      start: 2259
    functionDepth: 1
    functionLinenumber: 2259
    functionLinenumberEnd: 2293
    functionName: '& Server::MaxConcurrencyOf(const butil::StringPiece& full_method_name)'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - butil::class_name_str<NsheadService>
    - butil::class_name_str<ThriftService>
    - seek
    - MaxConcurrencyOf
    - options
    - butil::class_name_str<BaiduMasterService>
    - LOG
    linkageType: ''
    returnType: AdaptiveMaxConcurrency
    signature: AdaptiveMaxConcurrency & Server::MaxConcurrencyOf(const butil::StringPiece&
      full_method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Server::MaxConcurrencyOf
      Src: /src/brpc/src/brpc/server.cpp:2296,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2297
      start: 2295
    functionDepth: 1
    functionLinenumber: 2295
    functionLinenumberEnd: 2297
    functionName: Server::MaxConcurrencyOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 5
    functionsReached:
    - seek
    - Server::MaxConcurrencyOf
    linkageType: ''
    returnType: int
    signature: int Server::MaxConcurrencyOf(const butil::StringPiece& full_method_name)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: const_cast<MethodProperty*>
      Src: /src/brpc/src/brpc/server.cpp:2301,1
    - Dst: FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/server.cpp:2302,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2304,1
    - Dst: MaxConcurrencyOf
      Src: /src/brpc/src/brpc/server.cpp:2309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' full_service_name'
    - ' method_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2310
      start: 2299
    functionDepth: 1
    functionLinenumber: 2299
    functionLinenumberEnd: 2310
    functionName: "& Server::MaxConcurrencyOf(const butil::StringPiece& full_service_name,\n
      \                             const butil::StringPiece& method_name)"
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - MaxConcurrencyOf
    - const_cast<MethodProperty*>
    - LOG
    - FindMethodPropertyByFullName
    linkageType: ''
    returnType: AdaptiveMaxConcurrency
    signature: "AdaptiveMaxConcurrency & Server::MaxConcurrencyOf(const butil::StringPiece&
      full_service_name,\n                              const butil::StringPiece&
      method_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Server::MaxConcurrencyOf
      Src: /src/brpc/src/brpc/server.cpp:2314,1
    - Dst: Server::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/server.cpp:2314,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_service_name'
    - ' method_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2316
      start: 2312
    functionDepth: 1
    functionLinenumber: 2312
    functionLinenumberEnd: 2316
    functionName: Server::MaxConcurrencyOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 6
    functionsReached:
    - Server::MaxConcurrencyOf
    - Server::FindMethodPropertyByFullName
    linkageType: ''
    returnType: int
    signature: "int Server::MaxConcurrencyOf(const butil::StringPiece& full_service_name,\n
      \                            const butil::StringPiece& method_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MaxConcurrencyOf
      Src: /src/brpc/src/brpc/server.cpp:2320,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:2320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service
    - ' method_name'
    argTypes:
    - google::protobuf::Service*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2318
    functionDepth: 0
    functionLinenumber: 2318
    functionLinenumberEnd: 2321
    functionName: "& Server::MaxConcurrencyOf(google::protobuf::Service* service,\n
      \                             const butil::StringPiece& method_name)"
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - MaxConcurrencyOf
    - google::protobuf::Service*::GetDescriptor
    linkageType: ''
    returnType: AdaptiveMaxConcurrency
    signature: "AdaptiveMaxConcurrency & Server::MaxConcurrencyOf(google::protobuf::Service*
      service,\n                              const butil::StringPiece& method_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Server::MaxConcurrencyOf
      Src: /src/brpc/src/brpc/server.cpp:2325,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:2325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service
    - ' method_name'
    argTypes:
    - google::protobuf::Service*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2326
      start: 2323
    functionDepth: 1
    functionLinenumber: 2323
    functionLinenumberEnd: 2326
    functionName: Server::MaxConcurrencyOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 7
    functionsReached:
    - Server::MaxConcurrencyOf
    - google::protobuf::Service*::GetDescriptor
    linkageType: ''
    returnType: int
    signature: "int Server::MaxConcurrencyOf(google::protobuf::Service* service,\n
      \                            const butil::StringPiece& method_name) const"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2329,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2331,1
    - Dst: IsRunning
      Src: /src/brpc/src/brpc/server.cpp:2335,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2340,1
    - Dst: MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/server.cpp:2340,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2346
      start: 2328
    functionDepth: 1
    functionLinenumber: 2328
    functionLinenumberEnd: 2346
    functionName: '& Server::IgnoreEovercrowdedOf(const butil::StringPiece& full_method_name)'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - IsRunning
    - seek
    - LOG
    - MethodProperty*::method::full_name
    linkageType: ''
    returnType: bool
    signature: bool & Server::IgnoreEovercrowdedOf(const butil::StringPiece& full_method_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:2349,1
    - Dst: IsRunning
      Src: /src/brpc/src/brpc/server.cpp:2350,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:2351,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2358
      start: 2348
    functionDepth: 1
    functionLinenumber: 2348
    functionLinenumberEnd: 2358
    functionName: Server::IgnoreEovercrowdedOf
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - IsRunning
    - seek
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool Server::IgnoreEovercrowdedOf(const butil::StringPiece& full_method_name)
      const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Interceptor*::Accept
      Src: /src/brpc/src/brpc/server.cpp:2369,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/server.cpp:2370,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/server.cpp:2372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2377
      start: 2360
    functionDepth: 1
    functionLinenumber: 2360
    functionLinenumberEnd: 2377
    functionName: Server::AcceptRequest
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - Controller*::SetFailed
    - Interceptor*::Accept
    linkageType: ''
    returnType: bool
    signature: bool Server::AcceptRequest(Controller* cntl) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:2383,1
    - Dst: SSL_get_servername
      Src: /src/brpc/src/brpc/server.cpp:2384,1
    - Dst: Server*::_options::ssl_options
      Src: /src/brpc/src/brpc/server.cpp:2385,1
    - Dst: Server*::_reload_cert_maps::Read
      Src: /src/brpc/src/brpc/server.cpp:2391,1
    - Dst: butil::DoublyBufferedData<CertMaps>::ScopedPtr::cert_map::seek
      Src: /src/brpc/src/brpc/server.cpp:2395,1
    - Dst: butil::DoublyBufferedData<CertMaps>::ScopedPtr::wildcard_cert_map::seek
      Src: /src/brpc/src/brpc/server.cpp:2405,1
    - Dst: SSL_set_SSL_CTX
      Src: /src/brpc/src/brpc/server.cpp:2417,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 27
    argCount: 3
    argNames:
    - ssl
    - al
    - se
    argTypes:
    - struct ssl_st*
    - int*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2419
      start: 2380
    functionDepth: 0
    functionLinenumber: 2380
    functionLinenumberEnd: 2419
    functionName: Server::SSLSwitchCTXByHostname
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - SSL_get_servername
    - butil::DoublyBufferedData<CertMaps>::ScopedPtr::cert_map::seek
    - butil::DoublyBufferedData<CertMaps>::ScopedPtr::wildcard_cert_map::seek
    - SSL_set_SSL_CTX
    - Server*::_reload_cert_maps::Read
    - reinterpret_cast<Server*>
    - Server*::_options::ssl_options
    linkageType: ''
    returnType: int
    signature: "int Server::SSLSwitchCTXByHostname(struct ssl_st* ssl,\n                                   int*
      al, void* se)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/input_message_base.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: brpc::InputMessageBase::socket
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * socket() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::InputMessageBase::arg
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * arg() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::InputMessageBase::received_us
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t received_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::InputMessageBase::base_real_us
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t base_real_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/input_message_base.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: brpc::InputMessageBase::socket
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Socket
    signature: Socket * socket() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::InputMessageBase::arg
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * arg() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::InputMessageBase::received_us
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t received_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::InputMessageBase::base_real_us
    functionSourceFile: /src/brpc/src/brpc/input_message_base.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t base_real_us() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:30,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:32,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:35,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:35,1
    - Dst: pipe
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:39,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: brpc::EventDispatcher::EventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - epoll_create
    - butil::make_close_on_exec
    - CHECK_EQ
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::EventDispatcher()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:46,1
    - Dst: Join
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:47,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:49,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:53,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: EventDispatcher::~EventDispatcher()
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - close
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::~EventDispatcher()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:65,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:87,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:87,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - consumer_thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 91
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - berror
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::Start(const bthread_attr_t* consumer_thread_attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: brpc::EventDispatcher::Running
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool EventDispatcher::Running() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 104
    functionName: brpc::EventDispatcher::Stop
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Stop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 111
    functionName: brpc::EventDispatcher::Join
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Join()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:128,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:134,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 139
    functionName: brpc::EventDispatcher::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::RegisterEvent(IOEventDataId event_data_id,\n
      \                                  int fd, bool pollin)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:150,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 155
    functionName: brpc::EventDispatcher::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::UnregisterEvent(IOEventDataId event_data_id,\n
      \                                    int fd, bool pollin)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 169
    functionName: brpc::EventDispatcher::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::AddConsumer(IOEventDataId event_data_id, int fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:182,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:183,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 187
    functionName: brpc::EventDispatcher::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::RemoveConsumer(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::Run
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 192
    functionName: brpc::EventDispatcher::RunThis
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::Run
    linkageType: ''
    returnType: void
    signature: void * EventDispatcher::RunThis(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:199,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:199,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:201,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:201,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:204,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:217,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:226,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:228,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:229,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:234,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:236,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:237,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 194
    functionDepth: 3
    functionLinenumber: 194
    functionLinenumberEnd: 241
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 3
    functionsReached:
    - ARRAY_SIZE
    - epoll_wait
    - brpc::EventDispatcher::CallOutputEventCallback
    - butil::cpuwide_time_ns
    - brpc::EventDispatcher::CallInputEventCallback
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:30,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:32,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:35,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:35,1
    - Dst: pipe
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:39,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: brpc::EventDispatcher::EventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - epoll_create
    - butil::make_close_on_exec
    - CHECK_EQ
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::EventDispatcher()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:46,1
    - Dst: Join
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:47,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:49,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:53,1
    - Dst: close
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: EventDispatcher::~EventDispatcher()
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - close
    - Stop
    - Join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::~EventDispatcher()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:65,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:87,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:87,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - consumer_thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 91
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - berror
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::Start(const bthread_attr_t* consumer_thread_attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: brpc::EventDispatcher::Running
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool EventDispatcher::Running() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 104
    functionName: brpc::EventDispatcher::Stop
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Stop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 106
    functionDepth: 2
    functionLinenumber: 106
    functionLinenumberEnd: 111
    functionName: brpc::EventDispatcher::Join
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Join()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:128,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:134,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 139
    functionName: brpc::EventDispatcher::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::RegisterEvent(IOEventDataId event_data_id,\n
      \                                  int fd, bool pollin)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:150,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 155
    functionName: brpc::EventDispatcher::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: "int EventDispatcher::UnregisterEvent(IOEventDataId event_data_id,\n
      \                                    int fd, bool pollin)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 169
    functionName: brpc::EventDispatcher::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::AddConsumer(IOEventDataId event_data_id, int fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:182,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:183,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 187
    functionName: brpc::EventDispatcher::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - epoll_ctl
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::RemoveConsumer(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EventDispatcher::Run
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 192
    functionName: brpc::EventDispatcher::RunThis
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - brpc::EventDispatcher::Run
    linkageType: ''
    returnType: void
    signature: void * EventDispatcher::RunThis(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:199,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:199,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:201,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:201,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:204,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:204,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:217,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:226,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:228,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:229,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:234,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:236,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:237,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 194
    functionDepth: 3
    functionLinenumber: 194
    functionLinenumberEnd: 241
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 4
    functionsReached:
    - ARRAY_SIZE
    - epoll_wait
    - brpc::EventDispatcher::CallOutputEventCallback
    - butil::cpuwide_time_ns
    - brpc::EventDispatcher::CallInputEventCallback
    - PLOG
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init_fast_rand_seed
      Src: /src/brpc/src/brpc/span.cpp:80,1
    - Dst: fast_rand
      Src: /src/brpc/src/brpc/span.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - g
    argTypes:
    - IdGen*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 85
    functionName: brpc::UpdateTLSRandom64
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - init_fast_rand_seed
    - fast_rand
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t UpdateTLSRandom64(IdGen* g)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UpdateTLSRandom64
      Src: /src/brpc/src/brpc/span.cpp:91,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 95
    functionName: brpc::GenerateSpanId
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::UpdateTLSRandom64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GenerateSpanId()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UpdateTLSRandom64
      Src: /src/brpc/src/brpc/span.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 105
    functionName: brpc::GenerateTraceId
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::UpdateTLSRandom64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GenerateTraceId()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:109,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:109,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:110,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:132,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:135,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:136,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:141,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:145,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 37
    argCount: 2
    argNames:
    - ' full_method_name'
    - base_real_us
    argTypes:
    - std::string
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 147
    functionName: brpc::Span::CreateClientSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - Span*::_info::clear
    - GenerateSpanId
    - butil::get_object<Span>
    - Forbidden
    - __builtin_expect
    - GenerateTraceId
    - Span*::span_id
    - Span*::trace_id
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateClientSpan(const std::string& full_method_name,\n
      \                            int64_t base_real_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:155,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:155,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:156,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:178,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:180,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:181,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 2
    argNames:
    - ' full_method_name'
    - base_real_us
    argTypes:
    - std::string
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 188
    functionName: brpc::Span::CreateBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - Span*::_info::clear
    - GenerateSpanId
    - butil::get_object<Span>
    - Forbidden
    - __builtin_expect
    - Span*::span_id
    - Span*::trace_id
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateBthreadSpan(const std::string& full_method_name,
      \n                              int64_t base_real_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 194
    functionName: brpc::unknown_span_name
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & unknown_span_name()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:200,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:200,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:201,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:204,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:205,1
    - Dst: empty
      Src: /src/brpc/src/brpc/span.cpp:225,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:226,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 5
    argNames:
    - ' full_method_name'
    - trace_id
    - span_id
    - parent_span_id
    - base_real_us
    argTypes:
    - std::string
    - uint64_t
    - uint64_t
    - uint64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 230
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - Span*::_info::clear
    - GenerateSpanId
    - unknown_span_name
    - butil::get_object<Span>
    - Forbidden
    - __builtin_expect
    - GenerateTraceId
    - empty
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateServerSpan(\n    const std::string& full_method_name,\n
      \   uint64_t trace_id, uint64_t span_id, uint64_t parent_span_id,\n    int64_t
      base_real_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/span.cpp:235,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - trace_id
    - span_id
    - parent_span_id
    - base_real_us
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - unknown_span_name
    - brpc::Span::CreateServerSpan
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateServerSpan(\n    uint64_t trace_id, uint64_t span_id,
      uint64_t parent_span_id,\n    int64_t base_real_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/span.cpp:240,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 242
    functionName: brpc::Span::ResetServerSpanName
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - unknown_span_name
    - empty
    linkageType: ''
    returnType: void
    signature: void Span::ResetServerSpanName(const std::string& full_method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::EndAsParent
      Src: /src/brpc/src/brpc/span.cpp:245,1
    - Dst: brpc::Span::traversal
      Src: /src/brpc/src/brpc/span.cpp:246,1
    - Dst: _info::clear
      Src: /src/brpc/src/brpc/span.cpp:247,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/span.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: brpc::Span::destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::traversal
    - butil::return_object
    - _info::clear
    - brpc::Span::EndAsParent
    linkageType: ''
    returnType: void
    signature: void Span::destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::traversal
      Src: /src/brpc/src/brpc/span.cpp:257,1
    - Dst: f
      Src: /src/brpc/src/brpc/span.cpp:259,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - r
    - ' f'
    argTypes:
    - Span*
    - std::function<void(Span*)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 260
    functionName: brpc::Span::traversal
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - brpc::Span::traversal
    - f
    linkageType: ''
    returnType: void
    signature: void Span::traversal(Span* r, const std::function<void(Span*)>& f)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:263,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:264,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:267,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:268,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 270
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - butil::string_vappendf
    - butil::string_appendf
    - va_start
    - va_end
    linkageType: ''
    returnType: void
    signature: void Span::Annotate(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:273,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:274,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - fmt
    - args
    argTypes:
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 277
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - butil::cpuwide_time_us
    - butil::string_vappendf
    linkageType: ''
    returnType: void
    signature: void Span::Annotate(const char* fmt, va_list args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:280,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:281,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 284
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - butil::cpuwide_time_us
    - append
    linkageType: ''
    returnType: void
    signature: void Span::Annotate(const std::string& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:287,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:288,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:291,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:293,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - info
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 295
    functionName: brpc::Span::AnnotateCStr
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - butil::cpuwide_time_us
    - append
    linkageType: ''
    returnType: void
    signature: void Span::AnnotateCStr(const char* info, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::traversal
      Src: /src/brpc/src/brpc/span.cpp:299,1
    - Dst: const_cast<Span*>
      Src: /src/brpc/src/brpc/span.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 2
    functionLinenumber: 297
    functionLinenumberEnd: 301
    functionName: brpc::Span::CountClientSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::traversal
    - const_cast<Span*>
    linkageType: ''
    returnType: size_t
    signature: size_t Span::CountClientSpans() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 305
    functionName: brpc::Span::GetStartRealTimeUs
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t Span::GetStartRealTimeUs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:309,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:310,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:311,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:312,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 315
    functionName: brpc::Span::GetEndRealTimeUs
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int64_t
    signature: int64_t Span::GetEndRealTimeUs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - info
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 319
    functionName: brpc::SpanInfoExtractor::SpanInfoExtractor
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanInfoExtractor::SpanInfoExtractor(const char* info)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:324,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:324,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:324,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/span.cpp:327,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:327,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/span.cpp:334,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:335,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:336,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:336,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:341,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/span.cpp:342,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:342,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:342,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - before_this_time
    - time
    - annotation
    argTypes:
    - int64_t
    - int64_t*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 345
    functionName: brpc::SpanInfoExtractor::PopAnnotation
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - strtoll
    - std::string
    - butil::StringSplitter::field
    - field
    - length
    - std::string*::assign
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool SpanInfoExtractor::PopAnnotation(\n    int64_t before_this_time,
      int64_t* time, std::string* annotation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 349
    functionName: brpc::CanAnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanAnnotateSpan()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:354,1
    - Dst: Span*::Annotate
      Src: /src/brpc/src/brpc/span.cpp:355,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 357
    functionName: brpc::AnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - va_end
    - Span*::Annotate
    linkageType: ''
    returnType: void
    signature: void AnnotateSpan(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: brpc::SpanDB::SpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanDB()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:373,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:374,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:375,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' db1'
    - ' db2'
    argTypes:
    - SpanDB
    - SpanDB
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 377
    functionName: brpc::SpanDB::Swap
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void Swap(SpanDB& db1, SpanDB& db2)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:386,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:386,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:387,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:387,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 389
    functionName: ~SpanDB()
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::FilePath
    - butil::DeleteFile
    linkageType: ''
    returnType: void
    signature: void ~SpanDB()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: brpc::has_span_db
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_span_db()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:409,1
    - Dst: GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1
    - c2
    argTypes:
    - bvar::Collected*
    - bvar::Collected*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 410
    functionName: operator()(bvar::Collected* c1, bvar::Collected* c2) const
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - GetStartRealTimeUs
    linkageType: ''
    returnType: bool
    signature: bool operator()(bvar::Collected* c1, bvar::Collected* c2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::sort
      Src: /src/brpc/src/brpc/span.cpp:417,1
    - Dst: begin
      Src: /src/brpc/src/brpc/span.cpp:417,1
    - Dst: end
      Src: /src/brpc/src/brpc/span.cpp:417,1
    - Dst: SpanEarlier
      Src: /src/brpc/src/brpc/span.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' list'
    argTypes:
    - std::vector<bvar::Collected*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 418
    functionName: brpc::SpanPreprocessor::process
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanEarlier
    - end
    - std::sort
    - begin
    linkageType: ''
    returnType: void
    signature: void process(std::vector<bvar::Collected*> & list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: brpc::Span::speed_limit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * Span::speed_limit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 428
    functionName: brpc::Span::preprocessor
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorPreprocessor
    signature: bvar::CollectorPreprocessor * Span::preprocessor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:433,1
    - Dst: AddRefManually
      Src: /src/brpc/src/brpc/span.cpp:437,1
    - Dst: SpanDB*::RemoveRefManually
      Src: /src/brpc/src/brpc/span.cpp:441,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - db
    argTypes:
    - SpanDB*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 443
    functionName: brpc::ResetSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanDB*::RemoveRefManually
    - AddRefManually
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void ResetSpanDB(SpanDB* db)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:447,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 445
    functionDepth: 2
    functionLinenumber: 445
    functionLinenumberEnd: 448
    functionName: brpc::RemoveSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::ResetSpanDB
    linkageType: ''
    returnType: void
    signature: void RemoveSpanDB()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: atexit
      Src: /src/brpc/src/brpc/span.cpp:451,1
    - Dst: SpanPreprocessor::SpanPreprocessor
      Src: /src/brpc/src/brpc/span.cpp:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 454
    functionName: brpc::StartSpanIndexing
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanPreprocessor::SpanPreprocessor
    - atexit
    linkageType: ''
    returnType: void
    signature: void StartSpanIndexing()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/span.cpp:457,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 461
    functionName: brpc::StartIndexingIfNeeded
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int StartIndexingIfNeeded()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:464,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - db
    argTypes:
    - butil::intrusive_ptr<SpanDB>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 463
    functionDepth: 1
    functionLinenumber: 463
    functionLinenumberEnd: 470
    functionName: brpc::GetSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int GetSpanDB(butil::intrusive_ptr<SpanDB>* db)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Span*::local_parent
      Src: /src/brpc/src/brpc/span.cpp:473,1
    - Dst: Span*::submit
      Src: /src/brpc/src/brpc/span.cpp:474,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - span
    - cpuwide_time_us
    argTypes:
    - Span*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 476
    functionName: brpc::Span::Submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 4
    functionsReached:
    - Span*::submit
    - Span*::local_parent
    linkageType: ''
    returnType: void
    signature: void Span::Submit(Span* span, int64_t cpuwide_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RpczSpan*::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:479,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:479,1
    - Dst: RpczSpan*::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:480,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:480,1
    - Dst: RpczSpan*::set_parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:481,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:481,1
    - Dst: RpczSpan*::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:482,1
    - Dst: Span*::log_id
      Src: /src/brpc/src/brpc/span.cpp:482,1
    - Dst: RpczSpan*::set_base_cid
      Src: /src/brpc/src/brpc/span.cpp:483,1
    - Dst: Span*::base_cid
      Src: /src/brpc/src/brpc/span.cpp:483,1
    - Dst: RpczSpan*::set_ending_cid
      Src: /src/brpc/src/brpc/span.cpp:484,1
    - Dst: Span*::ending_cid
      Src: /src/brpc/src/brpc/span.cpp:484,1
    - Dst: RpczSpan*::set_remote_ip
      Src: /src/brpc/src/brpc/span.cpp:485,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/brpc/span.cpp:485,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:485,1
    - Dst: RpczSpan*::set_remote_port
      Src: /src/brpc/src/brpc/span.cpp:486,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:486,1
    - Dst: RpczSpan*::set_type
      Src: /src/brpc/src/brpc/span.cpp:487,1
    - Dst: Span*::type
      Src: /src/brpc/src/brpc/span.cpp:487,1
    - Dst: RpczSpan*::set_async
      Src: /src/brpc/src/brpc/span.cpp:488,1
    - Dst: Span*::async
      Src: /src/brpc/src/brpc/span.cpp:488,1
    - Dst: RpczSpan*::set_protocol
      Src: /src/brpc/src/brpc/span.cpp:489,1
    - Dst: Span*::protocol
      Src: /src/brpc/src/brpc/span.cpp:489,1
    - Dst: RpczSpan*::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:490,1
    - Dst: Span*::request_size
      Src: /src/brpc/src/brpc/span.cpp:490,1
    - Dst: RpczSpan*::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:491,1
    - Dst: Span*::response_size
      Src: /src/brpc/src/brpc/span.cpp:491,1
    - Dst: RpczSpan*::set_received_real_us
      Src: /src/brpc/src/brpc/span.cpp:492,1
    - Dst: Span*::received_real_us
      Src: /src/brpc/src/brpc/span.cpp:492,1
    - Dst: RpczSpan*::set_start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:493,1
    - Dst: Span*::start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:493,1
    - Dst: RpczSpan*::set_start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:494,1
    - Dst: Span*::start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:494,1
    - Dst: RpczSpan*::set_start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:495,1
    - Dst: Span*::start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:495,1
    - Dst: RpczSpan*::set_sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:496,1
    - Dst: Span*::sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:496,1
    - Dst: RpczSpan*::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:497,1
    - Dst: Span*::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:497,1
    - Dst: RpczSpan*::set_info
      Src: /src/brpc/src/brpc/span.cpp:498,1
    - Dst: Span*::info
      Src: /src/brpc/src/brpc/span.cpp:498,1
    - Dst: RpczSpan*::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:499,1
    - Dst: Span*::error_code
      Src: /src/brpc/src/brpc/span.cpp:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 2
    argNames:
    - span
    - out
    argTypes:
    - Span*
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 500
    functionName: brpc::Span2Proto
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - Span*::log_id
    - RpczSpan*::set_request_size
    - RpczSpan*::set_type
    - RpczSpan*::set_full_method_name
    - Span*::start_send_real_us
    - Span*::span_id
    - RpczSpan*::set_async
    - Span*::trace_id
    - RpczSpan*::set_received_real_us
    - RpczSpan*::set_info
    - Span*::info
    - Span*::start_callback_real_us
    - Span*::base_cid
    - RpczSpan*::set_ending_cid
    - RpczSpan*::set_base_cid
    - Span*::response_size
    - RpczSpan*::set_start_parse_real_us
    - RpczSpan*::set_sent_real_us
    - Span*::error_code
    - Span*::remote_side
    - Span*::received_real_us
    - RpczSpan*::set_error_code
    - Span*::request_size
    - RpczSpan*::set_span_id
    - Span*::async
    - Span*::full_method_name
    - RpczSpan*::set_remote_ip
    - Span*::protocol
    - Span*::start_parse_real_us
    - RpczSpan*::set_trace_id
    - Span*::sent_real_us
    - RpczSpan*::set_protocol
    - RpczSpan*::set_remote_port
    - RpczSpan*::set_parent_span_id
    - Span*::ending_cid
    - butil::ip2int
    - RpczSpan*::set_response_size
    - RpczSpan*::set_start_callback_real_us
    - Span*::parent_span_id
    - RpczSpan*::set_log_id
    - Span*::type
    - RpczSpan*::set_start_send_real_us
    linkageType: ''
    returnType: void
    signature: void Span2Proto(const Span* span, RpczSpan* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:503,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - n
    - buf
    argTypes:
    - uint64_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 505
    functionName: brpc::ToBigEndian
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - htonl
    linkageType: ''
    returnType: void
    signature: void ToBigEndian(uint64_t n, uint32_t* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ntohl
      Src: /src/brpc/src/brpc/span.cpp:508,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/span.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 509
    functionName: brpc::ToLittleEndian
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ToLittleEndian(const uint32_t* buf)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:514,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:516,1
    - Dst: auto::empty
      Src: /src/brpc/src/brpc/span.cpp:516,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:516,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:517,1
    - Dst: time
      Src: /src/brpc/src/brpc/span.cpp:525,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/span.cpp:527,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/span.cpp:530,1
    - Dst: getpid
      Src: /src/brpc/src/brpc/span.cpp:531,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:536,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:537,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/span.cpp:541,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:542,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/span.cpp:542,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:547,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:548,1
    - Dst: SpanDB::id_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:548,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:550,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:550,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:554,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:555,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:556,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:557,1
    - Dst: SpanDB::time_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:557,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:559,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:559,1
    - Dst: SpanDB::SpanDB
      Src: /src/brpc/src/brpc/span.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:566,1
    - Dst: brpc::SpanDB::Swap
      Src: /src/brpc/src/brpc/span.cpp:568,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 570
    functionName: brpc::SpanDB::Open
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - butil::FileEnumerator::Next
    - auto::empty
    - getpid
    - SpanDB::id_db_name::c_str
    - strftime
    - brpc::SpanDB::Open
    - leveldb::Status::ok
    - SpanDB::id_db_name::append
    - butil::DeleteFile
    - localtime_r
    - time
    - LOG
    - SpanDB::time_db_name::c_str
    - SpanDB::SpanDB
    - snprintf
    - leveldb::Status::ToString
    - SpanDB::time_db_name::append
    - butil::FilePath
    - butil::CreateDirectoryAndGetError
    - brpc::SpanDB::Swap
    - butil::FilePath::value
    linkageType: ''
    returnType: SpanDB
    signature: SpanDB * SpanDB::Open()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Span*::GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:582,1
    - Dst: Span*::GetEndRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:583,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/span.cpp:586,1
    - Dst: BriefSpan::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:589,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:589,1
    - Dst: BriefSpan::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:590,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:590,1
    - Dst: BriefSpan::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:591,1
    - Dst: Span*::log_id
      Src: /src/brpc/src/brpc/span.cpp:591,1
    - Dst: BriefSpan::set_type
      Src: /src/brpc/src/brpc/span.cpp:592,1
    - Dst: Span*::type
      Src: /src/brpc/src/brpc/span.cpp:592,1
    - Dst: BriefSpan::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:593,1
    - Dst: Span*::error_code
      Src: /src/brpc/src/brpc/span.cpp:593,1
    - Dst: BriefSpan::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:594,1
    - Dst: Span*::request_size
      Src: /src/brpc/src/brpc/span.cpp:594,1
    - Dst: BriefSpan::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: Span*::response_size
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: BriefSpan::set_start_real_us
      Src: /src/brpc/src/brpc/span.cpp:596,1
    - Dst: BriefSpan::set_latency_us
      Src: /src/brpc/src/brpc/span.cpp:597,1
    - Dst: BriefSpan::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: Span*::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: BriefSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:599,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:600,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:625,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:626,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:627,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:628,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:628,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:628,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:629,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:634,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:634,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:635,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:635,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:638,1
    - Dst: Span*::CountClientSpans
      Src: /src/brpc/src/brpc/span.cpp:640,1
    - Dst: RpczSpan::add_client_spans
      Src: /src/brpc/src/brpc/span.cpp:642,1
    - Dst: Span*::traversal
      Src: /src/brpc/src/brpc/span.cpp:645,1
    - Dst: const_cast<Span*>
      Src: /src/brpc/src/brpc/span.cpp:645,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:649,1
    - Dst: RpczSpan::mutable_client_spans
      Src: /src/brpc/src/brpc/span.cpp:649,1
    - Dst: RpczSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:652,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:653,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:654,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:656,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:656,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:657,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 45
    argCount: 2
    argNames:
    - span
    - value_buf
    argTypes:
    - Span*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 659
    functionName: brpc::SpanDB::Index
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - BriefSpan::set_span_id
    - Span*::log_id
    - BriefSpan::set_error_code
    - BriefSpan::set_start_real_us
    - Span*::span_id
    - Span*::trace_id
    - butil::Status::OK
    - leveldb::Status::ok
    - Span*::CountClientSpans
    - Put
    - BriefSpan::set_request_size
    - BriefSpan::set_log_id
    - Span2Proto
    - Span*::response_size
    - Span*::GetEndRealTimeUs
    - BriefSpan::set_response_size
    - Span*::error_code
    - BriefSpan::set_full_method_name
    - BriefSpan::set_latency_us
    - Span*::request_size
    - BriefSpan::SerializeToString
    - const_cast<Span*>
    - RpczSpan::mutable_client_spans
    - BriefSpan::set_trace_id
    - Span*::full_method_name
    - ToBigEndian
    - std::string*::data
    - RpczSpan::add_client_spans
    - RpczSpan::SerializeToString
    - BriefSpan::set_type
    - leveldb::Status::InvalidArgument
    - Span*::traversal
    - leveldb::Slice
    - Span*::type
    - Span*::GetStartRealTimeUs
    linkageType: ''
    returnType: leveldb::Status
    signature: leveldb::Status SpanDB::Index(const Span* span, std::string* value_buf)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:664,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:664,1
    - Dst: NewIterator
      Src: /src/brpc/src/brpc/span.cpp:669,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:669,1
    - Dst: leveldb::Iterator*::SeekToFirst
      Src: /src/brpc/src/brpc/span.cpp:670,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:670,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:670,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:672,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:672,1
    - Dst: ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:681,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:681,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:681,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:683,1
    - Dst: BriefSpan::trace_id
      Src: /src/brpc/src/brpc/span.cpp:683,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:684,1
    - Dst: BriefSpan::span_id
      Src: /src/brpc/src/brpc/span.cpp:684,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:686,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:688,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:692,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:694,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:694,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:695,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:696,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 702
      start: 662
    functionDepth: 1
    functionLinenumber: 662
    functionLinenumberEnd: 702
    functionName: brpc::SpanDB::RemoveSpansBefore
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - leveldb::Iterator*::Valid
    - leveldb::Status::ok
    - leveldb::Iterator*::key
    - leveldb::ReadOptions
    - leveldb::Status::InvalidArgument
    - BriefSpan::span_id
    - NewIterator
    - leveldb::Iterator*::value
    - BriefSpan::trace_id
    - Delete
    - ToBigEndian
    - leveldb::Slice
    - leveldb::Iterator*::Next
    - ToLittleEndian
    - BriefSpan::ParseFromArray
    - LOG
    - leveldb::Iterator*::SeekToFirst
    linkageType: ''
    returnType: leveldb::Status
    signature: leveldb::Status SpanDB::RemoveSpansBefore(int64_t tm)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: StartIndexingIfNeeded
      Src: /src/brpc/src/brpc/span.cpp:706,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:710,1
    - Dst: GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:711,1
    - Dst: brpc::Span::destroy
      Src: /src/brpc/src/brpc/span.cpp:713,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:716,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:718,1
    - Dst: brpc::Span::destroy
      Src: /src/brpc/src/brpc/span.cpp:719,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:722,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/span.cpp:723,1
    - Dst: butil::intrusive_ptr::Index
      Src: /src/brpc/src/brpc/span.cpp:726,1
    - Dst: brpc::Span::destroy
      Src: /src/brpc/src/brpc/span.cpp:727,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:728,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:729,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:729,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:730,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:730,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:730,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:731,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.cpp:737,1
    - Dst: butil::intrusive_ptr::RemoveSpansBefore
      Src: /src/brpc/src/brpc/span.cpp:740,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:742,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:743,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:743,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:745,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 705
    functionDepth: 2
    functionLinenumber: 705
    functionLinenumberEnd: 750
    functionName: brpc::Span::dump_and_destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::destroy
    - brpc::SpanDB::Open
    - leveldb::Status::IsCorruption
    - leveldb::Status::ok
    - butil::gettimeofday_us
    - butil::intrusive_ptr::Index
    - GetSpanDB
    - leveldb::Status::ToString
    - butil::intrusive_ptr::reset
    - leveldb::Status::IsIOError
    - butil::intrusive_ptr::RemoveSpansBefore
    - leveldb::Status::IsNotFound
    - ResetSpanDB
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    - StartIndexingIfNeeded
    linkageType: ''
    returnType: void
    signature: void Span::dump_and_destroy(size_t /*round*/)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:753,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:754,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:758,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:759,1
    - Dst: butil::intrusive_ptr::id_db::Get
      Src: /src/brpc/src/brpc/span.cpp:762,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:762,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:763,1
    - Dst: RpczSpan*::ParseFromString
      Src: /src/brpc/src/brpc/span.cpp:766,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - trace_id
    - span_id
    - response
    argTypes:
    - uint64_t
    - uint64_t
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 752
    functionDepth: 2
    functionLinenumber: 752
    functionLinenumberEnd: 771
    functionName: brpc::FindSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetSpanDB
    - leveldb::Status::ok
    - leveldb::ReadOptions
    - brpc::ToBigEndian
    - RpczSpan*::ParseFromString
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    - butil::intrusive_ptr::id_db::Get
    linkageType: ''
    returnType: int
    signature: int FindSpan(uint64_t trace_id, uint64_t span_id, RpczSpan* response)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::deque<RpczSpan>*::clear
      Src: /src/brpc/src/brpc/span.cpp:774,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:775,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:776,1
    - Dst: butil::intrusive_ptr::id_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:779,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:779,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:781,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:782,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:784,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:784,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:784,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:786,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:786,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: RpczSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: std::deque<RpczSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:796,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:798,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - trace_id
    - out
    argTypes:
    - uint64_t
    - std::deque<RpczSpan>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 773
    functionDepth: 2
    functionLinenumber: 773
    functionLinenumberEnd: 802
    functionName: brpc::FindSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - leveldb::Iterator*::Valid
    - RpczSpan::ParseFromArray
    - leveldb::Iterator*::key
    - leveldb::ReadOptions
    - std::deque<RpczSpan>*::push_back
    - leveldb::Iterator*::value
    - butil::intrusive_ptr::id_db::NewIterator
    - std::deque<RpczSpan>*::clear
    - brpc::ToBigEndian
    - leveldb::Iterator*::Seek
    - leveldb::Iterator*::Next
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::ToLittleEndian
    - LOG
    - brpc::GetSpanDB
    linkageType: ''
    returnType: void
    signature: void FindSpans(uint64_t trace_id, std::deque<RpczSpan>* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::deque<BriefSpan>*::clear
      Src: /src/brpc/src/brpc/span.cpp:806,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:807,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:808,1
    - Dst: butil::intrusive_ptr::time_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:811,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:811,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:815,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:816,1
    - Dst: leveldb::Iterator*::SeekToLast
      Src: /src/brpc/src/brpc/span.cpp:817,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:821,1
    - Dst: leveldb::Iterator*::Prev
      Src: /src/brpc/src/brpc/span.cpp:821,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:822,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:822,1
    - Dst: BriefSpan::Clear
      Src: /src/brpc/src/brpc/span.cpp:828,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: SpanFilter*::Keep
      Src: /src/brpc/src/brpc/span.cpp:830,1
    - Dst: std::deque<BriefSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:831,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:837,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 4
    argNames:
    - starting_realtime
    - max_scan
    - out
    - filter
    argTypes:
    - int64_t
    - size_t
    - std::deque<BriefSpan>*
    - SpanFilter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 804
    functionDepth: 2
    functionLinenumber: 804
    functionLinenumberEnd: 841
    functionName: brpc::ListSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::time_db::NewIterator
    - leveldb::Iterator*::Valid
    - SpanFilter*::Keep
    - leveldb::Iterator*::key
    - leveldb::ReadOptions
    - leveldb::Iterator*::Prev
    - std::deque<BriefSpan>*::push_back
    - std::deque<BriefSpan>*::clear
    - brpc::ToBigEndian
    - leveldb::Iterator*::Seek
    - leveldb::Iterator*::SeekToLast
    - LOG
    - leveldb::Iterator*::value
    - butil::intrusive_ptr::intrusive_ptr
    - BriefSpan::ParseFromArray
    - brpc::ToLittleEndian
    - brpc::GetSpanDB
    - BriefSpan::Clear
    linkageType: ''
    returnType: void
    signature: "void ListSpans(int64_t starting_realtime, size_t max_scan,\n               std::deque<BriefSpan>*
      out, SpanFilter* filter)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:844,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:845,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:851,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:851,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:854,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:854,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:861,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:861,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:864,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:864,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 868
      start: 843
    functionDepth: 2
    functionLinenumber: 843
    functionLinenumberEnd: 868
    functionName: brpc::DescribeSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::id_db::GetProperty
    - butil::intrusive_ptr::time_db::GetProperty
    - leveldb::Slice
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    linkageType: ''
    returnType: void
    signature: void DescribeSpanDB(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init_fast_rand_seed
      Src: /src/brpc/src/brpc/span.cpp:80,1
    - Dst: fast_rand
      Src: /src/brpc/src/brpc/span.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - g
    argTypes:
    - IdGen*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 85
    functionName: brpc::UpdateTLSRandom64
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - init_fast_rand_seed
    - fast_rand
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t UpdateTLSRandom64(IdGen* g)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UpdateTLSRandom64
      Src: /src/brpc/src/brpc/span.cpp:91,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 95
    functionName: brpc::GenerateSpanId
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::UpdateTLSRandom64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GenerateSpanId()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UpdateTLSRandom64
      Src: /src/brpc/src/brpc/span.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 105
    functionName: brpc::GenerateTraceId
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::UpdateTLSRandom64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GenerateTraceId()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:109,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:109,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:110,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:132,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:135,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:136,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:141,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:145,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 37
    argCount: 2
    argNames:
    - ' full_method_name'
    - base_real_us
    argTypes:
    - std::string
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 147
    functionName: brpc::Span::CreateClientSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - Span*::_info::clear
    - GenerateSpanId
    - butil::get_object<Span>
    - Forbidden
    - __builtin_expect
    - GenerateTraceId
    - Span*::span_id
    - Span*::trace_id
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateClientSpan(const std::string& full_method_name,\n
      \                            int64_t base_real_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:155,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:155,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:156,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:178,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:180,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:181,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 2
    argNames:
    - ' full_method_name'
    - base_real_us
    argTypes:
    - std::string
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 188
    functionName: brpc::Span::CreateBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - Span*::_info::clear
    - GenerateSpanId
    - butil::get_object<Span>
    - Forbidden
    - __builtin_expect
    - Span*::span_id
    - Span*::trace_id
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateBthreadSpan(const std::string& full_method_name,
      \n                              int64_t base_real_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 194
    functionName: brpc::unknown_span_name
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & unknown_span_name()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:200,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:200,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:201,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:204,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:205,1
    - Dst: empty
      Src: /src/brpc/src/brpc/span.cpp:225,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:226,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 5
    argNames:
    - ' full_method_name'
    - trace_id
    - span_id
    - parent_span_id
    - base_real_us
    argTypes:
    - std::string
    - uint64_t
    - uint64_t
    - uint64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 230
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - Span*::_info::clear
    - GenerateSpanId
    - unknown_span_name
    - butil::get_object<Span>
    - Forbidden
    - __builtin_expect
    - GenerateTraceId
    - empty
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateServerSpan(\n    const std::string& full_method_name,\n
      \   uint64_t trace_id, uint64_t span_id, uint64_t parent_span_id,\n    int64_t
      base_real_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/span.cpp:235,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - trace_id
    - span_id
    - parent_span_id
    - base_real_us
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - unknown_span_name
    - brpc::Span::CreateServerSpan
    linkageType: ''
    returnType: Span
    signature: "Span * Span::CreateServerSpan(\n    uint64_t trace_id, uint64_t span_id,
      uint64_t parent_span_id,\n    int64_t base_real_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/span.cpp:240,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 242
    functionName: brpc::Span::ResetServerSpanName
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - unknown_span_name
    - empty
    linkageType: ''
    returnType: void
    signature: void Span::ResetServerSpanName(const std::string& full_method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::EndAsParent
      Src: /src/brpc/src/brpc/span.cpp:245,1
    - Dst: brpc::Span::traversal
      Src: /src/brpc/src/brpc/span.cpp:246,1
    - Dst: _info::clear
      Src: /src/brpc/src/brpc/span.cpp:247,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/span.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 2
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: brpc::Span::destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - brpc::Span::traversal
    - butil::return_object
    - _info::clear
    - brpc::Span::EndAsParent
    linkageType: ''
    returnType: void
    signature: void Span::destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::traversal
      Src: /src/brpc/src/brpc/span.cpp:257,1
    - Dst: f
      Src: /src/brpc/src/brpc/span.cpp:259,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - r
    - ' f'
    argTypes:
    - Span*
    - std::function<void(Span*)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 260
    functionName: brpc::Span::traversal
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 5
    functionsReached:
    - brpc::Span::traversal
    - f
    linkageType: ''
    returnType: void
    signature: void Span::traversal(Span* r, const std::function<void(Span*)>& f)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:263,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:264,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:267,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:268,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 270
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - butil::string_vappendf
    - butil::string_appendf
    - va_start
    - va_end
    linkageType: ''
    returnType: void
    signature: void Span::Annotate(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:273,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:274,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - fmt
    - args
    argTypes:
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 277
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - butil::cpuwide_time_us
    - butil::string_vappendf
    linkageType: ''
    returnType: void
    signature: void Span::Annotate(const char* fmt, va_list args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:280,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:281,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 284
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - butil::cpuwide_time_us
    - append
    linkageType: ''
    returnType: void
    signature: void Span::Annotate(const std::string& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:287,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:288,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:291,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:293,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - info
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 295
    functionName: brpc::Span::AnnotateCStr
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - butil::cpuwide_time_us
    - append
    linkageType: ''
    returnType: void
    signature: void Span::AnnotateCStr(const char* info, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::traversal
      Src: /src/brpc/src/brpc/span.cpp:299,1
    - Dst: const_cast<Span*>
      Src: /src/brpc/src/brpc/span.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 2
    functionLinenumber: 297
    functionLinenumberEnd: 301
    functionName: brpc::Span::CountClientSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::traversal
    - const_cast<Span*>
    linkageType: ''
    returnType: size_t
    signature: size_t Span::CountClientSpans() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 305
    functionName: brpc::Span::GetStartRealTimeUs
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t Span::GetStartRealTimeUs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:309,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:310,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:311,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:312,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 315
    functionName: brpc::Span::GetEndRealTimeUs
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: int64_t
    signature: int64_t Span::GetEndRealTimeUs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - info
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 319
    functionName: brpc::SpanInfoExtractor::SpanInfoExtractor
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanInfoExtractor::SpanInfoExtractor(const char* info)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:324,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:324,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:324,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/span.cpp:327,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:327,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/span.cpp:334,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:335,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:336,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:336,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:341,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/span.cpp:342,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:342,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:342,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - before_this_time
    - time
    - annotation
    argTypes:
    - int64_t
    - int64_t*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 345
    functionName: brpc::SpanInfoExtractor::PopAnnotation
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - strtoll
    - std::string
    - butil::StringSplitter::field
    - field
    - length
    - std::string*::assign
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool SpanInfoExtractor::PopAnnotation(\n    int64_t before_this_time,
      int64_t* time, std::string* annotation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 349
    functionName: brpc::CanAnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanAnnotateSpan()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:354,1
    - Dst: Span*::Annotate
      Src: /src/brpc/src/brpc/span.cpp:355,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 357
    functionName: brpc::AnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - va_end
    - Span*::Annotate
    linkageType: ''
    returnType: void
    signature: void AnnotateSpan(const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: brpc::SpanDB::SpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanDB()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:373,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:374,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:375,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' db1'
    - ' db2'
    argTypes:
    - SpanDB
    - SpanDB
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 377
    functionName: brpc::SpanDB::Swap
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void Swap(SpanDB& db1, SpanDB& db2)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:386,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:386,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:387,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:387,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 389
    functionName: ~SpanDB()
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::FilePath
    - butil::DeleteFile
    linkageType: ''
    returnType: void
    signature: void ~SpanDB()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: brpc::has_span_db
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_span_db()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:409,1
    - Dst: GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1
    - c2
    argTypes:
    - bvar::Collected*
    - bvar::Collected*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 410
    functionName: operator()(bvar::Collected* c1, bvar::Collected* c2) const
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - GetStartRealTimeUs
    linkageType: ''
    returnType: bool
    signature: bool operator()(bvar::Collected* c1, bvar::Collected* c2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::sort
      Src: /src/brpc/src/brpc/span.cpp:417,1
    - Dst: begin
      Src: /src/brpc/src/brpc/span.cpp:417,1
    - Dst: end
      Src: /src/brpc/src/brpc/span.cpp:417,1
    - Dst: SpanEarlier
      Src: /src/brpc/src/brpc/span.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' list'
    argTypes:
    - std::vector<bvar::Collected*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 418
    functionName: brpc::SpanPreprocessor::process
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanEarlier
    - end
    - std::sort
    - begin
    linkageType: ''
    returnType: void
    signature: void process(std::vector<bvar::Collected*> & list)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: brpc::Span::speed_limit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * Span::speed_limit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 428
    functionName: brpc::Span::preprocessor
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bvar::CollectorPreprocessor
    signature: bvar::CollectorPreprocessor * Span::preprocessor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:433,1
    - Dst: AddRefManually
      Src: /src/brpc/src/brpc/span.cpp:437,1
    - Dst: SpanDB*::RemoveRefManually
      Src: /src/brpc/src/brpc/span.cpp:441,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - db
    argTypes:
    - SpanDB*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 443
    functionName: brpc::ResetSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - SpanDB*::RemoveRefManually
    - AddRefManually
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void ResetSpanDB(SpanDB* db)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:447,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 445
    functionDepth: 2
    functionLinenumber: 445
    functionLinenumberEnd: 448
    functionName: brpc::RemoveSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::ResetSpanDB
    linkageType: ''
    returnType: void
    signature: void RemoveSpanDB()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: atexit
      Src: /src/brpc/src/brpc/span.cpp:451,1
    - Dst: SpanPreprocessor::SpanPreprocessor
      Src: /src/brpc/src/brpc/span.cpp:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 454
    functionName: brpc::StartSpanIndexing
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanPreprocessor::SpanPreprocessor
    - atexit
    linkageType: ''
    returnType: void
    signature: void StartSpanIndexing()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/span.cpp:457,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 461
    functionName: brpc::StartIndexingIfNeeded
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int StartIndexingIfNeeded()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:464,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - db
    argTypes:
    - butil::intrusive_ptr<SpanDB>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 463
    functionDepth: 1
    functionLinenumber: 463
    functionLinenumberEnd: 470
    functionName: brpc::GetSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 4
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int GetSpanDB(butil::intrusive_ptr<SpanDB>* db)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Span*::local_parent
      Src: /src/brpc/src/brpc/span.cpp:473,1
    - Dst: Span*::submit
      Src: /src/brpc/src/brpc/span.cpp:474,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - span
    - cpuwide_time_us
    argTypes:
    - Span*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 476
    functionName: brpc::Span::Submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 4
    functionsReached:
    - Span*::submit
    - Span*::local_parent
    linkageType: ''
    returnType: void
    signature: void Span::Submit(Span* span, int64_t cpuwide_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RpczSpan*::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:479,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:479,1
    - Dst: RpczSpan*::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:480,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:480,1
    - Dst: RpczSpan*::set_parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:481,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:481,1
    - Dst: RpczSpan*::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:482,1
    - Dst: Span*::log_id
      Src: /src/brpc/src/brpc/span.cpp:482,1
    - Dst: RpczSpan*::set_base_cid
      Src: /src/brpc/src/brpc/span.cpp:483,1
    - Dst: Span*::base_cid
      Src: /src/brpc/src/brpc/span.cpp:483,1
    - Dst: RpczSpan*::set_ending_cid
      Src: /src/brpc/src/brpc/span.cpp:484,1
    - Dst: Span*::ending_cid
      Src: /src/brpc/src/brpc/span.cpp:484,1
    - Dst: RpczSpan*::set_remote_ip
      Src: /src/brpc/src/brpc/span.cpp:485,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/brpc/span.cpp:485,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:485,1
    - Dst: RpczSpan*::set_remote_port
      Src: /src/brpc/src/brpc/span.cpp:486,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:486,1
    - Dst: RpczSpan*::set_type
      Src: /src/brpc/src/brpc/span.cpp:487,1
    - Dst: Span*::type
      Src: /src/brpc/src/brpc/span.cpp:487,1
    - Dst: RpczSpan*::set_async
      Src: /src/brpc/src/brpc/span.cpp:488,1
    - Dst: Span*::async
      Src: /src/brpc/src/brpc/span.cpp:488,1
    - Dst: RpczSpan*::set_protocol
      Src: /src/brpc/src/brpc/span.cpp:489,1
    - Dst: Span*::protocol
      Src: /src/brpc/src/brpc/span.cpp:489,1
    - Dst: RpczSpan*::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:490,1
    - Dst: Span*::request_size
      Src: /src/brpc/src/brpc/span.cpp:490,1
    - Dst: RpczSpan*::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:491,1
    - Dst: Span*::response_size
      Src: /src/brpc/src/brpc/span.cpp:491,1
    - Dst: RpczSpan*::set_received_real_us
      Src: /src/brpc/src/brpc/span.cpp:492,1
    - Dst: Span*::received_real_us
      Src: /src/brpc/src/brpc/span.cpp:492,1
    - Dst: RpczSpan*::set_start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:493,1
    - Dst: Span*::start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:493,1
    - Dst: RpczSpan*::set_start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:494,1
    - Dst: Span*::start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:494,1
    - Dst: RpczSpan*::set_start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:495,1
    - Dst: Span*::start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:495,1
    - Dst: RpczSpan*::set_sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:496,1
    - Dst: Span*::sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:496,1
    - Dst: RpczSpan*::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:497,1
    - Dst: Span*::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:497,1
    - Dst: RpczSpan*::set_info
      Src: /src/brpc/src/brpc/span.cpp:498,1
    - Dst: Span*::info
      Src: /src/brpc/src/brpc/span.cpp:498,1
    - Dst: RpczSpan*::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:499,1
    - Dst: Span*::error_code
      Src: /src/brpc/src/brpc/span.cpp:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 2
    argNames:
    - span
    - out
    argTypes:
    - Span*
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 500
    functionName: brpc::Span2Proto
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - Span*::log_id
    - RpczSpan*::set_request_size
    - RpczSpan*::set_type
    - RpczSpan*::set_full_method_name
    - Span*::start_send_real_us
    - Span*::span_id
    - RpczSpan*::set_async
    - Span*::trace_id
    - RpczSpan*::set_received_real_us
    - RpczSpan*::set_info
    - Span*::info
    - Span*::start_callback_real_us
    - Span*::base_cid
    - RpczSpan*::set_ending_cid
    - RpczSpan*::set_base_cid
    - Span*::response_size
    - RpczSpan*::set_start_parse_real_us
    - RpczSpan*::set_sent_real_us
    - Span*::error_code
    - Span*::remote_side
    - Span*::received_real_us
    - RpczSpan*::set_error_code
    - Span*::request_size
    - RpczSpan*::set_span_id
    - Span*::async
    - Span*::full_method_name
    - RpczSpan*::set_remote_ip
    - Span*::protocol
    - Span*::start_parse_real_us
    - RpczSpan*::set_trace_id
    - Span*::sent_real_us
    - RpczSpan*::set_protocol
    - RpczSpan*::set_remote_port
    - RpczSpan*::set_parent_span_id
    - Span*::ending_cid
    - butil::ip2int
    - RpczSpan*::set_response_size
    - RpczSpan*::set_start_callback_real_us
    - Span*::parent_span_id
    - RpczSpan*::set_log_id
    - Span*::type
    - RpczSpan*::set_start_send_real_us
    linkageType: ''
    returnType: void
    signature: void Span2Proto(const Span* span, RpczSpan* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:503,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - n
    - buf
    argTypes:
    - uint64_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 505
    functionName: brpc::ToBigEndian
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 3
    functionsReached:
    - htonl
    linkageType: ''
    returnType: void
    signature: void ToBigEndian(uint64_t n, uint32_t* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ntohl
      Src: /src/brpc/src/brpc/span.cpp:508,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/span.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 509
    functionName: brpc::ToLittleEndian
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - ntohl
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ToLittleEndian(const uint32_t* buf)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:514,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:516,1
    - Dst: auto::empty
      Src: /src/brpc/src/brpc/span.cpp:516,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:516,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:517,1
    - Dst: time
      Src: /src/brpc/src/brpc/span.cpp:525,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/span.cpp:527,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/span.cpp:530,1
    - Dst: getpid
      Src: /src/brpc/src/brpc/span.cpp:531,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:536,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:537,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/span.cpp:541,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:542,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/span.cpp:542,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:547,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:548,1
    - Dst: SpanDB::id_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:548,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:550,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:550,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:554,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:555,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:556,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:557,1
    - Dst: SpanDB::time_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:557,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:559,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:559,1
    - Dst: SpanDB::SpanDB
      Src: /src/brpc/src/brpc/span.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:566,1
    - Dst: brpc::SpanDB::Swap
      Src: /src/brpc/src/brpc/span.cpp:568,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 570
    functionName: brpc::SpanDB::Open
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 3
    functionsReached:
    - butil::FileEnumerator::Next
    - auto::empty
    - getpid
    - SpanDB::id_db_name::c_str
    - strftime
    - brpc::SpanDB::Open
    - leveldb::Status::ok
    - SpanDB::id_db_name::append
    - butil::DeleteFile
    - localtime_r
    - time
    - LOG
    - SpanDB::time_db_name::c_str
    - SpanDB::SpanDB
    - snprintf
    - leveldb::Status::ToString
    - SpanDB::time_db_name::append
    - butil::FilePath
    - butil::CreateDirectoryAndGetError
    - brpc::SpanDB::Swap
    - butil::FilePath::value
    linkageType: ''
    returnType: SpanDB
    signature: SpanDB * SpanDB::Open()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Span*::GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:582,1
    - Dst: Span*::GetEndRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:583,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/span.cpp:586,1
    - Dst: BriefSpan::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:589,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:589,1
    - Dst: BriefSpan::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:590,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:590,1
    - Dst: BriefSpan::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:591,1
    - Dst: Span*::log_id
      Src: /src/brpc/src/brpc/span.cpp:591,1
    - Dst: BriefSpan::set_type
      Src: /src/brpc/src/brpc/span.cpp:592,1
    - Dst: Span*::type
      Src: /src/brpc/src/brpc/span.cpp:592,1
    - Dst: BriefSpan::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:593,1
    - Dst: Span*::error_code
      Src: /src/brpc/src/brpc/span.cpp:593,1
    - Dst: BriefSpan::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:594,1
    - Dst: Span*::request_size
      Src: /src/brpc/src/brpc/span.cpp:594,1
    - Dst: BriefSpan::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: Span*::response_size
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: BriefSpan::set_start_real_us
      Src: /src/brpc/src/brpc/span.cpp:596,1
    - Dst: BriefSpan::set_latency_us
      Src: /src/brpc/src/brpc/span.cpp:597,1
    - Dst: BriefSpan::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: Span*::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: BriefSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:599,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:600,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:625,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:626,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:627,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:628,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:628,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:628,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:629,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:634,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:634,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:635,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:635,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:638,1
    - Dst: Span*::CountClientSpans
      Src: /src/brpc/src/brpc/span.cpp:640,1
    - Dst: RpczSpan::add_client_spans
      Src: /src/brpc/src/brpc/span.cpp:642,1
    - Dst: Span*::traversal
      Src: /src/brpc/src/brpc/span.cpp:645,1
    - Dst: const_cast<Span*>
      Src: /src/brpc/src/brpc/span.cpp:645,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:649,1
    - Dst: RpczSpan::mutable_client_spans
      Src: /src/brpc/src/brpc/span.cpp:649,1
    - Dst: RpczSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:652,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:653,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:654,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:656,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:656,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:657,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 45
    argCount: 2
    argNames:
    - span
    - value_buf
    argTypes:
    - Span*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 659
    functionName: brpc::SpanDB::Index
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - BriefSpan::set_span_id
    - Span*::log_id
    - BriefSpan::set_error_code
    - BriefSpan::set_start_real_us
    - Span*::span_id
    - Span*::trace_id
    - butil::Status::OK
    - leveldb::Status::ok
    - Span*::CountClientSpans
    - Put
    - BriefSpan::set_request_size
    - BriefSpan::set_log_id
    - Span2Proto
    - Span*::response_size
    - Span*::GetEndRealTimeUs
    - BriefSpan::set_response_size
    - Span*::error_code
    - BriefSpan::set_full_method_name
    - BriefSpan::set_latency_us
    - Span*::request_size
    - BriefSpan::SerializeToString
    - const_cast<Span*>
    - RpczSpan::mutable_client_spans
    - BriefSpan::set_trace_id
    - Span*::full_method_name
    - ToBigEndian
    - std::string*::data
    - RpczSpan::add_client_spans
    - RpczSpan::SerializeToString
    - BriefSpan::set_type
    - leveldb::Status::InvalidArgument
    - Span*::traversal
    - leveldb::Slice
    - Span*::type
    - Span*::GetStartRealTimeUs
    linkageType: ''
    returnType: leveldb::Status
    signature: leveldb::Status SpanDB::Index(const Span* span, std::string* value_buf)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:664,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:664,1
    - Dst: NewIterator
      Src: /src/brpc/src/brpc/span.cpp:669,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:669,1
    - Dst: leveldb::Iterator*::SeekToFirst
      Src: /src/brpc/src/brpc/span.cpp:670,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:670,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:670,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:672,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:672,1
    - Dst: ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:681,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:681,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:681,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:683,1
    - Dst: BriefSpan::trace_id
      Src: /src/brpc/src/brpc/span.cpp:683,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:684,1
    - Dst: BriefSpan::span_id
      Src: /src/brpc/src/brpc/span.cpp:684,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:686,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:688,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:692,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:694,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:694,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:695,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:696,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 702
      start: 662
    functionDepth: 1
    functionLinenumber: 662
    functionLinenumberEnd: 702
    functionName: brpc::SpanDB::RemoveSpansBefore
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - leveldb::Iterator*::Valid
    - leveldb::Status::ok
    - leveldb::Iterator*::key
    - leveldb::ReadOptions
    - leveldb::Status::InvalidArgument
    - BriefSpan::span_id
    - NewIterator
    - leveldb::Iterator*::value
    - BriefSpan::trace_id
    - Delete
    - ToBigEndian
    - leveldb::Slice
    - leveldb::Iterator*::Next
    - ToLittleEndian
    - BriefSpan::ParseFromArray
    - LOG
    - leveldb::Iterator*::SeekToFirst
    linkageType: ''
    returnType: leveldb::Status
    signature: leveldb::Status SpanDB::RemoveSpansBefore(int64_t tm)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: StartIndexingIfNeeded
      Src: /src/brpc/src/brpc/span.cpp:706,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:710,1
    - Dst: GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:711,1
    - Dst: brpc::Span::destroy
      Src: /src/brpc/src/brpc/span.cpp:713,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:716,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:718,1
    - Dst: brpc::Span::destroy
      Src: /src/brpc/src/brpc/span.cpp:719,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:722,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/span.cpp:723,1
    - Dst: butil::intrusive_ptr::Index
      Src: /src/brpc/src/brpc/span.cpp:726,1
    - Dst: brpc::Span::destroy
      Src: /src/brpc/src/brpc/span.cpp:727,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:728,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:729,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:729,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:730,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:730,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:730,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:731,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.cpp:737,1
    - Dst: butil::intrusive_ptr::RemoveSpansBefore
      Src: /src/brpc/src/brpc/span.cpp:740,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:742,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:743,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:743,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:745,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 705
    functionDepth: 2
    functionLinenumber: 705
    functionLinenumberEnd: 750
    functionName: brpc::Span::dump_and_destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::destroy
    - brpc::SpanDB::Open
    - leveldb::Status::IsCorruption
    - leveldb::Status::ok
    - butil::gettimeofday_us
    - butil::intrusive_ptr::Index
    - GetSpanDB
    - leveldb::Status::ToString
    - butil::intrusive_ptr::reset
    - leveldb::Status::IsIOError
    - butil::intrusive_ptr::RemoveSpansBefore
    - leveldb::Status::IsNotFound
    - ResetSpanDB
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    - StartIndexingIfNeeded
    linkageType: ''
    returnType: void
    signature: void Span::dump_and_destroy(size_t /*round*/)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:753,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:754,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:758,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:759,1
    - Dst: butil::intrusive_ptr::id_db::Get
      Src: /src/brpc/src/brpc/span.cpp:762,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:762,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:763,1
    - Dst: RpczSpan*::ParseFromString
      Src: /src/brpc/src/brpc/span.cpp:766,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - trace_id
    - span_id
    - response
    argTypes:
    - uint64_t
    - uint64_t
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 752
    functionDepth: 2
    functionLinenumber: 752
    functionLinenumberEnd: 771
    functionName: brpc::FindSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetSpanDB
    - leveldb::Status::ok
    - leveldb::ReadOptions
    - brpc::ToBigEndian
    - RpczSpan*::ParseFromString
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    - butil::intrusive_ptr::id_db::Get
    linkageType: ''
    returnType: int
    signature: int FindSpan(uint64_t trace_id, uint64_t span_id, RpczSpan* response)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::deque<RpczSpan>*::clear
      Src: /src/brpc/src/brpc/span.cpp:774,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:775,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:776,1
    - Dst: butil::intrusive_ptr::id_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:779,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:779,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:781,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:782,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:784,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:784,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:784,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:786,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:786,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: RpczSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: std::deque<RpczSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:796,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:798,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - trace_id
    - out
    argTypes:
    - uint64_t
    - std::deque<RpczSpan>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 773
    functionDepth: 2
    functionLinenumber: 773
    functionLinenumberEnd: 802
    functionName: brpc::FindSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - leveldb::Iterator*::Valid
    - RpczSpan::ParseFromArray
    - leveldb::Iterator*::key
    - leveldb::ReadOptions
    - std::deque<RpczSpan>*::push_back
    - leveldb::Iterator*::value
    - butil::intrusive_ptr::id_db::NewIterator
    - std::deque<RpczSpan>*::clear
    - brpc::ToBigEndian
    - leveldb::Iterator*::Seek
    - leveldb::Iterator*::Next
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::ToLittleEndian
    - LOG
    - brpc::GetSpanDB
    linkageType: ''
    returnType: void
    signature: void FindSpans(uint64_t trace_id, std::deque<RpczSpan>* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::deque<BriefSpan>*::clear
      Src: /src/brpc/src/brpc/span.cpp:806,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:807,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:808,1
    - Dst: butil::intrusive_ptr::time_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:811,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:811,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:815,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:816,1
    - Dst: leveldb::Iterator*::SeekToLast
      Src: /src/brpc/src/brpc/span.cpp:817,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:821,1
    - Dst: leveldb::Iterator*::Prev
      Src: /src/brpc/src/brpc/span.cpp:821,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:822,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:822,1
    - Dst: BriefSpan::Clear
      Src: /src/brpc/src/brpc/span.cpp:828,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: SpanFilter*::Keep
      Src: /src/brpc/src/brpc/span.cpp:830,1
    - Dst: std::deque<BriefSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:831,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:837,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 4
    argNames:
    - starting_realtime
    - max_scan
    - out
    - filter
    argTypes:
    - int64_t
    - size_t
    - std::deque<BriefSpan>*
    - SpanFilter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 804
    functionDepth: 2
    functionLinenumber: 804
    functionLinenumberEnd: 841
    functionName: brpc::ListSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::time_db::NewIterator
    - leveldb::Iterator*::Valid
    - SpanFilter*::Keep
    - leveldb::Iterator*::key
    - leveldb::ReadOptions
    - leveldb::Iterator*::Prev
    - std::deque<BriefSpan>*::push_back
    - std::deque<BriefSpan>*::clear
    - brpc::ToBigEndian
    - leveldb::Iterator*::Seek
    - leveldb::Iterator*::SeekToLast
    - LOG
    - leveldb::Iterator*::value
    - butil::intrusive_ptr::intrusive_ptr
    - BriefSpan::ParseFromArray
    - brpc::ToLittleEndian
    - brpc::GetSpanDB
    - BriefSpan::Clear
    linkageType: ''
    returnType: void
    signature: "void ListSpans(int64_t starting_realtime, size_t max_scan,\n               std::deque<BriefSpan>*
      out, SpanFilter* filter)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:844,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:845,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:851,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:851,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:854,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:854,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:861,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:861,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:864,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:864,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 868
      start: 843
    functionDepth: 2
    functionLinenumber: 843
    functionLinenumberEnd: 868
    functionName: brpc::DescribeSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::id_db::GetProperty
    - butil::intrusive_ptr::time_db::GetProperty
    - leveldb::Slice
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    linkageType: ''
    returnType: void
    signature: void DescribeSpanDB(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 1
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 1
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 1
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 1
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::experimental::Awaitable<T>::await_ready
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Awaitable<T>::await_ready()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_caller
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: std::coroutine_handle<detail::AwaitablePromise<U> >::promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:197,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:198,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - awaiting
    argTypes:
    - std::coroutine_handle<detail::AwaitablePromise<U> >
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 202
    functionName: brpc::experimental::Awaitable<T>::await_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<detail::AwaitablePromise<U> >::promise
    - set_caller
    - on_suspend
    - resume
    - needs_suspend
    linkageType: ''
    returnType: void
    signature: void Awaitable<T>::await_suspend(std::coroutine_handle<detail::AwaitablePromise<U>
      > awaiting)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/brpc/coroutine_inl.h:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 210
    functionName: brpc::experimental::Awaitable<T>::await_resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T Awaitable<T>::await_resume()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<void>::AwaitablePromise<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:213,1
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::experimental::AwaitableDone::AwaitableDone
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::AwaitableDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: brpc::experimental::AwaitableDone::Run
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:223,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:224,1
    - Dst: bthread::butex_create_checked<std::atomic<int> >
      Src: /src/brpc/src/brpc/coroutine_inl.h:228,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:229,1
    - Dst: detail::AwaitablePromise<T>::AwaitablePromise<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:232,1
    - Dst: set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:233,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: detail::AwaitablePromise*::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:240,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/coroutine_inl.h:241,1
    - Dst: on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:244,1
    - Dst: detail::AwaitablePromise*::set_callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:246,1
    - Dst: detail::AwaitablePromise*::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' aw'
    - detach
    argTypes:
    - Awaitable<T>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - set_needs_suspend
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::resume
    - bthread::butex_wake
    - promise
    - detail::AwaitablePromise*::value
    - store
    - CHECK
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - bthread::butex_create_checked<std::atomic<int> >
    - on_done
    linkageType: ''
    returnType: void
    signature: void Coroutine::Coroutine(Awaitable<T>&& aw, bool detach)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: join
      Src: /src/brpc/src/brpc/coroutine_inl.h:255,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:258,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 261
    functionName: Coroutine::~Coroutine()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - join
    linkageType: ''
    returnType: void
    signature: void Coroutine::~Coroutine()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:265,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:266,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/coroutine_inl.h:268,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:270,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:271,1
    - Dst: auto::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:272,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:273,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 4
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::experimental::Coroutine::join
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - on_suspend
    - bthread::butex_wait
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - auto::value
    linkageType: ''
    returnType: T
    signature: T Coroutine::join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:282,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:283,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:285,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 288
    functionName: brpc::experimental::Coroutine::awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - CHECK
    - Awaitable<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    linkageType: ''
    returnType: Awaitable<T>
    signature: Awaitable<T> Coroutine::awaitable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<int>::AwaitablePromise<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:293,1
    - Dst: auto::set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:294,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/coroutine_inl.h:296,1
    - Dst: static_cast<detail::AwaitablePromise<int>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:298,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:299,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:300,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/coroutine_inl.h:302,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:303,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:304,1
    - Dst: Awaitable<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - sleep_us
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 292
    functionDepth: 3
    functionLinenumber: 292
    functionLinenumberEnd: 307
    functionName: brpc::experimental::Coroutine::usleep
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - Awaitable<int>
    - bthread_timer_add
    - auto::set_value
    - butil::microseconds_from_now
    - auto::set_needs_suspend
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    linkageType: ''
    returnType: Awaitable<int>
    signature: Awaitable<int> Coroutine::usleep(int sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 4
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 3
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 3
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 3
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 3
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 6
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 4
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 4
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 4
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 4
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::experimental::Awaitable<T>::await_ready
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Awaitable<T>::await_ready()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_caller
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: std::coroutine_handle<detail::AwaitablePromise<U> >::promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:197,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:198,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - awaiting
    argTypes:
    - std::coroutine_handle<detail::AwaitablePromise<U> >
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 202
    functionName: brpc::experimental::Awaitable<T>::await_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<detail::AwaitablePromise<U> >::promise
    - set_caller
    - on_suspend
    - resume
    - needs_suspend
    linkageType: ''
    returnType: void
    signature: void Awaitable<T>::await_suspend(std::coroutine_handle<detail::AwaitablePromise<U>
      > awaiting)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/brpc/coroutine_inl.h:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 210
    functionName: brpc::experimental::Awaitable<T>::await_resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T Awaitable<T>::await_resume()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<void>::AwaitablePromise<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:213,1
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::experimental::AwaitableDone::AwaitableDone
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::AwaitableDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: brpc::experimental::AwaitableDone::Run
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:223,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:224,1
    - Dst: bthread::butex_create_checked<std::atomic<int> >
      Src: /src/brpc/src/brpc/coroutine_inl.h:228,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:229,1
    - Dst: detail::AwaitablePromise<T>::AwaitablePromise<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:232,1
    - Dst: set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:233,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: detail::AwaitablePromise*::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:240,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/coroutine_inl.h:241,1
    - Dst: on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:244,1
    - Dst: detail::AwaitablePromise*::set_callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:246,1
    - Dst: detail::AwaitablePromise*::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' aw'
    - detach
    argTypes:
    - Awaitable<T>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - set_needs_suspend
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::resume
    - bthread::butex_wake
    - promise
    - detail::AwaitablePromise*::value
    - store
    - CHECK
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - bthread::butex_create_checked<std::atomic<int> >
    - on_done
    linkageType: ''
    returnType: void
    signature: void Coroutine::Coroutine(Awaitable<T>&& aw, bool detach)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: join
      Src: /src/brpc/src/brpc/coroutine_inl.h:255,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:258,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 261
    functionName: Coroutine::~Coroutine()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - join
    linkageType: ''
    returnType: void
    signature: void Coroutine::~Coroutine()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:265,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:266,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/coroutine_inl.h:268,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:270,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:271,1
    - Dst: auto::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:272,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:273,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 4
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::experimental::Coroutine::join
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - on_suspend
    - bthread::butex_wait
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - auto::value
    linkageType: ''
    returnType: T
    signature: T Coroutine::join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:282,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:283,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:285,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 288
    functionName: brpc::experimental::Coroutine::awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - CHECK
    - Awaitable<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    linkageType: ''
    returnType: Awaitable<T>
    signature: Awaitable<T> Coroutine::awaitable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<int>::AwaitablePromise<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:293,1
    - Dst: auto::set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:294,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/coroutine_inl.h:296,1
    - Dst: static_cast<detail::AwaitablePromise<int>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:298,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:299,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:300,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/coroutine_inl.h:302,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:303,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:304,1
    - Dst: Awaitable<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - sleep_us
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 292
    functionDepth: 3
    functionLinenumber: 292
    functionLinenumberEnd: 307
    functionName: brpc::experimental::Coroutine::usleep
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - Awaitable<int>
    - bthread_timer_add
    - auto::set_value
    - butil::microseconds_from_now
    - auto::set_needs_suspend
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    linkageType: ''
    returnType: Awaitable<int>
    signature: Awaitable<int> Coroutine::usleep(int sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 8
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 5
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 5
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 5
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 5
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 10
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 6
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 6
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 6
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 6
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::experimental::Awaitable<T>::await_ready
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Awaitable<T>::await_ready()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_caller
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: std::coroutine_handle<detail::AwaitablePromise<U> >::promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:197,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:198,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - awaiting
    argTypes:
    - std::coroutine_handle<detail::AwaitablePromise<U> >
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 202
    functionName: brpc::experimental::Awaitable<T>::await_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<detail::AwaitablePromise<U> >::promise
    - set_caller
    - on_suspend
    - resume
    - needs_suspend
    linkageType: ''
    returnType: void
    signature: void Awaitable<T>::await_suspend(std::coroutine_handle<detail::AwaitablePromise<U>
      > awaiting)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/brpc/coroutine_inl.h:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 210
    functionName: brpc::experimental::Awaitable<T>::await_resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T Awaitable<T>::await_resume()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<void>::AwaitablePromise<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:213,1
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::experimental::AwaitableDone::AwaitableDone
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::AwaitableDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: brpc::experimental::AwaitableDone::Run
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:223,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:224,1
    - Dst: bthread::butex_create_checked<std::atomic<int> >
      Src: /src/brpc/src/brpc/coroutine_inl.h:228,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:229,1
    - Dst: detail::AwaitablePromise<T>::AwaitablePromise<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:232,1
    - Dst: set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:233,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: detail::AwaitablePromise*::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:240,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/coroutine_inl.h:241,1
    - Dst: on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:244,1
    - Dst: detail::AwaitablePromise*::set_callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:246,1
    - Dst: detail::AwaitablePromise*::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' aw'
    - detach
    argTypes:
    - Awaitable<T>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - set_needs_suspend
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::resume
    - bthread::butex_wake
    - promise
    - detail::AwaitablePromise*::value
    - store
    - CHECK
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - bthread::butex_create_checked<std::atomic<int> >
    - on_done
    linkageType: ''
    returnType: void
    signature: void Coroutine::Coroutine(Awaitable<T>&& aw, bool detach)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: join
      Src: /src/brpc/src/brpc/coroutine_inl.h:255,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:258,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 261
    functionName: Coroutine::~Coroutine()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - join
    linkageType: ''
    returnType: void
    signature: void Coroutine::~Coroutine()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:265,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:266,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/coroutine_inl.h:268,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:270,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:271,1
    - Dst: auto::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:272,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:273,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 4
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::experimental::Coroutine::join
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - on_suspend
    - bthread::butex_wait
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - auto::value
    linkageType: ''
    returnType: T
    signature: T Coroutine::join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:282,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:283,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:285,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 288
    functionName: brpc::experimental::Coroutine::awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - CHECK
    - Awaitable<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    linkageType: ''
    returnType: Awaitable<T>
    signature: Awaitable<T> Coroutine::awaitable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<int>::AwaitablePromise<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:293,1
    - Dst: auto::set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:294,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/coroutine_inl.h:296,1
    - Dst: static_cast<detail::AwaitablePromise<int>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:298,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:299,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:300,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/coroutine_inl.h:302,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:303,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:304,1
    - Dst: Awaitable<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - sleep_us
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 292
    functionDepth: 3
    functionLinenumber: 292
    functionLinenumberEnd: 307
    functionName: brpc::experimental::Coroutine::usleep
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - Awaitable<int>
    - bthread_timer_add
    - auto::set_value
    - butil::microseconds_from_now
    - auto::set_needs_suspend
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    linkageType: ''
    returnType: Awaitable<int>
    signature: Awaitable<int> Coroutine::usleep(int sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 12
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 7
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 7
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 7
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 7
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::experimental::detail::AwaitablePromiseBase::AwaitablePromiseBase
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: ~AwaitablePromiseBase()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AwaitablePromiseBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::experimental::detail::AwaitablePromiseBase::needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool needs_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>::atomic<bool>
      Src: /src/brpc/src/brpc/coroutine_inl.h:46,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_needs_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - store
    - std::atomic<bool>::atomic<bool>
    linkageType: ''
    returnType: void
    signature: void set_needs_suspend()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/coroutine_inl.h:58,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 14
    functionsReached:
    - resume
    - exchange
    linkageType: ''
    returnType: void
    signature: void suspend_or_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::experimental::detail::AwaitablePromiseBase::on_done
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - brpc::experimental::detail::AwaitablePromiseBase::suspend_or_done
    linkageType: ''
    returnType: void
    signature: void on_done()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cb
    argTypes:
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_callback
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_callback(std::function<void()> cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - caller
    argTypes:
    - AwaitablePromiseBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: brpc::experimental::detail::AwaitablePromiseBase::set_caller
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_caller(AwaitablePromiseBase* caller)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::experimental::detail::AwaitablePromiseBase::initial_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto initial_suspend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/coroutine_inl.h:87,1
    - Dst: std::exit
      Src: /src/brpc/src/brpc/coroutine_inl.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: brpc::experimental::detail::AwaitablePromiseBase::unhandled_exception
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - LOG
    - std::exit
    linkageType: ''
    returnType: void
    signature: void unhandled_exception()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:96,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:99,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 106
    functionName: brpc::experimental::detail::AwaitablePromiseBase::final_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - resume
    - _callback
    linkageType: ''
    returnType: auto
    signature: auto final_suspend() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::experimental::detail::AwaitablePromise::value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::experimental::detail::AwaitablePromise::set_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_value(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: brpc::experimental::detail::AwaitablePromise::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 8
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::experimental::detail::AwaitablePromise::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 8
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:141,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: brpc::experimental::detail::AwaitablePromise::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<T>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: brpc::experimental::detail::AwaitablePromise::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::experimental::detail::AwaitablePromise<void>::resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 8
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::resume
    linkageType: ''
    returnType: void
    signature: void resume() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::experimental::detail::AwaitablePromise<void>::destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::experimental::detail::AwaitablePromise<void>::destroy
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 8
    functionsReached:
    - brpc::experimental::detail::AwaitablePromise<void>::destroy
    linkageType: ''
    returnType: void
    signature: void destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::coroutine_handle<AwaitablePromise>::from_promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:170,1
    - Dst: Awaitable<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 172
    functionName: brpc::experimental::detail::AwaitablePromise<void>::get_return_object
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<AwaitablePromise>::from_promise
    - Awaitable<void>
    linkageType: ''
    returnType: auto
    signature: auto get_return_object()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::experimental::detail::AwaitablePromise<void>::return_value
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: auto return_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::experimental::Awaitable<T>::await_ready
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Awaitable<T>::await_ready()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_caller
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: std::coroutine_handle<detail::AwaitablePromise<U> >::promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:196,1
    - Dst: needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:197,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:198,1
    - Dst: resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - awaiting
    argTypes:
    - std::coroutine_handle<detail::AwaitablePromise<U> >
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 202
    functionName: brpc::experimental::Awaitable<T>::await_suspend
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - std::coroutine_handle<detail::AwaitablePromise<U> >::promise
    - set_caller
    - on_suspend
    - resume
    - needs_suspend
    linkageType: ''
    returnType: void
    signature: void Awaitable<T>::await_suspend(std::coroutine_handle<detail::AwaitablePromise<U>
      > awaiting)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/brpc/coroutine_inl.h:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 210
    functionName: brpc::experimental::Awaitable<T>::await_resume
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T Awaitable<T>::await_resume()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<void>::AwaitablePromise<void>
      Src: /src/brpc/src/brpc/coroutine_inl.h:213,1
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::experimental::AwaitableDone::AwaitableDone
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::AwaitableDone()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: brpc::experimental::AwaitableDone::Run
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    linkageType: ''
    returnType: void
    signature: void AwaitableDone::Run()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: promise
      Src: /src/brpc/src/brpc/coroutine_inl.h:223,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:224,1
    - Dst: bthread::butex_create_checked<std::atomic<int> >
      Src: /src/brpc/src/brpc/coroutine_inl.h:228,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:229,1
    - Dst: detail::AwaitablePromise<T>::AwaitablePromise<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:232,1
    - Dst: set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:233,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: detail::AwaitablePromise*::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:237,1
    - Dst: store
      Src: /src/brpc/src/brpc/coroutine_inl.h:240,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/coroutine_inl.h:241,1
    - Dst: on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:244,1
    - Dst: detail::AwaitablePromise*::set_callback
      Src: /src/brpc/src/brpc/coroutine_inl.h:246,1
    - Dst: detail::AwaitablePromise*::resume
      Src: /src/brpc/src/brpc/coroutine_inl.h:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' aw'
    - detach
    argTypes:
    - Awaitable<T>
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - set_needs_suspend
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::resume
    - bthread::butex_wake
    - promise
    - detail::AwaitablePromise*::value
    - store
    - CHECK
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - bthread::butex_create_checked<std::atomic<int> >
    - on_done
    linkageType: ''
    returnType: void
    signature: void Coroutine::Coroutine(Awaitable<T>&& aw, bool detach)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: join
      Src: /src/brpc/src/brpc/coroutine_inl.h:255,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/coroutine_inl.h:258,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 261
    functionName: Coroutine::~Coroutine()
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - join
    linkageType: ''
    returnType: void
    signature: void Coroutine::~Coroutine()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:265,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:266,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/coroutine_inl.h:268,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:270,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:271,1
    - Dst: auto::value
      Src: /src/brpc/src/brpc/coroutine_inl.h:272,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:273,1
    - Dst: on_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 4
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::experimental::Coroutine::join
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - on_suspend
    - bthread::butex_wait
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - auto::value
    linkageType: ''
    returnType: T
    signature: T Coroutine::join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:282,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:283,1
    - Dst: dynamic_cast<detail::AwaitablePromise<T>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/coroutine_inl.h:285,1
    - Dst: Awaitable<T>
      Src: /src/brpc/src/brpc/coroutine_inl.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 288
    functionName: brpc::experimental::Coroutine::awaitable
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - CHECK
    - Awaitable<T>
    - dynamic_cast<detail::AwaitablePromise<T>*>
    linkageType: ''
    returnType: Awaitable<T>
    signature: Awaitable<T> Coroutine::awaitable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: detail::AwaitablePromise<int>::AwaitablePromise<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:293,1
    - Dst: auto::set_needs_suspend
      Src: /src/brpc/src/brpc/coroutine_inl.h:294,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/coroutine_inl.h:296,1
    - Dst: static_cast<detail::AwaitablePromise<int>*>
      Src: /src/brpc/src/brpc/coroutine_inl.h:298,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:299,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:300,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/coroutine_inl.h:302,1
    - Dst: auto::set_value
      Src: /src/brpc/src/brpc/coroutine_inl.h:303,1
    - Dst: auto::on_done
      Src: /src/brpc/src/brpc/coroutine_inl.h:304,1
    - Dst: Awaitable<int>
      Src: /src/brpc/src/brpc/coroutine_inl.h:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - sleep_us
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 292
    functionDepth: 3
    functionLinenumber: 292
    functionLinenumberEnd: 307
    functionName: brpc::experimental::Coroutine::usleep
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 2
    functionsReached:
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - Awaitable<int>
    - bthread_timer_add
    - auto::set_value
    - butil::microseconds_from_now
    - auto::set_needs_suspend
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    linkageType: ''
    returnType: Awaitable<int>
    signature: Awaitable<int> Coroutine::usleep(int sleep_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: brpc::InputMessenger::InputMessageClosure::InputMessageClosure
    functionSourceFile: /src/brpc/src/brpc/input_messenger.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputMessageClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 123
    functionName: brpc::InputMessenger::InputMessageClosure::release
    functionSourceFile: /src/brpc/src/brpc/input_messenger.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InputMessageBase
    signature: InputMessageBase * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 157
    functionName: InputMessenger* get_client_side_messenger()
    functionSourceFile: /src/brpc/src/brpc/input_messenger.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE InputMessenger* get_client_side_messenger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: brpc::InputMessenger::InputMessageClosure::InputMessageClosure
    functionSourceFile: /src/brpc/src/brpc/input_messenger.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputMessageClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 123
    functionName: brpc::InputMessenger::InputMessageClosure::release
    functionSourceFile: /src/brpc/src/brpc/input_messenger.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: InputMessageBase
    signature: InputMessageBase * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 157
    functionName: InputMessenger* get_client_side_messenger()
    functionSourceFile: /src/brpc/src/brpc/input_messenger.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE InputMessenger* get_client_side_messenger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 27
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, int32_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, uint32_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, int64_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, uint64_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, double)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, int64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, uint64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: brpc::NonNegativeInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NonNegativeInteger(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: brpc::NonNegativeInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NonNegativeInteger(const char*, int64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const bool* flag,\n                                bool
      (*validate_fn)(const char*, bool))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const int32_t* flag,\n                                bool
      (*validate_fn)(const char*, int32_t))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 72
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const int64_t* flag,\n                                bool
      (*validate_fn)(const char*, int64_t))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const uint64_t* flag,\n                                bool
      (*validate_fn)(const char*, uint64_t))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const double* flag,\n                                bool
      (*validate_fn)(const char*, double))"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 27
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, int32_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, uint32_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, int64_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, uint64_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: brpc::PassValidate
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, double)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, int64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::PositiveInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, uint64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: brpc::NonNegativeInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NonNegativeInteger(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: brpc::NonNegativeInteger
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NonNegativeInteger(const char*, int64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const bool* flag,\n                                bool
      (*validate_fn)(const char*, bool))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const int32_t* flag,\n                                bool
      (*validate_fn)(const char*, int32_t))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 72
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const int64_t* flag,\n                                bool
      (*validate_fn)(const char*, int64_t))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const uint64_t* flag,\n                                bool
      (*validate_fn)(const char*, uint64_t))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RegisterFlagValidatorOrDieImpl
      Src: /src/brpc/src/brpc/reloadable_flags.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: brpc::RegisterFlagValidatorOrDie
    functionSourceFile: /src/brpc/src/brpc/reloadable_flags.cpp
    functionUses: 0
    functionsReached:
    - butil::RegisterFlagValidatorOrDieImpl
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDie(const double* flag,\n                                bool
      (*validate_fn)(const char*, double))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/nshead_message.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - NsheadMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: '& operator=(const NsheadMessage& from)'
    functionSourceFile: /src/brpc/src/brpc/nshead_message.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: NsheadMessage
    signature: NsheadMessage & operator=(const NsheadMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/nshead_message.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::NsheadMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/nshead_message.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/nshead_message.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - NsheadMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: '& operator=(const NsheadMessage& from)'
    functionSourceFile: /src/brpc/src/brpc/nshead_message.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: NsheadMessage
    signature: NsheadMessage & operator=(const NsheadMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/nshead_message.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::NsheadMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/nshead_message.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DereferenceVersionedRefWithId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: operator()(T* r) const
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - brpc::DereferenceVersionedRefWithId
    linkageType: ''
    returnType: void
    signature: void operator()(T* r) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - butil::ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: brpc::MakeVRefId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - VRefId
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE MakeVRefId(uint32_t version,\n                                     butil::ResourceId<T>
      slot)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref_id
    argTypes:
    - VRefId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: butil::ResourceId<T> SlotOfVRefId(VRefId vref_id)
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE butil::ResourceId<T> SlotOfVRefId(VRefId vref_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref_id
    argTypes:
    - VRefId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::VersionOfVRefId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE VersionOfVRefId(VRefId vref_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: brpc::VersionOfVRef
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE VersionOfVRef(uint64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::NRefOfVRef
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE NRefOfVRef(uint64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - nref
    argTypes:
    - uint32_t
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: brpc::MakeVRef
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE MakeVRef(uint32_t version, int32_t nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: brpc::ReturnEmpty
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename std::enable_if<!butil::is_void<Ret>::value, Ret>::type
    signature: typename std::enable_if<!butil::is_void<Ret>::value, Ret>::type ReturnEmpty()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::ReturnEmpty
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename std::enable_if<butil::is_void<Ret>::value, Ret>::type
    signature: typename std::enable_if<butil::is_void<Ret>::value, Ret>::type ReturnEmpty()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - class_type
    - ','
    - func_name
    - ','
    - return_type
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 119
    functionName: WRAPPER_OF
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: WRAPPER_OF(class_type, func_name, return_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - func_name
    - ','
    - obj
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 121
    functionName: WRAPPER_CALL
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: WRAPPER_CALL(func_name, obj, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    functionName: brpc::VersionedRefWithId::VersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VersionedRefWithId(Forbidden)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 208
    functionName: ~VersionedRefWithId()
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~VersionedRefWithId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:234,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: brpc::VersionedRefWithId::nref
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - NRefOfVRef
    - load
    linkageType: ''
    returnType: int32_t
    signature: int32_t nref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:255,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:255,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 257
    functionName: brpc::VersionedRefWithId::Failed
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - VersionOfVRefId
    - VersionOfVRef
    - load
    linkageType: ''
    returnType: bool
    signature: bool Failed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::VersionedRefWithId::id
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: VRefId
    signature: VRefId id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: brpc::VersionedRefWithId::additional_ref_status
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: AdditionalRefStatus
    signature: AdditionalRefStatus additional_ref_status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: brpc::VersionedRefWithId::versioned_ref
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t versioned_ref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 302
    functionName: brpc::VersionedRefWithId::AddReference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void AddReference()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<VersionedRefWithId<T>*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - r
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: brpc::DereferenceVersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - static_cast<VersionedRefWithId<T>*>
    linkageType: ''
    returnType: void
    signature: void DereferenceVersionedRefWithId(T* r)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:356,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:358,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:359,1
    - Dst: MakeVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:367,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:368,1
    - Dst: VersionedRefWithId*::_versioned_ref::fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:368,1
    - Dst: VersionedRefWithId*::_additional_ref_status::store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:370,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:372,1
    - Dst: T*::OnCreated
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:375,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:375,1
    - Dst: VersionedRefWithId*::SetFailed
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:376,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - id
    argTypes:
    - VRefId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 383
    functionName: brpc::VersionedRefWithId<T>::Create
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - VersionedRefWithId*::_additional_ref_status::store
    - T*::OnCreated
    - std::forward<Args>
    - butil::get_resource
    - butil::class_name<T>
    - MakeVRefId<T>
    - VersionOfVRef
    - BAIDU_CASSERT
    - VersionedRefWithId*::SetFailed
    - Forbidden
    - LOG
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::Create(VRefId* id, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressImpl
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - ptr
    argTypes:
    - VRefId
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 389
    functionName: brpc::VersionedRefWithId<T>::Address
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - brpc::VersionedRefWithId<T>::AddressImpl
    linkageType: ''
    returnType: int
    signature: "int VersionedRefWithId<T>::Address(\n    VRefId id, VersionedRefWithIdUniquePtr<T>*
      ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressImpl
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - ptr
    argTypes:
    - VRefId
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: brpc::VersionedRefWithId<T>::AddressFailedAsWell
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 20
    functionsReached:
    - brpc::VersionedRefWithId<T>::AddressImpl
    linkageType: ''
    returnType: int
    signature: "int VersionedRefWithId<T>::AddressFailedAsWell(\n    VRefId id, VersionedRefWithIdUniquePtr<T>*
      ptr)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: SlotOfVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:400,1
    - Dst: address_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:401,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:402,1
    - Dst: VersionedRefWithId*::_versioned_ref::fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:406,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:408,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:409,1
    - Dst: VersionedRefWithIdUniquePtr<T>*::reset
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:410,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:413,1
    - Dst: VersionedRefWithIdUniquePtr<T>*::reset
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:414,1
    - Dst: VersionedRefWithId*::_versioned_ref::fetch_sub
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:418,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:420,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:423,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:424,1
    - Dst: VersionedRefWithId*::_versioned_ref::compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:428,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:429,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:432,1
    - Dst: T*::BeforeRecycled
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:436,1
    - Dst: return_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:437,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:440,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:447,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 31
    argCount: 3
    argNames:
    - id
    - failed_as_well
    - ptr
    argTypes:
    - VRefId
    - bool
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 451
    functionName: brpc::VersionedRefWithId<T>::AddressImpl
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - VersionedRefWithId*::_versioned_ref::fetch_sub
    - address_resource
    - VersionedRefWithId*::_versioned_ref::compare_exchange_strong
    - VersionedRefWithIdUniquePtr<T>*::reset
    - VersionOfVRef
    - VersionOfVRefId
    - BAIDU_CASSERT
    - MakeVRef
    - T*::BeforeRecycled
    - NRefOfVRef
    - __builtin_expect
    - CHECK
    - return_resource
    - SlotOfVRefId<T>
    linkageType: ''
    returnType: int
    signature: "int VersionedRefWithId<T>::AddressImpl(\n    VRefId id, bool failed_as_well,
      VersionedRefWithIdUniquePtr<T>* ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:455,1
    - Dst: VersionedRefWithIdUniquePtr<T>*::reset
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:456,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:456,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 457
    functionName: brpc::VersionedRefWithId<T>::ReAddress
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - fetch_add
    - VersionedRefWithIdUniquePtr<T>*::reset
    linkageType: ''
    returnType: void
    signature: void VersionedRefWithId<T>::ReAddress(VersionedRefWithIdUniquePtr<T>*
      ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::Address
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:463,1
    - Dst: VersionedRefWithIdUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:466,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:466,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - VRefId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 461
    functionDepth: 2
    functionLinenumber: 461
    functionLinenumberEnd: 467
    functionName: brpc::VersionedRefWithId<T>::SetFailedById
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 3
    functionsReached:
    - std::forward<Args>
    - brpc::VersionedRefWithId<T>::Address
    - VersionedRefWithIdUniquePtr::SetFailed
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::SetFailedById(VRefId id, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::SetFailedImpl
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:472,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 471
    functionDepth: 1
    functionLinenumber: 471
    functionLinenumberEnd: 473
    functionName: brpc::VersionedRefWithId<T>::SetFailed
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - brpc::VersionedRefWithId<T>::SetFailedImpl
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::SetFailed(Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:478,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:479,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:481,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:486,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:487,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:487,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:491,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:491,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:491,1
    - Dst: brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:494,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 477
    functionDepth: 1
    functionLinenumber: 477
    functionLinenumberEnd: 500
    functionName: brpc::VersionedRefWithId<T>::SetFailedImpl
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - std::forward<Args>
    - brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    - load
    - VersionOfVRefId
    - VersionOfVRef
    - MakeVRef
    - compare_exchange_strong
    - NRefOfVRef
    - static_cast<T*>
    - WRAPPER_CALL
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::SetFailedImpl(Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:506,1
    - Dst: BeforeAdditionalRefReleasedWrapper
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:510,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:511,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:511,1
    - Dst: brpc::VersionedRefWithId<T>::Dereference
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:512,1
    - Dst: sched_yield
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 522
    functionName: brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - sched_yield
    - compare_exchange_strong
    - static_cast<T*>
    - brpc::VersionedRefWithId<T>::Dereference
    - BeforeAdditionalRefReleasedWrapper
    - WRAPPER_CALL
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::ReleaseAdditionalReference()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:527,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:529,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:533,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:534,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:535,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:547,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:566,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:567,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:570,1
    - Dst: return_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:571,1
    - Dst: SlotOfVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:571,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:576,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:579,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 525
    functionDepth: 1
    functionLinenumber: 525
    functionLinenumberEnd: 581
    functionName: brpc::VersionedRefWithId<T>::Dereference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - VersionOfVRef
    - VersionOfVRefId
    - compare_exchange_strong
    - MakeVRef
    - NRefOfVRef
    - __builtin_expect
    - static_cast<T*>
    - return_resource
    - SlotOfVRefId<T>
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::Dereference()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:585,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:586,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:587,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:590,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:590,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:590,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:592,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:595,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:597,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:598,1
    - Dst: brpc::VersionedRefWithId<T>::description
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:598,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:603,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:604,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:608,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:610,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:610,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - at_least_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 584
    functionDepth: 1
    functionLinenumber: 584
    functionLinenumberEnd: 614
    functionName: brpc::VersionedRefWithId<T>::Revive
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    - VersionOfVRefId
    - VersionOfVRef
    - MakeVRef
    - NRefOfVRef
    - CHECK_EQ
    - store
    - static_cast<T*>
    - compare_exchange_weak
    - id
    - LOG
    - brpc::VersionedRefWithId<T>::description
    - WRAPPER_CALL
    linkageType: ''
    returnType: void
    signature: void VersionedRefWithId<T>::Revive(int32_t at_least_nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: const_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:622,1
    - Dst: static_cast<const T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:622,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 625
    functionName: brpc::VersionedRefWithId<T>::description
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - const_cast<T*>
    - std::string::reserve
    - butil::class_name<T>
    - std::string::append
    - static_cast<const T*>
    - butil::string_appendf
    - id
    - WRAPPER_CALL
    linkageType: ''
    returnType: std::string
    signature: std::string VersionedRefWithId<T>::description() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DereferenceVersionedRefWithId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: operator()(T* r) const
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - DereferenceVersionedRefWithId
    linkageType: ''
    returnType: void
    signature: void operator()(T* r) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - slot
    argTypes:
    - uint32_t
    - butil::ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: brpc::MakeVRefId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - VRefId
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE MakeVRefId(uint32_t version,\n                                     butil::ResourceId<T>
      slot)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref_id
    argTypes:
    - VRefId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: butil::ResourceId<T> SlotOfVRefId(VRefId vref_id)
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE butil::ResourceId<T> SlotOfVRefId(VRefId vref_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref_id
    argTypes:
    - VRefId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::VersionOfVRefId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE VersionOfVRefId(VRefId vref_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: brpc::VersionOfVRef
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE VersionOfVRef(uint64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - vref
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::NRefOfVRef
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE NRefOfVRef(uint64_t vref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - version
    - nref
    argTypes:
    - uint32_t
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: brpc::MakeVRef
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE MakeVRef(uint32_t version, int32_t nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: brpc::ReturnEmpty
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename std::enable_if<!butil::is_void<Ret>::value, Ret>::type
    signature: typename std::enable_if<!butil::is_void<Ret>::value, Ret>::type ReturnEmpty()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::ReturnEmpty
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename std::enable_if<butil::is_void<Ret>::value, Ret>::type
    signature: typename std::enable_if<butil::is_void<Ret>::value, Ret>::type ReturnEmpty()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - class_type
    - ','
    - func_name
    - ','
    - return_type
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 119
    functionName: WRAPPER_OF
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: WRAPPER_OF(class_type, func_name, return_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - func_name
    - ','
    - obj
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 121
    functionName: WRAPPER_CALL
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: WRAPPER_CALL(func_name, obj, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    functionName: brpc::VersionedRefWithId::VersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VersionedRefWithId(Forbidden)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 208
    functionName: ~VersionedRefWithId()
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~VersionedRefWithId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:234,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: brpc::VersionedRefWithId::nref
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - NRefOfVRef
    - load
    linkageType: ''
    returnType: int32_t
    signature: int32_t nref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:255,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:255,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 257
    functionName: brpc::VersionedRefWithId::Failed
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - VersionOfVRefId
    - VersionOfVRef
    - load
    linkageType: ''
    returnType: bool
    signature: bool Failed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::VersionedRefWithId::id
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: VRefId
    signature: VRefId id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: brpc::VersionedRefWithId::additional_ref_status
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: AdditionalRefStatus
    signature: AdditionalRefStatus additional_ref_status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: brpc::VersionedRefWithId::versioned_ref
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t versioned_ref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 302
    functionName: brpc::VersionedRefWithId::AddReference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void AddReference()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<VersionedRefWithId<T>*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - r
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: brpc::DereferenceVersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - static_cast<VersionedRefWithId<T>*>
    linkageType: ''
    returnType: void
    signature: void DereferenceVersionedRefWithId(T* r)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:356,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:358,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:359,1
    - Dst: MakeVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:367,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:368,1
    - Dst: VersionedRefWithId*::_versioned_ref::fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:368,1
    - Dst: VersionedRefWithId*::_additional_ref_status::store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:370,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:372,1
    - Dst: T*::OnCreated
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:375,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:375,1
    - Dst: VersionedRefWithId*::SetFailed
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:376,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - id
    argTypes:
    - VRefId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 383
    functionName: brpc::VersionedRefWithId<T>::Create
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - VersionedRefWithId*::_additional_ref_status::store
    - T*::OnCreated
    - std::forward<Args>
    - butil::get_resource
    - butil::class_name<T>
    - MakeVRefId<T>
    - VersionOfVRef
    - BAIDU_CASSERT
    - VersionedRefWithId*::SetFailed
    - Forbidden
    - LOG
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::Create(VRefId* id, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressImpl
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - ptr
    argTypes:
    - VRefId
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 389
    functionName: brpc::VersionedRefWithId<T>::Address
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - brpc::VersionedRefWithId<T>::AddressImpl
    linkageType: ''
    returnType: int
    signature: "int VersionedRefWithId<T>::Address(\n    VRefId id, VersionedRefWithIdUniquePtr<T>*
      ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressImpl
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - ptr
    argTypes:
    - VRefId
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 2
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: brpc::VersionedRefWithId<T>::AddressFailedAsWell
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 20
    functionsReached:
    - brpc::VersionedRefWithId<T>::AddressImpl
    linkageType: ''
    returnType: int
    signature: "int VersionedRefWithId<T>::AddressFailedAsWell(\n    VRefId id, VersionedRefWithIdUniquePtr<T>*
      ptr)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: SlotOfVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:400,1
    - Dst: address_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:401,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:402,1
    - Dst: VersionedRefWithId*::_versioned_ref::fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:406,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:408,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:409,1
    - Dst: VersionedRefWithIdUniquePtr<T>*::reset
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:410,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:413,1
    - Dst: VersionedRefWithIdUniquePtr<T>*::reset
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:414,1
    - Dst: VersionedRefWithId*::_versioned_ref::fetch_sub
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:418,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:420,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:423,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:424,1
    - Dst: VersionedRefWithId*::_versioned_ref::compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:428,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:429,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:432,1
    - Dst: T*::BeforeRecycled
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:436,1
    - Dst: return_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:437,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:440,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:447,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 31
    argCount: 3
    argNames:
    - id
    - failed_as_well
    - ptr
    argTypes:
    - VRefId
    - bool
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 451
    functionName: brpc::VersionedRefWithId<T>::AddressImpl
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 4
    functionsReached:
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - VersionedRefWithId*::_versioned_ref::fetch_sub
    - address_resource
    - VersionedRefWithId*::_versioned_ref::compare_exchange_strong
    - VersionedRefWithIdUniquePtr<T>*::reset
    - VersionOfVRef
    - VersionOfVRefId
    - BAIDU_CASSERT
    - MakeVRef
    - T*::BeforeRecycled
    - NRefOfVRef
    - __builtin_expect
    - CHECK
    - return_resource
    - SlotOfVRefId<T>
    linkageType: ''
    returnType: int
    signature: "int VersionedRefWithId<T>::AddressImpl(\n    VRefId id, bool failed_as_well,
      VersionedRefWithIdUniquePtr<T>* ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:455,1
    - Dst: VersionedRefWithIdUniquePtr<T>*::reset
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:456,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:456,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - VersionedRefWithIdUniquePtr<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 457
    functionName: brpc::VersionedRefWithId<T>::ReAddress
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - fetch_add
    - VersionedRefWithIdUniquePtr<T>*::reset
    linkageType: ''
    returnType: void
    signature: void VersionedRefWithId<T>::ReAddress(VersionedRefWithIdUniquePtr<T>*
      ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::Address
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:463,1
    - Dst: VersionedRefWithIdUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:466,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:466,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - VRefId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 461
    functionDepth: 2
    functionLinenumber: 461
    functionLinenumberEnd: 467
    functionName: brpc::VersionedRefWithId<T>::SetFailedById
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 3
    functionsReached:
    - std::forward<Args>
    - brpc::VersionedRefWithId<T>::Address
    - VersionedRefWithIdUniquePtr::SetFailed
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::SetFailedById(VRefId id, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::SetFailedImpl
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:472,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 471
    functionDepth: 2
    functionLinenumber: 471
    functionLinenumberEnd: 473
    functionName: brpc::VersionedRefWithId<T>::SetFailed
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - brpc::VersionedRefWithId<T>::SetFailedImpl
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::SetFailed(Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:478,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:479,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:481,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:486,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:487,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:487,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:491,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:491,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:491,1
    - Dst: brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:494,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 477
    functionDepth: 2
    functionLinenumber: 477
    functionLinenumberEnd: 500
    functionName: brpc::VersionedRefWithId<T>::SetFailedImpl
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - std::forward<Args>
    - brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    - load
    - VersionOfVRefId
    - VersionOfVRef
    - MakeVRef
    - compare_exchange_strong
    - NRefOfVRef
    - static_cast<T*>
    - WRAPPER_CALL
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::SetFailedImpl(Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:506,1
    - Dst: BeforeAdditionalRefReleasedWrapper
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:510,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:511,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:511,1
    - Dst: brpc::VersionedRefWithId<T>::Dereference
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:512,1
    - Dst: sched_yield
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 503
    functionDepth: 2
    functionLinenumber: 503
    functionLinenumberEnd: 522
    functionName: brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - sched_yield
    - compare_exchange_strong
    - static_cast<T*>
    - brpc::VersionedRefWithId<T>::Dereference
    - BeforeAdditionalRefReleasedWrapper
    - WRAPPER_CALL
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::ReleaseAdditionalReference()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:527,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:529,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:533,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:534,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:535,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:547,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:566,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:567,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:570,1
    - Dst: return_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:571,1
    - Dst: SlotOfVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:571,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:576,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:579,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 525
    functionDepth: 1
    functionLinenumber: 525
    functionLinenumberEnd: 581
    functionName: brpc::VersionedRefWithId<T>::Dereference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - VersionOfVRef
    - VersionOfVRefId
    - compare_exchange_strong
    - MakeVRef
    - NRefOfVRef
    - __builtin_expect
    - static_cast<T*>
    - return_resource
    - SlotOfVRefId<T>
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::Dereference()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:585,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:586,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:587,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:590,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:590,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:590,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:592,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:595,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:597,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:598,1
    - Dst: brpc::VersionedRefWithId<T>::description
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:598,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:603,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:604,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:608,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:610,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:610,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - at_least_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 584
    functionDepth: 2
    functionLinenumber: 584
    functionLinenumberEnd: 614
    functionName: brpc::VersionedRefWithId<T>::Revive
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    - VersionOfVRefId
    - VersionOfVRef
    - MakeVRef
    - NRefOfVRef
    - CHECK_EQ
    - store
    - static_cast<T*>
    - compare_exchange_weak
    - id
    - LOG
    - brpc::VersionedRefWithId<T>::description
    - WRAPPER_CALL
    linkageType: ''
    returnType: void
    signature: void VersionedRefWithId<T>::Revive(int32_t at_least_nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: const_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:622,1
    - Dst: static_cast<const T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:622,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 625
    functionName: brpc::VersionedRefWithId<T>::description
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - const_cast<T*>
    - std::string::reserve
    - butil::class_name<T>
    - std::string::append
    - static_cast<const T*>
    - butil::string_appendf
    - id
    - WRAPPER_CALL
    linkageType: ''
    returnType: std::string
    signature: std::string VersionedRefWithId<T>::description() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~DataFactory()
    functionSourceFile: /src/brpc/src/brpc/data_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DataFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::DataFactory::ResetData
    functionSourceFile: /src/brpc/src/brpc/data_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ResetData(void*) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~DataFactory()
    functionSourceFile: /src/brpc/src/brpc/data_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DataFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::DataFactory::ResetData
    functionSourceFile: /src/brpc/src/brpc/data_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ResetData(void*) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::Serializer::Serializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Serializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:39,1
    - Dst: brpc::Serializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::Serializer::Serializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    - brpc::Serializer::SharedCtor
    linkageType: ''
    returnType: void
    signature: void Serializer(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/compress.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: ~Serializer() override
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void ~Serializer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Serializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:49,1
    - Dst: brpc::Serializer::MergeFrom
      Src: /src/brpc/src/brpc/compress.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Serializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: brpc::Serializer::Serializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - brpc::Serializer::SharedCtor
    - brpc::Serializer::MergeFrom
    linkageType: ''
    returnType: void
    signature: void Serializer(const Serializer& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/compress.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Serializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: '& operator=(const Serializer& from)'
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: Serializer
    signature: Serializer & operator=(const Serializer& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - other
    argTypes:
    - Serializer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: brpc::Serializer::Swap
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Swap(Serializer* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/compress.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Serializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    functionName: brpc::Serializer::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 1
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MergeFrom(const Serializer& from) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: brpc::Serializer::Clear
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Clear() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::Serializer::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/compress.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::Serializer::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.h:79,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/compress.h:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - output
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 83
    functionName: brpc::Serializer::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - LOG
    - _callback
    linkageType: ''
    returnType: bool
    signature: bool SerializeTo(google::protobuf::io::ZeroCopyOutputStream* output)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: brpc::Serializer::SetCallback
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void SetCallback(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::Serializer::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: brpc::Serializer::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::Deserializer::Deserializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Deserializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:105,1
    - Dst: brpc::Deserializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 107
    functionName: brpc::Deserializer::Deserializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    - brpc::Deserializer::SharedCtor
    linkageType: ''
    returnType: void
    signature: void Deserializer(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/compress.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: ~Deserializer() override
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void ~Deserializer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Deserializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:115,1
    - Dst: brpc::Deserializer::MergeFrom
      Src: /src/brpc/src/brpc/compress.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Deserializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: brpc::Deserializer::Deserializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - brpc::Deserializer::MergeFrom
    - brpc::Deserializer::SharedCtor
    linkageType: ''
    returnType: void
    signature: void Deserializer(const Deserializer& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/compress.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Deserializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: '& operator=(const Deserializer& from)'
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: Deserializer
    signature: Deserializer & operator=(const Deserializer& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/compress.h:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - other
    argTypes:
    - Deserializer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: brpc::Deserializer::Swap
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void Swap(Deserializer* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/compress.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Deserializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: brpc::Deserializer::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 1
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MergeFrom(const Deserializer& from) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: brpc::Deserializer::Clear
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Clear() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: brpc::Deserializer::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/compress.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: brpc::Deserializer::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.h:145,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/compress.h:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - intput
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: brpc::Deserializer::DeserializeFrom
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - LOG
    - _callback
    linkageType: ''
    returnType: bool
    signature: bool DeserializeFrom(google::protobuf::io::ZeroCopyInputStream* intput)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: brpc::Deserializer::SetCallback
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void SetCallback(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: brpc::Deserializer::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: brpc::Deserializer::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::Serializer::Serializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Serializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:39,1
    - Dst: brpc::Serializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::Serializer::Serializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    - brpc::Serializer::SharedCtor
    linkageType: ''
    returnType: void
    signature: void Serializer(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/compress.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: ~Serializer() override
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void ~Serializer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Serializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:49,1
    - Dst: brpc::Serializer::MergeFrom
      Src: /src/brpc/src/brpc/compress.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Serializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: brpc::Serializer::Serializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - brpc::Serializer::SharedCtor
    - brpc::Serializer::MergeFrom
    linkageType: ''
    returnType: void
    signature: void Serializer(const Serializer& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/compress.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Serializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: '& operator=(const Serializer& from)'
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: Serializer
    signature: Serializer & operator=(const Serializer& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - other
    argTypes:
    - Serializer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: brpc::Serializer::Swap
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Swap(Serializer* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/compress.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Serializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    functionName: brpc::Serializer::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 2
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MergeFrom(const Serializer& from) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: brpc::Serializer::Clear
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Clear() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::Serializer::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/compress.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: brpc::Serializer::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.h:79,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/compress.h:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - output
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 83
    functionName: brpc::Serializer::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - LOG
    - _callback
    linkageType: ''
    returnType: bool
    signature: bool SerializeTo(google::protobuf::io::ZeroCopyOutputStream* output)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: brpc::Serializer::SetCallback
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void SetCallback(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::Serializer::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: brpc::Serializer::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::Deserializer::Deserializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Deserializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:105,1
    - Dst: brpc::Deserializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 107
    functionName: brpc::Deserializer::Deserializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    - brpc::Deserializer::SharedCtor
    linkageType: ''
    returnType: void
    signature: void Deserializer(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/compress.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: ~Deserializer() override
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void ~Deserializer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Deserializer::SharedCtor
      Src: /src/brpc/src/brpc/compress.h:115,1
    - Dst: brpc::Deserializer::MergeFrom
      Src: /src/brpc/src/brpc/compress.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Deserializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: brpc::Deserializer::Deserializer
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - brpc::Deserializer::MergeFrom
    - brpc::Deserializer::SharedCtor
    linkageType: ''
    returnType: void
    signature: void Deserializer(const Deserializer& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/compress.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Deserializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: '& operator=(const Deserializer& from)'
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: Deserializer
    signature: Deserializer & operator=(const Deserializer& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/compress.h:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - other
    argTypes:
    - Deserializer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: brpc::Deserializer::Swap
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void Swap(Deserializer* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/compress.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - Deserializer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: brpc::Deserializer::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 2
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void MergeFrom(const Deserializer& from) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: brpc::Deserializer::Clear
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Clear() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: brpc::Deserializer::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/compress.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: brpc::Deserializer::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.h:145,1
    - Dst: _callback
      Src: /src/brpc/src/brpc/compress.h:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - intput
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: brpc::Deserializer::DeserializeFrom
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - LOG
    - _callback
    linkageType: ''
    returnType: bool
    signature: bool DeserializeFrom(google::protobuf::io::ZeroCopyInputStream* intput)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/compress.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - callback
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: brpc::Deserializer::SetCallback
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void SetCallback(Callback callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: brpc::Deserializer::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: brpc::Deserializer::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/compress.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::SharedCtor
      Src: /src/brpc/src/brpc/esp_message.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::EspMessage::EspMessage
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 6
    functionsReached:
    - brpc::EspMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void EspMessage::EspMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/esp_message.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: brpc::EspMessage::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 1
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void EspMessage::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/esp_message.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: EspMessage::~EspMessage()
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void EspMessage::~EspMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: brpc::EspMessage::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EspMessage::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/esp_message.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: brpc::EspMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void EspMessage::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/esp_message.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::EspMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t EspMessage::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/esp_message.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - EspMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: brpc::EspMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void EspMessage::MergeFrom(const EspMessage& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/esp_message.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - EspMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 63
    functionName: brpc::EspMessage::Swap
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void EspMessage::Swap(EspMessage* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/esp_message.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: brpc::EspMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata EspMessage::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::EspMessage::SharedCtor
      Src: /src/brpc/src/brpc/esp_message.cpp:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: brpc::EspMessage::EspMessage
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 6
    functionsReached:
    - brpc::EspMessage::SharedCtor
    linkageType: ''
    returnType: void
    signature: void EspMessage::EspMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/esp_message.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: brpc::EspMessage::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 2
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void EspMessage::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/esp_message.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: EspMessage::~EspMessage()
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void EspMessage::~EspMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: brpc::EspMessage::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EspMessage::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/esp_message.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: brpc::EspMessage::Clear
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void EspMessage::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/esp_message.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: brpc::EspMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t EspMessage::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/esp_message.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - EspMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: brpc::EspMessage::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: void EspMessage::MergeFrom(const EspMessage& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/esp_message.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - EspMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 63
    functionName: brpc::EspMessage::Swap
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void EspMessage::Swap(EspMessage* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/esp_message.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 70
    functionName: brpc::EspMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/esp_message.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata EspMessage::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 136
    functionName: brpc::GlobalExtensions
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GlobalExtensions()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:172,1
    - Dst: read
      Src: /src/brpc/src/brpc/global.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:178,1
    - Dst: berror
      Src: /src/brpc/src/brpc/global.cpp:179,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/global.cpp:182,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:184,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/global.cpp:186,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:189,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 193
    functionName: brpc::ReadPortOfDummyServer
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - isspace
    - strtol
    - read
    - berror
    - LOG
    linkageType: ''
    returnType: long
    signature: long ReadPortOfDummyServer(const char* filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::block_count
      Src: /src/brpc/src/brpc/global.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: brpc::GetIOBufBlockCount
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::block_count
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufBlockCount(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::block_count_hit_tls_threshold
      Src: /src/brpc/src/brpc/global.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 201
    functionName: brpc::GetIOBufBlockCountHitTLSThreshold
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::block_count_hit_tls_threshold
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufBlockCountHitTLSThreshold(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::new_bigview_count
      Src: /src/brpc/src/brpc/global.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: brpc::GetIOBufNewBigViewCount
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::new_bigview_count
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufNewBigViewCount(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::block_memory
      Src: /src/brpc/src/brpc/global.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 1
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: brpc::GetIOBufBlockMemory
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::block_memory
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufBlockMemory(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/global.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: brpc::GetRunningServerCount
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int GetRunningServerCount(void*)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/global.cpp:232,1
    - Dst: butil::FileWatcher::init_from_not_exist
      Src: /src/brpc/src/brpc/global.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:234,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/global.cpp:239,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/global.cpp:245,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/global.cpp:247,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/global.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:255,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/global.cpp:258,1
    - Dst: brpc::TrackMe
      Src: /src/brpc/src/brpc/global.cpp:260,1
    - Dst: IsDummyServerRunning
      Src: /src/brpc/src/brpc/global.cpp:262,1
    - Dst: load
      Src: /src/brpc/src/brpc/global.cpp:263,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/global.cpp:264,1
    - Dst: brpc::ReadPortOfDummyServer
      Src: /src/brpc/src/brpc/global.cpp:265,1
    - Dst: StartDummyServerAt
      Src: /src/brpc/src/brpc/global.cpp:267,1
    - Dst: brpc::SocketMapList
      Src: /src/brpc/src/brpc/global.cpp:271,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/global.cpp:272,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:273,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/global.cpp:275,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/global.cpp:276,1
    - Dst: MallocExtension_ReleaseFreeMemory
      Src: /src/brpc/src/brpc/global.cpp:292,1
    - Dst: malloc_trim
      Src: /src/brpc/src/brpc/global.cpp:296,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 216
    functionDepth: 4
    functionLinenumber: 216
    functionLinenumberEnd: 302
    functionName: brpc::GlobalUpdate
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - SocketUniquePtr::UpdateStatsEverySecond
    - brpc::SocketMapList
    - brpc::SetTrackMeAddress
    - malloc_trim
    - IsDummyServerRunning
    - butil::FileWatcher::FileWatcher
    - brpc::ReadPortOfDummyServer
    - PLOG_IF
    - LOG
    - butil::gettimeofday_us
    - butil::cpuwide_time_ms
    - MallocExtension_ReleaseFreeMemory
    - butil::FileWatcher::init_from_not_exist
    - load
    - butil::FileWatcher::check_and_consume
    - StartDummyServerAt
    - brpc::TrackMe
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * GlobalUpdate(void*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:310,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:313,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:316,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:319,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:322,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 4
    argNames:
    - level
    - filename
    - line
    - ' message'
    argTypes:
    - google::protobuf::LogLevel
    - char*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 323
    functionName: brpc::BaiduStreamingLogHandler
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - LOG
    linkageType: ''
    returnType: void
    signature: "void BaiduStreamingLogHandler(google::protobuf::LogLevel level,\n
      \                                    const char* filename, int line,\n                                     const
      std::string& message)"
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: sigaction
      Src: /src/brpc/src/brpc/global.cpp:335,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:337,1
    - Dst: signal
      Src: /src/brpc/src/brpc/global.cpp:337,1
    - Dst: SetLogHandler
      Src: /src/brpc/src/brpc/global.cpp:342,1
    - Dst: bthread_set_create_span_func
      Src: /src/brpc/src/brpc/global.cpp:346,1
    - Dst: SSL_library_init
      Src: /src/brpc/src/brpc/global.cpp:353,1
    - Dst: SSL_load_error_strings
      Src: /src/brpc/src/brpc/global.cpp:355,1
    - Dst: brpc::SSLThreadInit
      Src: /src/brpc/src/brpc/global.cpp:356,1
    - Dst: brpc::SSLDHInit
      Src: /src/brpc/src/brpc/global.cpp:356,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:357,1
    - Dst: InitCommonStrings
      Src: /src/brpc/src/brpc/global.cpp:361,1
    - Dst: GlobalExtensions::GlobalExtensions
      Src: /src/brpc/src/brpc/global.cpp:364,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:366,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:370,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:372,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:373,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:374,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:375,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:376,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:377,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:378,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:379,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:380,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:381,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:384,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:385,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:386,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:387,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:388,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:389,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:390,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:391,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:392,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:396,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:397,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:400,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:401,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:404,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:405,1
    - Dst: brpc::RegisterChecksumHandler
      Src: /src/brpc/src/brpc/global.cpp:411,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:412,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:421,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:422,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:431,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:432,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:442,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:443,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:453,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:454,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:462,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:463,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:472,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:473,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:486,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:487,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:495,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:496,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:507,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:508,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:517,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:518,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:527,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:528,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:536,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:537,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:548,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:549,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:560,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:561,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:569,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:570,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:580,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:581,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:591,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:592,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:601,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:602,1
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/global.cpp:606,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:607,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/src/brpc/global.cpp:617,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:618,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:624,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:625,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:626,1
    - Dst: brpc::InitUserCodeBackupPoolOnceOrDie
      Src: /src/brpc/src/brpc/global.cpp:633,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:638,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/global.cpp:638,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 122
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 326
    functionDepth: 4
    functionLinenumber: 326
    functionLinenumberEnd: 640
    functionName: brpc::GlobalInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - brpc::RegisterProtocol
    - bthread_start_background
    - SSL_library_init
    - brpc::RegisterChecksumHandler
    - brpc::RegisterCompressHandler
    - brpc::NamingServiceExtension
    - GlobalExtensions::GlobalExtensions
    - brpc::SSLThreadInit
    - brpc::SSLDHInit
    - SetLogHandler
    - bthread_set_create_span_func
    - brpc::ConcurrencyLimiterExtension
    - signal
    - InitCommonStrings
    - brpc::LoadBalancerExtension
    - CHECK
    - brpc::get_or_new_client_side_messenger
    - sigaction
    - exit
    - brpc::ListProtocols
    - SSL_load_error_strings
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void GlobalInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/global.cpp:643,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:645,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:646,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 642
    functionDepth: 1
    functionLinenumber: 642
    functionLinenumberEnd: 648
    functionName: brpc::GlobalInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 7
    functionsReached:
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 136
    functionName: brpc::GlobalExtensions
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GlobalExtensions()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:172,1
    - Dst: read
      Src: /src/brpc/src/brpc/global.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:178,1
    - Dst: berror
      Src: /src/brpc/src/brpc/global.cpp:179,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/global.cpp:182,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:184,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/global.cpp:186,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:189,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 193
    functionName: brpc::ReadPortOfDummyServer
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 1
    functionsReached:
    - std::min
    - isspace
    - strtol
    - read
    - berror
    - LOG
    linkageType: ''
    returnType: long
    signature: long ReadPortOfDummyServer(const char* filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::block_count
      Src: /src/brpc/src/brpc/global.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: brpc::GetIOBufBlockCount
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::block_count
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufBlockCount(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::block_count_hit_tls_threshold
      Src: /src/brpc/src/brpc/global.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 201
    functionName: brpc::GetIOBufBlockCountHitTLSThreshold
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::block_count_hit_tls_threshold
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufBlockCountHitTLSThreshold(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::new_bigview_count
      Src: /src/brpc/src/brpc/global.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: brpc::GetIOBufNewBigViewCount
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::new_bigview_count
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufNewBigViewCount(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::block_memory
      Src: /src/brpc/src/brpc/global.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 1
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: brpc::GetIOBufBlockMemory
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::block_memory
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetIOBufBlockMemory(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/global.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: brpc::GetRunningServerCount
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int GetRunningServerCount(void*)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/global.cpp:232,1
    - Dst: butil::FileWatcher::init_from_not_exist
      Src: /src/brpc/src/brpc/global.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:234,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/global.cpp:239,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/global.cpp:245,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/global.cpp:247,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/global.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:255,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/global.cpp:258,1
    - Dst: brpc::TrackMe
      Src: /src/brpc/src/brpc/global.cpp:260,1
    - Dst: IsDummyServerRunning
      Src: /src/brpc/src/brpc/global.cpp:262,1
    - Dst: load
      Src: /src/brpc/src/brpc/global.cpp:263,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/global.cpp:264,1
    - Dst: brpc::ReadPortOfDummyServer
      Src: /src/brpc/src/brpc/global.cpp:265,1
    - Dst: StartDummyServerAt
      Src: /src/brpc/src/brpc/global.cpp:267,1
    - Dst: brpc::SocketMapList
      Src: /src/brpc/src/brpc/global.cpp:271,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/global.cpp:272,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:273,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/global.cpp:275,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/global.cpp:276,1
    - Dst: MallocExtension_ReleaseFreeMemory
      Src: /src/brpc/src/brpc/global.cpp:292,1
    - Dst: malloc_trim
      Src: /src/brpc/src/brpc/global.cpp:296,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 216
    functionDepth: 4
    functionLinenumber: 216
    functionLinenumberEnd: 302
    functionName: brpc::GlobalUpdate
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - SocketUniquePtr::UpdateStatsEverySecond
    - brpc::SocketMapList
    - brpc::SetTrackMeAddress
    - malloc_trim
    - IsDummyServerRunning
    - butil::FileWatcher::FileWatcher
    - brpc::ReadPortOfDummyServer
    - PLOG_IF
    - LOG
    - butil::gettimeofday_us
    - butil::cpuwide_time_ms
    - MallocExtension_ReleaseFreeMemory
    - butil::FileWatcher::init_from_not_exist
    - load
    - butil::FileWatcher::check_and_consume
    - StartDummyServerAt
    - brpc::TrackMe
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void * GlobalUpdate(void*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:310,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:313,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:316,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:319,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:322,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 4
    argNames:
    - level
    - filename
    - line
    - ' message'
    argTypes:
    - google::protobuf::LogLevel
    - char*
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 323
    functionName: brpc::BaiduStreamingLogHandler
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - LOG
    linkageType: ''
    returnType: void
    signature: "void BaiduStreamingLogHandler(google::protobuf::LogLevel level,\n
      \                                    const char* filename, int line,\n                                     const
      std::string& message)"
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: sigaction
      Src: /src/brpc/src/brpc/global.cpp:335,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:337,1
    - Dst: signal
      Src: /src/brpc/src/brpc/global.cpp:337,1
    - Dst: SetLogHandler
      Src: /src/brpc/src/brpc/global.cpp:342,1
    - Dst: bthread_set_create_span_func
      Src: /src/brpc/src/brpc/global.cpp:346,1
    - Dst: SSL_library_init
      Src: /src/brpc/src/brpc/global.cpp:353,1
    - Dst: SSL_load_error_strings
      Src: /src/brpc/src/brpc/global.cpp:355,1
    - Dst: brpc::SSLThreadInit
      Src: /src/brpc/src/brpc/global.cpp:356,1
    - Dst: brpc::SSLDHInit
      Src: /src/brpc/src/brpc/global.cpp:356,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:357,1
    - Dst: InitCommonStrings
      Src: /src/brpc/src/brpc/global.cpp:361,1
    - Dst: GlobalExtensions::GlobalExtensions
      Src: /src/brpc/src/brpc/global.cpp:364,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:366,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:370,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:372,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:373,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:374,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:375,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:376,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:377,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:378,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:379,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:380,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:381,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:384,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:385,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:386,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:387,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:388,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:389,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:390,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:391,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:392,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:396,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:397,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:400,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:401,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:404,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:405,1
    - Dst: brpc::RegisterChecksumHandler
      Src: /src/brpc/src/brpc/global.cpp:411,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:412,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:421,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:422,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:431,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:432,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:442,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:443,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:453,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:454,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:462,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:463,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:472,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:473,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:486,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:487,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:495,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:496,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:507,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:508,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:517,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:518,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:527,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:528,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:536,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:537,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:548,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:549,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:560,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:561,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:569,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:570,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:580,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:581,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:591,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:592,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:601,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:602,1
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/global.cpp:606,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:607,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/src/brpc/global.cpp:617,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:618,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:624,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:625,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:626,1
    - Dst: brpc::InitUserCodeBackupPoolOnceOrDie
      Src: /src/brpc/src/brpc/global.cpp:633,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:638,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/global.cpp:638,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 122
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 326
    functionDepth: 4
    functionLinenumber: 326
    functionLinenumberEnd: 640
    functionName: brpc::GlobalInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - brpc::RegisterProtocol
    - bthread_start_background
    - SSL_library_init
    - brpc::RegisterChecksumHandler
    - brpc::RegisterCompressHandler
    - brpc::NamingServiceExtension
    - GlobalExtensions::GlobalExtensions
    - brpc::SSLThreadInit
    - brpc::SSLDHInit
    - SetLogHandler
    - bthread_set_create_span_func
    - brpc::ConcurrencyLimiterExtension
    - signal
    - InitCommonStrings
    - brpc::LoadBalancerExtension
    - CHECK
    - brpc::get_or_new_client_side_messenger
    - sigaction
    - exit
    - brpc::ListProtocols
    - SSL_load_error_strings
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void GlobalInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/global.cpp:643,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:645,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:646,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 642
    functionDepth: 1
    functionLinenumber: 642
    functionLinenumberEnd: 648
    functionName: brpc::GlobalInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 7
    functionsReached:
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: brpc::RtmpBvars
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpBvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<RtmpBvars>
      Src: /src/brpc/src/brpc/rtmp.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: brpc::get_rtmp_bvars
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<RtmpBvars>
    linkageType: ''
    returnType: RtmpBvars
    signature: RtmpBvars * get_rtmp_bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: brpc::FlvWriter::FlvWriter
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvWriter::FlvWriter(butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - ' options'
    argTypes:
    - butil::IOBuf*
    - FlvWriterOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: brpc::FlvWriter::FlvWriter
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvWriter::FlvWriter(butil::IOBuf* buf, const FlvWriterOptions&
      options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/rtmp.cpp:75,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rtmp.cpp:77,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:79,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:83,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:83,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:84,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:86,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:90,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:93,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:93,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:94,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 96
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::WriteBigEndian3Bytes
    - size
    - static_cast<char>
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpVideoMessage& msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/rtmp.cpp:103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rtmp.cpp:105,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:107,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:111,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:112,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:114,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:120,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:121,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:124,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:125,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 127
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::WriteBigEndian3Bytes
    - size
    - static_cast<char>
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpAudioMessage& msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/rtmp.cpp:134,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rtmp.cpp:136,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:138,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:142,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:142,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:143,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:145,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:146,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:147,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:150,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:151,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 2
    argNames:
    - ' req_buf'
    - timestamp
    argTypes:
    - butil::IOBuf
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 153
    functionName: brpc::FlvWriter::WriteScriptData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::WriteBigEndian3Bytes
    - size
    - static_cast<char>
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::WriteScriptData(const butil::IOBuf& req_buf,
      uint32_t timestamp)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:156,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:160,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:161,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:162,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:163,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:164,1
    - Dst: brpc::FlvWriter::WriteScriptData
      Src: /src/brpc/src/brpc/rtmp.cpp:167,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' cuepoint'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 168
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::FlvWriter::WriteScriptData
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpCuePoint& cuepoint)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:171,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:175,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:176,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:177,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:178,1
    - Dst: brpc::FlvWriter::WriteScriptData
      Src: /src/brpc/src/brpc/rtmp.cpp:181,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' metadata'
    argTypes:
    - RtmpMetaData
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 182
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::FlvWriter::WriteScriptData
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpMetaData& metadata)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: brpc::FlvReader::FlvReader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvReader::FlvReader(butil::IOBuf* buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:193,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:195,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rtmp.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:199,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:200,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:202,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:205,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 188
    functionDepth: 2
    functionLinenumber: 188
    functionLinenumberEnd: 206
    functionName: brpc::FlvReader::ReadHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - pop_front
    - fetch
    - LOG
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::ReadHeader()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FlvReader::ReadHeader
      Src: /src/brpc/src/brpc/rtmp.cpp:209,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:210,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:213,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:215,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:220,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:225,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - type_out
    argTypes:
    - FlvTagType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 208
    functionDepth: 3
    functionLinenumber: 208
    functionLinenumberEnd: 226
    functionName: brpc::FlvReader::PeekMessageType
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    - brpc::FlvReader::ReadHeader
    - butil::Status::OK
    - butil::Status::ok
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::PeekMessageType(FlvTagType* type_out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:230,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:232,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:235,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:237,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:238,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:240,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:241,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:243,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:245,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:245,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:250,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:251,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:253,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 254
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - cut1
    - brpc::policy::ReadBigEndian3Bytes
    - pop_front
    - CHECK
    - fetch
    - cutn
    - length
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpVideoMessage* msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:258,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:260,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:263,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:265,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:266,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:268,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:269,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:271,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:273,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:273,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:279,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:280,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:282,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 256
    functionDepth: 2
    functionLinenumber: 256
    functionLinenumberEnd: 283
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - cut1
    - brpc::policy::ReadBigEndian3Bytes
    - pop_front
    - CHECK
    - fetch
    - cutn
    - length
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpAudioMessage* msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:287,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:289,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:292,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:294,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:295,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:297,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:298,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:300,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:301,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:302,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:303,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:307,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:308,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:310,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:311,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:315,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - msg
    - name
    argTypes:
    - RtmpMetaData*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 285
    functionDepth: 2
    functionLinenumber: 285
    functionLinenumberEnd: 316
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - brpc::policy::ReadBigEndian3Bytes
    - pop_front
    - fetch
    - cutn
    - ReadAMFString
    - length
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpMetaData* msg, std::string* name)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvVideoFrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 327
    functionName: brpc::FlvVideoFrameType2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvVideoFrameType2Str(FlvVideoFrameType t)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 1
    argNames:
    - id
    argTypes:
    - FlvVideoCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 342
    functionName: brpc::FlvVideoCodec2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvVideoCodec2Str(FlvVideoCodec id)
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - codec
    argTypes:
    - FlvAudioCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 371
    functionName: brpc::FlvAudioCodec2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvAudioCodec2Str(FlvAudioCodec codec)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - rate
    argTypes:
    - FlvSoundRate
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 381
    functionName: brpc::FlvSoundRate2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvSoundRate2Str(FlvSoundRate rate)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - size
    argTypes:
    - FlvSoundBits
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 389
    functionName: brpc::FlvSoundBits2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvSoundBits2Str(FlvSoundBits size)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvSoundType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 397
    functionName: brpc::FlvSoundType2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvSoundType2Str(FlvSoundType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:401,1
    - Dst: FlvSoundRate2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:402,1
    - Dst: FlvSoundBits2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:403,1
    - Dst: FlvSoundType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:404,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 406
    functionName: '& operator<<(std::ostream& os, const RtmpAudioMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvSoundType2Str
    - FlvSoundBits2Str
    - FlvSoundRate2Str
    - FlvAudioCodec2Str
    - butil::ToPrintable::ToPrintable
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RtmpAudioMessage&
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FlvVideoFrameType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:410,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:411,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 408
    functionDepth: 1
    functionLinenumber: 408
    functionLinenumberEnd: 413
    functionName: '& operator<<(std::ostream& os, const RtmpVideoMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvVideoCodec2Str
    - butil::ToPrintable::ToPrintable
    - FlvVideoFrameType2Str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RtmpVideoMessage&
      msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:417,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:418,1
    - Dst: data::fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:420,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:422,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:425,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:432,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:432,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:433,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 415
    functionDepth: 2
    functionLinenumber: 415
    functionLinenumberEnd: 434
    functionName: brpc::RtmpAACMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvAudioCodec2Str
    - data::fetch1
    - data::size
    - butil::Status::OK
    - data::append_to
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpAACMessage::Create(const RtmpAudioMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 440
    functionName: brpc::AudioSpecificConfig::AudioSpecificConfig
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AudioSpecificConfig::AudioSpecificConfig()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:443,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:444,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:445,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:448,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:448,1
    - Dst: brpc::AudioSpecificConfig::Create
      Src: /src/brpc/src/brpc/rtmp.cpp:449,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:449,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 442
    functionDepth: 2
    functionLinenumber: 442
    functionLinenumberEnd: 450
    functionName: brpc::AudioSpecificConfig::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - copy_to
    - arraysize
    - brpc::AudioSpecificConfig::Create
    - size
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AudioSpecificConfig::Create(const butil::IOBuf& buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:454,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:462,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:464,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 452
    functionDepth: 2
    functionLinenumber: 452
    functionLinenumberEnd: 465
    functionName: brpc::AudioSpecificConfig::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AudioSpecificConfig::Create(const void* data, size_t
      len)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:471,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 467
    functionDepth: 0
    functionLinenumber: 467
    functionLinenumberEnd: 476
    functionName: brpc::RtmpAudioMessage::IsAACSequenceHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool RtmpAudioMessage::IsAACSequenceHeader() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:480,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:481,1
    - Dst: data::fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:484,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:486,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:489,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:494,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:495,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:495,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:496,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 497
    functionName: brpc::RtmpAVCMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvVideoCodec2Str
    - data::fetch
    - brpc::policy::ReadBigEndian3Bytes
    - data::size
    - butil::Status::OK
    - data::append_to
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpAVCMessage::Create(const RtmpVideoMessage& msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:503,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 508
    functionName: brpc::RtmpVideoMessage::IsAVCSequenceHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool RtmpVideoMessage::IsAVCSequenceHeader() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:514,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 519
    functionName: brpc::RtmpVideoMessage::IsHEVCSequenceHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool RtmpVideoMessage::IsHEVCSequenceHeader() const
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 1
    argNames:
    - p
    argTypes:
    - AVCProfile
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 537
    functionName: brpc::AVCProfile2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * AVCProfile2Str(AVCProfile p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 545
    functionName: brpc::AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AVCProfile2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:549,1
    - Dst: sps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:555,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:559,1
    - Dst: pps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:562,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:566,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - AVCDecoderConfigurationRecord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 570
    functionName: "& operator<<(std::ostream& os,\n                         const
      AVCDecoderConfigurationRecord& r)"
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - size
    - pps_list::size
    - AVCProfile2Str
    - sps_list::size
    linkageType: ''
    returnType: std::ostream
    signature: "std::ostream & operator<<(std::ostream& os,\n                         const
      AVCDecoderConfigurationRecord& r)"
  - BBCount: 273
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:582,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:583,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:584,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:598,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:603,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:604,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:605,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:607,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:608,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:612,1
    - Dst: brpc::AVCDecoderConfigurationRecord::ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:621,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:625,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:626,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:629,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:632,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:635,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:650,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:656,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:666,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:674,1
    - Dst: butil::StringPiece::copy
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:689,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:695,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:699,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:703,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:708,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:718,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:724,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:728,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:729,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:732,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:733,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:737,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:740,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:741,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:747,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:761,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:762,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:765,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:766,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:770,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:771,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:775,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:776,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:779,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:780,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:784,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:797,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:801,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:804,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:805,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:808,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:809,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:890,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:891,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:894,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:895,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:899,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:900,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:902,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:905,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:908,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:922,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:926,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:927,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:931,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:941,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:944,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:945,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:952,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:954,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:955,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:970,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:971,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:974,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:999,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1002,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1044,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1045,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1048,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1050,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1053,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1061,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1070,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1080,1
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1093,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1094,1
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1104,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1105,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1106,1
    - Dst: RtmpSocketCreator::RtmpSocketCreator
      Src: /src/brpc/src/brpc/rtmp.cpp:1112,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1114,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1122,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1129,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1133,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1140,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1144,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1151,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1156,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1177,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1188,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1191,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1194,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1202,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1205,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1208,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1216,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1219,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1222,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1237,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:1251,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1270,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1274,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1276,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1281,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1292,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1296,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1300,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1301,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1302,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1304,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1308,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1317,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1318,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1324,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1338,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1346,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1348,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1359,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1369,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1377,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1379,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1390,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1392,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1396,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1406,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1410,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1411,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1413,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1414,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1420,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1428,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1429,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1430,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1439,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1444,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1450,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1452,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1461,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1463,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1522,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1527,1
    - Dst: OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1533,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1542,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1543,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1548,1
    - Dst: OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1549,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1550,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    - Dst: OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1556,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1557,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    - Dst: OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1563,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1564,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    - Dst: OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1570,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1571,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    - Dst: OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1577,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1578,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    - Dst: OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1584,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1585,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1594,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1603,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1621,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1626,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:1632,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1638,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1639,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1640,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1645,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1646,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1647,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1653,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1654,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1673,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1674,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1678,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1683,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1684,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1698,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1703,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1705,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1709,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1711,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1719,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1732,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1750,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1751,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1758,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1769,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1771,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1786,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1791,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1795,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1799,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1802,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1804,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1808,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1817,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1818,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1821,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1822,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1825,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1838,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1842,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1848,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1851,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1853,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1857,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1858,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1859,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1862,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1876,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1877,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1880,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1901,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1908,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1910,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1912,1
    - Dst: stream_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:1926,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1932,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1936,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1940,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1941,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1942,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1943,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1945,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1946,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1949,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1950,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1963,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1965,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1981,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1982,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1983,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1984,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1986,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1991,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2019,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2023,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2024,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2025,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2026,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2030,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2034,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2041,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2044,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2048,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2055,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2059,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2070,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2075,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:2101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2103,1
    - Dst: butil::intrusive_ptr::options
      Src: /src/brpc/src/brpc/rtmp.cpp:2110,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2112,1
    - Dst: butil::intrusive_ptr::Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2117,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2118,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2121,1
    - Dst: butil::intrusive_ptr::Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2129,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2130,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2144,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2151,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2152,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2153,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2154,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2157,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2158,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2159,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2160,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2177,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2179,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2182,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2183,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2186,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2196,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2197,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2201,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2227,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2228,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2234,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2241,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2242,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2247,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2255,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2256,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2258,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2260,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2263,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2266,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2276,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2283,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2284,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    - Dst: OnPlayable
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    - Dst: CallOnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:2304,1
    - Dst: CallOnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    - Dst: CallOnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2312,1
    - Dst: CallOnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2316,1
    - Dst: CallOnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2320,1
    - Dst: CallOnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2324,1
    - Dst: OnSubStreamStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2328,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2335,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2337,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2340,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2346,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2354,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2357,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2381,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2383,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2387,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2388,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2392,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2397,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: butil::intrusive_ptr::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2403,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2418,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2424,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2428,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2432,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2435,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2443,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2448,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2454,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2459,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2474,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2475,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2478,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2482,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2483,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2486,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2491,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2492,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2499,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2500,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2503,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2508,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2511,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2516,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2519,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2524,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2527,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2533,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2537,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2547,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2550,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2555,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2557,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2560,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2573,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2577,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2581,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2588,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2591,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2597,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2605,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:2632,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2649,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2650,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2651,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2657,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2659,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2665,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2667,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2668,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2676,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2681,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2682,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2691,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2699,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2700,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2701,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2707,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2714,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2716,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2717,1
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2727,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2733,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2739,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2740,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2747,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2757,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2760,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2767,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2770,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2775,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2777,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2785,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2791,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2797,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2800,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2804,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2805,1
    - Dst: find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2807,1
    - Dst: remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2814,1
    - Dst: butil::StringPiece::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2825,1
    - Dst: RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2827,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2828,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2831,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2834,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2842,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2844,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2845,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2847,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2852,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2865,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2867,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2868,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2871,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2872,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2875,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    CyclomaticComplexity: 304
    EdgeCount: 304
    ICount: 1457
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2885
      start: 572
    functionDepth: 5
    functionLinenumber: 572
    functionLinenumberEnd: 2885
    functionName: brpc::AVCDecoderConfigurationRecord::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - OnSharedObjectMessage
    - OnClientStreamCreated*::cntl::set_connection_type
    - get_client_side_messenger
    - butil::intrusive_ptr<RtmpClientStream>
    - get_rtmp_bvars
    - stream_id
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - SocketMessagePtr::body::append
    - SocketUniquePtr::ShareStats
    - butil::intrusive_ptr::Play
    - butil::StringPiece::starts_with
    - swap
    - remote_side
    - butil::StringPiece::substr
    - std::string
    - LaunchSubStream
    - brpc::policy::ReadBigEndian2Bytes
    - AcquireStreamToSend
    - butil::intrusive_ptr::options
    - butil::intrusive_ptr::SendMetaData
    - store
    - RtmpPublishType2Str
    - SocketMapKey
    - avc_nalu_read_uev
    - bthread_id_error
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - brpc::policy::is_video_codec_valid
    - LOG_IF
    - BuiltinServiceTest::TestStatus
    - play_name::empty
    - RemoveRtmpPrefix
    - OnStop
    - copy_to
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Publish
    - OnClientStreamCreated::OnClientStreamCreated
    - Join
    - butil::IOBuf::size
    - find_avc_annexb_nalu_start_code
    - Recreate
    - CHECK
    - std::make_shared<RtmpConnect>
    - next_as_ibmf
    - ErrorText
    - butil::Status::ok
    - WriteAMFUint32
    - bthread_timer_del
    - butil::intrusive_ptr::Recreate
    - OnPlayable
    - butil::intrusive_ptr::has_data_ever
    - butil::intrusive_ptr::SendAVCMessage
    - load
    - stream_name::empty
    - c_str
    - empty
    - local_side
    - reserve
    - SetFailed
    - policy::RtmpContext*::RemoveTransaction
    - exchange
    - has_data_ever
    - avc_nalu_read_bit
    - AMFOutputStream::good
    - butil::intrusive_ptr::OnStopInternal
    - OnFirstMessage
    - NewSubStream
    - RtmpInfo::set_code
    - SplitVHostFromApp
    - brpc::policy::is_video_frame_type_valid
    - CommonInit
    - brpc::policy::WriteWithoutOvercrowded
    - static_cast<policy::RtmpContext*>
    - SocketMessagePtr::body::push_back
    - butil::endpoint2str
    - butil::Status::OK
    - ShortDebugString
    - OnCuePoint
    - BeginProcessingMessage
    - reset
    - OnClientStreamCreated*::stream::reset
    - policy::RtmpContext*::SendConnectRequest
    - CHECK_NE
    - ErrorCode
    - log_id
    - CallOnSharedObjectMessage
    - OnMetaData
    - substr
    - level
    - PLOG
    - OnClientStreamCreated*::cntl::set_stream_creator
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - StartCancel
    - stream_name
    - next_as_annexb
    - SendControlMessage
    - EndProcessingMessage
    - butil::intrusive_ptr::SendAACMessage
    - parsing_context
    - SocketMessagePtr::size
    - berror
    - publish_name::empty
    - WriteAMFBool
    - SocketMessagePtr::next::reset
    - SocketUniquePtr::release
    - butil::intrusive_ptr::Init
    - set_end
    - butil::intrusive_ptr::SignalError
    - pop_front
    - ReleaseAdditionalReference
    - butil::StringPiece::copy
    - butil::microseconds_from_now
    - CHECK_LT
    - OnUserData
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - hash_code::has_been_set
    - policy::RtmpContext*::set_simplified_rtmp
    - WriteAMFNull
    - butil::intrusive_ptr::swap
    - butil::StringSplitter::length
    - butil::intrusive_ptr::get
    - butil::StringPiece::data
    - OnFailedToCreateStream
    - options
    - brpc::SetTrackMeAddress
    - id
    - WriteAMFNumber
    - WriteAMFObject
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::WriteBigEndian2Bytes
    - butil::intrusive_ptr::SendSharedObjectMessage
    - find
    - ParseRtmpHostAndPort
    - policy::RtmpTransactionHandler*::Cancel
    - description
    - CallOnUserData
    - CallOnMetaData
    - stream_name::c_str
    - bthread_id_unlock_and_destroy
    - PLOG_IF
    - clear
    - brpc::policy::ReadBigEndian4Bytes
    - butil::intrusive_ptr::SendAudioMessage
    - policy::RtmpContext*::only_check_simple_s0s1
    - done
    - butil::intrusive_ptr::SendVideoMessage
    - butil::gettimeofday_us
    - starts_with
    - butil::StringPiece::remove_prefix
    - OnClientStreamCreated*::cntl::set_request_code
    - socket_map
    - set_error
    - push_back
    - fetch1
    - is_server_accepted
    - Failed
    - fd
    - _chan::CallMethod
    - OnAudioMessage
    - CreateSocket
    - RtmpSocketCreator::RtmpSocketCreator
    - CallOnStopIfNeeded
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - brpc::policy::MakeUnsentControlMessage
    - butil::StringSplitter::field
    - butil::BaseIteratorRangeToNumberTraits::max
    - CallOnAudioMessage
    - butil::intrusive_ptr::intrusive_ptr
    - OnClientStreamCreated*::cntl::connection_type
    - CallOnVideoMessage
    - RtmpInfo::set_description
    - policy::RtmpContext*::SetState
    - brpc::AVCDecoderConfigurationRecord::ParseSPS
    - find_avc_annexb_nalu_stop_code
    - butil::intrusive_ptr::rtmp_url
    - connection_type
    - bthread_id_create
    - Init
    - policy::RtmpContext*::RemoveMessageStream
    - butil::StringPiece::clear
    - cutn
    - butil::IOBuf::IOBuf
    - brpc::policy::SendC0C1
    - policy::RtmpContext*::OnConnected
    - OnVideoMessage
    - CallOnCuePoint
    - OnSubStreamStop
    - butil::intrusive_ptr::SendCuePoint
    - code
    - OnStopInternal
    - get
    - OnClientStreamCreated*::cntl::call_id
    - std::string::append
    - size
    - CallOnStop
    - LOG
    - std::string::push_back
    - RtmpInfo::set_level
    - SendMessage
    - butil::intrusive_ptr::is_server_accepted
    - butil::EndPoint
    - policy::RtmpContext*::client_options
    - Write
    - BAIDU_SCOPED_LOCK
    - butil::intrusive_ptr::Destroy
    - remove_suffix
    - std::unique_lock::unlock
    - SignalError
    - std::string::reserve
    - policy::RtmpContext::RtmpContext
    - RtmpInfo::code
    - butil::StringPiece::find_first_of
    - WriteAMFString
    - NotifyOnFailed
    - bthread_timer_add
    - OnClientStreamCreated*::cntl::set_max_retry
    - brpc::policy::WriteBigEndian4Bytes
    - data
    - as_string
    - find_last_of
    - policy::RtmpContext*::SetConnectCallback
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AVCDecoderConfigurationRecord::Create(const butil::IOBuf&
      buf)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:582,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:583,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:584,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:598,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:603,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:604,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:605,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:607,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:608,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:612,1
    - Dst: ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:621,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:625,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:626,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:629,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:632,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:635,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - size
    - AVCDecoderConfigurationRecord::Create
    argTypes:
    - buf
    - buf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 575
    functionDepth: 2
    functionLinenumber: 575
    functionLinenumberEnd: 644
    functionName: brpc::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::substr
    - brpc::policy::ReadBigEndian2Bytes
    - butil::StringPiece::remove_prefix
    - ParseSPS
    - push_back
    - butil::StringPiece::data
    - clear
    - reserve
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - butil::Status::OK
    - butil::Status::ok
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: "void DEFINE_SMALL_ARRAY(char, cont_buf, buf.size(), 64);\n    buf.copy_to(cont_buf,
      buf.size());\n    return Create(cont_buf, buf.size());\n}\n\nbutil::Status AVCDecoderConfigurationRecord::Create(const
      void* data, size_t len)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:650,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:656,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:666,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:674,1
    - Dst: copy
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:689,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:695,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:699,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:703,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:708,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:718,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:724,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:728,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:729,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:732,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:733,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:737,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:740,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:741,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:747,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:761,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:762,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:765,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:766,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:770,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:771,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:775,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:776,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:779,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:780,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:784,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:797,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:801,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:804,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:805,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:808,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:809,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    CyclomaticComplexity: 49
    EdgeCount: 49
    ICount: 113
    argCount: 2
    argNames:
    - ' buf'
    - sps_length
    argTypes:
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 646
    functionDepth: 2
    functionLinenumber: 646
    functionLinenumberEnd: 814
    functionName: brpc::AVCDecoderConfigurationRecord::ParseSPS
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - avc_nalu_read_bit
    - empty
    - avc_nalu_read_uev
    - copy
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status AVCDecoderConfigurationRecord::ParseSPS(\n    const
      butil::StringPiece& buf, size_t sps_length)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' buf'
    - start_code_length
    argTypes:
    - butil::IOBuf
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 836
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 836
    functionName: brpc::find_avc_annexb_nalu_start_code
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool find_avc_annexb_nalu_start_code(const butil::IOBuf& buf,\n                                            size_t*
      start_code_length)"
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 3
    argNames:
    - ' buf'
    - nalu_length_out
    - stop_code_length
    argTypes:
    - butil::IOBuf
    - size_t*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 872
    functionName: brpc::find_avc_annexb_nalu_stop_code
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void find_avc_annexb_nalu_stop_code(const butil::IOBuf& buf,\n                                           size_t*
      nalu_length_out,\n                                           size_t* stop_code_length)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - data
    - length_size_minus1
    - format
    argTypes:
    - butil::IOBuf*
    - uint32_t
    - AVCNaluFormat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 883
      start: 874
    functionDepth: 0
    functionLinenumber: 874
    functionLinenumberEnd: 883
    functionName: brpc::AVCNaluIterator::AVCNaluIterator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void AVCNaluIterator::AVCNaluIterator(butil::IOBuf* data, uint32_t
      length_size_minus1,\n                                 AVCNaluFormat* format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 886
    functionName: AVCNaluIterator::~AVCNaluIterator()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AVCNaluIterator::~AVCNaluIterator()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:890,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:891,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:894,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:895,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:899,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:900,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:902,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:905,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:908,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 914
    functionName: AVCNaluIterator::operator++()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find_avc_annexb_nalu_start_code
    - next_as_annexb
    - set_end
    - pop_front
    - size
    - next_as_ibmf
    linkageType: ''
    returnType: void
    signature: void AVCNaluIterator::operator++()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:922,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:926,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:927,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:931,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 934
      start: 916
    functionDepth: 1
    functionLinenumber: 916
    functionLinenumberEnd: 934
    functionName: brpc::AVCNaluIterator::next_as_annexb
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find_avc_annexb_nalu_stop_code
    - pop_front
    - empty
    - clear
    - fetch1
    - cutn
    linkageType: ''
    returnType: bool
    signature: bool AVCNaluIterator::next_as_annexb()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:941,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:944,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:945,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:952,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:954,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:955,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:970,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:971,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:974,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 936
    functionDepth: 1
    functionLinenumber: 936
    functionLinenumberEnd: 979
    functionName: brpc::AVCNaluIterator::next_as_ibmf
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - copy_to
    - brpc::policy::ReadBigEndian2Bytes
    - CHECK_NE
    - pop_front
    - empty
    - brpc::policy::ReadBigEndian4Bytes
    - clear
    - fetch1
    - cutn
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool AVCNaluIterator::next_as_ibmf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 992
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 992
    functionName: brpc::RtmpClientOptions::RtmpClientOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClientOptions::RtmpClientOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:999,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1000
    functionName: brpc::RtmpClientImpl::RtmpClientImpl
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpClientImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1002,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1004
    functionName: ~RtmpClientImpl()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void ~RtmpClientImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1017
    functionDepth: 0
    functionLinenumber: 1017
    functionLinenumberEnd: 1017
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 1018
    functionDepth: 0
    functionLinenumber: 1018
    functionLinenumberEnd: 1018
    functionName: '& socket_map()'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketMap
    signature: SocketMap & socket_map()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1044,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1045,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1048,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1050,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1053,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1061,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1070,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - s
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1038
    functionDepth: 1
    functionLinenumber: 1038
    functionLinenumberEnd: 1072
    functionName: brpc::RtmpConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::set_simplified_rtmp
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - brpc::policy::SendC0C1
    - policy::RtmpContext*::only_check_simple_s0s1
    - policy::RtmpContext*::SendConnectRequest
    - policy::RtmpContext*::client_options
    - Socket*::parsing_context
    - Socket*::fd
    - static_cast<policy::RtmpContext*>
    - Socket*::remote_side
    - policy::RtmpContext*::SetConnectCallback
    - LOG
    - done
    - policy::RtmpContext*::SetState
    linkageType: ''
    returnType: void
    signature: "void RtmpConnect::StartConnect(\n    const Socket* s, void (*done)(int,
      void*), void* data)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1080,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1074
    functionDepth: 1
    functionLinenumber: 1074
    functionLinenumberEnd: 1082
    functionName: brpc::RtmpConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Socket*::parsing_context
    - LOG
    - policy::RtmpContext*::OnConnected
    - static_cast<policy::RtmpContext*>
    linkageType: ''
    returnType: void
    signature: void RtmpConnect::StopConnect(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' connect_options'
    argTypes:
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1088
      start: 1086
    functionDepth: 0
    functionLinenumber: 1086
    functionLinenumberEnd: 1088
    functionName: brpc::RtmpSocketCreator::RtmpSocketCreator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpSocketCreator(const RtmpClientOptions& connect_options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1093,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1094,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1090
    functionDepth: 0
    functionLinenumber: 1090
    functionLinenumberEnd: 1095
    functionName: brpc::RtmpSocketCreator::CreateSocket
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<RtmpConnect>
    - get_client_side_messenger
    - policy::RtmpContext::RtmpContext
    linkageType: ''
    returnType: int
    signature: int CreateSocket(const SocketOptions& opt, SocketId* id) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1104,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1105,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' pt'
    - id
    argTypes:
    - butil::EndPoint
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1101
    functionDepth: 0
    functionLinenumber: 1101
    functionLinenumberEnd: 1107
    functionName: brpc::RtmpClientImpl::CreateSocket
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<RtmpConnect>
    - get_client_side_messenger
    - policy::RtmpContext::RtmpContext
    linkageType: ''
    returnType: int
    signature: int RtmpClientImpl::CreateSocket(const butil::EndPoint& pt, SocketId*
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RtmpSocketCreator::RtmpSocketCreator
      Src: /src/brpc/src/brpc/rtmp.cpp:1112,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1118
      start: 1109
    functionDepth: 1
    functionLinenumber: 1109
    functionLinenumberEnd: 1118
    functionName: brpc::RtmpClientImpl::CommonInit
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - RtmpSocketCreator::RtmpSocketCreator
    - LOG
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: int RtmpClientImpl::CommonInit(const RtmpClientOptions& options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1122,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 1120
    functionDepth: 2
    functionLinenumber: 1120
    functionLinenumberEnd: 1130
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(butil::EndPoint server_addr_and_port,\n                         const
      RtmpClientOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1133,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1141
      start: 1131
    functionDepth: 2
    functionLinenumber: 1131
    functionLinenumberEnd: 1141
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(const char* server_addr_and_port,\n                         const
      RtmpClientOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1144,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1142
    functionDepth: 2
    functionLinenumber: 1142
    functionLinenumberEnd: 1152
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 4
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(const char* server_addr, int port,\n                         const
      RtmpClientOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1156,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - naming_service_url
    - load_balancer_name
    - ' options'
    argTypes:
    - char*
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1153
    functionDepth: 2
    functionLinenumber: 1153
    functionLinenumberEnd: 1164
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 5
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(const char* naming_service_url, \n                         const
      char* load_balancer_name,\n                         const RtmpClientOptions&
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1166
    functionDepth: 0
    functionLinenumber: 1166
    functionLinenumberEnd: 1166
    functionName: brpc::RtmpClient::RtmpClient
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClient::RtmpClient()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1167
    functionDepth: 0
    functionLinenumber: 1167
    functionLinenumberEnd: 1167
    functionName: RtmpClient::~RtmpClient()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClient::~RtmpClient()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RtmpClient
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1168
      start: 1168
    functionDepth: 0
    functionLinenumber: 1168
    functionLinenumberEnd: 1168
    functionName: brpc::RtmpClient::RtmpClient
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClient::RtmpClient(const RtmpClient& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RtmpClient
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1170
    functionDepth: 0
    functionLinenumber: 1170
    functionLinenumberEnd: 1173
    functionName: '& RtmpClient::operator=(const RtmpClient& rhs)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClient
    signature: RtmpClient & RtmpClient::operator=(const RtmpClient& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1175
    functionDepth: 0
    functionLinenumber: 1175
    functionLinenumberEnd: 1182
    functionName: '& RtmpClient::options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - options
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions & RtmpClient::options() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1188,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1191,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1184
    functionDepth: 1
    functionLinenumber: 1184
    functionLinenumberEnd: 1196
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(butil::EndPoint server_addr_and_port,\n                     const
      RtmpClientOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1202,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1205,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1208,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1210
      start: 1198
    functionDepth: 1
    functionLinenumber: 1198
    functionLinenumberEnd: 1210
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(const char* server_addr_and_port,\n                     const
      RtmpClientOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1216,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1219,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1222,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1224
      start: 1212
    functionDepth: 1
    functionLinenumber: 1212
    functionLinenumberEnd: 1224
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(const char* server_addr, int port,\n                     const
      RtmpClientOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1237,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - naming_service_url
    - load_balancer_name
    - ' options'
    argTypes:
    - char*
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1239
      start: 1226
    functionDepth: 1
    functionLinenumber: 1226
    functionLinenumberEnd: 1239
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(const char* naming_service_url, \n                     const
      char* load_balancer_name,\n                     const RtmpClientOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1241
      start: 1241
    functionDepth: 0
    functionLinenumber: 1241
    functionLinenumberEnd: 1241
    functionName: brpc::RtmpClient::initialized
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RtmpClient::initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:1251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - is_client
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1253
      start: 1243
    functionDepth: 0
    functionLinenumber: 1243
    functionLinenumberEnd: 1253
    functionName: brpc::RtmpStreamBase::RtmpStreamBase
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::RtmpStreamBase(bool is_client)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1255
    functionDepth: 0
    functionLinenumber: 1255
    functionLinenumberEnd: 1256
    functionName: RtmpStreamBase::~RtmpStreamBase()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::~RtmpStreamBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1258
    functionDepth: 0
    functionLinenumber: 1258
    functionLinenumberEnd: 1260
    functionName: brpc::RtmpStreamBase::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1270,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1274,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1276,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1281,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - timestamp
    - message_type
    - ' body'
    argTypes:
    - uint32_t
    - uint8_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1282
      start: 1262
    functionDepth: 1
    functionLinenumber: 1262
    functionLinenumberEnd: 1282
    functionName: brpc::RtmpStreamBase::SendMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - size
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - Write
    linkageType: ''
    returnType: int
    signature: "int RtmpStreamBase::SendMessage(uint32_t timestamp,\n                                uint8_t
      message_type,\n                                const butil::IOBuf& body)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - message_type
    - body
    - size
    argTypes:
    - uint8_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1293
      start: 1284
    functionDepth: 0
    functionLinenumber: 1284
    functionLinenumberEnd: 1293
    functionName: brpc::RtmpStreamBase::SendControlMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Write
    linkageType: ''
    returnType: int
    signature: "int RtmpStreamBase::SendControlMessage(\n    uint8_t message_type,
      const void* body, size_t size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1296,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1300,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1301,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1302,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1304,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1308,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' cuepoint'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1309
      start: 1295
    functionDepth: 2
    functionLinenumber: 1295
    functionLinenumberEnd: 1309
    functionName: brpc::RtmpStreamBase::SendCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendCuePoint(const RtmpCuePoint& cuepoint)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1317,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1318,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1324,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' metadata'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1325
      start: 1311
    functionDepth: 2
    functionLinenumber: 1311
    functionLinenumberEnd: 1325
    functionName: brpc::RtmpStreamBase::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RtmpStreamBase::SendMetaData(const RtmpMetaData& metadata,\n                                 const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1330
      start: 1327
    functionDepth: 1
    functionLinenumber: 1327
    functionLinenumberEnd: 1330
    functionName: brpc::RtmpStreamBase::SendSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendSharedObjectMessage(const RtmpSharedObjectMessage&)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1338,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1346,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1348,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1359,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1361
      start: 1332
    functionDepth: 1
    functionLinenumber: 1332
    functionLinenumberEnd: 1361
    functionName: brpc::RtmpStreamBase::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - Write
    - SocketMessagePtr::body::append
    - SocketMessagePtr::body::push_back
    - size
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAudioMessage(const RtmpAudioMessage& msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1369,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1377,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1379,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1390,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1392,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1393
      start: 1363
    functionDepth: 1
    functionLinenumber: 1363
    functionLinenumberEnd: 1393
    functionName: brpc::RtmpStreamBase::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - Write
    - SocketMessagePtr::body::append
    - size
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAACMessage(const RtmpAACMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1398
      start: 1395
    functionDepth: 1
    functionLinenumber: 1395
    functionLinenumberEnd: 1398
    functionName: brpc::RtmpStreamBase::SendUserMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendUserMessage(void*)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1406,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1410,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1411,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1413,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1414,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1420,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1428,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1429,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1430,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1431
      start: 1400
    functionDepth: 1
    functionLinenumber: 1400
    functionLinenumberEnd: 1431
    functionName: brpc::RtmpStreamBase::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::is_video_frame_type_valid
    - Write
    - SocketMessagePtr::body::append
    - SocketMessagePtr::body::push_back
    - size
    - LOG
    - brpc::policy::is_video_codec_valid
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendVideoMessage(const RtmpVideoMessage& msg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1439,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1444,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1450,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1452,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1461,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1463,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1433
    functionDepth: 1
    functionLinenumber: 1433
    functionLinenumberEnd: 1465
    functionName: brpc::RtmpStreamBase::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::is_video_frame_type_valid
    - Write
    - SocketMessagePtr::body::append
    - size
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAVCMessage(const RtmpAVCMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1469
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1469
    functionName: brpc::RtmpStreamBase::SendStopMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendStopMessage(const butil::StringPiece&)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - e
    argTypes:
    - RtmpObjectEncoding
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1471
    functionDepth: 0
    functionLinenumber: 1471
    functionLinenumberEnd: 1477
    functionName: brpc::RtmpObjectEncoding2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpObjectEncoding2Str(RtmpObjectEncoding e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1481
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1481
    functionName: brpc::RtmpStreamBase::SignalError
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::SignalError()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1483
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1483
    functionName: brpc::RtmpStreamBase::OnFirstMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnFirstMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1485
    functionDepth: 1
    functionLinenumber: 1485
    functionLinenumberEnd: 1488
    functionName: brpc::RtmpStreamBase::OnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnUserData(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1493
    functionName: brpc::RtmpStreamBase::OnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnCuePoint(RtmpCuePoint* cuepoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1499
      start: 1495
    functionDepth: 1
    functionLinenumber: 1495
    functionLinenumberEnd: 1499
    functionName: brpc::RtmpStreamBase::OnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnMetaData(RtmpMetaData* metadata, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1504
      start: 1501
    functionDepth: 1
    functionLinenumber: 1501
    functionLinenumberEnd: 1504
    functionName: brpc::RtmpStreamBase::OnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnSharedObjectMessage(RtmpSharedObjectMessage*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1508
      start: 1506
    functionDepth: 1
    functionLinenumber: 1506
    functionLinenumberEnd: 1508
    functionName: brpc::RtmpStreamBase::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1512
      start: 1510
    functionDepth: 1
    functionLinenumber: 1510
    functionLinenumberEnd: 1512
    functionName: brpc::RtmpStreamBase::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnVideoMessage(RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1516
      start: 1514
    functionDepth: 0
    functionLinenumber: 1514
    functionLinenumberEnd: 1516
    functionName: brpc::RtmpStreamBase::OnStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnStop()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1522,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1527,1
    - Dst: brpc::RtmpStreamBase::OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1533,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - fun_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1536
      start: 1518
    functionDepth: 1
    functionLinenumber: 1518
    functionLinenumberEnd: 1536
    functionName: brpc::RtmpStreamBase::BeginProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnFirstMessage
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpStreamBase::BeginProcessingMessage(const char* fun_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1542,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1543,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1545
      start: 1538
    functionDepth: 1
    functionLinenumber: 1538
    functionLinenumberEnd: 1545
    functionName: brpc::RtmpStreamBase::EndProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - brpc::RtmpStreamBase::OnStop
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::EndProcessingMessage()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1548,1
    - Dst: brpc::RtmpStreamBase::OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1549,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1550,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1547
    functionDepth: 2
    functionLinenumber: 1547
    functionLinenumberEnd: 1552
    functionName: brpc::RtmpStreamBase::CallOnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::OnUserData
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnUserData(void* data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    - Dst: brpc::RtmpStreamBase::OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1556,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1557,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - obj
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1554
    functionDepth: 2
    functionLinenumber: 1554
    functionLinenumberEnd: 1559
    functionName: brpc::RtmpStreamBase::CallOnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnCuePoint
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnCuePoint(RtmpCuePoint* obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    - Dst: brpc::RtmpStreamBase::OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1563,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - obj
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1566
      start: 1561
    functionDepth: 2
    functionLinenumber: 1561
    functionLinenumberEnd: 1566
    functionName: brpc::RtmpStreamBase::CallOnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnMetaData
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnMetaData(RtmpMetaData* obj, const butil::StringPiece&
      name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    - Dst: brpc::RtmpStreamBase::OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1570,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1571,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1573
      start: 1568
    functionDepth: 2
    functionLinenumber: 1568
    functionLinenumberEnd: 1573
    functionName: brpc::RtmpStreamBase::CallOnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::OnSharedObjectMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnSharedObjectMessage(RtmpSharedObjectMessage*
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    - Dst: brpc::RtmpStreamBase::OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1577,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1578,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1580
      start: 1575
    functionDepth: 2
    functionLinenumber: 1575
    functionLinenumberEnd: 1580
    functionName: brpc::RtmpStreamBase::CallOnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnAudioMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    - Dst: brpc::RtmpStreamBase::OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1584,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1585,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1587
      start: 1582
    functionDepth: 2
    functionLinenumber: 1582
    functionLinenumberEnd: 1587
    functionName: brpc::RtmpStreamBase::CallOnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnVideoMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnVideoMessage(RtmpVideoMessage* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1594,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1603,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1604
      start: 1589
    functionDepth: 1
    functionLinenumber: 1589
    functionLinenumberEnd: 1604
    functionName: brpc::RtmpStreamBase::CallOnStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - LOG
    - brpc::RtmpStreamBase::OnStop
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1607
      start: 1606
    functionDepth: 1
    functionLinenumber: 1606
    functionLinenumberEnd: 1607
    functionName: brpc::RtmpStreamBase::remote_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 7
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpStreamBase::remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1610
      start: 1609
    functionDepth: 1
    functionLinenumber: 1609
    functionLinenumberEnd: 1610
    functionName: brpc::RtmpStreamBase::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::local_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpStreamBase::local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1621,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1623
      start: 1614
    functionDepth: 0
    functionLinenumber: 1614
    functionLinenumberEnd: 1623
    functionName: brpc::RtmpClientStream::RtmpClientStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - reset
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::RtmpClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1627
      start: 1625
    functionDepth: 0
    functionLinenumber: 1625
    functionLinenumberEnd: 1627
    functionName: RtmpClientStream::~RtmpClientStream()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::~RtmpClientStream()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:1632,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1638,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1639,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1640,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1645,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1646,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1647,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1653,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1654,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1629
    functionDepth: 1
    functionLinenumber: 1629
    functionLinenumberEnd: 1665
    functionName: brpc::RtmpClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - StartCancel
    - brpc::RtmpClientStream::OnStopInternal
    - bthread_id_error
    - std::unique_lock::unlock
    - butil::intrusive_ptr::intrusive_ptr
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1673,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1674,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1678,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1683,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1684,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1667
    functionDepth: 1
    functionLinenumber: 1667
    functionLinenumberEnd: 1691
    functionName: brpc::RtmpClientStream::SignalError
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - brpc::RtmpClientStream::OnStopInternal
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::SignalError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1698,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1703,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1705,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1709,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1711,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1719,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: SocketUniquePtr*::get
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: SocketUniquePtr*::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1693
    functionDepth: 3
    functionLinenumber: 1693
    functionLinenumberEnd: 1727
    functionName: brpc::RtmpClientStream::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - CreateSocket
    - SocketUniquePtr::release
    - socket_map
    - get
    - SocketMapKey
    - SocketUniquePtr::ShareStats
    - Controller*::connection_type
    - brpc::SetTrackMeAddress
    - id
    - Controller*::SetFailed
    - SocketUniquePtr*::get
    - SocketUniquePtr*::reset
    linkageType: ''
    returnType: StreamUserData
    signature: "StreamUserData * RtmpClientStream::OnCreatingStream(\n    SocketUniquePtr*
      inout, Controller* cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1732,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1729
    functionDepth: 5
    functionLinenumber: 1729
    functionLinenumberEnd: 1738
    functionName: brpc::RtmpClientStream::RunOnFailed
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - CHECK
    - butil::intrusive_ptr::OnStopInternal
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::RunOnFailed(bthread_id_t id, void* data, int)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1750,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1751,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1758,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1759
    functionName: brpc::RtmpClientStream::OnFailedToCreateStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - CHECK
    - brpc::RtmpClientStream::OnStopInternal
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnFailedToCreateStream()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1769,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1771,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - end_of_rpc
    argTypes:
    - SocketUniquePtr
    - Controller*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1782
      start: 1761
    functionDepth: 1
    functionLinenumber: 1761
    functionLinenumberEnd: 1782
    functionName: brpc::RtmpClientStream::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - remote_side
    - socket_map
    - SocketMapKey
    - SetFailed
    - id
    linkageType: ''
    returnType: void
    signature: "void RtmpClientStream::DestroyStreamUserData(SocketUniquePtr& sending_sock,\n
      \                                            Controller* cntl,\n                                             int
      /*error_code*/,\n                                             bool end_of_rpc)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1786,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1791,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1795,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1799,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1802,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1804,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1808,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1817,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1818,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1821,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1822,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1825,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1838,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1842,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1844
      start: 1785
    functionDepth: 3
    functionLinenumber: 1785
    functionLinenumberEnd: 1844
    functionName: brpc::RtmpClientStream::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<RtmpClientStream>
    - bthread_id_create
    - static_cast<policy::RtmpContext*>
    - Controller*::SetFailed
    - policy::RtmpTransactionHandler*::Cancel
    - brpc::RtmpClientStream::OnFailedToCreateStream
    - LOG
    - Controller*::log_id
    - CHECK_LT
    - Controller*::ErrorCode
    - brpc::RtmpClientStream::OnStopInternal
    - CHECK
    - parsing_context
    - std::unique_lock::unlock
    - berror
    - Controller*::Failed
    - NotifyOnFailed
    - butil::BaseIteratorRangeToNumberTraits::max
    - policy::RtmpContext*::RemoveTransaction
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::DestroyStreamCreator(Controller* cntl)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1848,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1851,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1853,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1857,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1858,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1859,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1862,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1876,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1877,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1880,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1901,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1908,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1910,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1912,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1913
      start: 1846
    functionDepth: 1
    functionLinenumber: 1846
    functionLinenumberEnd: 1913
    functionName: brpc::RtmpClientStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 4
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - brpc::policy::WriteWithoutOvercrowded
    - policy::RtmpContext*::RemoveMessageStream
    - static_cast<policy::RtmpContext*>
    - butil::IOBuf::IOBuf
    - id
    - remote_side
    - get
    - SocketMapKey
    - CallOnStop
    - PLOG
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - butil::IOBuf::size
    - socket_map
    - CHECK
    - parsing_context
    - Failed
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - brpc::policy::MakeUnsentControlMessage
    - WriteAMFString
    - ReleaseAdditionalReference
    - SetFailed
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnStopInternal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1919
      start: 1915
    functionDepth: 0
    functionLinenumber: 1915
    functionLinenumberEnd: 1919
    functionName: brpc::RtmpPlayOptions::RtmpPlayOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpPlayOptions::RtmpPlayOptions()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: stream_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:1926,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1932,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1936,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1940,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1941,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1942,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1943,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1945,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1946,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1949,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1950,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1963,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1965,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 36
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlayOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1974
      start: 1921
    functionDepth: 1
    functionLinenumber: 1921
    functionLinenumberEnd: 1974
    functionName: brpc::RtmpClientStream::Play
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - stream_id
    - options
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - brpc::policy::WriteBigEndian2Bytes
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - butil::IOBuf::size
    - Write
    - CHECK
    - WriteAMFBool
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - brpc::policy::MakeUnsentControlMessage
    - WriteAMFString
    - stream_name::empty
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Play(const RtmpPlayOptions& opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1981,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1982,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1983,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1984,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1986,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1991,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1992
      start: 1976
    functionDepth: 1
    functionLinenumber: 1976
    functionLinenumberEnd: 1992
    functionName: brpc::RtmpClientStream::Play2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - WriteAMFObject
    - WriteAMFNull
    - SendMessage
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Play2(const RtmpPlay2Options& opt)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - type
    argTypes:
    - RtmpPublishType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2001
      start: 1994
    functionDepth: 0
    functionLinenumber: 1994
    functionLinenumberEnd: 2001
    functionName: brpc::RtmpPublishType2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpPublishType2Str(RtmpPublishType type)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' str'
    - type
    argTypes:
    - butil::StringPiece
    - RtmpPublishType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2015
      start: 2003
    functionDepth: 0
    functionLinenumber: 2003
    functionLinenumberEnd: 2015
    functionName: brpc::Str2RtmpPublishType
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Str2RtmpPublishType(const butil::StringPiece& str, RtmpPublishType*
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2019,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2023,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2024,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2025,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2026,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2030,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - ' name'
    - type
    argTypes:
    - butil::StringPiece
    - RtmpPublishType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2017
    functionDepth: 1
    functionLinenumber: 2017
    functionLinenumberEnd: 2031
    functionName: brpc::RtmpClientStream::Publish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - SendMessage
    - WriteAMFNull
    - WriteAMFString
    - CHECK
    - RtmpPublishType2Str
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: "int RtmpClientStream::Publish(const butil::StringPiece& name,\n                              RtmpPublishType
      type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2034,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2041,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2044,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2045
      start: 2033
    functionDepth: 1
    functionLinenumber: 2033
    functionLinenumberEnd: 2045
    functionName: brpc::RtmpClientStream::Seek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - SendMessage
    - WriteAMFNull
    - WriteAMFString
    - CHECK
    - WriteAMFNumber
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Seek(double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2048,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2055,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2059,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - pause_or_unpause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2060
      start: 2047
    functionDepth: 1
    functionLinenumber: 2047
    functionLinenumberEnd: 2060
    functionName: brpc::RtmpClientStream::Pause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - SendMessage
    - WriteAMFNull
    - WriteAMFString
    - CHECK
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - WriteAMFBool
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Pause(bool pause_or_unpause, double offset_ms)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: brpc::RtmpClientStream::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2070,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2075,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - RtmpInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2078
      start: 2062
    functionDepth: 2
    functionLinenumber: 2062
    functionLinenumberEnd: 2078
    functionName: brpc::RtmpClientStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - publish_name::empty
    - description
    - level
    - code
    - brpc::RtmpClientStream::SignalError
    - stream_id
    - store
    - LOG
    - play_name::empty
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnStatus(const RtmpInfo& info)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2080
    functionDepth: 0
    functionLinenumber: 2080
    functionLinenumberEnd: 2085
    functionName: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClientStreamOptions::RtmpClientStreamOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2090
      start: 2090
    functionDepth: 0
    functionLinenumber: 2090
    functionLinenumberEnd: 2090
    functionName: brpc::OnClientStreamCreated::CancelBeforeCallMethod
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelBeforeCallMethod()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:2101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2103,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2110,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2112,1
    - Dst: Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2117,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2118,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2121,1
    - Dst: Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2129,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2130,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2132
      start: 2099
    functionDepth: 1
    functionLinenumber: 2099
    functionLinenumberEnd: 2132
    functionName: brpc::OnClientStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - publish_name::empty
    - Publish
    - SignalError
    - rtmp_url
    - Play
    - options
    - Failed
    - LOG
    - ErrorText
    - play_name::empty
    linkageType: ''
    returnType: void
    signature: void OnClientStreamCreated::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2144,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2151,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2152,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2153,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2154,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2157,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2158,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2159,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2160,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2177,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2179,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2182,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2183,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2186,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - client
    - ' options'
    argTypes:
    - RtmpClient*
    - RtmpClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2190
      start: 2134
    functionDepth: 2
    functionLinenumber: 2134
    functionLinenumberEnd: 2190
    functionName: brpc::RtmpClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - OnClientStreamCreated*::cntl::set_connection_type
    - _chan::CallMethod
    - OnClientStreamCreated*::cntl::set_stream_creator
    - OnClientStreamCreated::OnClientStreamCreated
    - hash_code::has_been_set
    - OnClientStreamCreated*::stream::reset
    - Join
    - OnClientStreamCreated*::cntl::set_request_code
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - brpc::RtmpClientStream::OnStopInternal
    - OnClientStreamCreated*::cntl::set_max_retry
    - OnClientStreamCreated*::cntl::call_id
    - std::unique_lock::unlock
    - OnClientStreamCreated*::cntl::connection_type
    - LOG
    linkageType: ''
    returnType: void
    signature: "void RtmpClientStream::Init(const RtmpClient* client,\n                            const
      RtmpClientStreamOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2196,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2197,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2201,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2204
      start: 2192
    functionDepth: 1
    functionLinenumber: 2192
    functionLinenumberEnd: 2204
    functionName: brpc::RtmpClientStream::rtmp_url
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - std::string::reserve
    - stream_name
    - std::string::append
    - butil::StringPiece::data
    - options
    - butil::StringPiece::size
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string RtmpClientStream::rtmp_url() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2213
      start: 2208
    functionDepth: 0
    functionLinenumber: 2208
    functionLinenumberEnd: 2213
    functionName: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2227,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2229
      start: 2215
    functionDepth: 0
    functionLinenumber: 2215
    functionLinenumberEnd: 2229
    functionName: brpc::RtmpRetryingClientStream::RtmpRetryingClientStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - reset
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::RtmpRetryingClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2235
      start: 2231
    functionDepth: 0
    functionLinenumber: 2231
    functionLinenumberEnd: 2235
    functionName: RtmpRetryingClientStream::~RtmpRetryingClientStream()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::~RtmpRetryingClientStream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2241,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2242,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2244
      start: 2237
    functionDepth: 0
    functionLinenumber: 2237
    functionLinenumberEnd: 2244
    functionName: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnStop
    - load
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::CallOnStopIfNeeded()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2247,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2255,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2256,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2258,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2260,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2263,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2266,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2276,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2277
      start: 2246
    functionDepth: 2
    functionLinenumber: 2246
    functionLinenumberEnd: 2277
    functionName: brpc::RtmpRetryingClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - bthread_timer_del
    - butil::intrusive_ptr::Destroy
    - BAIDU_SCOPED_LOCK
    - butil::intrusive_ptr::intrusive_ptr
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2283,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2284,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - sub_stream_creator
    - ' options'
    argTypes:
    - SubStreamCreator*
    - RtmpRetryingClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2297
      start: 2279
    functionDepth: 1
    functionLinenumber: 2279
    functionLinenumberEnd: 2297
    functionName: brpc::RtmpRetryingClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - load
    - brpc::RtmpRetryingClientStream::Recreate
    - LOG
    linkageType: ''
    returnType: void
    signature: "void RtmpRetryingClientStream::Init(\n    SubStreamCreator* sub_stream_creator,\n
      \   const RtmpRetryingClientStreamOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RetryingClientMessageHandler::OnPlayable
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2301
      start: 2299
    functionDepth: 1
    functionLinenumber: 2299
    functionLinenumberEnd: 2301
    functionName: brpc::RetryingClientMessageHandler::OnPlayable
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RetryingClientMessageHandler::OnPlayable
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnPlayable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:2304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2305
      start: 2303
    functionDepth: 0
    functionLinenumber: 2303
    functionLinenumberEnd: 2305
    functionName: brpc::RetryingClientMessageHandler::OnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnUserData
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnUserData(void* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - brpc::RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2309
      start: 2307
    functionDepth: 0
    functionLinenumber: 2307
    functionLinenumberEnd: 2309
    functionName: brpc::RetryingClientMessageHandler::OnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnCuePoint
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnCuePoint(brpc::RtmpCuePoint* cuepoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - brpc::RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2313
      start: 2311
    functionDepth: 0
    functionLinenumber: 2311
    functionLinenumberEnd: 2313
    functionName: brpc::RetryingClientMessageHandler::OnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnMetaData
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnMetaData(brpc::RtmpMetaData* metadata,
      const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2317
      start: 2315
    functionDepth: 0
    functionLinenumber: 2315
    functionLinenumberEnd: 2317
    functionName: brpc::RetryingClientMessageHandler::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnAudioMessage
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnAudioMessage(brpc::RtmpAudioMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2319
    functionDepth: 0
    functionLinenumber: 2319
    functionLinenumberEnd: 2321
    functionName: brpc::RetryingClientMessageHandler::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnVideoMessage
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnVideoMessage(brpc::RtmpVideoMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2325
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2325
    functionName: brpc::RetryingClientMessageHandler::OnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnSharedObjectMessage
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnSharedObjectMessage(RtmpSharedObjectMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RetryingClientMessageHandler::OnSubStreamStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2329
      start: 2327
    functionDepth: 1
    functionLinenumber: 2327
    functionLinenumberEnd: 2329
    functionName: brpc::RetryingClientMessageHandler::OnSubStreamStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RetryingClientMessageHandler::OnSubStreamStop
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnSubStreamStop(RtmpStreamBase*
      sub_stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - parent
    argTypes:
    - RtmpRetryingClientStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2332
      start: 2331
    functionDepth: 0
    functionLinenumber: 2331
    functionLinenumberEnd: 2332
    functionName: brpc::RetryingClientMessageHandler::RetryingClientMessageHandler
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::RetryingClientMessageHandler(RtmpRetryingClientStream*
      parent)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2335,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2337,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2340,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2346,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2354,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2357,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2366
      start: 2334
    functionDepth: 1
    functionLinenumber: 2334
    functionLinenumberEnd: 2366
    functionName: brpc::RtmpRetryingClientStream::Recreate
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - swap
    - butil::gettimeofday_us
    - LaunchSubStream
    - NewSubStream
    - butil::intrusive_ptr::get
    - load
    - BAIDU_SCOPED_LOCK
    - butil::intrusive_ptr::Destroy
    - butil::intrusive_ptr::intrusive_ptr
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Recreate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2373
      start: 2368
    functionDepth: 0
    functionLinenumber: 2368
    functionLinenumberEnd: 2373
    functionName: brpc::RtmpRetryingClientStream::OnRecreateTimer
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::Recreate
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::OnRecreateTimer(void* arg)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2381,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2383,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2387,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2388,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2392,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2397,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: RtmpStreamBase*::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2403,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2418,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2424,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2428,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2432,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2435,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2443,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2448,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 41
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2450
      start: 2375
    functionDepth: 3
    functionLinenumber: 2375
    functionLinenumberEnd: 2450
    functionName: brpc::RtmpRetryingClientStream::OnSubStreamStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - butil::gettimeofday_us
    - RtmpStreamBase*::is_server_accepted
    - brpc::RtmpRetryingClientStream::Recreate
    - RtmpStreamBase*::has_data_ever
    - load
    - BAIDU_SCOPED_LOCK
    - bthread_timer_add
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - LOG
    - butil::microseconds_from_now
    - butil::intrusive_ptr::intrusive_ptr
    - has_data_ever
    - publish_name::empty
    - play_name::empty
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::OnSubStreamStop(RtmpStreamBase* sub_stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2454,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2459,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2471
      start: 2452
    functionDepth: 1
    functionLinenumber: 2452
    functionLinenumberEnd: 2471
    functionName: brpc::RtmpRetryingClientStream::AcquireStreamToSend
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - is_server_accepted
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int RtmpRetryingClientStream::AcquireStreamToSend(\n    butil::intrusive_ptr<RtmpStreamBase>*
      ptr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2474,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2475,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2478,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' obj'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2479
      start: 2473
    functionDepth: 2
    functionLinenumber: 2473
    functionLinenumberEnd: 2479
    functionName: brpc::RtmpRetryingClientStream::SendCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendCuePoint
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendCuePoint(const RtmpCuePoint& obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2482,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2483,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2486,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' obj'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2487
      start: 2481
    functionDepth: 2
    functionLinenumber: 2481
    functionLinenumberEnd: 2487
    functionName: brpc::RtmpRetryingClientStream::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendMetaData
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendMetaData(const RtmpMetaData& obj,
      const butil::StringPiece& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2491,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2492,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpSharedObjectMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2496
      start: 2489
    functionDepth: 2
    functionLinenumber: 2489
    functionLinenumberEnd: 2496
    functionName: brpc::RtmpRetryingClientStream::SendSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendSharedObjectMessage
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: "int RtmpRetryingClientStream::SendSharedObjectMessage(\n    const
      RtmpSharedObjectMessage& msg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2499,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2500,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2503,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2504
      start: 2498
    functionDepth: 2
    functionLinenumber: 2498
    functionLinenumberEnd: 2504
    functionName: brpc::RtmpRetryingClientStream::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendAudioMessage
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendAudioMessage(const RtmpAudioMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2508,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2511,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2512
      start: 2506
    functionDepth: 2
    functionLinenumber: 2506
    functionLinenumberEnd: 2512
    functionName: brpc::RtmpRetryingClientStream::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    - butil::intrusive_ptr::SendAACMessage
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendAACMessage(const RtmpAACMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2516,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2519,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2520
      start: 2514
    functionDepth: 2
    functionLinenumber: 2514
    functionLinenumberEnd: 2520
    functionName: brpc::RtmpRetryingClientStream::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendVideoMessage
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendVideoMessage(const RtmpVideoMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2524,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2527,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2528
      start: 2522
    functionDepth: 2
    functionLinenumber: 2522
    functionLinenumberEnd: 2528
    functionName: brpc::RtmpRetryingClientStream::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendAVCMessage
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendAVCMessage(const RtmpAVCMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2533,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2537,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2539
      start: 2530
    functionDepth: 1
    functionLinenumber: 2530
    functionLinenumberEnd: 2539
    functionName: brpc::RtmpRetryingClientStream::StopCurrentStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SignalError
    - butil::intrusive_ptr::intrusive_ptr
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::StopCurrentStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2541
      start: 2541
    functionDepth: 0
    functionLinenumber: 2541
    functionLinenumberEnd: 2541
    functionName: brpc::RtmpRetryingClientStream::OnPlayable
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::OnPlayable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: brpc::RtmpRetryingClientStream::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2547,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2550,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2551
      start: 2543
    functionDepth: 1
    functionLinenumber: 2543
    functionLinenumberEnd: 2551
    functionName: brpc::RtmpRetryingClientStream::remote_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::EndPoint
    - brpc::RtmpRetryingClientStream::remote_side
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpRetryingClientStream::remote_side() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2555,1
    - Dst: brpc::RtmpRetryingClientStream::local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2557,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2560,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2561
      start: 2553
    functionDepth: 1
    functionLinenumber: 2553
    functionLinenumberEnd: 2561
    functionName: brpc::RtmpRetryingClientStream::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpRetryingClientStream::local_side
    - butil::EndPoint
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpRetryingClientStream::local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2566
      start: 2564
    functionDepth: 0
    functionLinenumber: 2564
    functionLinenumberEnd: 2566
    functionName: brpc::RtmpService::OnPingResponse
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpService::OnPingResponse(const butil::EndPoint&, uint32_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2574
      start: 2568
    functionDepth: 0
    functionLinenumber: 2568
    functionLinenumberEnd: 2574
    functionName: brpc::RtmpServerStream::RtmpServerStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::RtmpServerStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2577,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2578
      start: 2576
    functionDepth: 0
    functionLinenumber: 2576
    functionLinenumberEnd: 2578
    functionName: RtmpServerStream::~RtmpServerStream()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::~RtmpServerStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2581,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2582
      start: 2580
    functionDepth: 1
    functionLinenumber: 2580
    functionLinenumberEnd: 2582
    functionName: brpc::RtmpServerStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status*::set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2588,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' opt'
    - status
    - done
    argTypes:
    - RtmpPlayOptions
    - butil::Status*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2593
      start: 2584
    functionDepth: 1
    functionLinenumber: 2584
    functionLinenumberEnd: 2593
    functionName: brpc::RtmpServerStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_name::c_str
    - butil::Status*::set_error
    - stream_id
    - butil::endpoint2str
    linkageType: ''
    returnType: void
    signature: "void RtmpServerStream::OnPlay(const RtmpPlayOptions& opt,\n                              butil::Status*
      status,\n                              google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2597,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2598
      start: 2595
    functionDepth: 1
    functionLinenumber: 2595
    functionLinenumberEnd: 2598
    functionName: brpc::RtmpServerStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    - ShortDebugString
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnPlay2(const RtmpPlay2Options& opt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status*::set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2605,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' name'
    - type
    - status
    - done
    argTypes:
    - std::string
    - RtmpPublishType
    - butil::Status*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2608
      start: 2600
    functionDepth: 1
    functionLinenumber: 2600
    functionLinenumberEnd: 2608
    functionName: brpc::RtmpServerStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - butil::Status*::set_error
    - c_str
    - stream_id
    - RtmpPublishType2Str
    - butil::endpoint2str
    linkageType: ''
    returnType: void
    signature: "void RtmpServerStream::OnPublish(const std::string& name,\n                                 RtmpPublishType
      type,\n                                 butil::Status* status,\n                                 google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2614
      start: 2610
    functionDepth: 1
    functionLinenumber: 2610
    functionLinenumberEnd: 2614
    functionName: brpc::RtmpServerStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::OnSeek(double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - pause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2621
      start: 2616
    functionDepth: 1
    functionLinenumber: 2616
    functionLinenumberEnd: 2621
    functionName: brpc::RtmpServerStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::OnPause(bool pause, double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2623
      start: 2623
    functionDepth: 0
    functionLinenumber: 2623
    functionLinenumberEnd: 2623
    functionName: brpc::RtmpServerStream::OnSetBufferLength
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnSetBufferLength(uint32_t /*buffer_length_ms*/)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:2632,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2649,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2650,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2651,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2657,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2659,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2665,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2667,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2668,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2676,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2681,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2682,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 1
    argNames:
    - ' error_desc'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2684
      start: 2625
    functionDepth: 1
    functionLinenumber: 2625
    functionLinenumberEnd: 2684
    functionName: brpc::RtmpServerStream::SendStopMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFNull
    - RtmpInfo::set_code
    - brpc::policy::WriteWithoutOvercrowded
    - butil::IOBuf::IOBuf
    - remote_side
    - WriteAMFObject
    - PLOG_IF
    - get
    - size
    - LOG_IF
    - RtmpInfo::set_level
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - butil::IOBuf::size
    - WriteAMFUint32
    - RtmpInfo::code
    - WriteAMFString
    - empty
    - data
    - as_string
    - SetFailed
    - RtmpInfo::set_description
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::SendStopMessage(const butil::StringPiece& error_desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2691,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2694
      start: 2688
    functionDepth: 1
    functionLinenumber: 2688
    functionLinenumberEnd: 2694
    functionName: brpc::RtmpServerStream::SendStreamDry
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteBigEndian2Bytes
    - SendControlMessage
    - stream_id
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::SendStreamDry()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2699,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2700,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2701,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2703
      start: 2696
    functionDepth: 5
    functionLinenumber: 2696
    functionLinenumberEnd: 2703
    functionName: brpc::RtmpServerStream::RunOnFailed
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - CHECK
    - butil::intrusive_ptr::OnStopInternal
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::RunOnFailed(bthread_id_t id, void* data, int)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2707,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2714,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2716,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2717,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2719
      start: 2705
    functionDepth: 1
    functionLinenumber: 2705
    functionLinenumberEnd: 2719
    functionName: brpc::RtmpServerStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - policy::RtmpContext*::RemoveMessageStream
    - static_cast<policy::RtmpContext*>
    - parsing_context
    - CallOnStop
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnStopInternal()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2727,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' url_in'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2730
      start: 2721
    functionDepth: 0
    functionLinenumber: 2721
    functionLinenumberEnd: 2730
    functionName: brpc::RemoveRtmpPrefix
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - starts_with
    - butil::StringPiece::size
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece RemoveRtmpPrefix(const butil::StringPiece& url_in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2733,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2739,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' url_in'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2742
      start: 2732
    functionDepth: 0
    functionLinenumber: 2732
    functionLinenumberEnd: 2742
    functionName: brpc::RemoveProtocolPrefix
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - find
    - butil::StringPiece::size
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece RemoveProtocolPrefix(const butil::StringPiece& url_in)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2747,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2757,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2760,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - ' host_and_port'
    - host
    - port
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2763
      start: 2744
    functionDepth: 0
    functionLinenumber: 2744
    functionLinenumberEnd: 2763
    functionName: brpc::ParseRtmpHostAndPort
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find
    - substr
    linkageType: ''
    returnType: void
    signature: "void ParseRtmpHostAndPort(const butil::StringPiece& host_and_port,\n
      \                         butil::StringPiece* host,\n                          butil::StringPiece*
      port)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2767,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2770,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2775,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' stream_name_in'
    - query_strings
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2779
      start: 2765
    functionDepth: 1
    functionLinenumber: 2765
    functionLinenumberEnd: 2779
    functionName: brpc::RemoveQueryStrings
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find
    - butil::StringPiece*::clear
    - substr
    linkageType: ''
    returnType: butil::StringPiece
    signature: "butil::StringPiece RemoveQueryStrings(const butil::StringPiece& stream_name_in,\n
      \                                    butil::StringPiece* query_strings)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2785,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2791,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2797,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2800,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2804,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2805,1
    - Dst: butil::StringPiece*::find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2807,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2814,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 3
    argNames:
    - ' app_and_vhost'
    - app
    - vhost
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2816
      start: 2782
    functionDepth: 1
    functionLinenumber: 2782
    functionLinenumberEnd: 2816
    functionName: brpc::SplitVHostFromApp
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::starts_with
    - butil::StringPiece::substr
    - butil::StringPiece*::find_last_of
    - butil::StringSplitter::length
    - butil::StringPiece*::remove_suffix
    - find
    - substr
    - butil::StringSplitter::field
    - butil::StringPiece::data
    - butil::StringPiece*::clear
    - butil::StringPiece::size
    - butil::StringPiece*::size
    linkageType: ''
    returnType: void
    signature: "void SplitVHostFromApp(const butil::StringPiece& app_and_vhost,\n
      \                             butil::StringPiece* app,\n                              butil::StringPiece*
      vhost)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2825,1
    - Dst: brpc::RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2827,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2828,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2831,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2834,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2842,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2844,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2845,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2847,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2852,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 29
    argCount: 6
    argNames:
    - ' rtmp_url_in'
    - host
    - vhost
    - port
    - app
    - stream_name
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    - butil::StringPiece*
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2857
      start: 2818
    functionDepth: 2
    functionLinenumber: 2818
    functionLinenumberEnd: 2857
    functionName: brpc::ParseRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::substr
    - brpc::SplitVHostFromApp
    - butil::StringPiece::remove_prefix
    - brpc::ParseRtmpHostAndPort
    - butil::StringPiece::find_first_of
    - brpc::RemoveRtmpPrefix
    - butil::StringPiece*::clear
    - butil::StringPiece::size
    linkageType: ''
    returnType: void
    signature: "void ParseRtmpURL(const butil::StringPiece& rtmp_url_in,\n                  butil::StringPiece*
      host,\n                  butil::StringPiece* vhost,\n                  butil::StringPiece*
      port,\n                  butil::StringPiece* app,\n                  butil::StringPiece*
      stream_name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2865,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2867,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2868,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2871,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2872,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2875,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 4
    argNames:
    - ' host'
    - ' port'
    - ' app'
    - ' stream_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2883
      start: 2859
    functionDepth: 2
    functionLinenumber: 2859
    functionLinenumberEnd: 2883
    functionName: brpc::MakeRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - std::string::append
    - brpc::size
    - data
    - brpc::empty
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: "std::string MakeRtmpURL(const butil::StringPiece& host,\n                        const
      butil::StringPiece& port,\n                        const butil::StringPiece&
      app,\n                        const butil::StringPiece& stream_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: brpc::RtmpBvars
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpBvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<RtmpBvars>
      Src: /src/brpc/src/brpc/rtmp.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: brpc::get_rtmp_bvars
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::get_leaky_singleton<RtmpBvars>
    linkageType: ''
    returnType: RtmpBvars
    signature: RtmpBvars * get_rtmp_bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: brpc::FlvWriter::FlvWriter
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvWriter::FlvWriter(butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - ' options'
    argTypes:
    - butil::IOBuf*
    - FlvWriterOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: brpc::FlvWriter::FlvWriter
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvWriter::FlvWriter(butil::IOBuf* buf, const FlvWriterOptions&
      options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/rtmp.cpp:75,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rtmp.cpp:77,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:79,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:83,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:83,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:84,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:86,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:90,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:93,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:93,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:94,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 96
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::WriteBigEndian3Bytes
    - size
    - static_cast<char>
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpVideoMessage& msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/rtmp.cpp:103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rtmp.cpp:105,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:107,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:111,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:112,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:114,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:120,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:121,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:124,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:125,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 127
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::WriteBigEndian3Bytes
    - size
    - static_cast<char>
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpAudioMessage& msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/rtmp.cpp:134,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rtmp.cpp:136,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:138,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:142,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:142,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:143,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:145,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:146,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:147,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:150,1
    - Dst: append
      Src: /src/brpc/src/brpc/rtmp.cpp:151,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 2
    argNames:
    - ' req_buf'
    - timestamp
    argTypes:
    - butil::IOBuf
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 153
    functionName: brpc::FlvWriter::WriteScriptData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - append
    - brpc::policy::WriteBigEndian3Bytes
    - size
    - static_cast<char>
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::WriteScriptData(const butil::IOBuf& req_buf,
      uint32_t timestamp)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:156,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:160,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:161,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:162,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:163,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:164,1
    - Dst: brpc::FlvWriter::WriteScriptData
      Src: /src/brpc/src/brpc/rtmp.cpp:167,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' cuepoint'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 168
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::FlvWriter::WriteScriptData
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpCuePoint& cuepoint)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:171,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:175,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:176,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:177,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:178,1
    - Dst: brpc::FlvWriter::WriteScriptData
      Src: /src/brpc/src/brpc/rtmp.cpp:181,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' metadata'
    argTypes:
    - RtmpMetaData
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 182
    functionName: brpc::FlvWriter::Write
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::FlvWriter::WriteScriptData
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvWriter::Write(const RtmpMetaData& metadata)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: brpc::FlvReader::FlvReader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FlvReader::FlvReader(butil::IOBuf* buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:193,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:195,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rtmp.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:199,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:200,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:202,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:205,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 188
    functionDepth: 2
    functionLinenumber: 188
    functionLinenumberEnd: 206
    functionName: brpc::FlvReader::ReadHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - memcmp
    - pop_front
    - fetch
    - LOG
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::ReadHeader()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FlvReader::ReadHeader
      Src: /src/brpc/src/brpc/rtmp.cpp:209,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:210,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:213,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:215,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:220,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:225,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - type_out
    argTypes:
    - FlvTagType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 208
    functionDepth: 3
    functionLinenumber: 208
    functionLinenumberEnd: 226
    functionName: brpc::FlvReader::PeekMessageType
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    - brpc::FlvReader::ReadHeader
    - butil::Status::OK
    - butil::Status::ok
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::PeekMessageType(FlvTagType* type_out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:230,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:232,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:235,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:237,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:238,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:240,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:241,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:243,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:245,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:245,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:250,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:251,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:253,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 254
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - cut1
    - brpc::policy::ReadBigEndian3Bytes
    - pop_front
    - CHECK
    - fetch
    - cutn
    - length
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpVideoMessage* msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:258,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:260,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:263,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:265,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:266,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:268,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:269,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:271,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:273,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:273,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:279,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:280,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:282,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 256
    functionDepth: 2
    functionLinenumber: 256
    functionLinenumberEnd: 283
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - cut1
    - brpc::policy::ReadBigEndian3Bytes
    - pop_front
    - CHECK
    - fetch
    - cutn
    - length
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpAudioMessage* msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:287,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:289,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:292,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:294,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:295,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:297,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:298,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:300,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:301,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:302,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:303,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:307,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:308,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:310,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:311,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:315,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - msg
    - name
    argTypes:
    - RtmpMetaData*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 285
    functionDepth: 2
    functionLinenumber: 285
    functionLinenumberEnd: 316
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - brpc::policy::ReadBigEndian3Bytes
    - pop_front
    - fetch
    - cutn
    - ReadAMFString
    - length
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpMetaData* msg, std::string* name)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvVideoFrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 327
    functionName: brpc::FlvVideoFrameType2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvVideoFrameType2Str(FlvVideoFrameType t)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 1
    argNames:
    - id
    argTypes:
    - FlvVideoCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 342
    functionName: brpc::FlvVideoCodec2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvVideoCodec2Str(FlvVideoCodec id)
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 1
    argNames:
    - codec
    argTypes:
    - FlvAudioCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 371
    functionName: brpc::FlvAudioCodec2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvAudioCodec2Str(FlvAudioCodec codec)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - rate
    argTypes:
    - FlvSoundRate
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 381
    functionName: brpc::FlvSoundRate2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvSoundRate2Str(FlvSoundRate rate)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - size
    argTypes:
    - FlvSoundBits
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 389
    functionName: brpc::FlvSoundBits2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvSoundBits2Str(FlvSoundBits size)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvSoundType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 397
    functionName: brpc::FlvSoundType2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * FlvSoundType2Str(FlvSoundType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:401,1
    - Dst: FlvSoundRate2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:402,1
    - Dst: FlvSoundBits2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:403,1
    - Dst: FlvSoundType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:404,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 406
    functionName: '& operator<<(std::ostream& os, const RtmpAudioMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvSoundType2Str
    - FlvSoundBits2Str
    - FlvSoundRate2Str
    - FlvAudioCodec2Str
    - butil::ToPrintable::ToPrintable
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RtmpAudioMessage&
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FlvVideoFrameType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:410,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:411,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 408
    functionDepth: 1
    functionLinenumber: 408
    functionLinenumberEnd: 413
    functionName: '& operator<<(std::ostream& os, const RtmpVideoMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvVideoCodec2Str
    - butil::ToPrintable::ToPrintable
    - FlvVideoFrameType2Str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const RtmpVideoMessage&
      msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:417,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:418,1
    - Dst: data::fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:420,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:422,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:425,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:432,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:432,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:433,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 415
    functionDepth: 2
    functionLinenumber: 415
    functionLinenumberEnd: 434
    functionName: brpc::RtmpAACMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvAudioCodec2Str
    - data::fetch1
    - data::size
    - butil::Status::OK
    - data::append_to
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpAACMessage::Create(const RtmpAudioMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 440
    functionName: brpc::AudioSpecificConfig::AudioSpecificConfig
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AudioSpecificConfig::AudioSpecificConfig()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:443,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:444,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:445,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:448,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:448,1
    - Dst: brpc::AudioSpecificConfig::Create
      Src: /src/brpc/src/brpc/rtmp.cpp:449,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:449,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 442
    functionDepth: 2
    functionLinenumber: 442
    functionLinenumberEnd: 450
    functionName: brpc::AudioSpecificConfig::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - copy_to
    - arraysize
    - brpc::AudioSpecificConfig::Create
    - size
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AudioSpecificConfig::Create(const butil::IOBuf& buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:454,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:462,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:464,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 452
    functionDepth: 2
    functionLinenumber: 452
    functionLinenumberEnd: 465
    functionName: brpc::AudioSpecificConfig::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AudioSpecificConfig::Create(const void* data, size_t
      len)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:471,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 467
    functionDepth: 0
    functionLinenumber: 467
    functionLinenumberEnd: 476
    functionName: brpc::RtmpAudioMessage::IsAACSequenceHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool RtmpAudioMessage::IsAACSequenceHeader() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:480,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:481,1
    - Dst: data::fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:484,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:486,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:489,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:494,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:495,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:495,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:496,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 497
    functionName: brpc::RtmpAVCMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvVideoCodec2Str
    - data::fetch
    - brpc::policy::ReadBigEndian3Bytes
    - data::size
    - butil::Status::OK
    - data::append_to
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpAVCMessage::Create(const RtmpVideoMessage& msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:503,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 508
    functionName: brpc::RtmpVideoMessage::IsAVCSequenceHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool RtmpVideoMessage::IsAVCSequenceHeader() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:514,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 519
    functionName: brpc::RtmpVideoMessage::IsHEVCSequenceHeader
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool RtmpVideoMessage::IsHEVCSequenceHeader() const
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 1
    argNames:
    - p
    argTypes:
    - AVCProfile
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 537
    functionName: brpc::AVCProfile2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * AVCProfile2Str(AVCProfile p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 545
    functionName: brpc::AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AVCProfile2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:549,1
    - Dst: sps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:555,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:559,1
    - Dst: pps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:562,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:566,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - AVCDecoderConfigurationRecord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 570
    functionName: "& operator<<(std::ostream& os,\n                         const
      AVCDecoderConfigurationRecord& r)"
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - size
    - pps_list::size
    - AVCProfile2Str
    - sps_list::size
    linkageType: ''
    returnType: std::ostream
    signature: "std::ostream & operator<<(std::ostream& os,\n                         const
      AVCDecoderConfigurationRecord& r)"
  - BBCount: 273
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:582,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:583,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:584,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:598,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:603,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:604,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:605,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:607,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:608,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:612,1
    - Dst: brpc::AVCDecoderConfigurationRecord::ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:621,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:625,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:626,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:629,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:632,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:635,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:650,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:656,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:666,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:674,1
    - Dst: butil::StringPiece::copy
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:689,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:695,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:699,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:703,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:708,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:718,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:724,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:728,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:729,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:732,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:733,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:737,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:740,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:741,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:747,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:761,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:762,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:765,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:766,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:770,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:771,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:775,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:776,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:779,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:780,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:784,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:797,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:801,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:804,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:805,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:808,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:809,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:890,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:891,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:894,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:895,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:899,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:900,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:902,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:905,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:908,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:922,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:926,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:927,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:931,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:941,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:944,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:945,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:952,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:954,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:955,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:970,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:971,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:974,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:999,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1002,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1044,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1045,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1048,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1050,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1053,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1061,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1070,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1080,1
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1093,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1094,1
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1104,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1105,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1106,1
    - Dst: RtmpSocketCreator::RtmpSocketCreator
      Src: /src/brpc/src/brpc/rtmp.cpp:1112,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1114,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1122,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1129,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1133,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1140,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1144,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1151,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1156,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1177,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1188,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1191,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1194,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1202,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1205,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1208,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1216,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1219,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1222,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1237,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:1251,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1270,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1274,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1276,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1281,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1292,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1296,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1300,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1301,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1302,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1304,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1308,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1317,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1318,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1324,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1338,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1346,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1348,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1359,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1369,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1377,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1379,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1390,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1392,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1396,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1406,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1410,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1411,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1413,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1414,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1420,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1428,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1429,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1430,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1439,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1444,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1450,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1452,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1461,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1463,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1522,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1527,1
    - Dst: OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1533,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1542,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1543,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1548,1
    - Dst: OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1549,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1550,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    - Dst: OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1556,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1557,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    - Dst: OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1563,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1564,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    - Dst: OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1570,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1571,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    - Dst: OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1577,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1578,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    - Dst: OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1584,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1585,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1594,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1603,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1621,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1626,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:1632,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1638,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1639,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1640,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1645,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1646,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1647,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1653,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1654,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1673,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1674,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1678,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1683,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1684,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1698,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1703,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1705,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1709,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1711,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1719,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1732,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1750,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1751,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1758,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1769,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1771,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1786,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1791,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1795,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1799,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1802,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1804,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1808,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1817,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1818,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1821,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1822,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1825,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1838,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1842,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1848,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1851,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1853,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1857,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1858,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1859,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1862,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1876,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1877,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1880,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1901,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1908,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1910,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1912,1
    - Dst: stream_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:1926,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1932,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1936,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1940,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1941,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1942,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1943,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1945,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1946,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1949,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1950,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1963,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1965,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1981,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1982,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1983,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1984,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1986,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1991,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2019,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2023,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2024,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2025,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2026,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2030,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2034,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2041,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2044,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2048,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2055,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2059,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2070,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2075,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:2101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2103,1
    - Dst: butil::intrusive_ptr::options
      Src: /src/brpc/src/brpc/rtmp.cpp:2110,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2112,1
    - Dst: butil::intrusive_ptr::Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2117,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2118,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2121,1
    - Dst: butil::intrusive_ptr::Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2129,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2130,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2144,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2151,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2152,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2153,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2154,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2157,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2158,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2159,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2160,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2177,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2179,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2182,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2183,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2186,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2196,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2197,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2201,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2227,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2228,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2234,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2241,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2242,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2247,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2255,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2256,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2258,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2260,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2263,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2266,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2276,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2283,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2284,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    - Dst: OnPlayable
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    - Dst: CallOnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:2304,1
    - Dst: CallOnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    - Dst: CallOnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2312,1
    - Dst: CallOnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2316,1
    - Dst: CallOnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2320,1
    - Dst: CallOnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2324,1
    - Dst: OnSubStreamStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2328,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2335,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2337,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2340,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2346,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2354,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2357,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2381,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2383,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2387,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2388,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2392,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2397,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: butil::intrusive_ptr::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2403,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2418,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2424,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2428,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2432,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2435,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2443,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2448,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2454,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2459,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2474,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2475,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2478,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2482,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2483,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2486,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2491,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2492,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2499,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2500,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2503,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2508,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2511,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2516,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2519,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2524,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2527,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2533,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2537,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2547,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2550,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2555,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2557,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2560,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2573,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2577,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2581,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2588,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2591,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2597,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2605,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:2632,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2649,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2650,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2651,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2657,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2659,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2665,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2667,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2668,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2676,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2681,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2682,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2691,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2699,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2700,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2701,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2707,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2714,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2716,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2717,1
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2727,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2733,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2739,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2740,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2747,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2757,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2760,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2767,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2770,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2775,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2777,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2785,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2791,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2797,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2800,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2804,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2805,1
    - Dst: find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2807,1
    - Dst: remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2814,1
    - Dst: butil::StringPiece::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2825,1
    - Dst: RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2827,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2828,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2831,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2834,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2842,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2844,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2845,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2847,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2852,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2865,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2867,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2868,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2871,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2872,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2875,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    CyclomaticComplexity: 304
    EdgeCount: 304
    ICount: 1457
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2885
      start: 572
    functionDepth: 5
    functionLinenumber: 572
    functionLinenumberEnd: 2885
    functionName: brpc::AVCDecoderConfigurationRecord::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - OnSharedObjectMessage
    - OnClientStreamCreated*::cntl::set_connection_type
    - get_client_side_messenger
    - butil::intrusive_ptr<RtmpClientStream>
    - get_rtmp_bvars
    - stream_id
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - SocketMessagePtr::body::append
    - SocketUniquePtr::ShareStats
    - butil::intrusive_ptr::Play
    - butil::StringPiece::starts_with
    - swap
    - remote_side
    - butil::StringPiece::substr
    - std::string
    - LaunchSubStream
    - brpc::policy::ReadBigEndian2Bytes
    - AcquireStreamToSend
    - butil::intrusive_ptr::options
    - butil::intrusive_ptr::SendMetaData
    - store
    - RtmpPublishType2Str
    - SocketMapKey
    - avc_nalu_read_uev
    - bthread_id_error
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - brpc::policy::is_video_codec_valid
    - LOG_IF
    - BuiltinServiceTest::TestStatus
    - play_name::empty
    - RemoveRtmpPrefix
    - OnStop
    - copy_to
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Publish
    - OnClientStreamCreated::OnClientStreamCreated
    - Join
    - butil::IOBuf::size
    - find_avc_annexb_nalu_start_code
    - Recreate
    - CHECK
    - std::make_shared<RtmpConnect>
    - next_as_ibmf
    - ErrorText
    - butil::Status::ok
    - WriteAMFUint32
    - bthread_timer_del
    - butil::intrusive_ptr::Recreate
    - OnPlayable
    - butil::intrusive_ptr::has_data_ever
    - butil::intrusive_ptr::SendAVCMessage
    - load
    - stream_name::empty
    - c_str
    - empty
    - local_side
    - reserve
    - SetFailed
    - policy::RtmpContext*::RemoveTransaction
    - exchange
    - has_data_ever
    - avc_nalu_read_bit
    - AMFOutputStream::good
    - butil::intrusive_ptr::OnStopInternal
    - OnFirstMessage
    - NewSubStream
    - RtmpInfo::set_code
    - SplitVHostFromApp
    - brpc::policy::is_video_frame_type_valid
    - CommonInit
    - brpc::policy::WriteWithoutOvercrowded
    - static_cast<policy::RtmpContext*>
    - SocketMessagePtr::body::push_back
    - butil::endpoint2str
    - butil::Status::OK
    - ShortDebugString
    - OnCuePoint
    - BeginProcessingMessage
    - reset
    - OnClientStreamCreated*::stream::reset
    - policy::RtmpContext*::SendConnectRequest
    - CHECK_NE
    - ErrorCode
    - log_id
    - CallOnSharedObjectMessage
    - OnMetaData
    - substr
    - level
    - PLOG
    - OnClientStreamCreated*::cntl::set_stream_creator
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - StartCancel
    - stream_name
    - next_as_annexb
    - SendControlMessage
    - EndProcessingMessage
    - butil::intrusive_ptr::SendAACMessage
    - parsing_context
    - SocketMessagePtr::size
    - berror
    - publish_name::empty
    - WriteAMFBool
    - SocketMessagePtr::next::reset
    - SocketUniquePtr::release
    - butil::intrusive_ptr::Init
    - set_end
    - butil::intrusive_ptr::SignalError
    - pop_front
    - ReleaseAdditionalReference
    - butil::StringPiece::copy
    - butil::microseconds_from_now
    - CHECK_LT
    - OnUserData
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - hash_code::has_been_set
    - policy::RtmpContext*::set_simplified_rtmp
    - WriteAMFNull
    - butil::intrusive_ptr::swap
    - butil::StringSplitter::length
    - butil::intrusive_ptr::get
    - butil::StringPiece::data
    - OnFailedToCreateStream
    - options
    - brpc::SetTrackMeAddress
    - id
    - WriteAMFNumber
    - WriteAMFObject
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::WriteBigEndian2Bytes
    - butil::intrusive_ptr::SendSharedObjectMessage
    - find
    - ParseRtmpHostAndPort
    - policy::RtmpTransactionHandler*::Cancel
    - description
    - CallOnUserData
    - CallOnMetaData
    - stream_name::c_str
    - bthread_id_unlock_and_destroy
    - PLOG_IF
    - clear
    - brpc::policy::ReadBigEndian4Bytes
    - butil::intrusive_ptr::SendAudioMessage
    - policy::RtmpContext*::only_check_simple_s0s1
    - done
    - butil::intrusive_ptr::SendVideoMessage
    - butil::gettimeofday_us
    - starts_with
    - butil::StringPiece::remove_prefix
    - OnClientStreamCreated*::cntl::set_request_code
    - socket_map
    - set_error
    - push_back
    - fetch1
    - is_server_accepted
    - Failed
    - fd
    - _chan::CallMethod
    - OnAudioMessage
    - CreateSocket
    - RtmpSocketCreator::RtmpSocketCreator
    - CallOnStopIfNeeded
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - brpc::policy::MakeUnsentControlMessage
    - butil::StringSplitter::field
    - butil::BaseIteratorRangeToNumberTraits::max
    - CallOnAudioMessage
    - butil::intrusive_ptr::intrusive_ptr
    - OnClientStreamCreated*::cntl::connection_type
    - CallOnVideoMessage
    - RtmpInfo::set_description
    - policy::RtmpContext*::SetState
    - brpc::AVCDecoderConfigurationRecord::ParseSPS
    - find_avc_annexb_nalu_stop_code
    - butil::intrusive_ptr::rtmp_url
    - connection_type
    - bthread_id_create
    - Init
    - policy::RtmpContext*::RemoveMessageStream
    - butil::StringPiece::clear
    - cutn
    - butil::IOBuf::IOBuf
    - brpc::policy::SendC0C1
    - policy::RtmpContext*::OnConnected
    - OnVideoMessage
    - CallOnCuePoint
    - OnSubStreamStop
    - butil::intrusive_ptr::SendCuePoint
    - code
    - OnStopInternal
    - get
    - OnClientStreamCreated*::cntl::call_id
    - std::string::append
    - size
    - CallOnStop
    - LOG
    - std::string::push_back
    - RtmpInfo::set_level
    - SendMessage
    - butil::intrusive_ptr::is_server_accepted
    - butil::EndPoint
    - policy::RtmpContext*::client_options
    - Write
    - BAIDU_SCOPED_LOCK
    - butil::intrusive_ptr::Destroy
    - remove_suffix
    - std::unique_lock::unlock
    - SignalError
    - std::string::reserve
    - policy::RtmpContext::RtmpContext
    - RtmpInfo::code
    - butil::StringPiece::find_first_of
    - WriteAMFString
    - NotifyOnFailed
    - bthread_timer_add
    - OnClientStreamCreated*::cntl::set_max_retry
    - brpc::policy::WriteBigEndian4Bytes
    - data
    - as_string
    - find_last_of
    - policy::RtmpContext*::SetConnectCallback
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status AVCDecoderConfigurationRecord::Create(const butil::IOBuf&
      buf)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:582,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:583,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:584,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:598,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:603,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:604,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:605,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:607,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:608,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:612,1
    - Dst: ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:621,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:625,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:626,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:629,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:632,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:634,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:635,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:639,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - size
    - AVCDecoderConfigurationRecord::Create
    argTypes:
    - buf
    - buf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 575
    functionDepth: 2
    functionLinenumber: 575
    functionLinenumberEnd: 644
    functionName: brpc::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::substr
    - brpc::policy::ReadBigEndian2Bytes
    - butil::StringPiece::remove_prefix
    - ParseSPS
    - push_back
    - butil::StringPiece::data
    - clear
    - reserve
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - butil::Status::OK
    - butil::Status::ok
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: "void DEFINE_SMALL_ARRAY(char, cont_buf, buf.size(), 64);\n    buf.copy_to(cont_buf,
      buf.size());\n    return Create(cont_buf, buf.size());\n}\n\nbutil::Status AVCDecoderConfigurationRecord::Create(const
      void* data, size_t len)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:650,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:656,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:666,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:674,1
    - Dst: copy
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:689,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:695,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:699,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:703,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:708,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:718,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:724,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:728,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:729,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:732,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:733,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:737,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:740,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:741,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:747,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:761,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:762,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:765,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:766,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:770,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:771,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:775,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:776,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:779,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:780,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:784,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:797,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:801,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:804,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:805,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:808,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:809,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    CyclomaticComplexity: 49
    EdgeCount: 49
    ICount: 113
    argCount: 2
    argNames:
    - ' buf'
    - sps_length
    argTypes:
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 646
    functionDepth: 2
    functionLinenumber: 646
    functionLinenumberEnd: 814
    functionName: brpc::AVCDecoderConfigurationRecord::ParseSPS
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - avc_nalu_read_bit
    - empty
    - avc_nalu_read_uev
    - copy
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status AVCDecoderConfigurationRecord::ParseSPS(\n    const
      butil::StringPiece& buf, size_t sps_length)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' buf'
    - start_code_length
    argTypes:
    - butil::IOBuf
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 836
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 836
    functionName: brpc::find_avc_annexb_nalu_start_code
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool find_avc_annexb_nalu_start_code(const butil::IOBuf& buf,\n                                            size_t*
      start_code_length)"
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 3
    argNames:
    - ' buf'
    - nalu_length_out
    - stop_code_length
    argTypes:
    - butil::IOBuf
    - size_t*
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 872
    functionName: brpc::find_avc_annexb_nalu_stop_code
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void find_avc_annexb_nalu_stop_code(const butil::IOBuf& buf,\n                                           size_t*
      nalu_length_out,\n                                           size_t* stop_code_length)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - data
    - length_size_minus1
    - format
    argTypes:
    - butil::IOBuf*
    - uint32_t
    - AVCNaluFormat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 883
      start: 874
    functionDepth: 0
    functionLinenumber: 874
    functionLinenumberEnd: 883
    functionName: brpc::AVCNaluIterator::AVCNaluIterator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void AVCNaluIterator::AVCNaluIterator(butil::IOBuf* data, uint32_t
      length_size_minus1,\n                                 AVCNaluFormat* format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 886
    functionName: AVCNaluIterator::~AVCNaluIterator()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AVCNaluIterator::~AVCNaluIterator()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:890,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:891,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:894,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:895,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:899,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:900,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:902,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:905,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:908,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 914
    functionName: AVCNaluIterator::operator++()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find_avc_annexb_nalu_start_code
    - next_as_annexb
    - set_end
    - pop_front
    - size
    - next_as_ibmf
    linkageType: ''
    returnType: void
    signature: void AVCNaluIterator::operator++()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:922,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:926,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:927,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:931,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 934
      start: 916
    functionDepth: 1
    functionLinenumber: 916
    functionLinenumberEnd: 934
    functionName: brpc::AVCNaluIterator::next_as_annexb
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find_avc_annexb_nalu_stop_code
    - pop_front
    - empty
    - clear
    - fetch1
    - cutn
    linkageType: ''
    returnType: bool
    signature: bool AVCNaluIterator::next_as_annexb()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:941,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:944,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:945,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:952,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:954,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:955,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:970,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:971,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:974,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 936
    functionDepth: 1
    functionLinenumber: 936
    functionLinenumberEnd: 979
    functionName: brpc::AVCNaluIterator::next_as_ibmf
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - copy_to
    - brpc::policy::ReadBigEndian2Bytes
    - CHECK_NE
    - pop_front
    - empty
    - brpc::policy::ReadBigEndian4Bytes
    - clear
    - fetch1
    - cutn
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool AVCNaluIterator::next_as_ibmf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 992
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 992
    functionName: brpc::RtmpClientOptions::RtmpClientOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClientOptions::RtmpClientOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:999,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1000
    functionName: brpc::RtmpClientImpl::RtmpClientImpl
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpClientImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1002,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 1001
    functionDepth: 0
    functionLinenumber: 1001
    functionLinenumberEnd: 1004
    functionName: ~RtmpClientImpl()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void ~RtmpClientImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1017
    functionDepth: 0
    functionLinenumber: 1017
    functionLinenumberEnd: 1017
    functionName: '& options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions & options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 1018
    functionDepth: 0
    functionLinenumber: 1018
    functionLinenumberEnd: 1018
    functionName: '& socket_map()'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketMap
    signature: SocketMap & socket_map()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1044,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1045,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1048,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1050,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1051,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1052,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1053,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1055,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1061,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1066,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1070,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - s
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1038
    functionDepth: 1
    functionLinenumber: 1038
    functionLinenumberEnd: 1072
    functionName: brpc::RtmpConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::set_simplified_rtmp
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - brpc::policy::SendC0C1
    - policy::RtmpContext*::only_check_simple_s0s1
    - policy::RtmpContext*::SendConnectRequest
    - policy::RtmpContext*::client_options
    - Socket*::parsing_context
    - Socket*::fd
    - static_cast<policy::RtmpContext*>
    - Socket*::remote_side
    - policy::RtmpContext*::SetConnectCallback
    - LOG
    - done
    - policy::RtmpContext*::SetState
    linkageType: ''
    returnType: void
    signature: "void RtmpConnect::StartConnect(\n    const Socket* s, void (*done)(int,
      void*), void* data)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1076,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1080,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1074
    functionDepth: 1
    functionLinenumber: 1074
    functionLinenumberEnd: 1082
    functionName: brpc::RtmpConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Socket*::parsing_context
    - LOG
    - policy::RtmpContext*::OnConnected
    - static_cast<policy::RtmpContext*>
    linkageType: ''
    returnType: void
    signature: void RtmpConnect::StopConnect(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' connect_options'
    argTypes:
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1088
      start: 1086
    functionDepth: 0
    functionLinenumber: 1086
    functionLinenumberEnd: 1088
    functionName: brpc::RtmpSocketCreator::RtmpSocketCreator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpSocketCreator(const RtmpClientOptions& connect_options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1093,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1094,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1090
    functionDepth: 0
    functionLinenumber: 1090
    functionLinenumberEnd: 1095
    functionName: brpc::RtmpSocketCreator::CreateSocket
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<RtmpConnect>
    - get_client_side_messenger
    - policy::RtmpContext::RtmpContext
    linkageType: ''
    returnType: int
    signature: int CreateSocket(const SocketOptions& opt, SocketId* id) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1104,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1105,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' pt'
    - id
    argTypes:
    - butil::EndPoint
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1101
    functionDepth: 0
    functionLinenumber: 1101
    functionLinenumberEnd: 1107
    functionName: brpc::RtmpClientImpl::CreateSocket
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<RtmpConnect>
    - get_client_side_messenger
    - policy::RtmpContext::RtmpContext
    linkageType: ''
    returnType: int
    signature: int RtmpClientImpl::CreateSocket(const butil::EndPoint& pt, SocketId*
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RtmpSocketCreator::RtmpSocketCreator
      Src: /src/brpc/src/brpc/rtmp.cpp:1112,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1118
      start: 1109
    functionDepth: 3
    functionLinenumber: 1109
    functionLinenumberEnd: 1118
    functionName: brpc::RtmpClientImpl::CommonInit
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 4
    functionsReached:
    - RtmpSocketCreator::RtmpSocketCreator
    - LOG
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: int RtmpClientImpl::CommonInit(const RtmpClientOptions& options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1122,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 1120
    functionDepth: 2
    functionLinenumber: 1120
    functionLinenumberEnd: 1130
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 7
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(butil::EndPoint server_addr_and_port,\n                         const
      RtmpClientOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1133,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1141
      start: 1131
    functionDepth: 2
    functionLinenumber: 1131
    functionLinenumberEnd: 1141
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 8
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(const char* server_addr_and_port,\n                         const
      RtmpClientOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1144,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1142
    functionDepth: 2
    functionLinenumber: 1142
    functionLinenumberEnd: 1152
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 9
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(const char* server_addr, int port,\n                         const
      RtmpClientOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpClientImpl::CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1156,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - naming_service_url
    - load_balancer_name
    - ' options'
    argTypes:
    - char*
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1153
    functionDepth: 2
    functionLinenumber: 1153
    functionLinenumberEnd: 1164
    functionName: brpc::RtmpClientImpl::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - brpc::RtmpClientImpl::CommonInit
    - brpc::RtmpClientImpl::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClientImpl::Init(const char* naming_service_url, \n                         const
      char* load_balancer_name,\n                         const RtmpClientOptions&
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1166
    functionDepth: 0
    functionLinenumber: 1166
    functionLinenumberEnd: 1166
    functionName: brpc::RtmpClient::RtmpClient
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClient::RtmpClient()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1167
    functionDepth: 0
    functionLinenumber: 1167
    functionLinenumberEnd: 1167
    functionName: RtmpClient::~RtmpClient()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClient::~RtmpClient()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RtmpClient
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1168
      start: 1168
    functionDepth: 0
    functionLinenumber: 1168
    functionLinenumberEnd: 1168
    functionName: brpc::RtmpClient::RtmpClient
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClient::RtmpClient(const RtmpClient& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - RtmpClient
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1170
    functionDepth: 0
    functionLinenumber: 1170
    functionLinenumberEnd: 1173
    functionName: '& RtmpClient::operator=(const RtmpClient& rhs)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClient
    signature: RtmpClient & RtmpClient::operator=(const RtmpClient& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1175
    functionDepth: 0
    functionLinenumber: 1175
    functionLinenumberEnd: 1182
    functionName: '& RtmpClient::options() const'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - options
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions & RtmpClient::options() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1188,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1191,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1184
    functionDepth: 1
    functionLinenumber: 1184
    functionLinenumberEnd: 1196
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(butil::EndPoint server_addr_and_port,\n                     const
      RtmpClientOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1202,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1205,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1208,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1210
      start: 1198
    functionDepth: 1
    functionLinenumber: 1198
    functionLinenumberEnd: 1210
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(const char* server_addr_and_port,\n                     const
      RtmpClientOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1216,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1219,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1222,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1224
      start: 1212
    functionDepth: 1
    functionLinenumber: 1212
    functionLinenumberEnd: 1224
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(const char* server_addr, int port,\n                     const
      RtmpClientOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1237,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - naming_service_url
    - load_balancer_name
    - ' options'
    argTypes:
    - char*
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1239
      start: 1226
    functionDepth: 1
    functionLinenumber: 1226
    functionLinenumberEnd: 1239
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - LOG
    - RtmpClientImpl::RtmpClientImpl
    - butil::intrusive_ptr::Init
    linkageType: ''
    returnType: int
    signature: "int RtmpClient::Init(const char* naming_service_url, \n                     const
      char* load_balancer_name,\n                     const RtmpClientOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1241
      start: 1241
    functionDepth: 0
    functionLinenumber: 1241
    functionLinenumberEnd: 1241
    functionName: brpc::RtmpClient::initialized
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RtmpClient::initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:1251,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - is_client
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1253
      start: 1243
    functionDepth: 0
    functionLinenumber: 1243
    functionLinenumberEnd: 1253
    functionName: brpc::RtmpStreamBase::RtmpStreamBase
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::RtmpStreamBase(bool is_client)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1255
    functionDepth: 0
    functionLinenumber: 1255
    functionLinenumberEnd: 1256
    functionName: RtmpStreamBase::~RtmpStreamBase()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::~RtmpStreamBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1258
    functionDepth: 0
    functionLinenumber: 1258
    functionLinenumberEnd: 1260
    functionName: brpc::RtmpStreamBase::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1270,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1274,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1276,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1281,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - timestamp
    - message_type
    - ' body'
    argTypes:
    - uint32_t
    - uint8_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1282
      start: 1262
    functionDepth: 1
    functionLinenumber: 1262
    functionLinenumberEnd: 1282
    functionName: brpc::RtmpStreamBase::SendMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - size
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - Write
    linkageType: ''
    returnType: int
    signature: "int RtmpStreamBase::SendMessage(uint32_t timestamp,\n                                uint8_t
      message_type,\n                                const butil::IOBuf& body)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - message_type
    - body
    - size
    argTypes:
    - uint8_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1293
      start: 1284
    functionDepth: 0
    functionLinenumber: 1284
    functionLinenumberEnd: 1293
    functionName: brpc::RtmpStreamBase::SendControlMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Write
    linkageType: ''
    returnType: int
    signature: "int RtmpStreamBase::SendControlMessage(\n    uint8_t message_type,
      const void* body, size_t size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1296,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1300,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1301,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1302,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1304,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1308,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' cuepoint'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1309
      start: 1295
    functionDepth: 2
    functionLinenumber: 1295
    functionLinenumberEnd: 1309
    functionName: brpc::RtmpStreamBase::SendCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendCuePoint(const RtmpCuePoint& cuepoint)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1317,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1318,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1324,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' metadata'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1325
      start: 1311
    functionDepth: 2
    functionLinenumber: 1311
    functionLinenumberEnd: 1325
    functionName: brpc::RtmpStreamBase::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RtmpStreamBase::SendMetaData(const RtmpMetaData& metadata,\n                                 const
      butil::StringPiece& name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1330
      start: 1327
    functionDepth: 1
    functionLinenumber: 1327
    functionLinenumberEnd: 1330
    functionName: brpc::RtmpStreamBase::SendSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendSharedObjectMessage(const RtmpSharedObjectMessage&)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1338,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1346,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1348,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1359,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1361
      start: 1332
    functionDepth: 1
    functionLinenumber: 1332
    functionLinenumberEnd: 1361
    functionName: brpc::RtmpStreamBase::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - Write
    - SocketMessagePtr::body::append
    - SocketMessagePtr::body::push_back
    - size
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAudioMessage(const RtmpAudioMessage& msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1369,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1377,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1379,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1390,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1392,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1393
      start: 1363
    functionDepth: 1
    functionLinenumber: 1363
    functionLinenumberEnd: 1393
    functionName: brpc::RtmpStreamBase::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - Write
    - SocketMessagePtr::body::append
    - size
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAACMessage(const RtmpAACMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1398
      start: 1395
    functionDepth: 1
    functionLinenumber: 1395
    functionLinenumberEnd: 1398
    functionName: brpc::RtmpStreamBase::SendUserMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendUserMessage(void*)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1406,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1410,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1411,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1413,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1414,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1420,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1428,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1429,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1430,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1431
      start: 1400
    functionDepth: 1
    functionLinenumber: 1400
    functionLinenumberEnd: 1431
    functionName: brpc::RtmpStreamBase::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::is_video_frame_type_valid
    - Write
    - SocketMessagePtr::body::append
    - SocketMessagePtr::body::push_back
    - size
    - LOG
    - brpc::policy::is_video_codec_valid
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendVideoMessage(const RtmpVideoMessage& msg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1439,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1444,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1450,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1452,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1461,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1463,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1433
    functionDepth: 1
    functionLinenumber: 1433
    functionLinenumberEnd: 1465
    functionName: brpc::RtmpStreamBase::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::is_video_frame_type_valid
    - Write
    - SocketMessagePtr::body::append
    - size
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAVCMessage(const RtmpAVCMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1469
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1469
    functionName: brpc::RtmpStreamBase::SendStopMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendStopMessage(const butil::StringPiece&)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - e
    argTypes:
    - RtmpObjectEncoding
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1471
    functionDepth: 0
    functionLinenumber: 1471
    functionLinenumberEnd: 1477
    functionName: brpc::RtmpObjectEncoding2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpObjectEncoding2Str(RtmpObjectEncoding e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1481
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1481
    functionName: brpc::RtmpStreamBase::SignalError
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::SignalError()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1483
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1483
    functionName: brpc::RtmpStreamBase::OnFirstMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnFirstMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1486,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1485
    functionDepth: 2
    functionLinenumber: 1485
    functionLinenumberEnd: 1488
    functionName: brpc::RtmpStreamBase::OnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnUserData(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1491,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1493
      start: 1490
    functionDepth: 2
    functionLinenumber: 1490
    functionLinenumberEnd: 1493
    functionName: brpc::RtmpStreamBase::OnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnCuePoint(RtmpCuePoint* cuepoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1499
      start: 1495
    functionDepth: 2
    functionLinenumber: 1495
    functionLinenumberEnd: 1499
    functionName: brpc::RtmpStreamBase::OnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnMetaData(RtmpMetaData* metadata, const butil::StringPiece&
      name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1504
      start: 1501
    functionDepth: 2
    functionLinenumber: 1501
    functionLinenumberEnd: 1504
    functionName: brpc::RtmpStreamBase::OnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnSharedObjectMessage(RtmpSharedObjectMessage*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1508
      start: 1506
    functionDepth: 2
    functionLinenumber: 1506
    functionLinenumberEnd: 1508
    functionName: brpc::RtmpStreamBase::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1512
      start: 1510
    functionDepth: 2
    functionLinenumber: 1510
    functionLinenumberEnd: 1512
    functionName: brpc::RtmpStreamBase::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - LOG
    - brpc::RtmpStreamBase::stream_id
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnVideoMessage(RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1516
      start: 1514
    functionDepth: 0
    functionLinenumber: 1514
    functionLinenumberEnd: 1516
    functionName: brpc::RtmpStreamBase::OnStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnStop()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1522,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1527,1
    - Dst: brpc::RtmpStreamBase::OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1533,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - fun_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1536
      start: 1518
    functionDepth: 1
    functionLinenumber: 1518
    functionLinenumberEnd: 1536
    functionName: brpc::RtmpStreamBase::BeginProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 6
    functionsReached:
    - brpc::RtmpStreamBase::OnFirstMessage
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpStreamBase::BeginProcessingMessage(const char* fun_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1542,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1543,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1545
      start: 1538
    functionDepth: 1
    functionLinenumber: 1538
    functionLinenumberEnd: 1545
    functionName: brpc::RtmpStreamBase::EndProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 6
    functionsReached:
    - std::unique_lock::unlock
    - brpc::RtmpStreamBase::OnStop
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::EndProcessingMessage()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1548,1
    - Dst: brpc::RtmpStreamBase::OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1549,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1550,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1547
    functionDepth: 2
    functionLinenumber: 1547
    functionLinenumberEnd: 1552
    functionName: brpc::RtmpStreamBase::CallOnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::OnUserData
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnUserData(void* data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    - Dst: brpc::RtmpStreamBase::OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1556,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1557,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - obj
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1554
    functionDepth: 2
    functionLinenumber: 1554
    functionLinenumberEnd: 1559
    functionName: brpc::RtmpStreamBase::CallOnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnCuePoint
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnCuePoint(RtmpCuePoint* obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    - Dst: brpc::RtmpStreamBase::OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1563,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - obj
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1566
      start: 1561
    functionDepth: 2
    functionLinenumber: 1561
    functionLinenumberEnd: 1566
    functionName: brpc::RtmpStreamBase::CallOnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnMetaData
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnMetaData(RtmpMetaData* obj, const butil::StringPiece&
      name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    - Dst: brpc::RtmpStreamBase::OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1570,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1571,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1573
      start: 1568
    functionDepth: 2
    functionLinenumber: 1568
    functionLinenumberEnd: 1573
    functionName: brpc::RtmpStreamBase::CallOnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::OnSharedObjectMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnSharedObjectMessage(RtmpSharedObjectMessage*
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    - Dst: brpc::RtmpStreamBase::OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1577,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1578,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1580
      start: 1575
    functionDepth: 2
    functionLinenumber: 1575
    functionLinenumberEnd: 1580
    functionName: brpc::RtmpStreamBase::CallOnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnAudioMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    - Dst: brpc::RtmpStreamBase::OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1584,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1585,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1587
      start: 1582
    functionDepth: 2
    functionLinenumber: 1582
    functionLinenumberEnd: 1587
    functionName: brpc::RtmpStreamBase::CallOnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnVideoMessage
    - brpc::RtmpStreamBase::BeginProcessingMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnVideoMessage(RtmpVideoMessage* msg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1594,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1603,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1604
      start: 1589
    functionDepth: 1
    functionLinenumber: 1589
    functionLinenumberEnd: 1604
    functionName: brpc::RtmpStreamBase::CallOnStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - LOG
    - brpc::RtmpStreamBase::OnStop
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1607,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1607
      start: 1606
    functionDepth: 1
    functionLinenumber: 1606
    functionLinenumberEnd: 1607
    functionName: brpc::RtmpStreamBase::remote_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 14
    functionsReached:
    - brpc::RtmpStreamBase::remote_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpStreamBase::remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1610
      start: 1609
    functionDepth: 1
    functionLinenumber: 1609
    functionLinenumberEnd: 1610
    functionName: brpc::RtmpStreamBase::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - brpc::RtmpStreamBase::local_side
    - butil::EndPoint
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpStreamBase::local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1621,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1623
      start: 1614
    functionDepth: 0
    functionLinenumber: 1614
    functionLinenumberEnd: 1623
    functionName: brpc::RtmpClientStream::RtmpClientStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - reset
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::RtmpClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1627
      start: 1625
    functionDepth: 0
    functionLinenumber: 1625
    functionLinenumberEnd: 1627
    functionName: RtmpClientStream::~RtmpClientStream()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::~RtmpClientStream()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:1632,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1638,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1639,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1640,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1645,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1646,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1647,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1653,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1654,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1629
    functionDepth: 2
    functionLinenumber: 1629
    functionLinenumberEnd: 1665
    functionName: brpc::RtmpClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - StartCancel
    - brpc::RtmpClientStream::OnStopInternal
    - bthread_id_error
    - std::unique_lock::unlock
    - butil::intrusive_ptr::intrusive_ptr
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1673,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1674,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1678,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1683,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1684,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1667
    functionDepth: 2
    functionLinenumber: 1667
    functionLinenumberEnd: 1691
    functionName: brpc::RtmpClientStream::SignalError
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - std::unique_lock::unlock
    - brpc::RtmpClientStream::OnStopInternal
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::SignalError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1698,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1703,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1704,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1705,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1709,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1711,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1719,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: SocketUniquePtr*::get
      Src: /src/brpc/src/brpc/rtmp.cpp:1724,1
    - Dst: SocketUniquePtr*::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1725,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1693
    functionDepth: 3
    functionLinenumber: 1693
    functionLinenumberEnd: 1727
    functionName: brpc::RtmpClientStream::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - CreateSocket
    - SocketUniquePtr::release
    - socket_map
    - get
    - SocketMapKey
    - SocketUniquePtr::ShareStats
    - Controller*::connection_type
    - brpc::SetTrackMeAddress
    - id
    - Controller*::SetFailed
    - SocketUniquePtr*::get
    - SocketUniquePtr*::reset
    linkageType: ''
    returnType: StreamUserData
    signature: "StreamUserData * RtmpClientStream::OnCreatingStream(\n    SocketUniquePtr*
      inout, Controller* cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1732,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1729
    functionDepth: 5
    functionLinenumber: 1729
    functionLinenumberEnd: 1738
    functionName: brpc::RtmpClientStream::RunOnFailed
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - CHECK
    - butil::intrusive_ptr::OnStopInternal
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::RunOnFailed(bthread_id_t id, void* data, int)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1750,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1751,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1758,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1740
    functionDepth: 2
    functionLinenumber: 1740
    functionLinenumberEnd: 1759
    functionName: brpc::RtmpClientStream::OnFailedToCreateStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - std::unique_lock::unlock
    - CHECK
    - brpc::RtmpClientStream::OnStopInternal
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnFailedToCreateStream()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1768,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1769,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1771,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - end_of_rpc
    argTypes:
    - SocketUniquePtr
    - Controller*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1782
      start: 1761
    functionDepth: 1
    functionLinenumber: 1761
    functionLinenumberEnd: 1782
    functionName: brpc::RtmpClientStream::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - remote_side
    - socket_map
    - SocketMapKey
    - SetFailed
    - id
    linkageType: ''
    returnType: void
    signature: "void RtmpClientStream::DestroyStreamUserData(SocketUniquePtr& sending_sock,\n
      \                                            Controller* cntl,\n                                             int
      /*error_code*/,\n                                             bool end_of_rpc)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1786,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1791,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1794,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1795,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1797,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1799,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1802,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1804,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1808,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1817,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1818,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1821,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1822,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1825,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1838,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1842,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1844
      start: 1785
    functionDepth: 3
    functionLinenumber: 1785
    functionLinenumberEnd: 1844
    functionName: brpc::RtmpClientStream::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<RtmpClientStream>
    - bthread_id_create
    - static_cast<policy::RtmpContext*>
    - Controller*::SetFailed
    - policy::RtmpTransactionHandler*::Cancel
    - brpc::RtmpClientStream::OnFailedToCreateStream
    - LOG
    - Controller*::log_id
    - CHECK_LT
    - Controller*::ErrorCode
    - brpc::RtmpClientStream::OnStopInternal
    - CHECK
    - parsing_context
    - std::unique_lock::unlock
    - berror
    - Controller*::Failed
    - NotifyOnFailed
    - butil::BaseIteratorRangeToNumberTraits::max
    - policy::RtmpContext*::RemoveTransaction
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::DestroyStreamCreator(Controller* cntl)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1848,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1851,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1853,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1857,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1858,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1859,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1862,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1876,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1877,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1878,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1880,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1884,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1897,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1901,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1907,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1908,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1910,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1912,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1913
      start: 1846
    functionDepth: 1
    functionLinenumber: 1846
    functionLinenumberEnd: 1913
    functionName: brpc::RtmpClientStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 9
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - brpc::policy::WriteWithoutOvercrowded
    - policy::RtmpContext*::RemoveMessageStream
    - static_cast<policy::RtmpContext*>
    - butil::IOBuf::IOBuf
    - id
    - remote_side
    - get
    - SocketMapKey
    - CallOnStop
    - PLOG
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - butil::IOBuf::size
    - socket_map
    - CHECK
    - parsing_context
    - Failed
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - brpc::policy::MakeUnsentControlMessage
    - WriteAMFString
    - ReleaseAdditionalReference
    - SetFailed
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnStopInternal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1919
      start: 1915
    functionDepth: 0
    functionLinenumber: 1915
    functionLinenumberEnd: 1919
    functionName: brpc::RtmpPlayOptions::RtmpPlayOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpPlayOptions::RtmpPlayOptions()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: stream_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:1926,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1932,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1936,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1940,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1941,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1942,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1943,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1945,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1946,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1947,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1949,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1950,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1963,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1965,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 36
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlayOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1974
      start: 1921
    functionDepth: 1
    functionLinenumber: 1921
    functionLinenumberEnd: 1974
    functionName: brpc::RtmpClientStream::Play
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - stream_id
    - options
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - brpc::policy::WriteBigEndian2Bytes
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - butil::IOBuf::size
    - Write
    - CHECK
    - WriteAMFBool
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - brpc::policy::MakeUnsentControlMessage
    - WriteAMFString
    - stream_name::empty
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Play(const RtmpPlayOptions& opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1981,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1982,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1983,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1984,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1986,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1991,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1992
      start: 1976
    functionDepth: 1
    functionLinenumber: 1976
    functionLinenumberEnd: 1992
    functionName: brpc::RtmpClientStream::Play2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - WriteAMFObject
    - WriteAMFNull
    - SendMessage
    - WriteAMFString
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Play2(const RtmpPlay2Options& opt)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - type
    argTypes:
    - RtmpPublishType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2001
      start: 1994
    functionDepth: 0
    functionLinenumber: 1994
    functionLinenumberEnd: 2001
    functionName: brpc::RtmpPublishType2Str
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpPublishType2Str(RtmpPublishType type)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' str'
    - type
    argTypes:
    - butil::StringPiece
    - RtmpPublishType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2015
      start: 2003
    functionDepth: 0
    functionLinenumber: 2003
    functionLinenumberEnd: 2015
    functionName: brpc::Str2RtmpPublishType
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Str2RtmpPublishType(const butil::StringPiece& str, RtmpPublishType*
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2019,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2023,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2024,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2025,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2026,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2027,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2028,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2030,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - ' name'
    - type
    argTypes:
    - butil::StringPiece
    - RtmpPublishType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2017
    functionDepth: 1
    functionLinenumber: 2017
    functionLinenumberEnd: 2031
    functionName: brpc::RtmpClientStream::Publish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - SendMessage
    - WriteAMFNull
    - WriteAMFString
    - CHECK
    - RtmpPublishType2Str
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: "int RtmpClientStream::Publish(const butil::StringPiece& name,\n                              RtmpPublishType
      type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2034,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2041,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2044,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2045
      start: 2033
    functionDepth: 1
    functionLinenumber: 2033
    functionLinenumberEnd: 2045
    functionName: brpc::RtmpClientStream::Seek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - SendMessage
    - WriteAMFNull
    - WriteAMFString
    - CHECK
    - WriteAMFNumber
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Seek(double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2048,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2055,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2057,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2059,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - pause_or_unpause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2060
      start: 2047
    functionDepth: 1
    functionLinenumber: 2047
    functionLinenumberEnd: 2060
    functionName: brpc::RtmpClientStream::Pause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFUint32
    - SendMessage
    - WriteAMFNull
    - WriteAMFString
    - CHECK
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - WriteAMFBool
    linkageType: ''
    returnType: int
    signature: int RtmpClientStream::Pause(bool pause_or_unpause, double offset_ms)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: brpc::RtmpClientStream::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2070,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2075,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - RtmpInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2078
      start: 2062
    functionDepth: 2
    functionLinenumber: 2062
    functionLinenumberEnd: 2078
    functionName: brpc::RtmpClientStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - publish_name::empty
    - description
    - level
    - code
    - brpc::RtmpClientStream::SignalError
    - stream_id
    - store
    - LOG
    - play_name::empty
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnStatus(const RtmpInfo& info)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2080
    functionDepth: 0
    functionLinenumber: 2080
    functionLinenumberEnd: 2085
    functionName: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpClientStreamOptions::RtmpClientStreamOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2090
      start: 2090
    functionDepth: 0
    functionLinenumber: 2090
    functionLinenumberEnd: 2090
    functionName: brpc::OnClientStreamCreated::CancelBeforeCallMethod
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelBeforeCallMethod()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:2101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2102,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2103,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2110,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2112,1
    - Dst: Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2117,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2118,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2121,1
    - Dst: Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2129,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2130,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2132
      start: 2099
    functionDepth: 1
    functionLinenumber: 2099
    functionLinenumberEnd: 2132
    functionName: brpc::OnClientStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - publish_name::empty
    - Publish
    - SignalError
    - rtmp_url
    - Play
    - options
    - Failed
    - LOG
    - ErrorText
    - play_name::empty
    linkageType: ''
    returnType: void
    signature: void OnClientStreamCreated::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2144,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2151,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2152,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2153,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2154,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2157,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2158,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2159,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2160,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2177,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2179,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2182,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2183,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2186,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - client
    - ' options'
    argTypes:
    - RtmpClient*
    - RtmpClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2190
      start: 2134
    functionDepth: 2
    functionLinenumber: 2134
    functionLinenumberEnd: 2190
    functionName: brpc::RtmpClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - OnClientStreamCreated*::cntl::set_connection_type
    - _chan::CallMethod
    - OnClientStreamCreated*::cntl::set_stream_creator
    - OnClientStreamCreated::OnClientStreamCreated
    - hash_code::has_been_set
    - OnClientStreamCreated*::stream::reset
    - Join
    - OnClientStreamCreated*::cntl::set_request_code
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - brpc::RtmpClientStream::OnStopInternal
    - OnClientStreamCreated*::cntl::set_max_retry
    - OnClientStreamCreated*::cntl::call_id
    - std::unique_lock::unlock
    - OnClientStreamCreated*::cntl::connection_type
    - LOG
    linkageType: ''
    returnType: void
    signature: "void RtmpClientStream::Init(const RtmpClient* client,\n                            const
      RtmpClientStreamOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2196,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2197,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2199,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2201,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2204
      start: 2192
    functionDepth: 1
    functionLinenumber: 2192
    functionLinenumberEnd: 2204
    functionName: brpc::RtmpClientStream::rtmp_url
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - std::string::reserve
    - stream_name
    - std::string::append
    - butil::StringPiece::data
    - options
    - butil::StringPiece::size
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string RtmpClientStream::rtmp_url() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2213
      start: 2208
    functionDepth: 0
    functionLinenumber: 2208
    functionLinenumberEnd: 2213
    functionName: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2227,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2229
      start: 2215
    functionDepth: 0
    functionLinenumber: 2215
    functionLinenumberEnd: 2229
    functionName: brpc::RtmpRetryingClientStream::RtmpRetryingClientStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - reset
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::RtmpRetryingClientStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2235
      start: 2231
    functionDepth: 0
    functionLinenumber: 2231
    functionLinenumberEnd: 2235
    functionName: RtmpRetryingClientStream::~RtmpRetryingClientStream()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::~RtmpRetryingClientStream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2241,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2242,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2244
      start: 2237
    functionDepth: 0
    functionLinenumber: 2237
    functionLinenumberEnd: 2244
    functionName: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached:
    - CallOnStop
    - load
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::CallOnStopIfNeeded()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2247,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2255,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2256,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2258,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2260,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2263,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2266,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2276,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2277
      start: 2246
    functionDepth: 2
    functionLinenumber: 2246
    functionLinenumberEnd: 2277
    functionName: brpc::RtmpRetryingClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - bthread_timer_del
    - butil::intrusive_ptr::Destroy
    - BAIDU_SCOPED_LOCK
    - butil::intrusive_ptr::intrusive_ptr
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2283,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2284,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - sub_stream_creator
    - ' options'
    argTypes:
    - SubStreamCreator*
    - RtmpRetryingClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2297
      start: 2279
    functionDepth: 2
    functionLinenumber: 2279
    functionLinenumberEnd: 2297
    functionName: brpc::RtmpRetryingClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - load
    - brpc::RtmpRetryingClientStream::Recreate
    - LOG
    linkageType: ''
    returnType: void
    signature: "void RtmpRetryingClientStream::Init(\n    SubStreamCreator* sub_stream_creator,\n
      \   const RtmpRetryingClientStreamOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RetryingClientMessageHandler::OnPlayable
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2301
      start: 2299
    functionDepth: 1
    functionLinenumber: 2299
    functionLinenumberEnd: 2301
    functionName: brpc::RetryingClientMessageHandler::OnPlayable
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - brpc::RetryingClientMessageHandler::OnPlayable
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnPlayable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:2304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2305
      start: 2303
    functionDepth: 0
    functionLinenumber: 2303
    functionLinenumberEnd: 2305
    functionName: brpc::RetryingClientMessageHandler::OnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnUserData
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnUserData(void* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - brpc::RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2309
      start: 2307
    functionDepth: 0
    functionLinenumber: 2307
    functionLinenumberEnd: 2309
    functionName: brpc::RetryingClientMessageHandler::OnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnCuePoint
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnCuePoint(brpc::RtmpCuePoint* cuepoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - brpc::RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2313
      start: 2311
    functionDepth: 0
    functionLinenumber: 2311
    functionLinenumberEnd: 2313
    functionName: brpc::RetryingClientMessageHandler::OnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnMetaData
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnMetaData(brpc::RtmpMetaData* metadata,
      const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2317
      start: 2315
    functionDepth: 0
    functionLinenumber: 2315
    functionLinenumberEnd: 2317
    functionName: brpc::RetryingClientMessageHandler::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnAudioMessage
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnAudioMessage(brpc::RtmpAudioMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2319
    functionDepth: 0
    functionLinenumber: 2319
    functionLinenumberEnd: 2321
    functionName: brpc::RetryingClientMessageHandler::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnVideoMessage
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnVideoMessage(brpc::RtmpVideoMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallOnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2325
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2325
    functionName: brpc::RetryingClientMessageHandler::OnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CallOnSharedObjectMessage
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnSharedObjectMessage(RtmpSharedObjectMessage*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RetryingClientMessageHandler::OnSubStreamStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2329
      start: 2327
    functionDepth: 1
    functionLinenumber: 2327
    functionLinenumberEnd: 2329
    functionName: brpc::RetryingClientMessageHandler::OnSubStreamStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - brpc::RetryingClientMessageHandler::OnSubStreamStop
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::OnSubStreamStop(RtmpStreamBase*
      sub_stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - parent
    argTypes:
    - RtmpRetryingClientStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2332
      start: 2331
    functionDepth: 0
    functionLinenumber: 2331
    functionLinenumberEnd: 2332
    functionName: brpc::RetryingClientMessageHandler::RetryingClientMessageHandler
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RetryingClientMessageHandler::RetryingClientMessageHandler(RtmpRetryingClientStream*
      parent)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2335,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2337,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2340,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2346,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2354,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2357,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2365,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2366
      start: 2334
    functionDepth: 1
    functionLinenumber: 2334
    functionLinenumberEnd: 2366
    functionName: brpc::RtmpRetryingClientStream::Recreate
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached:
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - swap
    - butil::gettimeofday_us
    - LaunchSubStream
    - NewSubStream
    - butil::intrusive_ptr::get
    - load
    - BAIDU_SCOPED_LOCK
    - butil::intrusive_ptr::Destroy
    - butil::intrusive_ptr::intrusive_ptr
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Recreate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2373
      start: 2368
    functionDepth: 0
    functionLinenumber: 2368
    functionLinenumberEnd: 2373
    functionName: brpc::RtmpRetryingClientStream::OnRecreateTimer
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::Recreate
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::OnRecreateTimer(void* arg)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2381,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2383,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2387,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2388,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2392,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2397,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: RtmpStreamBase*::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2401,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2402,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2403,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2418,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2424,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2428,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2432,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2435,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2443,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2448,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 41
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2450
      start: 2375
    functionDepth: 3
    functionLinenumber: 2375
    functionLinenumberEnd: 2450
    functionName: brpc::RtmpRetryingClientStream::OnSubStreamStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - swap
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - butil::gettimeofday_us
    - RtmpStreamBase*::is_server_accepted
    - brpc::RtmpRetryingClientStream::Recreate
    - RtmpStreamBase*::has_data_ever
    - load
    - BAIDU_SCOPED_LOCK
    - bthread_timer_add
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - LOG
    - butil::microseconds_from_now
    - butil::intrusive_ptr::intrusive_ptr
    - has_data_ever
    - publish_name::empty
    - play_name::empty
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::OnSubStreamStop(RtmpStreamBase* sub_stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2454,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2459,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2471
      start: 2452
    functionDepth: 1
    functionLinenumber: 2452
    functionLinenumberEnd: 2471
    functionName: brpc::RtmpRetryingClientStream::AcquireStreamToSend
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 7
    functionsReached:
    - is_server_accepted
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int RtmpRetryingClientStream::AcquireStreamToSend(\n    butil::intrusive_ptr<RtmpStreamBase>*
      ptr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2474,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2475,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2478,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' obj'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2479
      start: 2473
    functionDepth: 2
    functionLinenumber: 2473
    functionLinenumberEnd: 2479
    functionName: brpc::RtmpRetryingClientStream::SendCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendCuePoint
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendCuePoint(const RtmpCuePoint& obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2482,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2483,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2486,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' obj'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2487
      start: 2481
    functionDepth: 2
    functionLinenumber: 2481
    functionLinenumberEnd: 2487
    functionName: brpc::RtmpRetryingClientStream::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendMetaData
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendMetaData(const RtmpMetaData& obj,
      const butil::StringPiece& name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2491,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2492,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpSharedObjectMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2496
      start: 2489
    functionDepth: 2
    functionLinenumber: 2489
    functionLinenumberEnd: 2496
    functionName: brpc::RtmpRetryingClientStream::SendSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendSharedObjectMessage
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: "int RtmpRetryingClientStream::SendSharedObjectMessage(\n    const
      RtmpSharedObjectMessage& msg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2499,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2500,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2503,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2504
      start: 2498
    functionDepth: 2
    functionLinenumber: 2498
    functionLinenumberEnd: 2504
    functionName: brpc::RtmpRetryingClientStream::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendAudioMessage
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendAudioMessage(const RtmpAudioMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2508,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2511,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2512
      start: 2506
    functionDepth: 2
    functionLinenumber: 2506
    functionLinenumberEnd: 2512
    functionName: brpc::RtmpRetryingClientStream::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    - butil::intrusive_ptr::SendAACMessage
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendAACMessage(const RtmpAACMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2516,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2519,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2520
      start: 2514
    functionDepth: 2
    functionLinenumber: 2514
    functionLinenumberEnd: 2520
    functionName: brpc::RtmpRetryingClientStream::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SendVideoMessage
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendVideoMessage(const RtmpVideoMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2524,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2527,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2528
      start: 2522
    functionDepth: 2
    functionLinenumber: 2522
    functionLinenumberEnd: 2528
    functionName: brpc::RtmpRetryingClientStream::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendAVCMessage
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    linkageType: ''
    returnType: int
    signature: int RtmpRetryingClientStream::SendAVCMessage(const RtmpAVCMessage&
      msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2533,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2537,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2539
      start: 2530
    functionDepth: 1
    functionLinenumber: 2530
    functionLinenumberEnd: 2539
    functionName: brpc::RtmpRetryingClientStream::StopCurrentStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::SignalError
    - butil::intrusive_ptr::intrusive_ptr
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::StopCurrentStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2541
      start: 2541
    functionDepth: 0
    functionLinenumber: 2541
    functionLinenumberEnd: 2541
    functionName: brpc::RtmpRetryingClientStream::OnPlayable
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::OnPlayable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: brpc::RtmpRetryingClientStream::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2547,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2550,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2551
      start: 2543
    functionDepth: 1
    functionLinenumber: 2543
    functionLinenumberEnd: 2551
    functionName: brpc::RtmpRetryingClientStream::remote_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::EndPoint
    - brpc::RtmpRetryingClientStream::remote_side
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpRetryingClientStream::remote_side() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2555,1
    - Dst: brpc::RtmpRetryingClientStream::local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2557,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2560,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2561
      start: 2553
    functionDepth: 1
    functionLinenumber: 2553
    functionLinenumberEnd: 2561
    functionName: brpc::RtmpRetryingClientStream::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - brpc::RtmpRetryingClientStream::local_side
    - butil::EndPoint
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint RtmpRetryingClientStream::local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2566
      start: 2564
    functionDepth: 0
    functionLinenumber: 2564
    functionLinenumberEnd: 2566
    functionName: brpc::RtmpService::OnPingResponse
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpService::OnPingResponse(const butil::EndPoint&, uint32_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2574
      start: 2568
    functionDepth: 0
    functionLinenumber: 2568
    functionLinenumberEnd: 2574
    functionName: brpc::RtmpServerStream::RtmpServerStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::RtmpServerStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2577,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2578
      start: 2576
    functionDepth: 0
    functionLinenumber: 2576
    functionLinenumberEnd: 2578
    functionName: RtmpServerStream::~RtmpServerStream()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - get_rtmp_bvars
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::~RtmpServerStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2581,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2582
      start: 2580
    functionDepth: 1
    functionLinenumber: 2580
    functionLinenumberEnd: 2582
    functionName: brpc::RtmpServerStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status*::set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2588,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2590,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' opt'
    - status
    - done
    argTypes:
    - RtmpPlayOptions
    - butil::Status*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2593
      start: 2584
    functionDepth: 1
    functionLinenumber: 2584
    functionLinenumberEnd: 2593
    functionName: brpc::RtmpServerStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_name::c_str
    - butil::Status*::set_error
    - stream_id
    - butil::endpoint2str
    linkageType: ''
    returnType: void
    signature: "void RtmpServerStream::OnPlay(const RtmpPlayOptions& opt,\n                              butil::Status*
      status,\n                              google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2596,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2597,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2598
      start: 2595
    functionDepth: 1
    functionLinenumber: 2595
    functionLinenumberEnd: 2598
    functionName: brpc::RtmpServerStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    - ShortDebugString
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnPlay2(const RtmpPlay2Options& opt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status*::set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2605,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2606,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2607,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' name'
    - type
    - status
    - done
    argTypes:
    - std::string
    - RtmpPublishType
    - butil::Status*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2608
      start: 2600
    functionDepth: 1
    functionLinenumber: 2600
    functionLinenumberEnd: 2608
    functionName: brpc::RtmpServerStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - butil::Status*::set_error
    - c_str
    - stream_id
    - RtmpPublishType2Str
    - butil::endpoint2str
    linkageType: ''
    returnType: void
    signature: "void RtmpServerStream::OnPublish(const std::string& name,\n                                 RtmpPublishType
      type,\n                                 butil::Status* status,\n                                 google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2614
      start: 2610
    functionDepth: 1
    functionLinenumber: 2610
    functionLinenumberEnd: 2614
    functionName: brpc::RtmpServerStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::OnSeek(double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - pause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2621
      start: 2616
    functionDepth: 1
    functionLinenumber: 2616
    functionLinenumberEnd: 2621
    functionName: brpc::RtmpServerStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - LOG
    - stream_id
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::OnPause(bool pause, double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2623
      start: 2623
    functionDepth: 0
    functionLinenumber: 2623
    functionLinenumberEnd: 2623
    functionName: brpc::RtmpServerStream::OnSetBufferLength
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnSetBufferLength(uint32_t /*buffer_length_ms*/)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:2632,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2633,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2636,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2649,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2650,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2651,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2657,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2659,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2665,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2667,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2668,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2676,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2681,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2682,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 1
    argNames:
    - ' error_desc'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2684
      start: 2625
    functionDepth: 1
    functionLinenumber: 2625
    functionLinenumberEnd: 2684
    functionName: brpc::RtmpServerStream::SendStopMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFNull
    - RtmpInfo::set_code
    - brpc::policy::WriteWithoutOvercrowded
    - butil::IOBuf::IOBuf
    - remote_side
    - WriteAMFObject
    - PLOG_IF
    - get
    - size
    - LOG_IF
    - RtmpInfo::set_level
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - butil::IOBuf::size
    - WriteAMFUint32
    - RtmpInfo::code
    - WriteAMFString
    - empty
    - data
    - as_string
    - SetFailed
    - RtmpInfo::set_description
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::SendStopMessage(const butil::StringPiece& error_desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2691,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2694
      start: 2688
    functionDepth: 1
    functionLinenumber: 2688
    functionLinenumberEnd: 2694
    functionName: brpc::RtmpServerStream::SendStreamDry
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteBigEndian2Bytes
    - SendControlMessage
    - stream_id
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::SendStreamDry()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2699,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2700,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2701,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2703
      start: 2696
    functionDepth: 5
    functionLinenumber: 2696
    functionLinenumberEnd: 2703
    functionName: brpc::RtmpServerStream::RunOnFailed
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - CHECK
    - butil::intrusive_ptr::OnStopInternal
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::RunOnFailed(bthread_id_t id, void* data, int)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2707,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2710,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2714,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2716,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2717,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2719
      start: 2705
    functionDepth: 1
    functionLinenumber: 2705
    functionLinenumberEnd: 2719
    functionName: brpc::RtmpServerStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - policy::RtmpContext*::RemoveMessageStream
    - static_cast<policy::RtmpContext*>
    - parsing_context
    - CallOnStop
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnStopInternal()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2727,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' url_in'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2730
      start: 2721
    functionDepth: 0
    functionLinenumber: 2721
    functionLinenumberEnd: 2730
    functionName: brpc::RemoveRtmpPrefix
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::StringPiece::remove_prefix
    - starts_with
    - butil::StringPiece::size
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece RemoveRtmpPrefix(const butil::StringPiece& url_in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2733,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2739,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' url_in'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2742
      start: 2732
    functionDepth: 0
    functionLinenumber: 2732
    functionLinenumberEnd: 2742
    functionName: brpc::RemoveProtocolPrefix
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - find
    - butil::StringPiece::size
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece RemoveProtocolPrefix(const butil::StringPiece& url_in)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2747,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2757,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2760,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - ' host_and_port'
    - host
    - port
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2763
      start: 2744
    functionDepth: 0
    functionLinenumber: 2744
    functionLinenumberEnd: 2763
    functionName: brpc::ParseRtmpHostAndPort
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - find
    - substr
    linkageType: ''
    returnType: void
    signature: "void ParseRtmpHostAndPort(const butil::StringPiece& host_and_port,\n
      \                         butil::StringPiece* host,\n                          butil::StringPiece*
      port)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2767,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2770,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2775,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' stream_name_in'
    - query_strings
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2779
      start: 2765
    functionDepth: 1
    functionLinenumber: 2765
    functionLinenumberEnd: 2779
    functionName: brpc::RemoveQueryStrings
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - find
    - butil::StringPiece*::clear
    - substr
    linkageType: ''
    returnType: butil::StringPiece
    signature: "butil::StringPiece RemoveQueryStrings(const butil::StringPiece& stream_name_in,\n
      \                                    butil::StringPiece* query_strings)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2785,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2791,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2797,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2800,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2801,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2804,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2805,1
    - Dst: butil::StringPiece*::find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2807,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2814,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 3
    argNames:
    - ' app_and_vhost'
    - app
    - vhost
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2816
      start: 2782
    functionDepth: 1
    functionLinenumber: 2782
    functionLinenumberEnd: 2816
    functionName: brpc::SplitVHostFromApp
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::StringPiece::starts_with
    - butil::StringPiece::substr
    - butil::StringPiece*::find_last_of
    - butil::StringSplitter::length
    - butil::StringPiece*::remove_suffix
    - find
    - substr
    - butil::StringSplitter::field
    - butil::StringPiece::data
    - butil::StringPiece*::clear
    - butil::StringPiece::size
    - butil::StringPiece*::size
    linkageType: ''
    returnType: void
    signature: "void SplitVHostFromApp(const butil::StringPiece& app_and_vhost,\n
      \                             butil::StringPiece* app,\n                              butil::StringPiece*
      vhost)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2825,1
    - Dst: brpc::RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2827,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2828,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2831,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2834,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2842,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2844,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2845,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2847,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2849,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2852,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 29
    argCount: 6
    argNames:
    - ' rtmp_url_in'
    - host
    - vhost
    - port
    - app
    - stream_name
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    - butil::StringPiece*
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2857
      start: 2818
    functionDepth: 2
    functionLinenumber: 2818
    functionLinenumberEnd: 2857
    functionName: brpc::ParseRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::substr
    - brpc::SplitVHostFromApp
    - butil::StringPiece::remove_prefix
    - brpc::ParseRtmpHostAndPort
    - butil::StringPiece::find_first_of
    - brpc::RemoveRtmpPrefix
    - butil::StringPiece*::clear
    - butil::StringPiece::size
    linkageType: ''
    returnType: void
    signature: "void ParseRtmpURL(const butil::StringPiece& rtmp_url_in,\n                  butil::StringPiece*
      host,\n                  butil::StringPiece* vhost,\n                  butil::StringPiece*
      port,\n                  butil::StringPiece* app,\n                  butil::StringPiece*
      stream_name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2865,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2867,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2868,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2869,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2871,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2872,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2873,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2875,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 4
    argNames:
    - ' host'
    - ' port'
    - ' app'
    - ' stream_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2883
      start: 2859
    functionDepth: 2
    functionLinenumber: 2859
    functionLinenumberEnd: 2883
    functionName: brpc::MakeRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - std::string::append
    - brpc::size
    - data
    - brpc::empty
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: "std::string MakeRtmpURL(const butil::StringPiece& host,\n                        const
      butil::StringPiece& port,\n                        const butil::StringPiece&
      app,\n                        const butil::StringPiece& stream_name)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/http_status_code.cpp:89,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_status_code.cpp:90,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_status_code.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/http_status_code.cpp:95,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 101
    functionName: brpc::InitReasonPhrases
    functionSourceFile: /src/brpc/src/brpc/http_status_code.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - LOG
    - memset
    linkageType: ''
    returnType: void
    signature: void InitReasonPhrases()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/http_status_code.cpp:106,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_status_code.cpp:109,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/http_status_code.cpp:113,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - status_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 116
    functionName: brpc::HttpReasonPhrase
    functionSourceFile: /src/brpc/src/brpc/http_status_code.cpp
    functionUses: 5
    functionsReached:
    - ARRAY_SIZE
    - pthread_once
    - snprintf
    linkageType: ''
    returnType: char
    signature: char *HttpReasonPhrase(int status_code)
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 142
    functionName: brpc::ErrorCodeToStatusCode
    functionSourceFile: /src/brpc/src/brpc/http_status_code.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ErrorCodeToStatusCode(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/http_status_code.cpp:89,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_status_code.cpp:90,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_status_code.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/http_status_code.cpp:95,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 101
    functionName: brpc::InitReasonPhrases
    functionSourceFile: /src/brpc/src/brpc/http_status_code.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - LOG
    - memset
    linkageType: ''
    returnType: void
    signature: void InitReasonPhrases()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/http_status_code.cpp:106,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/http_status_code.cpp:109,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/http_status_code.cpp:113,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - status_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 116
    functionName: brpc::HttpReasonPhrase
    functionSourceFile: /src/brpc/src/brpc/http_status_code.cpp
    functionUses: 5
    functionsReached:
    - ARRAY_SIZE
    - pthread_once
    - snprintf
    linkageType: ''
    returnType: char
    signature: char *HttpReasonPhrase(int status_code)
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 142
    functionName: brpc::ErrorCodeToStatusCode
    functionSourceFile: /src/brpc/src/brpc/http_status_code.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ErrorCodeToStatusCode(int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DereferenceSocket
      Src: /src/brpc/src/brpc/socket_id.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: operator()(Socket* m) const
    functionSourceFile: /src/brpc/src/brpc/socket_id.h
    functionUses: 0
    functionsReached:
    - DereferenceSocket
    linkageType: ''
    returnType: void
    signature: void operator()(Socket* m) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DereferenceSocket
      Src: /src/brpc/src/brpc/socket_id.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: operator()(Socket* m) const
    functionSourceFile: /src/brpc/src/brpc/socket_id.h
    functionUses: 0
    functionsReached:
    - DereferenceSocket
    linkageType: ''
    returnType: void
    signature: void operator()(Socket* m) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: '& MaxConcurrency()'
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AdaptiveMaxConcurrency
    signature: AdaptiveMaxConcurrency & MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: brpc::BaiduMasterService::ignore_eovercrowded
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ignore_eovercrowded()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ignore_eovercrowded
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::BaiduMasterService::set_ignore_eovercrowded
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ignore_eovercrowded(bool ignore_eovercrowded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessRpcRequest
      Src: /src/brpc/src/brpc/baidu_master_service.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Message*
    - ::google::protobuf::Message*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 75
    functionName: brpc::BaiduMasterService::CallMethod
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached:
    - ProcessRpcRequest
    linkageType: ''
    returnType: void
    signature: "void CallMethod(const ::google::protobuf::MethodDescriptor*,\n                    ::google::protobuf::RpcController*
      controller,\n                    const ::google::protobuf::Message* request,\n
      \                   ::google::protobuf::Message* response,\n                    ::google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/baidu_master_service.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::BaiduMasterService::GetDescriptor
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::ServiceDescriptor
    signature: ::google::protobuf::ServiceDescriptor * GetDescriptor() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: "& GetRequestPrototype(\n        const ::google::protobuf::MethodDescriptor*)
      const override"
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: "::google::protobuf::Message & GetRequestPrototype(\n        const
      ::google::protobuf::MethodDescriptor*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: "& GetResponsePrototype(\n        const ::google::protobuf::MethodDescriptor*)
      const override"
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: "::google::protobuf::Message & GetResponsePrototype(\n        const
      ::google::protobuf::MethodDescriptor*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: '& MaxConcurrency()'
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AdaptiveMaxConcurrency
    signature: AdaptiveMaxConcurrency & MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: brpc::BaiduMasterService::ignore_eovercrowded
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ignore_eovercrowded()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ignore_eovercrowded
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::BaiduMasterService::set_ignore_eovercrowded
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ignore_eovercrowded(bool ignore_eovercrowded)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessRpcRequest
      Src: /src/brpc/src/brpc/baidu_master_service.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Message*
    - ::google::protobuf::Message*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 75
    functionName: brpc::BaiduMasterService::CallMethod
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached:
    - ProcessRpcRequest
    linkageType: ''
    returnType: void
    signature: "void CallMethod(const ::google::protobuf::MethodDescriptor*,\n                    ::google::protobuf::RpcController*
      controller,\n                    const ::google::protobuf::Message* request,\n
      \                   ::google::protobuf::Message* response,\n                    ::google::protobuf::Closure*
      done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/baidu_master_service.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::BaiduMasterService::GetDescriptor
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::ServiceDescriptor
    signature: ::google::protobuf::ServiceDescriptor * GetDescriptor() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: "& GetRequestPrototype(\n        const ::google::protobuf::MethodDescriptor*)
      const override"
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: "::google::protobuf::Message & GetRequestPrototype(\n        const
      ::google::protobuf::MethodDescriptor*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 89
    functionName: "& GetResponsePrototype(\n        const ::google::protobuf::MethodDescriptor*)
      const override"
    functionSourceFile: /src/brpc/src/brpc/baidu_master_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: "::google::protobuf::Message & GetResponsePrototype(\n        const
      ::google::protobuf::MethodDescriptor*) const override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::HttpHeader::major_version
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int major_version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: brpc::HttpHeader::minor_version
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int minor_version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/http_header.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - http_major
    - http_minor
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    functionName: brpc::HttpHeader::set_version
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void set_version(int http_major, int http_minor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::major_version
      Src: /src/brpc/src/brpc/http_header.h:64,1
    - Dst: brpc::HttpHeader::minor_version
      Src: /src/brpc/src/brpc/http_header.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: brpc::HttpHeader::before_http_1_1
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::minor_version
    - brpc::HttpHeader::major_version
    linkageType: ''
    returnType: bool
    signature: bool before_http_1_1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::major_version
      Src: /src/brpc/src/brpc/http_header.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::HttpHeader::is_http2
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::major_version
    linkageType: ''
    returnType: bool
    signature: bool is_http2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: '& content_type() const'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & content_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' type'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::HttpHeader::set_content_type
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_content_type(const std::string& type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: brpc::HttpHeader::set_content_type
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_content_type(const char* type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: '& mutable_content_type()'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & mutable_content_type()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/src/brpc/http_header.h:96,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/http_header.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: brpc::HttpHeader::RemoveHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 5
    functionsReached:
    - brpc::HttpHeader::RemoveHeader
    - c_str
    linkageType: ''
    returnType: void
    signature: void RemoveHeader(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/http_header.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 120
    functionName: brpc::HttpHeader::HeaderBegin
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - begin
    linkageType: ''
    returnType: HeaderIterator
    signature: HeaderIterator HeaderBegin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: end
      Src: /src/brpc/src/brpc/http_header.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: brpc::HttpHeader::HeaderEnd
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - end
    linkageType: ''
    returnType: HeaderIterator
    signature: HeaderIterator HeaderEnd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::HttpHeader::HeaderCount
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t HeaderCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: '& uri() const'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: URI
    signature: URI & uri() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: '& uri()'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: URI
    signature: URI & uri()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::HttpHeader::method
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: HttpMethod
    signature: HttpMethod method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - method
    argTypes:
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::HttpHeader::set_method
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method(const HttpMethod method)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: brpc::HttpHeader::status_code
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int status_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& unresolved_path() const'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & unresolved_path() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.h:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 176
    functionName: brpc::HttpHeader::IsSetCookie
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - _header_key_equal
    linkageType: ''
    returnType: bool
    signature: bool IsSetCookie(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.h:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: brpc::HttpHeader::IsCookie
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - _header_key_equal
    linkageType: ''
    returnType: bool
    signature: bool IsCookie(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: brpc::HttpHeader::IsContentType
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - _header_key_equal
    linkageType: ''
    returnType: bool
    signature: bool IsContentType(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/src/brpc/http_header.h:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::HttpHeader::CanFoldedInLine
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::IsSetCookie
    linkageType: ''
    returnType: bool
    signature: bool CanFoldedInLine(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsCookie
      Src: /src/brpc/src/brpc/http_header.h:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 195
    functionName: brpc::HttpHeader::HeaderValueDelimiter
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::IsCookie
    linkageType: ''
    returnType: char
    signature: char * HeaderValueDelimiter(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::HttpHeader::major_version
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int major_version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: brpc::HttpHeader::minor_version
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int minor_version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/http_header.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - http_major
    - http_minor
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    functionName: brpc::HttpHeader::set_version
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - std::make_pair
    linkageType: ''
    returnType: void
    signature: void set_version(int http_major, int http_minor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::major_version
      Src: /src/brpc/src/brpc/http_header.h:64,1
    - Dst: brpc::HttpHeader::minor_version
      Src: /src/brpc/src/brpc/http_header.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: brpc::HttpHeader::before_http_1_1
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::minor_version
    - brpc::HttpHeader::major_version
    linkageType: ''
    returnType: bool
    signature: bool before_http_1_1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::major_version
      Src: /src/brpc/src/brpc/http_header.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::HttpHeader::is_http2
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::major_version
    linkageType: ''
    returnType: bool
    signature: bool is_http2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: '& content_type() const'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & content_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' type'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::HttpHeader::set_content_type
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_content_type(const std::string& type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: brpc::HttpHeader::set_content_type
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_content_type(const char* type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: '& mutable_content_type()'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & mutable_content_type()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::RemoveHeader
      Src: /src/brpc/src/brpc/http_header.h:96,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/http_header.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: brpc::HttpHeader::RemoveHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 6
    functionsReached:
    - brpc::HttpHeader::RemoveHeader
    - c_str
    linkageType: ''
    returnType: void
    signature: void RemoveHeader(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/http_header.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 120
    functionName: brpc::HttpHeader::HeaderBegin
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - begin
    linkageType: ''
    returnType: HeaderIterator
    signature: HeaderIterator HeaderBegin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: end
      Src: /src/brpc/src/brpc/http_header.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: brpc::HttpHeader::HeaderEnd
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - end
    linkageType: ''
    returnType: HeaderIterator
    signature: HeaderIterator HeaderEnd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::HttpHeader::HeaderCount
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t HeaderCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: '& uri() const'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: URI
    signature: URI & uri() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: '& uri()'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: URI
    signature: URI & uri()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::HttpHeader::method
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: HttpMethod
    signature: HttpMethod method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - method
    argTypes:
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::HttpHeader::set_method
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method(const HttpMethod method)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: brpc::HttpHeader::status_code
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int status_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& unresolved_path() const'
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & unresolved_path() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.h:175,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 176
    functionName: brpc::HttpHeader::IsSetCookie
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 3
    functionsReached:
    - _header_key_equal
    linkageType: ''
    returnType: bool
    signature: bool IsSetCookie(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.h:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: brpc::HttpHeader::IsCookie
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 1
    functionsReached:
    - _header_key_equal
    linkageType: ''
    returnType: bool
    signature: bool IsCookie(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: brpc::HttpHeader::IsContentType
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - _header_key_equal
    linkageType: ''
    returnType: bool
    signature: bool IsContentType(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/src/brpc/http_header.h:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::HttpHeader::CanFoldedInLine
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::IsSetCookie
    linkageType: ''
    returnType: bool
    signature: bool CanFoldedInLine(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsCookie
      Src: /src/brpc/src/brpc/http_header.h:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 195
    functionName: brpc::HttpHeader::HeaderValueDelimiter
    functionSourceFile: /src/brpc/src/brpc/http_header.h
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader::IsCookie
    linkageType: ''
    returnType: char
    signature: char * HeaderValueDelimiter(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ~RpcPBMessages()
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RpcPBMessages()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: ~RpcPBMessageFactory()
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: brpc::internal::ArenaOptionsWrapper
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaOptionsWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - options_wrapper
    argTypes:
    - ArenaOptionsWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::internal::ArenaRpcPBMessages
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessages(ArenaOptionsWrapper options_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: brpc::internal::Request
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: brpc::internal::Response
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: brpc::internal::ArenaRpcPBMessageFactory::ArenaRpcPBMessageFactory
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ArenaRpcPBMessages>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:106,1
    - Dst: GetRequestPrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:107,1
    - Dst: GetResponsePrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - ::google::protobuf::Service
    - ::google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 110
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - GetResponsePrototype
    - GetRequestPrototype
    - butil::get_object<ArenaRpcPBMessages>
    linkageType: ''
    returnType: RpcPBMessages
    signature: "RpcPBMessages * Get(const ::google::protobuf::Service& service,\n
      \                      const ::google::protobuf::MethodDescriptor& method) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ArenaRpcPBMessages*>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:113,1
    - Dst: auto::arena::Reset
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:116,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 118
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - auto::arena::Reset
    - butil::return_object
    - static_cast<ArenaRpcPBMessages*>
    linkageType: ''
    returnType: void
    signature: void Return(RpcPBMessages* messages) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: brpc::internal::ArenaOptionsWrapper
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaOptionsWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - options_wrapper
    argTypes:
    - ArenaOptionsWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::internal::ArenaRpcPBMessages
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessages(ArenaOptionsWrapper options_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: brpc::internal::Request
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: brpc::internal::Response
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: brpc::internal::ArenaRpcPBMessageFactory::ArenaRpcPBMessageFactory
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ArenaRpcPBMessages>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:106,1
    - Dst: GetRequestPrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:107,1
    - Dst: GetResponsePrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - ::google::protobuf::Service
    - ::google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 110
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - GetResponsePrototype
    - GetRequestPrototype
    - butil::get_object<ArenaRpcPBMessages>
    linkageType: ''
    returnType: RpcPBMessages
    signature: "RpcPBMessages * Get(const ::google::protobuf::Service& service,\n
      \                      const ::google::protobuf::MethodDescriptor& method) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ArenaRpcPBMessages*>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:113,1
    - Dst: auto::arena::Reset
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:116,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 118
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - auto::arena::Reset
    - butil::return_object
    - static_cast<ArenaRpcPBMessages*>
    linkageType: ''
    returnType: void
    signature: void Return(RpcPBMessages* messages) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::brpc::internal::ArenaRpcPBMessageFactory<StartBlockSize, MaxBlockSize>::ArenaRpcPBMessageFactory<StartBlockSize,
        MaxBlockSize>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 129
    functionName: brpc::GetArenaRpcPBMessageFactory
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 2
    functionsReached:
    - ::brpc::internal::ArenaRpcPBMessageFactory<StartBlockSize, MaxBlockSize>::ArenaRpcPBMessageFactory<StartBlockSize,
      MaxBlockSize>
    linkageType: ''
    returnType: RpcPBMessageFactory
    signature: RpcPBMessageFactory * GetArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetArenaRpcPBMessageFactory
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: RpcPBMessageFactory* GetArenaRpcPBMessageFactory()
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - brpc::GetArenaRpcPBMessageFactory
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE RpcPBMessageFactory* GetArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ~RpcPBMessages()
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RpcPBMessages()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: ~RpcPBMessageFactory()
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: brpc::internal::ArenaOptionsWrapper
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaOptionsWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - options_wrapper
    argTypes:
    - ArenaOptionsWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::internal::ArenaRpcPBMessages
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessages(ArenaOptionsWrapper options_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: brpc::internal::Request
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: brpc::internal::Response
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: brpc::internal::ArenaRpcPBMessageFactory::ArenaRpcPBMessageFactory
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ArenaRpcPBMessages>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:106,1
    - Dst: GetRequestPrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:107,1
    - Dst: GetResponsePrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - ::google::protobuf::Service
    - ::google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 110
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - GetResponsePrototype
    - GetRequestPrototype
    - butil::get_object<ArenaRpcPBMessages>
    linkageType: ''
    returnType: RpcPBMessages
    signature: "RpcPBMessages * Get(const ::google::protobuf::Service& service,\n
      \                      const ::google::protobuf::MethodDescriptor& method) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ArenaRpcPBMessages*>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:113,1
    - Dst: auto::arena::Reset
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:116,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 118
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - auto::arena::Reset
    - butil::return_object
    - static_cast<ArenaRpcPBMessages*>
    linkageType: ''
    returnType: void
    signature: void Return(RpcPBMessages* messages) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: brpc::internal::ArenaOptionsWrapper
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaOptionsWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - options_wrapper
    argTypes:
    - ArenaOptionsWrapper
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: brpc::internal::ArenaRpcPBMessages
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessages(ArenaOptionsWrapper options_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 85
    functionName: brpc::internal::Request
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: brpc::internal::Response
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: brpc::internal::ArenaRpcPBMessageFactory::ArenaRpcPBMessageFactory
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ArenaRpcPBMessages>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:106,1
    - Dst: GetRequestPrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:107,1
    - Dst: GetResponsePrototype
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - ::google::protobuf::Service
    - ::google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 110
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - GetResponsePrototype
    - GetRequestPrototype
    - butil::get_object<ArenaRpcPBMessages>
    linkageType: ''
    returnType: RpcPBMessages
    signature: "RpcPBMessages * Get(const ::google::protobuf::Service& service,\n
      \                      const ::google::protobuf::MethodDescriptor& method) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ArenaRpcPBMessages*>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:113,1
    - Dst: auto::arena::Reset
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:116,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 118
    functionName: brpc::internal::ArenaRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - auto::arena::Reset
    - butil::return_object
    - static_cast<ArenaRpcPBMessages*>
    linkageType: ''
    returnType: void
    signature: void Return(RpcPBMessages* messages) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::brpc::internal::ArenaRpcPBMessageFactory<StartBlockSize, MaxBlockSize>::ArenaRpcPBMessageFactory<StartBlockSize,
        MaxBlockSize>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 129
    functionName: brpc::GetArenaRpcPBMessageFactory
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 3
    functionsReached:
    - ::brpc::internal::ArenaRpcPBMessageFactory<StartBlockSize, MaxBlockSize>::ArenaRpcPBMessageFactory<StartBlockSize,
      MaxBlockSize>
    linkageType: ''
    returnType: RpcPBMessageFactory
    signature: RpcPBMessageFactory * GetArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetArenaRpcPBMessageFactory<256, 8192>
      Src: /src/brpc/src/brpc/rpc_pb_message_factory.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: RpcPBMessageFactory* GetArenaRpcPBMessageFactory()
    functionSourceFile: /src/brpc/src/brpc/rpc_pb_message_factory.h
    functionUses: 0
    functionsReached:
    - GetArenaRpcPBMessageFactory<256, 8192>
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE RpcPBMessageFactory* GetArenaRpcPBMessageFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ~Interceptor()
    functionSourceFile: /src/brpc/src/brpc/interceptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Interceptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: ~Interceptor()
    functionSourceFile: /src/brpc/src/brpc/interceptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Interceptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/redis.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: '& operator=(const RedisRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: RedisRequest
    signature: RedisRequest & operator=(const RedisRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - format
    - a1
    argTypes:
    - char*
    - A1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 2
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - format
    - a1
    - a2
    argTypes:
    - char*
    - A1
    - A2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 81
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - format
    - a1
    - a2
    - a3
    argTypes:
    - char*
    - A1
    - A2
    - A3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 85
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - format
    - a1
    - a2
    - a3
    - a4
    argTypes:
    - char*
    - A1
    - A2
    - A3
    - A4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3, A4 a4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - format
    - a1
    - a2
    - a3
    - a4
    - a5
    argTypes:
    - char*
    - A1
    - A2
    - A3
    - A4
    - A5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 93
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3, A4 a4, A5
      a5)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - format
    - a1
    - a2
    - a3
    - a4
    - a5
    - a6
    argTypes:
    - char*
    - A1
    - A2
    - A3
    - A4
    - A5
    - A6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 97
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3, A4 a4, A5
      a5, A6 a6)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::RedisRequest::command_size
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int command_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::RedisRequest::has_error
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: brpc::RedisRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/redis.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: '& operator=(const RedisResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: RedisResponse
    signature: RedisResponse & operator=(const RedisResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: brpc::RedisResponse::reply_size
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int reply_size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.h:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 157
    functionName: '& reply(int index) const'
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached:
    - reply_size
    linkageType: ''
    returnType: RedisReply
    signature: RedisReply & reply(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::RedisResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 196
    functionName: ~RedisService()
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RedisService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisService*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 223
    functionName: brpc::RedisConnContext::RedisConnContext
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisConnContext(const RedisService* rs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: brpc::RedisConnContext::get_session
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Destroyable
    signature: Destroyable * get_session()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: ~RedisCommandHandler()
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RedisCommandHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 275
    functionName: brpc::RedisCommandHandler::Run
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RedisCommandHandlerResult
    signature: "RedisCommandHandlerResult Run(const std::vector<butil::StringPiece>&
      args,\n                                          brpc::RedisReply* output,\n
      \                                         bool flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandHandler::Run
      Src: /src/brpc/src/brpc/redis.h:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 281
    functionName: brpc::RedisCommandHandler::Run
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 1
    functionsReached:
    - brpc::RedisCommandHandler::Run
    linkageType: ''
    returnType: RedisCommandHandlerResult
    signature: "RedisCommandHandlerResult Run(RedisConnContext* ctx, \n                                          const
      std::vector<butil::StringPiece>& args,\n                                          brpc::RedisReply*
      output,\n                                          bool flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/redis.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: '& operator=(const RedisRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: RedisRequest
    signature: RedisRequest & operator=(const RedisRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - format
    - a1
    argTypes:
    - char*
    - A1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 2
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - format
    - a1
    - a2
    argTypes:
    - char*
    - A1
    - A2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 81
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - format
    - a1
    - a2
    - a3
    argTypes:
    - char*
    - A1
    - A2
    - A3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 85
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - format
    - a1
    - a2
    - a3
    - a4
    argTypes:
    - char*
    - A1
    - A2
    - A3
    - A4
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3, A4 a4)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 6
    argNames:
    - format
    - a1
    - a2
    - a3
    - a4
    - a5
    argTypes:
    - char*
    - A1
    - A2
    - A3
    - A4
    - A5
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 92
    functionDepth: 2
    functionLinenumber: 92
    functionLinenumberEnd: 93
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3, A4 a4, A5
      a5)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisRequest::AddCommandWithArgs
      Src: /src/brpc/src/brpc/redis.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - format
    - a1
    - a2
    - a3
    - a4
    - a5
    - a6
    argTypes:
    - char*
    - A1
    - A2
    - A3
    - A4
    - A5
    - A6
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 97
    functionName: brpc::RedisRequest::AddCommand
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 20
    functionsReached:
    - brpc::RedisRequest::AddCommandWithArgs
    linkageType: ''
    returnType: bool
    signature: bool AddCommand(const char* format, A1 a1, A2 a2, A3 a3, A4 a4, A5
      a5, A6 a6)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: brpc::RedisRequest::command_size
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int command_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::RedisRequest::has_error
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: brpc::RedisRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/redis.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: '& operator=(const RedisResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: RedisResponse
    signature: RedisResponse & operator=(const RedisResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: brpc::RedisResponse::reply_size
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int reply_size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/redis.h:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 157
    functionName: '& reply(int index) const'
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached:
    - reply_size
    linkageType: ''
    returnType: RedisReply
    signature: RedisReply & reply(int index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::RedisResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 196
    functionName: ~RedisService()
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RedisService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rs
    argTypes:
    - RedisService*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 223
    functionName: brpc::RedisConnContext::RedisConnContext
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisConnContext(const RedisService* rs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: brpc::RedisConnContext::get_session
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Destroyable
    signature: Destroyable * get_session()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: ~RedisCommandHandler()
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RedisCommandHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' args'
    - output
    - flush_batched
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 275
    functionName: brpc::RedisCommandHandler::Run
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: RedisCommandHandlerResult
    signature: "RedisCommandHandlerResult Run(const std::vector<butil::StringPiece>&
      args,\n                                          brpc::RedisReply* output,\n
      \                                         bool flush_batched)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandHandler::Run
      Src: /src/brpc/src/brpc/redis.h:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - output
    - flush_batched
    argTypes:
    - RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 281
    functionName: brpc::RedisCommandHandler::Run
    functionSourceFile: /src/brpc/src/brpc/redis.h
    functionUses: 2
    functionsReached:
    - brpc::RedisCommandHandler::Run
    linkageType: ''
    returnType: RedisCommandHandlerResult
    signature: "RedisCommandHandlerResult Run(RedisConnContext* ctx, \n                                          const
      std::vector<butil::StringPiece>& args,\n                                          brpc::RedisReply*
      output,\n                                          bool flush_batched)"
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 43
    functionName: brpc::RedisReplyTypeToString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RedisReplyTypeToString(RedisReplyType type)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:50,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:52,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:54,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:56,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:59,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:60,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:61,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:64,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:65,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:66,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:69,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:71,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:73,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:77,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:78,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:79,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/redis_reply.cpp:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:89,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.cpp:92,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 48
    argCount: 1
    argNames:
    - appender
    argTypes:
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 94
    functionName: brpc::RedisReply::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBufAppender*::push_back
    - butil::IOBufAppender*::append
    - butil::IOBufAppender*::append_decimal
    - CHECK
    - LOG
    - brpc::RedisReply::SerializeTo
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::SerializeTo(butil::IOBufAppender* appender)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:102,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_reply.cpp:114,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:122,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/redis_reply.cpp:123,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:124,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/redis_reply.cpp:125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:126,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:132,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:137,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:142,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/redis_reply.cpp:145,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:145,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_reply.cpp:155,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:157,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_reply.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:164,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:168,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:183,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:189,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:196,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:197,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:202,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:205,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:206,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:215,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:222,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:238,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:245,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:249,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:251,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:271,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 144
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 275
    functionName: brpc::RedisReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - strtoll
    - brpc::RedisReply::size
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBuf::copy_to_cstr
    - copy_to
    - allocate
    - butil::IOBuf::size
    - RedisReply::RedisReply
    - butil::BasicStringPiece::BasicStringPiece
    - CHECK_EQ
    - pop_front
    - cut_until
    - fetch1
    - cutn
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisReply::ConsumePartialIOBuf(butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 280
    functionName: brpc::RedisStringPrinter::RedisStringPrinter
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisStringPrinter(const char* str, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/redis_reply.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' printer'
    argTypes:
    - std::ostream
    - RedisStringPrinter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: '&

      operator<<(std::ostream& os, const RedisStringPrinter& printer)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: 'std::ostream &

      operator<<(std::ostream& os, const RedisStringPrinter& printer)'
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:294,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:298,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:298,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:305,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:309,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:309,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:315,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 318
    functionName: brpc::RedisStringPrinter::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached:
    - size
    - butil::BasicStringPiece::BasicStringPiece
    - data
    linkageType: ''
    returnType: void
    signature: void RedisStringPrinter::Print(std::ostream& os) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:326,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:328,1
    - Dst: brpc::RedisReply::Print
      Src: /src/brpc/src/brpc/redis_reply.cpp:338,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:353,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:355,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 362
    functionName: brpc::RedisReply::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisReply::Print
    - RedisStringPrinter
    linkageType: ''
    returnType: void
    signature: void RedisReply::Print(std::ostream& os) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:371,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:375,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:381,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:402,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:404,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:406,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:409,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 414
    functionName: brpc::RedisReply::CopyFromDifferentArena
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 3
    functionsReached:
    - allocate
    - RedisReply::RedisReply
    - brpc::RedisReply::CopyFromDifferentArena
    - memcpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void RedisReply::CopyFromDifferentArena(const RedisReply& other)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:422,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:430,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:434,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 438
    functionName: brpc::RedisReply::SetArray
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 2
    functionsReached:
    - allocate
    - RedisReply::RedisReply
    - LOG
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetArray(int size)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.cpp:442,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:444,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:446,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:446,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:449,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:451,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:454,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:454,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' str'
    - type
    argTypes:
    - butil::StringPiece
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 440
    functionDepth: 2
    functionLinenumber: 440
    functionLinenumberEnd: 460
    functionName: brpc::RedisReply::SetStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - brpc::RedisReply::size
    - allocate
    - brpc::RedisReply::data
    - brpc::RedisReply::Reset
    - memcpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetStringImpl(const butil::StringPiece& str, RedisReplyType
      type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: va_copy
      Src: /src/brpc/src/brpc/redis_reply.cpp:464,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_reply.cpp:466,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:469,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:472,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_reply.cpp:475,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/redis_reply.cpp:476,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:477,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - fmt
    - args
    - type
    argTypes:
    - char*
    - va_list
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 462
    functionDepth: 3
    functionLinenumber: 462
    functionLinenumberEnd: 479
    functionName: brpc::RedisReply::FormatStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - std::string::reserve
    - vsnprintf
    - va_copy
    - butil::string_vappendf
    - brpc::RedisReply::SetStringImpl
    - LOG
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatStringImpl(const char* fmt, va_list args, RedisReplyType
      type)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 43
    functionName: brpc::RedisReplyTypeToString
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RedisReplyTypeToString(RedisReplyType type)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:50,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:52,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:54,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:56,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:59,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:60,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:61,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:64,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:65,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:66,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:69,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:71,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:73,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:77,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:78,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:79,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/redis_reply.cpp:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:89,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.cpp:92,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 48
    argCount: 1
    argNames:
    - appender
    argTypes:
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 94
    functionName: brpc::RedisReply::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBufAppender*::push_back
    - butil::IOBufAppender*::append
    - butil::IOBufAppender*::append_decimal
    - CHECK
    - LOG
    - brpc::RedisReply::SerializeTo
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::SerializeTo(butil::IOBufAppender* appender)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:102,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_reply.cpp:114,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:122,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/redis_reply.cpp:123,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:124,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/redis_reply.cpp:125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:126,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:132,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:137,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:142,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/redis_reply.cpp:145,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:145,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_reply.cpp:155,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:157,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_reply.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:164,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:168,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:183,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:189,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:196,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:197,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:202,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:205,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:206,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:215,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:222,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:229,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:238,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:245,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:249,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:251,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:271,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 144
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 275
    functionName: brpc::RedisReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 7
    functionsReached:
    - strtoll
    - brpc::RedisReply::size
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBuf::copy_to_cstr
    - copy_to
    - allocate
    - butil::IOBuf::size
    - RedisReply::RedisReply
    - butil::BasicStringPiece::BasicStringPiece
    - CHECK_EQ
    - pop_front
    - cut_until
    - fetch1
    - cutn
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisReply::ConsumePartialIOBuf(butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 280
    functionName: brpc::RedisStringPrinter::RedisStringPrinter
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisStringPrinter(const char* str, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/redis_reply.cpp:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' printer'
    argTypes:
    - std::ostream
    - RedisStringPrinter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: '&

      operator<<(std::ostream& os, const RedisStringPrinter& printer)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: 'std::ostream &

      operator<<(std::ostream& os, const RedisStringPrinter& printer)'
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:294,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:298,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:298,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:305,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:309,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:309,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:315,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 318
    functionName: brpc::RedisStringPrinter::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached:
    - size
    - butil::BasicStringPiece::BasicStringPiece
    - data
    linkageType: ''
    returnType: void
    signature: void RedisStringPrinter::Print(std::ostream& os) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:326,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:328,1
    - Dst: brpc::RedisReply::Print
      Src: /src/brpc/src/brpc/redis_reply.cpp:338,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:353,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:355,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 362
    functionName: brpc::RedisReply::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::Print
    - RedisStringPrinter
    linkageType: ''
    returnType: void
    signature: void RedisReply::Print(std::ostream& os) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:371,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:375,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:381,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:402,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:404,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:406,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:409,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 414
    functionName: brpc::RedisReply::CopyFromDifferentArena
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 4
    functionsReached:
    - allocate
    - RedisReply::RedisReply
    - brpc::RedisReply::CopyFromDifferentArena
    - memcpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void RedisReply::CopyFromDifferentArena(const RedisReply& other)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:422,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:430,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:434,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 438
    functionName: brpc::RedisReply::SetArray
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 2
    functionsReached:
    - allocate
    - RedisReply::RedisReply
    - LOG
    - brpc::RedisReply::Reset
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetArray(int size)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::Reset
      Src: /src/brpc/src/brpc/redis_reply.cpp:442,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:444,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:446,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:446,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:449,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:451,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:454,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:454,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' str'
    - type
    argTypes:
    - butil::StringPiece
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 440
    functionDepth: 2
    functionLinenumber: 440
    functionLinenumberEnd: 460
    functionName: brpc::RedisReply::SetStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 7
    functionsReached:
    - brpc::RedisReply::size
    - allocate
    - brpc::RedisReply::data
    - brpc::RedisReply::Reset
    - memcpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void RedisReply::SetStringImpl(const butil::StringPiece& str, RedisReplyType
      type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: va_copy
      Src: /src/brpc/src/brpc/redis_reply.cpp:464,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_reply.cpp:466,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:469,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:472,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_reply.cpp:475,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/redis_reply.cpp:476,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:477,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - fmt
    - args
    - type
    argTypes:
    - char*
    - va_list
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 462
    functionDepth: 3
    functionLinenumber: 462
    functionLinenumberEnd: 479
    functionName: brpc::RedisReply::FormatStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - std::string::reserve
    - vsnprintf
    - va_copy
    - butil::string_vappendf
    - brpc::RedisReply::SetStringImpl
    - LOG
    - va_end
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatStringImpl(const char* fmt, va_list args, RedisReplyType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SharedLoadBalancer*>
      Src: /src/brpc/src/brpc/load_balancer.cpp:38,1
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/load_balancer.cpp:38,1
    - Dst: DescribeOptions
      Src: /src/brpc/src/brpc/load_balancer.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: brpc::SharedLoadBalancer::DescribeLB
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DescribeOptions
    - static_cast<SharedLoadBalancer*>
    - brpc::SharedLoadBalancer::Describe
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::DescribeLB(std::ostream& os, void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/load_balancer.cpp:43,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/load_balancer.cpp:51,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.cpp:51,1
    - Dst: expose
      Src: /src/brpc/src/brpc/load_balancer.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 55
    functionName: brpc::SharedLoadBalancer::ExposeLB
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 2
    functionsReached:
    - unlock
    - fetch_add
    - snprintf
    - expose
    - lock
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::ExposeLB()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: brpc::SharedLoadBalancer::SharedLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::SharedLoadBalancer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/brpc/load_balancer.cpp:65,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/load_balancer.cpp:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: SharedLoadBalancer::~SharedLoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::~SharedLoadBalancer()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::ParseParameters
      Src: /src/brpc/src/brpc/load_balancer.cpp:75,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:76,1
    - Dst: LoadBalancerExtension
      Src: /src/brpc/src/brpc/load_balancer.cpp:79,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/load_balancer.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:81,1
    - Dst: LoadBalancer*::New
      Src: /src/brpc/src/brpc/load_balancer.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:86,1
    - Dst: brpc::SharedLoadBalancer::ExposeLB
      Src: /src/brpc/src/brpc/load_balancer.cpp:90,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - lb_protocol
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 93
    functionName: brpc::SharedLoadBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 4
    functionsReached:
    - LoadBalancer*::New
    - std::string::c_str
    - brpc::SharedLoadBalancer::ExposeLB
    - brpc::SharedLoadBalancer::ParseParameters
    - LoadBalancerExtension
    - LOG
    linkageType: ''
    returnType: int
    signature: int SharedLoadBalancer::Init(const char* lb_protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/load_balancer.cpp:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 102
    functionName: brpc::SharedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::Describe
    linkageType: ''
    returnType: void
    signature: "void SharedLoadBalancer::Describe(std::ostream& os,\n                                  const
      DescribeOptions& options)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/load_balancer.cpp:107,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/load_balancer.cpp:108,1
    - Dst: empty
      Src: /src/brpc/src/brpc/load_balancer.cpp:109,1
    - Dst: find
      Src: /src/brpc/src/brpc/load_balancer.cpp:113,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:115,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:115,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:117,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:117,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:118,1
    - Dst: substr
      Src: /src/brpc/src/brpc/load_balancer.cpp:119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - ' lb_protocol'
    - lb_name
    - lb_params
    argTypes:
    - butil::StringPiece
    - std::string*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 124
    functionName: brpc::SharedLoadBalancer::ParseParameters
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 1
    functionsReached:
    - std::string*::clear
    - find
    - size
    - substr
    - empty
    - data
    - std::string*::append
    - butil::StringPiece*::clear
    linkageType: ''
    returnType: bool
    signature: "bool SharedLoadBalancer::ParseParameters(const butil::StringPiece&
      lb_protocol,\n                                         std::string* lb_name,\n
      \                                        butil::StringPiece* lb_params)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SharedLoadBalancer*>
      Src: /src/brpc/src/brpc/load_balancer.cpp:38,1
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/load_balancer.cpp:38,1
    - Dst: DescribeOptions
      Src: /src/brpc/src/brpc/load_balancer.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 2
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: brpc::SharedLoadBalancer::DescribeLB
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DescribeOptions
    - static_cast<SharedLoadBalancer*>
    - brpc::SharedLoadBalancer::Describe
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::DescribeLB(std::ostream& os, void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/load_balancer.cpp:43,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/load_balancer.cpp:51,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.cpp:51,1
    - Dst: expose
      Src: /src/brpc/src/brpc/load_balancer.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 55
    functionName: brpc::SharedLoadBalancer::ExposeLB
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 3
    functionsReached:
    - unlock
    - fetch_add
    - snprintf
    - expose
    - lock
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::ExposeLB()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: brpc::SharedLoadBalancer::SharedLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::SharedLoadBalancer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/brpc/load_balancer.cpp:65,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/load_balancer.cpp:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: SharedLoadBalancer::~SharedLoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void SharedLoadBalancer::~SharedLoadBalancer()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::ParseParameters
      Src: /src/brpc/src/brpc/load_balancer.cpp:75,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:76,1
    - Dst: LoadBalancerExtension
      Src: /src/brpc/src/brpc/load_balancer.cpp:79,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/load_balancer.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:81,1
    - Dst: LoadBalancer*::New
      Src: /src/brpc/src/brpc/load_balancer.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:86,1
    - Dst: brpc::SharedLoadBalancer::ExposeLB
      Src: /src/brpc/src/brpc/load_balancer.cpp:90,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - lb_protocol
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 93
    functionName: brpc::SharedLoadBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 4
    functionsReached:
    - LoadBalancer*::New
    - std::string::c_str
    - brpc::SharedLoadBalancer::ExposeLB
    - brpc::SharedLoadBalancer::ParseParameters
    - LoadBalancerExtension
    - LOG
    linkageType: ''
    returnType: int
    signature: int SharedLoadBalancer::Init(const char* lb_protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/load_balancer.cpp:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 102
    functionName: brpc::SharedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 4
    functionsReached:
    - brpc::SharedLoadBalancer::Describe
    linkageType: ''
    returnType: void
    signature: "void SharedLoadBalancer::Describe(std::ostream& os,\n                                  const
      DescribeOptions& options)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/load_balancer.cpp:107,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/load_balancer.cpp:108,1
    - Dst: empty
      Src: /src/brpc/src/brpc/load_balancer.cpp:109,1
    - Dst: find
      Src: /src/brpc/src/brpc/load_balancer.cpp:113,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:115,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:115,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:117,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:117,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:118,1
    - Dst: substr
      Src: /src/brpc/src/brpc/load_balancer.cpp:119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - ' lb_protocol'
    - lb_name
    - lb_params
    argTypes:
    - butil::StringPiece
    - std::string*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 124
    functionName: brpc::SharedLoadBalancer::ParseParameters
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::string*::clear
    - find
    - size
    - substr
    - empty
    - data
    - std::string*::append
    - butil::StringPiece*::clear
    linkageType: ''
    returnType: bool
    signature: "bool SharedLoadBalancer::ParseParameters(const butil::StringPiece&
      lb_protocol,\n                                         std::string* lb_name,\n
      \                                        butil::StringPiece* lb_params)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:30,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:39,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - type
    - handler
    argTypes:
    - ChecksumType
    - ChecksumHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 44
    functionName: brpc::RegisterChecksumHandler
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int RegisterChecksumHandler(ChecksumType type, ChecksumHandler handler)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - type
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 58
    functionName: brpc::FindChecksumHandler
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: ChecksumHandler
    signature: ChecksumHandler * FindChecksumHandler(ChecksumType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindChecksumHandler
      Src: /src/brpc/src/brpc/checksum.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 66
    functionName: brpc::ChecksumTypeToCStr
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindChecksumHandler
    linkageType: ''
    returnType: char
    signature: char * ChecksumTypeToCStr(ChecksumType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ChecksumHandler>*::clear
      Src: /src/brpc/src/brpc/checksum.cpp:69,1
    - Dst: std::vector<ChecksumHandler>*::push_back
      Src: /src/brpc/src/brpc/checksum.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<ChecksumHandler>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 75
    functionName: brpc::ListChecksumHandler
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 2
    functionsReached:
    - std::vector<ChecksumHandler>*::push_back
    - std::vector<ChecksumHandler>*::clear
    linkageType: ''
    returnType: void
    signature: void ListChecksumHandler(std::vector<ChecksumHandler>* vec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindChecksumHandler
      Src: /src/brpc/src/brpc/checksum.cpp:82,1
    - Dst: ChecksumHandler*::Compute
      Src: /src/brpc/src/brpc/checksum.cpp:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' in'
    - checksum_type
    argTypes:
    - ChecksumIn
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 86
    functionName: brpc::ComputeDataChecksum
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindChecksumHandler
    - ChecksumHandler*::Compute
    linkageType: ''
    returnType: void
    signature: void ComputeDataChecksum(const ChecksumIn& in, ChecksumType checksum_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindChecksumHandler
      Src: /src/brpc/src/brpc/checksum.cpp:93,1
    - Dst: ChecksumHandler*::Verify
      Src: /src/brpc/src/brpc/checksum.cpp:95,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' in'
    - checksum_type
    argTypes:
    - ChecksumIn
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 89
    functionDepth: 2
    functionLinenumber: 89
    functionLinenumberEnd: 98
    functionName: brpc::VerifyDataChecksum
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindChecksumHandler
    - ChecksumHandler*::Verify
    linkageType: ''
    returnType: bool
    signature: bool VerifyDataChecksum(const ChecksumIn& in, ChecksumType checksum_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:30,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:39,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - type
    - handler
    argTypes:
    - ChecksumType
    - ChecksumHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 44
    functionName: brpc::RegisterChecksumHandler
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int RegisterChecksumHandler(ChecksumType type, ChecksumHandler handler)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/checksum.cpp:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - type
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 58
    functionName: brpc::FindChecksumHandler
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 3
    functionsReached:
    - LOG
    linkageType: ''
    returnType: ChecksumHandler
    signature: ChecksumHandler * FindChecksumHandler(ChecksumType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindChecksumHandler
      Src: /src/brpc/src/brpc/checksum.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 66
    functionName: brpc::ChecksumTypeToCStr
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindChecksumHandler
    linkageType: ''
    returnType: char
    signature: char * ChecksumTypeToCStr(ChecksumType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ChecksumHandler>*::clear
      Src: /src/brpc/src/brpc/checksum.cpp:69,1
    - Dst: std::vector<ChecksumHandler>*::push_back
      Src: /src/brpc/src/brpc/checksum.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<ChecksumHandler>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 75
    functionName: brpc::ListChecksumHandler
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 2
    functionsReached:
    - std::vector<ChecksumHandler>*::push_back
    - std::vector<ChecksumHandler>*::clear
    linkageType: ''
    returnType: void
    signature: void ListChecksumHandler(std::vector<ChecksumHandler>* vec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindChecksumHandler
      Src: /src/brpc/src/brpc/checksum.cpp:82,1
    - Dst: ChecksumHandler*::Compute
      Src: /src/brpc/src/brpc/checksum.cpp:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' in'
    - checksum_type
    argTypes:
    - ChecksumIn
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 86
    functionName: brpc::ComputeDataChecksum
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindChecksumHandler
    - ChecksumHandler*::Compute
    linkageType: ''
    returnType: void
    signature: void ComputeDataChecksum(const ChecksumIn& in, ChecksumType checksum_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindChecksumHandler
      Src: /src/brpc/src/brpc/checksum.cpp:93,1
    - Dst: ChecksumHandler*::Verify
      Src: /src/brpc/src/brpc/checksum.cpp:95,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' in'
    - checksum_type
    argTypes:
    - ChecksumIn
    - ChecksumType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 89
    functionDepth: 2
    functionLinenumber: 89
    functionLinenumberEnd: 98
    functionName: brpc::VerifyDataChecksum
    functionSourceFile: /src/brpc/src/brpc/checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindChecksumHandler
    - ChecksumHandler*::Verify
    linkageType: ''
    returnType: bool
    signature: bool VerifyDataChecksum(const ChecksumIn& in, ChecksumType checksum_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ~RetryPolicy()
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RetryPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::RetryPolicy::GetBackoffTimeMs
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBackoffTimeMs(const Controller* controller) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: brpc::RetryPolicy::CanRetryBackoffInPthread
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanRetryBackoffInPthread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - backoff_time_ms
    - no_backoff_remaining_rpc_time_ms
    - retry_backoff_in_pthread
    argTypes:
    - int32_t
    - int32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 98
    functionName: brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RpcRetryPolicyWithFixedBackoff(int32_t backoff_time_ms,\n                                   int32_t
      no_backoff_remaining_rpc_time_ms,\n                                   bool retry_backoff_in_pthread)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: brpc::RpcRetryPolicyWithFixedBackoff::CanRetryBackoffInPthread
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanRetryBackoffInPthread() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - min_backoff_time_ms
    - max_backoff_time_ms
    - no_backoff_remaining_rpc_time_ms
    - retry_backoff_in_pthread
    argTypes:
    - int32_t
    - int32_t
    - int32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 121
    functionName: brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RpcRetryPolicyWithJitteredBackoff(int32_t min_backoff_time_ms,\n
      \                                     int32_t max_backoff_time_ms,\n                                      int32_t
      no_backoff_remaining_rpc_time_ms,\n                                      bool
      retry_backoff_in_pthread)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: brpc::RpcRetryPolicyWithJitteredBackoff::CanRetryBackoffInPthread
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanRetryBackoffInPthread() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ~RetryPolicy()
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RetryPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::RetryPolicy::GetBackoffTimeMs
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBackoffTimeMs(const Controller* controller) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    functionName: brpc::RetryPolicy::CanRetryBackoffInPthread
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanRetryBackoffInPthread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - backoff_time_ms
    - no_backoff_remaining_rpc_time_ms
    - retry_backoff_in_pthread
    argTypes:
    - int32_t
    - int32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 98
    functionName: brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RpcRetryPolicyWithFixedBackoff(int32_t backoff_time_ms,\n                                   int32_t
      no_backoff_remaining_rpc_time_ms,\n                                   bool retry_backoff_in_pthread)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: brpc::RpcRetryPolicyWithFixedBackoff::CanRetryBackoffInPthread
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanRetryBackoffInPthread() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - min_backoff_time_ms
    - max_backoff_time_ms
    - no_backoff_remaining_rpc_time_ms
    - retry_backoff_in_pthread
    argTypes:
    - int32_t
    - int32_t
    - int32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 121
    functionName: brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RpcRetryPolicyWithJitteredBackoff(int32_t min_backoff_time_ms,\n
      \                                     int32_t max_backoff_time_ms,\n                                      int32_t
      no_backoff_remaining_rpc_time_ms,\n                                      bool
      retry_backoff_in_pthread)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    functionName: brpc::RpcRetryPolicyWithJitteredBackoff::CanRetryBackoffInPthread
    functionSourceFile: /src/brpc/src/brpc/retry_policy.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CanRetryBackoffInPthread() const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::pow
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - window_size
    - max_error_percent
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 81
    functionName: "CircuitBreaker::EmaErrorRecorder::EmaErrorRecorder(int window_size,\n
      \                                                  int max_error_percent)"
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - std::pow
    linkageType: ''
    returnType: void
    signature: "void CircuitBreaker::EmaErrorRecorder::EmaErrorRecorder(int window_size,\n
      \                                                  int max_error_percent)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UpdateLatency
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:88,1
    - Dst: UpdateErrorCost
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:89,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:91,1
    - Dst: UpdateErrorCost
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:92,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:97,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:98,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:101,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 110
    functionName: "CircuitBreaker::EmaErrorRecorder::OnCallEnd(int error_code,\n                                                 int64_t
      latency)"
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - UpdateLatency
    - load
    - UpdateErrorCost
    - fetch_add
    linkageType: ''
    returnType: bool
    signature: "bool CircuitBreaker::EmaErrorRecorder::OnCallEnd(int error_code,\n
      \                                                int64_t latency)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:113,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:114,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:115,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:116,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: CircuitBreaker::EmaErrorRecorder::Reset()
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::EmaErrorRecorder::Reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:122,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:130,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 134
    functionName: CircuitBreaker::EmaErrorRecorder::UpdateLatency(int64_t latency)
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_weak
    linkageType: ''
    returnType: int64_t
    signature: int64_t CircuitBreaker::EmaErrorRecorder::UpdateLatency(int64_t latency)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:140,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:145,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:153,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:158,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:164,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 2
    argNames:
    - error_cost
    - ema_latency
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 171
    functionName: "CircuitBreaker::EmaErrorRecorder::UpdateErrorCost(int64_t error_cost,\n
      \                                                      int64_t ema_latency)"
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - load
    - fetch_add
    - compare_exchange_weak
    linkageType: ''
    returnType: bool
    signature: "bool CircuitBreaker::EmaErrorRecorder::UpdateErrorCost(int64_t error_cost,\n
      \                                                      int64_t ema_latency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 184
    functionName: brpc::CircuitBreaker::CircuitBreaker
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::CircuitBreaker()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:197,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:201,1
    - Dst: brpc::CircuitBreaker::MarkAsBroken
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:203,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:206,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:208,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:209,1
    - Dst: brpc::CircuitBreaker::OnCallEnd
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:213,1
    - Dst: brpc::CircuitBreaker::OnCallEnd
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:214,1
    - Dst: brpc::CircuitBreaker::MarkAsBroken
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:217,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 219
    functionName: brpc::CircuitBreaker::OnCallEnd
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 1
    functionsReached:
    - brpc::CircuitBreaker::OnCallEnd
    - load
    - brpc::CircuitBreaker::MarkAsBroken
    - fetch_add
    - store
    linkageType: ''
    returnType: bool
    signature: bool CircuitBreaker::OnCallEnd(int error_code, int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CircuitBreaker::Reset
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:222,1
    - Dst: brpc::CircuitBreaker::Reset
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:223,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:224,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:225,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:227,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 230
    functionName: brpc::CircuitBreaker::Reset
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 1
    functionsReached:
    - brpc::CircuitBreaker::Reset
    - store
    - butil::cpuwide_time_ms
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::Reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:233,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:234,1
    - Dst: brpc::CircuitBreaker::UpdateIsolationDuration
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:235,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: brpc::CircuitBreaker::MarkAsBroken
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 1
    functionsReached:
    - exchange
    - fetch_add
    - brpc::CircuitBreaker::UpdateIsolationDuration
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::MarkAsBroken()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:240,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:241,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:248,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 253
    functionName: brpc::CircuitBreaker::UpdateIsolationDuration
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 1
    functionsReached:
    - store
    - std::min
    - load
    - butil::cpuwide_time_ms
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::UpdateIsolationDuration()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::pow
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - window_size
    - max_error_percent
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 81
    functionName: "CircuitBreaker::EmaErrorRecorder::EmaErrorRecorder(int window_size,\n
      \                                                  int max_error_percent)"
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - std::pow
    linkageType: ''
    returnType: void
    signature: "void CircuitBreaker::EmaErrorRecorder::EmaErrorRecorder(int window_size,\n
      \                                                  int max_error_percent)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UpdateLatency
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:88,1
    - Dst: UpdateErrorCost
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:89,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:91,1
    - Dst: UpdateErrorCost
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:92,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:97,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:98,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:101,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 110
    functionName: "CircuitBreaker::EmaErrorRecorder::OnCallEnd(int error_code,\n                                                 int64_t
      latency)"
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - UpdateLatency
    - load
    - UpdateErrorCost
    - fetch_add
    linkageType: ''
    returnType: bool
    signature: "bool CircuitBreaker::EmaErrorRecorder::OnCallEnd(int error_code,\n
      \                                                int64_t latency)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:113,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:114,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:115,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:116,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: CircuitBreaker::EmaErrorRecorder::Reset()
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::EmaErrorRecorder::Reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:122,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:130,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 134
    functionName: CircuitBreaker::EmaErrorRecorder::UpdateLatency(int64_t latency)
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_weak
    linkageType: ''
    returnType: int64_t
    signature: int64_t CircuitBreaker::EmaErrorRecorder::UpdateLatency(int64_t latency)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:140,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:145,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:153,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:158,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:164,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 2
    argNames:
    - error_cost
    - ema_latency
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 171
    functionName: "CircuitBreaker::EmaErrorRecorder::UpdateErrorCost(int64_t error_cost,\n
      \                                                      int64_t ema_latency)"
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached:
    - std::min
    - load
    - fetch_add
    - compare_exchange_weak
    linkageType: ''
    returnType: bool
    signature: "bool CircuitBreaker::EmaErrorRecorder::UpdateErrorCost(int64_t error_cost,\n
      \                                                      int64_t ema_latency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 184
    functionName: brpc::CircuitBreaker::CircuitBreaker
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::CircuitBreaker()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:197,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:201,1
    - Dst: brpc::CircuitBreaker::MarkAsBroken
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:203,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:206,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:208,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:209,1
    - Dst: brpc::CircuitBreaker::OnCallEnd
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:213,1
    - Dst: brpc::CircuitBreaker::OnCallEnd
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:214,1
    - Dst: brpc::CircuitBreaker::MarkAsBroken
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:217,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 186
    functionDepth: 2
    functionLinenumber: 186
    functionLinenumberEnd: 219
    functionName: brpc::CircuitBreaker::OnCallEnd
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 2
    functionsReached:
    - brpc::CircuitBreaker::OnCallEnd
    - load
    - brpc::CircuitBreaker::MarkAsBroken
    - fetch_add
    - store
    linkageType: ''
    returnType: bool
    signature: bool CircuitBreaker::OnCallEnd(int error_code, int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CircuitBreaker::Reset
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:222,1
    - Dst: brpc::CircuitBreaker::Reset
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:223,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:224,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:225,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:227,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 230
    functionName: brpc::CircuitBreaker::Reset
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 2
    functionsReached:
    - brpc::CircuitBreaker::Reset
    - store
    - butil::cpuwide_time_ms
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::Reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:233,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:234,1
    - Dst: brpc::CircuitBreaker::UpdateIsolationDuration
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:235,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 2
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: brpc::CircuitBreaker::MarkAsBroken
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 2
    functionsReached:
    - exchange
    - fetch_add
    - brpc::CircuitBreaker::UpdateIsolationDuration
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::MarkAsBroken()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:240,1
    - Dst: load
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:241,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:248,1
    - Dst: store
      Src: /src/brpc/src/brpc/circuit_breaker.cpp:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 253
    functionName: brpc::CircuitBreaker::UpdateIsolationDuration
    functionSourceFile: /src/brpc/src/brpc/circuit_breaker.cpp
    functionUses: 2
    functionsReached:
    - store
    - std::min
    - load
    - butil::cpuwide_time_ms
    linkageType: ''
    returnType: void
    signature: void CircuitBreaker::UpdateIsolationDuration()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: brpc::TsChannel
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 214
    functionName: brpc::TsPacket::channel_group
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsChannelGroup
    signature: TsChannelGroup * channel_group() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 217
    functionName: brpc::TsPacket::payload_unit_start_indicator
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool payload_unit_start_indicator() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::TsPacket::pid
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsPid
    signature: TsPid pid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::TsPacket::has_adaptation_field
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_adaptation_field() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: '& adaptation_field() const'
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsAdaptationField
    signature: TsAdaptationField & adaptation_field() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::CreateAdaptationField
      Src: /src/brpc/src/brpc/ts.h:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 228
    functionName: brpc::TsPacket::mutable_adaptation_field
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::CreateAdaptationField
    linkageType: ''
    returnType: TsAdaptationField
    signature: TsAdaptationField * mutable_adaptation_field()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: brpc::TsPacket::has_payload
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_payload() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 231
    functionName: '& payload() const'
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsPayload
    signature: TsPayload & payload() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsAdaptationField::ByteSize
      Src: /src/brpc/src/brpc/ts.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: brpc::TsAdaptationField::adaptation_field_length
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached:
    - brpc::TsAdaptationField::ByteSize
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t adaptation_field_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 675
    functionName: brpc::TsPayload::packet
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsPacket
    signature: TsPacket * packet() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1041
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1041
    functionName: brpc::TsPayloadPATProgram::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1234
      start: 1234
    functionDepth: 0
    functionLinenumber: 1234
    functionLinenumberEnd: 1234
    functionName: brpc::TsWriter::discontinuity_counter
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t discontinuity_counter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1235
      start: 1235
    functionDepth: 0
    functionLinenumber: 1235
    functionLinenumberEnd: 1235
    functionName: brpc::TsWriter::add_pat_pmt_on_next_write
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void add_pat_pmt_on_next_write()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: brpc::TsChannel
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 214
    functionName: brpc::TsPacket::channel_group
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsChannelGroup
    signature: TsChannelGroup * channel_group() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 217
    functionName: brpc::TsPacket::payload_unit_start_indicator
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool payload_unit_start_indicator() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::TsPacket::pid
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsPid
    signature: TsPid pid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::TsPacket::has_adaptation_field
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_adaptation_field() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: '& adaptation_field() const'
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsAdaptationField
    signature: TsAdaptationField & adaptation_field() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::CreateAdaptationField
      Src: /src/brpc/src/brpc/ts.h:227,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 228
    functionName: brpc::TsPacket::mutable_adaptation_field
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::CreateAdaptationField
    linkageType: ''
    returnType: TsAdaptationField
    signature: TsAdaptationField * mutable_adaptation_field()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: brpc::TsPacket::has_payload
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_payload() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 231
    functionName: '& payload() const'
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsPayload
    signature: TsPayload & payload() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsAdaptationField::ByteSize
      Src: /src/brpc/src/brpc/ts.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: brpc::TsAdaptationField::adaptation_field_length
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached:
    - brpc::TsAdaptationField::ByteSize
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t adaptation_field_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 675
    functionName: brpc::TsPayload::packet
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsPacket
    signature: TsPacket * packet() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1041
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1041
    functionName: brpc::TsPayloadPATProgram::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1234
      start: 1234
    functionDepth: 0
    functionLinenumber: 1234
    functionLinenumberEnd: 1234
    functionName: brpc::TsWriter::discontinuity_counter
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t discontinuity_counter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1235
      start: 1235
    functionDepth: 0
    functionLinenumber: 1235
    functionLinenumberEnd: 1235
    functionName: brpc::TsWriter::add_pat_pmt_on_next_write
    functionSourceFile: /src/brpc/src/brpc/ts.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void add_pat_pmt_on_next_write()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:47,1
    - Dst: brpc::Join
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:48,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 44
    functionDepth: 6
    functionLinenumber: 44
    functionLinenumberEnd: 53
    functionName: brpc::StopAndJoinGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - Stop
    - brpc::Join
    linkageType: ''
    returnType: void
    signature: void StopAndJoinGlobalDispatchers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:56,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:57,1
    - Dst: EventDispatcher::EventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:59,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:65,1
    - Dst: Start
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:65,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:70,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 71
    functionName: brpc::InitializeGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - EventDispatcher::EventDispatcher
    - bvar::LatencyRecorder::LatencyRecorder
    - CHECK_EQ
    - Start
    - atexit
    linkageType: ''
    returnType: void
    signature: void InitializeGlobalDispatchers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:74,1
    - Dst: fmix32
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: brpc::GetGlobalEventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    - fmix32
    linkageType: ''
    returnType: EventDispatcher
    signature: EventDispatcher & GetGlobalEventDispatcher(int fd, bthread_tag_t tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - IOEventDataOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 94
    functionName: brpc::IOEventData::OnCreated
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int IOEventData::OnCreated(const IOEventDataOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: brpc::IOEventData::BeforeRecycled
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOEventData::BeforeRecycled()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:47,1
    - Dst: brpc::Join
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:48,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 44
    functionDepth: 6
    functionLinenumber: 44
    functionLinenumberEnd: 53
    functionName: brpc::StopAndJoinGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - Stop
    - brpc::Join
    linkageType: ''
    returnType: void
    signature: void StopAndJoinGlobalDispatchers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:56,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:57,1
    - Dst: EventDispatcher::EventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:59,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:65,1
    - Dst: Start
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:65,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:70,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 71
    functionName: brpc::InitializeGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - EventDispatcher::EventDispatcher
    - bvar::LatencyRecorder::LatencyRecorder
    - CHECK_EQ
    - Start
    - atexit
    linkageType: ''
    returnType: void
    signature: void InitializeGlobalDispatchers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:74,1
    - Dst: fmix32
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: brpc::GetGlobalEventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    - fmix32
    linkageType: ''
    returnType: EventDispatcher
    signature: EventDispatcher & GetGlobalEventDispatcher(int fd, bthread_tag_t tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - IOEventDataOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 94
    functionName: brpc::IOEventData::OnCreated
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int IOEventData::OnCreated(const IOEventDataOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: brpc::IOEventData::BeforeRecycled
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOEventData::BeforeRecycled()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::AuthContext::AuthContext
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AuthContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ~AuthContext()
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AuthContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: '& user() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' user'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::AuthContext::set_user
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_user(const std::string& user)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: '& group() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & group() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' group'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: brpc::AuthContext::set_group
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_group(const std::string& group)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: '& roles() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & roles() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' roles'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: brpc::AuthContext::set_roles
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_roles(const std::string& roles)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: '& starter() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & starter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' starter'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::AuthContext::set_starter
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_starter(const std::string& starter)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::AuthContext::is_service
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - is_service
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::AuthContext::set_is_service
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_is_service(bool is_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~Authenticator()
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Authenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 82
    functionName: brpc::Authenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: user
      Src: /src/brpc/src/brpc/authenticator.h:87,1
    - Dst: is_service
      Src: /src/brpc/src/brpc/authenticator.h:88,1
    - Dst: group
      Src: /src/brpc/src/brpc/authenticator.h:89,1
    - Dst: roles
      Src: /src/brpc/src/brpc/authenticator.h:89,1
    - Dst: starter
      Src: /src/brpc/src/brpc/authenticator.h:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ctx'
    argTypes:
    - std::ostream
    - AuthContext
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 91
    functionName: '& operator<<(std::ostream& os, const AuthContext& ctx)'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached:
    - user
    - starter
    - group
    - is_service
    - roles
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AuthContext& ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::AuthContext::AuthContext
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AuthContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: ~AuthContext()
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AuthContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: '& user() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' user'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::AuthContext::set_user
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_user(const std::string& user)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: '& group() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & group() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' group'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: brpc::AuthContext::set_group
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_group(const std::string& group)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: '& roles() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & roles() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' roles'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: brpc::AuthContext::set_roles
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_roles(const std::string& roles)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: '& starter() const'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & starter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' starter'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::AuthContext::set_starter
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_starter(const std::string& starter)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::AuthContext::is_service
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - is_service
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::AuthContext::set_is_service
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_is_service(bool is_service)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: ~Authenticator()
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Authenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 82
    functionName: brpc::Authenticator::GetUnauthorizedErrorText
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string GetUnauthorizedErrorText() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: user
      Src: /src/brpc/src/brpc/authenticator.h:87,1
    - Dst: is_service
      Src: /src/brpc/src/brpc/authenticator.h:88,1
    - Dst: group
      Src: /src/brpc/src/brpc/authenticator.h:89,1
    - Dst: roles
      Src: /src/brpc/src/brpc/authenticator.h:89,1
    - Dst: starter
      Src: /src/brpc/src/brpc/authenticator.h:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ctx'
    argTypes:
    - std::ostream
    - AuthContext
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 91
    functionName: '& operator<<(std::ostream& os, const AuthContext& ctx)'
    functionSourceFile: /src/brpc/src/brpc/authenticator.h
    functionUses: 0
    functionsReached:
    - user
    - starter
    - group
    - is_service
    - roles
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const AuthContext& ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 131
    functionName: brpc::crc32_ts
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t crc32_ts(const void* data, size_t len)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 1
    argNames:
    - stream
    argTypes:
    - TsStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 176
    functionName: brpc::TsStream2Str
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * TsStream2Str(TsStream stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: brpc::TsMessage
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sid
    argTypes:
    - TsPESStreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: brpc::is_audio
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_audio(TsPESStreamId sid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sid
    argTypes:
    - TsPESStreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: brpc::is_video
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video(TsPESStreamId sid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: brpc::TsChannelGroup::TsChannelGroup
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsChannelGroup::TsChannelGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: TsChannelGroup::~TsChannelGroup()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsChannelGroup::~TsChannelGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - pid
    argTypes:
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 234
    functionName: brpc::TsChannelGroup::get
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsChannel
    signature: TsChannel * TsChannelGroup::get(TsPid pid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/ts.cpp:237,1
    - Dst: end
      Src: /src/brpc/src/brpc/ts.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pid
    argTypes:
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 243
    functionName: brpc::TsChannelGroup::set
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - find
    - end
    linkageType: ''
    returnType: TsChannel
    signature: TsChannel * TsChannelGroup::set(TsPid pid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - g
    argTypes:
    - TsChannelGroup*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 257
    functionName: brpc::TsPacket::TsPacket
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPacket::TsPacket(TsChannelGroup* g)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 262
    functionName: TsPacket::~TsPacket()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPacket::~TsPacket()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::TsPacket::Reset
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPacket::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:282,1
    - Dst: TsAdaptationField::TsAdaptationField
      Src: /src/brpc/src/brpc/ts.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:291,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 295
    functionName: brpc::TsPacket::CreateAdaptationField
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - TsAdaptationField::TsAdaptationField
    linkageType: ''
    returnType: TsAdaptationField
    signature: TsAdaptationField * TsPacket::CreateAdaptationField()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:300,1
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:303,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 306
    functionName: brpc::TsPacket::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached:
    - brpc::TsPacket::ByteSize
    linkageType: ''
    returnType: size_t
    signature: size_t TsPacket::ByteSize() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:311,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:317,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:327,1
    - Dst: brpc::TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:331,1
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:334,1
    - Dst: brpc::TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:338,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:339,1
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:342,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 308
    functionDepth: 2
    functionLinenumber: 308
    functionLinenumberEnd: 345
    functionName: brpc::TsPacket::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::Write1Byte
    - brpc::TsPacket::Encode
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::TsPacket::ByteSize
    - LOG
    linkageType: ''
    returnType: int
    signature: int TsPacket::Encode(void* data) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::mutable_adaptation_field
      Src: /src/brpc/src/brpc/ts.cpp:349,1
    - Dst: TsAdaptationField*::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:351,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - num_stuffings
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 347
    functionDepth: 2
    functionLinenumber: 347
    functionLinenumberEnd: 358
    functionName: brpc::TsPacket::AddPadding
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - TsAdaptationField*::ByteSize
    - brpc::TsPacket::mutable_adaptation_field
    linkageType: ''
    returnType: void
    signature: void TsPacket::AddPadding(size_t num_stuffings)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:362,1
    - Dst: TsPayloadPAT::TsPayloadPAT
      Src: /src/brpc/src/brpc/ts.cpp:368,1
    - Dst: TsPayloadPAT*::programs::push_back
      Src: /src/brpc/src/brpc/ts.cpp:377,1
    - Dst: TsPayloadPATProgram
      Src: /src/brpc/src/brpc/ts.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 2
    argNames:
    - pmt_number
    - pmt_pid
    argTypes:
    - int16_t
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 379
    functionName: brpc::TsPacket::CreateAsPAT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - TsPayloadPAT*::programs::push_back
    - TsPayloadPATProgram
    - brpc::TsPacket::Reset
    - TsPayloadPAT::TsPayloadPAT
    linkageType: ''
    returnType: void
    signature: void TsPacket::CreateAsPAT(int16_t pmt_number, TsPid pmt_pid)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:386,1
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:391,1
    - Dst: TsPayloadPMT::TsPayloadPMT
      Src: /src/brpc/src/brpc/ts.cpp:397,1
    - Dst: TsPayloadPMT*::infos::push_back
      Src: /src/brpc/src/brpc/ts.cpp:411,1
    - Dst: TsPayloadPMTESInfo::TsPayloadPMTESInfo
      Src: /src/brpc/src/brpc/ts.cpp:411,1
    - Dst: TsPayloadPMT*::infos::push_back
      Src: /src/brpc/src/brpc/ts.cpp:416,1
    - Dst: TsPayloadPMTESInfo::TsPayloadPMTESInfo
      Src: /src/brpc/src/brpc/ts.cpp:416,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 6
    argNames:
    - pmt_number
    - pmt_pid
    - vpid
    - vs
    - apid
    - as
    argTypes:
    - int16_t
    - TsPid
    - TsPid
    - TsStream
    - TsPid
    - TsStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 420
    functionName: brpc::TsPacket::CreateAsPMT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::Reset
    - TsPayloadPMT*::infos::push_back
    - TsPayloadPMT::TsPayloadPMT
    - LOG
    - TsPayloadPMTESInfo::TsPayloadPMTESInfo
    linkageType: ''
    returnType: int
    signature: "int TsPacket::CreateAsPMT(int16_t pmt_number, TsPid pmt_pid,\n                         TsPid
      vpid, TsStream vs,\n                         TsPid apid, TsStream as)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:426,1
    - Dst: TsPayloadPES::TsPayloadPES
      Src: /src/brpc/src/brpc/ts.cpp:432,1
    - Dst: brpc::TsPacket::mutable_adaptation_field
      Src: /src/brpc/src/brpc/ts.cpp:452,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 37
    argCount: 8
    argNames:
    - pid
    - sid
    - continuity_counter
    - discontinuity
    - pcr
    - dts
    - pts
    - size
    argTypes:
    - TsPid
    - TsPESStreamId
    - uint8_t
    - bool
    - int64_t
    - int64_t
    - int64_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 422
    functionDepth: 2
    functionLinenumber: 422
    functionLinenumberEnd: 464
    functionName: brpc::TsPacket::CreateAsPESFirst
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::mutable_adaptation_field
    - brpc::TsPacket::Reset
    - TsPayloadPES::TsPayloadPES
    linkageType: ''
    returnType: void
    signature: "void TsPacket::CreateAsPESFirst(TsPid pid, TsPESStreamId sid,\n                                uint8_t
      continuity_counter, bool discontinuity, \n                                int64_t
      pcr, int64_t dts, int64_t pts, int size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:468,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - pid
    - continuity_counter
    argTypes:
    - TsPid
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 473
    functionName: brpc::TsPacket::CreateAsPESContinue
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::Reset
    linkageType: ''
    returnType: void
    signature: void TsPacket::CreateAsPESContinue(TsPid pid, uint8_t continuity_counter)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 507
    functionName: brpc::TsAdaptationField::TsAdaptationField
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsAdaptationField::TsAdaptationField()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 511
    functionName: TsAdaptationField::~TsAdaptationField()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsAdaptationField::~TsAdaptationField()
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 527
    functionName: brpc::TsAdaptationField::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t TsAdaptationField::ByteSize() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsAdaptationField::adaptation_field_length
      Src: /src/brpc/src/brpc/ts.cpp:532,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:542,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:558,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:577,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:580,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ts.cpp:582,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:587,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:592,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:599,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 71
    argCount: 2
    argNames:
    - data
    - adaptation_field_control
    argTypes:
    - void*
    - TsAdaptationFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 529
    functionDepth: 2
    functionLinenumber: 529
    functionLinenumberEnd: 607
    functionName: brpc::TsAdaptationField::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - LOG
    - brpc::TsAdaptationField::adaptation_field_length
    - memcpy
    linkageType: ''
    returnType: int
    signature: "int TsAdaptationField::Encode(\n    void* data, TsAdaptationFieldType
      adaptation_field_control) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 609
    functionName: brpc::TsPayload::TsPayload
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayload::TsPayload(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 610
    functionName: TsPayload::~TsPayload()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayload::~TsPayload()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 620
    functionName: brpc::TsPayloadPES::TsPayloadPES
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPES::TsPayloadPES(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 622
    functionDepth: 0
    functionLinenumber: 622
    functionLinenumberEnd: 626
    functionName: TsPayloadPES::~TsPayloadPES()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPES::~TsPayloadPES()
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 679
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 679
    functionName: brpc::TsPayloadPES::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPES::ByteSize() const
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPayloadPES::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:683,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/brpc/ts.cpp:684,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/ts.cpp:691,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:693,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:702,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:710,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:719,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:720,1
    - Dst: brpc::TsPayloadPES::encode_33bits_dts_pts
      Src: /src/brpc/src/brpc/ts.cpp:723,1
    - Dst: brpc::TsPayloadPES::encode_33bits_dts_pts
      Src: /src/brpc/src/brpc/ts.cpp:725,1
    - Dst: brpc::TsPayloadPES::encode_33bits_dts_pts
      Src: /src/brpc/src/brpc/ts.cpp:726,1
    - Dst: labs
      Src: /src/brpc/src/brpc/ts.cpp:728,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:729,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:745,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 76
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 681
    functionDepth: 1
    functionLinenumber: 681
    functionLinenumberEnd: 756
    functionName: brpc::TsPayloadPES::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - CHECK_GE
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::TsPayloadPES::encode_33bits_dts_pts
    - labs
    - LOG
    - brpc::TsPayloadPES::ByteSize
    linkageType: ''
    returnType: int
    signature: int TsPayloadPES::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - data
    - fb
    - v
    argTypes:
    - char**
    - uint8_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 773
    functionName: brpc::TsPayloadPES::encode_33bits_dts_pts
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TsPayloadPES::encode_33bits_dts_pts(\n    char** data, uint8_t
      fb, int64_t v) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 781
    functionName: brpc::TsPayloadPSI::TsPayloadPSI
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPSI::TsPayloadPSI(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 783
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 783
    functionName: TsPayloadPSI::~TsPayloadPSI()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPSI::~TsPayloadPSI()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PsiByteSize
      Src: /src/brpc/src/brpc/ts.cpp:789,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:790,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 785
    functionDepth: 0
    functionLinenumber: 785
    functionLinenumberEnd: 794
    functionName: brpc::TsPayloadPSI::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - packet
    - PsiByteSize
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPSI::ByteSize() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPayloadPSI::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:799,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/brpc/ts.cpp:800,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:802,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:803,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:806,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:811,1
    - Dst: PsiEncode
      Src: /src/brpc/src/brpc/ts.cpp:815,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:816,1
    - Dst: crc32_ts
      Src: /src/brpc/src/brpc/ts.cpp:820,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/ts.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 823
      start: 796
    functionDepth: 1
    functionLinenumber: 796
    functionLinenumberEnd: 823
    functionName: brpc::TsPayloadPSI::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - CHECK_GE
    - brpc::policy::WriteBigEndian2Bytes
    - crc32_ts
    - brpc::policy::WriteBigEndian4Bytes
    - brpc::TsPayloadPSI::ByteSize
    - PsiEncode
    - LOG
    - packet
    linkageType: ''
    returnType: int
    signature: int TsPayloadPSI::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - number
    - pid2
    argTypes:
    - int16_t
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 828
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 828
    functionName: brpc::TsPayloadPATProgram::TsPayloadPATProgram
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPATProgram::TsPayloadPATProgram(int16_t number, TsPid
      pid2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 830
    functionDepth: 0
    functionLinenumber: 830
    functionLinenumberEnd: 830
    functionName: TsPayloadPATProgram::~TsPayloadPATProgram()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPATProgram::~TsPayloadPATProgram()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/ts.cpp:837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 832
    functionDepth: 1
    functionLinenumber: 832
    functionLinenumberEnd: 839
    functionName: brpc::TsPayloadPATProgram::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int TsPayloadPATProgram::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 848
    functionName: brpc::TsPayloadPAT::TsPayloadPAT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPAT::TsPayloadPAT(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 850
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 850
    functionName: TsPayloadPAT::~TsPayloadPAT()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPAT::~TsPayloadPAT()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:854,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:855,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 852
    functionDepth: 0
    functionLinenumber: 852
    functionLinenumberEnd: 858
    functionName: brpc::TsPayloadPAT::PsiByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - ByteSize
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPAT::PsiByteSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:863,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:868,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:870,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:871,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:873,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/ts.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:875,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:878,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:880,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:884,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:884,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 860
    functionDepth: 1
    functionLinenumber: 860
    functionLinenumberEnd: 886
    functionName: brpc::TsPayloadPAT::PsiEncode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - ByteSize
    - brpc::policy::WriteBigEndian2Bytes
    - Encode
    - size
    - LOG
    - packet
    linkageType: ''
    returnType: int
    signature: int TsPayloadPAT::PsiEncode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - st
    - epid
    argTypes:
    - TsStream
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 893
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 893
    functionName: brpc::TsPayloadPMTESInfo::TsPayloadPMTESInfo
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMTESInfo::TsPayloadPMTESInfo(TsStream st, TsPid epid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 897
      start: 895
    functionDepth: 0
    functionLinenumber: 895
    functionLinenumberEnd: 897
    functionName: TsPayloadPMTESInfo::~TsPayloadPMTESInfo()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMTESInfo::~TsPayloadPMTESInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 901
      start: 899
    functionDepth: 0
    functionLinenumber: 899
    functionLinenumberEnd: 901
    functionName: brpc::TsPayloadPMTESInfo::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPMTESInfo::ByteSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:906,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:910,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:914,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ts.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 921
      start: 903
    functionDepth: 1
    functionLinenumber: 903
    functionLinenumberEnd: 921
    functionName: brpc::TsPayloadPMTESInfo::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::policy::Write1Byte
    - memcpy
    linkageType: ''
    returnType: int
    signature: int TsPayloadPMTESInfo::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 927
      start: 923
    functionDepth: 0
    functionLinenumber: 923
    functionLinenumberEnd: 927
    functionName: brpc::TsPayloadPMT::TsPayloadPMT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMT::TsPayloadPMT(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/ts.cpp:932,1
    - Dst: end
      Src: /src/brpc/src/brpc/ts.cpp:933,1
    - Dst: clear
      Src: /src/brpc/src/brpc/ts.cpp:936,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 929
    functionDepth: 1
    functionLinenumber: 929
    functionLinenumberEnd: 937
    functionName: TsPayloadPMT::~TsPayloadPMT()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMT::~TsPayloadPMT()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:942,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:943,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 946
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 946
    functionName: brpc::TsPayloadPMT::PsiByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - ByteSize
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPMT::PsiByteSize() const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:951,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:956,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:958,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:959,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:963,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:967,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ts.cpp:970,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:974,1
    - Dst: TsPayloadPMTESInfo*::Encode
      Src: /src/brpc/src/brpc/ts.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:977,1
    - Dst: TsPayloadPMTESInfo*::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:980,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:986,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:992,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:995,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:1002,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:1002,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 948
    functionDepth: 1
    functionLinenumber: 948
    functionLinenumberEnd: 1004
    functionName: brpc::TsPayloadPMT::PsiEncode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    - TsPayloadPMTESInfo*::ByteSize
    - memcpy
    - size
    - TsPayloadPMTESInfo*::Encode
    - LOG
    - packet
    linkageType: ''
    returnType: int
    signature: int TsPayloadPMT::PsiEncode(void* data) const
  - BBCount: 10
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - codec
    - pid
    argTypes:
    - FlvVideoCodec
    - TsPid*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1023
      start: 1006
    functionDepth: 0
    functionLinenumber: 1006
    functionLinenumberEnd: 1023
    functionName: brpc::FlvVideoCodec2TsStream
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsStream
    signature: TsStream FlvVideoCodec2TsStream(FlvVideoCodec codec, TsPid* pid)
  - BBCount: 17
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 2
    argNames:
    - codec
    - pid
    argTypes:
    - FlvAudioCodec
    - TsPid*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1052
      start: 1025
    functionDepth: 0
    functionLinenumber: 1025
    functionLinenumberEnd: 1052
    functionName: brpc::FlvAudioCodec2TsStream
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsStream
    signature: TsStream FlvAudioCodec2TsStream(FlvAudioCodec codec, TsPid* pid)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - object_type
    argTypes:
    - AACObjectType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1066
      start: 1054
    functionDepth: 0
    functionLinenumber: 1054
    functionLinenumberEnd: 1066
    functionName: brpc::AACObjectType2Profile
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AACProfile
    signature: AACProfile AACObjectType2Profile(AACObjectType object_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - outbuf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1079
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1079
    functionName: brpc::TsWriter::TsWriter
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsWriter::TsWriter(butil::IOBuf* outbuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1081
    functionDepth: 0
    functionLinenumber: 1081
    functionLinenumberEnd: 1082
    functionName: TsWriter::~TsWriter()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsWriter::~TsWriter()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1087,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1088,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/ts.cpp:1090,1
    - Dst: RtmpAACMessage::Create
      Src: /src/brpc/src/brpc/ts.cpp:1099,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1100,1
    - Dst: Create
      Src: /src/brpc/src/brpc/ts.cpp:1105,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1106,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1111,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1114,1
    - Dst: RtmpAACMessage::data::size
      Src: /src/brpc/src/brpc/ts.cpp:1116,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1117,1
    - Dst: RtmpAACMessage::data::size
      Src: /src/brpc/src/brpc/ts.cpp:1118,1
    - Dst: RtmpAACMessage::data::size
      Src: /src/brpc/src/brpc/ts.cpp:1122,1
    - Dst: AACObjectType2Profile
      Src: /src/brpc/src/brpc/ts.cpp:1131,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1133,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1149,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1150,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1152,1
    - Dst: FlvAudioCodec2TsStream
      Src: /src/brpc/src/brpc/ts.cpp:1156,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1158,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1159,1
    - Dst: brpc::TsWriter::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1161,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 47
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1162
      start: 1084
    functionDepth: 2
    functionLinenumber: 1084
    functionLinenumberEnd: 1162
    functionName: brpc::TsWriter::Write
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsWriter::Encode
    - AACObjectType2Profile
    - butil::Status::OK
    - static_cast<int64_t>
    - FlvAudioCodec2Str
    - FlvAudioCodec2TsStream
    - TsMessage::payload::append
    - RtmpAACMessage::Create
    - Create
    - RtmpAACMessage::data::size
    - BuiltinServiceTest::TestStatus
    - butil::Status::ok
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::Write(const RtmpAudioMessage& msg)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1245,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1248,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1249,1
    - Dst: RtmpAVCMessage::Create
      Src: /src/brpc/src/brpc/ts.cpp:1252,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1253,1
    - Dst: Create
      Src: /src/brpc/src/brpc/ts.cpp:1259,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1260,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1265,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1268,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/ts.cpp:1271,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/ts.cpp:1275,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1279,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1280,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/ts.cpp:1281,1
    - Dst: AVCNaluIterator::nalu_type
      Src: /src/brpc/src/brpc/ts.cpp:1286,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/ts.cpp:1299,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/ts.cpp:1300,1
    - Dst: sps_list::size
      Src: /src/brpc/src/brpc/ts.cpp:1306,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1308,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1308,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1311,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1311,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1313,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:1314,1
    - Dst: pps_list::size
      Src: /src/brpc/src/brpc/ts.cpp:1316,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1318,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1318,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1321,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1321,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1323,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:1324,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1327,1
    - Dst: FlvVideoCodec2TsStream
      Src: /src/brpc/src/brpc/ts.cpp:1330,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1332,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1333,1
    - Dst: brpc::TsWriter::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1335,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 68
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1336
      start: 1242
    functionDepth: 2
    functionLinenumber: 1242
    functionLinenumberEnd: 1336
    functionName: brpc::TsWriter::Write
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - pps_list::size
    - brpc::TsWriter::Encode
    - AVCNaluIterator::nalu_type
    - FlvVideoCodec2Str
    - FlvVideoCodec2TsStream
    - static_cast<int64_t>
    - BuiltinServiceTest::TestStatus
    - arraysize
    - sps_list::size
    - TsMessage::payload::append
    - butil::IOBuf::append
    - size
    - butil::IOBuf::IOBuf
    - Create
    - butil::Status::OK
    - RtmpAVCMessage::Create
    - butil::Status::ok
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::Write(const RtmpVideoMessage& msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: TsPacket::CreateAsPAT
      Src: /src/brpc/src/brpc/ts.cpp:1343,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1345,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1346,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ts.cpp:1347,1
    - Dst: TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1348,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1349,1
    - Dst: append
      Src: /src/brpc/src/brpc/ts.cpp:1351,1
    - Dst: TsPacket::CreateAsPMT
      Src: /src/brpc/src/brpc/ts.cpp:1354,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1355,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1358,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1359,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ts.cpp:1360,1
    - Dst: TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1361,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1362,1
    - Dst: append
      Src: /src/brpc/src/brpc/ts.cpp:1364,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1365,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 4
    argNames:
    - vs
    - vpid
    - as
    - apid
    argTypes:
    - TsStream
    - TsPid
    - TsStream
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1366
      start: 1338
    functionDepth: 2
    functionLinenumber: 1338
    functionLinenumberEnd: 1366
    functionName: brpc::TsWriter::EncodePATPMT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - append
    - TsPacket::CreateAsPAT
    - TsPacket::CreateAsPMT
    - memset
    - TsPacket::ByteSize
    - TsPacket::Encode
    - CHECK_LT
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::EncodePATPMT(TsStream vs, TsPid vpid, TsStream
      as, TsPid apid)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1370,1
    - Dst: is_audio
      Src: /src/brpc/src/brpc/ts.cpp:1374,1
    - Dst: is_video
      Src: /src/brpc/src/brpc/ts.cpp:1380,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1387,1
    - Dst: brpc::TsWriter::EncodePATPMT
      Src: /src/brpc/src/brpc/ts.cpp:1394,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1396,1
    - Dst: brpc::TsWriter::EncodePES
      Src: /src/brpc/src/brpc/ts.cpp:1400,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 3
    argNames:
    - msg
    - stream
    - pid
    argTypes:
    - TsMessage*
    - TsStream
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1402
      start: 1368
    functionDepth: 3
    functionLinenumber: 1368
    functionLinenumberEnd: 1402
    functionName: brpc::TsWriter::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached:
    - is_audio
    - brpc::TsWriter::EncodePATPMT
    - brpc::TsWriter::EncodePES
    - is_video
    - BuiltinServiceTest::TestStatus
    - butil::Status::ok
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::Encode(TsMessage* msg, TsStream stream, TsPid
      pid)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: TsMessage*::payload::empty
      Src: /src/brpc/src/brpc/ts.cpp:1406,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1407,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:1412,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1413,1
    - Dst: get
      Src: /src/brpc/src/brpc/ts.cpp:1416,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1418,1
    - Dst: TsMessage*::payload::empty
      Src: /src/brpc/src/brpc/ts.cpp:1422,1
    - Dst: is_audio
      Src: /src/brpc/src/brpc/ts.cpp:1429,1
    - Dst: TsPacket::CreateAsPESFirst
      Src: /src/brpc/src/brpc/ts.cpp:1437,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1439,1
    - Dst: TsPacket::CreateAsPESContinue
      Src: /src/brpc/src/brpc/ts.cpp:1441,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1447,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1448,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/ts.cpp:1450,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1450,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ts.cpp:1454,1
    - Dst: TsPacket::AddPadding
      Src: /src/brpc/src/brpc/ts.cpp:1456,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1458,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1459,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/ts.cpp:1461,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1461,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:1463,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1465,1
    - Dst: TsMessage*::payload::cutn
      Src: /src/brpc/src/brpc/ts.cpp:1468,1
    - Dst: TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1469,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1470,1
    - Dst: append
      Src: /src/brpc/src/brpc/ts.cpp:1472,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1474,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 4
    argNames:
    - msg
    - sid
    - pid
    - pure_audio
    argTypes:
    - TsMessage*
    - TsStream
    - TsPid
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1404
    functionDepth: 2
    functionLinenumber: 1404
    functionLinenumberEnd: 1475
    functionName: brpc::TsWriter::EncodePES
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached:
    - append
    - TsPacket::CreateAsPESContinue
    - TsMessage*::payload::empty
    - TsMessage*::payload::size
    - TsPacket::AddPadding
    - std::min
    - is_audio
    - TsPacket::CreateAsPESFirst
    - memset
    - TsPacket::ByteSize
    - TsPacket::Encode
    - get
    - TsMessage*::payload::cutn
    - CHECK_LT
    - LOG
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status TsWriter::EncodePES(TsMessage* msg, TsStream sid, TsPid
      pid,\n                                 bool pure_audio)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 131
    functionName: brpc::crc32_ts
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t crc32_ts(const void* data, size_t len)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 1
    argNames:
    - stream
    argTypes:
    - TsStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 176
    functionName: brpc::TsStream2Str
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * TsStream2Str(TsStream stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: brpc::TsMessage
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sid
    argTypes:
    - TsPESStreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: brpc::is_audio
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_audio(TsPESStreamId sid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sid
    argTypes:
    - TsPESStreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: brpc::is_video
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video(TsPESStreamId sid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: brpc::TsChannelGroup::TsChannelGroup
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsChannelGroup::TsChannelGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: TsChannelGroup::~TsChannelGroup()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsChannelGroup::~TsChannelGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - pid
    argTypes:
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 234
    functionName: brpc::TsChannelGroup::get
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsChannel
    signature: TsChannel * TsChannelGroup::get(TsPid pid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/ts.cpp:237,1
    - Dst: end
      Src: /src/brpc/src/brpc/ts.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pid
    argTypes:
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 243
    functionName: brpc::TsChannelGroup::set
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - find
    - end
    linkageType: ''
    returnType: TsChannel
    signature: TsChannel * TsChannelGroup::set(TsPid pid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - g
    argTypes:
    - TsChannelGroup*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 257
    functionName: brpc::TsPacket::TsPacket
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPacket::TsPacket(TsChannelGroup* g)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 262
    functionName: TsPacket::~TsPacket()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPacket::~TsPacket()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::TsPacket::Reset
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPacket::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:282,1
    - Dst: TsAdaptationField::TsAdaptationField
      Src: /src/brpc/src/brpc/ts.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:291,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 295
    functionName: brpc::TsPacket::CreateAdaptationField
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - TsAdaptationField::TsAdaptationField
    linkageType: ''
    returnType: TsAdaptationField
    signature: TsAdaptationField * TsPacket::CreateAdaptationField()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:300,1
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:303,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 306
    functionName: brpc::TsPacket::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 3
    functionsReached:
    - brpc::TsPacket::ByteSize
    linkageType: ''
    returnType: size_t
    signature: size_t TsPacket::ByteSize() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:311,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:317,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:327,1
    - Dst: brpc::TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:331,1
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:334,1
    - Dst: brpc::TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:338,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:339,1
    - Dst: brpc::TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:342,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 308
    functionDepth: 2
    functionLinenumber: 308
    functionLinenumberEnd: 345
    functionName: brpc::TsPacket::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::Write1Byte
    - brpc::TsPacket::Encode
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::TsPacket::ByteSize
    - LOG
    linkageType: ''
    returnType: int
    signature: int TsPacket::Encode(void* data) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::mutable_adaptation_field
      Src: /src/brpc/src/brpc/ts.cpp:349,1
    - Dst: TsAdaptationField*::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:351,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - num_stuffings
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 347
    functionDepth: 2
    functionLinenumber: 347
    functionLinenumberEnd: 358
    functionName: brpc::TsPacket::AddPadding
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - TsAdaptationField*::ByteSize
    - brpc::TsPacket::mutable_adaptation_field
    linkageType: ''
    returnType: void
    signature: void TsPacket::AddPadding(size_t num_stuffings)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:362,1
    - Dst: TsPayloadPAT::TsPayloadPAT
      Src: /src/brpc/src/brpc/ts.cpp:368,1
    - Dst: TsPayloadPAT*::programs::push_back
      Src: /src/brpc/src/brpc/ts.cpp:377,1
    - Dst: TsPayloadPATProgram
      Src: /src/brpc/src/brpc/ts.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 2
    argNames:
    - pmt_number
    - pmt_pid
    argTypes:
    - int16_t
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 379
    functionName: brpc::TsPacket::CreateAsPAT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - TsPayloadPAT*::programs::push_back
    - TsPayloadPATProgram
    - brpc::TsPacket::Reset
    - TsPayloadPAT::TsPayloadPAT
    linkageType: ''
    returnType: void
    signature: void TsPacket::CreateAsPAT(int16_t pmt_number, TsPid pmt_pid)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:386,1
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:391,1
    - Dst: TsPayloadPMT::TsPayloadPMT
      Src: /src/brpc/src/brpc/ts.cpp:397,1
    - Dst: TsPayloadPMT*::infos::push_back
      Src: /src/brpc/src/brpc/ts.cpp:411,1
    - Dst: TsPayloadPMTESInfo::TsPayloadPMTESInfo
      Src: /src/brpc/src/brpc/ts.cpp:411,1
    - Dst: TsPayloadPMT*::infos::push_back
      Src: /src/brpc/src/brpc/ts.cpp:416,1
    - Dst: TsPayloadPMTESInfo::TsPayloadPMTESInfo
      Src: /src/brpc/src/brpc/ts.cpp:416,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 6
    argNames:
    - pmt_number
    - pmt_pid
    - vpid
    - vs
    - apid
    - as
    argTypes:
    - int16_t
    - TsPid
    - TsPid
    - TsStream
    - TsPid
    - TsStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 420
    functionName: brpc::TsPacket::CreateAsPMT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::Reset
    - TsPayloadPMT*::infos::push_back
    - TsPayloadPMT::TsPayloadPMT
    - LOG
    - TsPayloadPMTESInfo::TsPayloadPMTESInfo
    linkageType: ''
    returnType: int
    signature: "int TsPacket::CreateAsPMT(int16_t pmt_number, TsPid pmt_pid,\n                         TsPid
      vpid, TsStream vs,\n                         TsPid apid, TsStream as)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:426,1
    - Dst: TsPayloadPES::TsPayloadPES
      Src: /src/brpc/src/brpc/ts.cpp:432,1
    - Dst: brpc::TsPacket::mutable_adaptation_field
      Src: /src/brpc/src/brpc/ts.cpp:452,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 37
    argCount: 8
    argNames:
    - pid
    - sid
    - continuity_counter
    - discontinuity
    - pcr
    - dts
    - pts
    - size
    argTypes:
    - TsPid
    - TsPESStreamId
    - uint8_t
    - bool
    - int64_t
    - int64_t
    - int64_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 422
    functionDepth: 2
    functionLinenumber: 422
    functionLinenumberEnd: 464
    functionName: brpc::TsPacket::CreateAsPESFirst
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::mutable_adaptation_field
    - brpc::TsPacket::Reset
    - TsPayloadPES::TsPayloadPES
    linkageType: ''
    returnType: void
    signature: "void TsPacket::CreateAsPESFirst(TsPid pid, TsPESStreamId sid,\n                                uint8_t
      continuity_counter, bool discontinuity, \n                                int64_t
      pcr, int64_t dts, int64_t pts, int size)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPacket::Reset
      Src: /src/brpc/src/brpc/ts.cpp:468,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - pid
    - continuity_counter
    argTypes:
    - TsPid
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 473
    functionName: brpc::TsPacket::CreateAsPESContinue
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsPacket::Reset
    linkageType: ''
    returnType: void
    signature: void TsPacket::CreateAsPESContinue(TsPid pid, uint8_t continuity_counter)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 507
    functionName: brpc::TsAdaptationField::TsAdaptationField
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsAdaptationField::TsAdaptationField()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 511
    functionName: TsAdaptationField::~TsAdaptationField()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsAdaptationField::~TsAdaptationField()
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 527
    functionName: brpc::TsAdaptationField::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t TsAdaptationField::ByteSize() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsAdaptationField::adaptation_field_length
      Src: /src/brpc/src/brpc/ts.cpp:532,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:542,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:558,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:577,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:580,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ts.cpp:582,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:587,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:592,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:599,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 71
    argCount: 2
    argNames:
    - data
    - adaptation_field_control
    argTypes:
    - void*
    - TsAdaptationFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 529
    functionDepth: 2
    functionLinenumber: 529
    functionLinenumberEnd: 607
    functionName: brpc::TsAdaptationField::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - LOG
    - brpc::TsAdaptationField::adaptation_field_length
    - memcpy
    linkageType: ''
    returnType: int
    signature: "int TsAdaptationField::Encode(\n    void* data, TsAdaptationFieldType
      adaptation_field_control) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 609
    functionName: brpc::TsPayload::TsPayload
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayload::TsPayload(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 610
    functionName: TsPayload::~TsPayload()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayload::~TsPayload()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 620
    functionName: brpc::TsPayloadPES::TsPayloadPES
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPES::TsPayloadPES(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 622
    functionDepth: 0
    functionLinenumber: 622
    functionLinenumberEnd: 626
    functionName: TsPayloadPES::~TsPayloadPES()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPES::~TsPayloadPES()
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 679
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 679
    functionName: brpc::TsPayloadPES::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPES::ByteSize() const
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPayloadPES::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:683,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/brpc/ts.cpp:684,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/ts.cpp:691,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:693,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:702,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:710,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:719,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:720,1
    - Dst: brpc::TsPayloadPES::encode_33bits_dts_pts
      Src: /src/brpc/src/brpc/ts.cpp:723,1
    - Dst: brpc::TsPayloadPES::encode_33bits_dts_pts
      Src: /src/brpc/src/brpc/ts.cpp:725,1
    - Dst: brpc::TsPayloadPES::encode_33bits_dts_pts
      Src: /src/brpc/src/brpc/ts.cpp:726,1
    - Dst: labs
      Src: /src/brpc/src/brpc/ts.cpp:728,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:729,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:745,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 76
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 681
    functionDepth: 1
    functionLinenumber: 681
    functionLinenumberEnd: 756
    functionName: brpc::TsPayloadPES::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - CHECK_GE
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::TsPayloadPES::encode_33bits_dts_pts
    - labs
    - LOG
    - brpc::TsPayloadPES::ByteSize
    linkageType: ''
    returnType: int
    signature: int TsPayloadPES::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - data
    - fb
    - v
    argTypes:
    - char**
    - uint8_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 773
    functionName: brpc::TsPayloadPES::encode_33bits_dts_pts
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TsPayloadPES::encode_33bits_dts_pts(\n    char** data, uint8_t
      fb, int64_t v) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 781
    functionName: brpc::TsPayloadPSI::TsPayloadPSI
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPSI::TsPayloadPSI(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 783
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 783
    functionName: TsPayloadPSI::~TsPayloadPSI()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPSI::~TsPayloadPSI()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PsiByteSize
      Src: /src/brpc/src/brpc/ts.cpp:789,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:790,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 785
    functionDepth: 0
    functionLinenumber: 785
    functionLinenumberEnd: 794
    functionName: brpc::TsPayloadPSI::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached:
    - packet
    - PsiByteSize
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPSI::ByteSize() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TsPayloadPSI::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:799,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/brpc/ts.cpp:800,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:802,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:803,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:806,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:811,1
    - Dst: PsiEncode
      Src: /src/brpc/src/brpc/ts.cpp:815,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:816,1
    - Dst: crc32_ts
      Src: /src/brpc/src/brpc/ts.cpp:820,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/ts.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 823
      start: 796
    functionDepth: 1
    functionLinenumber: 796
    functionLinenumberEnd: 823
    functionName: brpc::TsPayloadPSI::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - CHECK_GE
    - brpc::policy::WriteBigEndian2Bytes
    - crc32_ts
    - brpc::policy::WriteBigEndian4Bytes
    - brpc::TsPayloadPSI::ByteSize
    - PsiEncode
    - LOG
    - packet
    linkageType: ''
    returnType: int
    signature: int TsPayloadPSI::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - number
    - pid2
    argTypes:
    - int16_t
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 828
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 828
    functionName: brpc::TsPayloadPATProgram::TsPayloadPATProgram
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPATProgram::TsPayloadPATProgram(int16_t number, TsPid
      pid2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 830
    functionDepth: 0
    functionLinenumber: 830
    functionLinenumberEnd: 830
    functionName: TsPayloadPATProgram::~TsPayloadPATProgram()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPATProgram::~TsPayloadPATProgram()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/ts.cpp:837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 839
      start: 832
    functionDepth: 1
    functionLinenumber: 832
    functionLinenumberEnd: 839
    functionName: brpc::TsPayloadPATProgram::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int TsPayloadPATProgram::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 848
    functionName: brpc::TsPayloadPAT::TsPayloadPAT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPAT::TsPayloadPAT(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 850
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 850
    functionName: TsPayloadPAT::~TsPayloadPAT()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPAT::~TsPayloadPAT()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:854,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:855,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 858
      start: 852
    functionDepth: 0
    functionLinenumber: 852
    functionLinenumberEnd: 858
    functionName: brpc::TsPayloadPAT::PsiByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - ByteSize
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPAT::PsiByteSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:863,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:868,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:870,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:871,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:873,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/ts.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:875,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:878,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:880,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:884,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:884,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 860
    functionDepth: 1
    functionLinenumber: 860
    functionLinenumberEnd: 886
    functionName: brpc::TsPayloadPAT::PsiEncode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - ByteSize
    - brpc::policy::WriteBigEndian2Bytes
    - Encode
    - size
    - LOG
    - packet
    linkageType: ''
    returnType: int
    signature: int TsPayloadPAT::PsiEncode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - st
    - epid
    argTypes:
    - TsStream
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 893
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 893
    functionName: brpc::TsPayloadPMTESInfo::TsPayloadPMTESInfo
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMTESInfo::TsPayloadPMTESInfo(TsStream st, TsPid epid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 897
      start: 895
    functionDepth: 0
    functionLinenumber: 895
    functionLinenumberEnd: 897
    functionName: TsPayloadPMTESInfo::~TsPayloadPMTESInfo()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMTESInfo::~TsPayloadPMTESInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 901
      start: 899
    functionDepth: 0
    functionLinenumber: 899
    functionLinenumberEnd: 901
    functionName: brpc::TsPayloadPMTESInfo::ByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPMTESInfo::ByteSize() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:906,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:910,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:914,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ts.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 921
      start: 903
    functionDepth: 1
    functionLinenumber: 903
    functionLinenumberEnd: 921
    functionName: brpc::TsPayloadPMTESInfo::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::policy::Write1Byte
    - memcpy
    linkageType: ''
    returnType: int
    signature: int TsPayloadPMTESInfo::Encode(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - TsPacket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 927
      start: 923
    functionDepth: 0
    functionLinenumber: 923
    functionLinenumberEnd: 927
    functionName: brpc::TsPayloadPMT::TsPayloadPMT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMT::TsPayloadPMT(const TsPacket* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/ts.cpp:932,1
    - Dst: end
      Src: /src/brpc/src/brpc/ts.cpp:933,1
    - Dst: clear
      Src: /src/brpc/src/brpc/ts.cpp:936,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 929
    functionDepth: 1
    functionLinenumber: 929
    functionLinenumberEnd: 937
    functionName: TsPayloadPMT::~TsPayloadPMT()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void TsPayloadPMT::~TsPayloadPMT()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:942,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:943,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 946
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 946
    functionName: brpc::TsPayloadPMT::PsiByteSize
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - ByteSize
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t TsPayloadPMT::PsiByteSize() const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:951,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:956,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:958,1
    - Dst: brpc::policy::Write1Byte
      Src: /src/brpc/src/brpc/ts.cpp:959,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:963,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/ts.cpp:967,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ts.cpp:970,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:974,1
    - Dst: TsPayloadPMTESInfo*::Encode
      Src: /src/brpc/src/brpc/ts.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:977,1
    - Dst: TsPayloadPMTESInfo*::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:980,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:986,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:992,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:995,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:1002,1
    - Dst: packet
      Src: /src/brpc/src/brpc/ts.cpp:1002,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1004
      start: 948
    functionDepth: 1
    functionLinenumber: 948
    functionLinenumberEnd: 1004
    functionName: brpc::TsPayloadPMT::PsiEncode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    - TsPayloadPMTESInfo*::ByteSize
    - memcpy
    - size
    - TsPayloadPMTESInfo*::Encode
    - LOG
    - packet
    linkageType: ''
    returnType: int
    signature: int TsPayloadPMT::PsiEncode(void* data) const
  - BBCount: 10
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - codec
    - pid
    argTypes:
    - FlvVideoCodec
    - TsPid*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1023
      start: 1006
    functionDepth: 0
    functionLinenumber: 1006
    functionLinenumberEnd: 1023
    functionName: brpc::FlvVideoCodec2TsStream
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsStream
    signature: TsStream FlvVideoCodec2TsStream(FlvVideoCodec codec, TsPid* pid)
  - BBCount: 17
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 2
    argNames:
    - codec
    - pid
    argTypes:
    - FlvAudioCodec
    - TsPid*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1052
      start: 1025
    functionDepth: 0
    functionLinenumber: 1025
    functionLinenumberEnd: 1052
    functionName: brpc::FlvAudioCodec2TsStream
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TsStream
    signature: TsStream FlvAudioCodec2TsStream(FlvAudioCodec codec, TsPid* pid)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - object_type
    argTypes:
    - AACObjectType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1066
      start: 1054
    functionDepth: 0
    functionLinenumber: 1054
    functionLinenumberEnd: 1066
    functionName: brpc::AACObjectType2Profile
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AACProfile
    signature: AACProfile AACObjectType2Profile(AACObjectType object_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - outbuf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1079
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1079
    functionName: brpc::TsWriter::TsWriter
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsWriter::TsWriter(butil::IOBuf* outbuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1081
    functionDepth: 0
    functionLinenumber: 1081
    functionLinenumberEnd: 1082
    functionName: TsWriter::~TsWriter()
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TsWriter::~TsWriter()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1087,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1088,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/ts.cpp:1090,1
    - Dst: RtmpAACMessage::Create
      Src: /src/brpc/src/brpc/ts.cpp:1099,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1100,1
    - Dst: Create
      Src: /src/brpc/src/brpc/ts.cpp:1105,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1106,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1111,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1114,1
    - Dst: RtmpAACMessage::data::size
      Src: /src/brpc/src/brpc/ts.cpp:1116,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1117,1
    - Dst: RtmpAACMessage::data::size
      Src: /src/brpc/src/brpc/ts.cpp:1118,1
    - Dst: RtmpAACMessage::data::size
      Src: /src/brpc/src/brpc/ts.cpp:1122,1
    - Dst: AACObjectType2Profile
      Src: /src/brpc/src/brpc/ts.cpp:1131,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1133,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1149,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1150,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1152,1
    - Dst: FlvAudioCodec2TsStream
      Src: /src/brpc/src/brpc/ts.cpp:1156,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1158,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1159,1
    - Dst: brpc::TsWriter::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1161,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 47
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1162
      start: 1084
    functionDepth: 2
    functionLinenumber: 1084
    functionLinenumberEnd: 1162
    functionName: brpc::TsWriter::Write
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - brpc::TsWriter::Encode
    - AACObjectType2Profile
    - butil::Status::OK
    - static_cast<int64_t>
    - FlvAudioCodec2Str
    - FlvAudioCodec2TsStream
    - TsMessage::payload::append
    - RtmpAACMessage::Create
    - Create
    - RtmpAACMessage::data::size
    - BuiltinServiceTest::TestStatus
    - butil::Status::ok
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::Write(const RtmpAudioMessage& msg)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1245,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1248,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1249,1
    - Dst: RtmpAVCMessage::Create
      Src: /src/brpc/src/brpc/ts.cpp:1252,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1253,1
    - Dst: Create
      Src: /src/brpc/src/brpc/ts.cpp:1259,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1260,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1265,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1268,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/ts.cpp:1271,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/ts.cpp:1275,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1279,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1280,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/ts.cpp:1281,1
    - Dst: AVCNaluIterator::nalu_type
      Src: /src/brpc/src/brpc/ts.cpp:1286,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/ts.cpp:1299,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/ts.cpp:1300,1
    - Dst: sps_list::size
      Src: /src/brpc/src/brpc/ts.cpp:1306,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1308,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1308,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1311,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1311,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1313,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:1314,1
    - Dst: pps_list::size
      Src: /src/brpc/src/brpc/ts.cpp:1316,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1318,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1318,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1321,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/ts.cpp:1321,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1323,1
    - Dst: size
      Src: /src/brpc/src/brpc/ts.cpp:1324,1
    - Dst: TsMessage::payload::append
      Src: /src/brpc/src/brpc/ts.cpp:1327,1
    - Dst: FlvVideoCodec2TsStream
      Src: /src/brpc/src/brpc/ts.cpp:1330,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1332,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/ts.cpp:1333,1
    - Dst: brpc::TsWriter::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1335,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 68
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1336
      start: 1242
    functionDepth: 2
    functionLinenumber: 1242
    functionLinenumberEnd: 1336
    functionName: brpc::TsWriter::Write
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 0
    functionsReached:
    - pps_list::size
    - brpc::TsWriter::Encode
    - AVCNaluIterator::nalu_type
    - FlvVideoCodec2Str
    - FlvVideoCodec2TsStream
    - static_cast<int64_t>
    - BuiltinServiceTest::TestStatus
    - arraysize
    - sps_list::size
    - TsMessage::payload::append
    - butil::IOBuf::append
    - size
    - butil::IOBuf::IOBuf
    - Create
    - butil::Status::OK
    - RtmpAVCMessage::Create
    - butil::Status::ok
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::Write(const RtmpVideoMessage& msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: TsPacket::CreateAsPAT
      Src: /src/brpc/src/brpc/ts.cpp:1343,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1345,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1346,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ts.cpp:1347,1
    - Dst: TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1348,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1349,1
    - Dst: append
      Src: /src/brpc/src/brpc/ts.cpp:1351,1
    - Dst: TsPacket::CreateAsPMT
      Src: /src/brpc/src/brpc/ts.cpp:1354,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1355,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1358,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1359,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ts.cpp:1360,1
    - Dst: TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1361,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1362,1
    - Dst: append
      Src: /src/brpc/src/brpc/ts.cpp:1364,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1365,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 4
    argNames:
    - vs
    - vpid
    - as
    - apid
    argTypes:
    - TsStream
    - TsPid
    - TsStream
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1366
      start: 1338
    functionDepth: 2
    functionLinenumber: 1338
    functionLinenumberEnd: 1366
    functionName: brpc::TsWriter::EncodePATPMT
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 1
    functionsReached:
    - append
    - TsPacket::CreateAsPAT
    - TsPacket::CreateAsPMT
    - memset
    - TsPacket::ByteSize
    - TsPacket::Encode
    - CHECK_LT
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::EncodePATPMT(TsStream vs, TsPid vpid, TsStream
      as, TsPid apid)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1370,1
    - Dst: is_audio
      Src: /src/brpc/src/brpc/ts.cpp:1374,1
    - Dst: is_video
      Src: /src/brpc/src/brpc/ts.cpp:1380,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1387,1
    - Dst: brpc::TsWriter::EncodePATPMT
      Src: /src/brpc/src/brpc/ts.cpp:1394,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/ts.cpp:1396,1
    - Dst: brpc::TsWriter::EncodePES
      Src: /src/brpc/src/brpc/ts.cpp:1400,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 3
    argNames:
    - msg
    - stream
    - pid
    argTypes:
    - TsMessage*
    - TsStream
    - TsPid
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1402
      start: 1368
    functionDepth: 3
    functionLinenumber: 1368
    functionLinenumberEnd: 1402
    functionName: brpc::TsWriter::Encode
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 4
    functionsReached:
    - is_audio
    - brpc::TsWriter::EncodePATPMT
    - brpc::TsWriter::EncodePES
    - is_video
    - BuiltinServiceTest::TestStatus
    - butil::Status::ok
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status TsWriter::Encode(TsMessage* msg, TsStream stream, TsPid
      pid)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: TsMessage*::payload::empty
      Src: /src/brpc/src/brpc/ts.cpp:1406,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1407,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:1412,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1413,1
    - Dst: get
      Src: /src/brpc/src/brpc/ts.cpp:1416,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1418,1
    - Dst: TsMessage*::payload::empty
      Src: /src/brpc/src/brpc/ts.cpp:1422,1
    - Dst: is_audio
      Src: /src/brpc/src/brpc/ts.cpp:1429,1
    - Dst: TsPacket::CreateAsPESFirst
      Src: /src/brpc/src/brpc/ts.cpp:1437,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1439,1
    - Dst: TsPacket::CreateAsPESContinue
      Src: /src/brpc/src/brpc/ts.cpp:1441,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1447,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1448,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/ts.cpp:1450,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1450,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ts.cpp:1454,1
    - Dst: TsPacket::AddPadding
      Src: /src/brpc/src/brpc/ts.cpp:1456,1
    - Dst: TsPacket::ByteSize
      Src: /src/brpc/src/brpc/ts.cpp:1458,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/ts.cpp:1459,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/ts.cpp:1461,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1461,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ts.cpp:1463,1
    - Dst: TsMessage*::payload::size
      Src: /src/brpc/src/brpc/ts.cpp:1465,1
    - Dst: TsMessage*::payload::cutn
      Src: /src/brpc/src/brpc/ts.cpp:1468,1
    - Dst: TsPacket::Encode
      Src: /src/brpc/src/brpc/ts.cpp:1469,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/ts.cpp:1470,1
    - Dst: append
      Src: /src/brpc/src/brpc/ts.cpp:1472,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/ts.cpp:1474,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 4
    argNames:
    - msg
    - sid
    - pid
    - pure_audio
    argTypes:
    - TsMessage*
    - TsStream
    - TsPid
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1404
    functionDepth: 2
    functionLinenumber: 1404
    functionLinenumberEnd: 1475
    functionName: brpc::TsWriter::EncodePES
    functionSourceFile: /src/brpc/src/brpc/ts.cpp
    functionUses: 2
    functionsReached:
    - append
    - TsPacket::CreateAsPESContinue
    - TsMessage*::payload::empty
    - TsMessage*::payload::size
    - TsPacket::AddPadding
    - std::min
    - is_audio
    - TsPacket::CreateAsPESFirst
    - memset
    - TsPacket::ByteSize
    - TsPacket::Encode
    - get
    - TsMessage*::payload::cutn
    - CHECK_LT
    - LOG
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status TsWriter::EncodePES(TsMessage* msg, TsStream sid, TsPid
      pid,\n                                 bool pure_audio)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/serialized_response.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: '& operator=(const SerializedResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: SerializedResponse
    signature: SerializedResponse & operator=(const SerializedResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/serialized_response.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::SerializedResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: '& serialized_data()'
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: '& serialized_data() const'
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/serialized_response.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - SerializedResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: '& operator=(const SerializedResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: SerializedResponse
    signature: SerializedResponse & operator=(const SerializedResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/serialized_response.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::SerializedResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: '& serialized_data()'
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: '& serialized_data() const'
    functionSourceFile: /src/brpc/src/brpc/serialized_response.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & serialized_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: ~SocketUser()
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketUser()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::SocketUser::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: ~SocketConnection()
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketConnection()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: ~AppConnect()
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AppConnect()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 147
    functionName: brpc::SocketVarsCollector
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketVarsCollector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::reset
      Src: /src/brpc/src/brpc/socket.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 161
    functionName: brpc::PipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - brpc::reset
    linkageType: ''
    returnType: void
    signature: void PipelinedInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 166
    functionName: brpc::reset
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/socket.h:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: brpc::PackedPtr::PackedPtr
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void PackedPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 189
    functionName: brpc::PackedPtr::set
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 194
    functionName: brpc::PackedPtr::reset
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 196
    functionName: brpc::PackedPtr::get
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - extra
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 203
    functionName: brpc::PackedPtr::set_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_extra(uint16_t extra)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 208
    functionName: brpc::PackedPtr::reset_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset_extra()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: brpc::PackedPtr::extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t extra() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p
    - extra
    argTypes:
    - T*
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::PackedPtr::set_ptr_and_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ptr_and_extra(T* p, uint16_t extra)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: brpc::PackedPtr::reset_ptr_and_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset_ptr_and_extra()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:406,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket.h:425,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.h:434,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:448,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/socket.h:474,1
    - Dst: brpc::ssl_state
      Src: /src/brpc/src/brpc/socket.h:560,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/socket.h:638,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:639,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:640,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/socket.h:652,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:814,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:819,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:826,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:831,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:834,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/socket.h:868,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:871,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:874,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:891,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:898,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:907,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:930,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:938,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:946,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:956,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:958,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:964,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:970,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:972,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 990
    functionName: brpc::VersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - std::max
    - brpc::ssl_state
    - load
    - DISALLOW_COPY_AND_ASSIGN
    - butil::EndPoint::EndPoint
    - store
    - std::atomic_thread_fence
    - butil::IOPortal::IOPortal
    - __format__
    - butil::atomic::atomic
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT VersionedRefWithId<Socket>
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 393
    functionName: brpc::WriteOptions
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 397
    functionName: brpc::IsWriteShutdown
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsWriteShutdown() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 406
    functionName: brpc::fd
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int fd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 409
    functionName: brpc::local_side
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 412
    functionName: brpc::remote_side
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 415
    functionName: brpc::health_check_interval
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int health_check_interval() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 417
    functionName: brpc::health_check_path
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & health_check_path() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 419
    functionName: brpc::health_check_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t health_check_timeout_ms() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket.h:425,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 422
    functionDepth: 1
    functionLinenumber: 422
    functionLinenumberEnd: 427
    functionName: brpc::HCEnabled
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - std::atomic_thread_fence
    linkageType: ''
    returnType: bool
    signature: bool HCEnabled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/socket.h:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: brpc::AfterHCCompleted
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void AfterHCCompleted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 437
    functionName: brpc::user
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: SocketUser
    signature: SocketUser * user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - conn
    argTypes:
    - SocketConnection*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 440
    functionName: brpc::set_conn
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_conn(SocketConnection* conn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 441
    functionName: brpc::conn
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketConnection
    signature: SocketConnection * conn() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:448,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 448
    functionName: brpc::parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: Destroyable
    signature: Destroyable * parsing_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 456
    functionName: brpc::auth_context
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AuthContext
    signature: AuthContext * auth_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - correlation_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 530
    functionName: brpc::set_correlation_id
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_correlation_id(uint64_t correlation_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 531
    functionName: brpc::correlation_id
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t correlation_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 540
    functionDepth: 0
    functionLinenumber: 540
    functionLinenumberEnd: 540
    functionName: brpc::set_preferred_index
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_preferred_index(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: brpc::preferred_index
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int preferred_index() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tos
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    functionName: brpc::set_type_of_service
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type_of_service(int tos)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 559
    functionName: brpc::ssl_state
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: SSLState
    signature: SSLState ssl_state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ssl_state
      Src: /src/brpc/src/brpc/socket.h:560,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: brpc::is_ssl
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - brpc::ssl_state
    linkageType: ''
    returnType: bool
    signature: bool is_ssl() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 567
    functionName: brpc::health_check_count
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int health_check_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 619
    functionDepth: 0
    functionLinenumber: 619
    functionLinenumberEnd: 619
    functionName: brpc::fail_me_at_server_stop
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void fail_me_at_server_stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 620
    functionName: brpc::shall_fail_me_at_server_stop
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool shall_fail_me_at_server_stop() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 626
    functionName: brpc::read_will_be_progressive
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void read_will_be_progressive(ConnectionType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 630
    functionName: brpc::is_read_progressive
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_read_progressive() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/socket.h:638,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:639,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 641
    functionName: brpc::last_active_time_us
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - std::max
    - load
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_active_time_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 644
    functionName: brpc::is_overcrowded
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_overcrowded() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 646
    functionName: brpc::keytable_pool
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_keytable_pool_t
    signature: bthread_keytable_pool_t * keytable_pool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' method'
    argTypes:
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 648
    functionName: brpc::set_http_request_method
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_http_request_method(const HttpMethod& method)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    functionName: brpc::http_request_method
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpMethod
    signature: HttpMethod http_request_method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 805
    functionName: brpc::non_zero_error_code
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int non_zero_error_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: ~SocketUser()
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketUser()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::SocketUser::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(Socket*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: ~SocketConnection()
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SocketConnection()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: ~AppConnect()
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AppConnect()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 147
    functionName: brpc::SocketVarsCollector
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketVarsCollector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::reset
      Src: /src/brpc/src/brpc/socket.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 161
    functionName: brpc::PipelinedInfo
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - brpc::reset
    linkageType: ''
    returnType: void
    signature: void PipelinedInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 166
    functionName: brpc::reset
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/socket.h:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: brpc::PackedPtr::PackedPtr
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void PackedPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 189
    functionName: brpc::PackedPtr::set
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 194
    functionName: brpc::PackedPtr::reset
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 196
    functionName: brpc::PackedPtr::get
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - extra
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 203
    functionName: brpc::PackedPtr::set_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_extra(uint16_t extra)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 208
    functionName: brpc::PackedPtr::reset_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset_extra()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: brpc::PackedPtr::extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t extra() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p
    - extra
    argTypes:
    - T*
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 215
    functionName: brpc::PackedPtr::set_ptr_and_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ptr_and_extra(T* p, uint16_t extra)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: brpc::PackedPtr::reset_ptr_and_extra
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset_ptr_and_extra()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:406,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket.h:425,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.h:434,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:448,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/socket.h:474,1
    - Dst: brpc::ssl_state
      Src: /src/brpc/src/brpc/socket.h:560,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/socket.h:638,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:639,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:640,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/socket.h:652,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:814,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:819,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:826,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:831,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:834,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/socket.h:868,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:871,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:874,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:891,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:898,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:907,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:930,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:938,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:946,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:956,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:958,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:964,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:970,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:972,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 990
    functionName: brpc::VersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - std::max
    - brpc::ssl_state
    - load
    - DISALLOW_COPY_AND_ASSIGN
    - butil::EndPoint::EndPoint
    - store
    - std::atomic_thread_fence
    - butil::IOPortal::IOPortal
    - __format__
    - butil::atomic::atomic
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT VersionedRefWithId<Socket>
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 393
    functionName: brpc::WriteOptions
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 397
    functionName: brpc::IsWriteShutdown
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsWriteShutdown() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 406
    functionName: brpc::fd
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int fd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 409
    functionName: brpc::local_side
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint local_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 412
    functionName: brpc::remote_side
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::EndPoint
    signature: butil::EndPoint remote_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 415
    functionName: brpc::health_check_interval
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int health_check_interval() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 417
    functionName: brpc::health_check_path
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & health_check_path() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 419
    functionName: brpc::health_check_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t health_check_timeout_ms() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket.h:425,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 422
    functionDepth: 1
    functionLinenumber: 422
    functionLinenumberEnd: 427
    functionName: brpc::HCEnabled
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - std::atomic_thread_fence
    linkageType: ''
    returnType: bool
    signature: bool HCEnabled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/socket.h:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: brpc::AfterHCCompleted
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void AfterHCCompleted()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 437
    functionName: brpc::user
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: SocketUser
    signature: SocketUser * user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - conn
    argTypes:
    - SocketConnection*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 440
    functionName: brpc::set_conn
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_conn(SocketConnection* conn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 441
    functionName: brpc::conn
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketConnection
    signature: SocketConnection * conn() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:448,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 448
    functionName: brpc::parsing_context
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: Destroyable
    signature: Destroyable * parsing_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 456
    functionName: brpc::auth_context
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: AuthContext
    signature: AuthContext * auth_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - correlation_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 530
    functionName: brpc::set_correlation_id
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_correlation_id(uint64_t correlation_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 531
    functionName: brpc::correlation_id
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t correlation_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 540
    functionDepth: 0
    functionLinenumber: 540
    functionLinenumberEnd: 540
    functionName: brpc::set_preferred_index
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_preferred_index(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: brpc::preferred_index
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int preferred_index() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tos
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    functionName: brpc::set_type_of_service
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_type_of_service(int tos)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 559
    functionName: brpc::ssl_state
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: SSLState
    signature: SSLState ssl_state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ssl_state
      Src: /src/brpc/src/brpc/socket.h:560,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: brpc::is_ssl
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - brpc::ssl_state
    linkageType: ''
    returnType: bool
    signature: bool is_ssl() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 567
    functionName: brpc::health_check_count
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int health_check_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 619
    functionDepth: 0
    functionLinenumber: 619
    functionLinenumberEnd: 619
    functionName: brpc::fail_me_at_server_stop
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void fail_me_at_server_stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 620
    functionName: brpc::shall_fail_me_at_server_stop
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool shall_fail_me_at_server_stop() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 626
    functionName: brpc::read_will_be_progressive
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void read_will_be_progressive(ConnectionType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 630
    functionName: brpc::is_read_progressive
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_read_progressive() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/socket.h:638,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:639,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 641
    functionName: brpc::last_active_time_us
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - std::max
    - load
    linkageType: ''
    returnType: int64_t
    signature: int64_t last_active_time_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 644
    functionName: brpc::is_overcrowded
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_overcrowded() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 646
    functionName: brpc::keytable_pool
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_keytable_pool_t
    signature: bthread_keytable_pool_t * keytable_pool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' method'
    argTypes:
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 648
    functionName: brpc::set_http_request_method
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_http_request_method(const HttpMethod& method)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    functionName: brpc::http_request_method
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpMethod
    signature: HttpMethod http_request_method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 805
    functionName: brpc::non_zero_error_code
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int non_zero_error_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - write_expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1013
    functionName: BRPC_HANDLE_EOVERCROWDED
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BRPC_HANDLE_EOVERCROWDED(write_expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - write_expr
    - ','
    - nretry
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1031
      start: 1016
    functionDepth: 0
    functionLinenumber: 1016
    functionLinenumberEnd: 1031
    functionName: BRPC_HANDLE_EOVERCROWDED_N
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BRPC_HANDLE_EOVERCROWDED_N(write_expr, nretry)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:84,1
    - Dst: bvar::read_command_name
      Src: /src/brpc/src/brpc/rpc_dump.cpp:87,1
    - Dst: brpc::RpcDumpContext::SaveFlags
      Src: /src/brpc/src/brpc/rpc_dump.cpp:88,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/rpc_dump.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 91
    functionName: brpc::RpcDumpContext::RpcDumpContext
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_command_name
    - butil::gettimeofday_us
    - butil::DeleteFile
    - brpc::RpcDumpContext::SaveFlags
    linkageType: ''
    returnType: void
    signature: void RpcDumpContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 97
    functionName: ~RpcDumpContext()
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void ~RpcDumpContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RpcDumpContext::RpcDumpContext
      Src: /src/brpc/src/brpc/rpc_dump.cpp:128,1
    - Dst: RpcDumpContext*::Dump
      Src: /src/brpc/src/brpc/rpc_dump.cpp:131,1
    - Dst: brpc::SampledRequest::destroy
      Src: /src/brpc/src/brpc/rpc_dump.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - round
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 133
    functionName: brpc::SampledRequest::dump_and_destroy
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - RpcDumpContext*::Dump
    - brpc::SampledRequest::destroy
    - RpcDumpContext::RpcDumpContext
    linkageType: ''
    returnType: void
    signature: void SampledRequest::dump_and_destroy(size_t round)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: brpc::SampledRequest::destroy
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampledRequest::destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rpc_dump.cpp:142,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/brpc/rpc_dump.cpp:142,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/rpc_dump.cpp:144,1
    - Dst: std::string::replace
      Src: /src/brpc/src/brpc/rpc_dump.cpp:146,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/rpc_dump.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 152
    functionName: brpc::RpcDumpContext::SaveFlags
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 1
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::replace
    - std::string::find
    - CHECK
    - butil::FilePath
    linkageType: ''
    returnType: void
    signature: void RpcDumpContext::SaveFlags()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RpcDumpContext::SaveFlags
      Src: /src/brpc/src/brpc/rpc_dump.cpp:158,1
    - Dst: brpc::RpcDumpContext::Serialize
      Src: /src/brpc/src/brpc/rpc_dump.cpp:161,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:168,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:170,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:171,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/rpc_dump.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:183,1
    - Dst: value
      Src: /src/brpc/src/brpc/rpc_dump.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:188,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:188,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/rpc_dump.cpp:189,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/rpc_dump.cpp:189,1
    - Dst: front
      Src: /src/brpc/src/brpc/rpc_dump.cpp:189,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rpc_dump.cpp:190,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:193,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/rpc_dump.cpp:199,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/rpc_dump.cpp:201,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/rpc_dump.cpp:202,1
    - Dst: value
      Src: /src/brpc/src/brpc/rpc_dump.cpp:203,1
    - Dst: open
      Src: /src/brpc/src/brpc/rpc_dump.cpp:205,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rpc_dump.cpp:205,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:207,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rpc_dump.cpp:211,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:216,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/src/brpc/rpc_dump.cpp:217,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:219,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rpc_dump.cpp:225,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:226,1
    - Dst: close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:230,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 60
    argCount: 2
    argNames:
    - round
    - sample
    argTypes:
    - size_t
    - SampledRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 235
    functionName: brpc::RpcDumpContext::Dump
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - cut_into_file_descriptor
    - value
    - open
    - strftime
    - butil::DeleteFile
    - clear
    - brpc::RpcDumpContext::SaveFlags
    - size
    - PLOG
    - LOG
    - butil::string_printf
    - butil::gettimeofday_us
    - push_back
    - butil::FilePath
    - brpc::RpcDumpContext::Serialize
    - butil::CreateDirectoryAndGetError
    - localtime
    - pop_front
    - empty
    - c_str
    - close
    - front
    linkageType: ''
    returnType: void
    signature: void RpcDumpContext::Dump(size_t round, SampledRequest* sample)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reserve
      Src: /src/brpc/src/brpc/rpc_dump.cpp:240,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:242,1
    - Dst: SampledRequest*::meta::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/rpc_dump.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:245,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:248,1
    - Dst: append
      Src: /src/brpc/src/brpc/rpc_dump.cpp:249,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/rpc_dump.cpp:253,1
    - Dst: SampledRequest*::request::size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:254,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rpc_dump.cpp:256,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/brpc/rpc_dump.cpp:256,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' buf'
    - sample
    argTypes:
    - butil::IOBuf
    - SampledRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 258
    functionName: brpc::RpcDumpContext::Serialize
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 1
    functionsReached:
    - append
    - SampledRequest*::meta::SerializeToZeroCopyStream
    - SampledRequest*::request::size
    - size
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK_EQ
    - unsafe_assign
    - reserve
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RpcDumpContext::Serialize(butil::IOBuf& buf, SampledRequest* sample)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/brpc/rpc_dump.cpp:263,1
    - Dst: data
      Src: /src/brpc/src/brpc/rpc_dump.cpp:263,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' dir'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 264
    functionName: brpc::SampleIterator::SampleIterator
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - size
    - std::string
    - data
    linkageType: ''
    returnType: void
    signature: void SampleIterator::SampleIterator(const butil::StringPiece& dir)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 273
    functionName: SampleIterator::~SampleIterator()
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - bvar::FileDumper::close
    linkageType: ''
    returnType: void
    signature: void SampleIterator::~SampleIterator()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:276,1
    - Dst: brpc::SampleIterator::Pop
      Src: /src/brpc/src/brpc/rpc_dump.cpp:278,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rpc_dump.cpp:283,1
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:285,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/src/brpc/rpc_dump.cpp:292,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:295,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/src/brpc/rpc_dump.cpp:301,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rpc_dump.cpp:304,1
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:306,1
    - Dst: butil::FileEnumerator::FileEnumerator
      Src: /src/brpc/src/brpc/rpc_dump.cpp:311,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/src/brpc/rpc_dump.cpp:314,1
    - Dst: butil::FilePath::empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:315,1
    - Dst: open
      Src: /src/brpc/src/brpc/rpc_dump.cpp:318,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/rpc_dump.cpp:318,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 320
    functionName: brpc::SampleIterator::Next
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 4
    functionsReached:
    - butil::FileEnumerator::FileEnumerator
    - open
    - bvar::FileDumper::close
    - append_from_file_descriptor
    - butil::FilePath::empty
    - butil::FilePath::value
    - empty
    - clear
    - brpc::SampleIterator::Next
    - PLOG
    - brpc::SampleIterator::Pop
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * SampleIterator::Next()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rpc_dump.cpp:324,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:329,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/rpc_dump.cpp:335,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:337,1
    - Dst: length
      Src: /src/brpc/src/brpc/rpc_dump.cpp:340,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:344,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rpc_dump.cpp:349,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rpc_dump.cpp:350,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rpc_dump.cpp:351,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/rpc_dump.cpp:352,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/rpc_dump.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:354,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rpc_dump.cpp:358,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rpc_dump.cpp:359,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - ' buf'
    - format_error
    argTypes:
    - butil::IOBuf
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 360
    functionName: brpc::SampleIterator::Pop
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - ParsePbFromIOBuf
    - pop_front
    - std::unique_ptr::release
    - fetch
    - cutn
    - SampledRequest::SampledRequest
    - length
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * SampleIterator::Pop(butil::IOBuf& buf, bool* format_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:84,1
    - Dst: bvar::read_command_name
      Src: /src/brpc/src/brpc/rpc_dump.cpp:87,1
    - Dst: brpc::RpcDumpContext::SaveFlags
      Src: /src/brpc/src/brpc/rpc_dump.cpp:88,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/rpc_dump.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 91
    functionName: brpc::RpcDumpContext::RpcDumpContext
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - bvar::read_command_name
    - butil::gettimeofday_us
    - butil::DeleteFile
    - brpc::RpcDumpContext::SaveFlags
    linkageType: ''
    returnType: void
    signature: void RpcDumpContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 97
    functionName: ~RpcDumpContext()
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void ~RpcDumpContext()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RpcDumpContext::RpcDumpContext
      Src: /src/brpc/src/brpc/rpc_dump.cpp:128,1
    - Dst: RpcDumpContext*::Dump
      Src: /src/brpc/src/brpc/rpc_dump.cpp:131,1
    - Dst: brpc::SampledRequest::destroy
      Src: /src/brpc/src/brpc/rpc_dump.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - round
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 133
    functionName: brpc::SampledRequest::dump_and_destroy
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - RpcDumpContext*::Dump
    - brpc::SampledRequest::destroy
    - RpcDumpContext::RpcDumpContext
    linkageType: ''
    returnType: void
    signature: void SampledRequest::dump_and_destroy(size_t round)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: brpc::SampledRequest::destroy
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampledRequest::destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rpc_dump.cpp:142,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/src/brpc/rpc_dump.cpp:142,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/rpc_dump.cpp:144,1
    - Dst: std::string::replace
      Src: /src/brpc/src/brpc/rpc_dump.cpp:146,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/rpc_dump.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 152
    functionName: brpc::RpcDumpContext::SaveFlags
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 3
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::replace
    - std::string::find
    - CHECK
    - butil::FilePath
    linkageType: ''
    returnType: void
    signature: void RpcDumpContext::SaveFlags()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RpcDumpContext::SaveFlags
      Src: /src/brpc/src/brpc/rpc_dump.cpp:158,1
    - Dst: brpc::RpcDumpContext::Serialize
      Src: /src/brpc/src/brpc/rpc_dump.cpp:161,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:168,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:170,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:171,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/rpc_dump.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:183,1
    - Dst: value
      Src: /src/brpc/src/brpc/rpc_dump.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:188,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:188,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/rpc_dump.cpp:189,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/rpc_dump.cpp:189,1
    - Dst: front
      Src: /src/brpc/src/brpc/rpc_dump.cpp:189,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rpc_dump.cpp:190,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:193,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/rpc_dump.cpp:199,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/rpc_dump.cpp:201,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/rpc_dump.cpp:202,1
    - Dst: value
      Src: /src/brpc/src/brpc/rpc_dump.cpp:203,1
    - Dst: open
      Src: /src/brpc/src/brpc/rpc_dump.cpp:205,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rpc_dump.cpp:205,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:207,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rpc_dump.cpp:211,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:216,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/src/brpc/rpc_dump.cpp:217,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:219,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rpc_dump.cpp:225,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rpc_dump.cpp:226,1
    - Dst: close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:230,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 60
    argCount: 2
    argNames:
    - round
    - sample
    argTypes:
    - size_t
    - SampledRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 235
    functionName: brpc::RpcDumpContext::Dump
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - cut_into_file_descriptor
    - value
    - open
    - strftime
    - butil::DeleteFile
    - clear
    - brpc::RpcDumpContext::SaveFlags
    - size
    - PLOG
    - LOG
    - butil::string_printf
    - butil::gettimeofday_us
    - push_back
    - butil::FilePath
    - brpc::RpcDumpContext::Serialize
    - butil::CreateDirectoryAndGetError
    - localtime
    - pop_front
    - empty
    - c_str
    - close
    - front
    linkageType: ''
    returnType: void
    signature: void RpcDumpContext::Dump(size_t round, SampledRequest* sample)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reserve
      Src: /src/brpc/src/brpc/rpc_dump.cpp:240,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:242,1
    - Dst: SampledRequest*::meta::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/rpc_dump.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:245,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:248,1
    - Dst: append
      Src: /src/brpc/src/brpc/rpc_dump.cpp:249,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/rpc_dump.cpp:253,1
    - Dst: SampledRequest*::request::size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:254,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rpc_dump.cpp:256,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/brpc/rpc_dump.cpp:256,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' buf'
    - sample
    argTypes:
    - butil::IOBuf
    - SampledRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 258
    functionName: brpc::RpcDumpContext::Serialize
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 2
    functionsReached:
    - append
    - SampledRequest*::meta::SerializeToZeroCopyStream
    - SampledRequest*::request::size
    - size
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK_EQ
    - unsafe_assign
    - reserve
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RpcDumpContext::Serialize(butil::IOBuf& buf, SampledRequest* sample)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/brpc/rpc_dump.cpp:263,1
    - Dst: data
      Src: /src/brpc/src/brpc/rpc_dump.cpp:263,1
    - Dst: size
      Src: /src/brpc/src/brpc/rpc_dump.cpp:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' dir'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 264
    functionName: brpc::SampleIterator::SampleIterator
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - size
    - std::string
    - data
    linkageType: ''
    returnType: void
    signature: void SampleIterator::SampleIterator(const butil::StringPiece& dir)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 273
    functionName: SampleIterator::~SampleIterator()
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 0
    functionsReached:
    - bvar::FileDumper::close
    linkageType: ''
    returnType: void
    signature: void SampleIterator::~SampleIterator()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:276,1
    - Dst: brpc::SampleIterator::Pop
      Src: /src/brpc/src/brpc/rpc_dump.cpp:278,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rpc_dump.cpp:283,1
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:285,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/src/brpc/rpc_dump.cpp:292,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:295,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/src/brpc/rpc_dump.cpp:301,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rpc_dump.cpp:304,1
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/rpc_dump.cpp:306,1
    - Dst: butil::FileEnumerator::FileEnumerator
      Src: /src/brpc/src/brpc/rpc_dump.cpp:311,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/src/brpc/rpc_dump.cpp:314,1
    - Dst: butil::FilePath::empty
      Src: /src/brpc/src/brpc/rpc_dump.cpp:315,1
    - Dst: open
      Src: /src/brpc/src/brpc/rpc_dump.cpp:318,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/rpc_dump.cpp:318,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 320
    functionName: brpc::SampleIterator::Next
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 5
    functionsReached:
    - butil::FileEnumerator::FileEnumerator
    - open
    - bvar::FileDumper::close
    - append_from_file_descriptor
    - butil::FilePath::empty
    - butil::FilePath::value
    - empty
    - clear
    - brpc::SampleIterator::Next
    - PLOG
    - brpc::SampleIterator::Pop
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * SampleIterator::Next()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rpc_dump.cpp:324,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:329,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/rpc_dump.cpp:335,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:337,1
    - Dst: length
      Src: /src/brpc/src/brpc/rpc_dump.cpp:340,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:344,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rpc_dump.cpp:349,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rpc_dump.cpp:350,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rpc_dump.cpp:351,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/rpc_dump.cpp:352,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/rpc_dump.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rpc_dump.cpp:354,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rpc_dump.cpp:358,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rpc_dump.cpp:359,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - ' buf'
    - format_error
    argTypes:
    - butil::IOBuf
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 360
    functionName: brpc::SampleIterator::Pop
    functionSourceFile: /src/brpc/src/brpc/rpc_dump.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - ParsePbFromIOBuf
    - pop_front
    - std::unique_ptr::release
    - fetch
    - cutn
    - SampledRequest::SampledRequest
    - length
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * SampleIterator::Pop(butil::IOBuf& buf, bool* format_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InputMessenger::InputMessenger
      Src: /src/brpc/src/brpc/input_messenger.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::InitClientSideMessenger
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - InputMessenger::InputMessenger
    linkageType: ''
    returnType: void
    signature: void InitClientSideMessenger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/input_messenger.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: brpc::get_or_new_client_side_messenger
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 6
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: InputMessenger
    signature: InputMessenger * get_or_new_client_side_messenger()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:86,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:87,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:95,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:96,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:97,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:98,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:101,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:103,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:103,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:104,1
    - Dst: Socket*::_read_buf::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:111,1
    - Dst: Socket*::_read_buf::copy_to_cstr
      Src: /src/brpc/src/brpc/input_messenger.cpp:114,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:115,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:118,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/input_messenger.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:134,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:134,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:137,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:146,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:147,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:149,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:156,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:157,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:158,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:159,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:162,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:164,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:164,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:165,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:174,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:179,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 58
    argCount: 3
    argNames:
    - m
    - index
    - read_eof
    argTypes:
    - Socket*
    - size_t*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 180
    functionName: brpc::InputMessenger::CutInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::preferred_index
    - Socket*::set_preferred_index
    - ParseResult::is_ok
    - MakeParseError
    - load
    - Socket*::parsing_context
    - Socket*::_read_buf::copy_to_cstr
    - strncmp
    - Socket*::_read_buf::size
    - parse
    - Socket*::CreatedByConnect
    - Socket*::remote_side
    - Socket*::reset_parsing_context
    - ParseResult::error
    - LOG
    - LOG_IF
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult InputMessenger::CutInputMessage(\n        Socket* m, size_t*
      index, bool read_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/input_messenger.cpp:183,1
    - Dst: InputMessageBase*::_process
      Src: /src/brpc/src/brpc/input_messenger.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 186
    functionName: brpc::ProcessInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - InputMessageBase*::_process
    - static_cast<InputMessageBase*>
    linkageType: ''
    returnType: void
    signature: void * ProcessInputMessage(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - last_msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: operator()(InputMessageBase* last_msg)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - brpc::ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void operator()(InputMessageBase* last_msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/input_messenger.cpp:209,1
    - Dst: brpc::ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:213,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/input_messenger.cpp:218,1
    - Dst: brpc::ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:222,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 3
    argNames:
    - to_run_msg
    - num_bthread_created
    - keytable_pool
    argTypes:
    - InputMessageBase*
    - int*
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 194
    functionDepth: 4
    functionLinenumber: 194
    functionLinenumberEnd: 224
    functionName: brpc::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - brpc::ProcessInputMessage
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: "void QueueMessage(InputMessageBase* to_run_msg,\n                         int*
      num_bthread_created,\n                         bthread_keytable_pool_t* keytable_pool)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: InputMessenger::InputMessageClosure::~InputMessageClosure() noexcept(false)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessenger::InputMessageClosure::~InputMessageClosure() noexcept(false)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: InputMessenger::InputMessageClosure::reset(InputMessageBase* m)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessenger::InputMessageClosure::reset(InputMessageBase* m)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::AddInputBytes
      Src: /src/brpc/src/brpc/input_messenger.cpp:243,1
    - Dst: Socket*::_last_readtime_us::store
      Src: /src/brpc/src/brpc/input_messenger.cpp:246,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:248,1
    - Dst: brpc::InputMessenger::CutInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:252,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:253,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:254,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:258,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:261,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/input_messenger.cpp:263,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:264,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:268,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:268,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:269,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:270,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:270,1
    - Dst: Socket*::AddInputMessages
      Src: /src/brpc/src/brpc/input_messenger.cpp:275,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:277,1
    - Dst: Socket*::_read_buf::return_cached_blocks
      Src: /src/brpc/src/brpc/input_messenger.cpp:283,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:296,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:299,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:300,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:304,1
    - Dst: QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:305,1
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:307,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/input_messenger.cpp:310,1
    - Dst: Socket*::PostponeEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:311,1
    - Dst: Socket*::FightAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:317,1
    - Dst: verify
      Src: /src/brpc/src/brpc/input_messenger.cpp:319,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/input_messenger.cpp:319,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:320,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:323,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:324,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:325,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:329,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/input_messenger.cpp:334,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:336,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:336,1
    - Dst: QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:338,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:338,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:340,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:345,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 71
    argCount: 6
    argNames:
    - m
    - bytes
    - read_eof
    - received_us
    - base_realtime
    - ' last_msg'
    argTypes:
    - Socket*
    - ssize_t
    - bool
    - uint64_t
    - uint64_t
    - InputMessageClosure
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 239
    functionDepth: 2
    functionLinenumber: 239
    functionLinenumberEnd: 348
    functionName: brpc::InputMessenger::ProcessNewMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetAuthentication
    - Socket*::_read_buf::return_cached_blocks
    - Socket*::_read_buf::length
    - Socket*::AddInputBytes
    - reset
    - DestroyingPtr::get
    - Socket*::is_read_progressive
    - butil::ToPrintable::ToPrintable
    - ParseResult::message
    - brpc::InputMessenger::CutInputMessage
    - ParseResult::error_str
    - Socket*::FightAuthentication
    - QueueMessage
    - ParseResult::error
    - LOG
    - LOG_IF
    - Socket*::ReAddress
    - ParseResult::is_ok
    - release
    - Socket*::description
    - Socket*::_last_readtime_us::store
    - bthread_flush
    - Socket*::SetFailed
    - DestroyingPtr::release
    - Socket*::PostponeEOF
    - Socket*::AddInputMessages
    - verify
    linkageType: ''
    returnType: int
    signature: "int InputMessenger::ProcessNewMessage(\n        Socket* m, ssize_t
      bytes, bool read_eof,\n        const uint64_t received_us, const uint64_t base_realtime,\n
      \       InputMessageClosure& last_msg)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/input_messenger.cpp:361,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/input_messenger.cpp:361,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:370,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:371,1
    - Dst: Socket*::DoRead
      Src: /src/brpc/src/brpc/input_messenger.cpp:382,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:388,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:395,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:396,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:397,1
    - Dst: berror
      Src: /src/brpc/src/brpc/input_messenger.cpp:397,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/input_messenger.cpp:399,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:406,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:413,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 415
    functionName: brpc::InputMessenger::OnNewMessages
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Socket*::SetEOF
    - butil::cpuwide_time_us
    - Socket*::SetFailed
    - Socket*::MoreReadEvents
    - InputMessenger*::ProcessNewMessage
    - Socket*::user
    - berror
    - Socket*::description
    - static_cast<InputMessenger*>
    - PLOG
    - LOG_IF
    - Socket*::DoRead
    linkageType: ''
    returnType: void
    signature: void InputMessenger::OnNewMessages(Socket* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 422
    functionName: brpc::InputMessenger::InputMessenger
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputMessenger::InputMessenger(size_t capacity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 429
    functionName: InputMessenger::~InputMessenger()
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void InputMessenger::~InputMessenger()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:437,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:441,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:444,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:448,1
    - Dst: FindProtocolOfHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:451,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:458,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:466,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:467,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:470,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:471,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 474
    functionName: brpc::InputMessenger::AddHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - FindProtocolOfHandler
    - load
    - memset
    - BAIDU_SCOPED_LOCK
    - CHECK
    - store
    - LOG
    - InputMessageHandler::InputMessageHandler
    linkageType: ''
    returnType: int
    signature: int InputMessenger::AddHandler(const InputMessageHandler& handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:479,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:482,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:484,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:486,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:489,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:493,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:496,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:498,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 500
    functionName: brpc::InputMessenger::AddNonProtocolHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - load
    - memset
    - BAIDU_SCOPED_LOCK
    - CHECK
    - store
    - LOG
    - InputMessageHandler::InputMessageHandler
    linkageType: ''
    returnType: int
    signature: int InputMessenger::AddNonProtocolHandler(const InputMessageHandler&
      handler)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<SocketKeepaliveOptions>
      Src: /src/brpc/src/brpc/input_messenger.cpp:511,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:520,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 3
    argNames:
    - ' remote_side'
    - health_check_interval_s
    - id
    argTypes:
    - butil::EndPoint
    - time_t
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 502
    functionDepth: 6
    functionLinenumber: 502
    functionLinenumberEnd: 521
    functionName: brpc::InputMessenger::Create
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<SocketKeepaliveOptions>
    - Socket::Create
    linkageType: ''
    returnType: int
    signature: "int InputMessenger::Create(const butil::EndPoint& remote_side,\n                           time_t
      health_check_interval_s,\n                           SocketId* id)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<rdma::RdmaConnect>
      Src: /src/brpc/src/brpc/input_messenger.cpp:528,1
    - Dst: std::make_shared<SocketKeepaliveOptions>
      Src: /src/brpc/src/brpc/input_messenger.cpp:539,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:557,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:563,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/input_messenger.cpp:571,1
    - Dst: brpc::InputMessenger::FindProtocolIndex
      Src: /src/brpc/src/brpc/input_messenger.cpp:575,1
    - Dst: ListProtocols
      Src: /src/brpc/src/brpc/input_messenger.cpp:588,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:589,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:595,1
    - Dst: CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:605,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:606,1
    - Dst: DestroyImpl
      Src: /src/brpc/src/brpc/input_messenger.cpp:608,1
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:613,1
    - Dst: Socket*::CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:615,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 64
    argCount: 2
    argNames:
    - options
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 523
    functionDepth: 6
    functionLinenumber: 523
    functionLinenumberEnd: 622
    functionName: brpc::InputMessenger::Create
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - reset
    - strcmp
    - FindProtocol
    - brpc::InputMessenger::FindProtocolIndex
    - ListProtocols
    - DestroyImpl
    - std::make_shared<rdma::RdmaConnect>
    - release
    - Socket*::CheckEOF
    - CheckEOF
    - std::make_shared<SocketKeepaliveOptions>
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: int InputMessenger::Create(SocketOptions options, SocketId* id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:563,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 568
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: int
    signature: int InputMessenger::FindProtocolIndex(const char* name) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/input_messenger.cpp:571,1
    - Dst: brpc::InputMessenger::FindProtocolIndex
      Src: /src/brpc/src/brpc/input_messenger.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 570
    functionDepth: 1
    functionLinenumber: 570
    functionLinenumberEnd: 577
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 2
    functionsReached:
    - FindProtocol
    - brpc::InputMessenger::FindProtocolIndex
    linkageType: ''
    returnType: int
    signature: int InputMessenger::FindProtocolIndex(ProtocolType type) const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 579
    functionDepth: 0
    functionLinenumber: 579
    functionLinenumberEnd: 584
    functionName: brpc::InputMessenger::NameOfProtocol
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * InputMessenger::NameOfProtocol(int n) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/input_messenger.cpp:588,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:589,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:595,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 586
    functionDepth: 2
    functionLinenumber: 586
    functionLinenumberEnd: 600
    functionName: brpc::FindProtocolOfHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListProtocols
    - strcmp
    - std::vector::size
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType FindProtocolOfHandler(const InputMessageHandler& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:605,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:606,1
    - Dst: DestroyImpl
      Src: /src/brpc/src/brpc/input_messenger.cpp:608,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 610
    functionName: brpc::InputMessageBase::Destroy
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - reset
    - DestroyImpl
    - CheckEOF
    linkageType: ''
    returnType: void
    signature: void InputMessageBase::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:613,1
    - Dst: Socket*::CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:615,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 618
    functionName: brpc::InputMessageBase::ReleaseSocket
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - release
    - Socket*::CheckEOF
    linkageType: ''
    returnType: Socket
    signature: Socket * InputMessageBase::ReleaseSocket()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 620
    functionName: InputMessageBase::~InputMessageBase()
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputMessageBase::~InputMessageBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InputMessenger::InputMessenger
      Src: /src/brpc/src/brpc/input_messenger.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::InitClientSideMessenger
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - InputMessenger::InputMessenger
    linkageType: ''
    returnType: void
    signature: void InitClientSideMessenger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/input_messenger.cpp:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: brpc::get_or_new_client_side_messenger
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 6
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: InputMessenger
    signature: InputMessenger * get_or_new_client_side_messenger()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:86,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:87,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:95,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:96,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:97,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:98,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:101,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:103,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:103,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:104,1
    - Dst: Socket*::_read_buf::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:111,1
    - Dst: Socket*::_read_buf::copy_to_cstr
      Src: /src/brpc/src/brpc/input_messenger.cpp:114,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:115,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:118,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/input_messenger.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:134,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:134,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:137,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:146,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:147,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:149,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:156,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:157,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:158,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:159,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:162,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:164,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:164,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:165,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:174,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:179,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 58
    argCount: 3
    argNames:
    - m
    - index
    - read_eof
    argTypes:
    - Socket*
    - size_t*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 180
    functionName: brpc::InputMessenger::CutInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - Socket*::preferred_index
    - Socket*::set_preferred_index
    - ParseResult::is_ok
    - MakeParseError
    - load
    - Socket*::parsing_context
    - Socket*::_read_buf::copy_to_cstr
    - strncmp
    - Socket*::_read_buf::size
    - parse
    - Socket*::CreatedByConnect
    - Socket*::remote_side
    - Socket*::reset_parsing_context
    - ParseResult::error
    - LOG
    - LOG_IF
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult InputMessenger::CutInputMessage(\n        Socket* m, size_t*
      index, bool read_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/input_messenger.cpp:183,1
    - Dst: InputMessageBase*::_process
      Src: /src/brpc/src/brpc/input_messenger.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 186
    functionName: brpc::ProcessInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 2
    functionsReached:
    - InputMessageBase*::_process
    - static_cast<InputMessageBase*>
    linkageType: ''
    returnType: void
    signature: void * ProcessInputMessage(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - last_msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: operator()(InputMessageBase* last_msg)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void operator()(InputMessageBase* last_msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/input_messenger.cpp:209,1
    - Dst: brpc::ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:213,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/input_messenger.cpp:218,1
    - Dst: brpc::ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:222,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 3
    argNames:
    - to_run_msg
    - num_bthread_created
    - keytable_pool
    argTypes:
    - InputMessageBase*
    - int*
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 194
    functionDepth: 4
    functionLinenumber: 194
    functionLinenumberEnd: 224
    functionName: brpc::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - brpc::ProcessInputMessage
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: "void QueueMessage(InputMessageBase* to_run_msg,\n                         int*
      num_bthread_created,\n                         bthread_keytable_pool_t* keytable_pool)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: InputMessenger::InputMessageClosure::~InputMessageClosure() noexcept(false)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessenger::InputMessageClosure::~InputMessageClosure() noexcept(false)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: InputMessenger::InputMessageClosure::reset(InputMessageBase* m)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessenger::InputMessageClosure::reset(InputMessageBase* m)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::AddInputBytes
      Src: /src/brpc/src/brpc/input_messenger.cpp:243,1
    - Dst: Socket*::_last_readtime_us::store
      Src: /src/brpc/src/brpc/input_messenger.cpp:246,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:248,1
    - Dst: brpc::InputMessenger::CutInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:252,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:253,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:254,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:258,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:260,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:261,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/input_messenger.cpp:263,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:264,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:268,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:268,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:269,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:270,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:270,1
    - Dst: Socket*::AddInputMessages
      Src: /src/brpc/src/brpc/input_messenger.cpp:275,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:277,1
    - Dst: Socket*::_read_buf::return_cached_blocks
      Src: /src/brpc/src/brpc/input_messenger.cpp:283,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:296,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:299,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:300,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:304,1
    - Dst: QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:305,1
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:307,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/input_messenger.cpp:310,1
    - Dst: Socket*::PostponeEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:311,1
    - Dst: Socket*::FightAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:317,1
    - Dst: verify
      Src: /src/brpc/src/brpc/input_messenger.cpp:319,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/input_messenger.cpp:319,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:320,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:323,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:324,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:325,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:329,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/input_messenger.cpp:334,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:336,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:336,1
    - Dst: QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:338,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:338,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:340,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:345,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 71
    argCount: 6
    argNames:
    - m
    - bytes
    - read_eof
    - received_us
    - base_realtime
    - ' last_msg'
    argTypes:
    - Socket*
    - ssize_t
    - bool
    - uint64_t
    - uint64_t
    - InputMessageClosure
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 239
    functionDepth: 2
    functionLinenumber: 239
    functionLinenumberEnd: 348
    functionName: brpc::InputMessenger::ProcessNewMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetAuthentication
    - Socket*::_read_buf::return_cached_blocks
    - Socket*::_read_buf::length
    - Socket*::AddInputBytes
    - reset
    - DestroyingPtr::get
    - Socket*::is_read_progressive
    - butil::ToPrintable::ToPrintable
    - ParseResult::message
    - brpc::InputMessenger::CutInputMessage
    - ParseResult::error_str
    - Socket*::FightAuthentication
    - QueueMessage
    - ParseResult::error
    - LOG
    - LOG_IF
    - Socket*::ReAddress
    - ParseResult::is_ok
    - release
    - Socket*::description
    - Socket*::_last_readtime_us::store
    - bthread_flush
    - Socket*::SetFailed
    - DestroyingPtr::release
    - Socket*::PostponeEOF
    - Socket*::AddInputMessages
    - verify
    linkageType: ''
    returnType: int
    signature: "int InputMessenger::ProcessNewMessage(\n        Socket* m, ssize_t
      bytes, bool read_eof,\n        const uint64_t received_us, const uint64_t base_realtime,\n
      \       InputMessageClosure& last_msg)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/input_messenger.cpp:361,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/input_messenger.cpp:361,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:370,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:371,1
    - Dst: Socket*::DoRead
      Src: /src/brpc/src/brpc/input_messenger.cpp:382,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:388,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:395,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:396,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:397,1
    - Dst: berror
      Src: /src/brpc/src/brpc/input_messenger.cpp:397,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/input_messenger.cpp:399,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:406,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:413,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 415
    functionName: brpc::InputMessenger::OnNewMessages
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Socket*::SetEOF
    - butil::cpuwide_time_us
    - Socket*::SetFailed
    - Socket*::MoreReadEvents
    - InputMessenger*::ProcessNewMessage
    - Socket*::user
    - berror
    - Socket*::description
    - static_cast<InputMessenger*>
    - PLOG
    - LOG_IF
    - Socket*::DoRead
    linkageType: ''
    returnType: void
    signature: void InputMessenger::OnNewMessages(Socket* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 422
    functionName: brpc::InputMessenger::InputMessenger
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputMessenger::InputMessenger(size_t capacity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 424
    functionDepth: 0
    functionLinenumber: 424
    functionLinenumberEnd: 429
    functionName: InputMessenger::~InputMessenger()
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: void
    signature: void InputMessenger::~InputMessenger()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:437,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:441,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:444,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:448,1
    - Dst: FindProtocolOfHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:451,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:458,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:466,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:467,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:470,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:471,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 474
    functionName: brpc::InputMessenger::AddHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - FindProtocolOfHandler
    - load
    - memset
    - BAIDU_SCOPED_LOCK
    - CHECK
    - store
    - LOG
    - InputMessageHandler::InputMessageHandler
    linkageType: ''
    returnType: int
    signature: int InputMessenger::AddHandler(const InputMessageHandler& handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:479,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:482,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:484,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:486,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:489,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:493,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:496,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:498,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 500
    functionName: brpc::InputMessenger::AddNonProtocolHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - load
    - memset
    - BAIDU_SCOPED_LOCK
    - CHECK
    - store
    - LOG
    - InputMessageHandler::InputMessageHandler
    linkageType: ''
    returnType: int
    signature: int InputMessenger::AddNonProtocolHandler(const InputMessageHandler&
      handler)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<SocketKeepaliveOptions>
      Src: /src/brpc/src/brpc/input_messenger.cpp:511,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:520,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 3
    argNames:
    - ' remote_side'
    - health_check_interval_s
    - id
    argTypes:
    - butil::EndPoint
    - time_t
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 502
    functionDepth: 6
    functionLinenumber: 502
    functionLinenumberEnd: 521
    functionName: brpc::InputMessenger::Create
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<SocketKeepaliveOptions>
    - Socket::Create
    linkageType: ''
    returnType: int
    signature: "int InputMessenger::Create(const butil::EndPoint& remote_side,\n                           time_t
      health_check_interval_s,\n                           SocketId* id)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<rdma::RdmaConnect>
      Src: /src/brpc/src/brpc/input_messenger.cpp:528,1
    - Dst: std::make_shared<SocketKeepaliveOptions>
      Src: /src/brpc/src/brpc/input_messenger.cpp:539,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:557,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:563,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/input_messenger.cpp:571,1
    - Dst: brpc::InputMessenger::FindProtocolIndex
      Src: /src/brpc/src/brpc/input_messenger.cpp:575,1
    - Dst: ListProtocols
      Src: /src/brpc/src/brpc/input_messenger.cpp:588,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:589,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:595,1
    - Dst: CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:605,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:606,1
    - Dst: DestroyImpl
      Src: /src/brpc/src/brpc/input_messenger.cpp:608,1
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:613,1
    - Dst: Socket*::CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:615,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 64
    argCount: 2
    argNames:
    - options
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 523
    functionDepth: 6
    functionLinenumber: 523
    functionLinenumberEnd: 622
    functionName: brpc::InputMessenger::Create
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - reset
    - strcmp
    - FindProtocol
    - brpc::InputMessenger::FindProtocolIndex
    - ListProtocols
    - DestroyImpl
    - std::make_shared<rdma::RdmaConnect>
    - release
    - Socket*::CheckEOF
    - CheckEOF
    - std::make_shared<SocketKeepaliveOptions>
    - std::vector::size
    linkageType: ''
    returnType: int
    signature: int InputMessenger::Create(SocketOptions options, SocketId* id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:563,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 568
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 3
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: int
    signature: int InputMessenger::FindProtocolIndex(const char* name) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/input_messenger.cpp:571,1
    - Dst: brpc::InputMessenger::FindProtocolIndex
      Src: /src/brpc/src/brpc/input_messenger.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 570
    functionDepth: 1
    functionLinenumber: 570
    functionLinenumberEnd: 577
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 4
    functionsReached:
    - FindProtocol
    - brpc::InputMessenger::FindProtocolIndex
    linkageType: ''
    returnType: int
    signature: int InputMessenger::FindProtocolIndex(ProtocolType type) const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 579
    functionDepth: 0
    functionLinenumber: 579
    functionLinenumberEnd: 584
    functionName: brpc::InputMessenger::NameOfProtocol
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * InputMessenger::NameOfProtocol(int n) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/input_messenger.cpp:588,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:589,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:595,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 586
    functionDepth: 2
    functionLinenumber: 586
    functionLinenumberEnd: 600
    functionName: brpc::FindProtocolOfHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListProtocols
    - strcmp
    - std::vector::size
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType FindProtocolOfHandler(const InputMessageHandler& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:605,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:606,1
    - Dst: DestroyImpl
      Src: /src/brpc/src/brpc/input_messenger.cpp:608,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 610
    functionName: brpc::InputMessageBase::Destroy
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - reset
    - DestroyImpl
    - CheckEOF
    linkageType: ''
    returnType: void
    signature: void InputMessageBase::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:613,1
    - Dst: Socket*::CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:615,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 618
    functionName: brpc::InputMessageBase::ReleaseSocket
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - release
    - Socket*::CheckEOF
    linkageType: ''
    returnType: Socket
    signature: Socket * InputMessageBase::ReleaseSocket()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 620
    functionName: InputMessageBase::~InputMessageBase()
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InputMessageBase::~InputMessageBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: ~ThriftMessageBase()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::ThriftFramedMessage::raw_instance
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThriftMessageBase
    signature: ThriftMessageBase * raw_instance() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ThriftFramedMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: brpc::ThriftFramedMessage::ThriftFramedMessage
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage(const ThriftFramedMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ThriftFramedMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: '& operator=(const ThriftFramedMessage& from)'
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThriftFramedMessage
    signature: ThriftFramedMessage & operator=(const ThriftFramedMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/thrift_message.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::ThriftFramedMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - channel
    argTypes:
    - ChannelBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::ThriftStub::ThriftStub
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 34
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftStub(ChannelBase* channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg2
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper(T* msg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: ~ThriftMessageWrapper()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 135
    functionName: brpc::details::ThriftMessageWrapper::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 137
    functionName: brpc::details::ThriftMessageWrapper::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: ~ThriftMessageHolder()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageHolder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 147
    functionName: brpc::details::ThriftMessageHolder::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 149
    functionName: brpc::details::ThriftMessageHolder::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - done
    argTypes:
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 158
    functionName: brpc::details::ThriftDoneWrapper::ThriftDoneWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftDoneWrapper(::google::protobuf::Closure* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::details::ThriftDoneWrapper::Run
      Src: /src/brpc/src/brpc/thrift_message.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: brpc::details::ThriftDoneWrapper::Run
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 1
    functionsReached:
    - brpc::details::ThriftDoneWrapper::Run
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg2
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper(T* msg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: ~ThriftMessageWrapper()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 135
    functionName: brpc::details::ThriftMessageWrapper::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 137
    functionName: brpc::details::ThriftMessageWrapper::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: ~ThriftMessageHolder()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageHolder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 147
    functionName: brpc::details::ThriftMessageHolder::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 149
    functionName: brpc::details::ThriftMessageHolder::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - done
    argTypes:
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 158
    functionName: brpc::details::ThriftDoneWrapper::ThriftDoneWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftDoneWrapper(::google::protobuf::Closure* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::details::ThriftDoneWrapper::Run
      Src: /src/brpc/src/brpc/thrift_message.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: brpc::details::ThriftDoneWrapper::Run
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 2
    functionsReached:
    - brpc::details::ThriftDoneWrapper::Run
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<details::ThriftMessageHolder<T>*>
      Src: /src/brpc/src/brpc/thrift_message.h:175,1
    - Dst: details::ThriftMessageHolder<T>::ThriftMessageHolder<T>
      Src: /src/brpc/src/brpc/thrift_message.h:181,1
    - Dst: empty
      Src: /src/brpc/src/brpc/thrift_message.h:186,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/thrift_message.h:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/thrift_message.h:188,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/thrift_message.h:188,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 192
    functionName: brpc::ThriftFramedMessage::Cast
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - details::ThriftMessageHolder<T>::ThriftMessageHolder<T>
    - butil::class_name<T>
    - brpc::policy::ReadThriftStruct
    - empty
    - dynamic_cast<details::ThriftMessageHolder<T>*>
    - LOG
    linkageType: ''
    returnType: T
    signature: T * ThriftFramedMessage::Cast()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::_thrift_method_name::assign
      Src: /src/brpc/src/brpc/thrift_message.h:200,1
    - Dst: brpc::ThriftStub::CallMethod
      Src: /src/brpc/src/brpc/thrift_message.h:213,1
    - Dst: details::ThriftDoneWrapper<RESPONSE>::ThriftDoneWrapper<RESPONSE>
      Src: /src/brpc/src/brpc/thrift_message.h:217,1
    - Dst: brpc::ThriftStub::CallMethod
      Src: /src/brpc/src/brpc/thrift_message.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 5
    argNames:
    - method_name
    - cntl
    - raw_request
    - raw_response
    - done
    argTypes:
    - char*
    - Controller*
    - REQUEST*
    - RESPONSE*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 222
    functionName: brpc::ThriftStub::CallMethod
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 3
    functionsReached:
    - details::ThriftDoneWrapper<RESPONSE>::ThriftDoneWrapper<RESPONSE>
    - brpc::ThriftStub::CallMethod
    - Controller*::_thrift_method_name::assign
    linkageType: ''
    returnType: void
    signature: "void ThriftStub::CallMethod(const char* method_name,\n                            Controller*
      cntl,\n                            const REQUEST* raw_request,\n                            RESPONSE*
      raw_response,\n                            ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: ~ThriftMessageBase()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::ThriftFramedMessage::raw_instance
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThriftMessageBase
    signature: ThriftMessageBase * raw_instance() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ThriftFramedMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: brpc::ThriftFramedMessage::ThriftFramedMessage
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftFramedMessage(const ThriftFramedMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - ThriftFramedMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: '& operator=(const ThriftFramedMessage& from)'
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThriftFramedMessage
    signature: ThriftFramedMessage & operator=(const ThriftFramedMessage& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/thrift_message.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::ThriftFramedMessage::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - ByteSize
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - channel
    argTypes:
    - ChannelBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::ThriftStub::ThriftStub
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 34
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftStub(ChannelBase* channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg2
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper(T* msg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: ~ThriftMessageWrapper()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 135
    functionName: brpc::details::ThriftMessageWrapper::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 137
    functionName: brpc::details::ThriftMessageWrapper::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: ~ThriftMessageHolder()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageHolder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 147
    functionName: brpc::details::ThriftMessageHolder::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 149
    functionName: brpc::details::ThriftMessageHolder::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - done
    argTypes:
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 158
    functionName: brpc::details::ThriftDoneWrapper::ThriftDoneWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftDoneWrapper(::google::protobuf::Closure* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::details::ThriftDoneWrapper::Run
      Src: /src/brpc/src/brpc/thrift_message.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: brpc::details::ThriftDoneWrapper::Run
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 3
    functionsReached:
    - brpc::details::ThriftDoneWrapper::Run
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg2
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: brpc::details::ThriftMessageWrapper::ThriftMessageWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftMessageWrapper(T* msg2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: ~ThriftMessageWrapper()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 135
    functionName: brpc::details::ThriftMessageWrapper::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 137
    functionName: brpc::details::ThriftMessageWrapper::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: ~ThriftMessageHolder()
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThriftMessageHolder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::read
      Src: /src/brpc/src/brpc/thrift_message.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - iprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 147
    functionName: brpc::details::ThriftMessageHolder::Read
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Read(::apache::thrift::protocol::TProtocol* iprot) override
      final
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::write
      Src: /src/brpc/src/brpc/thrift_message.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - oprot
    argTypes:
    - ::apache::thrift::protocol::TProtocol*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 149
    functionName: brpc::details::ThriftMessageHolder::Write
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - T::write
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Write(::apache::thrift::protocol::TProtocol* oprot) const
      override final
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - done
    argTypes:
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 158
    functionName: brpc::details::ThriftDoneWrapper::ThriftDoneWrapper
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftDoneWrapper(::google::protobuf::Closure* done)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::details::ThriftDoneWrapper::Run
      Src: /src/brpc/src/brpc/thrift_message.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 162
    functionName: brpc::details::ThriftDoneWrapper::Run
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 4
    functionsReached:
    - brpc::details::ThriftDoneWrapper::Run
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<details::ThriftMessageHolder<T>*>
      Src: /src/brpc/src/brpc/thrift_message.h:175,1
    - Dst: details::ThriftMessageHolder<T>::ThriftMessageHolder<T>
      Src: /src/brpc/src/brpc/thrift_message.h:181,1
    - Dst: empty
      Src: /src/brpc/src/brpc/thrift_message.h:186,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/thrift_message.h:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/thrift_message.h:188,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/thrift_message.h:188,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 192
    functionName: brpc::ThriftFramedMessage::Cast
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 0
    functionsReached:
    - details::ThriftMessageHolder<T>::ThriftMessageHolder<T>
    - butil::class_name<T>
    - brpc::policy::ReadThriftStruct
    - empty
    - dynamic_cast<details::ThriftMessageHolder<T>*>
    - LOG
    linkageType: ''
    returnType: T
    signature: T * ThriftFramedMessage::Cast()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::_thrift_method_name::assign
      Src: /src/brpc/src/brpc/thrift_message.h:200,1
    - Dst: brpc::ThriftStub::CallMethod
      Src: /src/brpc/src/brpc/thrift_message.h:213,1
    - Dst: details::ThriftDoneWrapper<RESPONSE>::ThriftDoneWrapper<RESPONSE>
      Src: /src/brpc/src/brpc/thrift_message.h:217,1
    - Dst: brpc::ThriftStub::CallMethod
      Src: /src/brpc/src/brpc/thrift_message.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 5
    argNames:
    - method_name
    - cntl
    - raw_request
    - raw_response
    - done
    argTypes:
    - char*
    - Controller*
    - REQUEST*
    - RESPONSE*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 222
    functionName: brpc::ThriftStub::CallMethod
    functionSourceFile: /src/brpc/src/brpc/thrift_message.h
    functionUses: 4
    functionsReached:
    - details::ThriftDoneWrapper<RESPONSE>::ThriftDoneWrapper<RESPONSE>
    - brpc::ThriftStub::CallMethod
    - Controller*::_thrift_method_name::assign
    linkageType: ''
    returnType: void
    signature: "void ThriftStub::CallMethod(const char* method_name,\n                            Controller*
      cntl,\n                            const REQUEST* raw_request,\n                            RESPONSE*
      raw_response,\n                            ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSizeLong
      Src: /src/brpc/src/brpc/protocol.h:65,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/protocol.h:67,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/protocol.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: brpc::GetProtobufByteSize
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached:
    - ByteSizeLong
    - ByteSize
    - static_cast<uint32_t>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetProtobufByteSize(const T& message)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::support_client
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool support_client() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::support_server
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool support_server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 217
    functionName: brpc::LogErrorTextAndDelete::LogErrorTextAndDelete
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogErrorTextAndDelete(bool delete_cntl = true)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: brpc::TemporaryArrayBuilder::TemporaryArrayBuilder
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TemporaryArrayBuilder()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/protocol.h:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 241
    functionName: '& push()'
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: T
    signature: T & push()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: '& operator[](size_t i)'
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator[](size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::TemporaryArrayBuilder::size
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::TemporaryArrayBuilder::raw_array
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * raw_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ByteSizeLong
      Src: /src/brpc/src/brpc/protocol.h:65,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/protocol.h:67,1
    - Dst: ByteSize
      Src: /src/brpc/src/brpc/protocol.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: brpc::GetProtobufByteSize
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached:
    - ByteSizeLong
    - ByteSize
    - static_cast<uint32_t>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetProtobufByteSize(const T& message)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::support_client
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool support_client() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: brpc::support_server
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool support_server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 217
    functionName: brpc::LogErrorTextAndDelete::LogErrorTextAndDelete
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogErrorTextAndDelete(bool delete_cntl = true)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: brpc::TemporaryArrayBuilder::TemporaryArrayBuilder
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TemporaryArrayBuilder()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/protocol.h:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 241
    functionName: '& push()'
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: T
    signature: T & push()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: '& operator[](size_t i)'
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator[](size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::TemporaryArrayBuilder::size
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::TemporaryArrayBuilder::raw_array
    functionSourceFile: /src/brpc/src/brpc/protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * raw_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - min_working_instances
    - hold_seconds
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 43
    functionName: brpc::DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy(\n        int64_t
      min_working_instances, int64_t hold_seconds)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::DefaultClusterRecoverPolicy::StartRecover
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultClusterRecoverPolicy::StartRecover()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:54,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:61,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:64,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 66
    functionName: brpc::DefaultClusterRecoverPolicy::StopRecoverIfNecessary
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - std::unique_lock::unlock
    linkageType: ''
    returnType: bool
    signature: bool DefaultClusterRecoverPolicy::StopRecoverIfNecessary()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:74,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:77,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - now_ms
    - ' server_list'
    argTypes:
    - int64_t
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 68
    functionDepth: 3
    functionLinenumber: 68
    functionLinenumberEnd: 88
    functionName: brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::IsAvailable
    - size
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: uint64_t
    signature: "uint64_t DefaultClusterRecoverPolicy::GetUsableServerCount(\n        int64_t
      now_ms, const std::vector<ServerId>& server_list)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:95,1
    - Dst: brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:96,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' server_list'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 91
    functionDepth: 4
    functionLinenumber: 91
    functionLinenumberEnd: 108
    functionName: brpc::DefaultClusterRecoverPolicy::DoReject
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - butil::fast_rand_less_than
    - brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
    linkageType: ''
    returnType: bool
    signature: bool DefaultClusterRecoverPolicy::DoReject(const std::vector<ServerId>&
      server_list)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:115,1
    - Dst: end
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:115,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:118,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:118,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:121,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:122,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:122,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:127,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:128,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:134,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:134,1
    - Dst: std::shared_ptr<ClusterRecoverPolicy>*::reset
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:138,1
    - Dst: DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:143,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 2
    argNames:
    - ' params'
    - ptr_out
    argTypes:
    - butil::StringPiece
    - std::shared_ptr<ClusterRecoverPolicy>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 147
    functionName: brpc::GetRecoverPolicyByParams
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::StringToInt64
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - butil::KeyValuePairsSplitter::key_and_value
    - begin
    - DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
    - LOG
    - std::shared_ptr<ClusterRecoverPolicy>*::reset
    linkageType: ''
    returnType: bool
    signature: "bool GetRecoverPolicyByParams(const butil::StringPiece& params,\n
      \                             std::shared_ptr<ClusterRecoverPolicy>* ptr_out)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - min_working_instances
    - hold_seconds
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 43
    functionName: brpc::DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy(\n        int64_t
      min_working_instances, int64_t hold_seconds)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::DefaultClusterRecoverPolicy::StartRecover
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultClusterRecoverPolicy::StartRecover()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:54,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:61,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:64,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 66
    functionName: brpc::DefaultClusterRecoverPolicy::StopRecoverIfNecessary
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - std::unique_lock::unlock
    linkageType: ''
    returnType: bool
    signature: bool DefaultClusterRecoverPolicy::StopRecoverIfNecessary()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:74,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:77,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - now_ms
    - ' server_list'
    argTypes:
    - int64_t
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 68
    functionDepth: 3
    functionLinenumber: 68
    functionLinenumberEnd: 88
    functionName: brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::IsAvailable
    - size
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: uint64_t
    signature: "uint64_t DefaultClusterRecoverPolicy::GetUsableServerCount(\n        int64_t
      now_ms, const std::vector<ServerId>& server_list)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:95,1
    - Dst: brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:96,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' server_list'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 91
    functionDepth: 4
    functionLinenumber: 91
    functionLinenumberEnd: 108
    functionName: brpc::DefaultClusterRecoverPolicy::DoReject
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - butil::fast_rand_less_than
    - brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
    linkageType: ''
    returnType: bool
    signature: bool DefaultClusterRecoverPolicy::DoReject(const std::vector<ServerId>&
      server_list)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:115,1
    - Dst: end
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:115,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:118,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:118,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:121,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:122,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:122,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:127,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:128,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:134,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:134,1
    - Dst: std::shared_ptr<ClusterRecoverPolicy>*::reset
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:138,1
    - Dst: DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/cluster_recover_policy.cpp:143,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 2
    argNames:
    - ' params'
    - ptr_out
    argTypes:
    - butil::StringPiece
    - std::shared_ptr<ClusterRecoverPolicy>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 147
    functionName: brpc::GetRecoverPolicyByParams
    functionSourceFile: /src/brpc/src/brpc/cluster_recover_policy.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::StringToInt64
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - butil::KeyValuePairsSplitter::key_and_value
    - begin
    - DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
    - LOG
    - std::shared_ptr<ClusterRecoverPolicy>*::reset
    linkageType: ''
    returnType: bool
    signature: "bool GetRecoverPolicyByParams(const butil::StringPiece& params,\n
      \                             std::shared_ptr<ClusterRecoverPolicy>* ptr_out)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: ~NamingServiceActions()
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingServiceActions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: brpc::NamingService::RunNamingServiceReturnsQuickly
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RunNamingServiceReturnsQuickly()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: ~NamingService()
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/naming_service.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::NamingServiceExtension
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 4
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: Extension<const NamingService>
    signature: Extension<const NamingService> * NamingServiceExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: ~NamingServiceActions()
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingServiceActions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: brpc::NamingService::RunNamingServiceReturnsQuickly
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RunNamingServiceReturnsQuickly()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: ~NamingService()
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingService()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/naming_service.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: brpc::NamingServiceExtension
    functionSourceFile: /src/brpc/src/brpc/naming_service.h
    functionUses: 4
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: Extension<const NamingService>
    signature: Extension<const NamingService> * NamingServiceExtension()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 35
    functionName: brpc::HttpHeader::HttpHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpHeader::HttpHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/http_header.cpp:38,1
    - Dst: brpc::HttpHeader::Swap
      Src: /src/brpc/src/brpc/http_header.cpp:39,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/http_header.cpp:40,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/http_header.cpp:41,1
    - Dst: swap
      Src: /src/brpc/src/brpc/http_header.cpp:42,1
    - Dst: swap
      Src: /src/brpc/src/brpc/http_header.cpp:43,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/http_header.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - HttpHeader
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: brpc::HttpHeader::Swap
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 1
    functionsReached:
    - brpc::HttpHeader::Swap
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void HttpHeader::Swap(HttpHeader &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:48,1
    - Dst: brpc::HttpHeader::Clear
      Src: /src/brpc/src/brpc/http_header.cpp:49,1
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:52,1
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:53,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/http_header.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 55
    functionName: brpc::HttpHeader::Clear
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 1
    functionsReached:
    - clear
    - std::make_pair
    - brpc::HttpHeader::Clear
    linkageType: ''
    returnType: void
    signature: void HttpHeader::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/src/brpc/http_header.cpp:58,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/http_header.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: brpc::HttpHeader::GetHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 3
    functionsReached:
    - std::string
    - brpc::HttpHeader::GetHeader
    linkageType: ''
    returnType: std::string
    signature: std::string * HttpHeader::GetHeader(const char* key) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:62,1
    - Dst: seek
      Src: /src/brpc/src/brpc/http_header.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: brpc::HttpHeader::GetHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 3
    functionsReached:
    - brpc::HttpHeader::IsSetCookie
    - seek
    linkageType: ''
    returnType: std::string
    signature: std::string * HttpHeader::GetHeader(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::GetMultiLineHeaders
      Src: /src/brpc/src/brpc/http_header.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::HttpHeader::GetAllSetCookieHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - brpc::HttpHeader::GetMultiLineHeaders
    linkageType: ''
    returnType: std::vector<const std::string*>
    signature: std::vector<const std::string*> HttpHeader::GetAllSetCookieHeader()
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.cpp:77,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/http_header.cpp:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 82
    functionName: brpc::HttpHeader::GetMultiLineHeaders
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 1
    functionsReached:
    - _header_key_equal
    - std::vector::push_back
    linkageType: ''
    returnType: std::vector<const std::string*>
    signature: std::vector<const std::string*> HttpHeader::GetMultiLineHeaders(const
      std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/http_header.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 87
    functionName: brpc::HttpHeader::SetHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 8
    functionsReached:
    - GetOrAddHeader
    linkageType: ''
    returnType: void
    signature: "void HttpHeader::SetHeader(const std::string& key,\n                           const
      std::string& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsContentType
      Src: /src/brpc/src/brpc/http_header.cpp:90,1
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:91,1
    - Dst: erase
      Src: /src/brpc/src/brpc/http_header.cpp:93,1
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 98
    functionName: brpc::HttpHeader::RemoveHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 6
    functionsReached:
    - brpc::HttpHeader::IsSetCookie
    - erase
    - clear
    - brpc::HttpHeader::IsContentType
    linkageType: ''
    returnType: void
    signature: void HttpHeader::RemoveHeader(const char* key)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::CanFoldedInLine
      Src: /src/brpc/src/brpc/http_header.cpp:102,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/http_header.cpp:104,1
    - Dst: assign
      Src: /src/brpc/src/brpc/http_header.cpp:105,1
    - Dst: data
      Src: /src/brpc/src/brpc/http_header.cpp:105,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:105,1
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/http_header.cpp:107,1
    - Dst: empty
      Src: /src/brpc/src/brpc/http_header.cpp:108,1
    - Dst: assign
      Src: /src/brpc/src/brpc/http_header.cpp:109,1
    - Dst: data
      Src: /src/brpc/src/brpc/http_header.cpp:109,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:109,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/http_header.cpp:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:111,1
    - Dst: append
      Src: /src/brpc/src/brpc/http_header.cpp:112,1
    - Dst: brpc::HttpHeader::HeaderValueDelimiter
      Src: /src/brpc/src/brpc/http_header.cpp:112,1
    - Dst: append
      Src: /src/brpc/src/brpc/http_header.cpp:113,1
    - Dst: data
      Src: /src/brpc/src/brpc/http_header.cpp:113,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:113,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 100
    functionDepth: 2
    functionLinenumber: 100
    functionLinenumberEnd: 116
    functionName: brpc::HttpHeader::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - append
    - reserve
    - brpc::HttpHeader::CanFoldedInLine
    - AddHeader
    - assign
    - GetOrAddHeader
    - brpc::HttpHeader::HeaderValueDelimiter
    - empty
    - data
    - size
    linkageType: ''
    returnType: void
    signature: "void HttpHeader::AppendHeader(const std::string& key,\n    const butil::StringPiece&
      value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HttpReasonPhrase
      Src: /src/brpc/src/brpc/http_header.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: brpc::HttpHeader::reason_phrase
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - HttpReasonPhrase
    linkageType: ''
    returnType: char
    signature: char * HttpHeader::reason_phrase() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - status_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::HttpHeader::set_status_code
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpHeader::set_status_code(int status_code)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsContentType
      Src: /src/brpc/src/brpc/http_header.cpp:127,1
    - Dst: IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:131,1
    - Dst: seek
      Src: /src/brpc/src/brpc/http_header.cpp:137,1
    - Dst: insert
      Src: /src/brpc/src/brpc/http_header.cpp:139,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 145
    functionName: '& HttpHeader::GetOrAddHeader(const std::string& key)'
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 0
    functionsReached:
    - seek
    - IsSetCookie
    - IsContentType
    - insert
    linkageType: ''
    returnType: std::string
    signature: std::string & HttpHeader::GetOrAddHeader(const std::string& key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/src/brpc/http_header.cpp:148,1
    - Dst: IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 153
    functionName: '& HttpHeader::AddHeader(const std::string& key)'
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 0
    functionsReached:
    - IsSetCookie
    - insert
    linkageType: ''
    returnType: std::string
    signature: std::string & HttpHeader::AddHeader(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: brpc::DefaultHttpHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & DefaultHttpHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 35
    functionName: brpc::HttpHeader::HttpHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpHeader::HttpHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/http_header.cpp:38,1
    - Dst: brpc::HttpHeader::Swap
      Src: /src/brpc/src/brpc/http_header.cpp:39,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/http_header.cpp:40,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/http_header.cpp:41,1
    - Dst: swap
      Src: /src/brpc/src/brpc/http_header.cpp:42,1
    - Dst: swap
      Src: /src/brpc/src/brpc/http_header.cpp:43,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/http_header.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - HttpHeader
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: brpc::HttpHeader::Swap
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - brpc::HttpHeader::Swap
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void HttpHeader::Swap(HttpHeader &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:48,1
    - Dst: brpc::HttpHeader::Clear
      Src: /src/brpc/src/brpc/http_header.cpp:49,1
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:52,1
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:53,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/http_header.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 55
    functionName: brpc::HttpHeader::Clear
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - clear
    - std::make_pair
    - brpc::HttpHeader::Clear
    linkageType: ''
    returnType: void
    signature: void HttpHeader::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::GetHeader
      Src: /src/brpc/src/brpc/http_header.cpp:58,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/http_header.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: brpc::HttpHeader::GetHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 4
    functionsReached:
    - std::string
    - brpc::HttpHeader::GetHeader
    linkageType: ''
    returnType: std::string
    signature: std::string * HttpHeader::GetHeader(const char* key) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:62,1
    - Dst: seek
      Src: /src/brpc/src/brpc/http_header.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: brpc::HttpHeader::GetHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 4
    functionsReached:
    - brpc::HttpHeader::IsSetCookie
    - seek
    linkageType: ''
    returnType: std::string
    signature: std::string * HttpHeader::GetHeader(const std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::GetMultiLineHeaders
      Src: /src/brpc/src/brpc/http_header.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::HttpHeader::GetAllSetCookieHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - brpc::HttpHeader::GetMultiLineHeaders
    linkageType: ''
    returnType: std::vector<const std::string*>
    signature: std::vector<const std::string*> HttpHeader::GetAllSetCookieHeader()
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _header_key_equal
      Src: /src/brpc/src/brpc/http_header.cpp:77,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/http_header.cpp:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 82
    functionName: brpc::HttpHeader::GetMultiLineHeaders
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - _header_key_equal
    - std::vector::push_back
    linkageType: ''
    returnType: std::vector<const std::string*>
    signature: std::vector<const std::string*> HttpHeader::GetMultiLineHeaders(const
      std::string& key) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/http_header.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 87
    functionName: brpc::HttpHeader::SetHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 8
    functionsReached:
    - GetOrAddHeader
    linkageType: ''
    returnType: void
    signature: "void HttpHeader::SetHeader(const std::string& key,\n                           const
      std::string& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::IsContentType
      Src: /src/brpc/src/brpc/http_header.cpp:90,1
    - Dst: clear
      Src: /src/brpc/src/brpc/http_header.cpp:91,1
    - Dst: erase
      Src: /src/brpc/src/brpc/http_header.cpp:93,1
    - Dst: brpc::HttpHeader::IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 98
    functionName: brpc::HttpHeader::RemoveHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 6
    functionsReached:
    - brpc::HttpHeader::IsSetCookie
    - erase
    - clear
    - brpc::HttpHeader::IsContentType
    linkageType: ''
    returnType: void
    signature: void HttpHeader::RemoveHeader(const char* key)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpHeader::CanFoldedInLine
      Src: /src/brpc/src/brpc/http_header.cpp:102,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/http_header.cpp:104,1
    - Dst: assign
      Src: /src/brpc/src/brpc/http_header.cpp:105,1
    - Dst: data
      Src: /src/brpc/src/brpc/http_header.cpp:105,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:105,1
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/http_header.cpp:107,1
    - Dst: empty
      Src: /src/brpc/src/brpc/http_header.cpp:108,1
    - Dst: assign
      Src: /src/brpc/src/brpc/http_header.cpp:109,1
    - Dst: data
      Src: /src/brpc/src/brpc/http_header.cpp:109,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:109,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/http_header.cpp:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:111,1
    - Dst: append
      Src: /src/brpc/src/brpc/http_header.cpp:112,1
    - Dst: brpc::HttpHeader::HeaderValueDelimiter
      Src: /src/brpc/src/brpc/http_header.cpp:112,1
    - Dst: append
      Src: /src/brpc/src/brpc/http_header.cpp:113,1
    - Dst: data
      Src: /src/brpc/src/brpc/http_header.cpp:113,1
    - Dst: size
      Src: /src/brpc/src/brpc/http_header.cpp:113,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 100
    functionDepth: 2
    functionLinenumber: 100
    functionLinenumberEnd: 116
    functionName: brpc::HttpHeader::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - append
    - reserve
    - brpc::HttpHeader::CanFoldedInLine
    - AddHeader
    - assign
    - GetOrAddHeader
    - brpc::HttpHeader::HeaderValueDelimiter
    - empty
    - data
    - size
    linkageType: ''
    returnType: void
    signature: "void HttpHeader::AppendHeader(const std::string& key,\n    const butil::StringPiece&
      value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HttpReasonPhrase
      Src: /src/brpc/src/brpc/http_header.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: brpc::HttpHeader::reason_phrase
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached:
    - HttpReasonPhrase
    linkageType: ''
    returnType: char
    signature: char * HttpHeader::reason_phrase() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - status_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: brpc::HttpHeader::set_status_code
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpHeader::set_status_code(int status_code)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsContentType
      Src: /src/brpc/src/brpc/http_header.cpp:127,1
    - Dst: IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:131,1
    - Dst: seek
      Src: /src/brpc/src/brpc/http_header.cpp:137,1
    - Dst: insert
      Src: /src/brpc/src/brpc/http_header.cpp:139,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 145
    functionName: '& HttpHeader::GetOrAddHeader(const std::string& key)'
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 0
    functionsReached:
    - seek
    - IsSetCookie
    - IsContentType
    - insert
    linkageType: ''
    returnType: std::string
    signature: std::string & HttpHeader::GetOrAddHeader(const std::string& key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/src/brpc/http_header.cpp:148,1
    - Dst: IsSetCookie
      Src: /src/brpc/src/brpc/http_header.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 153
    functionName: '& HttpHeader::AddHeader(const std::string& key)'
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 0
    functionsReached:
    - IsSetCookie
    - insert
    linkageType: ''
    returnType: std::string
    signature: std::string & HttpHeader::AddHeader(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 158
    functionName: brpc::DefaultHttpHeader
    functionSourceFile: /src/brpc/src/brpc/http_header.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & DefaultHttpHeader()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:33,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - type
    - handler
    argTypes:
    - CompressType
    - CompressHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 47
    functionName: brpc::RegisterCompressHandler
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RegisterCompressHandler(CompressType type, \n                            CompressHandler
      handler)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:54,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: brpc::FindCompressHandler
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressHandler
    signature: CompressHandler * FindCompressHandler(CompressType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/compress.cpp:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 2
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: brpc::CompressTypeToCStr
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindCompressHandler
    linkageType: ''
    returnType: char
    signature: char * CompressTypeToCStr(CompressType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<CompressHandler>*::clear
      Src: /src/brpc/src/brpc/compress.cpp:72,1
    - Dst: std::vector<CompressHandler>*::push_back
      Src: /src/brpc/src/brpc/compress.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<CompressHandler>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 78
    functionName: brpc::ListCompressHandler
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 2
    functionsReached:
    - std::vector<CompressHandler>*::push_back
    - std::vector<CompressHandler>*::clear
    linkageType: ''
    returnType: void
    signature: void ListCompressHandler(std::vector<CompressHandler>* vec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/compress.cpp:84,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/compress.cpp:86,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/compress.cpp:92,1
    - Dst: CompressHandler*::Decompress
      Src: /src/brpc/src/brpc/compress.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' data'
    - msg
    - compress_type
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 95
    functionName: brpc::ParseFromCompressedData
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromIOBuf
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - CompressHandler*::Decompress
    - brpc::FindCompressHandler
    linkageType: ''
    returnType: bool
    signature: "bool ParseFromCompressedData(const butil::IOBuf& data, \n                             google::protobuf::Message*
      msg,\n                             CompressType compress_type)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/compress.cpp:101,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/compress.cpp:103,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/compress.cpp:109,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/compress.cpp:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - compress_type
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 97
    functionDepth: 2
    functionLinenumber: 97
    functionLinenumberEnd: 112
    functionName: brpc::SerializeAsCompressedData
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 2
    functionsReached:
    - SerializeToZeroCopyStream
    - CompressHandler*::Compress
    - brpc::FindCompressHandler
    linkageType: ''
    returnType: bool
    signature: "bool SerializeAsCompressedData(const google::protobuf::Message& msg,\n
      \                              butil::IOBuf* buf, CompressType compress_type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/compress.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 119
    functionName: brpc::Serializer::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata Serializer::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/compress.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 121
    functionDepth: 2
    functionLinenumber: 121
    functionLinenumberEnd: 126
    functionName: brpc::Deserializer::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata Deserializer::GetMetadata() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:33,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - type
    - handler
    argTypes:
    - CompressType
    - CompressHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 47
    functionName: brpc::RegisterCompressHandler
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RegisterCompressHandler(CompressType type, \n                            CompressHandler
      handler)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/compress.cpp:54,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: brpc::FindCompressHandler
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 3
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressHandler
    signature: CompressHandler * FindCompressHandler(CompressType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/compress.cpp:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 63
    functionDepth: 2
    functionLinenumber: 63
    functionLinenumberEnd: 69
    functionName: brpc::CompressTypeToCStr
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::FindCompressHandler
    linkageType: ''
    returnType: char
    signature: char * CompressTypeToCStr(CompressType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<CompressHandler>*::clear
      Src: /src/brpc/src/brpc/compress.cpp:72,1
    - Dst: std::vector<CompressHandler>*::push_back
      Src: /src/brpc/src/brpc/compress.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - vec
    argTypes:
    - std::vector<CompressHandler>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 78
    functionName: brpc::ListCompressHandler
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 2
    functionsReached:
    - std::vector<CompressHandler>*::push_back
    - std::vector<CompressHandler>*::clear
    linkageType: ''
    returnType: void
    signature: void ListCompressHandler(std::vector<CompressHandler>* vec)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/compress.cpp:84,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/compress.cpp:86,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/compress.cpp:92,1
    - Dst: CompressHandler*::Decompress
      Src: /src/brpc/src/brpc/compress.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' data'
    - msg
    - compress_type
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 95
    functionName: brpc::ParseFromCompressedData
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParsePbFromIOBuf
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - CompressHandler*::Decompress
    - brpc::FindCompressHandler
    linkageType: ''
    returnType: bool
    signature: "bool ParseFromCompressedData(const butil::IOBuf& data, \n                             google::protobuf::Message*
      msg,\n                             CompressType compress_type)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/compress.cpp:101,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/compress.cpp:103,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/compress.cpp:109,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/compress.cpp:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - compress_type
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 97
    functionDepth: 2
    functionLinenumber: 97
    functionLinenumberEnd: 112
    functionName: brpc::SerializeAsCompressedData
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 2
    functionsReached:
    - SerializeToZeroCopyStream
    - CompressHandler*::Compress
    - brpc::FindCompressHandler
    linkageType: ''
    returnType: bool
    signature: "bool SerializeAsCompressedData(const google::protobuf::Message& msg,\n
      \                              butil::IOBuf* buf, CompressType compress_type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/compress.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 119
    functionName: brpc::Serializer::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata Serializer::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/compress.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 121
    functionDepth: 2
    functionLinenumber: 121
    functionLinenumberEnd: 126
    functionName: brpc::Deserializer::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/compress.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    linkageType: ''
    returnType: ::google::protobuf::Metadata
    signature: ::google::protobuf::Metadata Deserializer::GetMetadata() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NsheadServiceOptions
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: brpc::NsheadPbServiceAdaptor::NsheadPbServiceAdaptor
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.h
    functionUses: 0
    functionsReached:
    - NsheadServiceOptions
    linkageType: ''
    returnType: void
    signature: void NsheadPbServiceAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: ~NsheadPbServiceAdaptor()
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NsheadPbServiceAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NsheadServiceOptions
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: brpc::NsheadPbServiceAdaptor::NsheadPbServiceAdaptor
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.h
    functionUses: 0
    functionsReached:
    - NsheadServiceOptions
    linkageType: ''
    returnType: void
    signature: void NsheadPbServiceAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: ~NsheadPbServiceAdaptor()
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NsheadPbServiceAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: brpc::ServerId
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id_in
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::ServerId
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId(SocketId id_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - id_in
    - ' tag_in'
    argTypes:
    - SocketId
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::ServerId
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId(SocketId id_in, const std::string& tag_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' id1'
    - ' id2'
    argTypes:
    - ServerId
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: operator==(const ServerId& id1, const ServerId& id2)
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ServerId& id1, const ServerId& id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' id1'
    - ' id2'
    argTypes:
    - ServerId
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: operator!=(const ServerId& id1, const ServerId& id2)
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const ServerId& id1, const ServerId& id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' id1'
    - ' id2'
    argTypes:
    - ServerId
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 47
    functionName: operator<(const ServerId& id1, const ServerId& id2)
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ServerId& id1, const ServerId& id2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tag::empty
      Src: /src/brpc/src/brpc/server_id.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' tsid'
    argTypes:
    - std::ostream
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: '& operator<<(std::ostream& os, const ServerId& tsid)'
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached:
    - tag::empty
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ServerId& tsid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: brpc::ServerId
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id_in
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::ServerId
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId(SocketId id_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - id_in
    - ' tag_in'
    argTypes:
    - SocketId
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: brpc::ServerId
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerId(SocketId id_in, const std::string& tag_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' id1'
    - ' id2'
    argTypes:
    - ServerId
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: operator==(const ServerId& id1, const ServerId& id2)
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const ServerId& id1, const ServerId& id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' id1'
    - ' id2'
    argTypes:
    - ServerId
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: operator!=(const ServerId& id1, const ServerId& id2)
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const ServerId& id1, const ServerId& id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' id1'
    - ' id2'
    argTypes:
    - ServerId
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 47
    functionName: operator<(const ServerId& id1, const ServerId& id2)
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ServerId& id1, const ServerId& id2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tag::empty
      Src: /src/brpc/src/brpc/server_id.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' tsid'
    argTypes:
    - std::ostream
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: '& operator<<(std::ostream& os, const ServerId& tsid)'
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached:
    - tag::empty
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ServerId& tsid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash<std::string>
      Src: /src/brpc/src/brpc/server_id.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tagged_id'
    argTypes:
    - ::brpc::ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: operator()(const ::brpc::ServerId& tagged_id) const
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached:
    - hash<std::string>
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const ::brpc::ServerId& tagged_id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash_value
      Src: /src/brpc/src/brpc/server_id.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tagged_id'
    argTypes:
    - ::brpc::ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: BUTIL_HASH_NAMESPACE::hash_value
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 1
    functionsReached:
    - BUTIL_HASH_NAMESPACE::hash_value
    linkageType: ''
    returnType: size_t
    signature: size_t hash_value(const ::brpc::ServerId& tagged_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash<std::string>
      Src: /src/brpc/src/brpc/server_id.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tagged_id'
    argTypes:
    - ::brpc::ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: operator()(const ::brpc::ServerId& tagged_id) const
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 0
    functionsReached:
    - hash<std::string>
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const ::brpc::ServerId& tagged_id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash_value
      Src: /src/brpc/src/brpc/server_id.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tagged_id'
    argTypes:
    - ::brpc::ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: BUTIL_HASH_NAMESPACE::hash_value
    functionSourceFile: /src/brpc/src/brpc/server_id.h
    functionUses: 2
    functionsReached:
    - BUTIL_HASH_NAMESPACE::hash_value
    linkageType: ''
    returnType: size_t
    signature: size_t hash_value(const ::brpc::ServerId& tagged_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - rpc_header
    - meta_size
    - payload_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 78
    functionName: brpc::policy::PackRpcHeader
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SofaRawPacker::SofaRawPacker
    linkageType: ''
    returnType: void
    signature: void PackRpcHeader(char* rpc_header, uint32_t meta_size, int payload_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:82,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:85,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 100
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK_EQ
    - CHECK
    - SerializeWithCachedSizes
    - brpc::policy::PackRpcHeader
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcHeaderAndMeta(\n    butil::IOBuf* out, const RpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:105,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:109,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:117,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:125,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:127,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:136,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:140,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 143
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRpcMessage(butil::IOBuf* source, Socket* socket,\n
      \                           bool /*read_eof*/, const void*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:153,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:155,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:162,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:168,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:170,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:173,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:175,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:176,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:184,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:185,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:190,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:200,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:205,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:208,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:210,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 6
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 145
    functionDepth: 3
    functionLinenumber: 145
    functionLinenumberEnd: 213
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - ComputeDataChecksum
    - has_pb_bytes_to_base64
    - has_pb_jsonify_empty_array
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    - json2pb::ProtoMessageToJson
    - GetDescriptor
    - SerializeTo
    - CompressHandler*::Compress
    - SerializeToZeroCopyStream
    - has_pb_single_repeated_to_array
    - LOG
    - serialize
    - has_always_print_primitive_fields
    linkageType: ''
    returnType: bool
    signature: "bool SerializeRpcMessage(const google::protobuf::Message& message,\n
      \                        Controller& cntl, ContentType content_type,\n                         CompressType
      compress_type, ChecksumType checksum_type,\n                         butil::IOBuf*
      buf)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:223,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:224,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:229,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:231,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:237,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:238,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 243
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - response_compress_type
    - response_checksum_type
    - ChecksumTypeToCStr
    - IsInitialized
    - CompressTypeToCStr
    - GetDescriptor
    - response_content_type
    - InitializationErrorString
    - brpc::policy::SerializeRpcMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - ContentTypeToCStr
    - SetFailed
    - serialized_data
    linkageType: ''
    returnType: bool
    signature: "bool SerializeResponse(const google::protobuf::Message& res,\n                              Controller&
      cntl, butil::IOBuf& buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:274,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:278,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:280,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:281,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:287,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:296,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:297,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 6
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 302
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - brpc::policy::Return
    - ControllerPrivateAccessor::span
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - static_cast<BaiduProxyPBMessages*>
    - recycle_cntl
    - ConcurrencyRemover concurrency_remover
    - Span*::set_start_send_us
    - Controller*::CallAfterRpcResp
    - Server*::options
    - RpcPBMessages*::Request
    linkageType: ''
    returnType: void
    signature: "void SendRpcResponse(int64_t correlation_id, Controller* cntl,\n                     RpcPBMessages*
      messages, const Server* server,\n                     MethodStatus* method_status,
      int64_t received_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - rpc_header
    - meta_size
    - payload_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 78
    functionName: brpc::policy::PackRpcHeader
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::SofaRawPacker::SofaRawPacker
    linkageType: ''
    returnType: void
    signature: void PackRpcHeader(char* rpc_header, uint32_t meta_size, int payload_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:82,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:85,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 100
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK_EQ
    - CHECK
    - SerializeWithCachedSizes
    - brpc::policy::PackRpcHeader
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcHeaderAndMeta(\n    butil::IOBuf* out, const RpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:105,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:109,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:117,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:125,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:127,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:136,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:140,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 143
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRpcMessage(butil::IOBuf* source, Socket* socket,\n
      \                           bool /*read_eof*/, const void*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:153,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:155,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:162,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:168,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:170,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:173,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:175,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:176,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:184,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:185,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:190,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:200,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:205,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:208,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:210,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 6
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 145
    functionDepth: 3
    functionLinenumber: 145
    functionLinenumberEnd: 213
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - ComputeDataChecksum
    - has_pb_bytes_to_base64
    - has_pb_jsonify_empty_array
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    - json2pb::ProtoMessageToJson
    - GetDescriptor
    - SerializeTo
    - CompressHandler*::Compress
    - SerializeToZeroCopyStream
    - has_pb_single_repeated_to_array
    - LOG
    - serialize
    - has_always_print_primitive_fields
    linkageType: ''
    returnType: bool
    signature: "bool SerializeRpcMessage(const google::protobuf::Message& message,\n
      \                        Controller& cntl, ContentType content_type,\n                         CompressType
      compress_type, ChecksumType checksum_type,\n                         butil::IOBuf*
      buf)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:223,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:224,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:229,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:231,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:237,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:238,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 243
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - response_compress_type
    - response_checksum_type
    - ChecksumTypeToCStr
    - IsInitialized
    - CompressTypeToCStr
    - GetDescriptor
    - response_content_type
    - InitializationErrorString
    - brpc::policy::SerializeRpcMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - ContentTypeToCStr
    - SetFailed
    - serialized_data
    linkageType: ''
    returnType: bool
    signature: "bool SerializeResponse(const google::protobuf::Message& res,\n                              Controller&
      cntl, butil::IOBuf& buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:274,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:278,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:280,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:281,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:287,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:296,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:297,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 6
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 302
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - brpc::policy::Return
    - ControllerPrivateAccessor::span
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - static_cast<BaiduProxyPBMessages*>
    - recycle_cntl
    - ConcurrencyRemover concurrency_remover
    - Span*::set_start_send_us
    - Controller*::CallAfterRpcResp
    - Server*::options
    - RpcPBMessages*::Request
    linkageType: ''
    returnType: void
    signature: "void SendRpcResponse(int64_t correlation_id, Controller* cntl,\n                     RpcPBMessages*
      messages, const Server* server,\n                     MethodStatus* method_status,
      int64_t received_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 475
    functionName: brpc::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs*::service::CallMethod
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:485,1
    - Dst: brpc::EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 6
    argNames:
    - service
    - method
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::Service*
    - ::google::protobuf::MethodDescriptor*
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Message*
    - ::google::protobuf::Message*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 493
    functionName: brpc::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - brpc::EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(\n    ::google::protobuf::Service*
      service,\n    const ::google::protobuf::MethodDescriptor* method,\n    ::google::protobuf::RpcController*
      controller,\n    const ::google::protobuf::Message* request,\n    ::google::protobuf::Message*
      response,\n    ::google::protobuf::Closure* done)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VerifyDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:501,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:507,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:509,1
    - Dst: CompressHandler*::Decompress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:513,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:521,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:523,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:528,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:529,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:531,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:533,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:534,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:539,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:546,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:548,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:549,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:554,1
    - Dst: brpc::NonreflectableMessage::_InternalParse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:558,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:560,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 44
    argCount: 6
    argNames:
    - ' data'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - message
    argTypes:
    - butil::IOBuf
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 495
    functionDepth: 10
    functionLinenumber: 495
    functionLinenumberEnd: 563
    functionName: brpc::DeserializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - has_pb_bytes_to_base64
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::VerifyDataChecksum
    - json2pb::ProtoJsonToProtoMessage
    - brpc::FindCompressHandler
    - has_pb_single_repeated_to_array
    - google::protobuf::Message*::GetDescriptor
    - brpc::NonreflectableMessage::_InternalParse
    - CompressHandler*::Decompress
    - deserialize
    - json2pb::JsonToProtoMessage
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: "bool DeserializeRpcMessage(const butil::IOBuf& data, Controller& cntl,\n
      \                          ContentType content_type, CompressType compress_type,\n
      \                          ChecksumType checksum_type,\n                           google::protobuf::Message*
      message)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:566,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:568,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:569,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:570,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:570,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:574,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:575,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:576,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:577,1
    - Dst: RpcMeta::request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:580,1
    - Dst: brpc::AskToBeSampled
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:582,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:584,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:584,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:585,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:585,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:587,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:588,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:588,1
    - Dst: SampledRequest*::meta::set_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:589,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:589,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:591,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:594,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:596,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:603,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:604,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: RpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:606,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:607,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:607,1
    - Dst: RpcRequestMeta::has_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:609,1
    - Dst: std::unique_ptr::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:610,1
    - Dst: RpcRequestMeta::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:610,1
    - Dst: RpcRequestMeta::has_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:612,1
    - Dst: std::unique_ptr::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:613,1
    - Dst: RpcRequestMeta::timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:613,1
    - Dst: std::unique_ptr::set_request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:615,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:615,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:616,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:616,1
    - Dst: std::unique_ptr::set_request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:617,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:617,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:618,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:618,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:619,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:621,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:622,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:623,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:624,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:626,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:629,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:630,1
    - Dst: RpcMeta::release_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:630,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:633,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:634,1
    - Dst: std::unique_ptr::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:635,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:640,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:641,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:641,1
    - Dst: brpc::IsTraceable
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:645,1
    - Dst: RpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:645,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:646,1
    - Dst: RpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:647,1
    - Dst: RpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:647,1
    - Dst: RpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:649,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:650,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:650,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:651,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:651,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:652,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:653,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:653,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:654,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:655,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:660,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:661,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:666,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:668,1
    - Dst: brpc::TooManyUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:672,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:678,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:678,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:679,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:680,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:681,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:683,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:690,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:691,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:692,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:693,1
    - Dst: ignore_eovercrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:693,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:694,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:695,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:695,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:698,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:699,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:701,1
    - Dst: auto::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:704,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:704,1
    - Dst: auto::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:705,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:705,1
    - Dst: std::unique_ptr::reset_sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:706,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:708,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:709,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:712,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:712,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:713,1
    - Dst: butil::class_name<BaiduMasterService>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:716,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:721,1
    - Dst: auto::meta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:721,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:724,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:725,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:726,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:726,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:727,1
    - Dst: DestroyingPtr::payload::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:728,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:729,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:734,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:735,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:737,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:739,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:740,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:743,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:746,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:747,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:749,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:750,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:751,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:753,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:753,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:756,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:756,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:757,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:757,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:760,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:761,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:763,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:765,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:765,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:769,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:773,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:773,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:774,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:777,1
    - Dst: const_cast<google::protobuf::MethodDescriptor*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:782,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:783,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:786,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:786,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:789,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:789,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:793,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:794,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:795,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:796,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:797,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:800,1
    - Dst: static_cast<CompressType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:802,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:802,1
    - Dst: static_cast<ChecksumType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:806,1
    - Dst: Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:806,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:807,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:809,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:810,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:814,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:815,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:816,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:817,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:820,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n
        \           const Server*, MethodStatus*, int64_t>"
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:824,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:827,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:827,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:828,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:831,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:834,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:834,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:835,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:838,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:838,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:839,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:840,1
    - Dst: brpc::BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:842,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:843,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:843,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:844,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:845,1
    - Dst: brpc::EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:846,1
    - Dst: brpc::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:848,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:849,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:850,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:851,1
    - Dst: SendRpcResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:857,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:857,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:858,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:860,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 167
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 565
    functionDepth: 11
    functionLinenumber: 565
    functionLinenumberEnd: 861
    functionName: brpc::ProcessRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - RpcMeta::request
    - std::unique_ptr::remote_side
    - BadMethodRequest::set_service_name
    - std::unique_ptr::set_request_id
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - RpcRequestMeta::timeout_ms
    - Server*::AcceptRequest
    - brpc::ChecksumTypeToCStr
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - Server::ServiceProperty*::service::GetDescriptor
    - std::unique_ptr::release
    - Socket*::auth_context
    - butil::class_name<BaiduMasterService>
    - RpcMeta::correlation_id
    - Server*::thread_local_options
    - Span*::set_received_us
    - DestroyingPtr::reset
    - brpc::CompressTypeToCStr
    - DestroyingPtr::base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_service_name
    - std::unique_ptr::get
    - RpcMeta::release_stream_settings
    - std::unique_ptr::set_timeout_ms
    - SendRpcResponse
    - std::unique_ptr::set_request_content_type
    - DestroyingPtr::payload::size
    - RpcRequestMeta::has_timeout_ms
    - butil::endpoint2str
    - std::unique_ptr::request_attachment
    - brpc::AskToBeSampled
    - ScopedNonServiceError::release
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - static_cast<ChecksumType>
    - RpcRequestMeta::service_name
    - static_cast<const Server*>
    - RpcPBMessages*::Request
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - Socket*::is_overcrowded
    - RpcMeta::has_stream_settings
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - RpcRequestMeta::has_request_id
    - RpcMeta::has_attachment_size
    - std::unique_ptr::set_request_checksum_type
    - Span*::set_request_size
    - serialized_data
    - butil::StringPiece::find
    - SampledRequest*::meta::set_method_name
    - SampledRequest*::meta::set_authentication_data
    - Socket*::SetFailed
    - ControllerPrivateAccessor::set_checksum_value
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - RpcRequestMeta::log_id
    - brpc::DeserializeRpcMessage
    - SampledRequest*::meta::set_protocol_type
    - DestroyingPtr::meta::size
    - Controller::Controller
    - RpcPBMessages*::Response
    - DestroyingPtr::payload::cutn
    - std::unique_ptr::set_request_compress_type
    - DestroyingPtr::received_us
    - RpcMeta::content_type
    - std::unique_ptr::request_user_fields
    - butil::IOBuf::clear
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::cpuwide_time_us
    - const_cast<google::protobuf::MethodDescriptor*>
    - brpc::BeginRunningUserCode
    - auto::meta::set_service_name
    - Span*::set_protocol
    - DestroyingPtr::payload::empty
    - "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n            const
      Server*, MethodStatus*, int64_t>"
    - Server*::options
    - Socket*::remote_side
    - Socket*::description
    - Socket*::id
    - TestRpcPBMessageFactory::Get
    - std::unique_ptr::reset_sampled_request
    - RpcRequestMeta::has_log_id
    - ControllerPrivateAccessor::set_method
    - RpcRequestMeta::has_trace_id
    - brpc::ParsePbFromIOBuf
    - brpc::TooManyUserCode
    - Server::MethodProperty*::service::GetDescriptor
    - SampledRequest::SampledRequest
    - static_cast<int>
    - brpc::IsTraceable
    - ignore_eovercrowded
    - RpcRequestMeta::parent_span_id
    - brpc::EndRunningUserCodeInPlace
    - RpcMeta::compress_type
    - RpcRequestMeta::span_id
    - Server*::IsRunning
    - butil::IOBuf::IOBuf
    - RpcMeta::attachment_size
    - RpcRequestMeta::method_name
    - RpcMeta::authentication_data
    - RpcRequestMeta::request_id
    - google::protobuf::MethodDescriptor*::full_name
    - RpcMeta::checksum_value
    - MethodStatus*::OnRequested
    - RpcRequestMeta::trace_id
    - auto::meta::method_name
    - static_cast<CompressType>
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - SocketUniquePtr::get
    - std::unique_ptr::set_log_id
    - SampledRequest*::meta::set_attachment_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - RpcMeta::checksum_type
    - InputMessageBase*::arg
    - brpc::ContentTypeToCStr
    - Span*::ResetServerSpanName
    - auto::meta::set_method_name
    - RpcMeta::user_fields
    - Span*::set_log_id
    - ControllerPrivateAccessor::set_remote_stream_settings
    - Span*::AsParent
    - brpc::EndRunningCallMethodInPool
    - Get
    linkageType: ''
    returnType: void
    signature: void ProcessRpcRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:865,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:866,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:866,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:867,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:870,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:871,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:874,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:879,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:879,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:880,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:881,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:887,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:887,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:888,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:889,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:890,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:891,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:892,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:893,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:895,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:896,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:899,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:900,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 904
      start: 863
    functionDepth: 2
    functionLinenumber: 863
    functionLinenumberEnd: 904
    functionName: brpc::VerifyRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::IOBuf
    - RpcMeta::authentication_data
    - SerializeRpcHeaderAndMeta
    - MostCommonMessage*::socket
    - RpcMeta::mutable_response
    - Authenticator*::GetUnauthorizedErrorText
    - RpcMeta::set_correlation_id
    - static_cast<const Server*>
    - PLOG_IF
    - MostCommonMessage*::arg
    - LOG
    - Socket*::mutable_auth_context
    - RpcMeta::correlation_id
    - Server*::options
    - Socket*::remote_side
    - Socket*::Write
    - static_cast<const MostCommonMessage*>
    - Authenticator*::VerifyCredential
    - std::string::empty
    - brpc::ParsePbFromIOBuf
    linkageType: ''
    returnType: bool
    signature: bool VerifyRpcRequest(const InputMessageBase* msg_base)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:907,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:911,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:915,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:915,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:918,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:918,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:920,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:922,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:923,1
    - Dst: SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:925,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:925,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:926,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:927,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:928,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:928,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:936,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:937,1
    - Dst: StreamSettings::StreamSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:937,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:940,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:941,1
    - Dst: Controller*::response_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:942,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:946,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:948,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:948,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:949,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:949,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:950,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:950,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:950,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:951,1
    - Dst: RpcMeta::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:953,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:954,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:956,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:958,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:958,1
    - Dst: RpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:959,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:963,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:964,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:966,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:967,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:968,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:970,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:973,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:974,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:979,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:980,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:981,1
    - Dst: Controller*::set_response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:982,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:983,1
    - Dst: Controller*::set_response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:984,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:985,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:985,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:986,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:987,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:987,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:988,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:988,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:990,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:992,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:993,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:997,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:998,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:999,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1000,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1006,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1007,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 57
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1008
      start: 906
    functionDepth: 11
    functionLinenumber: 906
    functionLinenumberEnd: 1008
    functionName: brpc::ProcessRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::cutn
    - RpcMeta::compress_type
    - Controller*::set_response_checksum_type
    - DestroyingPtr::received_us
    - RpcMeta::content_type
    - DestroyingPtr::payload::size
    - Controller*::response_user_fields
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - RpcMeta::attachment_size
    - SendStreamRst
    - Controller*::SetFailed
    - RpcMeta::response
    - butil::cpuwide_time_us
    - RpcMeta::checksum_value
    - DestroyingPtr::socket
    - brpc::ChecksumTypeToCStr
    - Span*::set_response_size
    - RpcMeta::stream_settings
    - Controller*::set_response_content_type
    - static_cast<uint64_t>
    - LOG
    - LOG_IF
    - Controller*::response
    - RpcMeta::correlation_id
    - RpcMeta::has_stream_settings
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - brpc::size
    - Span*::set_start_parse_us
    - berror
    - RpcMeta::has_attachment_size
    - serialized_data
    - DestroyingPtr::reset
    - brpc::policy::SendStreamRst
    - RpcResponseMeta::error_text
    - brpc::CompressTypeToCStr
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::OnResponse
    - RpcResponseMeta::error_code
    - RpcMeta::checksum_type
    - Span*::set_base_real_us
    - brpc::ContentTypeToCStr
    - ControllerPrivateAccessor::set_checksum_value
    - brpc::ParsePbFromIOBuf
    - Controller*::response_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::DeserializeRpcMessage
    - RpcMeta::user_fields
    - ControllerPrivateAccessor::set_remote_stream_settings
    - DestroyingPtr::meta::size
    - StreamSettings::StreamSettings
    linkageType: ''
    returnType: void
    signature: void ProcessRpcResponse(InputMessageBase* msg_base)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1014,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1016,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1016,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1017,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1017,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1020,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1021,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1022,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1025,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1026,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1027,1
    - Dst: SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1028,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1030,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1034,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1035,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1035,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1036,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1010
    functionDepth: 3
    functionLinenumber: 1010
    functionLinenumberEnd: 1038
    functionName: brpc::SerializeRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_compress_type
    - brpc::CompressTypeToCStr
    - Controller*::request_checksum_type
    - brpc::ChecksumTypeToCStr
    - butil::IOBuf*::append
    - Controller*::request_content_type
    - brpc::ContentTypeToCStr
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - SerializeRpcMessage
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    - serialized_data
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcRequest(butil::IOBuf* request_buf, Controller* cntl,\n
      \                        const google::protobuf::Message* request)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1048,1
    - Dst: RpcMeta::mutable_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1049,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1050,1
    - Dst: RpcMeta::mutable_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1054,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1056,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1057,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1058,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1059,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1059,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1060,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1060,1
    - Dst: RpcMeta::set_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1061,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1061,1
    - Dst: RpcMeta::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1062,1
    - Dst: ControllerPrivateAccessor::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1062,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1063,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1065,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1065,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1065,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1066,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1066,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1066,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1067,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1067,1
    - Dst: has_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1067,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1068,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1068,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1069,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1071,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1073,1
    - Dst: RpcRequestMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1074,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1074,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1076,1
    - Dst: RpcRequestMeta*::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1077,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1077,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1079,1
    - Dst: ControllerPrivateAccessor::request_streams
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1080,1
    - Dst: StreamIds::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1081,1
    - Dst: RpcMeta::mutable_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1082,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1085,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1086,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1089,1
    - Dst: Stream*::FillSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1090,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1091,1
    - Dst: StreamSettings*::mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1092,1
    - Dst: Controller*::has_request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1096,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1096,1
    - Dst: RpcMeta::mutable_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1098,1
    - Dst: insert
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1099,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1099,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1100,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1104,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1105,1
    - Dst: RpcMeta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1107,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1111,1
    - Dst: RpcRequestMeta*::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1112,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1112,1
    - Dst: RpcMeta::set_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1117,1
    - Dst: RpcRequestMeta*::set_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1119,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1119,1
    - Dst: RpcRequestMeta*::set_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1120,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1120,1
    - Dst: RpcRequestMeta*::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1121,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1121,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1124,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1125,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1127,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1127,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 6
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' request_body'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1129
      start: 1040
    functionDepth: 3
    functionLinenumber: 1040
    functionLinenumberEnd: 1129
    functionName: brpc::PackRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - Controller*::request_compress_type
    - ControllerPrivateAccessor::span
    - RpcRequestMeta*::set_timeout_ms
    - butil::IOBuf*::append
    - RpcMeta::set_checksum_type
    - Span*::span_id
    - brpc::SetTrackMeAddress
    - Span*::trace_id
    - Controller*::SetFailed
    - SerializeRpcHeaderAndMeta
    - has_compress_type
    - RpcMeta::set_attachment_size
    - RpcRequestMeta*::set_span_id
    - RpcMeta::set_correlation_id
    - RpcMeta::set_compress_type
    - method_name
    - insert
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - service_name
    - compress_type
    - RpcRequestMeta*::set_log_id
    - RpcRequestMeta*::set_parent_span_id
    - Controller*::request_attachment
    - Controller*::has_log_id
    - RpcRequestMeta*::set_trace_id
    - Stream*::FillSettings
    - Controller*::request_id
    - RpcMeta::mutable_authentication_data
    - ControllerPrivateAccessor::request_streams
    - RpcRequestMeta*::set_service_name
    - RpcMeta::set_checksum_value
    - StreamIds::size
    - RpcMeta::set_content_type
    - google::protobuf::MethodDescriptor*::name
    - ControllerPrivateAccessor::checksum_value
    - Controller*::sampled_request
    - RpcRequestMeta*::set_method_name
    - Controller*::request_checksum_type
    - RpcRequestMeta*::set_request_id
    - StreamSettings*::mutable_extra_stream_ids
    - Controller*::request_user_fields
    - ControllerPrivateAccessor::real_timeout_ms
    - Controller*::request_content_type
    - RpcMeta::mutable_request
    - Controller*::has_request_user_fields
    - StreamIds::empty
    - Authenticator*::GenerateCredential
    - Span*::parent_span_id
    - RpcMeta::mutable_user_fields
    - length
    - RpcMeta::mutable_stream_settings
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: void
    signature: "void PackRpcRequest(butil::IOBuf* req_buf,\n                    SocketMessage**,\n
      \                   uint64_t correlation_id,\n                    const google::protobuf::MethodDescriptor*
      method,\n                    Controller* cntl,\n                    const butil::IOBuf&
      request_body,\n                    const Authenticator* auth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - content_type
    argTypes:
    - ContentType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1144
      start: 1131
    functionDepth: 0
    functionLinenumber: 1131
    functionLinenumberEnd: 1144
    functionName: brpc::ContentTypeToCStr
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ContentTypeToCStr(ContentType content_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - rpc_header
    - meta_size
    - payload_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 78
    functionName: brpc::policy::PackRpcHeader
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SofaRawPacker::SofaRawPacker
    linkageType: ''
    returnType: void
    signature: void PackRpcHeader(char* rpc_header, uint32_t meta_size, int payload_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:82,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:85,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 100
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK_EQ
    - CHECK
    - SerializeWithCachedSizes
    - brpc::policy::PackRpcHeader
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcHeaderAndMeta(\n    butil::IOBuf* out, const RpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:105,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:109,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:117,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:125,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:127,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:136,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:140,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 143
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRpcMessage(butil::IOBuf* source, Socket* socket,\n
      \                           bool /*read_eof*/, const void*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:153,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:155,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:162,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:168,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:170,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:173,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:175,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:176,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:184,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:185,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:190,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:200,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:205,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:208,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:210,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 6
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 145
    functionDepth: 3
    functionLinenumber: 145
    functionLinenumberEnd: 213
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - ComputeDataChecksum
    - has_pb_bytes_to_base64
    - has_pb_jsonify_empty_array
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    - json2pb::ProtoMessageToJson
    - GetDescriptor
    - SerializeTo
    - CompressHandler*::Compress
    - SerializeToZeroCopyStream
    - has_pb_single_repeated_to_array
    - LOG
    - serialize
    - has_always_print_primitive_fields
    linkageType: ''
    returnType: bool
    signature: "bool SerializeRpcMessage(const google::protobuf::Message& message,\n
      \                        Controller& cntl, ContentType content_type,\n                         CompressType
      compress_type, ChecksumType checksum_type,\n                         butil::IOBuf*
      buf)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:223,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:224,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:229,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:231,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:237,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:238,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 243
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - response_compress_type
    - response_checksum_type
    - ChecksumTypeToCStr
    - IsInitialized
    - CompressTypeToCStr
    - GetDescriptor
    - response_content_type
    - InitializationErrorString
    - brpc::policy::SerializeRpcMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - ContentTypeToCStr
    - SetFailed
    - serialized_data
    linkageType: ''
    returnType: bool
    signature: "bool SerializeResponse(const google::protobuf::Message& res,\n                              Controller&
      cntl, butil::IOBuf& buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:274,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:278,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:280,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:281,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:287,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:296,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:297,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 6
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 302
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - brpc::policy::Return
    - ControllerPrivateAccessor::span
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - static_cast<BaiduProxyPBMessages*>
    - recycle_cntl
    - ConcurrencyRemover concurrency_remover
    - Span*::set_start_send_us
    - Controller*::CallAfterRpcResp
    - Server*::options
    - RpcPBMessages*::Request
    linkageType: ''
    returnType: void
    signature: "void SendRpcResponse(int64_t correlation_id, Controller* cntl,\n                     RpcPBMessages*
      messages, const Server* server,\n                     MethodStatus* method_status,
      int64_t received_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - rpc_header
    - meta_size
    - payload_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 78
    functionName: brpc::policy::PackRpcHeader
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::SofaRawPacker::SofaRawPacker
    linkageType: ''
    returnType: void
    signature: void PackRpcHeader(char* rpc_header, uint32_t meta_size, int payload_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:82,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:85,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:89,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:90,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:94,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 100
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK_EQ
    - CHECK
    - SerializeWithCachedSizes
    - brpc::policy::PackRpcHeader
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcHeaderAndMeta(\n    butil::IOBuf* out, const RpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:105,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:109,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:117,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:125,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:127,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:136,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:140,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 143
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRpcMessage(butil::IOBuf* source, Socket* socket,\n
      \                           bool /*read_eof*/, const void*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:153,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:155,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:162,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:168,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:170,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:173,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:175,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:176,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:184,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:185,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:190,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:195,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:200,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:205,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:208,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:210,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 6
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 145
    functionDepth: 3
    functionLinenumber: 145
    functionLinenumberEnd: 213
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - ComputeDataChecksum
    - has_pb_bytes_to_base64
    - has_pb_jsonify_empty_array
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    - json2pb::ProtoMessageToJson
    - GetDescriptor
    - SerializeTo
    - CompressHandler*::Compress
    - SerializeToZeroCopyStream
    - has_pb_single_repeated_to_array
    - LOG
    - serialize
    - has_always_print_primitive_fields
    linkageType: ''
    returnType: bool
    signature: "bool SerializeRpcMessage(const google::protobuf::Message& message,\n
      \                        Controller& cntl, ContentType content_type,\n                         CompressType
      compress_type, ChecksumType checksum_type,\n                         butil::IOBuf*
      buf)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:217,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:218,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:223,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:224,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:229,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:231,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:237,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:238,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 243
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - response_compress_type
    - response_checksum_type
    - ChecksumTypeToCStr
    - IsInitialized
    - CompressTypeToCStr
    - GetDescriptor
    - response_content_type
    - InitializationErrorString
    - brpc::policy::SerializeRpcMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - ContentTypeToCStr
    - SetFailed
    - serialized_data
    linkageType: ''
    returnType: bool
    signature: "bool SerializeResponse(const google::protobuf::Message& res,\n                              Controller&
      cntl, butil::IOBuf& buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<BaiduProxyPBMessages>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_object<BaiduProxyPBMessages>
    linkageType: ''
    returnType: BaiduProxyPBMessages
    signature: BaiduProxyPBMessages * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduProxyPBMessages*::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:252,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - BaiduProxyPBMessages*::Clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Return(BaiduProxyPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:257,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 259
    functionName: brpc::policy::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::Clear
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::policy::Request
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Request() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::Response
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ::google::protobuf::Message
    signature: ::google::protobuf::Message * Response() override
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:274,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:276,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:278,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:280,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:281,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:287,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:296,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:297,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:298,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 6
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 302
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - brpc::policy::Return
    - ControllerPrivateAccessor::span
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - static_cast<BaiduProxyPBMessages*>
    - recycle_cntl
    - ConcurrencyRemover concurrency_remover
    - Span*::set_start_send_us
    - Controller*::CallAfterRpcResp
    - Server*::options
    - RpcPBMessages*::Request
    linkageType: ''
    returnType: void
    signature: "void SendRpcResponse(int64_t correlation_id, Controller* cntl,\n                     RpcPBMessages*
      messages, const Server* server,\n                     MethodStatus* method_status,
      int64_t received_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 475
    functionName: brpc::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs*::service::CallMethod
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:485,1
    - Dst: brpc::EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 6
    argNames:
    - service
    - method
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::Service*
    - ::google::protobuf::MethodDescriptor*
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Message*
    - ::google::protobuf::Message*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 493
    functionName: brpc::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - brpc::EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(\n    ::google::protobuf::Service*
      service,\n    const ::google::protobuf::MethodDescriptor* method,\n    ::google::protobuf::RpcController*
      controller,\n    const ::google::protobuf::Message* request,\n    ::google::protobuf::Message*
      response,\n    ::google::protobuf::Closure* done)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VerifyDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:501,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:507,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:509,1
    - Dst: CompressHandler*::Decompress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:513,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:521,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:523,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:528,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:529,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:531,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:533,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:534,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:539,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:546,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:548,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:549,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:554,1
    - Dst: brpc::NonreflectableMessage::_InternalParse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:558,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:560,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 44
    argCount: 6
    argNames:
    - ' data'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - message
    argTypes:
    - butil::IOBuf
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 495
    functionDepth: 10
    functionLinenumber: 495
    functionLinenumberEnd: 563
    functionName: brpc::DeserializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - has_pb_bytes_to_base64
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::VerifyDataChecksum
    - json2pb::ProtoJsonToProtoMessage
    - brpc::FindCompressHandler
    - has_pb_single_repeated_to_array
    - google::protobuf::Message*::GetDescriptor
    - brpc::NonreflectableMessage::_InternalParse
    - CompressHandler*::Decompress
    - deserialize
    - json2pb::JsonToProtoMessage
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: "bool DeserializeRpcMessage(const butil::IOBuf& data, Controller& cntl,\n
      \                          ContentType content_type, CompressType compress_type,\n
      \                          ChecksumType checksum_type,\n                           google::protobuf::Message*
      message)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:566,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:568,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:569,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:570,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:570,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:574,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:575,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:576,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:577,1
    - Dst: RpcMeta::request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:580,1
    - Dst: brpc::AskToBeSampled
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:582,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:584,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:584,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:585,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:585,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:587,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:588,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:588,1
    - Dst: SampledRequest*::meta::set_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:589,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:589,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:591,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:594,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:596,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:603,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:604,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: RpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:606,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:607,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:607,1
    - Dst: RpcRequestMeta::has_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:609,1
    - Dst: std::unique_ptr::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:610,1
    - Dst: RpcRequestMeta::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:610,1
    - Dst: RpcRequestMeta::has_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:612,1
    - Dst: std::unique_ptr::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:613,1
    - Dst: RpcRequestMeta::timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:613,1
    - Dst: std::unique_ptr::set_request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:615,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:615,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:616,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:616,1
    - Dst: std::unique_ptr::set_request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:617,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:617,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:618,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:618,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:619,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:621,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:622,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:623,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:624,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:626,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:629,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:630,1
    - Dst: RpcMeta::release_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:630,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:633,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:634,1
    - Dst: std::unique_ptr::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:635,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:640,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:641,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:641,1
    - Dst: brpc::IsTraceable
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:645,1
    - Dst: RpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:645,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:646,1
    - Dst: RpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:647,1
    - Dst: RpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:647,1
    - Dst: RpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:649,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:650,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:650,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:651,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:651,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:652,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:653,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:653,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:654,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:655,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:660,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:661,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:666,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:668,1
    - Dst: brpc::TooManyUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:672,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:678,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:678,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:679,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:680,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:681,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:683,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:690,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:691,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:692,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:693,1
    - Dst: ignore_eovercrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:693,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:694,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:695,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:695,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:698,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:699,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:701,1
    - Dst: auto::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:704,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:704,1
    - Dst: auto::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:705,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:705,1
    - Dst: std::unique_ptr::reset_sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:706,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:708,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:709,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:712,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:712,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:713,1
    - Dst: butil::class_name<BaiduMasterService>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:716,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:721,1
    - Dst: auto::meta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:721,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:724,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:725,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:726,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:726,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:727,1
    - Dst: DestroyingPtr::payload::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:728,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:729,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:734,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:735,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:737,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:739,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:740,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:743,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:746,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:747,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:749,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:750,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:751,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:753,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:753,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:756,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:756,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:757,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:757,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:760,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:761,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:763,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:765,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:765,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:769,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:773,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:773,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:774,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:777,1
    - Dst: const_cast<google::protobuf::MethodDescriptor*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:782,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:783,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:786,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:786,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:789,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:789,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:793,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:794,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:795,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:796,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:797,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:800,1
    - Dst: static_cast<CompressType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:802,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:802,1
    - Dst: static_cast<ChecksumType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:806,1
    - Dst: Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:806,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:807,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:809,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:810,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:814,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:815,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:816,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:817,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:820,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n
        \           const Server*, MethodStatus*, int64_t>"
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:824,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:827,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:827,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:828,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:831,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:834,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:834,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:835,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:838,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:838,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:839,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:840,1
    - Dst: brpc::BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:842,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:843,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:843,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:844,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:845,1
    - Dst: brpc::EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:846,1
    - Dst: brpc::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:848,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:849,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:850,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:851,1
    - Dst: SendRpcResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:857,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:857,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:858,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:860,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 167
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 565
    functionDepth: 11
    functionLinenumber: 565
    functionLinenumberEnd: 861
    functionName: brpc::ProcessRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - RpcMeta::request
    - std::unique_ptr::remote_side
    - BadMethodRequest::set_service_name
    - std::unique_ptr::set_request_id
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - RpcRequestMeta::timeout_ms
    - Server*::AcceptRequest
    - brpc::ChecksumTypeToCStr
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - Server::ServiceProperty*::service::GetDescriptor
    - std::unique_ptr::release
    - Socket*::auth_context
    - butil::class_name<BaiduMasterService>
    - RpcMeta::correlation_id
    - Server*::thread_local_options
    - Span*::set_received_us
    - DestroyingPtr::reset
    - brpc::CompressTypeToCStr
    - DestroyingPtr::base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_service_name
    - std::unique_ptr::get
    - RpcMeta::release_stream_settings
    - std::unique_ptr::set_timeout_ms
    - SendRpcResponse
    - std::unique_ptr::set_request_content_type
    - DestroyingPtr::payload::size
    - RpcRequestMeta::has_timeout_ms
    - butil::endpoint2str
    - std::unique_ptr::request_attachment
    - brpc::AskToBeSampled
    - ScopedNonServiceError::release
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - static_cast<ChecksumType>
    - RpcRequestMeta::service_name
    - static_cast<const Server*>
    - RpcPBMessages*::Request
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - Socket*::is_overcrowded
    - RpcMeta::has_stream_settings
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - RpcRequestMeta::has_request_id
    - RpcMeta::has_attachment_size
    - std::unique_ptr::set_request_checksum_type
    - Span*::set_request_size
    - serialized_data
    - butil::StringPiece::find
    - SampledRequest*::meta::set_method_name
    - SampledRequest*::meta::set_authentication_data
    - Socket*::SetFailed
    - ControllerPrivateAccessor::set_checksum_value
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - RpcRequestMeta::log_id
    - brpc::DeserializeRpcMessage
    - SampledRequest*::meta::set_protocol_type
    - DestroyingPtr::meta::size
    - Controller::Controller
    - RpcPBMessages*::Response
    - DestroyingPtr::payload::cutn
    - std::unique_ptr::set_request_compress_type
    - DestroyingPtr::received_us
    - RpcMeta::content_type
    - std::unique_ptr::request_user_fields
    - butil::IOBuf::clear
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::cpuwide_time_us
    - const_cast<google::protobuf::MethodDescriptor*>
    - brpc::BeginRunningUserCode
    - auto::meta::set_service_name
    - Span*::set_protocol
    - DestroyingPtr::payload::empty
    - "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n            const
      Server*, MethodStatus*, int64_t>"
    - Server*::options
    - Socket*::remote_side
    - Socket*::description
    - Socket*::id
    - TestRpcPBMessageFactory::Get
    - std::unique_ptr::reset_sampled_request
    - RpcRequestMeta::has_log_id
    - ControllerPrivateAccessor::set_method
    - RpcRequestMeta::has_trace_id
    - brpc::ParsePbFromIOBuf
    - brpc::TooManyUserCode
    - Server::MethodProperty*::service::GetDescriptor
    - SampledRequest::SampledRequest
    - static_cast<int>
    - brpc::IsTraceable
    - ignore_eovercrowded
    - RpcRequestMeta::parent_span_id
    - brpc::EndRunningUserCodeInPlace
    - RpcMeta::compress_type
    - RpcRequestMeta::span_id
    - Server*::IsRunning
    - butil::IOBuf::IOBuf
    - RpcMeta::attachment_size
    - RpcRequestMeta::method_name
    - RpcMeta::authentication_data
    - RpcRequestMeta::request_id
    - google::protobuf::MethodDescriptor*::full_name
    - RpcMeta::checksum_value
    - MethodStatus*::OnRequested
    - RpcRequestMeta::trace_id
    - auto::meta::method_name
    - static_cast<CompressType>
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - SocketUniquePtr::get
    - std::unique_ptr::set_log_id
    - SampledRequest*::meta::set_attachment_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - RpcMeta::checksum_type
    - InputMessageBase*::arg
    - brpc::ContentTypeToCStr
    - Span*::ResetServerSpanName
    - auto::meta::set_method_name
    - RpcMeta::user_fields
    - Span*::set_log_id
    - ControllerPrivateAccessor::set_remote_stream_settings
    - Span*::AsParent
    - brpc::EndRunningCallMethodInPool
    - Get
    linkageType: ''
    returnType: void
    signature: void ProcessRpcRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:865,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:866,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:866,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:867,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:870,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:871,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:874,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:879,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:879,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:880,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:881,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:887,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:887,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:888,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:889,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:890,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:891,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:892,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:893,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:895,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:896,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:899,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:900,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 904
      start: 863
    functionDepth: 2
    functionLinenumber: 863
    functionLinenumberEnd: 904
    functionName: brpc::VerifyRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::IOBuf
    - RpcMeta::authentication_data
    - SerializeRpcHeaderAndMeta
    - MostCommonMessage*::socket
    - RpcMeta::mutable_response
    - Authenticator*::GetUnauthorizedErrorText
    - RpcMeta::set_correlation_id
    - static_cast<const Server*>
    - PLOG_IF
    - MostCommonMessage*::arg
    - LOG
    - Socket*::mutable_auth_context
    - RpcMeta::correlation_id
    - Server*::options
    - Socket*::remote_side
    - Socket*::Write
    - static_cast<const MostCommonMessage*>
    - Authenticator*::VerifyCredential
    - std::string::empty
    - brpc::ParsePbFromIOBuf
    linkageType: ''
    returnType: bool
    signature: bool VerifyRpcRequest(const InputMessageBase* msg_base)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:907,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:911,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:915,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:915,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:918,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:918,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:920,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:922,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:923,1
    - Dst: SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:925,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:925,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:926,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:927,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:928,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:928,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:936,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:937,1
    - Dst: StreamSettings::StreamSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:937,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:940,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:941,1
    - Dst: Controller*::response_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:942,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:946,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:948,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:948,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:949,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:949,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:950,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:950,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:950,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:951,1
    - Dst: RpcMeta::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:953,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:954,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:956,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:958,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:958,1
    - Dst: RpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:959,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:963,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:964,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:966,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:967,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:968,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:970,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:973,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:974,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:979,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:980,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:981,1
    - Dst: Controller*::set_response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:982,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:983,1
    - Dst: Controller*::set_response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:984,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:985,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:985,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:986,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:987,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:987,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:988,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:988,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:990,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:992,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:993,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:997,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:998,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:999,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1000,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1006,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1007,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 57
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1008
      start: 906
    functionDepth: 11
    functionLinenumber: 906
    functionLinenumberEnd: 1008
    functionName: brpc::ProcessRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::cutn
    - RpcMeta::compress_type
    - Controller*::set_response_checksum_type
    - DestroyingPtr::received_us
    - RpcMeta::content_type
    - DestroyingPtr::payload::size
    - Controller*::response_user_fields
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - RpcMeta::attachment_size
    - SendStreamRst
    - Controller*::SetFailed
    - RpcMeta::response
    - butil::cpuwide_time_us
    - RpcMeta::checksum_value
    - DestroyingPtr::socket
    - brpc::ChecksumTypeToCStr
    - Span*::set_response_size
    - RpcMeta::stream_settings
    - Controller*::set_response_content_type
    - static_cast<uint64_t>
    - LOG
    - LOG_IF
    - Controller*::response
    - RpcMeta::correlation_id
    - RpcMeta::has_stream_settings
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - brpc::size
    - Span*::set_start_parse_us
    - berror
    - RpcMeta::has_attachment_size
    - serialized_data
    - DestroyingPtr::reset
    - brpc::policy::SendStreamRst
    - RpcResponseMeta::error_text
    - brpc::CompressTypeToCStr
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::OnResponse
    - RpcResponseMeta::error_code
    - RpcMeta::checksum_type
    - Span*::set_base_real_us
    - brpc::ContentTypeToCStr
    - ControllerPrivateAccessor::set_checksum_value
    - brpc::ParsePbFromIOBuf
    - Controller*::response_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::DeserializeRpcMessage
    - RpcMeta::user_fields
    - ControllerPrivateAccessor::set_remote_stream_settings
    - DestroyingPtr::meta::size
    - StreamSettings::StreamSettings
    linkageType: ''
    returnType: void
    signature: void ProcessRpcResponse(InputMessageBase* msg_base)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1014,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1016,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1016,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1017,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1017,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1020,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1021,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1022,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1025,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1026,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1027,1
    - Dst: SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1028,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1030,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1034,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1035,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1035,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1036,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1010
    functionDepth: 3
    functionLinenumber: 1010
    functionLinenumberEnd: 1038
    functionName: brpc::SerializeRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_compress_type
    - brpc::CompressTypeToCStr
    - Controller*::request_checksum_type
    - brpc::ChecksumTypeToCStr
    - butil::IOBuf*::append
    - Controller*::request_content_type
    - brpc::ContentTypeToCStr
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - SerializeRpcMessage
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    - serialized_data
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcRequest(butil::IOBuf* request_buf, Controller* cntl,\n
      \                        const google::protobuf::Message* request)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1048,1
    - Dst: RpcMeta::mutable_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1049,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1050,1
    - Dst: RpcMeta::mutable_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1054,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1056,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1057,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1058,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1059,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1059,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1060,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1060,1
    - Dst: RpcMeta::set_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1061,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1061,1
    - Dst: RpcMeta::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1062,1
    - Dst: ControllerPrivateAccessor::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1062,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1063,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1065,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1065,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1065,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1066,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1066,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1066,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1067,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1067,1
    - Dst: has_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1067,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1068,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1068,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1069,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1071,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1073,1
    - Dst: RpcRequestMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1074,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1074,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1076,1
    - Dst: RpcRequestMeta*::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1077,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1077,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1079,1
    - Dst: ControllerPrivateAccessor::request_streams
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1080,1
    - Dst: StreamIds::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1081,1
    - Dst: RpcMeta::mutable_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1082,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1085,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1086,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1089,1
    - Dst: Stream*::FillSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1090,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1091,1
    - Dst: StreamSettings*::mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1092,1
    - Dst: Controller*::has_request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1096,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1096,1
    - Dst: RpcMeta::mutable_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1098,1
    - Dst: insert
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1099,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1099,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1100,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1104,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1105,1
    - Dst: RpcMeta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1107,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1111,1
    - Dst: RpcRequestMeta*::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1112,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1112,1
    - Dst: RpcMeta::set_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1117,1
    - Dst: RpcRequestMeta*::set_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1119,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1119,1
    - Dst: RpcRequestMeta*::set_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1120,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1120,1
    - Dst: RpcRequestMeta*::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1121,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1121,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1124,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1125,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1127,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1127,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 6
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' request_body'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1129
      start: 1040
    functionDepth: 3
    functionLinenumber: 1040
    functionLinenumberEnd: 1129
    functionName: brpc::PackRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - Controller*::request_compress_type
    - ControllerPrivateAccessor::span
    - RpcRequestMeta*::set_timeout_ms
    - butil::IOBuf*::append
    - RpcMeta::set_checksum_type
    - Span*::span_id
    - brpc::SetTrackMeAddress
    - Span*::trace_id
    - Controller*::SetFailed
    - SerializeRpcHeaderAndMeta
    - has_compress_type
    - RpcMeta::set_attachment_size
    - RpcRequestMeta*::set_span_id
    - RpcMeta::set_correlation_id
    - RpcMeta::set_compress_type
    - method_name
    - insert
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - service_name
    - compress_type
    - RpcRequestMeta*::set_log_id
    - RpcRequestMeta*::set_parent_span_id
    - Controller*::request_attachment
    - Controller*::has_log_id
    - RpcRequestMeta*::set_trace_id
    - Stream*::FillSettings
    - Controller*::request_id
    - RpcMeta::mutable_authentication_data
    - ControllerPrivateAccessor::request_streams
    - RpcRequestMeta*::set_service_name
    - RpcMeta::set_checksum_value
    - StreamIds::size
    - RpcMeta::set_content_type
    - google::protobuf::MethodDescriptor*::name
    - ControllerPrivateAccessor::checksum_value
    - Controller*::sampled_request
    - RpcRequestMeta*::set_method_name
    - Controller*::request_checksum_type
    - RpcRequestMeta*::set_request_id
    - StreamSettings*::mutable_extra_stream_ids
    - Controller*::request_user_fields
    - ControllerPrivateAccessor::real_timeout_ms
    - Controller*::request_content_type
    - RpcMeta::mutable_request
    - Controller*::has_request_user_fields
    - StreamIds::empty
    - Authenticator*::GenerateCredential
    - Span*::parent_span_id
    - RpcMeta::mutable_user_fields
    - length
    - RpcMeta::mutable_stream_settings
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: void
    signature: "void PackRpcRequest(butil::IOBuf* req_buf,\n                    SocketMessage**,\n
      \                   uint64_t correlation_id,\n                    const google::protobuf::MethodDescriptor*
      method,\n                    Controller* cntl,\n                    const butil::IOBuf&
      request_body,\n                    const Authenticator* auth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - content_type
    argTypes:
    - ContentType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1144
      start: 1131
    functionDepth: 0
    functionLinenumber: 1131
    functionLinenumberEnd: 1144
    functionName: brpc::ContentTypeToCStr
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ContentTypeToCStr(ContentType content_type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DH_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: brpc::policy::DHWrapper::clear
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - DH_free
    linkageType: ''
    returnType: void
    signature: void DHWrapper::clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::DHWrapper::do_initialize
      Src: /src/brpc/src/brpc/policy/dh.cpp:36,1
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:41,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:42,1
    - Dst: brpc::policy::DHWrapper::clear
      Src: /src/brpc/src/brpc/policy/dh.cpp:45,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - ensure_128bytes_public_key
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 52
    functionName: brpc::policy::DHWrapper::initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::DHWrapper::clear
    - BN_num_bytes
    - brpc::policy::DHWrapper::do_initialize
    - DH_get0_key
    linkageType: ''
    returnType: int
    signature: int DHWrapper::initialize(bool ensure_128bytes_public_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:56,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:59,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:60,1
    - Dst: BN_bn2bin
      Src: /src/brpc/src/brpc/policy/dh.cpp:65,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:66,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/dh.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - pkey
    - pkey_size
    argTypes:
    - char*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 73
    functionName: brpc::policy::DHWrapper::copy_public_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    - CHECK_LE
    - CHECK_GT
    linkageType: ''
    returnType: int
    signature: int DHWrapper::copy_public_key(char* pkey, int* pkey_size) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:77,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:79,1
    - Dst: DH_compute_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:85,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:86,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - ppkey
    - ppkey_size
    - skey
    - skey_size
    argTypes:
    - void*
    - int
    - void*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 91
    functionName: brpc::policy::DHWrapper::copy_shared_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_free
    - BN_bin2bn
    - LOG
    - DH_compute_key
    linkageType: ''
    returnType: int
    signature: "int DHWrapper::copy_shared_key(const void* ppkey, int ppkey_size,\n
      \                          void* skey, int* skey_size) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/policy/dh.cpp:94,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:101,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:103,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/policy/dh.cpp:106,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:108,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:109,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/policy/dh.cpp:112,1
    - Dst: DH_generate_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:116,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 120
    functionName: brpc::policy::DHWrapper::do_initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 1
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - DH_generate_key
    - BN_free
    - DH_new
    - LOG
    linkageType: ''
    returnType: int
    signature: int DHWrapper::do_initialize()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DH_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: brpc::policy::DHWrapper::clear
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 1
    functionsReached:
    - DH_free
    linkageType: ''
    returnType: void
    signature: void DHWrapper::clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::DHWrapper::do_initialize
      Src: /src/brpc/src/brpc/policy/dh.cpp:36,1
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:41,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:42,1
    - Dst: brpc::policy::DHWrapper::clear
      Src: /src/brpc/src/brpc/policy/dh.cpp:45,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - ensure_128bytes_public_key
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 34
    functionDepth: 2
    functionLinenumber: 34
    functionLinenumberEnd: 52
    functionName: brpc::policy::DHWrapper::initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::DHWrapper::clear
    - BN_num_bytes
    - brpc::policy::DHWrapper::do_initialize
    - DH_get0_key
    linkageType: ''
    returnType: int
    signature: int DHWrapper::initialize(bool ensure_128bytes_public_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:56,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:59,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:60,1
    - Dst: BN_bn2bin
      Src: /src/brpc/src/brpc/policy/dh.cpp:65,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:66,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/dh.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - pkey
    - pkey_size
    argTypes:
    - char*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 73
    functionName: brpc::policy::DHWrapper::copy_public_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    - CHECK_LE
    - CHECK_GT
    linkageType: ''
    returnType: int
    signature: int DHWrapper::copy_public_key(char* pkey, int* pkey_size) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:77,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:79,1
    - Dst: DH_compute_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:85,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:86,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - ppkey
    - ppkey_size
    - skey
    - skey_size
    argTypes:
    - void*
    - int
    - void*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 91
    functionName: brpc::policy::DHWrapper::copy_shared_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_free
    - BN_bin2bn
    - LOG
    - DH_compute_key
    linkageType: ''
    returnType: int
    signature: "int DHWrapper::copy_shared_key(const void* ppkey, int ppkey_size,\n
      \                          void* skey, int* skey_size) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/policy/dh.cpp:94,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:101,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:103,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/policy/dh.cpp:106,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:108,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:109,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/policy/dh.cpp:112,1
    - Dst: DH_generate_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:116,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 120
    functionName: brpc::policy::DHWrapper::do_initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 2
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - DH_generate_key
    - BN_free
    - DH_new
    - LOG
    linkageType: ''
    returnType: int
    signature: int DHWrapper::do_initialize()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DH_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: brpc::policy::DHWrapper::clear
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 2
    functionsReached:
    - DH_free
    linkageType: ''
    returnType: void
    signature: void DHWrapper::clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::DHWrapper::do_initialize
      Src: /src/brpc/src/brpc/policy/dh.cpp:36,1
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:41,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:42,1
    - Dst: brpc::policy::DHWrapper::clear
      Src: /src/brpc/src/brpc/policy/dh.cpp:45,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - ensure_128bytes_public_key
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 34
    functionDepth: 2
    functionLinenumber: 34
    functionLinenumberEnd: 52
    functionName: brpc::policy::DHWrapper::initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::DHWrapper::clear
    - BN_num_bytes
    - brpc::policy::DHWrapper::do_initialize
    - DH_get0_key
    linkageType: ''
    returnType: int
    signature: int DHWrapper::initialize(bool ensure_128bytes_public_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:56,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:59,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:60,1
    - Dst: BN_bn2bin
      Src: /src/brpc/src/brpc/policy/dh.cpp:65,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:66,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/dh.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - pkey
    - pkey_size
    argTypes:
    - char*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 73
    functionName: brpc::policy::DHWrapper::copy_public_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    - CHECK_LE
    - CHECK_GT
    linkageType: ''
    returnType: int
    signature: int DHWrapper::copy_public_key(char* pkey, int* pkey_size) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:77,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:79,1
    - Dst: DH_compute_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:85,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:86,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - ppkey
    - ppkey_size
    - skey
    - skey_size
    argTypes:
    - void*
    - int
    - void*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 91
    functionName: brpc::policy::DHWrapper::copy_shared_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_free
    - BN_bin2bn
    - LOG
    - DH_compute_key
    linkageType: ''
    returnType: int
    signature: "int DHWrapper::copy_shared_key(const void* ppkey, int ppkey_size,\n
      \                          void* skey, int* skey_size) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/policy/dh.cpp:94,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:101,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:103,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/policy/dh.cpp:106,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:108,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:109,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/policy/dh.cpp:112,1
    - Dst: DH_generate_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:116,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 120
    functionName: brpc::policy::DHWrapper::do_initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 3
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - DH_generate_key
    - BN_free
    - DH_new
    - LOG
    linkageType: ''
    returnType: int
    signature: int DHWrapper::do_initialize()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DH_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:29,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: brpc::policy::DHWrapper::clear
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 3
    functionsReached:
    - DH_free
    linkageType: ''
    returnType: void
    signature: void DHWrapper::clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::DHWrapper::do_initialize
      Src: /src/brpc/src/brpc/policy/dh.cpp:36,1
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:41,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:42,1
    - Dst: brpc::policy::DHWrapper::clear
      Src: /src/brpc/src/brpc/policy/dh.cpp:45,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - ensure_128bytes_public_key
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 34
    functionDepth: 2
    functionLinenumber: 34
    functionLinenumberEnd: 52
    functionName: brpc::policy::DHWrapper::initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::DHWrapper::clear
    - BN_num_bytes
    - brpc::policy::DHWrapper::do_initialize
    - DH_get0_key
    linkageType: ''
    returnType: int
    signature: int DHWrapper::initialize(bool ensure_128bytes_public_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DH_get0_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:56,1
    - Dst: BN_num_bytes
      Src: /src/brpc/src/brpc/policy/dh.cpp:59,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:60,1
    - Dst: BN_bn2bin
      Src: /src/brpc/src/brpc/policy/dh.cpp:65,1
    - Dst: CHECK_GT
      Src: /src/brpc/src/brpc/policy/dh.cpp:66,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/dh.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - pkey
    - pkey_size
    argTypes:
    - char*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 73
    functionName: brpc::policy::DHWrapper::copy_public_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    - CHECK_LE
    - CHECK_GT
    linkageType: ''
    returnType: int
    signature: int DHWrapper::copy_public_key(char* pkey, int* pkey_size) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:77,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:79,1
    - Dst: DH_compute_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:85,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:86,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - ppkey
    - ppkey_size
    - skey
    - skey_size
    argTypes:
    - void*
    - int
    - void*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 91
    functionName: brpc::policy::DHWrapper::copy_shared_key
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 0
    functionsReached:
    - BN_free
    - BN_bin2bn
    - LOG
    - DH_compute_key
    linkageType: ''
    returnType: int
    signature: "int DHWrapper::copy_shared_key(const void* ppkey, int ppkey_size,\n
      \                          void* skey, int* skey_size) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/policy/dh.cpp:94,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/policy/dh.cpp:101,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:103,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/policy/dh.cpp:106,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:108,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/policy/dh.cpp:109,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/policy/dh.cpp:112,1
    - Dst: DH_generate_key
      Src: /src/brpc/src/brpc/policy/dh.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/dh.cpp:116,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 120
    functionName: brpc::policy::DHWrapper::do_initialize
    functionSourceFile: /src/brpc/src/brpc/policy/dh.cpp
    functionUses: 4
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - DH_generate_key
    - BN_free
    - DH_new
    - LOG
    linkageType: ''
    returnType: int
    signature: int DHWrapper::do_initialize()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - conf
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter(\n    const
      TimeoutConcurrencyConf &conf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TimeoutConcurrencyConf>
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:71,1
    - Dst: TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - amc
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: brpc::policy::TimeoutConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TimeoutConcurrencyConf>
    - TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    linkageType: ''
    returnType: TimeoutConcurrencyLimiter
    signature: "TimeoutConcurrencyLimiter *TimeoutConcurrencyLimiter::New(\n    const
      AdaptiveMaxConcurrency &amc) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:77,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - current_concurrency
    - cntl
    argTypes:
    - int
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 86
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - Controller*::timeout_ms
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::OnRequested(int current_concurrency,\n
      \                                           Controller *cntl)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:94,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:96,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:101,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:105,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:109,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 114
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - load
    - compare_exchange_strong
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    - VLOG
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::OnResponded(int error_code,\n                                            int64_t
      latency_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::policy::TimeoutConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int TimeoutConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int TimeoutConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency
      &)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:145,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:156,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:159,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 163
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::AddSample(int error_code, int64_t
      latency_us,\n                                          int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 171
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - avg_latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::AdjustAvgLatency(int64_t avg_latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:181,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 183
    functionName: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - std::ceil
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::UpdateAvgLatency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - conf
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter(\n    const
      TimeoutConcurrencyConf &conf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TimeoutConcurrencyConf>
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:71,1
    - Dst: TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - amc
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: brpc::policy::TimeoutConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TimeoutConcurrencyConf>
    - TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    linkageType: ''
    returnType: TimeoutConcurrencyLimiter
    signature: "TimeoutConcurrencyLimiter *TimeoutConcurrencyLimiter::New(\n    const
      AdaptiveMaxConcurrency &amc) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:77,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - current_concurrency
    - cntl
    argTypes:
    - int
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 86
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - Controller*::timeout_ms
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::OnRequested(int current_concurrency,\n
      \                                           Controller *cntl)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:94,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:96,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:101,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:105,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:109,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 114
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - load
    - compare_exchange_strong
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    - VLOG
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::OnResponded(int error_code,\n                                            int64_t
      latency_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::policy::TimeoutConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int TimeoutConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int TimeoutConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency
      &)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:145,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:156,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:159,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 163
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::AddSample(int error_code, int64_t
      latency_us,\n                                          int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 171
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - avg_latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::AdjustAvgLatency(int64_t avg_latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:181,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 183
    functionName: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - std::ceil
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::UpdateAvgLatency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - conf
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter(\n    const
      TimeoutConcurrencyConf &conf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TimeoutConcurrencyConf>
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:71,1
    - Dst: TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - amc
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: brpc::policy::TimeoutConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TimeoutConcurrencyConf>
    - TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    linkageType: ''
    returnType: TimeoutConcurrencyLimiter
    signature: "TimeoutConcurrencyLimiter *TimeoutConcurrencyLimiter::New(\n    const
      AdaptiveMaxConcurrency &amc) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:77,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - current_concurrency
    - cntl
    argTypes:
    - int
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 86
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - Controller*::timeout_ms
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::OnRequested(int current_concurrency,\n
      \                                           Controller *cntl)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:94,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:96,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:101,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:105,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:109,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 114
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - load
    - compare_exchange_strong
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    - VLOG
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::OnResponded(int error_code,\n                                            int64_t
      latency_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::policy::TimeoutConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int TimeoutConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int TimeoutConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency
      &)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:145,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:156,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:159,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 163
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::AddSample(int error_code, int64_t
      latency_us,\n                                          int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 171
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - avg_latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::AdjustAvgLatency(int64_t avg_latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:181,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 183
    functionName: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - std::ceil
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::UpdateAvgLatency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - conf
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter(\n    const
      TimeoutConcurrencyConf &conf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TimeoutConcurrencyConf>
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:71,1
    - Dst: TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - amc
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: brpc::policy::TimeoutConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TimeoutConcurrencyConf>
    - TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    linkageType: ''
    returnType: TimeoutConcurrencyLimiter
    signature: "TimeoutConcurrencyLimiter *TimeoutConcurrencyLimiter::New(\n    const
      AdaptiveMaxConcurrency &amc) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:77,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - current_concurrency
    - cntl
    argTypes:
    - int
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 86
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - Controller*::timeout_ms
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::OnRequested(int current_concurrency,\n
      \                                           Controller *cntl)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:94,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:96,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:101,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:105,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:109,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 114
    functionName: brpc::policy::TimeoutConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - load
    - compare_exchange_strong
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    - VLOG
    linkageType: ''
    returnType: void
    signature: "void TimeoutConcurrencyLimiter::OnResponded(int error_code,\n                                            int64_t
      latency_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: brpc::policy::TimeoutConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int TimeoutConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int TimeoutConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency
      &)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:145,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:156,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:159,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 163
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 5
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    linkageType: ''
    returnType: bool
    signature: "bool TimeoutConcurrencyLimiter::AddSample(int error_code, int64_t
      latency_us,\n                                          int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 171
    functionName: brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - avg_latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::AdjustAvgLatency(int64_t avg_latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:181,1
    - Dst: brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
      Src: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 183
    functionName: brpc::policy::TimeoutConcurrencyLimiter::UpdateAvgLatency
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::TimeoutConcurrencyLimiter::AdjustAvgLatency
    - std::ceil
    linkageType: ''
    returnType: void
    signature: void TimeoutConcurrencyLimiter::UpdateAvgLatency()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:45,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:46,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:50,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: StreamFrameMeta::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - out
    - fm
    - data
    argTypes:
    - butil::IOBuf*
    - StreamFrameMeta
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 59
    functionName: brpc::policy::PackStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ARRAY_SIZE
    - butil::IOBuf*::length
    - butil::IOBuf*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:64,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:68,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:71,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:72,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:76,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:82,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:83,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:84,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:87,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:90,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:91,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:95,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:96,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:97,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:102,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:108,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:109,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:110,1
    - Dst: StreamFrameMeta::has_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: StreamFrameMeta::source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:118,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:123,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 44
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 124
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - MakeParseError
    - butil::IOBuf*::pop_front
    - StreamFrameMeta::has_source_stream_id
    - brpc::SetTrackMeAddress
    - StreamFrameMeta::frame_type
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf::clear
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - StreamFrameMeta::stream_id
    - OnReceived
    - MakeMessage
    - BAIDU_UNLIKELY
    - LOG
    - RPC_VLOG_IF
    - butil::IOBuf*::length
    - ParsePbFromIOBuf
    - brpc::policy::SendStreamRst
    - butil::IOBuf*::copy_to
    - StreamFrameMeta::source_stream_id
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseStreamingMessage(butil::IOBuf* source,\n                            Socket*
      socket, bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::policy::ProcessStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessStreamingMessage(InputMessageBase* /*msg*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:131,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:133,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:134,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:135,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:136,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 130
    functionDepth: 2
    functionLinenumber: 130
    functionLinenumberEnd: 140
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: void SendStreamRst(Socket *sock, int64_t remote_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:146,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:147,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:149,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:150,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - sock
    - remote_stream_id
    - source_stream_id
    argTypes:
    - Socket*
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: "void SendStreamClose(Socket *sock, int64_t remote_stream_id,\n                     int64_t
      source_stream_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:161,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:163,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:165,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:166,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 5
    argNames:
    - sock
    - data
    - remote_stream_id
    - source_stream_id
    - response_id
    argTypes:
    - Socket*
    - butil::IOBuf*
    - int64_t
    - int64_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 174
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_has_continuation
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: int
    signature: "int SendStreamData(Socket* sock, const butil::IOBuf* data,\n                   int64_t
      remote_stream_id, int64_t source_stream_id,\n                   bthread_id_t
      response_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:45,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:46,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:50,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: StreamFrameMeta::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - out
    - fm
    - data
    argTypes:
    - butil::IOBuf*
    - StreamFrameMeta
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 59
    functionName: brpc::policy::PackStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - ARRAY_SIZE
    - butil::IOBuf*::length
    - butil::IOBuf*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:64,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:68,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:71,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:72,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:76,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:82,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:83,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:84,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:87,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:90,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:91,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:95,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:96,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:97,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:102,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:108,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:109,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:110,1
    - Dst: StreamFrameMeta::has_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: StreamFrameMeta::source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:118,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:123,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 44
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 124
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - MakeParseError
    - butil::IOBuf*::pop_front
    - StreamFrameMeta::has_source_stream_id
    - brpc::SetTrackMeAddress
    - StreamFrameMeta::frame_type
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf::clear
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - StreamFrameMeta::stream_id
    - OnReceived
    - MakeMessage
    - BAIDU_UNLIKELY
    - LOG
    - RPC_VLOG_IF
    - butil::IOBuf*::length
    - ParsePbFromIOBuf
    - brpc::policy::SendStreamRst
    - butil::IOBuf*::copy_to
    - StreamFrameMeta::source_stream_id
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseStreamingMessage(butil::IOBuf* source,\n                            Socket*
      socket, bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::policy::ProcessStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessStreamingMessage(InputMessageBase* /*msg*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:131,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:133,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:134,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:135,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:136,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 130
    functionDepth: 2
    functionLinenumber: 130
    functionLinenumberEnd: 140
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: void SendStreamRst(Socket *sock, int64_t remote_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:146,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:147,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:149,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:150,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - sock
    - remote_stream_id
    - source_stream_id
    argTypes:
    - Socket*
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: "void SendStreamClose(Socket *sock, int64_t remote_stream_id,\n                     int64_t
      source_stream_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:161,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:163,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:165,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:166,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 5
    argNames:
    - sock
    - data
    - remote_stream_id
    - source_stream_id
    - response_id
    argTypes:
    - Socket*
    - butil::IOBuf*
    - int64_t
    - int64_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 174
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_has_continuation
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: int
    signature: "int SendStreamData(Socket* sock, const butil::IOBuf* data,\n                   int64_t
      remote_stream_id, int64_t source_stream_id,\n                   bthread_id_t
      response_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:45,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:46,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:50,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: StreamFrameMeta::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - out
    - fm
    - data
    argTypes:
    - butil::IOBuf*
    - StreamFrameMeta
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 59
    functionName: brpc::policy::PackStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 10
    functionsReached:
    - ARRAY_SIZE
    - butil::IOBuf*::length
    - butil::IOBuf*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:64,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:68,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:71,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:72,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:76,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:82,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:83,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:84,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:87,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:90,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:91,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:95,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:96,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:97,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:102,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:108,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:109,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:110,1
    - Dst: StreamFrameMeta::has_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: StreamFrameMeta::source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:118,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:123,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 44
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 124
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - MakeParseError
    - butil::IOBuf*::pop_front
    - StreamFrameMeta::has_source_stream_id
    - brpc::SetTrackMeAddress
    - StreamFrameMeta::frame_type
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf::clear
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - StreamFrameMeta::stream_id
    - OnReceived
    - MakeMessage
    - BAIDU_UNLIKELY
    - LOG
    - RPC_VLOG_IF
    - butil::IOBuf*::length
    - ParsePbFromIOBuf
    - brpc::policy::SendStreamRst
    - butil::IOBuf*::copy_to
    - StreamFrameMeta::source_stream_id
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseStreamingMessage(butil::IOBuf* source,\n                            Socket*
      socket, bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::policy::ProcessStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessStreamingMessage(InputMessageBase* /*msg*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:131,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:133,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:134,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:135,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:136,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 130
    functionDepth: 2
    functionLinenumber: 130
    functionLinenumberEnd: 140
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: void SendStreamRst(Socket *sock, int64_t remote_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:146,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:147,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:149,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:150,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - sock
    - remote_stream_id
    - source_stream_id
    argTypes:
    - Socket*
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: "void SendStreamClose(Socket *sock, int64_t remote_stream_id,\n                     int64_t
      source_stream_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:161,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:163,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:165,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:166,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 5
    argNames:
    - sock
    - data
    - remote_stream_id
    - source_stream_id
    - response_id
    argTypes:
    - Socket*
    - butil::IOBuf*
    - int64_t
    - int64_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 174
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_has_continuation
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: int
    signature: "int SendStreamData(Socket* sock, const butil::IOBuf* data,\n                   int64_t
      remote_stream_id, int64_t source_stream_id,\n                   bthread_id_t
      response_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:45,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:46,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:50,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:53,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: StreamFrameMeta::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:55,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - out
    - fm
    - data
    argTypes:
    - butil::IOBuf*
    - StreamFrameMeta
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 59
    functionName: brpc::policy::PackStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 13
    functionsReached:
    - ARRAY_SIZE
    - butil::IOBuf*::length
    - butil::IOBuf*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:64,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:68,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:71,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:72,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:76,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:82,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:83,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:84,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:87,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:90,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:91,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:94,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:95,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:96,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:97,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:102,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:106,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:107,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:108,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:109,1
    - Dst: StreamFrameMeta::stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:110,1
    - Dst: StreamFrameMeta::has_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: StreamFrameMeta::frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:113,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: StreamFrameMeta::source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:114,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:118,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:119,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:123,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 44
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 124
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - MakeParseError
    - butil::IOBuf*::pop_front
    - StreamFrameMeta::has_source_stream_id
    - brpc::SetTrackMeAddress
    - StreamFrameMeta::frame_type
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf::clear
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - StreamFrameMeta::stream_id
    - OnReceived
    - MakeMessage
    - BAIDU_UNLIKELY
    - LOG
    - RPC_VLOG_IF
    - butil::IOBuf*::length
    - ParsePbFromIOBuf
    - brpc::policy::SendStreamRst
    - butil::IOBuf*::copy_to
    - StreamFrameMeta::source_stream_id
    - SocketUniquePtr::conn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseStreamingMessage(butil::IOBuf* source,\n                            Socket*
      socket, bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: brpc::policy::ProcessStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessStreamingMessage(InputMessageBase* /*msg*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:131,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:133,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:134,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:135,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:136,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 130
    functionDepth: 2
    functionLinenumber: 130
    functionLinenumberEnd: 140
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: void SendStreamRst(Socket *sock, int64_t remote_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:146,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:147,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:149,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:150,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - sock
    - remote_stream_id
    - source_stream_id
    argTypes:
    - Socket*
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 154
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: void
    signature: "void SendStreamClose(Socket *sock, int64_t remote_stream_id,\n                     int64_t
      source_stream_id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:161,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:163,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:165,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:166,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 5
    argNames:
    - sock
    - data
    - remote_stream_id
    - source_stream_id
    - response_id
    argTypes:
    - Socket*
    - butil::IOBuf*
    - int64_t
    - int64_t
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 174
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - StreamFrameMeta::set_source_stream_id
    - StreamFrameMeta::set_frame_type
    - CHECK
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_has_continuation
    - butil::IOBuf::IOBuf
    - Socket*::Write
    - brpc::policy::PackStreamMessage
    linkageType: ''
    returnType: int
    signature: "int SendStreamData(Socket* sock, const butil::IOBuf* data,\n                   int64_t
      remote_stream_id, int64_t source_stream_id,\n                   bthread_id_t
      response_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::H2ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Error
    signature: H2Error error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ErrorToString
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::policy::H2ParseResult::error_str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ErrorToString
    linkageType: ''
    returnType: char
    signature: char * error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::policy::H2ParseResult::is_ok
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2ParseResult::error
    linkageType: ''
    returnType: bool
    signature: bool is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::policy::H2ParseResult::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::policy::H2ParseResult::message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: brpc::policy::MakeH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Message(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: brpc::policy::H2Bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2Bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2Bvars>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::get_h2_bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<H2Bvars>
    linkageType: ''
    returnType: H2Bvars
    signature: H2Bvars * get_h2_bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    functionName: brpc::policy::H2UnsentRequest::AddRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int AddRefManually()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:145,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:146,1
    - Dst: brpc::policy::H2UnsentRequest::Destroy
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: brpc::policy::H2UnsentRequest::RemoveRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentRequest::Destroy
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void RemoveRefManually()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 163
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 166
    functionName: brpc::policy::H2UnsentRequest::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 176
    functionName: brpc::policy::H2UnsentRequest::H2UnsentRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: ~H2UnsentRequest()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 207
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 210
    functionName: brpc::policy::H2UnsentResponse::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    functionName: ~H2UnsentResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::H2StreamContext::correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t correlation_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cid
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::policy::H2StreamContext::set_correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_correlation_id(uint64_t cid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: brpc::policy::H2StreamContext::parsed_length
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t parsed_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: brpc::policy::H2StreamContext::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:255,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 259
    functionName: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t ReleaseDeferredWindowUpdate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::H2StreamContext::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamState
    signature: H2StreamState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: brpc::policy::H2Context::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2ConnectionState
    signature: H2ConnectionState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 333
    functionName: brpc::policy::H2Context::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 340
    functionName: brpc::policy::H2Context::VolatilePendingStreamSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t VolatilePendingStreamSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: '& hpacker()'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HPacker
    signature: HPacker & hpacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    functionName: '& remote_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & remote_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 344
    functionName: '& local_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & local_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 346
    functionName: brpc::policy::H2Context::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - CreatedByConnect
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: brpc::policy::H2Context::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::is_client_side
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 408
    functionName: brpc::policy::H2Context::AllocateClientStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RunOutStreams
    - LOG
    linkageType: ''
    returnType: int
    signature: int H2Context::AllocateClientStreamId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 412
    functionName: brpc::policy::H2Context::RunOutStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool H2Context::RunOutStreams() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' req'
    argTypes:
    - std::ostream
    - H2UnsentRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 417
    functionName: '& operator<<(std::ostream& os, const H2UnsentRequest& req)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentRequest&
      req)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' res'
    argTypes:
    - std::ostream
    - H2UnsentResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: '& operator<<(std::ostream& os, const H2UnsentResponse& res)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentResponse&
      res)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::H2ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: H2Error
    signature: H2Error error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ErrorToString
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::policy::H2ParseResult::error_str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ErrorToString
    linkageType: ''
    returnType: char
    signature: char * error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::policy::H2ParseResult::is_ok
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2ParseResult::error
    linkageType: ''
    returnType: bool
    signature: bool is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::policy::H2ParseResult::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::policy::H2ParseResult::message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: brpc::policy::MakeH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Message(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: brpc::policy::H2Bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2Bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2Bvars>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::get_h2_bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 1
    functionsReached:
    - butil::get_leaky_singleton<H2Bvars>
    linkageType: ''
    returnType: H2Bvars
    signature: H2Bvars * get_h2_bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    functionName: brpc::policy::H2UnsentRequest::AddRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int AddRefManually()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:145,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:146,1
    - Dst: brpc::policy::H2UnsentRequest::Destroy
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: brpc::policy::H2UnsentRequest::RemoveRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentRequest::Destroy
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void RemoveRefManually()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 163
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 166
    functionName: brpc::policy::H2UnsentRequest::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 176
    functionName: brpc::policy::H2UnsentRequest::H2UnsentRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: ~H2UnsentRequest()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 207
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 210
    functionName: brpc::policy::H2UnsentResponse::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    functionName: ~H2UnsentResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::H2StreamContext::correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t correlation_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cid
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::policy::H2StreamContext::set_correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_correlation_id(uint64_t cid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: brpc::policy::H2StreamContext::parsed_length
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t parsed_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: brpc::policy::H2StreamContext::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:255,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 259
    functionName: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t ReleaseDeferredWindowUpdate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::H2StreamContext::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamState
    signature: H2StreamState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: brpc::policy::H2Context::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2ConnectionState
    signature: H2ConnectionState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 333
    functionName: brpc::policy::H2Context::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 340
    functionName: brpc::policy::H2Context::VolatilePendingStreamSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t VolatilePendingStreamSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: '& hpacker()'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HPacker
    signature: HPacker & hpacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    functionName: '& remote_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & remote_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 344
    functionName: '& local_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & local_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 346
    functionName: brpc::policy::H2Context::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 1
    functionsReached:
    - CreatedByConnect
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: brpc::policy::H2Context::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::is_client_side
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 408
    functionName: brpc::policy::H2Context::AllocateClientStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RunOutStreams
    - LOG
    linkageType: ''
    returnType: int
    signature: int H2Context::AllocateClientStreamId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 412
    functionName: brpc::policy::H2Context::RunOutStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool H2Context::RunOutStreams() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' req'
    argTypes:
    - std::ostream
    - H2UnsentRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 417
    functionName: '& operator<<(std::ostream& os, const H2UnsentRequest& req)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentRequest&
      req)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' res'
    argTypes:
    - std::ostream
    - H2UnsentResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: '& operator<<(std::ostream& os, const H2UnsentResponse& res)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentResponse&
      res)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::H2ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: H2Error
    signature: H2Error error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ErrorToString
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::policy::H2ParseResult::error_str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ErrorToString
    linkageType: ''
    returnType: char
    signature: char * error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::policy::H2ParseResult::is_ok
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2ParseResult::error
    linkageType: ''
    returnType: bool
    signature: bool is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::policy::H2ParseResult::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::policy::H2ParseResult::message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: brpc::policy::MakeH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Message(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: brpc::policy::H2Bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2Bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2Bvars>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::get_h2_bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 1
    functionsReached:
    - butil::get_leaky_singleton<H2Bvars>
    linkageType: ''
    returnType: H2Bvars
    signature: H2Bvars * get_h2_bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    functionName: brpc::policy::H2UnsentRequest::AddRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int AddRefManually()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:145,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:146,1
    - Dst: brpc::policy::H2UnsentRequest::Destroy
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: brpc::policy::H2UnsentRequest::RemoveRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentRequest::Destroy
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void RemoveRefManually()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 163
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 166
    functionName: brpc::policy::H2UnsentRequest::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 176
    functionName: brpc::policy::H2UnsentRequest::H2UnsentRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: ~H2UnsentRequest()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 207
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 210
    functionName: brpc::policy::H2UnsentResponse::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    functionName: ~H2UnsentResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::H2StreamContext::correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t correlation_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cid
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::policy::H2StreamContext::set_correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_correlation_id(uint64_t cid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: brpc::policy::H2StreamContext::parsed_length
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t parsed_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: brpc::policy::H2StreamContext::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:255,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 259
    functionName: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t ReleaseDeferredWindowUpdate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::H2StreamContext::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamState
    signature: H2StreamState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: brpc::policy::H2Context::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2ConnectionState
    signature: H2ConnectionState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 333
    functionName: brpc::policy::H2Context::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 340
    functionName: brpc::policy::H2Context::VolatilePendingStreamSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t VolatilePendingStreamSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: '& hpacker()'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HPacker
    signature: HPacker & hpacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    functionName: '& remote_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & remote_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 344
    functionName: '& local_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & local_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 346
    functionName: brpc::policy::H2Context::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 2
    functionsReached:
    - CreatedByConnect
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: brpc::policy::H2Context::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::is_client_side
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 408
    functionName: brpc::policy::H2Context::AllocateClientStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RunOutStreams
    - LOG
    linkageType: ''
    returnType: int
    signature: int H2Context::AllocateClientStreamId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 412
    functionName: brpc::policy::H2Context::RunOutStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool H2Context::RunOutStreams() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' req'
    argTypes:
    - std::ostream
    - H2UnsentRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 417
    functionName: '& operator<<(std::ostream& os, const H2UnsentRequest& req)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentRequest&
      req)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' res'
    argTypes:
    - std::ostream
    - H2UnsentResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: '& operator<<(std::ostream& os, const H2UnsentResponse& res)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentResponse&
      res)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: brpc::policy::H2ParseResult::H2ParseResult
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2ParseResult(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::H2ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: H2Error
    signature: H2Error error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ErrorToString
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::policy::H2ParseResult::error_str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ErrorToString
    linkageType: ''
    returnType: char
    signature: char * error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: brpc::policy::H2ParseResult::is_ok
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2ParseResult::error
    linkageType: ''
    returnType: bool
    signature: bool is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::policy::H2ParseResult::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: brpc::policy::H2ParseResult::message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * message() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - stream_id
    argTypes:
    - H2Error
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - H2Error
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: brpc::policy::MakeH2Error
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Error(H2Error err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: H2ParseResult
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: brpc::policy::MakeH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - H2ParseResult
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult MakeH2Message(H2StreamContext* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: brpc::policy::H2Bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2Bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2Bvars>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::get_h2_bvars
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 1
    functionsReached:
    - butil::get_leaky_singleton<H2Bvars>
    linkageType: ''
    returnType: H2Bvars
    signature: H2Bvars * get_h2_bvars()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    functionName: brpc::policy::H2UnsentRequest::AddRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int AddRefManually()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:145,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:146,1
    - Dst: brpc::policy::H2UnsentRequest::Destroy
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: brpc::policy::H2UnsentRequest::RemoveRefManually
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentRequest::Destroy
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void RemoveRefManually()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 163
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 166
    functionName: brpc::policy::H2UnsentRequest::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 176
    functionName: brpc::policy::H2UnsentRequest::H2UnsentRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: ~H2UnsentRequest()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 207
    functionName: '& push(const std::string& name)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: std::string
    signature: std::string & push(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::Header::Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' value'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 210
    functionName: brpc::policy::H2UnsentResponse::push
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - HPacker::Header::Header
    linkageType: ''
    returnType: void
    signature: void push(const std::string& name, const std::string& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    functionName: ~H2UnsentResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~H2UnsentResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::H2StreamContext::correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t correlation_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cid
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: brpc::policy::H2StreamContext::set_correlation_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_correlation_id(uint64_t cid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: brpc::policy::H2StreamContext::parsed_length
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t parsed_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: brpc::policy::H2StreamContext::stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stream_id() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:255,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 259
    functionName: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t ReleaseDeferredWindowUpdate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::H2StreamContext::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2StreamState
    signature: H2StreamState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: brpc::policy::H2Context::state
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2ConnectionState
    signature: H2ConnectionState state() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 333
    functionName: brpc::policy::H2Context::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 340
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 340
    functionName: brpc::policy::H2Context::VolatilePendingStreamSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t VolatilePendingStreamSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 342
    functionName: '& hpacker()'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HPacker
    signature: HPacker & hpacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    functionName: '& remote_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & remote_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 344
    functionName: '& local_settings() const'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: H2Settings
    signature: H2Settings & local_settings() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 346
    functionName: brpc::policy::H2Context::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 3
    functionsReached:
    - CreatedByConnect
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 347
    functionName: brpc::policy::H2Context::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::is_client_side
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 408
    functionName: brpc::policy::H2Context::AllocateClientStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RunOutStreams
    - LOG
    linkageType: ''
    returnType: int
    signature: int H2Context::AllocateClientStreamId()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 412
    functionName: brpc::policy::H2Context::RunOutStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool H2Context::RunOutStreams() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' req'
    argTypes:
    - std::ostream
    - H2UnsentRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 417
    functionName: '& operator<<(std::ostream& os, const H2UnsentRequest& req)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentRequest&
      req)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' res'
    argTypes:
    - std::ostream
    - H2UnsentResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: '& operator<<(std::ostream& os, const H2UnsentResponse& res)'
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const H2UnsentResponse&
      res)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Accept
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:61,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: brpc::policy::RapidjsonValueToString
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - Accept
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    linkageType: ''
    returnType: std::string
    signature: std::string RapidjsonValueToString(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:70,1
    - Dst: FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 75
    functionName: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - FileNamingService::GetServers
    - LOG
    - std::string::c_str
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::DegradeToOtherServiceIfNeeded(const char*
      service_name,\n                                                       std::vector<ServerNode>*
      servers)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:85,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:86,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:92,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:93,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:97,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:99,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:105,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:106,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:108,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:109,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:110,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:113,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:122,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:134,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:139,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:140,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:142,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:143,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:148,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:149,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:150,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:151,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:152,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:154,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:155,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:159,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:163,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:164,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:170,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:171,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:172,1
    - Dst: auto::value::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:173,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:176,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:179,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:185,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:186,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:191,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:192,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:201,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:206,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:207,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 82
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 210
    functionName: brpc::policy::ConsulNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 2
    functionsReached:
    - append
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - Init
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::string_appendf
    - Controller::http_response
    - auto::value::IsArray
    - LOG_EVERY_N
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - MemberEnd
    - LOG
    - std::vector<ServerNode>*::size
    - GetString
    - std::vector<ServerNode>*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - FindMember
    - RapidjsonValueToString
    - auto::value::IsUint
    - IsString
    - std::set::insert
    - Controller::http_request
    - GetUint
    - std::vector<ServerNode>*::empty
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - str2endpoint
    - auto::value::Size
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::GetServers(const char* service_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:217,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:218,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:226,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:231,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:237,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:238,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:242,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:245,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 212
    functionDepth: 3
    functionLinenumber: 212
    functionLinenumberEnd: 252
    functionName: brpc::policy::ConsulNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - bthread_stopped
    - bthread_usleep
    - NamingServiceActions*::ResetServers
    - bthread_self
    - CHECK
    - std::vector::clear
    - PLOG
    - brpc::policy::ConsulNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::RunNamingService(const char* service_name,\n
      \                                         NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: brpc::policy::ConsulNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ConsulNamingService::Describe(std::ostream& os,\n                                   const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConsulNamingService::ConsulNamingService
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 262
    functionName: brpc::policy::ConsulNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ConsulNamingService::ConsulNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ConsulNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: brpc::policy::ConsulNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsulNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Accept
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:61,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: brpc::policy::RapidjsonValueToString
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - Accept
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    linkageType: ''
    returnType: std::string
    signature: std::string RapidjsonValueToString(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:70,1
    - Dst: FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 75
    functionName: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 1
    functionsReached:
    - FileNamingService::GetServers
    - LOG
    - std::string::c_str
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::DegradeToOtherServiceIfNeeded(const char*
      service_name,\n                                                       std::vector<ServerNode>*
      servers)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:85,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:86,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:92,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:93,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:97,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:99,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:105,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:106,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:108,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:109,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:110,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:113,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:122,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:134,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:139,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:140,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:142,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:143,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:148,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:149,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:150,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:151,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:152,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:154,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:155,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:159,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:163,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:164,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:170,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:171,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:172,1
    - Dst: auto::value::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:173,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:176,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:179,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:185,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:186,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:191,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:192,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:201,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:206,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:207,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 82
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 210
    functionName: brpc::policy::ConsulNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 3
    functionsReached:
    - append
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - Init
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::string_appendf
    - Controller::http_response
    - auto::value::IsArray
    - LOG_EVERY_N
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - MemberEnd
    - LOG
    - std::vector<ServerNode>*::size
    - GetString
    - std::vector<ServerNode>*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - FindMember
    - RapidjsonValueToString
    - auto::value::IsUint
    - IsString
    - std::set::insert
    - Controller::http_request
    - GetUint
    - std::vector<ServerNode>*::empty
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - str2endpoint
    - auto::value::Size
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::GetServers(const char* service_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:217,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:218,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:226,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:231,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:237,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:238,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:242,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:245,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 212
    functionDepth: 3
    functionLinenumber: 212
    functionLinenumberEnd: 252
    functionName: brpc::policy::ConsulNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - bthread_stopped
    - bthread_usleep
    - NamingServiceActions*::ResetServers
    - bthread_self
    - CHECK
    - std::vector::clear
    - PLOG
    - brpc::policy::ConsulNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::RunNamingService(const char* service_name,\n
      \                                         NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: brpc::policy::ConsulNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ConsulNamingService::Describe(std::ostream& os,\n                                   const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConsulNamingService::ConsulNamingService
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 262
    functionName: brpc::policy::ConsulNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ConsulNamingService::ConsulNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ConsulNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: brpc::policy::ConsulNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsulNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Accept
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:61,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: brpc::policy::RapidjsonValueToString
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - Accept
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    linkageType: ''
    returnType: std::string
    signature: std::string RapidjsonValueToString(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:70,1
    - Dst: FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 75
    functionName: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 2
    functionsReached:
    - FileNamingService::GetServers
    - LOG
    - std::string::c_str
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::DegradeToOtherServiceIfNeeded(const char*
      service_name,\n                                                       std::vector<ServerNode>*
      servers)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:85,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:86,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:92,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:93,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:97,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:99,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:105,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:106,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:108,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:109,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:110,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:113,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:122,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:134,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:139,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:140,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:142,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:143,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:148,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:149,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:150,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:151,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:152,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:154,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:155,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:159,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:163,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:164,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:170,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:171,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:172,1
    - Dst: auto::value::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:173,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:176,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:179,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:185,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:186,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:191,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:192,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:201,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:206,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:207,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 82
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 210
    functionName: brpc::policy::ConsulNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 4
    functionsReached:
    - append
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - Init
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::string_appendf
    - Controller::http_response
    - auto::value::IsArray
    - LOG_EVERY_N
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - MemberEnd
    - LOG
    - std::vector<ServerNode>*::size
    - GetString
    - std::vector<ServerNode>*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - FindMember
    - RapidjsonValueToString
    - auto::value::IsUint
    - IsString
    - std::set::insert
    - Controller::http_request
    - GetUint
    - std::vector<ServerNode>*::empty
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - str2endpoint
    - auto::value::Size
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::GetServers(const char* service_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:217,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:218,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:226,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:231,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:237,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:238,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:242,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:245,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 212
    functionDepth: 3
    functionLinenumber: 212
    functionLinenumberEnd: 252
    functionName: brpc::policy::ConsulNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - bthread_stopped
    - bthread_usleep
    - NamingServiceActions*::ResetServers
    - bthread_self
    - CHECK
    - std::vector::clear
    - PLOG
    - brpc::policy::ConsulNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::RunNamingService(const char* service_name,\n
      \                                         NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: brpc::policy::ConsulNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ConsulNamingService::Describe(std::ostream& os,\n                                   const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConsulNamingService::ConsulNamingService
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 262
    functionName: brpc::policy::ConsulNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ConsulNamingService::ConsulNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ConsulNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: brpc::policy::ConsulNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsulNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Accept
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:61,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: brpc::policy::RapidjsonValueToString
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - Accept
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    linkageType: ''
    returnType: std::string
    signature: std::string RapidjsonValueToString(const BUTIL_RAPIDJSON_NAMESPACE::Value&
      value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:70,1
    - Dst: FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 75
    functionName: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 3
    functionsReached:
    - FileNamingService::GetServers
    - LOG
    - std::string::c_str
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::DegradeToOtherServiceIfNeeded(const char*
      service_name,\n                                                       std::vector<ServerNode>*
      servers)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:85,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:86,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:92,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:93,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:97,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:99,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:100,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:105,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:106,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:108,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:109,1
    - Dst: brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:110,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:113,1
    - Dst: LOG_EVERY_N
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:122,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:134,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:139,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:140,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:142,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:143,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:148,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:149,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:150,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:151,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:152,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:154,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:155,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:159,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:160,1
    - Dst: GetUint
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:163,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:164,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:170,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:171,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:172,1
    - Dst: auto::value::Size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:173,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:176,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:179,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:185,1
    - Dst: RapidjsonValueToString
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:186,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:191,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:192,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:201,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:206,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:207,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 82
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 77
    functionDepth: 2
    functionLinenumber: 77
    functionLinenumberEnd: 210
    functionName: brpc::policy::ConsulNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 5
    functionsReached:
    - append
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - Init
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::string_appendf
    - Controller::http_response
    - auto::value::IsArray
    - LOG_EVERY_N
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - MemberEnd
    - LOG
    - std::vector<ServerNode>*::size
    - GetString
    - std::vector<ServerNode>*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - FindMember
    - RapidjsonValueToString
    - auto::value::IsUint
    - IsString
    - std::set::insert
    - Controller::http_request
    - GetUint
    - std::vector<ServerNode>*::empty
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - str2endpoint
    - auto::value::Size
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::GetServers(const char* service_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:217,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:218,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:226,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:231,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:237,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:238,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:240,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:242,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:245,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 212
    functionDepth: 3
    functionLinenumber: 212
    functionLinenumberEnd: 252
    functionName: brpc::policy::ConsulNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::max
    - bthread_stopped
    - bthread_usleep
    - NamingServiceActions*::ResetServers
    - bthread_self
    - CHECK
    - std::vector::clear
    - PLOG
    - brpc::policy::ConsulNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ConsulNamingService::RunNamingService(const char* service_name,\n
      \                                         NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: brpc::policy::ConsulNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ConsulNamingService::Describe(std::ostream& os,\n                                   const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConsulNamingService::ConsulNamingService
      Src: /src/brpc/src/brpc/policy/consul_naming_service.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 262
    functionName: brpc::policy::ConsulNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ConsulNamingService::ConsulNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ConsulNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: brpc::policy::ConsulNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consul_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsulNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::policy::DHWrapper::DHWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/dh.h:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~DHWrapper()
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::policy::DHWrapper::DHWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/dh.h:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~DHWrapper()
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::policy::DHWrapper::DHWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/dh.h:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~DHWrapper()
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::policy::DHWrapper::DHWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DHWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/dh.h:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~DHWrapper()
    functionSourceFile: /src/brpc/src/brpc/policy/dh.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~DHWrapper()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:82,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:84,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:88,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:89,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:91,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:96,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:98,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:100,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:103,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:104,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - body
    - method_name
    - mtype
    - seq_id
    argTypes:
    - butil::IOBuf*
    - std::string*
    - ::apache::thrift::protocol::TMessageType*
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 105
    functionName: brpc::policy::ReadThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - butil::IOBuf*::cutn
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status ReadThriftMessageBegin(butil::IOBuf* body,\n                       std::string*
      method_name,\n                       ::apache::thrift::protocol::TMessageType*
      mtype,\n                       uint32_t* seq_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 109
    functionName: brpc::policy::ThriftMessageBeginSize
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t ThriftMessageBeginSize(const std::string& method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:117,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:122,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - ' method_name'
    - mtype
    - seq_id
    argTypes:
    - char*
    - std::string
    - ::apache::thrift::protocol::TMessageType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::policy::WriteThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - data
    - size
    - htonl
    - memcpy
    linkageType: ''
    returnType: void
    signature: "void WriteThriftMessageBegin(char* buf,\n                        const
      std::string& method_name,\n                        ::apache::thrift::protocol::TMessageType
      mtype,\n                        uint32_t seq_id)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:129,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:130,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:131,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:133,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:146,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:148,1
    - Dst: ThriftMessageBase*::Read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:154,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:157,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:160,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:162,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:165,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:171,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' body'
    - raw_msg
    - expected_fid
    argTypes:
    - butil::IOBuf
    - ThriftMessageBase*
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 174
    functionName: brpc::policy::ReadThriftStruct
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - what
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - ThriftMessageBase*::Read
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - LOG
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    linkageType: ''
    returnType: bool
    signature: "bool ReadThriftStruct(const butil::IOBuf& body,\n                      ThriftMessageBase*
      raw_msg,\n                      int16_t expected_fid)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:178,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:179,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:180,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:182,1
    - Dst: ::apache::thrift::TApplicationException*::read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:187,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:188,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' body'
    - x
    argTypes:
    - butil::IOBuf
    - ::apache::thrift::TApplicationException*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 190
    functionName: brpc::policy::ReadThriftException
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ::apache::thrift::TApplicationException*::read
    - copy_to
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - size
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    linkageType: ''
    returnType: void
    signature: "void ReadThriftException(const butil::IOBuf& body,\n                         ::apache::thrift::TApplicationException*
      x)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: brpc::policy::ThriftClosure::ThriftClosure
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: ThriftClosure::~ThriftClosure()
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::~ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 226
    functionName: brpc::policy::ThriftClosure::SuspendRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::SuspendRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:229,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 232
    functionName: brpc::policy::ThriftClosure::ResumeRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ResumeRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:235,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 238
    functionName: brpc::policy::ThriftClosure::Run
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::Run()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:243,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:246,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:250,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:251,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:252,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:257,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:264,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:268,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:270,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:271,1
    - Dst: thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:275,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:276,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:277,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:279,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:280,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:282,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:283,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:284,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:286,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:288,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:291,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:293,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:295,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:296,1
    - Dst: ::apache::thrift::TApplicationException::write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:298,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:299,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:300,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:301,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:305,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:307,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:308,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:309,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:311,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:313,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:317,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:318,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:321,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:322,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:323,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:324,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:327,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:328,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:329,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:333,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:334,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:335,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:336,1
    - Dst: ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:338,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:343,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:345,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: body::movable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:356,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:358,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:359,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:360,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 368
    functionName: brpc::policy::ThriftClosure::DoRun
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::span
    - Span*::set_start_send_us
    - IsCloseConnection
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ::apache::thrift::TApplicationException::write
    - ErrorCode
    - log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - ThriftMessageBeginSize
    - PLOG_IF
    - Span*::set_response_size
    - size
    - has_log_id
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - thrift_method_name
    - butil::IOBuf::size
    - Server*::options
    - htonl
    - ServerPrivateAccessor
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - Failed
    - Socket*::description
    - ErrorText
    - Socket*::Write
    - body::movable
    - body::size
    - Span*::set_sent_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Socket*::SetFailed
    - auto::getBuffer
    - empty
    - WriteThriftMessageBegin
    - raw_instance
    - SetFailed
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::DoRun()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:373,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:375,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:378,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:383,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:387,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:389,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:390,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:391,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:394,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:395,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:396,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:397,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 398
    functionName: brpc::policy::ParseThriftMessage
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseThriftMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThriftClosure*::SuspendRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:405,1
    - Dst: ThriftService*::ProcessThriftFramedRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:413,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:415,1
    - Dst: ThriftClosure*::ResumeRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 5
    argNames:
    - service
    - cntl
    - req
    - res
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 418
    functionName: brpc::policy::ProcessThriftFramedRequestNoExcept
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ThriftService*::ProcessThriftFramedRequest
    - ThriftClosure*::ResumeRunning
    - ThriftClosure*::SuspendRunning
    - what
    - c_str
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void ProcessThriftFramedRequestNoExcept(ThriftService* service, Controller*
      cntl,\n                                               ThriftFramedMessage* req,
      ThriftFramedMessage* res,\n                                               ThriftClosure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 438
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:445,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 5
    argNames:
    - service
    - controller
    - request
    - response
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 452
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(ThriftService* service,\n                                       Controller*
      controller,\n                                       ThriftFramedMessage* request,\n
      \                                      ThriftFramedMessage* response,\n                                       ThriftClosure*
      done)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:455,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:458,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:459,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: ThriftClosure::ThriftClosure
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:463,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:468,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:471,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:474,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:476,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:477,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:478,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:480,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:485,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:487,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:490,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:492,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:494,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:496,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:499,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:503,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:506,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:507,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:508,1
    - Dst: MethodStatus*::MaxConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:509,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:514,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:519,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:521,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:530,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:531,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:534,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:538,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:539,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:541,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:542,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:546,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:550,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:555,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:558,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:561,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:564,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:565,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:566,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:568,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 63
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 454
    functionDepth: 3
    functionLinenumber: 454
    functionLinenumberEnd: 570
    functionName: brpc::policy::ProcessThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ThriftClosure::ThriftClosure
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - ScopedNonServiceError::release
    - bthread_assign_data
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::local_side
    - MethodStatus*::MaxConcurrency
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - ClosureGuard::release
    - SocketUniquePtr::get
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - LOG_EVERY_SECOND
    - Span*::set_request_size
    - InputMessageBase*::received_us
    - ControllerPrivateAccessor::set_server
    - butil::Status::ok
    - ServerPrivateAccessor::acceptor
    - ThriftFramedMessage*::body::size
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - DestroyingPtr::reset
    - InputMessageBase*::arg
    - Controller*::thrift_method_name
    - butil::Status::error_cstr
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - Span*::AsParent
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void ProcessThriftRequest(InputMessageBase* msg_base)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:573,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:579,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:581,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:582,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:587,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:592,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:595,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:609,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:615,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:619,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:628,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:633,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:637,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:646,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 647
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ReadThriftException
    - ControllerPrivateAccessor::span
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - ::apache::thrift::TApplicationException::what
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - ThriftFramedMessage*::raw_instance
    - Span*::set_response_size
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - butil::Status::ok
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Controller*::thrift_method_name
    - Span*::set_base_real_us
    - butil::Status::error_cstr
    - brpc::policy::ReadThriftStruct
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessThriftResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:652,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 649
    functionDepth: 1
    functionLinenumber: 649
    functionLinenumberEnd: 656
    functionName: brpc::policy::VerifyThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyThriftRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:661,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:664,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:668,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:671,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:675,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:678,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:684,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:686,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:689,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:693,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:695,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:699,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:703,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:707,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:711,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:714,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:715,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:716,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:720,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:723,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:724,1
    - Dst: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:726,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:731,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:734,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 44
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 658
    functionDepth: 2
    functionLinenumber: 658
    functionLinenumberEnd: 736
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::ThriftMessageBeginSize
    - google::protobuf::Message*::GetDescriptor
    - Controller*::SetFailed
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - memcpy
    - size
    - Controller*::response
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - htonl
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::body::size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::thrift_method_name
    - auto::getBuffer
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - brpc::policy::WriteThriftMessageBegin
    - data
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: "void SerializeThriftRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:763,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackThriftRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:82,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:84,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:88,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:89,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:91,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:96,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:98,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:100,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:103,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:104,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - body
    - method_name
    - mtype
    - seq_id
    argTypes:
    - butil::IOBuf*
    - std::string*
    - ::apache::thrift::protocol::TMessageType*
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 105
    functionName: brpc::policy::ReadThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - ntohl
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - butil::IOBuf*::cutn
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status ReadThriftMessageBegin(butil::IOBuf* body,\n                       std::string*
      method_name,\n                       ::apache::thrift::protocol::TMessageType*
      mtype,\n                       uint32_t* seq_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 109
    functionName: brpc::policy::ThriftMessageBeginSize
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 1
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t ThriftMessageBeginSize(const std::string& method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:117,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:122,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - ' method_name'
    - mtype
    - seq_id
    argTypes:
    - char*
    - std::string
    - ::apache::thrift::protocol::TMessageType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::policy::WriteThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 1
    functionsReached:
    - data
    - size
    - htonl
    - memcpy
    linkageType: ''
    returnType: void
    signature: "void WriteThriftMessageBegin(char* buf,\n                        const
      std::string& method_name,\n                        ::apache::thrift::protocol::TMessageType
      mtype,\n                        uint32_t seq_id)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:129,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:130,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:131,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:133,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:146,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:148,1
    - Dst: ThriftMessageBase*::Read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:154,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:157,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:160,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:162,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:165,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:171,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' body'
    - raw_msg
    - expected_fid
    argTypes:
    - butil::IOBuf
    - ThriftMessageBase*
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 174
    functionName: brpc::policy::ReadThriftStruct
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 3
    functionsReached:
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - what
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - ThriftMessageBase*::Read
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - LOG
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    linkageType: ''
    returnType: bool
    signature: "bool ReadThriftStruct(const butil::IOBuf& body,\n                      ThriftMessageBase*
      raw_msg,\n                      int16_t expected_fid)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:178,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:179,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:180,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:182,1
    - Dst: ::apache::thrift::TApplicationException*::read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:187,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:188,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' body'
    - x
    argTypes:
    - butil::IOBuf
    - ::apache::thrift::TApplicationException*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 190
    functionName: brpc::policy::ReadThriftException
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 1
    functionsReached:
    - ::apache::thrift::TApplicationException*::read
    - copy_to
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - size
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    linkageType: ''
    returnType: void
    signature: "void ReadThriftException(const butil::IOBuf& body,\n                         ::apache::thrift::TApplicationException*
      x)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: brpc::policy::ThriftClosure::ThriftClosure
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: ThriftClosure::~ThriftClosure()
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::~ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 226
    functionName: brpc::policy::ThriftClosure::SuspendRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::SuspendRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:229,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 232
    functionName: brpc::policy::ThriftClosure::ResumeRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ResumeRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:235,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 234
    functionDepth: 2
    functionLinenumber: 234
    functionLinenumberEnd: 238
    functionName: brpc::policy::ThriftClosure::Run
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::Run()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:243,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:246,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:250,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:251,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:252,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:257,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:264,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:268,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:270,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:271,1
    - Dst: thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:275,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:276,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:277,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:279,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:280,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:282,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:283,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:284,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:286,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:288,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:291,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:293,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:295,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:296,1
    - Dst: ::apache::thrift::TApplicationException::write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:298,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:299,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:300,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:301,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:305,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:307,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:308,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:309,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:311,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:313,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:317,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:318,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:321,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:322,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:323,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:324,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:327,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:328,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:329,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:333,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:334,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:335,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:336,1
    - Dst: ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:338,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:343,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:345,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: body::movable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:356,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:358,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:359,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:360,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 368
    functionName: brpc::policy::ThriftClosure::DoRun
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::span
    - Span*::set_start_send_us
    - IsCloseConnection
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ::apache::thrift::TApplicationException::write
    - ErrorCode
    - log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - ThriftMessageBeginSize
    - PLOG_IF
    - Span*::set_response_size
    - size
    - has_log_id
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - thrift_method_name
    - butil::IOBuf::size
    - Server*::options
    - htonl
    - ServerPrivateAccessor
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - Failed
    - Socket*::description
    - ErrorText
    - Socket*::Write
    - body::movable
    - body::size
    - Span*::set_sent_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Socket*::SetFailed
    - auto::getBuffer
    - empty
    - WriteThriftMessageBegin
    - raw_instance
    - SetFailed
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::DoRun()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:373,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:375,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:378,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:383,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:387,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:389,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:390,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:391,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:394,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:395,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:396,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:397,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 398
    functionName: brpc::policy::ParseThriftMessage
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseThriftMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThriftClosure*::SuspendRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:405,1
    - Dst: ThriftService*::ProcessThriftFramedRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:413,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:415,1
    - Dst: ThriftClosure*::ResumeRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 5
    argNames:
    - service
    - cntl
    - req
    - res
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 418
    functionName: brpc::policy::ProcessThriftFramedRequestNoExcept
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - ThriftService*::ProcessThriftFramedRequest
    - ThriftClosure*::ResumeRunning
    - ThriftClosure*::SuspendRunning
    - what
    - c_str
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void ProcessThriftFramedRequestNoExcept(ThriftService* service, Controller*
      cntl,\n                                               ThriftFramedMessage* req,
      ThriftFramedMessage* res,\n                                               ThriftClosure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 438
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:445,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 5
    argNames:
    - service
    - controller
    - request
    - response
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 452
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 1
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(ThriftService* service,\n                                       Controller*
      controller,\n                                       ThriftFramedMessage* request,\n
      \                                      ThriftFramedMessage* response,\n                                       ThriftClosure*
      done)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:455,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:458,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:459,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: ThriftClosure::ThriftClosure
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:463,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:468,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:471,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:474,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:476,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:477,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:478,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:480,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:485,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:487,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:490,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:492,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:494,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:496,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:499,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:503,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:506,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:507,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:508,1
    - Dst: MethodStatus*::MaxConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:509,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:514,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:519,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:521,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:530,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:531,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:534,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:538,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:539,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:541,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:542,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:546,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:550,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:555,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:558,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:561,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:564,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:565,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:566,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:568,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 63
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 454
    functionDepth: 3
    functionLinenumber: 454
    functionLinenumberEnd: 570
    functionName: brpc::policy::ProcessThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ThriftClosure::ThriftClosure
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - ScopedNonServiceError::release
    - bthread_assign_data
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::local_side
    - MethodStatus*::MaxConcurrency
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - ClosureGuard::release
    - SocketUniquePtr::get
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - LOG_EVERY_SECOND
    - Span*::set_request_size
    - InputMessageBase*::received_us
    - ControllerPrivateAccessor::set_server
    - butil::Status::ok
    - ServerPrivateAccessor::acceptor
    - ThriftFramedMessage*::body::size
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - DestroyingPtr::reset
    - InputMessageBase*::arg
    - Controller*::thrift_method_name
    - butil::Status::error_cstr
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - Span*::AsParent
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void ProcessThriftRequest(InputMessageBase* msg_base)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:573,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:579,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:581,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:582,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:587,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:592,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:595,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:609,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:615,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:619,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:628,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:633,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:637,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:646,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 647
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ReadThriftException
    - ControllerPrivateAccessor::span
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - ::apache::thrift::TApplicationException::what
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - ThriftFramedMessage*::raw_instance
    - Span*::set_response_size
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - butil::Status::ok
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Controller*::thrift_method_name
    - Span*::set_base_real_us
    - butil::Status::error_cstr
    - brpc::policy::ReadThriftStruct
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessThriftResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:652,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 649
    functionDepth: 1
    functionLinenumber: 649
    functionLinenumberEnd: 656
    functionName: brpc::policy::VerifyThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyThriftRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:661,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:664,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:668,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:671,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:675,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:678,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:684,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:686,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:689,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:693,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:695,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:699,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:703,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:707,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:711,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:714,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:715,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:716,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:720,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:723,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:724,1
    - Dst: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:726,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:731,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:734,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 44
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 658
    functionDepth: 2
    functionLinenumber: 658
    functionLinenumberEnd: 736
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::ThriftMessageBeginSize
    - google::protobuf::Message*::GetDescriptor
    - Controller*::SetFailed
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - memcpy
    - size
    - Controller*::response
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - htonl
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::body::size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::thrift_method_name
    - auto::getBuffer
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - brpc::policy::WriteThriftMessageBegin
    - data
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: "void SerializeThriftRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:763,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackThriftRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:82,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:84,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:88,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:89,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:91,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:96,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:98,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:100,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:103,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:104,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - body
    - method_name
    - mtype
    - seq_id
    argTypes:
    - butil::IOBuf*
    - std::string*
    - ::apache::thrift::protocol::TMessageType*
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 105
    functionName: brpc::policy::ReadThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 4
    functionsReached:
    - ntohl
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - butil::IOBuf*::cutn
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status ReadThriftMessageBegin(butil::IOBuf* body,\n                       std::string*
      method_name,\n                       ::apache::thrift::protocol::TMessageType*
      mtype,\n                       uint32_t* seq_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 109
    functionName: brpc::policy::ThriftMessageBeginSize
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t ThriftMessageBeginSize(const std::string& method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:117,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:122,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - ' method_name'
    - mtype
    - seq_id
    argTypes:
    - char*
    - std::string
    - ::apache::thrift::protocol::TMessageType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::policy::WriteThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - data
    - size
    - htonl
    - memcpy
    linkageType: ''
    returnType: void
    signature: "void WriteThriftMessageBegin(char* buf,\n                        const
      std::string& method_name,\n                        ::apache::thrift::protocol::TMessageType
      mtype,\n                        uint32_t seq_id)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:129,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:130,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:131,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:133,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:146,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:148,1
    - Dst: ThriftMessageBase*::Read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:154,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:157,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:160,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:162,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:165,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:171,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' body'
    - raw_msg
    - expected_fid
    argTypes:
    - butil::IOBuf
    - ThriftMessageBase*
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 174
    functionName: brpc::policy::ReadThriftStruct
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 4
    functionsReached:
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - what
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - ThriftMessageBase*::Read
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - LOG
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    linkageType: ''
    returnType: bool
    signature: "bool ReadThriftStruct(const butil::IOBuf& body,\n                      ThriftMessageBase*
      raw_msg,\n                      int16_t expected_fid)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:178,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:179,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:180,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:182,1
    - Dst: ::apache::thrift::TApplicationException*::read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:187,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:188,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' body'
    - x
    argTypes:
    - butil::IOBuf
    - ::apache::thrift::TApplicationException*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 190
    functionName: brpc::policy::ReadThriftException
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - ::apache::thrift::TApplicationException*::read
    - copy_to
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - size
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    linkageType: ''
    returnType: void
    signature: "void ReadThriftException(const butil::IOBuf& body,\n                         ::apache::thrift::TApplicationException*
      x)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: brpc::policy::ThriftClosure::ThriftClosure
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: ThriftClosure::~ThriftClosure()
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::~ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 226
    functionName: brpc::policy::ThriftClosure::SuspendRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::SuspendRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:229,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 232
    functionName: brpc::policy::ThriftClosure::ResumeRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ResumeRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:235,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 234
    functionDepth: 2
    functionLinenumber: 234
    functionLinenumberEnd: 238
    functionName: brpc::policy::ThriftClosure::Run
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::Run()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:243,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:246,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:250,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:251,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:252,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:257,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:264,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:268,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:270,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:271,1
    - Dst: thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:275,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:276,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:277,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:279,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:280,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:282,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:283,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:284,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:286,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:288,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:291,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:293,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:295,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:296,1
    - Dst: ::apache::thrift::TApplicationException::write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:298,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:299,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:300,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:301,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:305,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:307,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:308,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:309,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:311,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:313,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:317,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:318,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:321,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:322,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:323,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:324,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:327,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:328,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:329,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:333,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:334,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:335,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:336,1
    - Dst: ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:338,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:343,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:345,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: body::movable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:356,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:358,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:359,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:360,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 368
    functionName: brpc::policy::ThriftClosure::DoRun
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 6
    functionsReached:
    - ControllerPrivateAccessor::span
    - Span*::set_start_send_us
    - IsCloseConnection
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ::apache::thrift::TApplicationException::write
    - ErrorCode
    - log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - ThriftMessageBeginSize
    - PLOG_IF
    - Span*::set_response_size
    - size
    - has_log_id
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - thrift_method_name
    - butil::IOBuf::size
    - Server*::options
    - htonl
    - ServerPrivateAccessor
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - Failed
    - Socket*::description
    - ErrorText
    - Socket*::Write
    - body::movable
    - body::size
    - Span*::set_sent_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Socket*::SetFailed
    - auto::getBuffer
    - empty
    - WriteThriftMessageBegin
    - raw_instance
    - SetFailed
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::DoRun()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:373,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:375,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:378,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:383,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:387,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:389,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:390,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:391,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:394,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:395,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:396,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:397,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 398
    functionName: brpc::policy::ParseThriftMessage
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseThriftMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThriftClosure*::SuspendRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:405,1
    - Dst: ThriftService*::ProcessThriftFramedRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:413,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:415,1
    - Dst: ThriftClosure*::ResumeRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 5
    argNames:
    - service
    - cntl
    - req
    - res
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 418
    functionName: brpc::policy::ProcessThriftFramedRequestNoExcept
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 4
    functionsReached:
    - ThriftService*::ProcessThriftFramedRequest
    - ThriftClosure*::ResumeRunning
    - ThriftClosure*::SuspendRunning
    - what
    - c_str
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void ProcessThriftFramedRequestNoExcept(ThriftService* service, Controller*
      cntl,\n                                               ThriftFramedMessage* req,
      ThriftFramedMessage* res,\n                                               ThriftClosure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 438
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:445,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 5
    argNames:
    - service
    - controller
    - request
    - response
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 452
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 2
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(ThriftService* service,\n                                       Controller*
      controller,\n                                       ThriftFramedMessage* request,\n
      \                                      ThriftFramedMessage* response,\n                                       ThriftClosure*
      done)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:455,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:458,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:459,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: ThriftClosure::ThriftClosure
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:463,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:468,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:471,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:474,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:476,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:477,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:478,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:480,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:485,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:487,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:490,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:492,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:494,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:496,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:499,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:503,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:506,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:507,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:508,1
    - Dst: MethodStatus*::MaxConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:509,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:514,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:519,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:521,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:530,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:531,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:534,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:538,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:539,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:541,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:542,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:546,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:550,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:555,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:558,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:561,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:564,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:565,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:566,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:568,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 63
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 454
    functionDepth: 3
    functionLinenumber: 454
    functionLinenumberEnd: 570
    functionName: brpc::policy::ProcessThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ThriftClosure::ThriftClosure
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - ScopedNonServiceError::release
    - bthread_assign_data
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::local_side
    - MethodStatus*::MaxConcurrency
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - ClosureGuard::release
    - SocketUniquePtr::get
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - LOG_EVERY_SECOND
    - Span*::set_request_size
    - InputMessageBase*::received_us
    - ControllerPrivateAccessor::set_server
    - butil::Status::ok
    - ServerPrivateAccessor::acceptor
    - ThriftFramedMessage*::body::size
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - DestroyingPtr::reset
    - InputMessageBase*::arg
    - Controller*::thrift_method_name
    - butil::Status::error_cstr
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - Span*::AsParent
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void ProcessThriftRequest(InputMessageBase* msg_base)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:573,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:579,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:581,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:582,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:587,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:592,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:595,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:609,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:615,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:619,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:628,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:633,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:637,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:646,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 647
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ReadThriftException
    - ControllerPrivateAccessor::span
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - ::apache::thrift::TApplicationException::what
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - ThriftFramedMessage*::raw_instance
    - Span*::set_response_size
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - butil::Status::ok
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Controller*::thrift_method_name
    - Span*::set_base_real_us
    - butil::Status::error_cstr
    - brpc::policy::ReadThriftStruct
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessThriftResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:652,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 649
    functionDepth: 1
    functionLinenumber: 649
    functionLinenumberEnd: 656
    functionName: brpc::policy::VerifyThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyThriftRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:661,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:664,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:668,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:671,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:675,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:678,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:684,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:686,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:689,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:693,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:695,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:699,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:703,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:707,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:711,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:714,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:715,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:716,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:720,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:723,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:724,1
    - Dst: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:726,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:731,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:734,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 44
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 658
    functionDepth: 2
    functionLinenumber: 658
    functionLinenumberEnd: 736
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::ThriftMessageBeginSize
    - google::protobuf::Message*::GetDescriptor
    - Controller*::SetFailed
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - memcpy
    - size
    - Controller*::response
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - htonl
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::body::size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::thrift_method_name
    - auto::getBuffer
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - brpc::policy::WriteThriftMessageBegin
    - data
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: "void SerializeThriftRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:763,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackThriftRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:82,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:84,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:88,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:89,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:91,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:96,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:98,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:100,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:103,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:104,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 4
    argNames:
    - body
    - method_name
    - mtype
    - seq_id
    argTypes:
    - butil::IOBuf*
    - std::string*
    - ::apache::thrift::protocol::TMessageType*
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 105
    functionName: brpc::policy::ReadThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 6
    functionsReached:
    - ntohl
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - butil::IOBuf*::cutn
    - butil::Status::OK
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status ReadThriftMessageBegin(butil::IOBuf* body,\n                       std::string*
      method_name,\n                       ::apache::thrift::protocol::TMessageType*
      mtype,\n                       uint32_t* seq_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 109
    functionName: brpc::policy::ThriftMessageBeginSize
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 3
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t ThriftMessageBeginSize(const std::string& method_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:117,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:121,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:122,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - ' method_name'
    - mtype
    - seq_id
    argTypes:
    - char*
    - std::string
    - ::apache::thrift::protocol::TMessageType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::policy::WriteThriftMessageBegin
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 3
    functionsReached:
    - data
    - size
    - htonl
    - memcpy
    linkageType: ''
    returnType: void
    signature: "void WriteThriftMessageBegin(char* buf,\n                        const
      std::string& method_name,\n                        ::apache::thrift::protocol::TMessageType
      mtype,\n                        uint32_t seq_id)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:129,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:130,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:131,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:133,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:146,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:148,1
    - Dst: ThriftMessageBase*::Read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:154,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:157,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:160,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:162,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:165,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:167,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:171,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - ' body'
    - raw_msg
    - expected_fid
    argTypes:
    - butil::IOBuf
    - ThriftMessageBase*
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 174
    functionName: brpc::policy::ReadThriftStruct
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 5
    functionsReached:
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - what
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - ThriftMessageBase*::Read
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - LOG
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    linkageType: ''
    returnType: bool
    signature: "bool ReadThriftStruct(const butil::IOBuf& body,\n                      ThriftMessageBase*
      raw_msg,\n                      int16_t expected_fid)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:178,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:179,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:180,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:182,1
    - Dst: ::apache::thrift::TApplicationException*::read
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:187,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:188,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' body'
    - x
    argTypes:
    - butil::IOBuf
    - ::apache::thrift::TApplicationException*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 190
    functionName: brpc::policy::ReadThriftException
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 3
    functionsReached:
    - ::apache::thrift::TApplicationException*::read
    - copy_to
    - malloc
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - size
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    linkageType: ''
    returnType: void
    signature: "void ReadThriftException(const butil::IOBuf& body,\n                         ::apache::thrift::TApplicationException*
      x)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: brpc::policy::ThriftClosure::ThriftClosure
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: ThriftClosure::~ThriftClosure()
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::~ThriftClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 226
    functionName: brpc::policy::ThriftClosure::SuspendRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::SuspendRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:229,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 232
    functionName: brpc::policy::ThriftClosure::ResumeRunning
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::ResumeRunning()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:235,1
    - Dst: brpc::policy::ThriftClosure::DoRun
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 234
    functionDepth: 2
    functionLinenumber: 234
    functionLinenumberEnd: 238
    functionName: brpc::policy::ThriftClosure::Run
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - brpc::policy::ThriftClosure::DoRun
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::Run()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:243,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:246,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:248,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:250,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:251,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:252,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:257,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:264,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:268,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:270,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:271,1
    - Dst: thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:275,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:276,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:277,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:279,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:280,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:282,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:283,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:284,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:286,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:288,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:291,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:293,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:295,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:296,1
    - Dst: ::apache::thrift::TApplicationException::write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:298,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:299,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:300,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:301,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:305,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:307,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:308,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:309,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:311,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:313,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:317,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:318,1
    - Dst: raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:321,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:322,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:323,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:324,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:327,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:328,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:329,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:333,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:334,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:335,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:336,1
    - Dst: ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:338,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:342,1
    - Dst: WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:343,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:345,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: body::movable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:346,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:350,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:356,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:358,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:359,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:360,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:366,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 65
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 368
    functionName: brpc::policy::ThriftClosure::DoRun
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 8
    functionsReached:
    - ControllerPrivateAccessor::span
    - Span*::set_start_send_us
    - IsCloseConnection
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ::apache::thrift::TApplicationException::write
    - ErrorCode
    - log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - ThriftMessageBeginSize
    - PLOG_IF
    - Span*::set_response_size
    - size
    - has_log_id
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - thrift_method_name
    - butil::IOBuf::size
    - Server*::options
    - htonl
    - ServerPrivateAccessor
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - Failed
    - Socket*::description
    - ErrorText
    - Socket*::Write
    - body::movable
    - body::size
    - Span*::set_sent_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Socket*::SetFailed
    - auto::getBuffer
    - empty
    - WriteThriftMessageBegin
    - raw_instance
    - SetFailed
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: void ThriftClosure::DoRun()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:373,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:375,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:378,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:383,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:387,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:389,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:390,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:391,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:394,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:395,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:396,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:397,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 398
    functionName: brpc::policy::ParseThriftMessage
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseThriftMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThriftClosure*::SuspendRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:405,1
    - Dst: ThriftService*::ProcessThriftFramedRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:413,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:415,1
    - Dst: ThriftClosure*::ResumeRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 5
    argNames:
    - service
    - cntl
    - req
    - res
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 418
    functionName: brpc::policy::ProcessThriftFramedRequestNoExcept
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 6
    functionsReached:
    - ThriftService*::ProcessThriftFramedRequest
    - ThriftClosure*::ResumeRunning
    - ThriftClosure*::SuspendRunning
    - what
    - c_str
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void ProcessThriftFramedRequestNoExcept(ThriftService* service, Controller*
      cntl,\n                                               ThriftFramedMessage* req,
      ThriftFramedMessage* res,\n                                               ThriftClosure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 438
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:445,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 5
    argNames:
    - service
    - controller
    - request
    - response
    - done
    argTypes:
    - ThriftService*
    - Controller*
    - ThriftFramedMessage*
    - ThriftFramedMessage*
    - ThriftClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 452
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 3
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(ThriftService* service,\n                                       Controller*
      controller,\n                                       ThriftFramedMessage* request,\n
      \                                      ThriftFramedMessage* response,\n                                       ThriftClosure*
      done)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:455,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:458,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:459,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:460,1
    - Dst: ThriftClosure::ThriftClosure
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:463,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:468,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:471,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:472,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:474,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:476,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:477,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:478,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:480,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:485,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:487,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:488,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:490,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:492,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:494,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:496,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:499,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:503,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:506,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:507,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:508,1
    - Dst: MethodStatus*::MaxConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:509,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:514,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:515,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:519,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:521,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:523,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:525,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:527,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:530,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:531,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:534,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:535,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:538,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:539,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:541,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:542,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:546,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:550,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:553,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:554,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:555,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:558,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:561,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:564,1
    - Dst: brpc::policy::ProcessThriftFramedRequestNoExcept
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:565,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:566,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:568,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 63
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 454
    functionDepth: 3
    functionLinenumber: 454
    functionLinenumberEnd: 570
    functionName: brpc::policy::ProcessThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ThriftClosure::ThriftClosure
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - ScopedNonServiceError::release
    - bthread_assign_data
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::local_side
    - MethodStatus*::MaxConcurrency
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - ClosureGuard::release
    - SocketUniquePtr::get
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - LOG_EVERY_SECOND
    - Span*::set_request_size
    - InputMessageBase*::received_us
    - ControllerPrivateAccessor::set_server
    - butil::Status::ok
    - ServerPrivateAccessor::acceptor
    - ThriftFramedMessage*::body::size
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - DestroyingPtr::reset
    - InputMessageBase*::arg
    - Controller*::thrift_method_name
    - butil::Status::error_cstr
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - Span*::AsParent
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    linkageType: ''
    returnType: void
    signature: void ProcessThriftRequest(InputMessageBase* msg_base)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:573,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:577,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:579,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:581,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:582,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:587,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:592,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:595,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:604,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:609,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:615,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:619,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:621,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:628,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:631,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:633,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:637,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:646,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 647
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ReadThriftException
    - ControllerPrivateAccessor::span
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::received_us
    - ::apache::thrift::TApplicationException::what
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - ThriftFramedMessage*::raw_instance
    - Span*::set_response_size
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - butil::Status::ok
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Controller*::thrift_method_name
    - Span*::set_base_real_us
    - butil::Status::error_cstr
    - brpc::policy::ReadThriftStruct
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessThriftResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:652,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 649
    functionDepth: 1
    functionLinenumber: 649
    functionLinenumberEnd: 656
    functionName: brpc::policy::VerifyThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyThriftRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:661,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:664,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:668,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:671,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:675,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:678,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:684,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:686,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:689,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:693,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:695,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:699,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:703,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:707,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:711,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:714,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:715,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:716,1
    - Dst: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:720,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:723,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:724,1
    - Dst: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:726,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:731,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:734,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 44
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 658
    functionDepth: 2
    functionLinenumber: 658
    functionLinenumberEnd: 736
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::ThriftMessageBeginSize
    - google::protobuf::Message*::GetDescriptor
    - Controller*::SetFailed
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - memcpy
    - size
    - Controller*::response
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - htonl
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::body::size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::thrift_method_name
    - auto::getBuffer
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - brpc::policy::WriteThriftMessageBegin
    - data
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    linkageType: ''
    returnType: void
    signature: "void SerializeThriftRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:757,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:763,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackThriftRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' bucket_name'
    - ' bucket_password'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::CouchbaseAuthenticator::CouchbaseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void CouchbaseAuthenticator(const std::string& bucket_name,\n                         const
      std::string& bucket_password)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::policy::CouchbaseAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                      brpc::AuthContext*) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' bucket_name'
    - ' bucket_password'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::CouchbaseAuthenticator::CouchbaseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void CouchbaseAuthenticator(const std::string& bucket_name,\n                         const
      std::string& bucket_password)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::policy::CouchbaseAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                      brpc::AuthContext*) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' bucket_name'
    - ' bucket_password'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::CouchbaseAuthenticator::CouchbaseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void CouchbaseAuthenticator(const std::string& bucket_name,\n                         const
      std::string& bucket_password)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::policy::CouchbaseAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                      brpc::AuthContext*) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' bucket_name'
    - ' bucket_password'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::CouchbaseAuthenticator::CouchbaseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void CouchbaseAuthenticator(const std::string& bucket_name,\n                         const
      std::string& bucket_password)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: brpc::policy::CouchbaseAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                      brpc::AuthContext*) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - num1
    - num2
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 53
    functionName: IsCoprime
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsCoprime(uint64_t num1, uint64_t num2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:61,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:62,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:62,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:63,1
    - Dst: IsCoprime
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:64,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:67,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:67,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - weight_sum
    - num
    argTypes:
    - uint64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 69
    functionName: GetStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::lower_bound
    - CHECK
    - begin
    - IsCoprime
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GetStride(const uint64_t weight_sum, const size_t num)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - num1
    - num2
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 53
    functionName: IsCoprime
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsCoprime(uint64_t num1, uint64_t num2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:61,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:62,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:62,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:63,1
    - Dst: IsCoprime
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:64,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:67,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:67,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - weight_sum
    - num
    argTypes:
    - uint64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 69
    functionName: GetStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::lower_bound
    - CHECK
    - begin
    - IsCoprime
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GetStride(const uint64_t weight_sum, const size_t num)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:77,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:78,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:87,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:94,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:102,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:103,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:106,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:118,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:127,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 131
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:143,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 148
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:164,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:182,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:184,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:186,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:187,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:188,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:198,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:199,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:201,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 156
    functionDepth: 3
    functionLinenumber: 156
    functionLinenumberEnd: 207
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - std::unordered_set::emplace
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int WeightedRoundRobinLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:217,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:228,1
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:232,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:242,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - ' server_list'
    - ' filter'
    - ' tls'
    argTypes:
    - std::vector<Server>
    - std::unordered_set<SocketId>
    - TLS
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 245
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - size
    - count
    linkageType: ''
    returnType: SocketId
    signature: "SocketId WeightedRoundRobinLoadBalancer::GetServerInNextStride(\n
      \       const std::vector<Server>& server_list,\n        const std::unordered_set<SocketId>&
      filter,\n        TLS& tls)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRoundRobinLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:264,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 273
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void WeightedRoundRobinLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:77,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:78,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:87,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:94,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:102,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:103,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:106,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:118,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:127,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 131
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:143,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 148
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:164,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:182,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:184,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:186,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:187,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:188,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:198,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:199,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:201,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 156
    functionDepth: 3
    functionLinenumber: 156
    functionLinenumberEnd: 207
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - std::unordered_set::emplace
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int WeightedRoundRobinLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:217,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:228,1
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:232,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:242,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - ' server_list'
    - ' filter'
    - ' tls'
    argTypes:
    - std::vector<Server>
    - std::unordered_set<SocketId>
    - TLS
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 245
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - size
    - count
    linkageType: ''
    returnType: SocketId
    signature: "SocketId WeightedRoundRobinLoadBalancer::GetServerInNextStride(\n
      \       const std::vector<Server>& server_list,\n        const std::unordered_set<SocketId>&
      filter,\n        TLS& tls)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRoundRobinLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:264,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 273
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void WeightedRoundRobinLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:77,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:78,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:87,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:94,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:102,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:103,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:106,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:118,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:127,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 131
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:143,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 148
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:164,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:182,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:184,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:186,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:187,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:188,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:198,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:199,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:201,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 156
    functionDepth: 3
    functionLinenumber: 156
    functionLinenumberEnd: 207
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - std::unordered_set::emplace
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int WeightedRoundRobinLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:217,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:228,1
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:232,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:242,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - ' server_list'
    - ' filter'
    - ' tls'
    argTypes:
    - std::vector<Server>
    - std::unordered_set<SocketId>
    - TLS
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 245
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - size
    - count
    linkageType: ''
    returnType: SocketId
    signature: "SocketId WeightedRoundRobinLoadBalancer::GetServerInNextStride(\n
      \       const std::vector<Server>& server_list,\n        const std::unordered_set<SocketId>&
      filter,\n        TLS& tls)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRoundRobinLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:264,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 273
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void WeightedRoundRobinLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:77,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:78,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:87,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:92,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:94,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:102,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:103,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:106,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:118,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:127,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 131
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:143,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 148
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRoundRobinLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:164,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:165,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:167,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:169,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:182,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:184,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:186,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:187,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:188,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:198,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:199,1
    - Dst: GetStride
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:201,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 156
    functionDepth: 3
    functionLinenumber: 156
    functionLinenumberEnd: 207
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - std::unordered_set::emplace
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int WeightedRoundRobinLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:217,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:228,1
    - Dst: count
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:232,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:242,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - ' server_list'
    - ' filter'
    - ' tls'
    argTypes:
    - std::vector<Server>
    - std::unordered_set<SocketId>
    - TLS
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 245
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - size
    - count
    linkageType: ''
    returnType: SocketId
    signature: "SocketId WeightedRoundRobinLoadBalancer::GetServerInNextStride(\n
      \       const std::vector<Server>& server_list,\n        const std::unordered_set<SocketId>&
      filter,\n        TLS& tls)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRoundRobinLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:264,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 273
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void WeightedRoundRobinLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:87,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:92,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:94,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 105
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeaderImpl(const HttpHeader& headers,\n                                         butil::EndPoint*
      user_addr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:109,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::policy::GetUserAddressFromHeaderImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeader(const HttpHeader& headers,\n                                     butil::EndPoint*
      user_addr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 158
    functionName: brpc::policy::CommonStrings::CommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CommonStrings::CommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CommonStrings::CommonStrings
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: brpc::policy::CreateCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CommonStrings::CommonStrings
    linkageType: ''
    returnType: void
    signature: void CreateCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: brpc::policy::InitCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int InitCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: brpc::policy::get_common_strings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CommonStrings
    signature: CommonStrings * get_common_strings()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:179,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:184,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:185,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:192,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:202,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:204,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:205,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:207,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:210,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:213,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:216,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::starts_with
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::front
    - butil::StringPiece::empty
    - butil::StringPiece::size
    linkageType: ''
    returnType: HttpContentType
    signature: HttpContentType ParseContentType(butil::StringPiece ct, bool* is_grpc_ct)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:237,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:239,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:240,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' inbuf'
    - request_or_response
    - has_content
    argTypes:
    - butil::IOBuf
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 248
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::size
    - snprintf
    - butil::IOBuf::pop_back
    - butil::ToPrintableString
    - butil::my_ip_cstr
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void PrintMessage(const butil::IOBuf& inbuf,\n                         bool
      request_or_response,\n                         bool has_content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:254,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:255,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 258
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::size
    - butil::HostToNet32
    - butil::IOBuf::Movable
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void AddGrpcPrefix(butil::IOBuf* body, bool compressed)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:265,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:270,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 274
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::size
    - butil::IOBuf*::cutn
    - butil::IOBuf*::empty
    - butil::NetToHost32
    linkageType: ''
    returnType: bool
    signature: bool RemoveGrpcPrefix(butil::IOBuf* body, bool* compressed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:281,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:282,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:284,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 276
    functionDepth: 10
    functionLinenumber: 276
    functionLinenumberEnd: 291
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_pb_bytes_to_base64
    - std::string::c_str
    - Controller*::has_pb_single_repeated_to_array
    - google::protobuf::Message*::GetDescriptor
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const butil::IOBuf& body,\n                               google::protobuf::Message*
      message,\n                               Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:296,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:297,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:298,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:299,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:300,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:305,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:307,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:308,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 293
    functionDepth: 3
    functionLinenumber: 293
    functionLinenumberEnd: 312
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Controller*::has_pb_bytes_to_base64
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - Controller*::has_pb_jsonify_empty_array
    - Controller*::has_pb_single_repeated_to_array
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                              butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                              Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:321,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:323,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:324,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 328
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::GetDescriptor
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - std::string::c_str
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(const butil::IOBuf& body,\n                                    google::protobuf::Message*
      message,\n                                    Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:337,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:339,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 330
    functionDepth: 2
    functionLinenumber: 330
    functionLinenumberEnd: 343
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - GetDescriptor
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,\n
      \                                   butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                                   Controller* cntl, int error_code)"
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:346,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:348,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:350,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:353,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:355,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:358,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:383,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:396,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:401,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:403,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:408,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:422,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:432,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:442,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:447,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:461,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:463,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:465,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:473,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:480,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:487,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:493,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:497,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:498,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:507,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:509,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:515,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:519,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:520,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:529,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:530,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:535,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:536,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:550,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:552,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:559,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:560,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 345
    functionDepth: 11
    functionLinenumber: 345
    functionLinenumberEnd: 561
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - Controller*::http_response
    - strtol
    - DestroyingPtr::header
    - HttpHeader*::status_code
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - GrpcStatusToString
    - DestroyingPtr::get
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - HttpHeader*::major_version
    - HttpHeader*::reason_phrase
    - swap
    - brpc::policy::ProtoJsonToProtoMessage
    - strcasecmp
    - std::string::append
    - TRACEPRINTF
    - DestroyingPtr::read_body_progressively
    - Span*::set_response_size
    - DestroyingPtr::body
    - size
    - LOG
    - InputMessageBase*::base_real_us
    - LOG_IF
    - Controller*::response
    - butil::string_printf
    - append_to
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::content_type
    - copy_to
    - DestroyingPtr::parsed_length
    - Controller*::ErrorCode
    - bthread_id_lock
    - GrpcStatusToErrorCode
    - Span*::set_received_us
    - H2StreamContext*::correlation_id
    - CHECK
    - std::string*::data
    - ParsePbFromIOBuf
    - berror
    - ParsePbTextFromIOBuf
    - brpc::policy::RemoveGrpcPrefix
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - HttpHeader*::minor_version
    - ControllerPrivateAccessor::OnResponse
    - static_cast<H2StreamContext*>
    - std::min
    - Socket*::read_will_be_progressive
    - Span*::set_base_real_us
    - Socket*::SetFailed
    - PercentDecode
    - HttpHeader*::Swap
    - brpc::policy::GzipDecompress
    - Socket*::correlation_id
    - Controller*::response_attachment
    - empty
    - static_cast<int>
    - Span*::set_start_parse_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessHttpResponse(InputMessageBase* msg)
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:566,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:567,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:571,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:572,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:583,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:584,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:588,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:593,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:598,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:609,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:613,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:614,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:620,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:625,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:629,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:634,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:636,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:643,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:644,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:645,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:648,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:649,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:650,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:655,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:672,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:673,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:682,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:683,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:684,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:695,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:696,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:697,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:707,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:709,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:713,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:723,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:725,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 563
    functionDepth: 4
    functionLinenumber: 563
    functionLinenumberEnd: 729
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - append
    - Controller*::request_compress_type
    - brpc::policy::GzipCompress
    - google::protobuf::Message*::GetTypeName
    - ControllerPrivateAccessor::span
    - uri
    - set_content_type
    - Span*::span_id
    - butil::IOBuf::IOBuf
    - Span*::trace_id
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::method
    - brpc::policy::ParseContentType
    - TRACEPRINTF
    - set_method
    - brpc::policy::AddGrpcPrefix
    - find
    - brpc::URI::Print
    - std::string::append
    - size
    - google::protobuf::MethodDescriptor*::service
    - ControllerPrivateAccessor::protocol_param
    - Controller*::log_id
    - std::string::push_back
    - google::protobuf::Message*::IsInitialized
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - Controller*::request_attachment
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::http_request
    - Controller*::request_id
    - SetHeader
    - brpc::policy::get_h2_global_stream_creator
    - mutable_content_type
    - brpc::policy::ProtoMessageToProtoJson
    - Controller*::timeout_ms
    - before_http_1_1
    - GetHeader
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - Controller*::request_protocol
    - std::string::reserve
    - content_type
    - CompressTypeToCStr
    - Span*::parent_span_id
    - Controller*::connection_type
    - reserve
    linkageType: ''
    returnType: void
    signature: "void SerializeHttpRequest(butil::IOBuf* /*not used*/,\n                          Controller*
      cntl,\n                          const google::protobuf::Message* pbreq)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:738,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:739,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:742,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:743,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:746,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:760,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - cntl
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 731
    functionDepth: 2
    functionLinenumber: 731
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_attachment
    - brpc::policy::PrintMessage
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - HttpHeader*::method
    - MakeRawHttpRequest
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PackHttpRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    Controller* cntl,\n                     const butil::IOBuf&
      /*unused*/,\n                     const Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:768,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 766
    functionDepth: 0
    functionLinenumber: 766
    functionLinenumberEnd: 770
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - Controller*::http_request
    linkageType: ''
    returnType: bool
    signature: bool SupportGzip(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 776
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 782
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(Controller* cntl/*own*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 784
    functionDepth: 1
    functionLinenumber: 784
    functionLinenumberEnd: 794
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(HttpResponseSender&& s) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 797
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 797
    functionName: brpc::policy::HttpResponseSender::set_messages
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_messages(RpcPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - MethodStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 798
    functionDepth: 0
    functionLinenumber: 798
    functionLinenumberEnd: 798
    functionName: brpc::policy::HttpResponseSender::set_method_status
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method_status(MethodStatus* ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    functionName: brpc::policy::HttpResponseSender::set_received_us
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_received_us(int64_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    functionName: brpc::policy::HttpResponseSender::set_h2_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_h2_stream_id(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 812
    functionName: brpc::policy::HttpResponseSenderAsDone::HttpResponseSenderAsDone
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSenderAsDone(HttpResponseSender* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _cntl::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:816,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 819
      start: 813
    functionDepth: 1
    functionLinenumber: 813
    functionLinenumberEnd: 819
    functionName: brpc::policy::HttpResponseSenderAsDone::Run
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - _messages::Request
    - _cntl::CallAfterRpcResp
    - _messages::Response
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: if
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:828,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:832,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:837,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:842,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:843,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:846,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:850,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:851,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:856,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:859,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:865,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:866,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:873,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:880,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:892,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:910,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:913,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:922,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:929,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:934,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:935,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:940,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:947,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:952,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:959,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:961,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:968,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:970,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:982,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:988,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1017,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1022,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1027,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1038,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1044,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1050,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1053,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 825
    functionDepth: 5
    functionLinenumber: 825
    functionLinenumberEnd: 1055
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetTypeName
    - Controller*::http_response
    - bthread_id_create
    - HttpHeader*::set_method
    - Span*::set_start_send_us
    - ProtoMessageToProtoJson
    - HttpHeader*::method
    - google::protobuf::Message*::GetDescriptor
    - CHECK_EQ
    - if
    - HttpHeader*::status_code
    - Controller*::has_progressive_writer
    - Controller*::SetFailed
    - HttpHeader*::before_http_1_1
    - butil::IOBuf::IOBuf
    - HttpHeader*::major_version
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::set_content_type
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - butil::cpuwide_time_us
    - TRACEPRINTF
    - MakeRawHttpResponse
    - brpc::URI::Print
    - ProtoMessageToJson
    - AddGrpcPrefix
    - bthread_id_join
    - ErrorCodeToStatusCode
    - strcasecmp
    - HttpHeader*::set_status_code
    - PLOG_IF
    - get
    - Span*::set_response_size
    - PrintMessage
    - Return
    - HttpHeader*::is_http2
    - LOG
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - server
    - HttpHeader*::content_type
    - LOG_IF
    - Controller*::ErrorCode
    - Controller*::http_request
    - butil::IOBuf::size
    - Controller*::does_manage_http_body_on_error
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - SocketMessagePtr::EstimatedByteSize
    - HttpHeader*::RemoveHeader
    - Socket*::description
    - Socket*::Write
    - ParseContentType
    - HttpHeader*::minor_version
    - Span*::set_sent_us
    - Controller*::Failed
    - HttpHeader*::SetHeader
    - Socket*::SetFailed
    - HttpHeader*::set_version
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - GzipCompress
    - std::string*::empty
    - Response
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender::~HttpResponseSender()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1066,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1072,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1073,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1078,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - unresolved_path
    - ' uri_path'
    - ' splitter'
    argTypes:
    - std::string*
    - std::string
    - butil::StringSplitter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1059
    functionDepth: 1
    functionLinenumber: 1059
    functionLinenumberEnd: 1082
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - std::string*::clear
    - butil::StringSplitter::length
    - field
    - butil::StringSplitter::field
    - std::string*::push_back
    - c_str
    - size
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: "void FillUnresolvedPath(std::string* unresolved_path,\n                               const
      std::string& uri_path,\n                               butil::StringSplitter&
      splitter)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1088,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1091,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1092,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1099,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1114,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1128,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1131,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1137,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1139,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1144,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1145,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1146,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1084
    functionDepth: 2
    functionLinenumber: 1084
    functionLinenumberEnd: 1151
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringPiece::set
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - c_str
    - brpc::policy::FillUnresolvedPath
    - size
    - butil::StringPiece::empty
    - butil::StringPiece::find
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURIImpl(const std::string&
      uri_path, const Server* server,\n                            std::string* unresolved_path)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::FindMethodPropertyByURIImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1158,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1171,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1172,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1176
      start: 1154
    functionDepth: 3
    functionLinenumber: 1154
    functionLinenumberEnd: 1176
    functionName: brpc::policy::FindMethodPropertyByURI
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ServerPrivateAccessor::global_restful_map
    - brpc::policy::FindMethodPropertyByURIImpl
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURI(const std::string&
      uri_path, const Server* server,\n                        std::string* unresolved_path)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1183,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1191,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1194,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1205,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1210,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1216,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1227,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1241,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1242,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1245,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1247,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1274,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1275,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1278,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1279,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1281,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1285,1
    - Dst: is_failed_after_queries
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1310,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1311,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1314,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1316,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1317,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1320,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1321,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1323,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1330,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 84
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1332
      start: 1178
    functionDepth: 1
    functionLinenumber: 1178
    functionLinenumberEnd: 1332
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - HttpContext*::ParseFromArray
    - static_cast<HttpContext*>
    - HttpHeader::set_status_code
    - HttpContext*::Completed
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - HttpContext*::parser
    - Socket*::is_read_progressive
    - MakeRawHttpResponse
    - HttpContext*::RemoveOneRefForStage2
    - HttpContext*::AddOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::ParseFromIOBuf
    - MakeMessage
    - Socket*::reset_parsing_context
    - Socket*::ReleaseAdditionalReference
    - LOG
    - HttpContext*::header
    - is_failed_after_queries
    - http_errno_description
    - Socket*::Write
    - butil::IOBuf*::empty
    - HTTP_PARSER_ERRNO
    - is_failed_after_http_version
    - Socket*::http_request_method
    - HttpContext*::stage
    - HttpContext::HttpContext
    - Socket*::release_parsing_context
    - HttpContext*::CheckProgressiveRead
    - Socket*::CreatedByConnect
    - HttpContext*::is_stage2
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHttpMessage(butil::IOBuf *source, Socket *socket,\n
      \                            bool read_eof, const void* arg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1336,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1341,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1342,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1355,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1358,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1361,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1367,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1368,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 3
    argNames:
    - ' user_error_text'
    - socket
    - msg
    argTypes:
    - std::string
    - Socket*
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1370
      start: 1334
    functionDepth: 4
    functionLinenumber: 1334
    functionLinenumberEnd: 1370
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - HttpHeader::set_status_code
    - brpc::Controller::http_response
    - HttpContext*::header
    - MakeRawHttpResponse
    - static_cast<const H2StreamContext*>
    - brpc::policy::H2UnsentResponse::New
    - H2StreamContext*::stream_id
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - empty
    - c_str
    - PLOG_IF
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1373,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1374,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1377,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1393,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1398,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1402,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1403,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1409
      start: 1372
    functionDepth: 5
    functionLinenumber: 1372
    functionLinenumberEnd: 1409
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - Socket*::mutable_auth_context
    - brpc::policy::FindMethodPropertyByURI
    - HttpContext*::header
    - Authenticator*::GetUnauthorizedErrorText
    - Authenticator*::VerifyCredential
    - InputMessageBase*::arg
    - brpc::policy::GetUserAddressFromHeader
    - brpc::policy::SendUnauthorizedResponse
    - butil::EndPoint::EndPoint
    - Server*::options
    - InputMessageBase*::socket
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: bool VerifyHttpRequest(const InputMessageBase* msg)
  - BBCount: 52
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1422,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1431,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1437,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1439,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1444,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1445,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1446,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1447,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1448,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1452,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1458,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1459,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1461,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1466,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1475,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1492,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1493,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1499,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1505,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1509,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1510,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1513,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1515,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1525,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1527,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1531,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1543,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1547,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1551,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1562,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1566,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1571,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1573,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1584,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1592,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1596,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1601,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1607,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1615,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1616,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1620,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1621,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1625,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1630,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1632,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1635,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1646,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1650,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1652,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1662,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1665,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1668,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1670,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1672,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1675,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1678,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1679,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1680,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1684,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1685,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1686,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1694,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1695,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1702,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1704,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1705,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1709,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1710,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1727,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1421
    functionDepth: 11
    functionLinenumber: 1421
    functionLinenumberEnd: 1738
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::stream_id
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - swap
    - DestroyingPtr::get
    - std::string
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - Socket*::auth_context
    - Controller*::log_id
    - Server*::thread_local_options
    - Controller*::request_attachment
    - Controller*::http_request
    - IsTraceable
    - Span*::set_received_us
    - google::protobuf::Service*::GetDescriptor
    - HttpResponseSender::set_h2_stream_id
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - static_cast<H2StreamContext*>
    - c_str
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - Span*::set_start_parse_us
    - HttpResponseSender::set_method_status
    - DestroyingPtr::header
    - butil::endpoint2str
    - AskToBeSampled
    - ScopedNonServiceError::release
    - strtoull
    - static_cast<const Server*>
    - RpcPBMessages*::Request
    - PLOG
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - google::protobuf::Message*::IsInitialized
    - Socket*::is_overcrowded
    - brpc::policy::Get
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - brpc::policy::RemoveGrpcPrefix
    - Span*::set_request_size
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - ControllerPrivateAccessor::set_deadline_us
    - Controller*::set_log_id
    - Socket*::user
    - Controller*::set_pb_bytes_to_base64
    - SampledRequest*::meta::set_compress_type
    - SampledRequest*::meta::set_protocol_type
    - Controller::Controller
    - RpcPBMessages*::Response
    - HttpResponseSender::set_messages
    - butil::StringSplitter::length
    - uri
    - google::protobuf::Message*::GetDescriptor
    - TRACEPRINTF
    - std::string*::c_str
    - butil::cpuwide_time_us
    - std::string::c_str
    - WebEscape
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - InputMessageBase*::base_real_us
    - Span*::set_protocol
    - butil::gettimeofday_us
    - brpc::policy::FindMethodPropertyByURI
    - DestroyingPtr::parsed_length
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - ParsePbTextFromIOBuf
    - Socket*::remote_side
    - Socket*::id
    - GetHeader
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - butil::StringSplitter::field
    - google::protobuf::MethodDescriptor*::input_type
    - Server::MethodProperty*::service::GetDescriptor
    - HttpResponseSender::set_received_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - brpc::policy::GetUserAddressFromHeader
    - butil::EndPoint::EndPoint
    - Server*::IsRunning
    - MakeRawHttpRequest
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::ParseContentType
    - brpc::policy::ProtoJsonToProtoMessage
    - MethodStatus*::OnRequested
    - __builtin_expect
    - Controller*::set_request_id
    - DestroyingPtr::read_body_progressively
    - size
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - brpc::policy::JsonToProtoMessage
    - Controller*::set_pb_single_repeated_to_array
    - SocketUniquePtr::get
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - content_type
    - Span*::ResetServerSpanName
    - brpc::policy::GzipDecompress
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1744,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1745,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1757,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - hostname2endpoint
    - std::string::c_str
    - std::string::empty
    - str2endpoint
    - ParseURL
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ParseHttpServerAddress(butil::EndPoint* point, const char* server_addr_and_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1771,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1773
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1773
    functionName: brpc::policy::GetHttpMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - empty
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetHttpMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller* cntl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_progressive_read_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1780,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1781,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1784,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1775
    functionDepth: 0
    functionLinenumber: 1775
    functionLinenumberEnd: 1787
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - const_cast<std::string *>
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - header
    - FindMethodPropertyByURI
    - has_progressive_read_method
    linkageType: ''
    returnType: void
    signature: void HttpContext::CheckProgressiveRead(const void* arg, Socket *socket)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:87,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:92,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:94,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 105
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeaderImpl(const HttpHeader& headers,\n                                         butil::EndPoint*
      user_addr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:109,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - empty
    - brpc::policy::GetUserAddressFromHeaderImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeader(const HttpHeader& headers,\n                                     butil::EndPoint*
      user_addr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 158
    functionName: brpc::policy::CommonStrings::CommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CommonStrings::CommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CommonStrings::CommonStrings
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: brpc::policy::CreateCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CommonStrings::CommonStrings
    linkageType: ''
    returnType: void
    signature: void CreateCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: brpc::policy::InitCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int InitCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: brpc::policy::get_common_strings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CommonStrings
    signature: CommonStrings * get_common_strings()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:179,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:184,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:185,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:192,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:202,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:204,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:205,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:207,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:210,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:213,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:216,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::StringPiece::starts_with
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::front
    - butil::StringPiece::empty
    - butil::StringPiece::size
    linkageType: ''
    returnType: HttpContentType
    signature: HttpContentType ParseContentType(butil::StringPiece ct, bool* is_grpc_ct)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:237,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:239,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:240,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' inbuf'
    - request_or_response
    - has_content
    argTypes:
    - butil::IOBuf
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 248
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::size
    - snprintf
    - butil::IOBuf::pop_back
    - butil::ToPrintableString
    - butil::my_ip_cstr
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void PrintMessage(const butil::IOBuf& inbuf,\n                         bool
      request_or_response,\n                         bool has_content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:254,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:255,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 258
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::size
    - butil::HostToNet32
    - butil::IOBuf::Movable
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void AddGrpcPrefix(butil::IOBuf* body, bool compressed)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:265,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:270,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 274
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::size
    - butil::IOBuf*::cutn
    - butil::IOBuf*::empty
    - butil::NetToHost32
    linkageType: ''
    returnType: bool
    signature: bool RemoveGrpcPrefix(butil::IOBuf* body, bool* compressed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:281,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:282,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:284,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 276
    functionDepth: 10
    functionLinenumber: 276
    functionLinenumberEnd: 291
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Controller*::has_pb_bytes_to_base64
    - std::string::c_str
    - Controller*::has_pb_single_repeated_to_array
    - google::protobuf::Message*::GetDescriptor
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const butil::IOBuf& body,\n                               google::protobuf::Message*
      message,\n                               Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:296,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:297,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:298,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:299,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:300,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:305,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:307,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:308,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 293
    functionDepth: 3
    functionLinenumber: 293
    functionLinenumberEnd: 312
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Controller*::has_pb_bytes_to_base64
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - Controller*::has_pb_jsonify_empty_array
    - Controller*::has_pb_single_repeated_to_array
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                              butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                              Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:321,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:323,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:324,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 328
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::Message*::GetDescriptor
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - std::string::c_str
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(const butil::IOBuf& body,\n                                    google::protobuf::Message*
      message,\n                                    Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:337,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:339,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 330
    functionDepth: 2
    functionLinenumber: 330
    functionLinenumberEnd: 343
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - GetDescriptor
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,\n
      \                                   butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                                   Controller* cntl, int error_code)"
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:346,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:348,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:350,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:353,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:355,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:358,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:383,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:396,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:401,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:403,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:408,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:422,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:432,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:442,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:447,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:461,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:463,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:465,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:473,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:480,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:487,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:493,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:497,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:498,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:507,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:509,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:515,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:519,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:520,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:529,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:530,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:535,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:536,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:550,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:552,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:559,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:560,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 345
    functionDepth: 11
    functionLinenumber: 345
    functionLinenumberEnd: 561
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - Controller*::http_response
    - strtol
    - DestroyingPtr::header
    - HttpHeader*::status_code
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - GrpcStatusToString
    - DestroyingPtr::get
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - HttpHeader*::major_version
    - HttpHeader*::reason_phrase
    - swap
    - brpc::policy::ProtoJsonToProtoMessage
    - strcasecmp
    - std::string::append
    - TRACEPRINTF
    - DestroyingPtr::read_body_progressively
    - Span*::set_response_size
    - DestroyingPtr::body
    - size
    - LOG
    - InputMessageBase*::base_real_us
    - LOG_IF
    - Controller*::response
    - butil::string_printf
    - append_to
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::content_type
    - copy_to
    - DestroyingPtr::parsed_length
    - Controller*::ErrorCode
    - bthread_id_lock
    - GrpcStatusToErrorCode
    - Span*::set_received_us
    - H2StreamContext*::correlation_id
    - CHECK
    - std::string*::data
    - ParsePbFromIOBuf
    - berror
    - ParsePbTextFromIOBuf
    - brpc::policy::RemoveGrpcPrefix
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - HttpHeader*::minor_version
    - ControllerPrivateAccessor::OnResponse
    - static_cast<H2StreamContext*>
    - std::min
    - Socket*::read_will_be_progressive
    - Span*::set_base_real_us
    - Socket*::SetFailed
    - PercentDecode
    - HttpHeader*::Swap
    - brpc::policy::GzipDecompress
    - Socket*::correlation_id
    - Controller*::response_attachment
    - empty
    - static_cast<int>
    - Span*::set_start_parse_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessHttpResponse(InputMessageBase* msg)
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:566,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:567,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:571,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:572,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:583,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:584,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:588,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:593,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:598,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:609,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:613,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:614,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:620,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:625,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:629,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:634,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:636,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:643,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:644,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:645,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:648,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:649,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:650,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:655,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:672,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:673,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:682,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:683,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:684,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:695,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:696,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:697,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:707,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:709,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:713,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:723,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:725,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 563
    functionDepth: 4
    functionLinenumber: 563
    functionLinenumberEnd: 729
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - append
    - Controller*::request_compress_type
    - brpc::policy::GzipCompress
    - google::protobuf::Message*::GetTypeName
    - ControllerPrivateAccessor::span
    - uri
    - set_content_type
    - Span*::span_id
    - butil::IOBuf::IOBuf
    - Span*::trace_id
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::method
    - brpc::policy::ParseContentType
    - TRACEPRINTF
    - set_method
    - brpc::policy::AddGrpcPrefix
    - find
    - brpc::URI::Print
    - std::string::append
    - size
    - google::protobuf::MethodDescriptor*::service
    - ControllerPrivateAccessor::protocol_param
    - Controller*::log_id
    - std::string::push_back
    - google::protobuf::Message*::IsInitialized
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - Controller*::request_attachment
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::http_request
    - Controller*::request_id
    - SetHeader
    - brpc::policy::get_h2_global_stream_creator
    - mutable_content_type
    - brpc::policy::ProtoMessageToProtoJson
    - Controller*::timeout_ms
    - before_http_1_1
    - GetHeader
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - Controller*::request_protocol
    - std::string::reserve
    - content_type
    - CompressTypeToCStr
    - Span*::parent_span_id
    - Controller*::connection_type
    - reserve
    linkageType: ''
    returnType: void
    signature: "void SerializeHttpRequest(butil::IOBuf* /*not used*/,\n                          Controller*
      cntl,\n                          const google::protobuf::Message* pbreq)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:738,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:739,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:742,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:743,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:746,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:760,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - cntl
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 731
    functionDepth: 2
    functionLinenumber: 731
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_attachment
    - brpc::policy::PrintMessage
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - HttpHeader*::method
    - MakeRawHttpRequest
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PackHttpRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    Controller* cntl,\n                     const butil::IOBuf&
      /*unused*/,\n                     const Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:768,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 766
    functionDepth: 0
    functionLinenumber: 766
    functionLinenumberEnd: 770
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - Controller*::http_request
    linkageType: ''
    returnType: bool
    signature: bool SupportGzip(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 776
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 782
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(Controller* cntl/*own*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 784
    functionDepth: 1
    functionLinenumber: 784
    functionLinenumberEnd: 794
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(HttpResponseSender&& s) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 797
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 797
    functionName: brpc::policy::HttpResponseSender::set_messages
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_messages(RpcPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - MethodStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 798
    functionDepth: 0
    functionLinenumber: 798
    functionLinenumberEnd: 798
    functionName: brpc::policy::HttpResponseSender::set_method_status
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method_status(MethodStatus* ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    functionName: brpc::policy::HttpResponseSender::set_received_us
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_received_us(int64_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    functionName: brpc::policy::HttpResponseSender::set_h2_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_h2_stream_id(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 812
    functionName: brpc::policy::HttpResponseSenderAsDone::HttpResponseSenderAsDone
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSenderAsDone(HttpResponseSender* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _cntl::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:816,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 819
      start: 813
    functionDepth: 1
    functionLinenumber: 813
    functionLinenumberEnd: 819
    functionName: brpc::policy::HttpResponseSenderAsDone::Run
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - _messages::Request
    - _cntl::CallAfterRpcResp
    - _messages::Response
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: if
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:828,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:832,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:837,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:842,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:843,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:846,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:850,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:851,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:856,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:859,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:865,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:866,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:873,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:880,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:892,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:910,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:913,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:922,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:929,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:934,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:935,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:940,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:947,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:952,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:959,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:961,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:968,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:970,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:982,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:988,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1017,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1022,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1027,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1038,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1044,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1050,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1053,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 825
    functionDepth: 5
    functionLinenumber: 825
    functionLinenumberEnd: 1055
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetTypeName
    - Controller*::http_response
    - bthread_id_create
    - HttpHeader*::set_method
    - Span*::set_start_send_us
    - ProtoMessageToProtoJson
    - HttpHeader*::method
    - google::protobuf::Message*::GetDescriptor
    - CHECK_EQ
    - if
    - HttpHeader*::status_code
    - Controller*::has_progressive_writer
    - Controller*::SetFailed
    - HttpHeader*::before_http_1_1
    - butil::IOBuf::IOBuf
    - HttpHeader*::major_version
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::set_content_type
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - butil::cpuwide_time_us
    - TRACEPRINTF
    - MakeRawHttpResponse
    - brpc::URI::Print
    - ProtoMessageToJson
    - AddGrpcPrefix
    - bthread_id_join
    - ErrorCodeToStatusCode
    - strcasecmp
    - HttpHeader*::set_status_code
    - PLOG_IF
    - get
    - Span*::set_response_size
    - PrintMessage
    - Return
    - HttpHeader*::is_http2
    - LOG
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - server
    - HttpHeader*::content_type
    - LOG_IF
    - Controller*::ErrorCode
    - Controller*::http_request
    - butil::IOBuf::size
    - Controller*::does_manage_http_body_on_error
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - SocketMessagePtr::EstimatedByteSize
    - HttpHeader*::RemoveHeader
    - Socket*::description
    - Socket*::Write
    - ParseContentType
    - HttpHeader*::minor_version
    - Span*::set_sent_us
    - Controller*::Failed
    - HttpHeader*::SetHeader
    - Socket*::SetFailed
    - HttpHeader*::set_version
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - GzipCompress
    - std::string*::empty
    - Response
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender::~HttpResponseSender()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1066,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1072,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1073,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1078,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - unresolved_path
    - ' uri_path'
    - ' splitter'
    argTypes:
    - std::string*
    - std::string
    - butil::StringSplitter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1059
    functionDepth: 1
    functionLinenumber: 1059
    functionLinenumberEnd: 1082
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - std::string*::clear
    - butil::StringSplitter::length
    - field
    - butil::StringSplitter::field
    - std::string*::push_back
    - c_str
    - size
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: "void FillUnresolvedPath(std::string* unresolved_path,\n                               const
      std::string& uri_path,\n                               butil::StringSplitter&
      splitter)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1088,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1091,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1092,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1099,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1114,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1128,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1131,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1137,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1139,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1144,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1145,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1146,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1084
    functionDepth: 2
    functionLinenumber: 1084
    functionLinenumberEnd: 1151
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringPiece::set
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - c_str
    - brpc::policy::FillUnresolvedPath
    - size
    - butil::StringPiece::empty
    - butil::StringPiece::find
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURIImpl(const std::string&
      uri_path, const Server* server,\n                            std::string* unresolved_path)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::FindMethodPropertyByURIImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1158,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1171,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1172,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1176
      start: 1154
    functionDepth: 3
    functionLinenumber: 1154
    functionLinenumberEnd: 1176
    functionName: brpc::policy::FindMethodPropertyByURI
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ServerPrivateAccessor::global_restful_map
    - brpc::policy::FindMethodPropertyByURIImpl
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURI(const std::string&
      uri_path, const Server* server,\n                        std::string* unresolved_path)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1183,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1191,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1194,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1205,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1210,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1216,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1227,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1241,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1242,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1245,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1247,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1274,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1275,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1278,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1279,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1281,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1285,1
    - Dst: is_failed_after_queries
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1310,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1311,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1314,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1316,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1317,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1320,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1321,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1323,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1330,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 84
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1332
      start: 1178
    functionDepth: 1
    functionLinenumber: 1178
    functionLinenumberEnd: 1332
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - HttpContext*::ParseFromArray
    - static_cast<HttpContext*>
    - HttpHeader::set_status_code
    - HttpContext*::Completed
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - HttpContext*::parser
    - Socket*::is_read_progressive
    - MakeRawHttpResponse
    - HttpContext*::RemoveOneRefForStage2
    - HttpContext*::AddOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::ParseFromIOBuf
    - MakeMessage
    - Socket*::reset_parsing_context
    - Socket*::ReleaseAdditionalReference
    - LOG
    - HttpContext*::header
    - is_failed_after_queries
    - http_errno_description
    - Socket*::Write
    - butil::IOBuf*::empty
    - HTTP_PARSER_ERRNO
    - is_failed_after_http_version
    - Socket*::http_request_method
    - HttpContext*::stage
    - HttpContext::HttpContext
    - Socket*::release_parsing_context
    - HttpContext*::CheckProgressiveRead
    - Socket*::CreatedByConnect
    - HttpContext*::is_stage2
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHttpMessage(butil::IOBuf *source, Socket *socket,\n
      \                            bool read_eof, const void* arg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1336,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1341,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1342,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1355,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1358,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1361,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1367,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1368,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 3
    argNames:
    - ' user_error_text'
    - socket
    - msg
    argTypes:
    - std::string
    - Socket*
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1370
      start: 1334
    functionDepth: 4
    functionLinenumber: 1334
    functionLinenumberEnd: 1370
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    - HttpHeader::set_status_code
    - brpc::Controller::http_response
    - HttpContext*::header
    - MakeRawHttpResponse
    - static_cast<const H2StreamContext*>
    - brpc::policy::H2UnsentResponse::New
    - H2StreamContext*::stream_id
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - empty
    - c_str
    - PLOG_IF
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1373,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1374,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1377,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1393,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1398,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1402,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1403,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1409
      start: 1372
    functionDepth: 5
    functionLinenumber: 1372
    functionLinenumberEnd: 1409
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - Socket*::mutable_auth_context
    - brpc::policy::FindMethodPropertyByURI
    - HttpContext*::header
    - Authenticator*::GetUnauthorizedErrorText
    - Authenticator*::VerifyCredential
    - InputMessageBase*::arg
    - brpc::policy::GetUserAddressFromHeader
    - brpc::policy::SendUnauthorizedResponse
    - butil::EndPoint::EndPoint
    - Server*::options
    - InputMessageBase*::socket
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: bool VerifyHttpRequest(const InputMessageBase* msg)
  - BBCount: 52
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1422,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1431,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1437,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1439,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1444,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1445,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1446,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1447,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1448,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1452,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1458,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1459,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1461,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1466,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1475,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1492,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1493,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1499,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1505,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1509,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1510,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1513,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1515,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1525,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1527,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1531,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1543,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1547,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1551,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1562,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1566,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1571,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1573,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1584,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1592,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1596,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1601,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1607,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1615,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1616,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1620,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1621,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1625,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1630,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1632,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1635,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1646,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1650,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1652,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1662,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1665,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1668,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1670,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1672,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1675,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1678,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1679,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1680,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1684,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1685,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1686,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1694,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1695,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1702,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1704,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1705,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1709,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1710,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1727,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1421
    functionDepth: 11
    functionLinenumber: 1421
    functionLinenumberEnd: 1738
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::stream_id
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - swap
    - DestroyingPtr::get
    - std::string
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - Socket*::auth_context
    - Controller*::log_id
    - Server*::thread_local_options
    - Controller*::request_attachment
    - Controller*::http_request
    - IsTraceable
    - Span*::set_received_us
    - google::protobuf::Service*::GetDescriptor
    - HttpResponseSender::set_h2_stream_id
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - static_cast<H2StreamContext*>
    - c_str
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - Span*::set_start_parse_us
    - HttpResponseSender::set_method_status
    - DestroyingPtr::header
    - butil::endpoint2str
    - AskToBeSampled
    - ScopedNonServiceError::release
    - strtoull
    - static_cast<const Server*>
    - RpcPBMessages*::Request
    - PLOG
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - google::protobuf::Message*::IsInitialized
    - Socket*::is_overcrowded
    - brpc::policy::Get
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - brpc::policy::RemoveGrpcPrefix
    - Span*::set_request_size
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - ControllerPrivateAccessor::set_deadline_us
    - Controller*::set_log_id
    - Socket*::user
    - Controller*::set_pb_bytes_to_base64
    - SampledRequest*::meta::set_compress_type
    - SampledRequest*::meta::set_protocol_type
    - Controller::Controller
    - RpcPBMessages*::Response
    - HttpResponseSender::set_messages
    - butil::StringSplitter::length
    - uri
    - google::protobuf::Message*::GetDescriptor
    - TRACEPRINTF
    - std::string*::c_str
    - butil::cpuwide_time_us
    - std::string::c_str
    - WebEscape
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - InputMessageBase*::base_real_us
    - Span*::set_protocol
    - butil::gettimeofday_us
    - brpc::policy::FindMethodPropertyByURI
    - DestroyingPtr::parsed_length
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - ParsePbTextFromIOBuf
    - Socket*::remote_side
    - Socket*::id
    - GetHeader
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - butil::StringSplitter::field
    - google::protobuf::MethodDescriptor*::input_type
    - Server::MethodProperty*::service::GetDescriptor
    - HttpResponseSender::set_received_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - brpc::policy::GetUserAddressFromHeader
    - butil::EndPoint::EndPoint
    - Server*::IsRunning
    - MakeRawHttpRequest
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::ParseContentType
    - brpc::policy::ProtoJsonToProtoMessage
    - MethodStatus*::OnRequested
    - __builtin_expect
    - Controller*::set_request_id
    - DestroyingPtr::read_body_progressively
    - size
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - brpc::policy::JsonToProtoMessage
    - Controller*::set_pb_single_repeated_to_array
    - SocketUniquePtr::get
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - content_type
    - Span*::ResetServerSpanName
    - brpc::policy::GzipDecompress
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1744,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1745,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1757,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - hostname2endpoint
    - std::string::c_str
    - std::string::empty
    - str2endpoint
    - ParseURL
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ParseHttpServerAddress(butil::EndPoint* point, const char* server_addr_and_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1771,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1773
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1773
    functionName: brpc::policy::GetHttpMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - empty
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetHttpMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller* cntl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_progressive_read_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1780,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1781,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1784,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1775
    functionDepth: 0
    functionLinenumber: 1775
    functionLinenumberEnd: 1787
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - const_cast<std::string *>
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - header
    - FindMethodPropertyByURI
    - has_progressive_read_method
    linkageType: ''
    returnType: void
    signature: void HttpContext::CheckProgressiveRead(const void* arg, Socket *socket)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:87,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:92,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:94,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 105
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeaderImpl(const HttpHeader& headers,\n                                         butil::EndPoint*
      user_addr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:109,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - empty
    - brpc::policy::GetUserAddressFromHeaderImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeader(const HttpHeader& headers,\n                                     butil::EndPoint*
      user_addr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 158
    functionName: brpc::policy::CommonStrings::CommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CommonStrings::CommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CommonStrings::CommonStrings
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: brpc::policy::CreateCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CommonStrings::CommonStrings
    linkageType: ''
    returnType: void
    signature: void CreateCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: brpc::policy::InitCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int InitCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: brpc::policy::get_common_strings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CommonStrings
    signature: CommonStrings * get_common_strings()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:179,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:184,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:185,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:192,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:202,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:204,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:205,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:207,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:210,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:213,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:216,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::StringPiece::starts_with
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::front
    - butil::StringPiece::empty
    - butil::StringPiece::size
    linkageType: ''
    returnType: HttpContentType
    signature: HttpContentType ParseContentType(butil::StringPiece ct, bool* is_grpc_ct)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:237,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:239,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:240,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' inbuf'
    - request_or_response
    - has_content
    argTypes:
    - butil::IOBuf
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 248
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::size
    - snprintf
    - butil::IOBuf::pop_back
    - butil::ToPrintableString
    - butil::my_ip_cstr
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void PrintMessage(const butil::IOBuf& inbuf,\n                         bool
      request_or_response,\n                         bool has_content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:254,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:255,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 258
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::size
    - butil::HostToNet32
    - butil::IOBuf::Movable
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void AddGrpcPrefix(butil::IOBuf* body, bool compressed)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:265,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:270,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 274
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf*::size
    - butil::IOBuf*::cutn
    - butil::IOBuf*::empty
    - butil::NetToHost32
    linkageType: ''
    returnType: bool
    signature: bool RemoveGrpcPrefix(butil::IOBuf* body, bool* compressed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:281,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:282,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:284,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 276
    functionDepth: 10
    functionLinenumber: 276
    functionLinenumberEnd: 291
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - Controller*::has_pb_bytes_to_base64
    - std::string::c_str
    - Controller*::has_pb_single_repeated_to_array
    - google::protobuf::Message*::GetDescriptor
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const butil::IOBuf& body,\n                               google::protobuf::Message*
      message,\n                               Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:296,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:297,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:298,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:299,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:300,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:305,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:307,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:308,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 293
    functionDepth: 3
    functionLinenumber: 293
    functionLinenumberEnd: 312
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Controller*::has_pb_bytes_to_base64
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - Controller*::has_pb_jsonify_empty_array
    - Controller*::has_pb_single_repeated_to_array
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                              butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                              Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:321,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:323,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:324,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 328
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::Message*::GetDescriptor
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - std::string::c_str
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(const butil::IOBuf& body,\n                                    google::protobuf::Message*
      message,\n                                    Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:337,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:339,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 330
    functionDepth: 2
    functionLinenumber: 330
    functionLinenumberEnd: 343
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - GetDescriptor
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,\n
      \                                   butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                                   Controller* cntl, int error_code)"
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:346,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:348,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:350,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:353,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:355,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:358,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:383,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:396,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:401,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:403,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:408,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:422,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:432,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:442,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:447,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:461,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:463,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:465,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:473,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:480,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:487,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:493,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:497,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:498,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:507,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:509,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:515,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:519,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:520,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:529,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:530,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:535,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:536,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:550,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:552,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:559,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:560,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 345
    functionDepth: 11
    functionLinenumber: 345
    functionLinenumberEnd: 561
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - Controller*::http_response
    - strtol
    - DestroyingPtr::header
    - HttpHeader*::status_code
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - GrpcStatusToString
    - DestroyingPtr::get
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - HttpHeader*::major_version
    - HttpHeader*::reason_phrase
    - swap
    - brpc::policy::ProtoJsonToProtoMessage
    - strcasecmp
    - std::string::append
    - TRACEPRINTF
    - DestroyingPtr::read_body_progressively
    - Span*::set_response_size
    - DestroyingPtr::body
    - size
    - LOG
    - InputMessageBase*::base_real_us
    - LOG_IF
    - Controller*::response
    - butil::string_printf
    - append_to
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::content_type
    - copy_to
    - DestroyingPtr::parsed_length
    - Controller*::ErrorCode
    - bthread_id_lock
    - GrpcStatusToErrorCode
    - Span*::set_received_us
    - H2StreamContext*::correlation_id
    - CHECK
    - std::string*::data
    - ParsePbFromIOBuf
    - berror
    - ParsePbTextFromIOBuf
    - brpc::policy::RemoveGrpcPrefix
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - HttpHeader*::minor_version
    - ControllerPrivateAccessor::OnResponse
    - static_cast<H2StreamContext*>
    - std::min
    - Socket*::read_will_be_progressive
    - Span*::set_base_real_us
    - Socket*::SetFailed
    - PercentDecode
    - HttpHeader*::Swap
    - brpc::policy::GzipDecompress
    - Socket*::correlation_id
    - Controller*::response_attachment
    - empty
    - static_cast<int>
    - Span*::set_start_parse_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessHttpResponse(InputMessageBase* msg)
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:566,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:567,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:571,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:572,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:583,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:584,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:588,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:593,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:598,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:609,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:613,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:614,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:620,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:625,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:629,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:634,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:636,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:643,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:644,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:645,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:648,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:649,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:650,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:655,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:672,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:673,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:682,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:683,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:684,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:695,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:696,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:697,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:707,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:709,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:713,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:723,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:725,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 563
    functionDepth: 4
    functionLinenumber: 563
    functionLinenumberEnd: 729
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - append
    - Controller*::request_compress_type
    - brpc::policy::GzipCompress
    - google::protobuf::Message*::GetTypeName
    - ControllerPrivateAccessor::span
    - uri
    - set_content_type
    - Span*::span_id
    - butil::IOBuf::IOBuf
    - Span*::trace_id
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::method
    - brpc::policy::ParseContentType
    - TRACEPRINTF
    - set_method
    - brpc::policy::AddGrpcPrefix
    - find
    - brpc::URI::Print
    - std::string::append
    - size
    - google::protobuf::MethodDescriptor*::service
    - ControllerPrivateAccessor::protocol_param
    - Controller*::log_id
    - std::string::push_back
    - google::protobuf::Message*::IsInitialized
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - Controller*::request_attachment
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::http_request
    - Controller*::request_id
    - SetHeader
    - brpc::policy::get_h2_global_stream_creator
    - mutable_content_type
    - brpc::policy::ProtoMessageToProtoJson
    - Controller*::timeout_ms
    - before_http_1_1
    - GetHeader
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - Controller*::request_protocol
    - std::string::reserve
    - content_type
    - CompressTypeToCStr
    - Span*::parent_span_id
    - Controller*::connection_type
    - reserve
    linkageType: ''
    returnType: void
    signature: "void SerializeHttpRequest(butil::IOBuf* /*not used*/,\n                          Controller*
      cntl,\n                          const google::protobuf::Message* pbreq)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:738,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:739,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:742,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:743,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:746,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:760,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - cntl
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 731
    functionDepth: 2
    functionLinenumber: 731
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_attachment
    - brpc::policy::PrintMessage
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - HttpHeader*::method
    - MakeRawHttpRequest
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PackHttpRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    Controller* cntl,\n                     const butil::IOBuf&
      /*unused*/,\n                     const Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:768,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 766
    functionDepth: 0
    functionLinenumber: 766
    functionLinenumberEnd: 770
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - Controller*::http_request
    linkageType: ''
    returnType: bool
    signature: bool SupportGzip(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 776
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 782
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(Controller* cntl/*own*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 784
    functionDepth: 1
    functionLinenumber: 784
    functionLinenumberEnd: 794
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(HttpResponseSender&& s) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 797
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 797
    functionName: brpc::policy::HttpResponseSender::set_messages
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_messages(RpcPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - MethodStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 798
    functionDepth: 0
    functionLinenumber: 798
    functionLinenumberEnd: 798
    functionName: brpc::policy::HttpResponseSender::set_method_status
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method_status(MethodStatus* ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    functionName: brpc::policy::HttpResponseSender::set_received_us
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_received_us(int64_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    functionName: brpc::policy::HttpResponseSender::set_h2_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_h2_stream_id(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 812
    functionName: brpc::policy::HttpResponseSenderAsDone::HttpResponseSenderAsDone
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSenderAsDone(HttpResponseSender* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _cntl::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:816,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 819
      start: 813
    functionDepth: 1
    functionLinenumber: 813
    functionLinenumberEnd: 819
    functionName: brpc::policy::HttpResponseSenderAsDone::Run
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - _messages::Request
    - _cntl::CallAfterRpcResp
    - _messages::Response
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: if
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:828,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:832,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:837,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:842,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:843,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:846,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:850,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:851,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:856,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:859,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:865,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:866,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:873,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:880,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:892,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:910,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:913,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:922,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:929,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:934,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:935,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:940,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:947,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:952,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:959,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:961,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:968,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:970,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:982,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:988,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1017,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1022,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1027,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1038,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1044,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1050,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1053,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 825
    functionDepth: 5
    functionLinenumber: 825
    functionLinenumberEnd: 1055
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetTypeName
    - Controller*::http_response
    - bthread_id_create
    - HttpHeader*::set_method
    - Span*::set_start_send_us
    - ProtoMessageToProtoJson
    - HttpHeader*::method
    - google::protobuf::Message*::GetDescriptor
    - CHECK_EQ
    - if
    - HttpHeader*::status_code
    - Controller*::has_progressive_writer
    - Controller*::SetFailed
    - HttpHeader*::before_http_1_1
    - butil::IOBuf::IOBuf
    - HttpHeader*::major_version
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::set_content_type
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - butil::cpuwide_time_us
    - TRACEPRINTF
    - MakeRawHttpResponse
    - brpc::URI::Print
    - ProtoMessageToJson
    - AddGrpcPrefix
    - bthread_id_join
    - ErrorCodeToStatusCode
    - strcasecmp
    - HttpHeader*::set_status_code
    - PLOG_IF
    - get
    - Span*::set_response_size
    - PrintMessage
    - Return
    - HttpHeader*::is_http2
    - LOG
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - server
    - HttpHeader*::content_type
    - LOG_IF
    - Controller*::ErrorCode
    - Controller*::http_request
    - butil::IOBuf::size
    - Controller*::does_manage_http_body_on_error
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - SocketMessagePtr::EstimatedByteSize
    - HttpHeader*::RemoveHeader
    - Socket*::description
    - Socket*::Write
    - ParseContentType
    - HttpHeader*::minor_version
    - Span*::set_sent_us
    - Controller*::Failed
    - HttpHeader*::SetHeader
    - Socket*::SetFailed
    - HttpHeader*::set_version
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - GzipCompress
    - std::string*::empty
    - Response
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender::~HttpResponseSender()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1066,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1072,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1073,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1078,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - unresolved_path
    - ' uri_path'
    - ' splitter'
    argTypes:
    - std::string*
    - std::string
    - butil::StringSplitter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1059
    functionDepth: 1
    functionLinenumber: 1059
    functionLinenumberEnd: 1082
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - std::string*::clear
    - butil::StringSplitter::length
    - field
    - butil::StringSplitter::field
    - std::string*::push_back
    - c_str
    - size
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: "void FillUnresolvedPath(std::string* unresolved_path,\n                               const
      std::string& uri_path,\n                               butil::StringSplitter&
      splitter)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1088,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1091,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1092,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1099,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1114,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1128,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1131,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1137,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1139,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1144,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1145,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1146,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1084
    functionDepth: 2
    functionLinenumber: 1084
    functionLinenumberEnd: 1151
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringPiece::set
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - c_str
    - brpc::policy::FillUnresolvedPath
    - size
    - butil::StringPiece::empty
    - butil::StringPiece::find
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURIImpl(const std::string&
      uri_path, const Server* server,\n                            std::string* unresolved_path)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::FindMethodPropertyByURIImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1158,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1171,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1172,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1176
      start: 1154
    functionDepth: 3
    functionLinenumber: 1154
    functionLinenumberEnd: 1176
    functionName: brpc::policy::FindMethodPropertyByURI
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ServerPrivateAccessor::global_restful_map
    - brpc::policy::FindMethodPropertyByURIImpl
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURI(const std::string&
      uri_path, const Server* server,\n                        std::string* unresolved_path)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1183,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1191,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1194,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1205,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1210,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1216,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1227,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1241,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1242,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1245,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1247,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1274,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1275,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1278,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1279,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1281,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1285,1
    - Dst: is_failed_after_queries
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1310,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1311,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1314,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1316,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1317,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1320,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1321,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1323,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1330,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 84
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1332
      start: 1178
    functionDepth: 1
    functionLinenumber: 1178
    functionLinenumberEnd: 1332
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - HttpContext*::ParseFromArray
    - static_cast<HttpContext*>
    - HttpHeader::set_status_code
    - HttpContext*::Completed
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - HttpContext*::parser
    - Socket*::is_read_progressive
    - MakeRawHttpResponse
    - HttpContext*::RemoveOneRefForStage2
    - HttpContext*::AddOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::ParseFromIOBuf
    - MakeMessage
    - Socket*::reset_parsing_context
    - Socket*::ReleaseAdditionalReference
    - LOG
    - HttpContext*::header
    - is_failed_after_queries
    - http_errno_description
    - Socket*::Write
    - butil::IOBuf*::empty
    - HTTP_PARSER_ERRNO
    - is_failed_after_http_version
    - Socket*::http_request_method
    - HttpContext*::stage
    - HttpContext::HttpContext
    - Socket*::release_parsing_context
    - HttpContext*::CheckProgressiveRead
    - Socket*::CreatedByConnect
    - HttpContext*::is_stage2
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHttpMessage(butil::IOBuf *source, Socket *socket,\n
      \                            bool read_eof, const void* arg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1336,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1341,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1342,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1355,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1358,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1361,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1367,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1368,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 3
    argNames:
    - ' user_error_text'
    - socket
    - msg
    argTypes:
    - std::string
    - Socket*
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1370
      start: 1334
    functionDepth: 4
    functionLinenumber: 1334
    functionLinenumberEnd: 1370
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::string_printf
    - HttpHeader::set_status_code
    - brpc::Controller::http_response
    - HttpContext*::header
    - MakeRawHttpResponse
    - static_cast<const H2StreamContext*>
    - brpc::policy::H2UnsentResponse::New
    - H2StreamContext*::stream_id
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - empty
    - c_str
    - PLOG_IF
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1373,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1374,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1377,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1393,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1398,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1402,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1403,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1409
      start: 1372
    functionDepth: 5
    functionLinenumber: 1372
    functionLinenumberEnd: 1409
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - Socket*::mutable_auth_context
    - brpc::policy::FindMethodPropertyByURI
    - HttpContext*::header
    - Authenticator*::GetUnauthorizedErrorText
    - Authenticator*::VerifyCredential
    - InputMessageBase*::arg
    - brpc::policy::GetUserAddressFromHeader
    - brpc::policy::SendUnauthorizedResponse
    - butil::EndPoint::EndPoint
    - Server*::options
    - InputMessageBase*::socket
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: bool VerifyHttpRequest(const InputMessageBase* msg)
  - BBCount: 52
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1422,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1431,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1437,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1439,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1444,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1445,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1446,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1447,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1448,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1452,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1458,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1459,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1461,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1466,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1475,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1492,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1493,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1499,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1505,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1509,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1510,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1513,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1515,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1525,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1527,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1531,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1543,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1547,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1551,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1562,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1566,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1571,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1573,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1584,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1592,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1596,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1601,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1607,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1615,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1616,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1620,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1621,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1625,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1630,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1632,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1635,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1646,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1650,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1652,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1662,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1665,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1668,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1670,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1672,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1675,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1678,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1679,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1680,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1684,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1685,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1686,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1694,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1695,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1702,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1704,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1705,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1709,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1710,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1727,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1421
    functionDepth: 11
    functionLinenumber: 1421
    functionLinenumberEnd: 1738
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::stream_id
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - swap
    - DestroyingPtr::get
    - std::string
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - Socket*::auth_context
    - Controller*::log_id
    - Server*::thread_local_options
    - Controller*::request_attachment
    - Controller*::http_request
    - IsTraceable
    - Span*::set_received_us
    - google::protobuf::Service*::GetDescriptor
    - HttpResponseSender::set_h2_stream_id
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - static_cast<H2StreamContext*>
    - c_str
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - Span*::set_start_parse_us
    - HttpResponseSender::set_method_status
    - DestroyingPtr::header
    - butil::endpoint2str
    - AskToBeSampled
    - ScopedNonServiceError::release
    - strtoull
    - static_cast<const Server*>
    - RpcPBMessages*::Request
    - PLOG
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - google::protobuf::Message*::IsInitialized
    - Socket*::is_overcrowded
    - brpc::policy::Get
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - brpc::policy::RemoveGrpcPrefix
    - Span*::set_request_size
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - ControllerPrivateAccessor::set_deadline_us
    - Controller*::set_log_id
    - Socket*::user
    - Controller*::set_pb_bytes_to_base64
    - SampledRequest*::meta::set_compress_type
    - SampledRequest*::meta::set_protocol_type
    - Controller::Controller
    - RpcPBMessages*::Response
    - HttpResponseSender::set_messages
    - butil::StringSplitter::length
    - uri
    - google::protobuf::Message*::GetDescriptor
    - TRACEPRINTF
    - std::string*::c_str
    - butil::cpuwide_time_us
    - std::string::c_str
    - WebEscape
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - InputMessageBase*::base_real_us
    - Span*::set_protocol
    - butil::gettimeofday_us
    - brpc::policy::FindMethodPropertyByURI
    - DestroyingPtr::parsed_length
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - ParsePbTextFromIOBuf
    - Socket*::remote_side
    - Socket*::id
    - GetHeader
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - butil::StringSplitter::field
    - google::protobuf::MethodDescriptor*::input_type
    - Server::MethodProperty*::service::GetDescriptor
    - HttpResponseSender::set_received_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - brpc::policy::GetUserAddressFromHeader
    - butil::EndPoint::EndPoint
    - Server*::IsRunning
    - MakeRawHttpRequest
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::ParseContentType
    - brpc::policy::ProtoJsonToProtoMessage
    - MethodStatus*::OnRequested
    - __builtin_expect
    - Controller*::set_request_id
    - DestroyingPtr::read_body_progressively
    - size
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - brpc::policy::JsonToProtoMessage
    - Controller*::set_pb_single_repeated_to_array
    - SocketUniquePtr::get
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - content_type
    - Span*::ResetServerSpanName
    - brpc::policy::GzipDecompress
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1744,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1745,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1757,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - hostname2endpoint
    - std::string::c_str
    - std::string::empty
    - str2endpoint
    - ParseURL
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ParseHttpServerAddress(butil::EndPoint* point, const char* server_addr_and_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1771,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1773
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1773
    functionName: brpc::policy::GetHttpMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - empty
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetHttpMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller* cntl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_progressive_read_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1780,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1781,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1784,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1775
    functionDepth: 0
    functionLinenumber: 1775
    functionLinenumberEnd: 1787
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - const_cast<std::string *>
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - header
    - FindMethodPropertyByURI
    - has_progressive_read_method
    linkageType: ''
    returnType: void
    signature: void HttpContext::CheckProgressiveRead(const void* arg, Socket *socket)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:87,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:92,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:94,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 105
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeaderImpl(const HttpHeader& headers,\n                                         butil::EndPoint*
      user_addr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:109,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - empty
    - brpc::policy::GetUserAddressFromHeaderImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetUserAddressFromHeader(const HttpHeader& headers,\n                                     butil::EndPoint*
      user_addr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 158
    functionName: brpc::policy::CommonStrings::CommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CommonStrings::CommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CommonStrings::CommonStrings
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: brpc::policy::CreateCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - CommonStrings::CommonStrings
    linkageType: ''
    returnType: void
    signature: void CreateCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: brpc::policy::InitCommonStrings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int InitCommonStrings()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: brpc::policy::get_common_strings
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: CommonStrings
    signature: CommonStrings * get_common_strings()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:179,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:182,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:184,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:185,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:192,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:202,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:204,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:205,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:207,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:210,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:213,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:216,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::StringPiece::starts_with
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::front
    - butil::StringPiece::empty
    - butil::StringPiece::size
    linkageType: ''
    returnType: HttpContentType
    signature: HttpContentType ParseContentType(butil::StringPiece ct, bool* is_grpc_ct)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:230,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:232,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:237,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:239,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:240,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:246,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' inbuf'
    - request_or_response
    - has_content
    argTypes:
    - butil::IOBuf
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 248
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::size
    - snprintf
    - butil::IOBuf::pop_back
    - butil::ToPrintableString
    - butil::my_ip_cstr
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void PrintMessage(const butil::IOBuf& inbuf,\n                         bool
      request_or_response,\n                         bool has_content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:254,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:255,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:256,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 258
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::size
    - butil::HostToNet32
    - butil::IOBuf::Movable
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void AddGrpcPrefix(butil::IOBuf* body, bool compressed)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:265,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:270,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 274
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBuf*::size
    - butil::IOBuf*::cutn
    - butil::IOBuf*::empty
    - butil::NetToHost32
    linkageType: ''
    returnType: bool
    signature: bool RemoveGrpcPrefix(butil::IOBuf* body, bool* compressed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:281,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:282,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:284,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 276
    functionDepth: 10
    functionLinenumber: 276
    functionLinenumberEnd: 291
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - Controller*::has_pb_bytes_to_base64
    - std::string::c_str
    - Controller*::has_pb_single_repeated_to_array
    - google::protobuf::Message*::GetDescriptor
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(const butil::IOBuf& body,\n                               google::protobuf::Message*
      message,\n                               Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:296,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:297,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:298,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:299,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:300,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:305,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:307,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:308,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 293
    functionDepth: 3
    functionLinenumber: 293
    functionLinenumberEnd: 312
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Controller*::has_pb_bytes_to_base64
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - Controller*::has_pb_jsonify_empty_array
    - Controller*::has_pb_single_repeated_to_array
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToJson
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToJson(const google::protobuf::Message& message,\n
      \                              butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                              Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:321,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:323,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:324,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' body'
    - message
    - cntl
    - error_code
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 328
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - google::protobuf::Message*::GetDescriptor
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - std::string::c_str
    linkageType: ''
    returnType: bool
    signature: "bool ProtoJsonToProtoMessage(const butil::IOBuf& body,\n                                    google::protobuf::Message*
      message,\n                                    Controller* cntl, int error_code)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:334,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:337,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:339,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 4
    argNames:
    - ' message'
    - wrapper
    - cntl
    - error_code
    argTypes:
    - google::protobuf::Message
    - butil::IOBufAsZeroCopyOutputStream*
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 330
    functionDepth: 2
    functionLinenumber: 330
    functionLinenumberEnd: 343
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - AlwaysPrintPrimitiveFields
    - json2pb::ProtoMessageToProtoJson
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - GetDescriptor
    - Controller*::SetFailed
    linkageType: ''
    returnType: bool
    signature: "bool ProtoMessageToProtoJson(const google::protobuf::Message& message,\n
      \                                   butil::IOBufAsZeroCopyOutputStream* wrapper,\n
      \                                   Controller* cntl, int error_code)"
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:346,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:348,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:350,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:353,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:355,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:358,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:383,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:389,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:396,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:397,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:401,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:403,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:408,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:421,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:422,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:424,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:432,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:434,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:442,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:443,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:447,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:461,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:463,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:465,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:467,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:473,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:474,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:480,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:485,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:487,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:493,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:497,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:498,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:507,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:509,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:515,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:519,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:520,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:529,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:530,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:534,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:535,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:536,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:541,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:550,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:552,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:559,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:560,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 345
    functionDepth: 11
    functionLinenumber: 345
    functionLinenumberEnd: 561
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - Controller*::http_response
    - strtol
    - DestroyingPtr::header
    - HttpHeader*::status_code
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - GrpcStatusToString
    - DestroyingPtr::get
    - butil::cpuwide_time_us
    - std::string::c_str
    - DestroyingPtr::socket
    - HttpHeader*::major_version
    - HttpHeader*::reason_phrase
    - swap
    - brpc::policy::ProtoJsonToProtoMessage
    - strcasecmp
    - std::string::append
    - TRACEPRINTF
    - DestroyingPtr::read_body_progressively
    - Span*::set_response_size
    - DestroyingPtr::body
    - size
    - LOG
    - InputMessageBase*::base_real_us
    - LOG_IF
    - Controller*::response
    - butil::string_printf
    - append_to
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::content_type
    - copy_to
    - DestroyingPtr::parsed_length
    - Controller*::ErrorCode
    - bthread_id_lock
    - GrpcStatusToErrorCode
    - Span*::set_received_us
    - H2StreamContext*::correlation_id
    - CHECK
    - std::string*::data
    - ParsePbFromIOBuf
    - berror
    - ParsePbTextFromIOBuf
    - brpc::policy::RemoveGrpcPrefix
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - HttpHeader*::minor_version
    - ControllerPrivateAccessor::OnResponse
    - static_cast<H2StreamContext*>
    - std::min
    - Socket*::read_will_be_progressive
    - Span*::set_base_real_us
    - Socket*::SetFailed
    - PercentDecode
    - HttpHeader*::Swap
    - brpc::policy::GzipDecompress
    - Socket*::correlation_id
    - Controller*::response_attachment
    - empty
    - static_cast<int>
    - Span*::set_start_parse_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessHttpResponse(InputMessageBase* msg)
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:566,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:567,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:570,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:571,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:572,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:583,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:584,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:588,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:593,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:598,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:605,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:609,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:613,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:614,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:620,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:625,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:629,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:634,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:636,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:643,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:644,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:645,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:648,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:649,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:650,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:651,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:655,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:657,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:663,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:672,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:673,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:674,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:682,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:683,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:684,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:695,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:696,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:697,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:698,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:707,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:709,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:711,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:713,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:714,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:722,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:723,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:724,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:725,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:726,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 563
    functionDepth: 4
    functionLinenumber: 563
    functionLinenumberEnd: 729
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - append
    - Controller*::request_compress_type
    - brpc::policy::GzipCompress
    - google::protobuf::Message*::GetTypeName
    - ControllerPrivateAccessor::span
    - uri
    - set_content_type
    - Span*::span_id
    - butil::IOBuf::IOBuf
    - Span*::trace_id
    - Controller*::SetFailed
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::method
    - brpc::policy::ParseContentType
    - TRACEPRINTF
    - set_method
    - brpc::policy::AddGrpcPrefix
    - find
    - brpc::URI::Print
    - std::string::append
    - size
    - google::protobuf::MethodDescriptor*::service
    - ControllerPrivateAccessor::protocol_param
    - Controller*::log_id
    - std::string::push_back
    - google::protobuf::Message*::IsInitialized
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - Controller*::request_attachment
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::http_request
    - Controller*::request_id
    - SetHeader
    - brpc::policy::get_h2_global_stream_creator
    - mutable_content_type
    - brpc::policy::ProtoMessageToProtoJson
    - Controller*::timeout_ms
    - before_http_1_1
    - GetHeader
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - Controller*::request_protocol
    - std::string::reserve
    - content_type
    - CompressTypeToCStr
    - Span*::parent_span_id
    - Controller*::connection_type
    - reserve
    linkageType: ''
    returnType: void
    signature: "void SerializeHttpRequest(butil::IOBuf* /*not used*/,\n                          Controller*
      cntl,\n                          const google::protobuf::Message* pbreq)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:738,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:739,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:742,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:743,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:746,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:753,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:757,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:760,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - cntl
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 731
    functionDepth: 2
    functionLinenumber: 731
    functionLinenumberEnd: 764
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_attachment
    - brpc::policy::PrintMessage
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - HttpHeader*::method
    - MakeRawHttpRequest
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PackHttpRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*,\n
      \                    Controller* cntl,\n                     const butil::IOBuf&
      /*unused*/,\n                     const Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:768,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 766
    functionDepth: 0
    functionLinenumber: 766
    functionLinenumberEnd: 770
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - Controller*::http_request
    linkageType: ''
    returnType: bool
    signature: bool SupportGzip(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 776
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 782
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(Controller* cntl/*own*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 784
    functionDepth: 1
    functionLinenumber: 784
    functionLinenumberEnd: 794
    functionName: brpc::policy::HttpResponseSender::HttpResponseSender
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender(HttpResponseSender&& s) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - messages
    argTypes:
    - RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 797
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 797
    functionName: brpc::policy::HttpResponseSender::set_messages
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_messages(RpcPBMessages* messages)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - MethodStatus*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 798
    functionDepth: 0
    functionLinenumber: 798
    functionLinenumberEnd: 798
    functionName: brpc::policy::HttpResponseSender::set_method_status
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method_status(MethodStatus* ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    functionName: brpc::policy::HttpResponseSender::set_received_us
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_received_us(int64_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    functionName: brpc::policy::HttpResponseSender::set_h2_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_h2_stream_id(int id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 812
    functionDepth: 1
    functionLinenumber: 812
    functionLinenumberEnd: 812
    functionName: brpc::policy::HttpResponseSenderAsDone::HttpResponseSenderAsDone
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void HttpResponseSenderAsDone(HttpResponseSender* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _cntl::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:815,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:816,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 819
      start: 813
    functionDepth: 1
    functionLinenumber: 813
    functionLinenumberEnd: 819
    functionName: brpc::policy::HttpResponseSenderAsDone::Run
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - _messages::Request
    - _cntl::CallAfterRpcResp
    - _messages::Response
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: if
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:828,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:829,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:832,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:837,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:842,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:843,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:846,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:850,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:851,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:856,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:859,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:865,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:866,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:873,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:880,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:883,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:887,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:892,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:910,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:911,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:913,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:916,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:922,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:929,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:934,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:935,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:940,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:941,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:947,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:952,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:953,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:958,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:959,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:961,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:968,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:970,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:973,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:982,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:987,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:988,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1000,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1007,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1017,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1020,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1022,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1027,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1029,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1036,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1038,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1044,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1045,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1050,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1053,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1055
      start: 825
    functionDepth: 5
    functionLinenumber: 825
    functionLinenumberEnd: 1055
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetTypeName
    - Controller*::http_response
    - bthread_id_create
    - HttpHeader*::set_method
    - Span*::set_start_send_us
    - ProtoMessageToProtoJson
    - HttpHeader*::method
    - google::protobuf::Message*::GetDescriptor
    - CHECK_EQ
    - if
    - HttpHeader*::status_code
    - Controller*::has_progressive_writer
    - Controller*::SetFailed
    - HttpHeader*::before_http_1_1
    - butil::IOBuf::IOBuf
    - HttpHeader*::major_version
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::set_content_type
    - HttpHeader*::GetHeader
    - std::string*::c_str
    - butil::cpuwide_time_us
    - TRACEPRINTF
    - MakeRawHttpResponse
    - brpc::URI::Print
    - ProtoMessageToJson
    - AddGrpcPrefix
    - bthread_id_join
    - ErrorCodeToStatusCode
    - strcasecmp
    - HttpHeader*::set_status_code
    - PLOG_IF
    - get
    - Span*::set_response_size
    - PrintMessage
    - Return
    - HttpHeader*::is_http2
    - LOG
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - butil::string_printf
    - server
    - HttpHeader*::content_type
    - LOG_IF
    - Controller*::ErrorCode
    - Controller*::http_request
    - butil::IOBuf::size
    - Controller*::does_manage_http_body_on_error
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - SocketMessagePtr::EstimatedByteSize
    - HttpHeader*::RemoveHeader
    - Socket*::description
    - Socket*::Write
    - ParseContentType
    - HttpHeader*::minor_version
    - Span*::set_sent_us
    - Controller*::Failed
    - HttpHeader*::SetHeader
    - Socket*::SetFailed
    - HttpHeader*::set_version
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - GzipCompress
    - std::string*::empty
    - Response
    linkageType: ''
    returnType: void
    signature: void HttpResponseSender::~HttpResponseSender()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1066,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1071,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1072,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1073,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1078,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1080,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - unresolved_path
    - ' uri_path'
    - ' splitter'
    argTypes:
    - std::string*
    - std::string
    - butil::StringSplitter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1059
    functionDepth: 1
    functionLinenumber: 1059
    functionLinenumberEnd: 1082
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - std::string*::clear
    - butil::StringSplitter::length
    - field
    - butil::StringSplitter::field
    - std::string*::push_back
    - c_str
    - size
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: "void FillUnresolvedPath(std::string* unresolved_path,\n                               const
      std::string& uri_path,\n                               butil::StringSplitter&
      splitter)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1088,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1091,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1092,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1094,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1099,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1111,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1112,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1114,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1125,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1128,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1131,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1137,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1139,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1144,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1145,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1146,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1084
    functionDepth: 2
    functionLinenumber: 1084
    functionLinenumberEnd: 1151
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringPiece::set
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - c_str
    - brpc::policy::FillUnresolvedPath
    - size
    - butil::StringPiece::empty
    - butil::StringPiece::find
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURIImpl(const std::string&
      uri_path, const Server* server,\n                            std::string* unresolved_path)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::FindMethodPropertyByURIImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1158,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1171,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1172,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 3
    argNames:
    - ' uri_path'
    - server
    - unresolved_path
    argTypes:
    - std::string
    - Server*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1176
      start: 1154
    functionDepth: 3
    functionLinenumber: 1154
    functionLinenumberEnd: 1176
    functionName: brpc::policy::FindMethodPropertyByURI
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - ServerPrivateAccessor::global_restful_map
    - brpc::policy::FindMethodPropertyByURIImpl
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\nFindMethodPropertyByURI(const std::string&
      uri_path, const Server* server,\n                        std::string* unresolved_path)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1183,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1191,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1194,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1205,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1210,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1216,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1223,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1227,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1236,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1241,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1242,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1245,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1247,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1274,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1275,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1278,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1279,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1281,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1285,1
    - Dst: is_failed_after_queries
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1303,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1310,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1311,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1314,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1316,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1317,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1320,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1321,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1323,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1326,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1330,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 84
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1332
      start: 1178
    functionDepth: 1
    functionLinenumber: 1178
    functionLinenumberEnd: 1332
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - HttpContext*::ParseFromArray
    - static_cast<HttpContext*>
    - HttpHeader::set_status_code
    - HttpContext*::Completed
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - HttpContext*::parser
    - Socket*::is_read_progressive
    - MakeRawHttpResponse
    - HttpContext*::RemoveOneRefForStage2
    - HttpContext*::AddOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::ParseFromIOBuf
    - MakeMessage
    - Socket*::reset_parsing_context
    - Socket*::ReleaseAdditionalReference
    - LOG
    - HttpContext*::header
    - is_failed_after_queries
    - http_errno_description
    - Socket*::Write
    - butil::IOBuf*::empty
    - HTTP_PARSER_ERRNO
    - is_failed_after_http_version
    - Socket*::http_request_method
    - HttpContext*::stage
    - HttpContext::HttpContext
    - Socket*::release_parsing_context
    - HttpContext*::CheckProgressiveRead
    - Socket*::CreatedByConnect
    - HttpContext*::is_stage2
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHttpMessage(butil::IOBuf *source, Socket *socket,\n
      \                            bool read_eof, const void* arg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1336,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1341,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1342,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1355,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1357,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1358,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1361,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1367,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1368,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 3
    argNames:
    - ' user_error_text'
    - socket
    - msg
    argTypes:
    - std::string
    - Socket*
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1370
      start: 1334
    functionDepth: 4
    functionLinenumber: 1334
    functionLinenumberEnd: 1370
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::string_printf
    - HttpHeader::set_status_code
    - brpc::Controller::http_response
    - HttpContext*::header
    - MakeRawHttpResponse
    - static_cast<const H2StreamContext*>
    - brpc::policy::H2UnsentResponse::New
    - H2StreamContext*::stream_id
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - empty
    - c_str
    - PLOG_IF
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1373,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1374,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1377,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1385,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1393,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1398,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1399,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1402,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1403,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1404,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1409
      start: 1372
    functionDepth: 5
    functionLinenumber: 1372
    functionLinenumberEnd: 1409
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - Socket*::mutable_auth_context
    - brpc::policy::FindMethodPropertyByURI
    - HttpContext*::header
    - Authenticator*::GetUnauthorizedErrorText
    - Authenticator*::VerifyCredential
    - InputMessageBase*::arg
    - brpc::policy::GetUserAddressFromHeader
    - brpc::policy::SendUnauthorizedResponse
    - butil::EndPoint::EndPoint
    - Server*::options
    - InputMessageBase*::socket
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: bool VerifyHttpRequest(const InputMessageBase* msg)
  - BBCount: 52
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1422,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1426,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1431,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1435,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1437,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1439,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1440,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1444,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1445,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1446,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1447,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1448,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1452,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1453,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1458,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1459,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1461,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1466,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1475,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1487,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1492,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1493,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1496,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1499,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1501,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1505,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1507,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1509,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1510,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1513,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1514,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1515,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1525,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1527,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1531,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1543,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1547,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1551,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1557,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1562,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1566,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1571,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1573,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1584,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1588,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1592,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1596,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1601,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1607,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1615,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1616,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1620,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1621,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1625,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1630,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1632,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1635,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1646,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1650,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1652,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1659,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1662,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1665,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1668,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1670,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1672,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1675,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1678,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1679,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1680,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1684,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1685,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1686,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1694,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1695,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1702,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1704,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1705,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1709,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1710,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1715,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1726,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1727,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1738
      start: 1421
    functionDepth: 11
    functionLinenumber: 1421
    functionLinenumberEnd: 1738
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::stream_id
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - swap
    - DestroyingPtr::get
    - std::string
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - Socket*::auth_context
    - Controller*::log_id
    - Server*::thread_local_options
    - Controller*::request_attachment
    - Controller*::http_request
    - IsTraceable
    - Span*::set_received_us
    - google::protobuf::Service*::GetDescriptor
    - HttpResponseSender::set_h2_stream_id
    - DestroyingPtr::reset
    - InputMessageBase*::received_us
    - static_cast<H2StreamContext*>
    - c_str
    - pbrpcframework::get_prototype_by_method_descriptor
    - empty
    - Span*::set_start_parse_us
    - HttpResponseSender::set_method_status
    - DestroyingPtr::header
    - butil::endpoint2str
    - AskToBeSampled
    - ScopedNonServiceError::release
    - strtoull
    - static_cast<const Server*>
    - RpcPBMessages*::Request
    - PLOG
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - google::protobuf::Message*::IsInitialized
    - Socket*::is_overcrowded
    - brpc::policy::Get
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - brpc::policy::RemoveGrpcPrefix
    - Span*::set_request_size
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - ControllerPrivateAccessor::set_deadline_us
    - Controller*::set_log_id
    - Socket*::user
    - Controller*::set_pb_bytes_to_base64
    - SampledRequest*::meta::set_compress_type
    - SampledRequest*::meta::set_protocol_type
    - Controller::Controller
    - RpcPBMessages*::Response
    - HttpResponseSender::set_messages
    - butil::StringSplitter::length
    - uri
    - google::protobuf::Message*::GetDescriptor
    - TRACEPRINTF
    - std::string*::c_str
    - butil::cpuwide_time_us
    - std::string::c_str
    - WebEscape
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - InputMessageBase*::base_real_us
    - Span*::set_protocol
    - butil::gettimeofday_us
    - brpc::policy::FindMethodPropertyByURI
    - DestroyingPtr::parsed_length
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - ParsePbTextFromIOBuf
    - Socket*::remote_side
    - Socket*::id
    - GetHeader
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - butil::StringSplitter::field
    - google::protobuf::MethodDescriptor*::input_type
    - Server::MethodProperty*::service::GetDescriptor
    - HttpResponseSender::set_received_us
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - brpc::policy::GetUserAddressFromHeader
    - butil::EndPoint::EndPoint
    - Server*::IsRunning
    - MakeRawHttpRequest
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::ParseContentType
    - brpc::policy::ProtoJsonToProtoMessage
    - MethodStatus*::OnRequested
    - __builtin_expect
    - Controller*::set_request_id
    - DestroyingPtr::read_body_progressively
    - size
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - brpc::policy::JsonToProtoMessage
    - Controller*::set_pb_single_repeated_to_array
    - SocketUniquePtr::get
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - content_type
    - Span*::ResetServerSpanName
    - brpc::policy::GzipDecompress
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1744,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1745,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1757,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1740
    functionDepth: 1
    functionLinenumber: 1740
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - hostname2endpoint
    - std::string::c_str
    - std::string::empty
    - str2endpoint
    - ParseURL
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ParseHttpServerAddress(butil::EndPoint* point, const char* server_addr_and_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1771,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1773
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1773
    functionName: brpc::policy::GetHttpMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - empty
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetHttpMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller* cntl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: has_progressive_read_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1780,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1781,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1782,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1784,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1775
    functionDepth: 0
    functionLinenumber: 1775
    functionLinenumberEnd: 1787
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - const_cast<std::string *>
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - header
    - FindMethodPropertyByURI
    - has_progressive_read_method
    linkageType: ''
    returnType: void
    signature: void HttpContext::CheckProgressiveRead(const void* arg, Socket *socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::policy::ListNamingService::RunNamingServiceReturnsQuickly
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RunNamingServiceReturnsQuickly() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::policy::ListNamingService::RunNamingServiceReturnsQuickly
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RunNamingServiceReturnsQuickly() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::policy::ListNamingService::RunNamingServiceReturnsQuickly
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RunNamingServiceReturnsQuickly() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::policy::ListNamingService::RunNamingServiceReturnsQuickly
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RunNamingServiceReturnsQuickly() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:30,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: brpc::policy::EspAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::assign
    linkageType: ''
    returnType: int
    signature: int EspAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: brpc::policy::EspAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int EspAuthenticator::VerifyCredential(\n        const std::string&
      /*auth_str*/,\n        const butil::EndPoint& /*client_addr*/,\n        AuthContext*
      /*out_ctx*/) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<EspAuthenticator>
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::global_esp_authenticator
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<EspAuthenticator>
    linkageType: ''
    returnType: Authenticator
    signature: Authenticator * global_esp_authenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:30,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: brpc::policy::EspAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::assign
    linkageType: ''
    returnType: int
    signature: int EspAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: brpc::policy::EspAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int EspAuthenticator::VerifyCredential(\n        const std::string&
      /*auth_str*/,\n        const butil::EndPoint& /*client_addr*/,\n        AuthContext*
      /*out_ctx*/) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<EspAuthenticator>
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::global_esp_authenticator
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<EspAuthenticator>
    linkageType: ''
    returnType: Authenticator
    signature: Authenticator * global_esp_authenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:30,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: brpc::policy::EspAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::assign
    linkageType: ''
    returnType: int
    signature: int EspAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: brpc::policy::EspAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int EspAuthenticator::VerifyCredential(\n        const std::string&
      /*auth_str*/,\n        const butil::EndPoint& /*client_addr*/,\n        AuthContext*
      /*out_ctx*/) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<EspAuthenticator>
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::global_esp_authenticator
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<EspAuthenticator>
    linkageType: ''
    returnType: Authenticator
    signature: Authenticator * global_esp_authenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:30,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: brpc::policy::EspAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::assign
    linkageType: ''
    returnType: int
    signature: int EspAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: brpc::policy::EspAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int EspAuthenticator::VerifyCredential(\n        const std::string&
      /*auth_str*/,\n        const butil::EndPoint& /*client_addr*/,\n        AuthContext*
      /*out_ctx*/) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<EspAuthenticator>
      Src: /src/brpc/src/brpc/policy/esp_authenticator.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::global_esp_authenticator
    functionSourceFile: /src/brpc/src/brpc/policy/esp_authenticator.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<EspAuthenticator>
    linkageType: ''
    returnType: Authenticator
    signature: Authenticator * global_esp_authenticator()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:45,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:48,1
    - Dst: butil::IOBuf*::cut_until
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:49,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:53,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - source
    - line_out
    argTypes:
    - butil::IOBuf*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 58
    functionName: brpc::policy::CutLineFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - butil::IOBuf*::empty
    - butil::IOBuf*::size
    - butil::back_char
    - std::string*::resize
    - std::string*::empty
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    linkageType: ''
    returnType: bool
    signature: bool CutLineFromIOBuf(butil::IOBuf* source, std::string* line_out)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:62,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:66,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:69,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:76,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:80,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:86,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:87,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:98,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:100,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:103,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:107,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:108,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:110,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:111,1
    - Dst: CutLineFromIOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:123,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:127,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:130,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:135,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:136,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:137,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:142,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:143,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 60
    argCount: 2
    argNames:
    - service_name_cstr
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 146
    functionName: brpc::policy::RemoteFileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 2
    functionsReached:
    - append
    - Controller::response_attachment
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - Channel::Channel
    - butil::StringPiece::data
    - swap
    - butil::StringPiece::substr
    - std::unique_ptr::Init
    - butil::StringPiece::CopyToString
    - Controller::Failed
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - butil::StringPiece::find
    - hostname2endpoint
    - std::set::insert
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - str2endpoint
    - reserve
    - CutLineFromIOBuf
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int RemoteFileNamingService::GetServers(const char *service_name_cstr,\n
      \                                     std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::policy::RemoteFileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RemoteFileNamingService::Describe(std::ostream& os,\n                                     const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoteFileNamingService::RemoteFileNamingService
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::policy::RemoteFileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - RemoteFileNamingService::RemoteFileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * RemoteFileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: brpc::policy::RemoteFileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoteFileNamingService::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:45,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:48,1
    - Dst: butil::IOBuf*::cut_until
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:49,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:53,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - source
    - line_out
    argTypes:
    - butil::IOBuf*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 58
    functionName: brpc::policy::CutLineFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - butil::IOBuf*::empty
    - butil::IOBuf*::size
    - butil::back_char
    - std::string*::resize
    - std::string*::empty
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    linkageType: ''
    returnType: bool
    signature: bool CutLineFromIOBuf(butil::IOBuf* source, std::string* line_out)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:62,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:66,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:69,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:76,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:80,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:86,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:87,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:98,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:100,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:103,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:107,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:108,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:110,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:111,1
    - Dst: CutLineFromIOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:123,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:127,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:130,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:135,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:136,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:137,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:142,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:143,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 60
    argCount: 2
    argNames:
    - service_name_cstr
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 146
    functionName: brpc::policy::RemoteFileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 2
    functionsReached:
    - append
    - Controller::response_attachment
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - Channel::Channel
    - butil::StringPiece::data
    - swap
    - butil::StringPiece::substr
    - std::unique_ptr::Init
    - butil::StringPiece::CopyToString
    - Controller::Failed
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - butil::StringPiece::find
    - hostname2endpoint
    - std::set::insert
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - str2endpoint
    - reserve
    - CutLineFromIOBuf
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int RemoteFileNamingService::GetServers(const char *service_name_cstr,\n
      \                                     std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::policy::RemoteFileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RemoteFileNamingService::Describe(std::ostream& os,\n                                     const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoteFileNamingService::RemoteFileNamingService
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::policy::RemoteFileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - RemoteFileNamingService::RemoteFileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * RemoteFileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: brpc::policy::RemoteFileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoteFileNamingService::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:45,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:48,1
    - Dst: butil::IOBuf*::cut_until
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:49,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:53,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - source
    - line_out
    argTypes:
    - butil::IOBuf*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 58
    functionName: brpc::policy::CutLineFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - butil::IOBuf*::empty
    - butil::IOBuf*::size
    - butil::back_char
    - std::string*::resize
    - std::string*::empty
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    linkageType: ''
    returnType: bool
    signature: bool CutLineFromIOBuf(butil::IOBuf* source, std::string* line_out)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:62,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:66,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:69,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:76,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:80,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:86,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:87,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:98,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:100,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:103,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:107,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:108,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:110,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:111,1
    - Dst: CutLineFromIOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:123,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:127,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:130,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:135,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:136,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:137,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:142,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:143,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 60
    argCount: 2
    argNames:
    - service_name_cstr
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 146
    functionName: brpc::policy::RemoteFileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 2
    functionsReached:
    - append
    - Controller::response_attachment
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - Channel::Channel
    - butil::StringPiece::data
    - swap
    - butil::StringPiece::substr
    - std::unique_ptr::Init
    - butil::StringPiece::CopyToString
    - Controller::Failed
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - butil::StringPiece::find
    - hostname2endpoint
    - std::set::insert
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - str2endpoint
    - reserve
    - CutLineFromIOBuf
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int RemoteFileNamingService::GetServers(const char *service_name_cstr,\n
      \                                     std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::policy::RemoteFileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RemoteFileNamingService::Describe(std::ostream& os,\n                                     const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoteFileNamingService::RemoteFileNamingService
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::policy::RemoteFileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - RemoteFileNamingService::RemoteFileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * RemoteFileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: brpc::policy::RemoteFileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoteFileNamingService::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:45,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:48,1
    - Dst: butil::IOBuf*::cut_until
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:49,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:50,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:53,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:54,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:55,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - source
    - line_out
    argTypes:
    - butil::IOBuf*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 58
    functionName: brpc::policy::CutLineFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - butil::IOBuf*::empty
    - butil::IOBuf*::size
    - butil::back_char
    - std::string*::resize
    - std::string*::empty
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    linkageType: ''
    returnType: bool
    signature: bool CutLineFromIOBuf(butil::IOBuf* source, std::string* line_out)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:62,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:66,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:69,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:76,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:80,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:86,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:87,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:89,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:90,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:91,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:92,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:98,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:100,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:103,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:107,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:108,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:110,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:111,1
    - Dst: CutLineFromIOBuf
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:120,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:123,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:126,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:127,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:128,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:130,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:135,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:136,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:137,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:142,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:143,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 60
    argCount: 2
    argNames:
    - service_name_cstr
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 146
    functionName: brpc::policy::RemoteFileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 2
    functionsReached:
    - append
    - Controller::response_attachment
    - Controller::ErrorText
    - butil::EndPoint::EndPoint
    - Channel::Channel
    - butil::StringPiece::data
    - swap
    - butil::StringPiece::substr
    - std::unique_ptr::Init
    - butil::StringPiece::CopyToString
    - Controller::Failed
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - butil::StringPiece::find
    - hostname2endpoint
    - std::set::insert
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - str2endpoint
    - reserve
    - CutLineFromIOBuf
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int RemoteFileNamingService::GetServers(const char *service_name_cstr,\n
      \                                     std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: brpc::policy::RemoteFileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RemoteFileNamingService::Describe(std::ostream& os,\n                                     const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoteFileNamingService::RemoteFileNamingService
      Src: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::policy::RemoteFileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - RemoteFileNamingService::RemoteFileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * RemoteFileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: brpc::policy::RemoteFileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/remote_file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoteFileNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:47,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:49,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:50,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:53,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:55,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:60,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:62,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 3
    argNames:
    - ' line'
    - server_addr
    - tag
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 67
    functionName: brpc::policy::SplitIntoServerAndTag
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - isspace
    - data
    - size
    - butil::StringPiece*::clear
    - butil::StringPiece*::set
    linkageType: ''
    returnType: bool
    signature: "bool SplitIntoServerAndTag(const butil::StringPiece& line,\n                           butil::StringPiece*
      server_addr,\n                           butil::StringPiece* tag)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:71,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:80,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:82,1
    - Dst: getline
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:96,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:99,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:104,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:105,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:106,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:111,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:112,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:113,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 115
    functionName: brpc::policy::FileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 4
    functionsReached:
    - butil::EndPoint::EndPoint
    - butil::StringPiece::data
    - butil::ScopedFILE::get
    - butil::StringPiece::CopyToString
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - PLOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - free
    - std::vector<ServerNode>*::push_back
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - hostname2endpoint
    - std::set::insert
    - std::vector<ServerNode>*::clear
    - str2endpoint
    - getline
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:120,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:122,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:126,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:130,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:138,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:140,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:144,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:149,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 117
    functionDepth: 2
    functionLinenumber: 117
    functionLinenumberEnd: 151
    functionName: brpc::policy::FileNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::FileWatcher::FileWatcher
    - bthread_usleep
    - butil::FileWatcher::check_and_consume
    - brpc::policy::FileNamingService::GetServers
    - NamingServiceActions*::ResetServers
    - CHECK
    - PLOG
    - LOG
    - butil::FileWatcher::init
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: brpc::policy::FileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FileNamingService::Describe(std::ostream& os,\n                                 const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileNamingService::FileNamingService
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::policy::FileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - FileNamingService::FileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * FileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::policy::FileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:47,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:49,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:50,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:53,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:55,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:60,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:62,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 3
    argNames:
    - ' line'
    - server_addr
    - tag
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 67
    functionName: brpc::policy::SplitIntoServerAndTag
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - isspace
    - data
    - size
    - butil::StringPiece*::clear
    - butil::StringPiece*::set
    linkageType: ''
    returnType: bool
    signature: "bool SplitIntoServerAndTag(const butil::StringPiece& line,\n                           butil::StringPiece*
      server_addr,\n                           butil::StringPiece* tag)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:71,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:80,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:82,1
    - Dst: getline
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:96,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:99,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:104,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:105,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:106,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:111,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:112,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:113,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 115
    functionName: brpc::policy::FileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 5
    functionsReached:
    - butil::EndPoint::EndPoint
    - butil::StringPiece::data
    - butil::ScopedFILE::get
    - butil::StringPiece::CopyToString
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - PLOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - free
    - std::vector<ServerNode>*::push_back
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - hostname2endpoint
    - std::set::insert
    - std::vector<ServerNode>*::clear
    - str2endpoint
    - getline
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:120,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:122,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:126,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:130,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:138,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:140,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:144,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:149,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 117
    functionDepth: 2
    functionLinenumber: 117
    functionLinenumberEnd: 151
    functionName: brpc::policy::FileNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::FileWatcher::FileWatcher
    - bthread_usleep
    - butil::FileWatcher::check_and_consume
    - brpc::policy::FileNamingService::GetServers
    - NamingServiceActions*::ResetServers
    - CHECK
    - PLOG
    - LOG
    - butil::FileWatcher::init
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: brpc::policy::FileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FileNamingService::Describe(std::ostream& os,\n                                 const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileNamingService::FileNamingService
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::policy::FileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - FileNamingService::FileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * FileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::policy::FileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:47,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:49,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:50,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:53,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:55,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:60,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:62,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 3
    argNames:
    - ' line'
    - server_addr
    - tag
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 67
    functionName: brpc::policy::SplitIntoServerAndTag
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - isspace
    - data
    - size
    - butil::StringPiece*::clear
    - butil::StringPiece*::set
    linkageType: ''
    returnType: bool
    signature: "bool SplitIntoServerAndTag(const butil::StringPiece& line,\n                           butil::StringPiece*
      server_addr,\n                           butil::StringPiece* tag)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:71,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:80,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:82,1
    - Dst: getline
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:96,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:99,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:104,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:105,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:106,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:111,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:112,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:113,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 115
    functionName: brpc::policy::FileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 6
    functionsReached:
    - butil::EndPoint::EndPoint
    - butil::StringPiece::data
    - butil::ScopedFILE::get
    - butil::StringPiece::CopyToString
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - PLOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - free
    - std::vector<ServerNode>*::push_back
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - hostname2endpoint
    - std::set::insert
    - std::vector<ServerNode>*::clear
    - str2endpoint
    - getline
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:120,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:122,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:126,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:130,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:138,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:140,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:144,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:149,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 117
    functionDepth: 2
    functionLinenumber: 117
    functionLinenumberEnd: 151
    functionName: brpc::policy::FileNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::FileWatcher::FileWatcher
    - bthread_usleep
    - butil::FileWatcher::check_and_consume
    - brpc::policy::FileNamingService::GetServers
    - NamingServiceActions*::ResetServers
    - CHECK
    - PLOG
    - LOG
    - butil::FileWatcher::init
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: brpc::policy::FileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FileNamingService::Describe(std::ostream& os,\n                                 const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileNamingService::FileNamingService
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::policy::FileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - FileNamingService::FileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * FileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::policy::FileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:36,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:43,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:45,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:47,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:49,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:50,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:53,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:55,1
    - Dst: butil::StringPiece*::set
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:60,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:62,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 3
    argNames:
    - ' line'
    - server_addr
    - tag
    argTypes:
    - butil::StringPiece
    - butil::StringPiece*
    - butil::StringPiece*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 67
    functionName: brpc::policy::SplitIntoServerAndTag
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - isspace
    - data
    - size
    - butil::StringPiece*::clear
    - butil::StringPiece*::set
    linkageType: ''
    returnType: bool
    signature: "bool SplitIntoServerAndTag(const butil::StringPiece& line,\n                           butil::StringPiece*
      server_addr,\n                           butil::StringPiece* tag)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:71,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:80,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:82,1
    - Dst: getline
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:85,1
    - Dst: SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:91,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:95,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:96,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:97,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:99,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:104,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:105,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:106,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:111,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:112,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:113,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 115
    functionName: brpc::policy::FileNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 7
    functionsReached:
    - butil::EndPoint::EndPoint
    - butil::StringPiece::data
    - butil::ScopedFILE::get
    - butil::StringPiece::CopyToString
    - SplitIntoServerAndTag
    - const_cast<char*>
    - LOG
    - PLOG
    - butil::StringPiece::size
    - std::vector<ServerNode>*::size
    - free
    - std::vector<ServerNode>*::push_back
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - hostname2endpoint
    - std::set::insert
    - std::vector<ServerNode>*::clear
    - str2endpoint
    - getline
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:120,1
    - Dst: butil::FileWatcher::init
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:122,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:126,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:130,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:138,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:140,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:144,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:149,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 117
    functionDepth: 2
    functionLinenumber: 117
    functionLinenumberEnd: 151
    functionName: brpc::policy::FileNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::FileWatcher::FileWatcher
    - bthread_usleep
    - butil::FileWatcher::check_and_consume
    - brpc::policy::FileNamingService::GetServers
    - NamingServiceActions*::ResetServers
    - CHECK
    - PLOG
    - LOG
    - butil::FileWatcher::init
    linkageType: ''
    returnType: int
    signature: "int FileNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: brpc::policy::FileNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void FileNamingService::Describe(std::ostream& os,\n                                 const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileNamingService::FileNamingService
      Src: /src/brpc/src/brpc/policy/file_naming_service.cpp:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::policy::FileNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached:
    - FileNamingService::FileNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * FileNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: brpc::policy::FileNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/file_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - additional_space
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::NsheadClosure::NsheadClosure
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::NsheadClosure(void* additional_space)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: NsheadClosure::~NsheadClosure()
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::~NsheadClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: brpc::NsheadClosure::DoNotRespond
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::DoNotRespond()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NsheadClosure*::~NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:62,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - done
    argTypes:
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: operator()(NsheadClosure* done) const
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - NsheadClosure*::~NsheadClosure
    - free
    linkageType: ''
    returnType: void
    signature: void operator()(NsheadClosure* done) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:72,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:74,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:74,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:76,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:77,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:82,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:89,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:93,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:94,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:106,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:109,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:111,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:112,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:113,1
    - Dst: body::movable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:113,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:121,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:121,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:125,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:127,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:128,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:129,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:134,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:141,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:141,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 67
    functionDepth: 5
    functionLinenumber: 67
    functionLinenumberEnd: 143
    functionName: brpc::NsheadClosure::Run
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - Span*::set_start_send_us
    - CHECK_EQ
    - IsCloseConnection
    - butil::IOBuf::append
    - options
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - ErrorCode
    - bthread_id_join
    - PLOG_IF
    - Span*::set_response_size
    - body::length
    - ServerPrivateAccessor
    - Socket*::description
    - Socket*::Write
    - body::movable
    - Span*::set_sent_us
    - Socket*::SetFailed
    - SetFailed
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:147,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: brpc::NsheadClosure::SetMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - Span*::ResetServerSpanName
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::SetMethodName(const std::string& full_method_name)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:160,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:167,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:170,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:177,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:180,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:181,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:183,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 184
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseNsheadMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 203
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:211,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 6
    argNames:
    - service
    - ' server'
    - controller
    - ' request'
    - response
    - done
    argTypes:
    - NsheadService*
    - Server
    - Controller*
    - NsheadMessage
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 219
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 8
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(NsheadService* service,\n                                       const
      Server& server,\n                                       Controller* controller,\n
      \                                      const NsheadMessage& request,\n                                       NsheadMessage*
      response,\n                                       NsheadClosure* done)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:222,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:231,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:234,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:236,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:239,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:245,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:250,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:253,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:255,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:259,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:269,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:276,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:287,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:291,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:293,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:310,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:315,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:324,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:326,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:330,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:334,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:339,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:343,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:346,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:350,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:352,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 355
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - AskToBeSampled
    - ScopedNonServiceError::release
    - bthread_assign_data
    - SampledRequest*::meta::set_nshead
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - LOG
    - Socket*::local_side
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SocketUniquePtr::get
    - SampledRequest*::submit
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - malloc
    - Server*::options
    - CHECK
    - IsTraceable
    - NsheadClosure::NsheadClosure
    - Span*::set_received_us
    - Span*::AsParent
    - Socket*::remote_side
    - Socket*::id
    - NsheadService*::ProcessNsheadRequest
    - LOG_EVERY_SECOND
    - BeginRunningUserCode
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadRequest(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:358,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:364,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:367,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:377,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:383,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:384,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:390,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 391
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:396,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 400
    functionName: brpc::policy::VerifyNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 4
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyNsheadRequest(const InputMessageBase* msg_base)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:412,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:416,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:417,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:421,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:422,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 402
    functionDepth: 2
    functionLinenumber: 402
    functionLinenumberEnd: 423
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_log_id
    - butil::IOBuf*::append
    - Controller*::log_id
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:434,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:442,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:450,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 451
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackNsheadRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:160,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:167,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:170,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:177,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:180,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:181,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:183,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 184
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseNsheadMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 203
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:211,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 6
    argNames:
    - service
    - ' server'
    - controller
    - ' request'
    - response
    - done
    argTypes:
    - NsheadService*
    - Server
    - Controller*
    - NsheadMessage
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 219
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 9
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(NsheadService* service,\n                                       const
      Server& server,\n                                       Controller* controller,\n
      \                                      const NsheadMessage& request,\n                                       NsheadMessage*
      response,\n                                       NsheadClosure* done)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:222,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:231,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:234,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:236,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:239,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:245,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:250,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:253,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:255,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:259,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:269,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:276,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:287,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:291,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:293,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:310,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:315,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:324,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:326,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:330,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:334,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:339,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:343,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:346,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:350,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:352,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 355
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - AskToBeSampled
    - ScopedNonServiceError::release
    - bthread_assign_data
    - SampledRequest*::meta::set_nshead
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - LOG
    - Socket*::local_side
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SocketUniquePtr::get
    - SampledRequest*::submit
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - malloc
    - Server*::options
    - CHECK
    - IsTraceable
    - NsheadClosure::NsheadClosure
    - Span*::set_received_us
    - Span*::AsParent
    - Socket*::remote_side
    - Socket*::id
    - NsheadService*::ProcessNsheadRequest
    - LOG_EVERY_SECOND
    - BeginRunningUserCode
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadRequest(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:358,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:364,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:367,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:377,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:383,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:384,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:390,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 391
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:396,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 400
    functionName: brpc::policy::VerifyNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 4
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyNsheadRequest(const InputMessageBase* msg_base)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:412,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:416,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:417,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:421,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:422,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 402
    functionDepth: 2
    functionLinenumber: 402
    functionLinenumberEnd: 423
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_log_id
    - butil::IOBuf*::append
    - Controller*::log_id
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:434,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:442,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:450,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 451
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackNsheadRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - additional_space
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::NsheadClosure::NsheadClosure
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::NsheadClosure(void* additional_space)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: NsheadClosure::~NsheadClosure()
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::~NsheadClosure()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: brpc::NsheadClosure::DoNotRespond
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::DoNotRespond()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NsheadClosure*::~NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:62,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - done
    argTypes:
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: operator()(NsheadClosure* done) const
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - NsheadClosure*::~NsheadClosure
    - free
    linkageType: ''
    returnType: void
    signature: void operator()(NsheadClosure* done) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:72,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:74,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:74,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:76,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:77,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:82,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:89,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:93,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:94,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:106,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:109,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:111,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:112,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:113,1
    - Dst: body::movable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:113,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:121,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:121,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:125,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:127,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:128,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:129,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:134,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:141,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:141,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 67
    functionDepth: 5
    functionLinenumber: 67
    functionLinenumberEnd: 143
    functionName: brpc::NsheadClosure::Run
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - Span*::set_start_send_us
    - CHECK_EQ
    - IsCloseConnection
    - butil::IOBuf::append
    - options
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - ErrorCode
    - bthread_id_join
    - PLOG_IF
    - Span*::set_response_size
    - body::length
    - ServerPrivateAccessor
    - Socket*::description
    - Socket*::Write
    - body::movable
    - Span*::set_sent_us
    - Socket*::SetFailed
    - SetFailed
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:147,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: brpc::NsheadClosure::SetMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - Span*::ResetServerSpanName
    linkageType: ''
    returnType: void
    signature: void NsheadClosure::SetMethodName(const std::string& full_method_name)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:160,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:167,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:170,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:177,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:180,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:181,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:183,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 184
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseNsheadMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 203
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:211,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 6
    argNames:
    - service
    - ' server'
    - controller
    - ' request'
    - response
    - done
    argTypes:
    - NsheadService*
    - Server
    - Controller*
    - NsheadMessage
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 219
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 10
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(NsheadService* service,\n                                       const
      Server& server,\n                                       Controller* controller,\n
      \                                      const NsheadMessage& request,\n                                       NsheadMessage*
      response,\n                                       NsheadClosure* done)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:222,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:231,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:234,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:236,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:239,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:245,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:250,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:253,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:255,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:259,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:269,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:276,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:287,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:291,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:293,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:310,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:315,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:324,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:326,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:330,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:334,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:339,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:343,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:346,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:350,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:352,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 355
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - AskToBeSampled
    - ScopedNonServiceError::release
    - bthread_assign_data
    - SampledRequest*::meta::set_nshead
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - LOG
    - Socket*::local_side
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SocketUniquePtr::get
    - SampledRequest*::submit
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - malloc
    - Server*::options
    - CHECK
    - IsTraceable
    - NsheadClosure::NsheadClosure
    - Span*::set_received_us
    - Span*::AsParent
    - Socket*::remote_side
    - Socket*::id
    - NsheadService*::ProcessNsheadRequest
    - LOG_EVERY_SECOND
    - BeginRunningUserCode
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadRequest(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:358,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:364,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:367,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:377,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:383,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:384,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:390,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 391
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:396,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 400
    functionName: brpc::policy::VerifyNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 4
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyNsheadRequest(const InputMessageBase* msg_base)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:412,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:416,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:417,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:421,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:422,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 402
    functionDepth: 2
    functionLinenumber: 402
    functionLinenumberEnd: 423
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_log_id
    - butil::IOBuf*::append
    - Controller*::log_id
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:434,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:442,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:450,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 451
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackNsheadRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:160,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:167,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:170,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:177,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:180,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:181,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:183,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 184
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseNsheadMessage(butil::IOBuf* source,\n                               Socket*,
      bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 203
    functionName: brpc::policy::CallMethodInBackupThread
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - CallMethodInBackupThreadArgs*::service::ProcessNsheadRequest
    linkageType: ''
    returnType: void
    signature: void CallMethodInBackupThread(void* void_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:211,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 6
    argNames:
    - service
    - ' server'
    - controller
    - ' request'
    - response
    - done
    argTypes:
    - NsheadService*
    - Server
    - Controller*
    - NsheadMessage
    - NsheadMessage*
    - NsheadClosure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 219
    functionName: brpc::policy::EndRunningCallMethodInPool
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - CallMethodInBackupThreadArgs::CallMethodInBackupThreadArgs
    - EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: "void EndRunningCallMethodInPool(NsheadService* service,\n                                       const
      Server& server,\n                                       Controller* controller,\n
      \                                      const NsheadMessage& request,\n                                       NsheadMessage*
      response,\n                                       NsheadClosure* done)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:222,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:227,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:231,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:234,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:236,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:239,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:245,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:250,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:253,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:255,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:259,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:262,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:269,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:276,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:282,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:287,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:291,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:293,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:298,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:310,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:315,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:320,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:324,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:326,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:330,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:334,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:339,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:343,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:346,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:350,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:352,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 355
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - DestroyingPtr::payload::swap
    - butil::endpoint2str
    - Controller*::SetFailed
    - ServerPrivateAccessor::AddConcurrency
    - AskToBeSampled
    - ScopedNonServiceError::release
    - bthread_assign_data
    - SampledRequest*::meta::set_nshead
    - butil::cpuwide_time_us
    - Server*::AcceptRequest
    - MethodStatus*::OnRequested
    - brpc::Span::CreateServerSpan
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - LOG
    - Socket*::local_side
    - Controller*::remote_side
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Span*::set_protocol
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SocketUniquePtr::get
    - SampledRequest*::submit
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - malloc
    - Server*::options
    - CHECK
    - IsTraceable
    - NsheadClosure::NsheadClosure
    - Span*::set_received_us
    - Span*::AsParent
    - Socket*::remote_side
    - Socket*::id
    - NsheadService*::ProcessNsheadRequest
    - LOG_EVERY_SECOND
    - BeginRunningUserCode
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - Controller*::set_log_id
    - DestroyingPtr::base_real_us
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - Socket*::user
    - Span*::set_log_id
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadRequest(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:358,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:364,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:367,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:376,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:377,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:383,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:384,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:390,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 391
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:396,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 400
    functionName: brpc::policy::VerifyNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 4
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifyNsheadRequest(const InputMessageBase* msg_base)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:407,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:411,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:412,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:416,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:417,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:421,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:422,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 402
    functionDepth: 2
    functionLinenumber: 402
    functionLinenumberEnd: 423
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_log_id
    - butil::IOBuf*::append
    - Controller*::log_id
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadRequest(butil::IOBuf* request_buf, Controller*
      cntl,\n                            const google::protobuf::Message* req_base)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:434,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:442,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:444,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:450,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 4
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 451
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackNsheadRequest(\n    butil::IOBuf* packet_buf,\n    SocketMessage**,\n
      \   uint64_t correlation_id,\n    const google::protobuf::MethodDescriptor*,\n
      \   Controller* cntl,\n    const butil::IOBuf& request,\n    const Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: RedisConnContext*::transaction_handler::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:65,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:69,1
    - Dst: RedisConnContext*::redis_service::FindCommandHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: RedisReply::SetError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:77,1
    - Dst: RedisCommandHandler*::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:82,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisCommandHandler*::NewTransactionHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:94,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:95,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:98,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:99,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:103,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:106,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:110,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 51
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - flush_batched
    - appender
    argTypes:
    - RedisConnContext*
    - std::vector<butil::StringPiece>
    - bool
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 58
    functionDepth: 2
    functionLinenumber: 58
    functionLinenumberEnd: 114
    functionName: brpc::policy::ConsumeCommand
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisConnContext*::redis_service::FindCommandHandler
    - RedisCommandHandler*::NewTransactionHandler
    - RedisConnContext*::transaction_handler::Run
    - RedisConnContext*::transaction_handler::reset
    - snprintf
    - RedisReply::SetError
    - SerializeTo
    - RedisReply::size
    - as_string
    - RedisCommandHandler*::Run
    - LOG
    - RedisReply::SerializeTo
    linkageType: ''
    returnType: int
    signature: "int ConsumeCommand(RedisConnContext* ctx,\n                   const
      std::vector<butil::StringPiece>& args,\n                   bool flush_batched,\n
      \                  butil::IOBufAppender* appender)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:122,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:124,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:126,1
    - Dst: static_cast<RedisConnContext*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: RedisConnContext::RedisConnContext
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:130,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:131,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:134,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:139,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:143,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:148,1
    - Dst: std::vector::swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:150,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:152,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:154,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:156,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: RedisConnContext*::parser::ParsedArgsSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:163,1
    - Dst: RedisConnContext*::arena::clear
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:164,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:166,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:179,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:180,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:186,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:187,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:192,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:194,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:195,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:200,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:201,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:205,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:218,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:219,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:223,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 68
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 117
    functionDepth: 3
    functionLinenumber: 117
    functionLinenumberEnd: 224
    functionName: brpc::policy::ParseRedisMessage
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - RedisConnContext*::parser::ParsedArgsSize
    - InputResponse::InputResponse
    - butil::IOBuf::IOBuf
    - Socket*::PopPipelinedInfo
    - static_cast<InputResponse*>
    - butil::IOBufAppender::move_to
    - std::vector::swap
    - brpc::policy::ConsumeCommand
    - InputResponse*::response::reply
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - InputResponse*::response::reply_size
    - static_cast<const Server*>
    - MakeMessage
    - static_cast<RedisConnContext*>
    - Socket*::reset_parsing_context
    - butil::IOBuf::empty
    - LOG
    - LOG_IF
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::arena::clear
    - Socket*::GivebackPipelinedInfo
    - Server*::options
    - CHECK
    - Socket*::Write
    - butil::IOBuf*::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - Socket*::release_parsing_context
    - RedisConnContext::RedisConnContext
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRedisMessage(butil::IOBuf* source, Socket* socket,\n
      \                             bool read_eof, const void* arg)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:227,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:232,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:234,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:240,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:245,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:247,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:250,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:254,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:261,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:269,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 270
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Swap
    - DestroyingPtr::response::ByteSize
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - DestroyingPtr::response::reply_size
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessRedisResponse(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::ProcessRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProcessRedisRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:278,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:281,1
    - Dst: RedisRequest*::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:287,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:291,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:295,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 274
    functionDepth: 2
    functionLinenumber: 274
    functionLinenumberEnd: 297
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisRequest*::ByteSize
    - RedisRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeRedisRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:309,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:311,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:315,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:318,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:320,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:323,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 324
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisAuthenticator*::GetAuthFlags
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - dynamic_cast<const RedisAuthenticator*>
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackRedisRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t /*correlation_id*/,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* cntl,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 331
    functionName: brpc::policy::GetRedisMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetRedisMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: RedisConnContext*::transaction_handler::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:65,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:69,1
    - Dst: RedisConnContext*::redis_service::FindCommandHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: RedisReply::SetError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:77,1
    - Dst: RedisCommandHandler*::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:82,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisCommandHandler*::NewTransactionHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:94,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:95,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:98,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:99,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:103,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:106,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:110,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 51
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - flush_batched
    - appender
    argTypes:
    - RedisConnContext*
    - std::vector<butil::StringPiece>
    - bool
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 58
    functionDepth: 2
    functionLinenumber: 58
    functionLinenumberEnd: 114
    functionName: brpc::policy::ConsumeCommand
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 1
    functionsReached:
    - RedisConnContext*::redis_service::FindCommandHandler
    - RedisCommandHandler*::NewTransactionHandler
    - RedisConnContext*::transaction_handler::Run
    - RedisConnContext*::transaction_handler::reset
    - snprintf
    - RedisReply::SetError
    - SerializeTo
    - RedisReply::size
    - as_string
    - RedisCommandHandler*::Run
    - LOG
    - RedisReply::SerializeTo
    linkageType: ''
    returnType: int
    signature: "int ConsumeCommand(RedisConnContext* ctx,\n                   const
      std::vector<butil::StringPiece>& args,\n                   bool flush_batched,\n
      \                  butil::IOBufAppender* appender)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:122,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:124,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:126,1
    - Dst: static_cast<RedisConnContext*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: RedisConnContext::RedisConnContext
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:130,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:131,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:134,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:139,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:143,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:148,1
    - Dst: std::vector::swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:150,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:152,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:154,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:156,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: RedisConnContext*::parser::ParsedArgsSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:163,1
    - Dst: RedisConnContext*::arena::clear
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:164,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:166,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:179,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:180,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:186,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:187,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:192,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:194,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:195,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:200,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:201,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:205,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:218,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:219,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:223,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 68
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 117
    functionDepth: 3
    functionLinenumber: 117
    functionLinenumberEnd: 224
    functionName: brpc::policy::ParseRedisMessage
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - RedisConnContext*::parser::ParsedArgsSize
    - InputResponse::InputResponse
    - butil::IOBuf::IOBuf
    - Socket*::PopPipelinedInfo
    - static_cast<InputResponse*>
    - butil::IOBufAppender::move_to
    - std::vector::swap
    - brpc::policy::ConsumeCommand
    - InputResponse*::response::reply
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - InputResponse*::response::reply_size
    - static_cast<const Server*>
    - MakeMessage
    - static_cast<RedisConnContext*>
    - Socket*::reset_parsing_context
    - butil::IOBuf::empty
    - LOG
    - LOG_IF
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::arena::clear
    - Socket*::GivebackPipelinedInfo
    - Server*::options
    - CHECK
    - Socket*::Write
    - butil::IOBuf*::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - Socket*::release_parsing_context
    - RedisConnContext::RedisConnContext
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRedisMessage(butil::IOBuf* source, Socket* socket,\n
      \                             bool read_eof, const void* arg)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:227,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:232,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:234,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:240,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:245,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:247,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:250,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:254,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:261,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:269,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 270
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Swap
    - DestroyingPtr::response::ByteSize
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - DestroyingPtr::response::reply_size
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessRedisResponse(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::ProcessRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProcessRedisRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:278,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:281,1
    - Dst: RedisRequest*::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:287,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:291,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:295,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 274
    functionDepth: 2
    functionLinenumber: 274
    functionLinenumberEnd: 297
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisRequest*::ByteSize
    - RedisRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeRedisRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:309,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:311,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:315,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:318,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:320,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:323,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 324
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisAuthenticator*::GetAuthFlags
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - dynamic_cast<const RedisAuthenticator*>
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackRedisRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t /*correlation_id*/,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* cntl,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 331
    functionName: brpc::policy::GetRedisMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetRedisMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: RedisConnContext*::transaction_handler::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:65,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:69,1
    - Dst: RedisConnContext*::redis_service::FindCommandHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: RedisReply::SetError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:77,1
    - Dst: RedisCommandHandler*::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:82,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisCommandHandler*::NewTransactionHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:94,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:95,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:98,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:99,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:103,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:106,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:110,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 51
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - flush_batched
    - appender
    argTypes:
    - RedisConnContext*
    - std::vector<butil::StringPiece>
    - bool
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 58
    functionDepth: 2
    functionLinenumber: 58
    functionLinenumberEnd: 114
    functionName: brpc::policy::ConsumeCommand
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 2
    functionsReached:
    - RedisConnContext*::redis_service::FindCommandHandler
    - RedisCommandHandler*::NewTransactionHandler
    - RedisConnContext*::transaction_handler::Run
    - RedisConnContext*::transaction_handler::reset
    - snprintf
    - RedisReply::SetError
    - SerializeTo
    - RedisReply::size
    - as_string
    - RedisCommandHandler*::Run
    - LOG
    - RedisReply::SerializeTo
    linkageType: ''
    returnType: int
    signature: "int ConsumeCommand(RedisConnContext* ctx,\n                   const
      std::vector<butil::StringPiece>& args,\n                   bool flush_batched,\n
      \                  butil::IOBufAppender* appender)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:122,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:124,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:126,1
    - Dst: static_cast<RedisConnContext*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: RedisConnContext::RedisConnContext
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:130,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:131,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:134,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:139,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:143,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:148,1
    - Dst: std::vector::swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:150,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:152,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:154,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:156,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: RedisConnContext*::parser::ParsedArgsSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:163,1
    - Dst: RedisConnContext*::arena::clear
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:164,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:166,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:179,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:180,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:186,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:187,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:192,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:194,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:195,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:200,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:201,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:205,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:218,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:219,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:223,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 68
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 117
    functionDepth: 3
    functionLinenumber: 117
    functionLinenumberEnd: 224
    functionName: brpc::policy::ParseRedisMessage
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - RedisConnContext*::parser::ParsedArgsSize
    - InputResponse::InputResponse
    - butil::IOBuf::IOBuf
    - Socket*::PopPipelinedInfo
    - static_cast<InputResponse*>
    - butil::IOBufAppender::move_to
    - std::vector::swap
    - brpc::policy::ConsumeCommand
    - InputResponse*::response::reply
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - InputResponse*::response::reply_size
    - static_cast<const Server*>
    - MakeMessage
    - static_cast<RedisConnContext*>
    - Socket*::reset_parsing_context
    - butil::IOBuf::empty
    - LOG
    - LOG_IF
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::arena::clear
    - Socket*::GivebackPipelinedInfo
    - Server*::options
    - CHECK
    - Socket*::Write
    - butil::IOBuf*::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - Socket*::release_parsing_context
    - RedisConnContext::RedisConnContext
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRedisMessage(butil::IOBuf* source, Socket* socket,\n
      \                             bool read_eof, const void* arg)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:227,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:232,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:234,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:240,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:245,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:247,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:250,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:254,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:261,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:269,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 270
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Swap
    - DestroyingPtr::response::ByteSize
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - DestroyingPtr::response::reply_size
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessRedisResponse(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::ProcessRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProcessRedisRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:278,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:281,1
    - Dst: RedisRequest*::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:287,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:291,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:295,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 274
    functionDepth: 2
    functionLinenumber: 274
    functionLinenumberEnd: 297
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisRequest*::ByteSize
    - RedisRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeRedisRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:309,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:311,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:315,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:318,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:320,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:323,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 324
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisAuthenticator*::GetAuthFlags
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - dynamic_cast<const RedisAuthenticator*>
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackRedisRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t /*correlation_id*/,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* cntl,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 331
    functionName: brpc::policy::GetRedisMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetRedisMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: RedisConnContext*::transaction_handler::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:65,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:69,1
    - Dst: RedisConnContext*::redis_service::FindCommandHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:76,1
    - Dst: RedisReply::SetError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:77,1
    - Dst: RedisCommandHandler*::Run
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:82,1
    - Dst: RedisConnContext*::transaction_handler::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisCommandHandler*::NewTransactionHandler
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:85,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:93,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:94,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:95,1
    - Dst: RedisReply::size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:98,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:99,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:103,1
    - Dst: RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:106,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:110,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 51
    argCount: 4
    argNames:
    - ctx
    - ' args'
    - flush_batched
    - appender
    argTypes:
    - RedisConnContext*
    - std::vector<butil::StringPiece>
    - bool
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 58
    functionDepth: 2
    functionLinenumber: 58
    functionLinenumberEnd: 114
    functionName: brpc::policy::ConsumeCommand
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 3
    functionsReached:
    - RedisConnContext*::redis_service::FindCommandHandler
    - RedisCommandHandler*::NewTransactionHandler
    - RedisConnContext*::transaction_handler::Run
    - RedisConnContext*::transaction_handler::reset
    - snprintf
    - RedisReply::SetError
    - SerializeTo
    - RedisReply::size
    - as_string
    - RedisCommandHandler*::Run
    - LOG
    - RedisReply::SerializeTo
    linkageType: ''
    returnType: int
    signature: "int ConsumeCommand(RedisConnContext* ctx,\n                   const
      std::vector<butil::StringPiece>& args,\n                   bool flush_batched,\n
      \                  butil::IOBufAppender* appender)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:122,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:124,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:126,1
    - Dst: static_cast<RedisConnContext*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:128,1
    - Dst: RedisConnContext::RedisConnContext
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:130,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:131,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:134,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:139,1
    - Dst: RedisConnContext*::parser::Consume
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:143,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:148,1
    - Dst: std::vector::swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:150,1
    - Dst: brpc::policy::ConsumeCommand
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:152,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:154,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:156,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:158,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:161,1
    - Dst: RedisConnContext*::parser::ParsedArgsSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:163,1
    - Dst: RedisConnContext*::arena::clear
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:164,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:166,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:179,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:180,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:184,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:186,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:187,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:192,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:194,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:195,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:200,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:201,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:205,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:211,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:216,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:218,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:219,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:223,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 68
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 117
    functionDepth: 3
    functionLinenumber: 117
    functionLinenumberEnd: 224
    functionName: brpc::policy::ParseRedisMessage
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - RedisConnContext*::parser::ParsedArgsSize
    - InputResponse::InputResponse
    - butil::IOBuf::IOBuf
    - Socket*::PopPipelinedInfo
    - static_cast<InputResponse*>
    - butil::IOBufAppender::move_to
    - std::vector::swap
    - brpc::policy::ConsumeCommand
    - InputResponse*::response::reply
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - InputResponse*::response::reply_size
    - static_cast<const Server*>
    - MakeMessage
    - static_cast<RedisConnContext*>
    - Socket*::reset_parsing_context
    - butil::IOBuf::empty
    - LOG
    - LOG_IF
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::arena::clear
    - Socket*::GivebackPipelinedInfo
    - Server*::options
    - CHECK
    - Socket*::Write
    - butil::IOBuf*::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - Socket*::release_parsing_context
    - RedisConnContext::RedisConnContext
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRedisMessage(butil::IOBuf* source, Socket* socket,\n
      \                             bool read_eof, const void* arg)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:227,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:232,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:234,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:240,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:245,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:247,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:250,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:254,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:256,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:261,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:269,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 270
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Swap
    - DestroyingPtr::response::ByteSize
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - DestroyingPtr::response::reply_size
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessRedisResponse(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::ProcessRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProcessRedisRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:278,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:281,1
    - Dst: RedisRequest*::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:287,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:291,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:295,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 274
    functionDepth: 2
    functionLinenumber: 274
    functionLinenumberEnd: 297
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisRequest*::ByteSize
    - RedisRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeRedisRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:309,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:311,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:315,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:318,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:320,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:323,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 324
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - RedisAuthenticator*::GetAuthFlags
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - dynamic_cast<const RedisAuthenticator*>
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackRedisRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t /*correlation_id*/,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* cntl,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 331
    functionName: brpc::policy::GetRedisMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetRedisMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:30,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:31,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - key
    - len
    - results
    argTypes:
    - void*
    - size_t
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 33
    functionName: brpc::policy::MD5HashSignature
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - MD5_Update
    - MD5_Init
    - MD5_Final
    linkageType: ''
    returnType: void
    signature: void MD5HashSignature(const void* key, size_t len, unsigned char* results)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MD5HashSignature
      Src: /src/brpc/src/brpc/policy/hasher.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::policy::MD5Hash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MD5HashSignature
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:46,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:49,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::policy::MD5Hash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - MD5_Final
    - MD5_Update
    - MD5_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32
      Src: /src/brpc/src/brpc/policy/hasher.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::policy::MurmurHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 2
    functionsReached:
    - butil::MurmurHash3_x86_32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:67,1
    - Dst: butil::MurmurHash3_x86_32_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: butil::MurmurHash3_x86_32_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: brpc::policy::MurmurHash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - butil::MurmurHash3_x86_32_Update
    - butil::MurmurHash3_x86_32_Final
    - butil::MurmurHash3_x86_32_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 154
    functionName: brpc::policy::CRCHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CRCHash32(const void* key, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - hasher
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: brpc::policy::GetHashName
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *GetHashName(HashFunc hasher)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:30,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:31,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - key
    - len
    - results
    argTypes:
    - void*
    - size_t
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 33
    functionName: brpc::policy::MD5HashSignature
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 1
    functionsReached:
    - MD5_Update
    - MD5_Init
    - MD5_Final
    linkageType: ''
    returnType: void
    signature: void MD5HashSignature(const void* key, size_t len, unsigned char* results)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MD5HashSignature
      Src: /src/brpc/src/brpc/policy/hasher.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::policy::MD5Hash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MD5HashSignature
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:46,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:49,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::policy::MD5Hash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - MD5_Final
    - MD5_Update
    - MD5_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32
      Src: /src/brpc/src/brpc/policy/hasher.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::policy::MurmurHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 2
    functionsReached:
    - butil::MurmurHash3_x86_32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:67,1
    - Dst: butil::MurmurHash3_x86_32_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: butil::MurmurHash3_x86_32_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: brpc::policy::MurmurHash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - butil::MurmurHash3_x86_32_Update
    - butil::MurmurHash3_x86_32_Final
    - butil::MurmurHash3_x86_32_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 154
    functionName: brpc::policy::CRCHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CRCHash32(const void* key, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - hasher
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: brpc::policy::GetHashName
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *GetHashName(HashFunc hasher)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:30,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:31,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - key
    - len
    - results
    argTypes:
    - void*
    - size_t
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 33
    functionName: brpc::policy::MD5HashSignature
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 2
    functionsReached:
    - MD5_Update
    - MD5_Init
    - MD5_Final
    linkageType: ''
    returnType: void
    signature: void MD5HashSignature(const void* key, size_t len, unsigned char* results)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MD5HashSignature
      Src: /src/brpc/src/brpc/policy/hasher.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::policy::MD5Hash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MD5HashSignature
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:46,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:49,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::policy::MD5Hash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - MD5_Final
    - MD5_Update
    - MD5_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32
      Src: /src/brpc/src/brpc/policy/hasher.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::policy::MurmurHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 2
    functionsReached:
    - butil::MurmurHash3_x86_32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:67,1
    - Dst: butil::MurmurHash3_x86_32_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: butil::MurmurHash3_x86_32_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: brpc::policy::MurmurHash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - butil::MurmurHash3_x86_32_Update
    - butil::MurmurHash3_x86_32_Final
    - butil::MurmurHash3_x86_32_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 154
    functionName: brpc::policy::CRCHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CRCHash32(const void* key, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - hasher
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: brpc::policy::GetHashName
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *GetHashName(HashFunc hasher)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:30,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:31,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - key
    - len
    - results
    argTypes:
    - void*
    - size_t
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 33
    functionName: brpc::policy::MD5HashSignature
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 3
    functionsReached:
    - MD5_Update
    - MD5_Init
    - MD5_Final
    linkageType: ''
    returnType: void
    signature: void MD5HashSignature(const void* key, size_t len, unsigned char* results)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MD5HashSignature
      Src: /src/brpc/src/brpc/policy/hasher.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::policy::MD5Hash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MD5HashSignature
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MD5_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:46,1
    - Dst: MD5_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:48,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:49,1
    - Dst: MD5_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::policy::MD5Hash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - MD5_Final
    - MD5_Update
    - MD5_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MD5Hash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32
      Src: /src/brpc/src/brpc/policy/hasher.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: brpc::policy::MurmurHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 2
    functionsReached:
    - butil::MurmurHash3_x86_32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32(const void* key, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MurmurHash3_x86_32_Init
      Src: /src/brpc/src/brpc/policy/hasher.cpp:67,1
    - Dst: butil::MurmurHash3_x86_32_Update
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hasher.cpp:69,1
    - Dst: butil::MurmurHash3_x86_32_Final
      Src: /src/brpc/src/brpc/policy/hasher.cpp:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - keys
    - num_keys
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: brpc::policy::MurmurHash32V
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached:
    - butil::MurmurHash3_x86_32_Update
    - butil::MurmurHash3_x86_32_Final
    - butil::MurmurHash3_x86_32_Init
    - data
    - size
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MurmurHash32V(const butil::StringPiece* keys, size_t num_keys)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 154
    functionName: brpc::policy::CRCHash32
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CRCHash32(const void* key, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - hasher
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: brpc::policy::GetHashName
    functionSourceFile: /src/brpc/src/brpc/policy/hasher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *GetHashName(HashFunc hasher)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::AutoConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::AutoConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::AutoConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::AutoConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:58,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:67,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:106,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:115,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:117,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:122,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:129,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - DoReject
    - StartRecover
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RandomizedLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RandomizedLoadBalancer::RandomizedLoadBalancer
    - RandomizedLoadBalancer*::SetParameters
    linkageType: ''
    returnType: RandomizedLoadBalancer
    signature: "RandomizedLoadBalancer * RandomizedLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void RandomizedLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RandomizedLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:58,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:67,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:106,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:115,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:117,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:122,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:129,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - DoReject
    - StartRecover
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RandomizedLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RandomizedLoadBalancer::RandomizedLoadBalancer
    - RandomizedLoadBalancer*::SetParameters
    linkageType: ''
    returnType: RandomizedLoadBalancer
    signature: "RandomizedLoadBalancer * RandomizedLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void RandomizedLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RandomizedLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:58,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:67,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:106,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:115,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:117,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:122,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:129,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - DoReject
    - StartRecover
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RandomizedLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RandomizedLoadBalancer::RandomizedLoadBalancer
    - RandomizedLoadBalancer*::SetParameters
    linkageType: ''
    returnType: RandomizedLoadBalancer
    signature: "RandomizedLoadBalancer * RandomizedLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void RandomizedLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RandomizedLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:58,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:67,1
    - Dst: brpc::policy::RandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RandomizedLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RandomizedLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:106,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:115,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:117,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:122,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:129,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - DoReject
    - StartRecover
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RandomizedLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RandomizedLoadBalancer::RandomizedLoadBalancer
    - RandomizedLoadBalancer*::SetParameters
    linkageType: ''
    returnType: RandomizedLoadBalancer
    signature: "RandomizedLoadBalancer * RandomizedLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void RandomizedLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RandomizedLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RandomizedLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:47,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:49,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:54,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:55,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:56,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:59,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:60,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:61,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 63
    functionName: brpc::policy::ParseEspMessage
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 5
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseEspMessage(\n        butil::IOBuf* source,\n        Socket*,
      \n        bool /*read_eof*/, \n        const void* /*arg*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:71,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:75,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:77,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:79,1
    - Dst: EspMessage*::body::size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:84,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:86,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 87
    functionName: brpc::policy::SerializeEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - EspMessage*::body::size
    - butil::IOBuf*::append
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeEspRequest(\n        butil::IOBuf* request_buf, \n        Controller*
      cntl,\n        const google::protobuf::Message* req_base)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:98,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:99,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:103,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:104,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:111,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:113,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 5
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 117
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackEspRequest(butil::IOBuf* packet_buf,\n                    SocketMessage**,\n
      \                   uint64_t correlation_id,\n                    const google::protobuf::MethodDescriptor*,\n
      \                   Controller* cntl,\n                    const butil::IOBuf&
      request,\n                    const Authenticator* auth)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:120,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:126,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:129,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:139,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:142,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:143,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:146,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:157,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:158,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 159
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - LOG
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessEspResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:47,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:49,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:54,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:55,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:56,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:59,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:60,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:61,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 63
    functionName: brpc::policy::ParseEspMessage
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 5
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseEspMessage(\n        butil::IOBuf* source,\n        Socket*,
      \n        bool /*read_eof*/, \n        const void* /*arg*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:71,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:75,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:77,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:79,1
    - Dst: EspMessage*::body::size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:84,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:86,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 87
    functionName: brpc::policy::SerializeEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - EspMessage*::body::size
    - butil::IOBuf*::append
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeEspRequest(\n        butil::IOBuf* request_buf, \n        Controller*
      cntl,\n        const google::protobuf::Message* req_base)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:98,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:99,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:103,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:104,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:111,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:113,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 5
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 117
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackEspRequest(butil::IOBuf* packet_buf,\n                    SocketMessage**,\n
      \                   uint64_t correlation_id,\n                    const google::protobuf::MethodDescriptor*,\n
      \                   Controller* cntl,\n                    const butil::IOBuf&
      request,\n                    const Authenticator* auth)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:120,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:126,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:129,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:139,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:142,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:143,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:146,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:157,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:158,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 159
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - LOG
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessEspResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:47,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:49,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:54,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:55,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:56,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:59,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:60,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:61,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 63
    functionName: brpc::policy::ParseEspMessage
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 5
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseEspMessage(\n        butil::IOBuf* source,\n        Socket*,
      \n        bool /*read_eof*/, \n        const void* /*arg*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:71,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:75,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:77,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:79,1
    - Dst: EspMessage*::body::size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:84,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:86,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 87
    functionName: brpc::policy::SerializeEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - EspMessage*::body::size
    - butil::IOBuf*::append
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeEspRequest(\n        butil::IOBuf* request_buf, \n        Controller*
      cntl,\n        const google::protobuf::Message* req_base)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:98,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:99,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:103,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:104,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:111,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:113,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 5
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 117
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackEspRequest(butil::IOBuf* packet_buf,\n                    SocketMessage**,\n
      \                   uint64_t correlation_id,\n                    const google::protobuf::MethodDescriptor*,\n
      \                   Controller* cntl,\n                    const butil::IOBuf&
      request,\n                    const Authenticator* auth)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:120,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:126,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:129,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:139,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:142,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:143,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:146,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:157,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:158,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 159
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - LOG
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessEspResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:47,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:49,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:54,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:55,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:56,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:59,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:60,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:61,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 63
    functionName: brpc::policy::ParseEspMessage
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 5
    functionsReached:
    - TestRpcPBMessageFactory::Get
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseEspMessage(\n        butil::IOBuf* source,\n        Socket*,
      \n        bool /*read_eof*/, \n        const void* /*arg*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:71,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:74,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:75,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:77,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:78,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:79,1
    - Dst: EspMessage*::body::size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:84,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:85,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:86,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - req_base
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 65
    functionDepth: 2
    functionLinenumber: 65
    functionLinenumberEnd: 87
    functionName: brpc::policy::SerializeEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - EspMessage*::body::size
    - butil::IOBuf*::append
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - Controller*::response
    linkageType: ''
    returnType: void
    signature: "void SerializeEspRequest(\n        butil::IOBuf* request_buf, \n        Controller*
      cntl,\n        const google::protobuf::Message* req_base)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:98,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:99,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:103,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:104,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:106,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:111,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:113,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 5
    argNames:
    - packet_buf
    - correlation_id
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 117
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - ControllerPrivateAccessor::span
    - length
    - butil::IOBuf*::append
    - Authenticator*::GenerateCredential
    - Controller*::connection_type
    - Controller*::SetFailed
    - Span*::set_request_size
    linkageType: ''
    returnType: void
    signature: "void PackEspRequest(butil::IOBuf* packet_buf,\n                    SocketMessage**,\n
      \                   uint64_t correlation_id,\n                    const google::protobuf::MethodDescriptor*,\n
      \                   Controller* cntl,\n                    const butil::IOBuf&
      request,\n                    const Authenticator* auth)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:120,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:124,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:126,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:129,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:138,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:139,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:142,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:143,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:146,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:150,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:157,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:158,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 159
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::swap
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - LOG
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - DestroyingPtr::meta::copy_to
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: void ProcessEspResponse(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - read_body_progressively
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::policy::HttpContext::HttpContext
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: "void HttpContext(bool read_body_progressively,\n                         HttpMethod
      request_method = HTTP_METHOD_GET)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: brpc::policy::HttpContext::AddOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void AddOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: brpc::policy::HttpContext::RemoveOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void RemoveOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: brpc::policy::HttpContext::is_stage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_stage2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: brpc::policy::HttpContext::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::RemoveOneRefForStage2
    linkageType: ''
    returnType: void
    signature: void DestroyImpl() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetBodyReader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::HttpContext::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - SetBodyReader
    linkageType: ''
    returnType: void
    signature: void ReadProgressiveAttachmentBy(ProgressiveReader* r) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - read_body_progressively
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::policy::HttpContext::HttpContext
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: "void HttpContext(bool read_body_progressively,\n                         HttpMethod
      request_method = HTTP_METHOD_GET)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: brpc::policy::HttpContext::AddOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void AddOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: brpc::policy::HttpContext::RemoveOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 1
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void RemoveOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: brpc::policy::HttpContext::is_stage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_stage2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: brpc::policy::HttpContext::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::RemoveOneRefForStage2
    linkageType: ''
    returnType: void
    signature: void DestroyImpl() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetBodyReader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::HttpContext::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - SetBodyReader
    linkageType: ''
    returnType: void
    signature: void ReadProgressiveAttachmentBy(ProgressiveReader* r) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - read_body_progressively
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::policy::HttpContext::HttpContext
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: "void HttpContext(bool read_body_progressively,\n                         HttpMethod
      request_method = HTTP_METHOD_GET)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: brpc::policy::HttpContext::AddOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void AddOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: brpc::policy::HttpContext::RemoveOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 2
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void RemoveOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: brpc::policy::HttpContext::is_stage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_stage2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: brpc::policy::HttpContext::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::RemoveOneRefForStage2
    linkageType: ''
    returnType: void
    signature: void DestroyImpl() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetBodyReader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::HttpContext::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - SetBodyReader
    linkageType: ''
    returnType: void
    signature: void ReadProgressiveAttachmentBy(ProgressiveReader* r) override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - read_body_progressively
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::policy::HttpContext::HttpContext
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: "void HttpContext(bool read_body_progressively,\n                         HttpMethod
      request_method = HTTP_METHOD_GET)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: brpc::policy::HttpContext::AddOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void AddOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr<HttpContext>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: brpc::policy::HttpContext::RemoveOneRefForStage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 3
    functionsReached:
    - butil::intrusive_ptr<HttpContext>
    linkageType: ''
    returnType: void
    signature: void RemoveOneRefForStage2()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: brpc::policy::HttpContext::is_stage2
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_stage2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: brpc::policy::HttpContext::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::RemoveOneRefForStage2
    linkageType: ''
    returnType: void
    signature: void DestroyImpl() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetBodyReader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::HttpContext::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.h
    functionUses: 0
    functionsReached:
    - SetBodyReader
    linkageType: ''
    returnType: void
    signature: void ReadProgressiveAttachmentBy(ProgressiveReader* r) override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:65,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:66,1
    - Dst: PublicPbrpcRequest::requestbody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:69,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:70,1
    - Dst: PublicPbrpcRequest::requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:73,1
    - Dst: PublicPbrpcRequest::requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:74,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:75,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:78,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:84,1
    - Dst: NsheadMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:87,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:88,1
    - Dst: NsheadMeta*::set_user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: const_cast<NsheadMessage&>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:96,1
    - Dst: body::clear
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:97,1
    - Dst: body::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    - Dst: serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 99
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - serialized_request
    - id
    - Controller*::SetFailed
    - const_cast<NsheadMessage&>
    - log_id
    - NsheadMeta*::set_user_string
    - PublicPbrpcRequest::requesthead
    - compress_type
    - Server::MethodProperty*::method::full_name
    - has_log_id
    - body::clear
    - version
    - ServerPrivateAccessor
    - ParsePbFromIOBuf
    - NsheadMeta*::set_log_id
    - method_id
    - service
    - Controller*::CloseConnection
    - NsheadMeta*::set_compress_type
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_full_method_name
    - PublicPbrpcRequest::requestbody
    - PublicPbrpcRequest::requestbody_size
    - body::append
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseNsheadMeta(\n    const Server&
      svr, const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:104,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:105,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:106,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:108,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:109,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf(\n    const
      NsheadMeta& meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:119,1
    - Dst: PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:120,1
    - Dst: ResponseHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: ResponseBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: ResponseBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:125,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:129,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:130,1
    - Dst: ResponseBody*::mutable_serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:131,1
    - Dst: google::protobuf::Message*::SerializeToString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:132,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:133,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:137,1
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:140,1
    - Dst: ResponseHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:141,1
    - Dst: PublicPbrpcResponse::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:145,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 150
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - ResponseHead*::set_from_host
    - ResponseBody*::set_id
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - ResponseBody*::mutable_serialized_response
    - correlation_id
    - PublicPbrpcResponse::mutable_responsehead
    - user_string
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - ResponseBody*::set_version
    - PublicPbrpcResponse::add_responsebody
    - ResponseHead*::set_text
    - google::protobuf::Message*::SerializeToString
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - std::string*::data
    - butil::ip2str
    - Controller*::CloseConnection
    - Controller*::Failed
    - std::string*::swap
    - Controller*::response_compress_type
    - butil::my_ip
    - ResponseHead*::set_compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf(\n    const
      NsheadMeta& meta, Controller* cntl,\n    const google::protobuf::Message* pb_res,
      NsheadMessage* raw_res) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:153,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:157,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:158,1
    - Dst: PublicPbrpcResponse::responsebody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:162,1
    - Dst: PublicPbrpcResponse::responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:165,1
    - Dst: PublicPbrpcResponse::responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:166,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:169,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:171,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:172,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:177,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:202,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:205,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:207,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:213,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 214
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - length
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::IOBuf::append
    - Controller*::set_response_compress_type
    - id
    - PublicPbrpcResponse::responsebody_size
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - serialized_response
    - butil::cpuwide_time_us
    - code
    - Span*::set_response_size
    - text
    - static_cast<uint64_t>
    - LOG
    - LOG_IF
    - PublicPbrpcResponse::responsehead
    - compress_type
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ParsePbFromString
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - PublicPbrpcResponse::responsebody
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessPublicPbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:220,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 225
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializePublicPbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                const google::protobuf::Message* request)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcRequest::mutable_requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:236,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:243,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:252,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:261,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:265,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:267,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:270,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:272,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 32
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 284
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - RequestBody*::set_version
    - RequestBody*::set_id
    - Controller*::request_compress_type
    - butil::IOBuf*::append
    - RequestHead*::set_connection
    - RequestHead*::set_charset
    - PublicPbrpcRequest::mutable_requesthead
    - RequestHead*::set_log_id
    - RequestHead*::set_from_host
    - Controller*::SetFailed
    - strftime
    - RequestHead*::set_create_time
    - RequestHead*::set_content_type
    - time
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - RequestBody*::set_charset
    - RequestBody*::set_service
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - copy_to
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - memset
    - RequestBody*::mutable_serialized_request
    - snprintf
    - PublicPbrpcRequest::add_requestbody
    - butil::ip2str
    - GetProtobufByteSize
    - RequestHead*::set_compress_type
    - localtime
    - ControllerPrivateAccessor
    - RequestBody*::set_method_id
    - butil::my_ip
    - Controller*::connection_type
    linkageType: ''
    returnType: void
    signature: "void PackPublicPbrpcRequest(butil::IOBuf* buf,\n                            SocketMessage**,\n
      \                           uint64_t correlation_id,\n                            const
      google::protobuf::MethodDescriptor* method,\n                            Controller*
      controller,\n                            const butil::IOBuf& request,\n                            const
      Authenticator* /*not supported*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:65,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:66,1
    - Dst: PublicPbrpcRequest::requestbody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:69,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:70,1
    - Dst: PublicPbrpcRequest::requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:73,1
    - Dst: PublicPbrpcRequest::requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:74,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:75,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:78,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:84,1
    - Dst: NsheadMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:87,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:88,1
    - Dst: NsheadMeta*::set_user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: const_cast<NsheadMessage&>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:96,1
    - Dst: body::clear
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:97,1
    - Dst: body::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    - Dst: serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 99
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - serialized_request
    - id
    - Controller*::SetFailed
    - const_cast<NsheadMessage&>
    - log_id
    - NsheadMeta*::set_user_string
    - PublicPbrpcRequest::requesthead
    - compress_type
    - Server::MethodProperty*::method::full_name
    - has_log_id
    - body::clear
    - version
    - ServerPrivateAccessor
    - ParsePbFromIOBuf
    - NsheadMeta*::set_log_id
    - method_id
    - service
    - Controller*::CloseConnection
    - NsheadMeta*::set_compress_type
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_full_method_name
    - PublicPbrpcRequest::requestbody
    - PublicPbrpcRequest::requestbody_size
    - body::append
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseNsheadMeta(\n    const Server&
      svr, const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:104,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:105,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:106,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:108,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:109,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf(\n    const
      NsheadMeta& meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:119,1
    - Dst: PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:120,1
    - Dst: ResponseHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: ResponseBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: ResponseBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:125,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:129,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:130,1
    - Dst: ResponseBody*::mutable_serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:131,1
    - Dst: google::protobuf::Message*::SerializeToString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:132,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:133,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:137,1
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:140,1
    - Dst: ResponseHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:141,1
    - Dst: PublicPbrpcResponse::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:145,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 150
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - ResponseHead*::set_from_host
    - ResponseBody*::set_id
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - ResponseBody*::mutable_serialized_response
    - correlation_id
    - PublicPbrpcResponse::mutable_responsehead
    - user_string
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - ResponseBody*::set_version
    - PublicPbrpcResponse::add_responsebody
    - ResponseHead*::set_text
    - google::protobuf::Message*::SerializeToString
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - std::string*::data
    - butil::ip2str
    - Controller*::CloseConnection
    - Controller*::Failed
    - std::string*::swap
    - Controller*::response_compress_type
    - butil::my_ip
    - ResponseHead*::set_compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf(\n    const
      NsheadMeta& meta, Controller* cntl,\n    const google::protobuf::Message* pb_res,
      NsheadMessage* raw_res) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:153,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:157,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:158,1
    - Dst: PublicPbrpcResponse::responsebody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:162,1
    - Dst: PublicPbrpcResponse::responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:165,1
    - Dst: PublicPbrpcResponse::responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:166,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:169,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:171,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:172,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:177,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:202,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:205,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:207,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:213,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 214
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - length
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::IOBuf::append
    - Controller*::set_response_compress_type
    - id
    - PublicPbrpcResponse::responsebody_size
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - serialized_response
    - butil::cpuwide_time_us
    - code
    - Span*::set_response_size
    - text
    - static_cast<uint64_t>
    - LOG
    - LOG_IF
    - PublicPbrpcResponse::responsehead
    - compress_type
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ParsePbFromString
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - PublicPbrpcResponse::responsebody
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessPublicPbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:220,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 225
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializePublicPbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                const google::protobuf::Message* request)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcRequest::mutable_requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:236,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:243,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:252,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:261,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:265,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:267,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:270,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:272,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 32
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 284
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - RequestBody*::set_version
    - RequestBody*::set_id
    - Controller*::request_compress_type
    - butil::IOBuf*::append
    - RequestHead*::set_connection
    - RequestHead*::set_charset
    - PublicPbrpcRequest::mutable_requesthead
    - RequestHead*::set_log_id
    - RequestHead*::set_from_host
    - Controller*::SetFailed
    - strftime
    - RequestHead*::set_create_time
    - RequestHead*::set_content_type
    - time
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - RequestBody*::set_charset
    - RequestBody*::set_service
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - copy_to
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - memset
    - RequestBody*::mutable_serialized_request
    - snprintf
    - PublicPbrpcRequest::add_requestbody
    - butil::ip2str
    - GetProtobufByteSize
    - RequestHead*::set_compress_type
    - localtime
    - ControllerPrivateAccessor
    - RequestBody*::set_method_id
    - butil::my_ip
    - Controller*::connection_type
    linkageType: ''
    returnType: void
    signature: "void PackPublicPbrpcRequest(butil::IOBuf* buf,\n                            SocketMessage**,\n
      \                           uint64_t correlation_id,\n                            const
      google::protobuf::MethodDescriptor* method,\n                            Controller*
      controller,\n                            const butil::IOBuf& request,\n                            const
      Authenticator* /*not supported*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:65,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:66,1
    - Dst: PublicPbrpcRequest::requestbody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:69,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:70,1
    - Dst: PublicPbrpcRequest::requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:73,1
    - Dst: PublicPbrpcRequest::requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:74,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:75,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:78,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:84,1
    - Dst: NsheadMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:87,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:88,1
    - Dst: NsheadMeta*::set_user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: const_cast<NsheadMessage&>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:96,1
    - Dst: body::clear
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:97,1
    - Dst: body::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    - Dst: serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 99
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - serialized_request
    - id
    - Controller*::SetFailed
    - const_cast<NsheadMessage&>
    - log_id
    - NsheadMeta*::set_user_string
    - PublicPbrpcRequest::requesthead
    - compress_type
    - Server::MethodProperty*::method::full_name
    - has_log_id
    - body::clear
    - version
    - ServerPrivateAccessor
    - ParsePbFromIOBuf
    - NsheadMeta*::set_log_id
    - method_id
    - service
    - Controller*::CloseConnection
    - NsheadMeta*::set_compress_type
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_full_method_name
    - PublicPbrpcRequest::requestbody
    - PublicPbrpcRequest::requestbody_size
    - body::append
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseNsheadMeta(\n    const Server&
      svr, const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:104,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:105,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:106,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:108,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:109,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf(\n    const
      NsheadMeta& meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:119,1
    - Dst: PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:120,1
    - Dst: ResponseHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: ResponseBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: ResponseBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:125,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:129,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:130,1
    - Dst: ResponseBody*::mutable_serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:131,1
    - Dst: google::protobuf::Message*::SerializeToString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:132,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:133,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:137,1
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:140,1
    - Dst: ResponseHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:141,1
    - Dst: PublicPbrpcResponse::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:145,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 150
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - ResponseHead*::set_from_host
    - ResponseBody*::set_id
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - ResponseBody*::mutable_serialized_response
    - correlation_id
    - PublicPbrpcResponse::mutable_responsehead
    - user_string
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - ResponseBody*::set_version
    - PublicPbrpcResponse::add_responsebody
    - ResponseHead*::set_text
    - google::protobuf::Message*::SerializeToString
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - std::string*::data
    - butil::ip2str
    - Controller*::CloseConnection
    - Controller*::Failed
    - std::string*::swap
    - Controller*::response_compress_type
    - butil::my_ip
    - ResponseHead*::set_compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf(\n    const
      NsheadMeta& meta, Controller* cntl,\n    const google::protobuf::Message* pb_res,
      NsheadMessage* raw_res) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:153,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:157,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:158,1
    - Dst: PublicPbrpcResponse::responsebody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:162,1
    - Dst: PublicPbrpcResponse::responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:165,1
    - Dst: PublicPbrpcResponse::responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:166,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:169,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:171,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:172,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:177,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:202,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:205,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:207,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:213,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 214
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - length
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::IOBuf::append
    - Controller*::set_response_compress_type
    - id
    - PublicPbrpcResponse::responsebody_size
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - serialized_response
    - butil::cpuwide_time_us
    - code
    - Span*::set_response_size
    - text
    - static_cast<uint64_t>
    - LOG
    - LOG_IF
    - PublicPbrpcResponse::responsehead
    - compress_type
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ParsePbFromString
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - PublicPbrpcResponse::responsebody
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessPublicPbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:220,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 225
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializePublicPbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                const google::protobuf::Message* request)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcRequest::mutable_requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:236,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:243,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:252,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:261,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:265,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:267,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:270,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:272,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 32
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 284
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - RequestBody*::set_version
    - RequestBody*::set_id
    - Controller*::request_compress_type
    - butil::IOBuf*::append
    - RequestHead*::set_connection
    - RequestHead*::set_charset
    - PublicPbrpcRequest::mutable_requesthead
    - RequestHead*::set_log_id
    - RequestHead*::set_from_host
    - Controller*::SetFailed
    - strftime
    - RequestHead*::set_create_time
    - RequestHead*::set_content_type
    - time
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - RequestBody*::set_charset
    - RequestBody*::set_service
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - copy_to
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - memset
    - RequestBody*::mutable_serialized_request
    - snprintf
    - PublicPbrpcRequest::add_requestbody
    - butil::ip2str
    - GetProtobufByteSize
    - RequestHead*::set_compress_type
    - localtime
    - ControllerPrivateAccessor
    - RequestBody*::set_method_id
    - butil::my_ip
    - Controller*::connection_type
    linkageType: ''
    returnType: void
    signature: "void PackPublicPbrpcRequest(butil::IOBuf* buf,\n                            SocketMessage**,\n
      \                           uint64_t correlation_id,\n                            const
      google::protobuf::MethodDescriptor* method,\n                            Controller*
      controller,\n                            const butil::IOBuf& request,\n                            const
      Authenticator* /*not supported*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:65,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:66,1
    - Dst: PublicPbrpcRequest::requestbody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:69,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:70,1
    - Dst: PublicPbrpcRequest::requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:73,1
    - Dst: PublicPbrpcRequest::requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:74,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:75,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:76,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:78,1
    - Dst: service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:79,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:82,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:83,1
    - Dst: has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:84,1
    - Dst: NsheadMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:85,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:87,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:88,1
    - Dst: NsheadMeta*::set_user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:91,1
    - Dst: const_cast<NsheadMessage&>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:96,1
    - Dst: body::clear
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:97,1
    - Dst: body::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    - Dst: serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 99
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - serialized_request
    - id
    - Controller*::SetFailed
    - const_cast<NsheadMessage&>
    - log_id
    - NsheadMeta*::set_user_string
    - PublicPbrpcRequest::requesthead
    - compress_type
    - Server::MethodProperty*::method::full_name
    - has_log_id
    - body::clear
    - version
    - ServerPrivateAccessor
    - ParsePbFromIOBuf
    - NsheadMeta*::set_log_id
    - method_id
    - service
    - Controller*::CloseConnection
    - NsheadMeta*::set_compress_type
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_full_method_name
    - PublicPbrpcRequest::requestbody
    - PublicPbrpcRequest::requestbody_size
    - body::append
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseNsheadMeta(\n    const Server&
      svr, const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:104,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:105,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:106,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:108,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:109,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 113
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::ParseRequestFromIOBuf(\n    const
      NsheadMeta& meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcResponse::mutable_responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:119,1
    - Dst: PublicPbrpcResponse::add_responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:120,1
    - Dst: ResponseHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:122,1
    - Dst: ResponseBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: user_string
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:123,1
    - Dst: ResponseBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:124,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:125,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:126,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:127,1
    - Dst: ResponseHead*::set_code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:129,1
    - Dst: ResponseHead*::set_text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:130,1
    - Dst: ResponseBody*::mutable_serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:131,1
    - Dst: google::protobuf::Message*::SerializeToString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:132,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:133,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:137,1
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:139,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:140,1
    - Dst: ResponseHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:141,1
    - Dst: PublicPbrpcResponse::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:145,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 150
    functionName: brpc::policy::PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::size
    - ResponseHead*::set_from_host
    - ResponseBody*::set_id
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - ResponseBody*::mutable_serialized_response
    - correlation_id
    - PublicPbrpcResponse::mutable_responsehead
    - user_string
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - ResponseBody*::set_version
    - PublicPbrpcResponse::add_responsebody
    - ResponseHead*::set_text
    - google::protobuf::Message*::SerializeToString
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - std::string*::data
    - butil::ip2str
    - Controller*::CloseConnection
    - Controller*::Failed
    - std::string*::swap
    - Controller*::response_compress_type
    - butil::my_ip
    - ResponseHead*::set_compress_type
    linkageType: ''
    returnType: void
    signature: "void PublicPbrpcServiceAdaptor::SerializeResponseToIOBuf(\n    const
      NsheadMeta& meta, Controller* cntl,\n    const google::protobuf::Message* pb_res,
      NsheadMessage* raw_res) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:153,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:157,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:158,1
    - Dst: PublicPbrpcResponse::responsebody_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:162,1
    - Dst: PublicPbrpcResponse::responsehead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:165,1
    - Dst: PublicPbrpcResponse::responsebody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:166,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:167,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:169,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:171,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:172,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:177,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:187,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:197,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:199,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:202,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:205,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:207,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:213,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 214
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - length
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::IOBuf::append
    - Controller*::set_response_compress_type
    - id
    - PublicPbrpcResponse::responsebody_size
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - serialized_response
    - butil::cpuwide_time_us
    - code
    - Span*::set_response_size
    - text
    - static_cast<uint64_t>
    - LOG
    - LOG_IF
    - PublicPbrpcResponse::responsehead
    - compress_type
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ParsePbFromString
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - PublicPbrpcResponse::responsebody
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessPublicPbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:220,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 225
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializePublicPbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                const google::protobuf::Message* request)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: PublicPbrpcRequest::mutable_requesthead
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:236,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:243,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:249,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:252,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:261,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:265,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:267,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:270,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:272,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 32
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 284
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - RequestBody*::set_version
    - RequestBody*::set_id
    - Controller*::request_compress_type
    - butil::IOBuf*::append
    - RequestHead*::set_connection
    - RequestHead*::set_charset
    - PublicPbrpcRequest::mutable_requesthead
    - RequestHead*::set_log_id
    - RequestHead*::set_from_host
    - Controller*::SetFailed
    - strftime
    - RequestHead*::set_create_time
    - RequestHead*::set_content_type
    - time
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - RequestBody*::set_charset
    - RequestBody*::set_service
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - copy_to
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - memset
    - RequestBody*::mutable_serialized_request
    - snprintf
    - PublicPbrpcRequest::add_requestbody
    - butil::ip2str
    - GetProtobufByteSize
    - RequestHead*::set_compress_type
    - localtime
    - ControllerPrivateAccessor
    - RequestBody*::set_method_id
    - butil::my_ip
    - Controller*::connection_type
    linkageType: ''
    returnType: void
    signature: "void PackPublicPbrpcRequest(butil::IOBuf* buf,\n                            SocketMessage**,\n
      \                           uint64_t correlation_id,\n                            const
      google::protobuf::MethodDescriptor* method,\n                            Controller*
      controller,\n                            const butil::IOBuf& request,\n                            const
      Authenticator* /*not supported*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::policy::SendMongoResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse(const Server *server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: SendMongoResponse::~SendMongoResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::~SendMongoResponse()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:67,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:69,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:70,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:76,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:77,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:83,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:88,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: number_returned
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:93,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:94,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:103,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 108
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - has_message
    - IsCloseConnection
    - MongoServiceAdaptor*::SerializeError
    - butil::IOBuf::append
    - header
    - options
    - butil::IOBuf::IOBuf
    - starting_from
    - butil::IOBuf::empty
    - PLOG
    - cursor_id
    - Failed
    - response_flags
    - Socket*::Write
    - message
    - Socket*::SetFailed
    - ControllerPrivateAccessor
    - number_returned
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:112,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:116,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:122,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:125,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:134,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:145,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:149,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:151,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:152,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:154,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:156,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 162
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBuf*::fetch
    - MongoContextMessage::MongoContextMessage
    - mongo_head_t::make_host_endian
    - MakeParseError
    - butil::IOBuf*::length
    - is_mongo_opcode
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - CHECK
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<uint32_t>
    - MakeMessage
    - butil::IOBuf*::cutn
    - Socket*::reset_parsing_context
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMongoMessage(butil::IOBuf* source,\n                              Socket*
      socket, bool /*read_eof*/, const void *arg)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:175,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:176,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:181,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:184,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:192,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:197,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:206,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:208,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:209,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:210,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:221,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:226,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:229,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:233,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:240,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:244,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:250,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:252,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:257,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:258,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:263,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:265,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:266,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:269,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:270,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:271,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:282,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:283,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:286,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:294,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 295
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - SendMongoResponse*::res::mutable_header
    - DestroyingPtr::meta::fetch
    - static_cast<MongoOp>
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::to_string
    - Server*::IsRunning
    - SendMongoResponse*::req::set_message
    - SendMongoResponse*::req::mutable_header
    - bthread_assign_data
    - ScopedNonServiceError::release
    - std::string::c_str
    - MongoOp_IsValid
    - google::protobuf::ServiceDescriptor*::method
    - MethodStatus*::OnRequested
    - Socket*::parsing_context
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - MongoContextMessage*::context
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::ReleaseSocket
    - Server*::thread_local_options
    - SendMongoResponse*::cntl::set_log_id
    - SocketUniquePtr::get
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - SendMongoResponse*::cntl::set_mongo_session_data
    - Server*::options
    - BeginRunningUserCode
    - ServerPrivateAccessor
    - Socket*::remote_side
    - Socket*::id
    - dynamic_cast<MongoContextMessage*>
    - SendMongoResponse*::cntl::SetFailed
    - ControllerPrivateAccessor::set_server
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - SendMongoResponse::SendMongoResponse
    - SendMongoResponse*::Run
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessMongoRequest(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::policy::SendMongoResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse(const Server *server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: SendMongoResponse::~SendMongoResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::~SendMongoResponse()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:67,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:69,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:70,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:76,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:77,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:83,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:88,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: number_returned
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:93,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:94,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:103,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 108
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - has_message
    - IsCloseConnection
    - MongoServiceAdaptor*::SerializeError
    - butil::IOBuf::append
    - header
    - options
    - butil::IOBuf::IOBuf
    - starting_from
    - butil::IOBuf::empty
    - PLOG
    - cursor_id
    - Failed
    - response_flags
    - Socket*::Write
    - message
    - Socket*::SetFailed
    - ControllerPrivateAccessor
    - number_returned
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:112,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:116,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:122,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:125,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:134,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:145,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:149,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:151,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:152,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:154,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:156,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 162
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBuf*::fetch
    - MongoContextMessage::MongoContextMessage
    - mongo_head_t::make_host_endian
    - MakeParseError
    - butil::IOBuf*::length
    - is_mongo_opcode
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - CHECK
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<uint32_t>
    - MakeMessage
    - butil::IOBuf*::cutn
    - Socket*::reset_parsing_context
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMongoMessage(butil::IOBuf* source,\n                              Socket*
      socket, bool /*read_eof*/, const void *arg)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:175,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:176,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:181,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:184,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:192,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:197,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:206,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:208,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:209,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:210,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:221,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:226,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:229,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:233,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:240,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:244,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:250,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:252,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:257,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:258,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:263,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:265,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:266,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:269,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:270,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:271,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:282,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:283,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:286,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:294,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 295
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - SendMongoResponse*::res::mutable_header
    - DestroyingPtr::meta::fetch
    - static_cast<MongoOp>
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::to_string
    - Server*::IsRunning
    - SendMongoResponse*::req::set_message
    - SendMongoResponse*::req::mutable_header
    - bthread_assign_data
    - ScopedNonServiceError::release
    - std::string::c_str
    - MongoOp_IsValid
    - google::protobuf::ServiceDescriptor*::method
    - MethodStatus*::OnRequested
    - Socket*::parsing_context
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - MongoContextMessage*::context
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::ReleaseSocket
    - Server*::thread_local_options
    - SendMongoResponse*::cntl::set_log_id
    - SocketUniquePtr::get
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - SendMongoResponse*::cntl::set_mongo_session_data
    - Server*::options
    - BeginRunningUserCode
    - ServerPrivateAccessor
    - Socket*::remote_side
    - Socket*::id
    - dynamic_cast<MongoContextMessage*>
    - SendMongoResponse*::cntl::SetFailed
    - ControllerPrivateAccessor::set_server
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - SendMongoResponse::SendMongoResponse
    - SendMongoResponse*::Run
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessMongoRequest(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::policy::SendMongoResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse(const Server *server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: SendMongoResponse::~SendMongoResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::~SendMongoResponse()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:67,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:69,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:70,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:76,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:77,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:83,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:88,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: number_returned
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:93,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:94,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:103,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 108
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - has_message
    - IsCloseConnection
    - MongoServiceAdaptor*::SerializeError
    - butil::IOBuf::append
    - header
    - options
    - butil::IOBuf::IOBuf
    - starting_from
    - butil::IOBuf::empty
    - PLOG
    - cursor_id
    - Failed
    - response_flags
    - Socket*::Write
    - message
    - Socket*::SetFailed
    - ControllerPrivateAccessor
    - number_returned
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:112,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:116,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:122,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:125,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:134,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:145,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:149,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:151,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:152,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:154,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:156,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 162
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBuf*::fetch
    - MongoContextMessage::MongoContextMessage
    - mongo_head_t::make_host_endian
    - MakeParseError
    - butil::IOBuf*::length
    - is_mongo_opcode
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - CHECK
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<uint32_t>
    - MakeMessage
    - butil::IOBuf*::cutn
    - Socket*::reset_parsing_context
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMongoMessage(butil::IOBuf* source,\n                              Socket*
      socket, bool /*read_eof*/, const void *arg)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:175,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:176,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:181,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:184,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:192,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:197,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:206,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:208,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:209,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:210,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:221,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:226,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:229,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:233,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:240,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:244,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:250,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:252,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:257,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:258,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:263,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:265,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:266,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:269,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:270,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:271,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:282,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:283,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:286,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:294,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 295
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - SendMongoResponse*::res::mutable_header
    - DestroyingPtr::meta::fetch
    - static_cast<MongoOp>
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::to_string
    - Server*::IsRunning
    - SendMongoResponse*::req::set_message
    - SendMongoResponse*::req::mutable_header
    - bthread_assign_data
    - ScopedNonServiceError::release
    - std::string::c_str
    - MongoOp_IsValid
    - google::protobuf::ServiceDescriptor*::method
    - MethodStatus*::OnRequested
    - Socket*::parsing_context
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - MongoContextMessage*::context
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::ReleaseSocket
    - Server*::thread_local_options
    - SendMongoResponse*::cntl::set_log_id
    - SocketUniquePtr::get
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - SendMongoResponse*::cntl::set_mongo_session_data
    - Server*::options
    - BeginRunningUserCode
    - ServerPrivateAccessor
    - Socket*::remote_side
    - Socket*::id
    - dynamic_cast<MongoContextMessage*>
    - SendMongoResponse*::cntl::SetFailed
    - ControllerPrivateAccessor::set_server
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - SendMongoResponse::SendMongoResponse
    - SendMongoResponse*::Run
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessMongoRequest(InputMessageBase* msg_base)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::policy::SendMongoResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse(const Server *server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogErrorTextAndDelete
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: SendMongoResponse::~SendMongoResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - LogErrorTextAndDelete
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::~SendMongoResponse()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:67,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:69,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:70,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:76,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:77,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:83,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:88,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: number_returned
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:93,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:94,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:95,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:103,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 108
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - has_message
    - IsCloseConnection
    - MongoServiceAdaptor*::SerializeError
    - butil::IOBuf::append
    - header
    - options
    - butil::IOBuf::IOBuf
    - starting_from
    - butil::IOBuf::empty
    - PLOG
    - cursor_id
    - Failed
    - response_flags
    - Socket*::Write
    - message
    - Socket*::SetFailed
    - ControllerPrivateAccessor
    - number_returned
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:112,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:113,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:116,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:122,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:125,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:128,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:134,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:145,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:149,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:151,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:152,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:154,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:156,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 162
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBuf*::fetch
    - MongoContextMessage::MongoContextMessage
    - mongo_head_t::make_host_endian
    - MakeParseError
    - butil::IOBuf*::length
    - is_mongo_opcode
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - CHECK
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<uint32_t>
    - MakeMessage
    - butil::IOBuf*::cutn
    - Socket*::reset_parsing_context
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMongoMessage(butil::IOBuf* source,\n                              Socket*
      socket, bool /*read_eof*/, const void *arg)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:175,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:176,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:177,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:181,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:184,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:192,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:197,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:206,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:208,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:209,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:210,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:221,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:226,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:229,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:233,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:240,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:244,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:250,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:252,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:257,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:258,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:263,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:264,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:265,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:266,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:269,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:270,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:271,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:282,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:283,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:286,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:294,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 295
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - SendMongoResponse*::res::mutable_header
    - DestroyingPtr::meta::fetch
    - static_cast<MongoOp>
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::to_string
    - Server*::IsRunning
    - SendMongoResponse*::req::set_message
    - SendMongoResponse*::req::mutable_header
    - bthread_assign_data
    - ScopedNonServiceError::release
    - std::string::c_str
    - MongoOp_IsValid
    - google::protobuf::ServiceDescriptor*::method
    - MethodStatus*::OnRequested
    - Socket*::parsing_context
    - brpc::policy::EndRunningCallMethodInPool
    - static_cast<const Server*>
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - MongoContextMessage*::context
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::ReleaseSocket
    - Server*::thread_local_options
    - SendMongoResponse*::cntl::set_log_id
    - SocketUniquePtr::get
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - SendMongoResponse*::cntl::set_mongo_session_data
    - Server*::options
    - BeginRunningUserCode
    - ServerPrivateAccessor
    - Socket*::remote_side
    - Socket*::id
    - dynamic_cast<MongoContextMessage*>
    - SendMongoResponse*::cntl::SetFailed
    - ControllerPrivateAccessor::set_server
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::service::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - SendMongoResponse::SendMongoResponse
    - SendMongoResponse*::Run
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void ProcessMongoRequest(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:58,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:67,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:106,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:110,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:112,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:115,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:122,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:125,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:130,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:132,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - DoReject
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - brpc::SetTrackMeAddress
    - StartRecover
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RoundRobinLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer*::SetParameters
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    linkageType: ''
    returnType: RoundRobinLoadBalancer
    signature: "RoundRobinLoadBalancer * RoundRobinLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void RoundRobinLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RoundRobinLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:58,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:67,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:106,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:110,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:112,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:115,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:122,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:125,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:130,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:132,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - DoReject
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - brpc::SetTrackMeAddress
    - StartRecover
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RoundRobinLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer*::SetParameters
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    linkageType: ''
    returnType: RoundRobinLoadBalancer
    signature: "RoundRobinLoadBalancer * RoundRobinLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void RoundRobinLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RoundRobinLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:58,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:67,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:106,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:110,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:112,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:115,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:122,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:125,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:130,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:132,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - DoReject
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - brpc::SetTrackMeAddress
    - StartRecover
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RoundRobinLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer*::SetParameters
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    linkageType: ''
    returnType: RoundRobinLoadBalancer
    signature: "RoundRobinLoadBalancer * RoundRobinLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void RoundRobinLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RoundRobinLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:30,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:31,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:33,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:34,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:37,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::policy::RoundRobinLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:43,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:44,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:46,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:48,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: brpc::policy::RoundRobinLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:58,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:67,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: brpc::policy::RoundRobinLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::RoundRobinLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:83,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:84,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: brpc::policy::RoundRobinLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: brpc::policy::RoundRobinLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t RoundRobinLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:98,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:101,1
    - Dst: StopRecoverIfNecessary
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:105,1
    - Dst: DoReject
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:106,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:110,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:112,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:115,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:122,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:125,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:130,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:132,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 134
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - DoReject
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - brpc::SetTrackMeAddress
    - StartRecover
    - Read
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int RoundRobinLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:139,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer*::SetParameters
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    linkageType: ''
    returnType: RoundRobinLoadBalancer
    signature: "RoundRobinLoadBalancer * RoundRobinLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: brpc::policy::RoundRobinLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RoundRobinLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:158,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    linkageType: ''
    returnType: void
    signature: "void RoundRobinLoadBalancer::Describe(\n    std::ostream &os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRecoverPolicyByParams
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: brpc::policy::RoundRobinLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetRecoverPolicyByParams
    linkageType: ''
    returnType: bool
    signature: bool RoundRobinLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:55,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:57,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:61,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:62,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:63,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:66,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:69,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 71
    functionName: brpc::policy::NovaServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - NsheadMeta*::set_compress_type
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:76,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:77,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:78,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:80,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:81,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 85
    functionName: brpc::policy::NovaServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&
      meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:90,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:91,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:98,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:102,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:103,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 106
    functionName: brpc::policy::NovaServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - SerializeAsCompressedData
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:109,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:111,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:116,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:118,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:119,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:124,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:129,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:131,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:137,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:144,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:146,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:151,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 152
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Socket*::remote_side
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - ParseFromCompressedData
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNovaResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:156,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:158,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNovaRequest(butil::IOBuf* buf, Controller* cntl,\n                          const
      google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:174,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:179,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:183,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:186,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:188,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 200
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_compress_type
    - google::protobuf::MethodDescriptor*::index
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNovaRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* controller,\n                     const
      butil::IOBuf& request,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:55,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:57,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:61,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:62,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:63,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:66,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:69,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 71
    functionName: brpc::policy::NovaServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - NsheadMeta*::set_compress_type
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:76,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:77,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:78,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:80,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:81,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 85
    functionName: brpc::policy::NovaServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&
      meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:90,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:91,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:98,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:102,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:103,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 106
    functionName: brpc::policy::NovaServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - SerializeAsCompressedData
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:109,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:111,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:116,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:118,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:119,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:124,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:129,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:131,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:137,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:144,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:146,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:151,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 152
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Socket*::remote_side
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - ParseFromCompressedData
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNovaResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:156,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:158,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNovaRequest(butil::IOBuf* buf, Controller* cntl,\n                          const
      google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:174,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:179,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:183,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:186,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:188,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 200
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_compress_type
    - google::protobuf::MethodDescriptor*::index
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNovaRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* controller,\n                     const
      butil::IOBuf& request,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:55,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:57,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:61,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:62,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:63,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:66,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:69,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 71
    functionName: brpc::policy::NovaServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - NsheadMeta*::set_compress_type
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:76,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:77,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:78,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:80,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:81,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 85
    functionName: brpc::policy::NovaServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&
      meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:90,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:91,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:98,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:102,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:103,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 106
    functionName: brpc::policy::NovaServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - SerializeAsCompressedData
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:109,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:111,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:116,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:118,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:119,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:124,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:129,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:131,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:137,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:144,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:146,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:151,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 152
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Socket*::remote_side
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - ParseFromCompressedData
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNovaResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:156,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:158,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNovaRequest(butil::IOBuf* buf, Controller* cntl,\n                          const
      google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:174,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:179,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:183,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:186,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:188,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 200
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_compress_type
    - google::protobuf::MethodDescriptor*::index
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNovaRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* controller,\n                     const
      butil::IOBuf& request,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:55,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:57,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:61,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:62,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:63,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:66,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:67,1
    - Dst: NsheadMeta*::set_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:69,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 4
    argNames:
    - ' svr'
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - Server
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 71
    functionName: brpc::policy::NovaServiceAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - NsheadMeta*::set_compress_type
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:76,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:77,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:78,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:80,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:81,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:83,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' meta'
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMeta
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 85
    functionName: brpc::policy::NovaServiceAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - ParseFromCompressedData
    - body::length
    - Controller*::SetFailed
    - compress_type
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&
      meta, const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:90,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:91,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:98,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:102,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:103,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 106
    functionName: brpc::policy::NovaServiceAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - SerializeAsCompressedData
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NovaServiceAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:109,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:111,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:114,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:116,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:118,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:119,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:124,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:129,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:131,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:137,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:144,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:146,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:151,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 152
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::fetch
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Socket*::remote_side
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - ParseFromCompressedData
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNovaResponse(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:156,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:158,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeRequestDefault
    - Controller*::request_compress_type
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNovaRequest(butil::IOBuf* buf, Controller* cntl,\n                          const
      google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:174,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:179,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:183,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:186,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:188,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:191,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 5
    argNames:
    - buf
    - correlation_id
    - method
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 200
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::request_compress_type
    - google::protobuf::MethodDescriptor*::index
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNovaRequest(butil::IOBuf* buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* controller,\n                     const
      butil::IOBuf& request,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvVideoFrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::policy::is_video_frame_type_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_frame_type_valid(FlvVideoFrameType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - FlvVideoCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::policy::is_video_codec_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_codec_valid(FlvVideoCodec id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: brpc::policy::RtmpMessageHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpMessageHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: brpc::policy::is_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 177
    functionName: brpc::policy::RtmpUnsentMessage::RtmpUnsentMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpUnsentMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: brpc::policy::RtmpCreateStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpCreateStreamMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: ~RtmpTransactionHandler()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpTransactionHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    functionName: brpc::policy::RtmpContext::client_options
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions * client_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::RtmpContext::server
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    functionName: brpc::policy::RtmpContext::service
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpService
    signature: RtmpService * service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 275
    functionName: brpc::policy::RtmpContext::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: brpc::policy::RtmpContext::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 325
    functionName: brpc::policy::RtmpContext::SetConnectCallback
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetConnectCallback(void (*app_connect_done)(int, void*), void*
      data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    functionName: brpc::policy::RtmpContext::unconnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool unconnected() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: brpc::policy::RtmpContext::only_check_simple_s0s1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void only_check_simple_s0s1()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 332
    functionName: brpc::policy::RtmpContext::can_stream_be_created_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool can_stream_be_created_with_play_or_publish() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - create_stream_with_play_or_publish
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 338
    functionName: brpc::policy::RtmpContext::set_create_stream_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_create_stream_with_play_or_publish(bool create_stream_with_play_or_publish)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - simplified_rtmp
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 341
    functionName: brpc::policy::RtmpContext::set_simplified_rtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_simplified_rtmp(bool simplified_rtmp)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 421
    functionName: brpc::policy::RtmpChunkStream::connection_context
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpContext
    signature: RtmpContext * connection_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 423
    functionName: brpc::policy::RtmpChunkStream::chunk_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t chunk_stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: brpc::policy::Read1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t Read1Byte(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 576
    functionName: brpc::policy::ReadBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ReadBigEndian2Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 586
    functionName: brpc::policy::ReadBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian3Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 596
    functionName: brpc::policy::ReadBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian4Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 601
    functionName: brpc::policy::Write1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Write1Byte(char** buf, uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 608
    functionName: brpc::policy::WriteBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian2Bytes(char** buf, uint16_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 617
    functionName: brpc::policy::WriteBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 12
    functionsReached:
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian3Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 626
    functionName: brpc::policy::WriteBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 635
    functionName: brpc::policy::WriteLittleEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteLittleEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvVideoFrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::policy::is_video_frame_type_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_frame_type_valid(FlvVideoFrameType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - FlvVideoCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::policy::is_video_codec_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_codec_valid(FlvVideoCodec id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: brpc::policy::RtmpMessageHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpMessageHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: brpc::policy::is_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 177
    functionName: brpc::policy::RtmpUnsentMessage::RtmpUnsentMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpUnsentMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: brpc::policy::RtmpCreateStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpCreateStreamMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: ~RtmpTransactionHandler()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpTransactionHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    functionName: brpc::policy::RtmpContext::client_options
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions * client_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::RtmpContext::server
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    functionName: brpc::policy::RtmpContext::service
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: RtmpService
    signature: RtmpService * service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 275
    functionName: brpc::policy::RtmpContext::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: brpc::policy::RtmpContext::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 325
    functionName: brpc::policy::RtmpContext::SetConnectCallback
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetConnectCallback(void (*app_connect_done)(int, void*), void*
      data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    functionName: brpc::policy::RtmpContext::unconnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool unconnected() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: brpc::policy::RtmpContext::only_check_simple_s0s1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void only_check_simple_s0s1()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 332
    functionName: brpc::policy::RtmpContext::can_stream_be_created_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool can_stream_be_created_with_play_or_publish() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - create_stream_with_play_or_publish
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 338
    functionName: brpc::policy::RtmpContext::set_create_stream_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_create_stream_with_play_or_publish(bool create_stream_with_play_or_publish)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - simplified_rtmp
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 341
    functionName: brpc::policy::RtmpContext::set_simplified_rtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_simplified_rtmp(bool simplified_rtmp)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 421
    functionName: brpc::policy::RtmpChunkStream::connection_context
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpContext
    signature: RtmpContext * connection_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 423
    functionName: brpc::policy::RtmpChunkStream::chunk_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t chunk_stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: brpc::policy::Read1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t Read1Byte(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 576
    functionName: brpc::policy::ReadBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ReadBigEndian2Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 586
    functionName: brpc::policy::ReadBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian3Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 596
    functionName: brpc::policy::ReadBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian4Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 601
    functionName: brpc::policy::Write1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Write1Byte(char** buf, uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 608
    functionName: brpc::policy::WriteBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian2Bytes(char** buf, uint16_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 617
    functionName: brpc::policy::WriteBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 12
    functionsReached:
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian3Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 626
    functionName: brpc::policy::WriteBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 635
    functionName: brpc::policy::WriteLittleEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteLittleEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvVideoFrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::policy::is_video_frame_type_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_frame_type_valid(FlvVideoFrameType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - FlvVideoCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::policy::is_video_codec_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_codec_valid(FlvVideoCodec id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: brpc::policy::RtmpMessageHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpMessageHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: brpc::policy::is_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 177
    functionName: brpc::policy::RtmpUnsentMessage::RtmpUnsentMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpUnsentMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: brpc::policy::RtmpCreateStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpCreateStreamMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: ~RtmpTransactionHandler()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpTransactionHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    functionName: brpc::policy::RtmpContext::client_options
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions * client_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::RtmpContext::server
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    functionName: brpc::policy::RtmpContext::service
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: RtmpService
    signature: RtmpService * service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 275
    functionName: brpc::policy::RtmpContext::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: brpc::policy::RtmpContext::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 325
    functionName: brpc::policy::RtmpContext::SetConnectCallback
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetConnectCallback(void (*app_connect_done)(int, void*), void*
      data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    functionName: brpc::policy::RtmpContext::unconnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool unconnected() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: brpc::policy::RtmpContext::only_check_simple_s0s1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void only_check_simple_s0s1()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 332
    functionName: brpc::policy::RtmpContext::can_stream_be_created_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool can_stream_be_created_with_play_or_publish() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - create_stream_with_play_or_publish
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 338
    functionName: brpc::policy::RtmpContext::set_create_stream_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_create_stream_with_play_or_publish(bool create_stream_with_play_or_publish)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - simplified_rtmp
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 341
    functionName: brpc::policy::RtmpContext::set_simplified_rtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_simplified_rtmp(bool simplified_rtmp)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 421
    functionName: brpc::policy::RtmpChunkStream::connection_context
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpContext
    signature: RtmpContext * connection_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 423
    functionName: brpc::policy::RtmpChunkStream::chunk_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t chunk_stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: brpc::policy::Read1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t Read1Byte(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 576
    functionName: brpc::policy::ReadBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ReadBigEndian2Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 586
    functionName: brpc::policy::ReadBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian3Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 596
    functionName: brpc::policy::ReadBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian4Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 601
    functionName: brpc::policy::Write1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Write1Byte(char** buf, uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 608
    functionName: brpc::policy::WriteBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian2Bytes(char** buf, uint16_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 617
    functionName: brpc::policy::WriteBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 12
    functionsReached:
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian3Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 626
    functionName: brpc::policy::WriteBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 635
    functionName: brpc::policy::WriteLittleEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteLittleEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - FlvVideoFrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::policy::is_video_frame_type_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_frame_type_valid(FlvVideoFrameType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - FlvVideoCodec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::policy::is_video_codec_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_video_codec_valid(FlvVideoCodec id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: brpc::policy::RtmpMessageHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpMessageHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: brpc::policy::is_valid
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 177
    functionName: brpc::policy::RtmpUnsentMessage::RtmpUnsentMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpUnsentMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: brpc::policy::RtmpCreateStreamMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpCreateStreamMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: ~RtmpTransactionHandler()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RtmpTransactionHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    functionName: brpc::policy::RtmpContext::client_options
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpClientOptions
    signature: RtmpClientOptions * client_options() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 272
    functionName: brpc::policy::RtmpContext::server
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * server() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    functionName: brpc::policy::RtmpContext::service
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: RtmpService
    signature: RtmpService * service() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 275
    functionName: brpc::policy::RtmpContext::is_server_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_server_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:276,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: brpc::policy::RtmpContext::is_client_side
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::service
    linkageType: ''
    returnType: bool
    signature: bool is_client_side() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 325
    functionName: brpc::policy::RtmpContext::SetConnectCallback
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetConnectCallback(void (*app_connect_done)(int, void*), void*
      data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    functionName: brpc::policy::RtmpContext::unconnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool unconnected() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: brpc::policy::RtmpContext::only_check_simple_s0s1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void only_check_simple_s0s1()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 332
    functionName: brpc::policy::RtmpContext::can_stream_be_created_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool can_stream_be_created_with_play_or_publish() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - create_stream_with_play_or_publish
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 338
    functionName: brpc::policy::RtmpContext::set_create_stream_with_play_or_publish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_create_stream_with_play_or_publish(bool create_stream_with_play_or_publish)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - simplified_rtmp
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 341
    functionName: brpc::policy::RtmpContext::set_simplified_rtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_simplified_rtmp(bool simplified_rtmp)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 421
    functionName: brpc::policy::RtmpChunkStream::connection_context
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RtmpContext
    signature: RtmpContext * connection_context() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 423
    functionName: brpc::policy::RtmpChunkStream::chunk_stream_id
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t chunk_stream_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: brpc::policy::Read1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t Read1Byte(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 576
    functionName: brpc::policy::ReadBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ReadBigEndian2Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 586
    functionName: brpc::policy::ReadBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian3Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 596
    functionName: brpc::policy::ReadBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ReadBigEndian4Bytes(const void* void_buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 601
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 601
    functionName: brpc::policy::Write1Byte
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Write1Byte(char** buf, uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 608
    functionName: brpc::policy::WriteBigEndian2Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian2Bytes(char** buf, uint16_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.h:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 617
    functionName: brpc::policy::WriteBigEndian3Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 12
    functionsReached:
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian3Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 626
    functionName: brpc::policy::WriteBigEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char**
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 635
    functionName: brpc::policy::WriteLittleEndian4Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WriteLittleEndian4Bytes(char** buf, uint32_t val)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: baas::CredentialGenerator::CredentialGenerator
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:30,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:31,1
    - Dst: baas::CredentialVerifier::CredentialVerifier
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:36,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - gen
    - ver
    argTypes:
    - baas::CredentialGenerator*
    - baas::CredentialVerifier*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 41
    functionName: brpc::policy::GianoAuthenticator::GianoAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - baas::CredentialVerifier::CredentialVerifier
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    linkageType: ''
    returnType: void
    signature: "void GianoAuthenticator::GianoAuthenticator(const baas::CredentialGenerator*
      gen,\n                                       const baas::CredentialVerifier*
      ver)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: GianoAuthenticator::~GianoAuthenticator()
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GianoAuthenticator::~GianoAuthenticator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:53,1
    - Dst: brpc::policy::GianoAuthenticator::GenerateCredential
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: brpc::policy::GianoAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::GianoAuthenticator::GenerateCredential
    - LOG
    linkageType: ''
    returnType: int
    signature: int GianoAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:66,1
    - Dst: Verify
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:71,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:74,1
    - Dst: baas::sdk::GetReturnCodeMessage
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:75,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: baas::CredentialContext::user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: AuthContext*::set_group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: baas::CredentialContext::group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: AuthContext*::set_roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: baas::CredentialContext::roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: baas::CredentialContext::starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: AuthContext*::set_is_service
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    - Dst: baas::CredentialContext::IsService
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - ' auth_str'
    - ' client_addr'
    - out_ctx
    argTypes:
    - std::string
    - butil::EndPoint
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 86
    functionName: brpc::policy::GianoAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - AuthContext*::set_roles
    - baas::CredentialContext::roles
    - AuthContext*::set_starter
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::group
    - baas::CredentialContext::starter
    - AuthContext*::set_group
    - AuthContext*::set_is_service
    - baas::CredentialContext::IsService
    - Verify
    - LOG
    linkageType: ''
    returnType: int
    signature: "int GianoAuthenticator::VerifyCredential(\n        const std::string&
      auth_str,\n        const butil::EndPoint& client_addr,\n        AuthContext*
      out_ctx) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: baas::CredentialGenerator::CredentialGenerator
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:30,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:31,1
    - Dst: baas::CredentialVerifier::CredentialVerifier
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:36,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - gen
    - ver
    argTypes:
    - baas::CredentialGenerator*
    - baas::CredentialVerifier*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 41
    functionName: brpc::policy::GianoAuthenticator::GianoAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - baas::CredentialVerifier::CredentialVerifier
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    linkageType: ''
    returnType: void
    signature: "void GianoAuthenticator::GianoAuthenticator(const baas::CredentialGenerator*
      gen,\n                                       const baas::CredentialVerifier*
      ver)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: GianoAuthenticator::~GianoAuthenticator()
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GianoAuthenticator::~GianoAuthenticator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:53,1
    - Dst: brpc::policy::GianoAuthenticator::GenerateCredential
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: brpc::policy::GianoAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::GianoAuthenticator::GenerateCredential
    - LOG
    linkageType: ''
    returnType: int
    signature: int GianoAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:66,1
    - Dst: Verify
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:71,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:74,1
    - Dst: baas::sdk::GetReturnCodeMessage
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:75,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: baas::CredentialContext::user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: AuthContext*::set_group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: baas::CredentialContext::group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: AuthContext*::set_roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: baas::CredentialContext::roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: baas::CredentialContext::starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: AuthContext*::set_is_service
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    - Dst: baas::CredentialContext::IsService
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - ' auth_str'
    - ' client_addr'
    - out_ctx
    argTypes:
    - std::string
    - butil::EndPoint
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 86
    functionName: brpc::policy::GianoAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - AuthContext*::set_roles
    - baas::CredentialContext::roles
    - AuthContext*::set_starter
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::group
    - baas::CredentialContext::starter
    - AuthContext*::set_group
    - AuthContext*::set_is_service
    - baas::CredentialContext::IsService
    - Verify
    - LOG
    linkageType: ''
    returnType: int
    signature: "int GianoAuthenticator::VerifyCredential(\n        const std::string&
      auth_str,\n        const butil::EndPoint& client_addr,\n        AuthContext*
      out_ctx) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: baas::CredentialGenerator::CredentialGenerator
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:30,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:31,1
    - Dst: baas::CredentialVerifier::CredentialVerifier
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:36,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - gen
    - ver
    argTypes:
    - baas::CredentialGenerator*
    - baas::CredentialVerifier*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 41
    functionName: brpc::policy::GianoAuthenticator::GianoAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - baas::CredentialVerifier::CredentialVerifier
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    linkageType: ''
    returnType: void
    signature: "void GianoAuthenticator::GianoAuthenticator(const baas::CredentialGenerator*
      gen,\n                                       const baas::CredentialVerifier*
      ver)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: GianoAuthenticator::~GianoAuthenticator()
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GianoAuthenticator::~GianoAuthenticator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:53,1
    - Dst: brpc::policy::GianoAuthenticator::GenerateCredential
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: brpc::policy::GianoAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::GianoAuthenticator::GenerateCredential
    - LOG
    linkageType: ''
    returnType: int
    signature: int GianoAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:66,1
    - Dst: Verify
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:71,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:74,1
    - Dst: baas::sdk::GetReturnCodeMessage
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:75,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: baas::CredentialContext::user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: AuthContext*::set_group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: baas::CredentialContext::group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: AuthContext*::set_roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: baas::CredentialContext::roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: baas::CredentialContext::starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: AuthContext*::set_is_service
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    - Dst: baas::CredentialContext::IsService
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - ' auth_str'
    - ' client_addr'
    - out_ctx
    argTypes:
    - std::string
    - butil::EndPoint
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 86
    functionName: brpc::policy::GianoAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - AuthContext*::set_roles
    - baas::CredentialContext::roles
    - AuthContext*::set_starter
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::group
    - baas::CredentialContext::starter
    - AuthContext*::set_group
    - AuthContext*::set_is_service
    - baas::CredentialContext::IsService
    - Verify
    - LOG
    linkageType: ''
    returnType: int
    signature: "int GianoAuthenticator::VerifyCredential(\n        const std::string&
      auth_str,\n        const butil::EndPoint& client_addr,\n        AuthContext*
      out_ctx) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: baas::CredentialGenerator::CredentialGenerator
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:30,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:31,1
    - Dst: baas::CredentialVerifier::CredentialVerifier
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:36,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - gen
    - ver
    argTypes:
    - baas::CredentialGenerator*
    - baas::CredentialVerifier*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 41
    functionName: brpc::policy::GianoAuthenticator::GianoAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - baas::CredentialVerifier::CredentialVerifier
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    linkageType: ''
    returnType: void
    signature: "void GianoAuthenticator::GianoAuthenticator(const baas::CredentialGenerator*
      gen,\n                                       const baas::CredentialVerifier*
      ver)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: GianoAuthenticator::~GianoAuthenticator()
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GianoAuthenticator::~GianoAuthenticator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:53,1
    - Dst: brpc::policy::GianoAuthenticator::GenerateCredential
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: brpc::policy::GianoAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::GianoAuthenticator::GenerateCredential
    - LOG
    linkageType: ''
    returnType: int
    signature: int GianoAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:66,1
    - Dst: Verify
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:71,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:74,1
    - Dst: baas::sdk::GetReturnCodeMessage
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:75,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: baas::CredentialContext::user
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:79,1
    - Dst: AuthContext*::set_group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: baas::CredentialContext::group
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:80,1
    - Dst: AuthContext*::set_roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: baas::CredentialContext::roles
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:81,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: baas::CredentialContext::starter
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:82,1
    - Dst: AuthContext*::set_is_service
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    - Dst: baas::CredentialContext::IsService
      Src: /src/brpc/src/brpc/policy/giano_authenticator.cpp:83,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - ' auth_str'
    - ' client_addr'
    - out_ctx
    argTypes:
    - std::string
    - butil::EndPoint
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 86
    functionName: brpc::policy::GianoAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/giano_authenticator.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - AuthContext*::set_roles
    - baas::CredentialContext::roles
    - AuthContext*::set_starter
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::group
    - baas::CredentialContext::starter
    - AuthContext*::set_group
    - AuthContext*::set_is_service
    - baas::CredentialContext::IsService
    - Verify
    - LOG
    linkageType: ''
    returnType: int
    signature: "int GianoAuthenticator::VerifyCredential(\n        const std::string&
      auth_str,\n        const butil::EndPoint& client_addr,\n        AuthContext*
      out_ctx) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - curr_weight_sum
    - curr_servers_num
    argTypes:
    - uint64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool IsNeededCalculateNewStride(const uint64_t curr_weight_sum,\n
      \                                       const size_t curr_servers_num)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - curr_weight_sum
    - curr_servers_num
    argTypes:
    - uint64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool IsNeededCalculateNewStride(const uint64_t curr_weight_sum,\n
      \                                       const size_t curr_servers_num)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - curr_weight_sum
    - curr_servers_num
    argTypes:
    - uint64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool IsNeededCalculateNewStride(const uint64_t curr_weight_sum,\n
      \                                       const size_t curr_servers_num)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - curr_weight_sum
    - curr_servers_num
    argTypes:
    - uint64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: brpc::policy::WeightedRoundRobinLoadBalancer::IsNeededCalculateNewStride
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_round_robin_load_balancer.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool IsNeededCalculateNewStride(const uint64_t curr_weight_sum,\n
      \                                       const size_t curr_servers_num)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 66
    functionName: brpc::policy::Sofa2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Sofa2CompressType(SofaCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 85
    functionName: brpc::policy::CompressType2Sofa
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: SofaCompressType
    signature: SofaCompressType CompressType2Sofa(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::policy::SofaRawPacker::SofaRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 126
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:133,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:134,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - sofa_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 138
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackSofaHeader(char* sofa_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:142,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:145,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:150,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:154,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 160
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::PackSofaHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeSofaHeaderAndMeta(\n    butil::IOBuf* out, const SofaRpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:165,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:169,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:173,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:177,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:192,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:193,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 203
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - SofaRawUnpacker::unpack32
    - MakeParseError
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseSofaMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:215,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:219,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:225,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:226,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:235,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:240,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:241,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:246,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:256,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:260,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:262,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:270,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:293,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:295,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:297,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:302,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 52
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 207
    functionDepth: 5
    functionLinenumber: 207
    functionLinenumberEnd: 307
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Span*::set_start_send_us
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - SofaRpcMeta::set_failed
    - butil::IOBuf::movable
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - PLOG_IF
    - SofaRpcMeta::set_reason
    - Span*::set_response_size
    - LOG_IF
    - google::protobuf::Message*::IsInitialized
    - Controller*::ErrorCode
    - butil::IOBuf::length
    - butil::IOBuf::size
    - SofaRpcMeta::set_compress_type
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - Socket*::description
    - Socket*::Write
    - Span*::set_sent_us
    - Controller*::Failed
    - Socket*::SetFailed
    - CompressTypeToCStr
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - SofaRpcMeta::set_type
    - SerializeAsCompressedData
    - SofaRpcMeta::set_error_code
    linkageType: ''
    returnType: void
    signature: "void SendSofaResponse(int64_t correlation_id,\n                             Controller*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:319,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:321,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:322,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:327,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:328,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:329,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:335,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:339,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:346,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:349,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:350,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:352,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:354,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:363,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:370,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:375,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:376,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:390,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:395,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:401,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:409,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:414,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:421,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:425,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:426,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:427,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:433,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:444,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:452,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:456,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:458,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:465,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:476,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:486,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 318
    functionDepth: 6
    functionLinenumber: 318
    functionLinenumberEnd: 487
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::set_request_compress_type
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - std::unique_ptr::remote_side
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - butil::endpoint2str
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::full_name
    - AskToBeSampled
    - bthread_assign_data
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ScopedNonServiceError::release
    - butil::cpuwide_time_us
    - google::protobuf::Service*::GetRequestPrototype
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - SofaRpcMeta::method
    - MethodStatus*::OnRequested
    - std::unique_ptr::release
    - static_cast<const Server*>
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - Span*::set_protocol
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Server::MethodProperty*::method::full_name
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SofaRpcMeta::compress_type
    - SocketUniquePtr::get
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::description
    - Socket*::id
    - Span*::AsParent
    - brpc::policy::SendSofaResponse
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - DestroyingPtr::meta::size
    - std::unique_ptr::unique_ptr
    - ParseFromCompressedData
    - google::protobuf::Service*::GetResponsePrototype
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    - std::unique_ptr::get
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaRequest(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 496
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - static_cast<const Server*>
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifySofaRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:499,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:503,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:509,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:511,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:517,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:525,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:532,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:537,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:545,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - SofaRpcMeta::error_code
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - LOG_IF
    - static_cast<uint64_t>
    - Controller*::response
    - SofaRpcMeta::compress_type
    - Controller*::ErrorCode
    - bthread_id_lock
    - SofaRpcMeta::reason
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - brpc::policy::Sofa2CompressType
    - ParseFromCompressedData
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:557,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:561,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:562,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:569,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:576,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 5
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 577
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - Controller*::request_attachment
    - Controller*::request_compress_type
    - brpc::policy::SerializeSofaHeaderAndMeta
    - butil::IOBuf*::append
    - size
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_compress_type
    - method_name
    - SofaRpcMeta::set_type
    - SofaRpcMeta::set_method
    - Controller*::sampled_request
    - Controller*::SetFailed
    - LOG
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void PackSofaRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 66
    functionName: brpc::policy::Sofa2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Sofa2CompressType(SofaCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 85
    functionName: brpc::policy::CompressType2Sofa
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: SofaCompressType
    signature: SofaCompressType CompressType2Sofa(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::policy::SofaRawPacker::SofaRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 126
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:133,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:134,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - sofa_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 138
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackSofaHeader(char* sofa_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:142,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:145,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:150,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:154,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 160
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::PackSofaHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeSofaHeaderAndMeta(\n    butil::IOBuf* out, const SofaRpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:165,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:169,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:173,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:177,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:192,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:193,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 203
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - SofaRawUnpacker::unpack32
    - MakeParseError
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseSofaMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:215,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:219,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:225,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:226,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:235,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:240,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:241,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:246,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:256,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:260,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:262,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:270,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:293,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:295,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:297,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:302,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 52
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 207
    functionDepth: 5
    functionLinenumber: 207
    functionLinenumberEnd: 307
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Span*::set_start_send_us
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - SofaRpcMeta::set_failed
    - butil::IOBuf::movable
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - PLOG_IF
    - SofaRpcMeta::set_reason
    - Span*::set_response_size
    - LOG_IF
    - google::protobuf::Message*::IsInitialized
    - Controller*::ErrorCode
    - butil::IOBuf::length
    - butil::IOBuf::size
    - SofaRpcMeta::set_compress_type
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - Socket*::description
    - Socket*::Write
    - Span*::set_sent_us
    - Controller*::Failed
    - Socket*::SetFailed
    - CompressTypeToCStr
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - SofaRpcMeta::set_type
    - SerializeAsCompressedData
    - SofaRpcMeta::set_error_code
    linkageType: ''
    returnType: void
    signature: "void SendSofaResponse(int64_t correlation_id,\n                             Controller*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:319,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:321,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:322,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:327,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:328,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:329,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:335,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:339,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:346,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:349,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:350,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:352,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:354,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:363,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:370,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:375,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:376,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:390,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:395,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:401,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:409,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:414,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:421,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:425,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:426,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:427,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:433,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:444,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:452,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:456,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:458,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:465,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:476,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:486,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 318
    functionDepth: 6
    functionLinenumber: 318
    functionLinenumberEnd: 487
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::set_request_compress_type
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - std::unique_ptr::remote_side
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - butil::endpoint2str
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::full_name
    - AskToBeSampled
    - bthread_assign_data
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ScopedNonServiceError::release
    - butil::cpuwide_time_us
    - google::protobuf::Service*::GetRequestPrototype
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - SofaRpcMeta::method
    - MethodStatus*::OnRequested
    - std::unique_ptr::release
    - static_cast<const Server*>
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - Span*::set_protocol
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Server::MethodProperty*::method::full_name
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SofaRpcMeta::compress_type
    - SocketUniquePtr::get
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::description
    - Socket*::id
    - Span*::AsParent
    - brpc::policy::SendSofaResponse
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - DestroyingPtr::meta::size
    - std::unique_ptr::unique_ptr
    - ParseFromCompressedData
    - google::protobuf::Service*::GetResponsePrototype
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    - std::unique_ptr::get
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaRequest(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 496
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - static_cast<const Server*>
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifySofaRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:499,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:503,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:509,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:511,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:517,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:525,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:532,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:537,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:545,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - SofaRpcMeta::error_code
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - LOG_IF
    - static_cast<uint64_t>
    - Controller*::response
    - SofaRpcMeta::compress_type
    - Controller*::ErrorCode
    - bthread_id_lock
    - SofaRpcMeta::reason
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - brpc::policy::Sofa2CompressType
    - ParseFromCompressedData
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:557,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:561,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:562,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:569,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:576,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 5
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 577
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - Controller*::request_attachment
    - Controller*::request_compress_type
    - brpc::policy::SerializeSofaHeaderAndMeta
    - butil::IOBuf*::append
    - size
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_compress_type
    - method_name
    - SofaRpcMeta::set_type
    - SofaRpcMeta::set_method
    - Controller*::sampled_request
    - Controller*::SetFailed
    - LOG
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void PackSofaRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 66
    functionName: brpc::policy::Sofa2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Sofa2CompressType(SofaCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 85
    functionName: brpc::policy::CompressType2Sofa
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - LOG
    linkageType: ''
    returnType: SofaCompressType
    signature: SofaCompressType CompressType2Sofa(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::policy::SofaRawPacker::SofaRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 126
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:133,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:134,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - sofa_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 138
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackSofaHeader(char* sofa_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:142,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:145,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:150,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:154,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 160
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::PackSofaHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeSofaHeaderAndMeta(\n    butil::IOBuf* out, const SofaRpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:165,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:169,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:173,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:177,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:192,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:193,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 203
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - SofaRawUnpacker::unpack32
    - MakeParseError
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseSofaMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:215,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:219,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:225,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:226,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:235,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:240,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:241,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:246,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:256,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:260,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:262,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:270,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:293,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:295,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:297,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:302,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 52
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 207
    functionDepth: 5
    functionLinenumber: 207
    functionLinenumberEnd: 307
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Span*::set_start_send_us
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - SofaRpcMeta::set_failed
    - butil::IOBuf::movable
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - PLOG_IF
    - SofaRpcMeta::set_reason
    - Span*::set_response_size
    - LOG_IF
    - google::protobuf::Message*::IsInitialized
    - Controller*::ErrorCode
    - butil::IOBuf::length
    - butil::IOBuf::size
    - SofaRpcMeta::set_compress_type
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - Socket*::description
    - Socket*::Write
    - Span*::set_sent_us
    - Controller*::Failed
    - Socket*::SetFailed
    - CompressTypeToCStr
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - SofaRpcMeta::set_type
    - SerializeAsCompressedData
    - SofaRpcMeta::set_error_code
    linkageType: ''
    returnType: void
    signature: "void SendSofaResponse(int64_t correlation_id,\n                             Controller*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:319,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:321,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:322,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:327,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:328,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:329,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:335,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:339,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:346,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:349,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:350,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:352,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:354,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:363,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:370,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:375,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:376,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:390,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:395,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:401,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:409,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:414,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:421,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:425,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:426,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:427,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:433,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:444,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:452,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:456,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:458,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:465,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:476,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:486,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 318
    functionDepth: 6
    functionLinenumber: 318
    functionLinenumberEnd: 487
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::set_request_compress_type
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - std::unique_ptr::remote_side
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - butil::endpoint2str
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::full_name
    - AskToBeSampled
    - bthread_assign_data
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ScopedNonServiceError::release
    - butil::cpuwide_time_us
    - google::protobuf::Service*::GetRequestPrototype
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - SofaRpcMeta::method
    - MethodStatus*::OnRequested
    - std::unique_ptr::release
    - static_cast<const Server*>
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - Span*::set_protocol
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Server::MethodProperty*::method::full_name
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SofaRpcMeta::compress_type
    - SocketUniquePtr::get
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::description
    - Socket*::id
    - Span*::AsParent
    - brpc::policy::SendSofaResponse
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - DestroyingPtr::meta::size
    - std::unique_ptr::unique_ptr
    - ParseFromCompressedData
    - google::protobuf::Service*::GetResponsePrototype
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    - std::unique_ptr::get
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaRequest(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 496
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - static_cast<const Server*>
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifySofaRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:499,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:503,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:509,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:511,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:517,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:525,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:532,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:537,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:545,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - SofaRpcMeta::error_code
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - LOG_IF
    - static_cast<uint64_t>
    - Controller*::response
    - SofaRpcMeta::compress_type
    - Controller*::ErrorCode
    - bthread_id_lock
    - SofaRpcMeta::reason
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - brpc::policy::Sofa2CompressType
    - ParseFromCompressedData
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:557,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:561,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:562,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:569,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:576,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 5
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 577
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - Controller*::request_attachment
    - Controller*::request_compress_type
    - brpc::policy::SerializeSofaHeaderAndMeta
    - butil::IOBuf*::append
    - size
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_compress_type
    - method_name
    - SofaRpcMeta::set_type
    - SofaRpcMeta::set_method
    - Controller*::sampled_request
    - Controller*::SetFailed
    - LOG
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void PackSofaRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 66
    functionName: brpc::policy::Sofa2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Sofa2CompressType(SofaCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 85
    functionName: brpc::policy::CompressType2Sofa
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - LOG
    linkageType: ''
    returnType: SofaCompressType
    signature: SofaCompressType CompressType2Sofa(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: brpc::policy::SofaRawPacker::SofaRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawPacker
    signature: SofaRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SofaRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 119
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 126
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SofaRawUnpacker
    signature: SofaRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:133,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:134,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - sofa_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 138
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackSofaHeader(char* sofa_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:142,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:145,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:149,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:150,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:154,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 160
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::PackSofaHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeSofaHeaderAndMeta(\n    butil::IOBuf* out, const SofaRpcMeta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:165,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:169,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:173,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:177,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:192,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:193,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 162
    functionDepth: 1
    functionLinenumber: 162
    functionLinenumberEnd: 203
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - SofaRawUnpacker::unpack32
    - MakeParseError
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseSofaMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:215,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:217,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:219,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:225,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:226,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:230,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:235,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:240,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:241,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:246,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:256,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:260,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:262,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:264,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:270,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:272,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:289,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:293,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:295,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:297,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:302,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 52
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 207
    functionDepth: 5
    functionLinenumber: 207
    functionLinenumberEnd: 307
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Span*::set_start_send_us
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - SofaRpcMeta::set_failed
    - butil::IOBuf::movable
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - PLOG_IF
    - SofaRpcMeta::set_reason
    - Span*::set_response_size
    - LOG_IF
    - google::protobuf::Message*::IsInitialized
    - Controller*::ErrorCode
    - butil::IOBuf::length
    - butil::IOBuf::size
    - SofaRpcMeta::set_compress_type
    - Controller*::IsCloseConnection
    - Controller*::ErrorText
    - Socket*::description
    - Socket*::Write
    - Span*::set_sent_us
    - Controller*::Failed
    - Socket*::SetFailed
    - CompressTypeToCStr
    - Controller*::response_compress_type
    - Controller*::response_attachment
    - SofaRpcMeta::set_type
    - SerializeAsCompressedData
    - SofaRpcMeta::set_error_code
    linkageType: ''
    returnType: void
    signature: "void SendSofaResponse(int64_t correlation_id,\n                             Controller*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:319,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:321,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:322,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:323,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:327,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:328,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:329,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:335,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:337,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:339,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:346,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:349,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:350,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:352,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:354,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:356,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:363,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:370,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:371,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:375,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:376,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:380,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:390,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:394,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:395,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:401,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:409,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:414,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:421,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:425,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:426,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:427,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:433,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:435,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:442,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:444,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:450,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:452,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:456,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:457,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:458,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:464,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:465,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:469,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:472,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:473,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:476,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:478,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:484,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:485,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:486,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 318
    functionDepth: 6
    functionLinenumber: 318
    functionLinenumberEnd: 487
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::set_request_compress_type
    - DestroyingPtr::received_us
    - Server*::IsRunning
    - std::unique_ptr::remote_side
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - butil::endpoint2str
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::full_name
    - AskToBeSampled
    - bthread_assign_data
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - ScopedNonServiceError::release
    - butil::cpuwide_time_us
    - google::protobuf::Service*::GetRequestPrototype
    - Server*::AcceptRequest
    - brpc::Span::CreateServerSpan
    - SofaRpcMeta::method
    - MethodStatus*::OnRequested
    - std::unique_ptr::release
    - static_cast<const Server*>
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::auth_context
    - LOG
    - Socket*::local_side
    - Span*::set_protocol
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - Server::MethodProperty*::method::full_name
    - Server*::thread_local_options
    - Span*::set_start_callback_us
    - Socket*::is_overcrowded
    - SofaRpcMeta::compress_type
    - SocketUniquePtr::get
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - EndRunningUserCodeInPlace
    - ControllerPrivateAccessor::set_span
    - Server*::options
    - IsTraceable
    - Span*::set_received_us
    - BeginRunningUserCode
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::description
    - Socket*::id
    - Span*::AsParent
    - brpc::policy::SendSofaResponse
    - Span*::set_request_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - DestroyingPtr::reset
    - TooManyUserCode
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::set_method
    - InputMessageBase*::arg
    - Socket*::SetFailed
    - Span*::ResetServerSpanName
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - DestroyingPtr::meta::size
    - std::unique_ptr::unique_ptr
    - ParseFromCompressedData
    - google::protobuf::Service*::GetResponsePrototype
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_protocol_type
    - std::unique_ptr::get
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaRequest(InputMessageBase* msg_base)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:490,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:492,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 496
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - InputMessageBase*::arg
    - Server*::options
    - static_cast<const Server*>
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool VerifySofaRequest(const InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:499,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:503,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:507,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:509,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:511,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:517,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:519,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:525,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:528,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:532,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:537,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:545,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 498
    functionDepth: 2
    functionLinenumber: 498
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - SofaRpcMeta::error_code
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - LOG
    - LOG_IF
    - static_cast<uint64_t>
    - Controller*::response
    - SofaRpcMeta::compress_type
    - Controller*::ErrorCode
    - bthread_id_lock
    - SofaRpcMeta::reason
    - Span*::set_received_us
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - brpc::policy::Sofa2CompressType
    - ParseFromCompressedData
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - SofaRpcMeta::sequence_id
    linkageType: ''
    returnType: void
    signature: void ProcessSofaResponse(InputMessageBase* msg_base)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:557,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:561,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:562,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:565,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:569,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:575,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:576,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 5
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 577
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_sequence_id
    - Controller*::request_attachment
    - Controller*::request_compress_type
    - brpc::policy::SerializeSofaHeaderAndMeta
    - butil::IOBuf*::append
    - size
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_compress_type
    - method_name
    - SofaRpcMeta::set_type
    - SofaRpcMeta::set_method
    - Controller*::sampled_request
    - Controller*::SetFailed
    - LOG
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void PackSofaRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* /*not supported*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: brpc::policy::ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::ConstantConcurrencyLimiter(int max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ConstantConcurrencyLimiter::OnRequested(int current_concurrency,
      Controller*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::OnResponded(int error_code, int64_t
      latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::policy::ConstantConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int ConstantConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: brpc::policy::ConstantConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - store
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: "int ConstantConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency&
      amc)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: type
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    - Dst: ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - static_cast<int>
    - type
    linkageType: ''
    returnType: ConstantConcurrencyLimiter
    signature: 'ConstantConcurrencyLimiter *

      ConstantConcurrencyLimiter::New(const AdaptiveMaxConcurrency& amc) const'
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: brpc::policy::ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::ConstantConcurrencyLimiter(int max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ConstantConcurrencyLimiter::OnRequested(int current_concurrency,
      Controller*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::OnResponded(int error_code, int64_t
      latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::policy::ConstantConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int ConstantConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: brpc::policy::ConstantConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - store
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: "int ConstantConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency&
      amc)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: type
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    - Dst: ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - static_cast<int>
    - type
    linkageType: ''
    returnType: ConstantConcurrencyLimiter
    signature: 'ConstantConcurrencyLimiter *

      ConstantConcurrencyLimiter::New(const AdaptiveMaxConcurrency& amc) const'
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: brpc::policy::ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::ConstantConcurrencyLimiter(int max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ConstantConcurrencyLimiter::OnRequested(int current_concurrency,
      Controller*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::OnResponded(int error_code, int64_t
      latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::policy::ConstantConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int ConstantConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: brpc::policy::ConstantConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - store
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: "int ConstantConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency&
      amc)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: type
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    - Dst: ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - static_cast<int>
    - type
    linkageType: ''
    returnType: ConstantConcurrencyLimiter
    signature: 'ConstantConcurrencyLimiter *

      ConstantConcurrencyLimiter::New(const AdaptiveMaxConcurrency& amc) const'
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: brpc::policy::ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::ConstantConcurrencyLimiter(int max_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ConstantConcurrencyLimiter::OnRequested(int current_concurrency,
      Controller*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::policy::ConstantConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConstantConcurrencyLimiter::OnResponded(int error_code, int64_t
      latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: brpc::policy::ConstantConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int ConstantConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: brpc::policy::ConstantConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - store
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: "int ConstantConcurrencyLimiter::ResetMaxConcurrency(\n    const AdaptiveMaxConcurrency&
      amc)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: type
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:46,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    - Dst: ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' amc'
    argTypes:
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - static_cast<int>
    - type
    linkageType: ''
    returnType: ConstantConcurrencyLimiter
    signature: 'ConstantConcurrencyLimiter *

      ConstantConcurrencyLimiter::New(const AdaptiveMaxConcurrency& amc) const'
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:45,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: brpc::policy::SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:52,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:56,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:59,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:64,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:65,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:66,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:71,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:72,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 74
    functionName: brpc::policy::ParseServerList
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - hostname2endpoint
    - brpc::policy::SplitIntoServerAndTag
    - butil::StringPiece::size
    - std::set::insert
    - std::vector<ServerNode>*::size
    - butil::StringSplitter::length
    - std::vector<ServerNode>*::push_back
    - butil::EndPoint::EndPoint
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::clear
    - butil::StringPiece::data
    - str2endpoint
    - const_cast<char*>
    - LOG
    - std::string::assign
    linkageType: ''
    returnType: int
    signature: "int ParseServerList(const char* service_name,\n                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: brpc::policy::ListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 4
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:84,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:86,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::ListNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::vector::clear
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: brpc::policy::ListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ListNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ListNamingService::ListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: brpc::policy::ListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ListNamingService::ListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::ListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: brpc::policy::DomainListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int DomainListNamingService::GetServers(const char* service_name,\n
      \                                       std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: brpc::policy::DomainListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainListNamingService::Describe(std::ostream& os,\n                                       const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainListNamingService::DomainListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::DomainListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainListNamingService::DomainListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: brpc::policy::DomainListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainListNamingService::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:45,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: brpc::policy::SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:52,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:56,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:59,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:64,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:65,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:66,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:71,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:72,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 74
    functionName: brpc::policy::ParseServerList
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - hostname2endpoint
    - brpc::policy::SplitIntoServerAndTag
    - butil::StringPiece::size
    - std::set::insert
    - std::vector<ServerNode>*::size
    - butil::StringSplitter::length
    - std::vector<ServerNode>*::push_back
    - butil::EndPoint::EndPoint
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::clear
    - butil::StringPiece::data
    - str2endpoint
    - const_cast<char*>
    - LOG
    - std::string::assign
    linkageType: ''
    returnType: int
    signature: "int ParseServerList(const char* service_name,\n                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: brpc::policy::ListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 5
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:84,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:86,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::ListNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::vector::clear
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: brpc::policy::ListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ListNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ListNamingService::ListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: brpc::policy::ListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ListNamingService::ListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::ListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: brpc::policy::DomainListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int DomainListNamingService::GetServers(const char* service_name,\n
      \                                       std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: brpc::policy::DomainListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainListNamingService::Describe(std::ostream& os,\n                                       const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainListNamingService::DomainListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::DomainListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainListNamingService::DomainListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: brpc::policy::DomainListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainListNamingService::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:45,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: brpc::policy::SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:52,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:56,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:59,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:64,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:65,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:66,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:71,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:72,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 74
    functionName: brpc::policy::ParseServerList
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - hostname2endpoint
    - brpc::policy::SplitIntoServerAndTag
    - butil::StringPiece::size
    - std::set::insert
    - std::vector<ServerNode>*::size
    - butil::StringSplitter::length
    - std::vector<ServerNode>*::push_back
    - butil::EndPoint::EndPoint
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::clear
    - butil::StringPiece::data
    - str2endpoint
    - const_cast<char*>
    - LOG
    - std::string::assign
    linkageType: ''
    returnType: int
    signature: "int ParseServerList(const char* service_name,\n                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: brpc::policy::ListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 6
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:84,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:86,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::ListNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::vector::clear
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: brpc::policy::ListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ListNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ListNamingService::ListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: brpc::policy::ListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ListNamingService::ListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::ListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: brpc::policy::DomainListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int DomainListNamingService::GetServers(const char* service_name,\n
      \                                       std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: brpc::policy::DomainListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainListNamingService::Describe(std::ostream& os,\n                                       const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainListNamingService::DomainListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::DomainListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainListNamingService::DomainListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: brpc::policy::DomainListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainListNamingService::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:45,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:49,1
    - Dst: brpc::policy::SplitIntoServerAndTag
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:52,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:55,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:56,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:57,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:59,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:64,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:65,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:66,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:71,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:72,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 74
    functionName: brpc::policy::ParseServerList
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - hostname2endpoint
    - brpc::policy::SplitIntoServerAndTag
    - butil::StringPiece::size
    - std::set::insert
    - std::vector<ServerNode>*::size
    - butil::StringSplitter::length
    - std::vector<ServerNode>*::push_back
    - butil::EndPoint::EndPoint
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::clear
    - butil::StringPiece::data
    - str2endpoint
    - const_cast<char*>
    - LOG
    - std::string::assign
    linkageType: ''
    returnType: int
    signature: "int ParseServerList(const char* service_name,\n                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: brpc::policy::ListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 7
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::GetServers(const char *service_name,\n                                  std::vector<ServerNode>*
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:84,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:86,1
    - Dst: NamingServiceActions*::ResetServers
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - service_name
    - actions
    argTypes:
    - char*
    - NamingServiceActions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::ListNamingService::RunNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::vector::clear
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    linkageType: ''
    returnType: int
    signature: "int ListNamingService::RunNamingService(const char* service_name,\n
      \                                       NamingServiceActions* actions)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: brpc::policy::ListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ListNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ListNamingService::ListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: brpc::policy::ListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ListNamingService::ListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * ListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::ListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseServerList
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: brpc::policy::DomainListNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - ParseServerList
    linkageType: ''
    returnType: int
    signature: "int DomainListNamingService::GetServers(const char* service_name,\n
      \                                       std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 115
    functionName: brpc::policy::DomainListNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainListNamingService::Describe(std::ostream& os,\n                                       const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainListNamingService::DomainListNamingService
      Src: /src/brpc/src/brpc/policy/list_naming_service.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: brpc::policy::DomainListNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainListNamingService::DomainListNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainListNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: brpc::policy::DomainListNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/list_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainListNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - WeightedRandomizedLoadBalancer::Server
    - WeightedRandomizedLoadBalancer::Server
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: brpc::policy::server_compare
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool server_compare(const WeightedRandomizedLoadBalancer::Server&
      lhs,\n                           const WeightedRandomizedLoadBalancer::Server&
      rhs)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:36,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:37,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:47,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:55,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 60
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:64,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:65,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:68,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:70,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:73,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:74,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 82
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::back
    - server_list::size
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:87,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 91
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:96,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 100
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - id
    - out
    argTypes:
    - SocketId
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 120
    functionDepth: 3
    functionLinenumber: 120
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - IsAvailable
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::IsServerAvailable(SocketId id,
      SocketUniquePtr* out)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:126,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:129,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:134,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:137,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:146,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:147,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:153,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:155,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:163,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 31
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 124
    functionDepth: 4
    functionLinenumber: 124
    functionLinenumberEnd: 177
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::FlatSet::seek
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    - butil::FlatSet::size
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    linkageType: ''
    returnType: int
    signature: int WeightedRandomizedLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 182
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRandomizedLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:196,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 205
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void WeightedRandomizedLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - WeightedRandomizedLoadBalancer::Server
    - WeightedRandomizedLoadBalancer::Server
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: brpc::policy::server_compare
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool server_compare(const WeightedRandomizedLoadBalancer::Server&
      lhs,\n                           const WeightedRandomizedLoadBalancer::Server&
      rhs)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:36,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:37,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:47,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:55,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 60
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:64,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:65,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:68,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:70,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:73,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:74,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 82
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::back
    - server_list::size
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:87,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 91
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:96,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 100
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - id
    - out
    argTypes:
    - SocketId
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 120
    functionDepth: 3
    functionLinenumber: 120
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - brpc::SetTrackMeAddress
    - IsAvailable
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::IsServerAvailable(SocketId id,
      SocketUniquePtr* out)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:126,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:129,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:134,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:137,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:146,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:147,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:153,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:155,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:163,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 31
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 124
    functionDepth: 4
    functionLinenumber: 124
    functionLinenumberEnd: 177
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::FlatSet::seek
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    - butil::FlatSet::size
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    linkageType: ''
    returnType: int
    signature: int WeightedRandomizedLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 182
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRandomizedLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:196,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 205
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void WeightedRandomizedLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - WeightedRandomizedLoadBalancer::Server
    - WeightedRandomizedLoadBalancer::Server
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: brpc::policy::server_compare
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool server_compare(const WeightedRandomizedLoadBalancer::Server&
      lhs,\n                           const WeightedRandomizedLoadBalancer::Server&
      rhs)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:36,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:37,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:47,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:55,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 60
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:64,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:65,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:68,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:70,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:73,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:74,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 82
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::back
    - server_list::size
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:87,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 91
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:96,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 100
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - id
    - out
    argTypes:
    - SocketId
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 120
    functionDepth: 3
    functionLinenumber: 120
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - brpc::SetTrackMeAddress
    - IsAvailable
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::IsServerAvailable(SocketId id,
      SocketUniquePtr* out)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:126,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:129,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:134,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:137,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:146,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:147,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:153,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:155,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:163,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 31
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 124
    functionDepth: 4
    functionLinenumber: 124
    functionLinenumberEnd: 177
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::FlatSet::seek
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    - butil::FlatSet::size
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    linkageType: ''
    returnType: int
    signature: int WeightedRandomizedLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 182
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRandomizedLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:196,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 205
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void WeightedRandomizedLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - WeightedRandomizedLoadBalancer::Server
    - WeightedRandomizedLoadBalancer::Server
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    functionName: brpc::policy::server_compare
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool server_compare(const WeightedRandomizedLoadBalancer::Server&
      lhs,\n                           const WeightedRandomizedLoadBalancer::Server&
      rhs)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:36,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:37,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:47,1
    - Dst: server_map::emplace
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:52,1
    - Dst: server_list::emplace_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:55,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 60
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::emplace
    - server_list::emplace_back
    - butil::StringToUint
    - LOG
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Add(Servers& bg, const ServerId&
      id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:64,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:65,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:68,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:70,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:73,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:74,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:75,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 82
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::back
    - server_list::size
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::Remove(Servers& bg, const ServerId&
      id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:87,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 91
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchAdd(\n    Servers& bg,
      const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:96,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 100
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::BatchRemove(\n    Servers&
      bg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t WeightedRandomizedLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - id
    - out
    argTypes:
    - SocketId
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 120
    functionDepth: 3
    functionLinenumber: 120
    functionLinenumberEnd: 122
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - brpc::SetTrackMeAddress
    - IsAvailable
    linkageType: ''
    returnType: bool
    signature: bool WeightedRandomizedLoadBalancer::IsServerAvailable(SocketId id,
      SocketUniquePtr* out)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:126,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:129,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:134,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:137,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:140,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:146,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:147,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:153,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:155,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:163,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 31
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 124
    functionDepth: 4
    functionLinenumber: 124
    functionLinenumberEnd: 177
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::FlatSet::seek
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRandomizedLoadBalancer::IsServerAvailable
    - butil::FlatSet::size
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    linkageType: ''
    returnType: int
    signature: int WeightedRandomizedLoadBalancer::SelectServer(const SelectIn& in,
      SelectOut* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 182
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - WeightedRandomizedLoadBalancer::WeightedRandomizedLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: "LoadBalancer * WeightedRandomizedLoadBalancer::New(\n    const butil::StringPiece&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeightedRandomizedLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:196,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 205
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void WeightedRandomizedLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AutoConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: brpc::policy::AutoConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - AutoConcurrencyLimiter::AutoConcurrencyLimiter
    linkageType: ''
    returnType: AutoConcurrencyLimiter
    signature: AutoConcurrencyLimiter * AutoConcurrencyLimiter::New(const AdaptiveMaxConcurrency&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: brpc::policy::AutoConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AutoConcurrencyLimiter::OnRequested(int current_concurrency, Controller*)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:102,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:107,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:109,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:117,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:122,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 131
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - load
    - fetch_add
    - compare_exchange_strong
    - VLOG
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::OnResponded(int error_code, int64_t latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::AutoConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::ResetMaxConcurrency(const AdaptiveMaxConcurrency&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: brpc::policy::AutoConcurrencyLimiter::NextResetTime
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: int64_t
    signature: int64_t AutoConcurrencyLimiter::NextResetTime(int64_t sampling_time_us)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:161,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:162,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:182,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:193,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:196,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:198,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 200
    functionName: brpc::policy::AutoConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: bool
    signature: "bool AutoConcurrencyLimiter::AddSample(int error_code, \n                                       int64_t
      latency_us, \n                                       int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 209
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - exchange
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 218
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMinLatency(int64_t latency_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - qps
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 227
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateQps
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateQps(double qps)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    functionName: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - std::max
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AdjustMaxConcurrency(int next_max_concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:237,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:240,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:242,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:243,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:251,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:259,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:261,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 268
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - std::max
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::min
    - std::ceil
    - load
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMaxConcurrency(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 2
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AutoConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: brpc::policy::AutoConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - AutoConcurrencyLimiter::AutoConcurrencyLimiter
    linkageType: ''
    returnType: AutoConcurrencyLimiter
    signature: AutoConcurrencyLimiter * AutoConcurrencyLimiter::New(const AdaptiveMaxConcurrency&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: brpc::policy::AutoConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AutoConcurrencyLimiter::OnRequested(int current_concurrency, Controller*)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:102,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:107,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:109,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:117,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:122,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 100
    functionDepth: 3
    functionLinenumber: 100
    functionLinenumberEnd: 131
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - load
    - fetch_add
    - compare_exchange_strong
    - VLOG
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::OnResponded(int error_code, int64_t latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::AutoConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::ResetMaxConcurrency(const AdaptiveMaxConcurrency&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: brpc::policy::AutoConcurrencyLimiter::NextResetTime
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: int64_t
    signature: int64_t AutoConcurrencyLimiter::NextResetTime(int64_t sampling_time_us)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:161,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:162,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:182,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:193,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:196,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:198,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 200
    functionName: brpc::policy::AutoConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: bool
    signature: "bool AutoConcurrencyLimiter::AddSample(int error_code, \n                                       int64_t
      latency_us, \n                                       int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 209
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 2
    functionsReached:
    - exchange
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 218
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMinLatency(int64_t latency_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - qps
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 227
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateQps
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateQps(double qps)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    functionName: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - std::max
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AdjustMaxConcurrency(int next_max_concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:237,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:240,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:242,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:243,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:251,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:259,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:261,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 268
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 2
    functionsReached:
    - std::max
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::min
    - std::ceil
    - load
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMaxConcurrency(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 2
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AutoConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: brpc::policy::AutoConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - AutoConcurrencyLimiter::AutoConcurrencyLimiter
    linkageType: ''
    returnType: AutoConcurrencyLimiter
    signature: AutoConcurrencyLimiter * AutoConcurrencyLimiter::New(const AdaptiveMaxConcurrency&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: brpc::policy::AutoConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AutoConcurrencyLimiter::OnRequested(int current_concurrency, Controller*)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:102,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:107,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:109,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:117,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:122,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 100
    functionDepth: 3
    functionLinenumber: 100
    functionLinenumberEnd: 131
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - load
    - fetch_add
    - compare_exchange_strong
    - VLOG
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::OnResponded(int error_code, int64_t latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::AutoConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::ResetMaxConcurrency(const AdaptiveMaxConcurrency&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: brpc::policy::AutoConcurrencyLimiter::NextResetTime
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 5
    functionsReached:
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: int64_t
    signature: int64_t AutoConcurrencyLimiter::NextResetTime(int64_t sampling_time_us)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:161,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:162,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:182,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:193,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:196,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:198,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 200
    functionName: brpc::policy::AutoConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: bool
    signature: "bool AutoConcurrencyLimiter::AddSample(int error_code, \n                                       int64_t
      latency_us, \n                                       int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 209
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - exchange
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 218
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMinLatency(int64_t latency_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - qps
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 227
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateQps
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateQps(double qps)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    functionName: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 5
    functionsReached:
    - std::max
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AdjustMaxConcurrency(int next_max_concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:237,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:240,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:242,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:243,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:251,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:259,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:261,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 268
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - std::max
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::min
    - std::ceil
    - load
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMaxConcurrency(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 2
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AutoConcurrencyLimiter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: brpc::policy::AutoConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - AutoConcurrencyLimiter::AutoConcurrencyLimiter
    linkageType: ''
    returnType: AutoConcurrencyLimiter
    signature: AutoConcurrencyLimiter * AutoConcurrencyLimiter::New(const AdaptiveMaxConcurrency&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - current_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: brpc::policy::AutoConcurrencyLimiter::OnRequested
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool AutoConcurrencyLimiter::OnRequested(int current_concurrency, Controller*)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:102,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:107,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:109,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:117,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:122,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 100
    functionDepth: 3
    functionLinenumber: 100
    functionLinenumberEnd: 131
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - load
    - fetch_add
    - compare_exchange_strong
    - VLOG
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::OnResponded(int error_code, int64_t latency_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::policy::AutoConcurrencyLimiter::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::MaxConcurrency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int AutoConcurrencyLimiter::ResetMaxConcurrency(const AdaptiveMaxConcurrency&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: brpc::policy::AutoConcurrencyLimiter::NextResetTime
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 7
    functionsReached:
    - butil::fast_rand_less_than
    linkageType: ''
    returnType: int64_t
    signature: int64_t AutoConcurrencyLimiter::NextResetTime(int64_t sampling_time_us)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::NextResetTime
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:161,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:162,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:182,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:193,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:196,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:198,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 3
    argNames:
    - error_code
    - latency_us
    - sampling_time_us
    argTypes:
    - int
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 200
    functionName: brpc::policy::AutoConcurrencyLimiter::AddSample
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    linkageType: ''
    returnType: bool
    signature: "bool AutoConcurrencyLimiter::AddSample(int error_code, \n                                       int64_t
      latency_us, \n                                       int64_t sampling_time_us)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 209
    functionName: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - exchange
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::ResetSampleWindow(int64_t sampling_time_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - latency_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 218
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMinLatency(int64_t latency_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - qps
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 227
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateQps
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateQps(double qps)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    functionName: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 7
    functionsReached:
    - std::max
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::AdjustMaxConcurrency(int next_max_concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:237,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:240,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:242,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:243,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:251,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:259,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:261,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 268
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - std::max
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::min
    - std::ceil
    - load
    linkageType: ''
    returnType: void
    signature: void AutoConcurrencyLimiter::UpdateMaxConcurrency(int64_t sampling_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: brpc::policy::RoundRobinLoadBalancer::TLS
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TLS()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: brpc::policy::RoundRobinLoadBalancer::TLS
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TLS()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: brpc::policy::RoundRobinLoadBalancer::TLS
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TLS()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: brpc::policy::RoundRobinLoadBalancer::TLS
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TLS()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:30,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:31,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:35,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 29
    functionDepth: 6
    functionLinenumber: 29
    functionLinenumberEnd: 39
    functionName: brpc::policy::RedisAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisCommandFormat
    - c_str
    - empty
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int RedisAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:30,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:31,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:35,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 29
    functionDepth: 6
    functionLinenumber: 29
    functionLinenumberEnd: 39
    functionName: brpc::policy::RedisAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisCommandFormat
    - c_str
    - empty
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int RedisAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:30,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:31,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:35,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 29
    functionDepth: 6
    functionLinenumber: 29
    functionLinenumberEnd: 39
    functionName: brpc::policy::RedisAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisCommandFormat
    - c_str
    - empty
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int RedisAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:30,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:31,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:32,1
    - Dst: brpc::RedisCommandFormat
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:35,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/redis_authenticator.cpp:37,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 29
    functionDepth: 6
    functionLinenumber: 29
    functionLinenumberEnd: 39
    functionName: brpc::policy::RedisAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisCommandFormat
    - c_str
    - empty
    - butil::IOBuf::to_string
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int RedisAuthenticator::GenerateCredential(std::string* auth_str) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:44,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:46,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:49,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:55,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 57
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& /*request*/, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:62,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 69
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - google::protobuf::Message*::GetDescriptor
    - body::length
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:74,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:75,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:80,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:85,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:89,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 96
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:99,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:101,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:106,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:108,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:114,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:119,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:121,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:122,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:128,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:129,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:130,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:134,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:135,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - google::protobuf::Message*::GetDescriptor
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - Controller*::CloseConnection
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadMcpackResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:142,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:147,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:148,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - pb_req
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 138
    functionDepth: 2
    functionLinenumber: 138
    functionLinenumberEnd: 152
    functionName: brpc::policy::SerializeNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadMcpackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                         const google::protobuf::Message* pb_req)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:162,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:163,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:168,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:171,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:174,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:175,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 184
    functionName: brpc::policy::PackNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNsheadMcpackRequest(butil::IOBuf* buf,\n                             SocketMessage**,\n
      \                            uint64_t correlation_id,\n                             const
      google::protobuf::MethodDescriptor*,\n                             Controller*
      controller,\n                             const butil::IOBuf& request,\n                             const
      Authenticator* /*not supported*/)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:44,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:46,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:49,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:55,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 57
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& /*request*/, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:62,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 69
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - google::protobuf::Message*::GetDescriptor
    - body::length
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:74,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:75,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:80,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:85,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:89,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 96
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:99,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:101,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:106,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:108,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:114,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:119,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:121,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:122,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:128,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:129,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:130,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:134,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:135,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - google::protobuf::Message*::GetDescriptor
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - Controller*::CloseConnection
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadMcpackResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:142,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:147,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:148,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - pb_req
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 138
    functionDepth: 2
    functionLinenumber: 138
    functionLinenumberEnd: 152
    functionName: brpc::policy::SerializeNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadMcpackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                         const google::protobuf::Message* pb_req)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:162,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:163,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:168,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:171,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:174,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:175,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 184
    functionName: brpc::policy::PackNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNsheadMcpackRequest(butil::IOBuf* buf,\n                             SocketMessage**,\n
      \                            uint64_t correlation_id,\n                             const
      google::protobuf::MethodDescriptor*,\n                             Controller*
      controller,\n                             const butil::IOBuf& request,\n                             const
      Authenticator* /*not supported*/)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:44,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:46,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:49,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:55,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 57
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& /*request*/, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:62,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 69
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - google::protobuf::Message*::GetDescriptor
    - body::length
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:74,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:75,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:80,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:85,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:89,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 96
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:99,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:101,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:106,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:108,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:114,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:119,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:121,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:122,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:128,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:129,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:130,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:134,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:135,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - google::protobuf::Message*::GetDescriptor
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - Controller*::CloseConnection
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadMcpackResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:142,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:147,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:148,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - pb_req
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 138
    functionDepth: 2
    functionLinenumber: 138
    functionLinenumberEnd: 152
    functionName: brpc::policy::SerializeNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadMcpackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                         const google::protobuf::Message* pb_req)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:162,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:163,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:168,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:171,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:174,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:175,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 184
    functionName: brpc::policy::PackNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNsheadMcpackRequest(butil::IOBuf* buf,\n                             SocketMessage**,\n
      \                            uint64_t correlation_id,\n                             const
      google::protobuf::MethodDescriptor*,\n                             Controller*
      controller,\n                             const butil::IOBuf& request,\n                             const
      Authenticator* /*not supported*/)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: first_service
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:44,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:46,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:49,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:55,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 57
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - first_service
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_full_method_name
    - google::protobuf::Service*::GetDescriptor
    - Controller*::SetFailed
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::MethodDescriptor*::full_name
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseNsheadMeta(\n    const Server& svr,
      const NsheadMessage& /*request*/, Controller* cntl,\n    NsheadMeta* out_meta)
      const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:62,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 69
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - google::protobuf::Message*::GetDescriptor
    - body::length
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:74,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:75,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:80,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:85,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:89,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 3
    argNames:
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 71
    functionDepth: 2
    functionLinenumber: 71
    functionLinenumberEnd: 96
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::CloseConnection
    - Controller*::Failed
    - Controller*::response_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - LOG
    linkageType: ''
    returnType: void
    signature: "void NsheadMcpackAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&,
      Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:99,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:101,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:104,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:106,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:108,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:114,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:116,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:117,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:118,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:119,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:121,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:122,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:128,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:129,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:130,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:134,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:135,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - google::protobuf::Message*::GetDescriptor
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - Controller*::CloseConnection
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessNsheadMcpackResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:142,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:147,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:148,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - pb_req
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 138
    functionDepth: 2
    functionLinenumber: 138
    functionLinenumberEnd: 152
    functionName: brpc::policy::SerializeNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void SerializeNsheadMcpackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                         const google::protobuf::Message* pb_req)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:162,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:163,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:168,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:171,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:174,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:175,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 184
    functionName: brpc::policy::PackNsheadMcpackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackNsheadMcpackRequest(butil::IOBuf* buf,\n                             SocketMessage**,\n
      \                            uint64_t correlation_id,\n                             const
      google::protobuf::MethodDescriptor*,\n                             Controller*
      controller,\n                             const butil::IOBuf& request,\n                             const
      Authenticator* /*not supported*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 69
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_set
    - butil::bit_array_clear
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:72,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 74
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:79,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:81,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:84,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:87,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:89,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:92,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:94,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:100,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:105,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:106,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:107,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:112,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:113,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:120,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:123,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:125,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:126,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:128,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:139,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 76
    functionDepth: 2
    functionLinenumber: 76
    functionLinenumberEnd: 151
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - Socket*::PopPipelinedInfo
    - Socket*::parsing_context
    - MostCommonMessage*::meta::append
    - MakeMessage
    - Socket*::reset_parsing_context
    - LOG
    - butil::IOBuf*::size
    - Socket*::GivebackPipelinedInfo
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - butil::NetToHost16
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - butil::IOBuf*::fetch1
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMemcacheMessage(butil::IOBuf* source,\n                                 Socket*
      socket, bool /*read_eof*/, const void */*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:154,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:167,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:176,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:182,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:183,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:190,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:191,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - raw_buffer
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - bthread_id_lock
    - DestroyingPtr::meta::length
    - Span*::set_received_us
    - Span*::set_start_parse_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - DestroyingPtr::meta::movable
    linkageType: ''
    returnType: void
    signature: void ProcessMemcacheResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:198,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:201,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:205,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 194
    functionDepth: 2
    functionLinenumber: 194
    functionLinenumberEnd: 207
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MemcacheRequest*::raw_buffer
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - MemcacheRequest*::pipelined_count
    linkageType: ''
    returnType: void
    signature: "void SerializeMemcacheRequest(butil::IOBuf* buf,\n                              Controller*
      cntl,\n                              const google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:219,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:221,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:223,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 224
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackMemcacheRequest(butil::IOBuf* buf,\n                         SocketMessage**,\n
      \                        uint64_t /*correlation_id*/,\n                         const
      google::protobuf::MethodDescriptor*,\n                         Controller* cntl,\n
      \                        const butil::IOBuf& request,\n                         const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 231
    functionName: brpc::policy::GetMemcacheMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMemcacheMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 69
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_set
    - butil::bit_array_clear
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:72,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 74
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:79,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:81,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:84,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:87,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:89,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:92,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:94,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:100,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:105,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:106,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:107,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:112,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:113,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:120,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:123,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:125,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:126,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:128,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:139,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 76
    functionDepth: 2
    functionLinenumber: 76
    functionLinenumberEnd: 151
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - Socket*::PopPipelinedInfo
    - Socket*::parsing_context
    - MostCommonMessage*::meta::append
    - MakeMessage
    - Socket*::reset_parsing_context
    - LOG
    - butil::IOBuf*::size
    - Socket*::GivebackPipelinedInfo
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - butil::NetToHost16
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - butil::IOBuf*::fetch1
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMemcacheMessage(butil::IOBuf* source,\n                                 Socket*
      socket, bool /*read_eof*/, const void */*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:154,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:167,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:176,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:182,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:183,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:190,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:191,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - raw_buffer
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - bthread_id_lock
    - DestroyingPtr::meta::length
    - Span*::set_received_us
    - Span*::set_start_parse_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - DestroyingPtr::meta::movable
    linkageType: ''
    returnType: void
    signature: void ProcessMemcacheResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:198,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:201,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:205,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 194
    functionDepth: 2
    functionLinenumber: 194
    functionLinenumberEnd: 207
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MemcacheRequest*::raw_buffer
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - MemcacheRequest*::pipelined_count
    linkageType: ''
    returnType: void
    signature: "void SerializeMemcacheRequest(butil::IOBuf* buf,\n                              Controller*
      cntl,\n                              const google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:219,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:221,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:223,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 224
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackMemcacheRequest(butil::IOBuf* buf,\n                         SocketMessage**,\n
      \                        uint64_t /*correlation_id*/,\n                         const
      google::protobuf::MethodDescriptor*,\n                         Controller* cntl,\n
      \                        const butil::IOBuf& request,\n                         const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 231
    functionName: brpc::policy::GetMemcacheMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMemcacheMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 69
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_set
    - butil::bit_array_clear
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:72,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 74
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:79,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:81,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:84,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:87,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:89,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:92,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:94,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:100,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:105,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:106,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:107,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:112,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:113,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:120,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:123,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:125,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:126,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:128,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:139,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 76
    functionDepth: 2
    functionLinenumber: 76
    functionLinenumberEnd: 151
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - Socket*::PopPipelinedInfo
    - Socket*::parsing_context
    - MostCommonMessage*::meta::append
    - MakeMessage
    - Socket*::reset_parsing_context
    - LOG
    - butil::IOBuf*::size
    - Socket*::GivebackPipelinedInfo
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - butil::NetToHost16
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - butil::IOBuf*::fetch1
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMemcacheMessage(butil::IOBuf* source,\n                                 Socket*
      socket, bool /*read_eof*/, const void */*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:154,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:167,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:176,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:182,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:183,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:190,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:191,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - raw_buffer
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - bthread_id_lock
    - DestroyingPtr::meta::length
    - Span*::set_received_us
    - Span*::set_start_parse_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - DestroyingPtr::meta::movable
    linkageType: ''
    returnType: void
    signature: void ProcessMemcacheResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:198,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:201,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:205,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 194
    functionDepth: 2
    functionLinenumber: 194
    functionLinenumberEnd: 207
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MemcacheRequest*::raw_buffer
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - MemcacheRequest*::pipelined_count
    linkageType: ''
    returnType: void
    signature: "void SerializeMemcacheRequest(butil::IOBuf* buf,\n                              Controller*
      cntl,\n                              const google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:219,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:221,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:223,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 224
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackMemcacheRequest(butil::IOBuf* buf,\n                         SocketMessage**,\n
      \                        uint64_t /*correlation_id*/,\n                         const
      google::protobuf::MethodDescriptor*,\n                         Controller* cntl,\n
      \                        const butil::IOBuf& request,\n                         const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 231
    functionName: brpc::policy::GetMemcacheMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMemcacheMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 69
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_set
    - butil::bit_array_clear
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:72,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 74
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:79,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:81,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:84,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:87,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:89,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:92,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:94,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:100,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:105,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:106,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:107,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:112,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:113,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:120,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:123,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:125,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:126,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:128,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:139,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 76
    functionDepth: 2
    functionLinenumber: 76
    functionLinenumberEnd: 151
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - Socket*::PopPipelinedInfo
    - Socket*::parsing_context
    - MostCommonMessage*::meta::append
    - MakeMessage
    - Socket*::reset_parsing_context
    - LOG
    - butil::IOBuf*::size
    - Socket*::GivebackPipelinedInfo
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - butil::NetToHost16
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - butil::IOBuf*::fetch1
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMemcacheMessage(butil::IOBuf* source,\n                                 Socket*
      socket, bool /*read_eof*/, const void */*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:154,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:167,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:169,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:170,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:176,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:182,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:183,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:190,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:191,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 153
    functionDepth: 2
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - Span*::set_response_size
    - raw_buffer
    - Controller*::response
    - LOG_IF
    - ControllerPrivateAccessor::pipelined_count
    - Controller*::ErrorCode
    - bthread_id_lock
    - DestroyingPtr::meta::length
    - Span*::set_received_us
    - Span*::set_start_parse_us
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - DestroyingPtr::meta::movable
    linkageType: ''
    returnType: void
    signature: void ProcessMemcacheResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:198,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:200,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:201,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:205,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 194
    functionDepth: 2
    functionLinenumber: 194
    functionLinenumberEnd: 207
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - MemcacheRequest*::raw_buffer
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor
    - pbrpcframework::get_prototype_by_method_descriptor
    - Controller*::SetFailed
    - MemcacheRequest*::pipelined_count
    linkageType: ''
    returnType: void
    signature: "void SerializeMemcacheRequest(butil::IOBuf* buf,\n                              Controller*
      cntl,\n                              const google::protobuf::Message* request)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:219,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:221,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:223,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 224
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackMemcacheRequest(butil::IOBuf* buf,\n                         SocketMessage**,\n
      \                        uint64_t /*correlation_id*/,\n                         const
      google::protobuf::MethodDescriptor*,\n                         Controller* cntl,\n
      \                        const butil::IOBuf& request,\n                         const
      Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 231
    functionName: brpc::policy::GetMemcacheMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMemcacheMethodName(\n    const google::protobuf::MethodDescriptor*,\n
      \   const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0, uint64_t s_c_w_s =
      0)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0, uint64_t s_c_w_s =
      0)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0, uint64_t s_c_w_s =
      0)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Server
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Server(SocketId s_id = 0, uint32_t s_w = 0, uint64_t s_c_w_s =
      0)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:30,1
    - Dst: BnsInput::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:32,1
    - Dst: webfoot::get_instance_by_service
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:34,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:37,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: BnsOutput::instance_size
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:47,1
    - Dst: BnsOutput::instance
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:51,1
    - Dst: status
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:52,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: tag
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 62
    functionName: brpc::policy::BaiduNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 6
    functionsReached:
    - BnsOutput::instance_size
    - host_ip
    - std::vector<ServerNode>*::push_back
    - tag
    - butil::str2ip
    - webfoot::get_instance_by_service
    - std::vector<ServerNode>*::clear
    - webfoot::error_to_string
    - BnsInput::set_service_name
    - BnsOutput::instance
    - status
    - ServerNode
    - port
    - LOG
    linkageType: ''
    returnType: int
    signature: "int BaiduNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: brpc::policy::BaiduNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BaiduNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduNamingService::BaiduNamingService
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: brpc::policy::BaiduNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached:
    - BaiduNamingService::BaiduNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * BaiduNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::policy::BaiduNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduNamingService::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:30,1
    - Dst: BnsInput::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:32,1
    - Dst: webfoot::get_instance_by_service
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:34,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:37,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: BnsOutput::instance_size
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:47,1
    - Dst: BnsOutput::instance
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:51,1
    - Dst: status
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:52,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: tag
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 62
    functionName: brpc::policy::BaiduNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 6
    functionsReached:
    - BnsOutput::instance_size
    - host_ip
    - std::vector<ServerNode>*::push_back
    - tag
    - butil::str2ip
    - webfoot::get_instance_by_service
    - std::vector<ServerNode>*::clear
    - webfoot::error_to_string
    - BnsInput::set_service_name
    - BnsOutput::instance
    - status
    - ServerNode
    - port
    - LOG
    linkageType: ''
    returnType: int
    signature: "int BaiduNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: brpc::policy::BaiduNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BaiduNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduNamingService::BaiduNamingService
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: brpc::policy::BaiduNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached:
    - BaiduNamingService::BaiduNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * BaiduNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::policy::BaiduNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduNamingService::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:30,1
    - Dst: BnsInput::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:32,1
    - Dst: webfoot::get_instance_by_service
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:34,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:37,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: BnsOutput::instance_size
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:47,1
    - Dst: BnsOutput::instance
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:51,1
    - Dst: status
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:52,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: tag
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 62
    functionName: brpc::policy::BaiduNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 6
    functionsReached:
    - BnsOutput::instance_size
    - host_ip
    - std::vector<ServerNode>*::push_back
    - tag
    - butil::str2ip
    - webfoot::get_instance_by_service
    - std::vector<ServerNode>*::clear
    - webfoot::error_to_string
    - BnsInput::set_service_name
    - BnsOutput::instance
    - status
    - ServerNode
    - port
    - LOG
    linkageType: ''
    returnType: int
    signature: "int BaiduNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: brpc::policy::BaiduNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BaiduNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduNamingService::BaiduNamingService
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: brpc::policy::BaiduNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached:
    - BaiduNamingService::BaiduNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * BaiduNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::policy::BaiduNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduNamingService::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:30,1
    - Dst: BnsInput::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:32,1
    - Dst: webfoot::get_instance_by_service
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:34,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:37,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: webfoot::error_to_string
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:42,1
    - Dst: BnsOutput::instance_size
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:47,1
    - Dst: BnsOutput::instance
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:51,1
    - Dst: status
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:52,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: host_ip
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:55,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    - Dst: tag
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:58,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 62
    functionName: brpc::policy::BaiduNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 6
    functionsReached:
    - BnsOutput::instance_size
    - host_ip
    - std::vector<ServerNode>*::push_back
    - tag
    - butil::str2ip
    - webfoot::get_instance_by_service
    - std::vector<ServerNode>*::clear
    - webfoot::error_to_string
    - BnsInput::set_service_name
    - BnsOutput::instance
    - status
    - ServerNode
    - port
    - LOG
    linkageType: ''
    returnType: int
    signature: "int BaiduNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: brpc::policy::BaiduNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BaiduNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BaiduNamingService::BaiduNamingService
      Src: /src/brpc/src/brpc/policy/baidu_naming_service.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    functionName: brpc::policy::BaiduNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached:
    - BaiduNamingService::BaiduNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * BaiduNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 76
    functionName: brpc::policy::BaiduNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BaiduNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 79
    functionName: brpc::policy::Hulu2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Hulu2CompressType(HuluCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: brpc::policy::CompressType2Hulu
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: HuluCompressType
    signature: HuluCompressType CompressType2Hulu(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::policy::HuluRawPacker::HuluRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: brpc::policy::HuluRawUnpacker::HuluRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:146,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:147,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - hulu_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackHuluHeader(char* hulu_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:155,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:158,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:163,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:167,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 173
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - brpc::policy::PackHuluHeader
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeHuluHeaderAndMeta(\n    butil::IOBuf* out, const Meta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:178,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:182,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:190,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:199,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:206,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:207,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:211,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:215,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 218
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - __builtin_expect
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHuluMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:230,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:234,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:240,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:246,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:250,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:251,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:252,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:257,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:268,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:269,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:273,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:274,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:275,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:280,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:286,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:289,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:294,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:316,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:318,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:320,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:325,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 62
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - HuluController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 222
    functionDepth: 5
    functionLinenumber: 222
    functionLinenumberEnd: 330
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - Span*::set_start_send_us
    - HuluRpcResponseMeta::set_user_message_size
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - HuluController*::ErrorText
    - google::protobuf::Message*::InitializationErrorString
    - brpc::policy::CompressType2Hulu
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - HuluController*::response_attachment
    - HuluController*::ErrorCode
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - butil::IOBuf::movable
    - bthread_id_join
    - HuluRpcResponseMeta::set_compress_type
    - HuluController*::response_compress_type
    - PLOG_IF
    - Span*::set_response_size
    - google::protobuf::Message*::IsInitialized
    - HuluController*::response_source_addr
    - butil::IOBuf::length
    - butil::IOBuf::size
    - HuluController*::response_user_data
    - Socket*::description
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::SetFailed
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluController*::IsCloseConnection
    - HuluController*::Failed
    - HuluRpcResponseMeta::set_error_code
    - Span*::set_sent_us
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SerializeAsCompressedData
    linkageType: ''
    returnType: void
    signature: "void SendHuluResponse(int64_t correlation_id,\n                             HuluController*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:342,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:344,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:345,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:351,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:352,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:357,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:361,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:375,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:378,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:379,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:383,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:384,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:394,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:410,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:416,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:430,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:431,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:436,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:437,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:441,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:447,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:462,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:470,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:474,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:475,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:483,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:493,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:495,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:498,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:503,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:511,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:517,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:531,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:534,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:536,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:537,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 341
    functionDepth: 6
    functionLinenumber: 341
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HuluRpcRequestMeta::method_index
    - std::unique_ptr::remote_side
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::GetRequestPrototype
    - std::unique_ptr::set_request_source_addr
    - Server*::AcceptRequest
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - std::unique_ptr::release
    - Socket*::auth_context
    - Server*::thread_local_options
    - HuluController::HuluController
    - IsTraceable
    - Span*::set_received_us
    - DestroyingPtr::reset
    - SampledRequest*::meta::set_method_index
    - DestroyingPtr::base_real_us
    - google::protobuf::Service*::GetResponsePrototype
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_service_name
    - std::unique_ptr::get
    - brpc::policy::SendHuluResponse
    - static_cast<size_t>
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - std::unique_ptr::request_attachment
    - butil::endpoint2str
    - std::unique_ptr::set_request_user_data
    - AskToBeSampled
    - ScopedNonServiceError::release
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - static_cast<const Server*>
    - HuluRpcRequestMeta::compress_type
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - Socket*::is_overcrowded
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::service_name
    - HuluRpcRequestMeta::log_id
    - Span*::set_request_size
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - SampledRequest*::meta::set_protocol_type
    - DestroyingPtr::meta::size
    - DestroyingPtr::payload::cutn
    - std::unique_ptr::set_request_compress_type
    - HuluRpcRequestMeta::has_user_data
    - DestroyingPtr::received_us
    - butil::IOBuf::clear
    - HuluRpcRequestMeta::user_data
    - butil::cpuwide_time_us
    - SampledRequest*::meta::set_user_data
    - brpc::policy::EndRunningCallMethodInPool
    - HuluRpcRequestMeta::trace_id
    - Span*::set_protocol
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - HuluRpcRequestMeta::has_trace_id
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - Server::MethodProperty*::service::GetDescriptor
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - HuluRpcRequestMeta::correlation_id
    - Server*::IsRunning
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - google::protobuf::MethodDescriptor*::full_name
    - HuluRpcRequestMeta::span_id
    - HuluRpcRequestMeta::has_log_id
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::parent_span_id
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - SocketUniquePtr::get
    - std::unique_ptr::set_log_id
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - HuluRpcRequestMeta::has_user_message_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - HuluRpcRequestMeta::user_message_size
    - HuluRpcRequestMeta::user_defined_source_addr
    - Span*::ResetServerSpanName
    - ParseFromCompressedData
    - std::unique_ptr::unique_ptr
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHuluRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:551,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:552,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:566,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:567,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:574,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:575,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:576,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 590
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - butil::IOBuf::IOBuf
    - MostCommonMessage*::socket
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - static_cast<const Server*>
    - PLOG_IF
    - HuluRpcRequestMeta::credential_data
    - MostCommonMessage*::arg
    - LOG
    - HuluRpcResponseMeta::mutable_error_text
    - Socket*::mutable_auth_context
    - Server*::options
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluRpcResponseMeta::set_error_code
    - static_cast<const MostCommonMessage*>
    - Authenticator*::VerifyCredential
    - std::string::empty
    - HuluRpcRequestMeta::correlation_id
    linkageType: ''
    returnType: bool
    signature: bool VerifyHuluRequest(const InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:593,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:597,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:603,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:606,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:611,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:622,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:627,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:634,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:635,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:642,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:647,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:649,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:658,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:659,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 660
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::cutn
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::error_code
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - HuluRpcResponseMeta::compress_type
    - brpc::policy::Hulu2CompressType
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::error_text
    - HuluRpcResponseMeta::user_defined_source_addr
    - HuluController*::set_response_source_addr
    - Span*::set_response_size
    - HuluRpcResponseMeta::has_user_data
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - HuluRpcResponseMeta::correlation_id
    - Controller*::ErrorCode
    - bthread_id_lock
    - HuluController*::set_response_user_data
    - Span*::set_received_us
    - HuluRpcResponseMeta::user_data
    - HuluRpcResponseMeta::has_user_message_size
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - Controller*::response_attachment
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: void ProcessHuluResponse(InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:670,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:672,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:683,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:692,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:693,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:694,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:701,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:702,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:707,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:708,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:714,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 6
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 726
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::request_compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_message_size
    - HuluRpcRequestMeta::set_trace_id
    - butil::IOBuf*::append
    - HuluRpcRequestMeta::set_method_index
    - Span*::span_id
    - HuluRpcRequestMeta::mutable_credential_data
    - Controller*::SetFailed
    - Span*::trace_id
    - HuluRpcRequestMeta::set_parent_span_id
    - brpc::policy::CompressType2Hulu
    - HuluRpcRequestMeta::set_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_log_id
    - HuluRpcRequestMeta::set_compress_type
    - HuluRpcRequestMeta::set_service_name
    - size
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - service_name
    - compress_type
    - HuluController*::request_user_data
    - Controller*::request_attachment
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - HuluController*::request_source_addr
    - method_index
    - HuluRpcRequestMeta::set_correlation_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_user_data
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - Span*::parent_span_id
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: "void PackHuluRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* auth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 79
    functionName: brpc::policy::Hulu2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Hulu2CompressType(HuluCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: brpc::policy::CompressType2Hulu
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: HuluCompressType
    signature: HuluCompressType CompressType2Hulu(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::policy::HuluRawPacker::HuluRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: brpc::policy::HuluRawUnpacker::HuluRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:146,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:147,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - hulu_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackHuluHeader(char* hulu_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:155,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:158,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:163,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:167,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 173
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - brpc::policy::PackHuluHeader
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeHuluHeaderAndMeta(\n    butil::IOBuf* out, const Meta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:178,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:182,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:190,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:199,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:206,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:207,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:211,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:215,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 218
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - __builtin_expect
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHuluMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:230,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:234,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:240,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:246,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:250,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:251,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:252,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:257,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:268,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:269,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:273,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:274,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:275,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:280,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:286,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:289,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:294,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:316,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:318,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:320,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:325,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 62
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - HuluController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 222
    functionDepth: 5
    functionLinenumber: 222
    functionLinenumberEnd: 330
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - Span*::set_start_send_us
    - HuluRpcResponseMeta::set_user_message_size
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - HuluController*::ErrorText
    - google::protobuf::Message*::InitializationErrorString
    - brpc::policy::CompressType2Hulu
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - HuluController*::response_attachment
    - HuluController*::ErrorCode
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - butil::IOBuf::movable
    - bthread_id_join
    - HuluRpcResponseMeta::set_compress_type
    - HuluController*::response_compress_type
    - PLOG_IF
    - Span*::set_response_size
    - google::protobuf::Message*::IsInitialized
    - HuluController*::response_source_addr
    - butil::IOBuf::length
    - butil::IOBuf::size
    - HuluController*::response_user_data
    - Socket*::description
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::SetFailed
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluController*::IsCloseConnection
    - HuluController*::Failed
    - HuluRpcResponseMeta::set_error_code
    - Span*::set_sent_us
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SerializeAsCompressedData
    linkageType: ''
    returnType: void
    signature: "void SendHuluResponse(int64_t correlation_id,\n                             HuluController*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:342,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:344,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:345,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:351,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:352,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:357,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:361,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:375,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:378,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:379,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:383,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:384,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:394,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:410,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:416,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:430,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:431,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:436,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:437,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:441,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:447,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:462,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:470,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:474,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:475,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:483,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:493,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:495,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:498,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:503,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:511,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:517,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:531,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:534,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:536,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:537,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 341
    functionDepth: 6
    functionLinenumber: 341
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HuluRpcRequestMeta::method_index
    - std::unique_ptr::remote_side
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::GetRequestPrototype
    - std::unique_ptr::set_request_source_addr
    - Server*::AcceptRequest
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - std::unique_ptr::release
    - Socket*::auth_context
    - Server*::thread_local_options
    - HuluController::HuluController
    - IsTraceable
    - Span*::set_received_us
    - DestroyingPtr::reset
    - SampledRequest*::meta::set_method_index
    - DestroyingPtr::base_real_us
    - google::protobuf::Service*::GetResponsePrototype
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_service_name
    - std::unique_ptr::get
    - brpc::policy::SendHuluResponse
    - static_cast<size_t>
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - std::unique_ptr::request_attachment
    - butil::endpoint2str
    - std::unique_ptr::set_request_user_data
    - AskToBeSampled
    - ScopedNonServiceError::release
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - static_cast<const Server*>
    - HuluRpcRequestMeta::compress_type
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - Socket*::is_overcrowded
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::service_name
    - HuluRpcRequestMeta::log_id
    - Span*::set_request_size
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - SampledRequest*::meta::set_protocol_type
    - DestroyingPtr::meta::size
    - DestroyingPtr::payload::cutn
    - std::unique_ptr::set_request_compress_type
    - HuluRpcRequestMeta::has_user_data
    - DestroyingPtr::received_us
    - butil::IOBuf::clear
    - HuluRpcRequestMeta::user_data
    - butil::cpuwide_time_us
    - SampledRequest*::meta::set_user_data
    - brpc::policy::EndRunningCallMethodInPool
    - HuluRpcRequestMeta::trace_id
    - Span*::set_protocol
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - HuluRpcRequestMeta::has_trace_id
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - Server::MethodProperty*::service::GetDescriptor
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - HuluRpcRequestMeta::correlation_id
    - Server*::IsRunning
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - google::protobuf::MethodDescriptor*::full_name
    - HuluRpcRequestMeta::span_id
    - HuluRpcRequestMeta::has_log_id
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::parent_span_id
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - SocketUniquePtr::get
    - std::unique_ptr::set_log_id
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - HuluRpcRequestMeta::has_user_message_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - HuluRpcRequestMeta::user_message_size
    - HuluRpcRequestMeta::user_defined_source_addr
    - Span*::ResetServerSpanName
    - ParseFromCompressedData
    - std::unique_ptr::unique_ptr
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHuluRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:551,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:552,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:566,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:567,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:574,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:575,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:576,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 590
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - butil::IOBuf::IOBuf
    - MostCommonMessage*::socket
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - static_cast<const Server*>
    - PLOG_IF
    - HuluRpcRequestMeta::credential_data
    - MostCommonMessage*::arg
    - LOG
    - HuluRpcResponseMeta::mutable_error_text
    - Socket*::mutable_auth_context
    - Server*::options
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluRpcResponseMeta::set_error_code
    - static_cast<const MostCommonMessage*>
    - Authenticator*::VerifyCredential
    - std::string::empty
    - HuluRpcRequestMeta::correlation_id
    linkageType: ''
    returnType: bool
    signature: bool VerifyHuluRequest(const InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:593,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:597,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:603,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:606,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:611,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:622,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:627,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:634,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:635,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:642,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:647,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:649,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:658,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:659,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 660
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::cutn
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::error_code
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - HuluRpcResponseMeta::compress_type
    - brpc::policy::Hulu2CompressType
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::error_text
    - HuluRpcResponseMeta::user_defined_source_addr
    - HuluController*::set_response_source_addr
    - Span*::set_response_size
    - HuluRpcResponseMeta::has_user_data
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - HuluRpcResponseMeta::correlation_id
    - Controller*::ErrorCode
    - bthread_id_lock
    - HuluController*::set_response_user_data
    - Span*::set_received_us
    - HuluRpcResponseMeta::user_data
    - HuluRpcResponseMeta::has_user_message_size
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - Controller*::response_attachment
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: void ProcessHuluResponse(InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:670,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:672,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:683,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:692,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:693,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:694,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:701,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:702,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:707,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:708,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:714,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 6
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 726
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::request_compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_message_size
    - HuluRpcRequestMeta::set_trace_id
    - butil::IOBuf*::append
    - HuluRpcRequestMeta::set_method_index
    - Span*::span_id
    - HuluRpcRequestMeta::mutable_credential_data
    - Controller*::SetFailed
    - Span*::trace_id
    - HuluRpcRequestMeta::set_parent_span_id
    - brpc::policy::CompressType2Hulu
    - HuluRpcRequestMeta::set_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_log_id
    - HuluRpcRequestMeta::set_compress_type
    - HuluRpcRequestMeta::set_service_name
    - size
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - service_name
    - compress_type
    - HuluController*::request_user_data
    - Controller*::request_attachment
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - HuluController*::request_source_addr
    - method_index
    - HuluRpcRequestMeta::set_correlation_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_user_data
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - Span*::parent_span_id
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: "void PackHuluRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* auth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 79
    functionName: brpc::policy::Hulu2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Hulu2CompressType(HuluCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: brpc::policy::CompressType2Hulu
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - LOG
    linkageType: ''
    returnType: HuluCompressType
    signature: HuluCompressType CompressType2Hulu(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::policy::HuluRawPacker::HuluRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: brpc::policy::HuluRawUnpacker::HuluRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:146,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:147,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - hulu_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackHuluHeader(char* hulu_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:155,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:158,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:163,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:167,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 173
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - brpc::policy::PackHuluHeader
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeHuluHeaderAndMeta(\n    butil::IOBuf* out, const Meta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:178,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:182,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:190,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:199,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:206,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:207,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:211,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:215,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 218
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - __builtin_expect
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHuluMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:230,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:234,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:240,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:246,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:250,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:251,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:252,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:257,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:268,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:269,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:273,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:274,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:275,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:280,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:286,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:289,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:294,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:316,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:318,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:320,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:325,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 62
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - HuluController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 222
    functionDepth: 5
    functionLinenumber: 222
    functionLinenumberEnd: 330
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - Span*::set_start_send_us
    - HuluRpcResponseMeta::set_user_message_size
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - HuluController*::ErrorText
    - google::protobuf::Message*::InitializationErrorString
    - brpc::policy::CompressType2Hulu
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - HuluController*::response_attachment
    - HuluController*::ErrorCode
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - butil::IOBuf::movable
    - bthread_id_join
    - HuluRpcResponseMeta::set_compress_type
    - HuluController*::response_compress_type
    - PLOG_IF
    - Span*::set_response_size
    - google::protobuf::Message*::IsInitialized
    - HuluController*::response_source_addr
    - butil::IOBuf::length
    - butil::IOBuf::size
    - HuluController*::response_user_data
    - Socket*::description
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::SetFailed
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluController*::IsCloseConnection
    - HuluController*::Failed
    - HuluRpcResponseMeta::set_error_code
    - Span*::set_sent_us
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SerializeAsCompressedData
    linkageType: ''
    returnType: void
    signature: "void SendHuluResponse(int64_t correlation_id,\n                             HuluController*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:342,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:344,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:345,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:351,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:352,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:357,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:361,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:375,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:378,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:379,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:383,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:384,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:394,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:410,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:416,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:430,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:431,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:436,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:437,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:441,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:447,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:462,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:470,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:474,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:475,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:483,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:493,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:495,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:498,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:503,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:511,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:517,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:531,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:534,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:536,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:537,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 341
    functionDepth: 6
    functionLinenumber: 341
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HuluRpcRequestMeta::method_index
    - std::unique_ptr::remote_side
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::GetRequestPrototype
    - std::unique_ptr::set_request_source_addr
    - Server*::AcceptRequest
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - std::unique_ptr::release
    - Socket*::auth_context
    - Server*::thread_local_options
    - HuluController::HuluController
    - IsTraceable
    - Span*::set_received_us
    - DestroyingPtr::reset
    - SampledRequest*::meta::set_method_index
    - DestroyingPtr::base_real_us
    - google::protobuf::Service*::GetResponsePrototype
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_service_name
    - std::unique_ptr::get
    - brpc::policy::SendHuluResponse
    - static_cast<size_t>
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - std::unique_ptr::request_attachment
    - butil::endpoint2str
    - std::unique_ptr::set_request_user_data
    - AskToBeSampled
    - ScopedNonServiceError::release
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - static_cast<const Server*>
    - HuluRpcRequestMeta::compress_type
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - Socket*::is_overcrowded
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::service_name
    - HuluRpcRequestMeta::log_id
    - Span*::set_request_size
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - SampledRequest*::meta::set_protocol_type
    - DestroyingPtr::meta::size
    - DestroyingPtr::payload::cutn
    - std::unique_ptr::set_request_compress_type
    - HuluRpcRequestMeta::has_user_data
    - DestroyingPtr::received_us
    - butil::IOBuf::clear
    - HuluRpcRequestMeta::user_data
    - butil::cpuwide_time_us
    - SampledRequest*::meta::set_user_data
    - brpc::policy::EndRunningCallMethodInPool
    - HuluRpcRequestMeta::trace_id
    - Span*::set_protocol
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - HuluRpcRequestMeta::has_trace_id
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - Server::MethodProperty*::service::GetDescriptor
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - HuluRpcRequestMeta::correlation_id
    - Server*::IsRunning
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - google::protobuf::MethodDescriptor*::full_name
    - HuluRpcRequestMeta::span_id
    - HuluRpcRequestMeta::has_log_id
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::parent_span_id
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - SocketUniquePtr::get
    - std::unique_ptr::set_log_id
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - HuluRpcRequestMeta::has_user_message_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - HuluRpcRequestMeta::user_message_size
    - HuluRpcRequestMeta::user_defined_source_addr
    - Span*::ResetServerSpanName
    - ParseFromCompressedData
    - std::unique_ptr::unique_ptr
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHuluRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:551,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:552,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:566,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:567,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:574,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:575,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:576,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 590
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - butil::IOBuf::IOBuf
    - MostCommonMessage*::socket
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - static_cast<const Server*>
    - PLOG_IF
    - HuluRpcRequestMeta::credential_data
    - MostCommonMessage*::arg
    - LOG
    - HuluRpcResponseMeta::mutable_error_text
    - Socket*::mutable_auth_context
    - Server*::options
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluRpcResponseMeta::set_error_code
    - static_cast<const MostCommonMessage*>
    - Authenticator*::VerifyCredential
    - std::string::empty
    - HuluRpcRequestMeta::correlation_id
    linkageType: ''
    returnType: bool
    signature: bool VerifyHuluRequest(const InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:593,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:597,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:603,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:606,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:611,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:622,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:627,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:634,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:635,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:642,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:647,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:649,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:658,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:659,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 660
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::cutn
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::error_code
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - HuluRpcResponseMeta::compress_type
    - brpc::policy::Hulu2CompressType
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::error_text
    - HuluRpcResponseMeta::user_defined_source_addr
    - HuluController*::set_response_source_addr
    - Span*::set_response_size
    - HuluRpcResponseMeta::has_user_data
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - HuluRpcResponseMeta::correlation_id
    - Controller*::ErrorCode
    - bthread_id_lock
    - HuluController*::set_response_user_data
    - Span*::set_received_us
    - HuluRpcResponseMeta::user_data
    - HuluRpcResponseMeta::has_user_message_size
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - Controller*::response_attachment
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: void ProcessHuluResponse(InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:670,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:672,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:683,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:692,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:693,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:694,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:701,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:702,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:707,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:708,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:714,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 6
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 726
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::request_compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_message_size
    - HuluRpcRequestMeta::set_trace_id
    - butil::IOBuf*::append
    - HuluRpcRequestMeta::set_method_index
    - Span*::span_id
    - HuluRpcRequestMeta::mutable_credential_data
    - Controller*::SetFailed
    - Span*::trace_id
    - HuluRpcRequestMeta::set_parent_span_id
    - brpc::policy::CompressType2Hulu
    - HuluRpcRequestMeta::set_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_log_id
    - HuluRpcRequestMeta::set_compress_type
    - HuluRpcRequestMeta::set_service_name
    - size
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - service_name
    - compress_type
    - HuluController*::request_user_data
    - Controller*::request_attachment
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - HuluController*::request_source_addr
    - method_index
    - HuluRpcRequestMeta::set_correlation_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_user_data
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - Span*::parent_span_id
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: "void PackHuluRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* auth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 79
    functionName: brpc::policy::Hulu2CompressType
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - LOG
    linkageType: ''
    returnType: CompressType
    signature: CompressType Hulu2CompressType(HuluCompressType type)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:95,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: brpc::policy::CompressType2Hulu
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - LOG
    linkageType: ''
    returnType: HuluCompressType
    signature: HuluCompressType CompressType2Hulu(CompressType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::policy::HuluRawPacker::HuluRawPacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: '& pack32(uint32_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack32(uint32_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - hostvalue
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: '& pack64(uint64_t hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawPacker
    signature: HuluRawPacker & pack64(uint64_t hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: brpc::policy::HuluRawUnpacker::HuluRawUnpacker
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluRawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 132
    functionName: '& unpack32(uint32_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack32(uint32_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' hostvalue'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: '& unpack64(uint64_t & hostvalue)'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HuluRawUnpacker
    signature: HuluRawUnpacker & unpack64(uint64_t & hostvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:146,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:147,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - hulu_header
    - meta_size
    - body_size
    argTypes:
    - char*
    - uint32_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - reinterpret_cast<uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<const uint32_t*>
    linkageType: ''
    returnType: void
    signature: void PackHuluHeader(char* hulu_header, uint32_t meta_size, int body_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:155,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:158,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:162,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:163,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:167,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 173
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - brpc::policy::PackHuluHeader
    - SerializeWithCachedSizes
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void SerializeHuluHeaderAndMeta(\n    butil::IOBuf* out, const Meta&
      meta, int payload_size)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:178,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:182,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:190,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:199,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:200,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:206,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:207,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:211,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:215,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 218
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - memcmp
    - butil::IOBuf*::cutn
    - butil::IOBuf*::copy_to
    - MakeParseError
    - butil::IOBuf*::length
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - __builtin_expect
    - MakeMessage
    - Socket*::remote_side
    - TestRpcPBMessageFactory::Get
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseHuluMessage(butil::IOBuf* source, Socket* socket,\n
      \                            bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:230,1
    - Dst: Span*::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:232,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:234,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:240,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:246,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:250,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:251,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:252,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:257,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:268,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:269,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:273,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:274,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:275,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:280,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:282,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:286,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:287,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:289,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:294,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:298,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:302,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:312,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:316,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:318,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:320,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:325,1
    - Dst: Span*::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 62
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - req
    - res
    - server
    - method_status
    - received_us
    argTypes:
    - int64_t
    - HuluController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - Server*
    - MethodStatus*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 222
    functionDepth: 5
    functionLinenumber: 222
    functionLinenumberEnd: 330
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - ControllerPrivateAccessor::span
    - bthread_id_create
    - Span*::set_start_send_us
    - HuluRpcResponseMeta::set_user_message_size
    - CHECK_EQ
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - HuluController*::ErrorText
    - google::protobuf::Message*::InitializationErrorString
    - brpc::policy::CompressType2Hulu
    - ControllerPrivateAccessor::get_sending_socket
    - butil::cpuwide_time_us
    - HuluController*::response_attachment
    - HuluController*::ErrorCode
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - butil::IOBuf::movable
    - bthread_id_join
    - HuluRpcResponseMeta::set_compress_type
    - HuluController*::response_compress_type
    - PLOG_IF
    - Span*::set_response_size
    - google::protobuf::Message*::IsInitialized
    - HuluController*::response_source_addr
    - butil::IOBuf::length
    - butil::IOBuf::size
    - HuluController*::response_user_data
    - Socket*::description
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::SetFailed
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluController*::IsCloseConnection
    - HuluController*::Failed
    - HuluRpcResponseMeta::set_error_code
    - Span*::set_sent_us
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SerializeAsCompressedData
    linkageType: ''
    returnType: void
    signature: "void SendHuluResponse(int64_t correlation_id,\n                             HuluController*
      cntl, \n                             const google::protobuf::Message* req,\n
      \                            const google::protobuf::Message* res,\n                             const
      Server* server,\n                             MethodStatus* method_status,\n
      \                            int64_t received_us)"
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:342,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:344,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:345,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:346,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:351,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:352,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:356,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:357,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:361,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:375,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:378,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:379,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:383,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:384,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:394,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:401,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:405,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:410,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:411,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:415,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:416,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:417,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: Span*::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: Span*::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: Span*::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: Span*::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:430,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:431,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:435,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:436,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:437,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:441,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:447,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:448,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:458,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:462,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:470,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:474,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:475,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:483,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:485,1
    - Dst: Span*::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:490,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:492,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:493,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:495,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:498,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:501,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:503,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
        \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
        *, int64_t>"
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:511,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:516,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:517,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: Span*::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: Span*::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:531,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:532,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:533,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:534,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:536,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:537,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:544,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:545,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:546,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 341
    functionDepth: 6
    functionLinenumber: 341
    functionLinenumberEnd: 547
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HuluRpcRequestMeta::method_index
    - std::unique_ptr::remote_side
    - BadMethodRequest::set_service_name
    - ServerPrivateAccessor::AddConcurrency
    - bthread_assign_data
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::GetRequestPrototype
    - std::unique_ptr::set_request_source_addr
    - Server*::AcceptRequest
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - brpc::Span::CreateServerSpan
    - Server::MethodProperty*::service::CallMethod
    - std::unique_ptr::release
    - Socket*::auth_context
    - Server*::thread_local_options
    - HuluController::HuluController
    - IsTraceable
    - Span*::set_received_us
    - DestroyingPtr::reset
    - SampledRequest*::meta::set_method_index
    - DestroyingPtr::base_real_us
    - google::protobuf::Service*::GetResponsePrototype
    - pbrpcframework::get_prototype_by_method_descriptor
    - Span*::set_start_parse_us
    - SampledRequest*::meta::set_service_name
    - std::unique_ptr::get
    - brpc::policy::SendHuluResponse
    - static_cast<size_t>
    - DestroyingPtr::payload::size
    - std::unique_ptr::reset
    - std::unique_ptr::request_attachment
    - butil::endpoint2str
    - std::unique_ptr::set_request_user_data
    - AskToBeSampled
    - ScopedNonServiceError::release
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - static_cast<const Server*>
    - HuluRpcRequestMeta::compress_type
    - Socket*::local_side
    - Server::MethodProperty*::method::full_name
    - Socket*::is_overcrowded
    - std::unique_ptr::SetFailed
    - SampledRequest*::submit
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::service_name
    - HuluRpcRequestMeta::log_id
    - Span*::set_request_size
    - Socket*::SetFailed
    - CompressTypeToCStr
    - SampledRequest*::meta::set_compress_type
    - Socket*::user
    - SampledRequest*::meta::set_protocol_type
    - DestroyingPtr::meta::size
    - DestroyingPtr::payload::cutn
    - std::unique_ptr::set_request_compress_type
    - HuluRpcRequestMeta::has_user_data
    - DestroyingPtr::received_us
    - butil::IOBuf::clear
    - HuluRpcRequestMeta::user_data
    - butil::cpuwide_time_us
    - SampledRequest*::meta::set_user_data
    - brpc::policy::EndRunningCallMethodInPool
    - HuluRpcRequestMeta::trace_id
    - Span*::set_protocol
    - EndRunningUserCodeInPlace
    - Server*::options
    - BeginRunningUserCode
    - Socket*::remote_side
    - Socket*::id
    - HuluRpcRequestMeta::has_trace_id
    - TooManyUserCode
    - ControllerPrivateAccessor::set_method
    - Server::MethodProperty*::service::GetDescriptor
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - HuluRpcRequestMeta::correlation_id
    - Server*::IsRunning
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - google::protobuf::MethodDescriptor*::full_name
    - HuluRpcRequestMeta::span_id
    - HuluRpcRequestMeta::has_log_id
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::parent_span_id
    - LOG
    - Span*::set_start_callback_us
    - DestroyingPtr::ReleaseSocket
    - Span*::set_remote_side
    - SocketUniquePtr::get
    - std::unique_ptr::set_log_id
    - SampledRequest*::meta::set_attachment_size
    - ParsePbFromIOBuf
    - HuluRpcRequestMeta::has_user_message_size
    - ServerPrivateAccessor::acceptor
    - ControllerPrivateAccessor::set_server
    - InputMessageBase*::arg
    - HuluRpcRequestMeta::user_message_size
    - HuluRpcRequestMeta::user_defined_source_addr
    - Span*::ResetServerSpanName
    - ParseFromCompressedData
    - std::unique_ptr::unique_ptr
    - Span*::set_log_id
    - Span*::AsParent
    linkageType: ''
    returnType: void
    signature: void ProcessHuluRequest(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:551,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:552,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:553,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:565,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:566,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:567,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:573,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:574,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:575,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:576,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 549
    functionDepth: 2
    functionLinenumber: 549
    functionLinenumberEnd: 590
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - butil::IOBuf::IOBuf
    - MostCommonMessage*::socket
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - static_cast<const Server*>
    - PLOG_IF
    - HuluRpcRequestMeta::credential_data
    - MostCommonMessage*::arg
    - LOG
    - HuluRpcResponseMeta::mutable_error_text
    - Socket*::mutable_auth_context
    - Server*::options
    - ParsePbFromIOBuf
    - Socket*::remote_side
    - Socket*::Write
    - HuluRpcResponseMeta::set_correlation_id
    - HuluRpcResponseMeta::set_error_code
    - static_cast<const MostCommonMessage*>
    - Authenticator*::VerifyCredential
    - std::string::empty
    - HuluRpcRequestMeta::correlation_id
    linkageType: ''
    returnType: bool
    signature: bool VerifyHuluRequest(const InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:593,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:597,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:603,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:606,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:611,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:613,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:614,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:621,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:622,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:627,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:634,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:635,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:642,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:647,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:649,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:658,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:659,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 660
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::cutn
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::error_code
    - Controller*::set_response_compress_type
    - DestroyingPtr::payload::length
    - butil::IOBuf::IOBuf
    - Controller*::SetFailed
    - HuluRpcResponseMeta::compress_type
    - brpc::policy::Hulu2CompressType
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::error_text
    - HuluRpcResponseMeta::user_defined_source_addr
    - HuluController*::set_response_source_addr
    - Span*::set_response_size
    - HuluRpcResponseMeta::has_user_data
    - LOG
    - static_cast<uint64_t>
    - LOG_IF
    - Controller*::response
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - HuluRpcResponseMeta::correlation_id
    - Controller*::ErrorCode
    - bthread_id_lock
    - HuluController*::set_response_user_data
    - Span*::set_received_us
    - HuluRpcResponseMeta::user_data
    - HuluRpcResponseMeta::has_user_message_size
    - ParsePbFromIOBuf
    - berror
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - CompressTypeToCStr
    - ParseFromCompressedData
    - Controller*::response_attachment
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: void ProcessHuluResponse(InputMessageBase* msg_base)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:670,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:671,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:672,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:676,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:677,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:678,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:682,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:683,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:692,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:693,1
    - Dst: HuluController*::request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:694,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:697,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:701,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:702,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:703,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:707,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:708,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:714,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:716,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:718,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:722,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 6
    argNames:
    - req_buf
    - correlation_id
    - method
    - cntl
    - ' req_body'
    - auth
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - google::protobuf::MethodDescriptor*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 726
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::request_compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_message_size
    - HuluRpcRequestMeta::set_trace_id
    - butil::IOBuf*::append
    - HuluRpcRequestMeta::set_method_index
    - Span*::span_id
    - HuluRpcRequestMeta::mutable_credential_data
    - Controller*::SetFailed
    - Span*::trace_id
    - HuluRpcRequestMeta::set_parent_span_id
    - brpc::policy::CompressType2Hulu
    - HuluRpcRequestMeta::set_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_log_id
    - HuluRpcRequestMeta::set_compress_type
    - HuluRpcRequestMeta::set_service_name
    - size
    - google::protobuf::MethodDescriptor*::service
    - Controller*::log_id
    - service_name
    - compress_type
    - HuluController*::request_user_data
    - Controller*::request_attachment
    - Controller*::has_log_id
    - google::protobuf::MethodDescriptor*::index
    - HuluController*::request_source_addr
    - method_index
    - HuluRpcRequestMeta::set_correlation_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_user_data
    - Authenticator*::GenerateCredential
    - ControllerPrivateAccessor
    - Span*::parent_span_id
    - dynamic_cast<HuluController*>
    linkageType: ''
    returnType: void
    signature: "void PackHuluRequest(butil::IOBuf* req_buf,\n                     SocketMessage**,\n
      \                    uint64_t correlation_id,\n                     const google::protobuf::MethodDescriptor*
      method,\n                     Controller* cntl,\n                     const
      butil::IOBuf& req_body,\n                     const Authenticator* auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::volatile_value
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t volatile_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::Disabled
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Disabled() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: brpc::policy::LocalityAwareLoadBalancer::Servers::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:144,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: brpc::policy::LocalityAwareLoadBalancer::PushLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - push_back
    - back
    linkageType: ''
    returnType: butil::atomic<int64_t>
    signature: butil::atomic<int64_t> * PushLeft()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: brpc::policy::LocalityAwareLoadBalancer::PopLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - pop_back
    linkageType: ''
    returnType: void
    signature: void PopLeft()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: left::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:160,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - diff
    - index
    argTypes:
    - int64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 165
    functionName: "LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - left::fetch_add
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - index
    - now_us
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: "LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t index,
      int64_t now_us)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t
      index, int64_t now_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:194,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:195,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' in'
    - index
    - dice
    argTypes:
    - SelectIn
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 209
    functionName: "LocalityAwareLoadBalancer::Weight::AddInflight(\n    const SelectIn&
      in, size_t index, int64_t dice)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - Disabled
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: LocalityAwareLoadBalancer::Weight::AddInflightResult
    signature: "LocalityAwareLoadBalancer::Weight::AddInflightResult LocalityAwareLoadBalancer::Weight::AddInflight(\n
      \   const SelectIn& in, size_t index, int64_t dice)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:213,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - index
    - avg_weight
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 219
    functionName: "LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t index,
      int64_t avg_weight)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t
      index, int64_t avg_weight)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::volatile_value
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t volatile_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::Disabled
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Disabled() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: brpc::policy::LocalityAwareLoadBalancer::Servers::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:144,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: brpc::policy::LocalityAwareLoadBalancer::PushLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - push_back
    - back
    linkageType: ''
    returnType: butil::atomic<int64_t>
    signature: butil::atomic<int64_t> * PushLeft()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: brpc::policy::LocalityAwareLoadBalancer::PopLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - pop_back
    linkageType: ''
    returnType: void
    signature: void PopLeft()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: left::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:160,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - diff
    - index
    argTypes:
    - int64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 165
    functionName: "LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - left::fetch_add
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - index
    - now_us
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: "LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t index,
      int64_t now_us)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t
      index, int64_t now_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:194,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:195,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' in'
    - index
    - dice
    argTypes:
    - SelectIn
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 209
    functionName: "LocalityAwareLoadBalancer::Weight::AddInflight(\n    const SelectIn&
      in, size_t index, int64_t dice)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - Disabled
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: LocalityAwareLoadBalancer::Weight::AddInflightResult
    signature: "LocalityAwareLoadBalancer::Weight::AddInflightResult LocalityAwareLoadBalancer::Weight::AddInflight(\n
      \   const SelectIn& in, size_t index, int64_t dice)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:213,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - index
    - avg_weight
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 219
    functionName: "LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t index,
      int64_t avg_weight)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t
      index, int64_t avg_weight)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::volatile_value
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t volatile_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::Disabled
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Disabled() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: brpc::policy::LocalityAwareLoadBalancer::Servers::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:144,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: brpc::policy::LocalityAwareLoadBalancer::PushLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - push_back
    - back
    linkageType: ''
    returnType: butil::atomic<int64_t>
    signature: butil::atomic<int64_t> * PushLeft()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: brpc::policy::LocalityAwareLoadBalancer::PopLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - pop_back
    linkageType: ''
    returnType: void
    signature: void PopLeft()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: left::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:160,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - diff
    - index
    argTypes:
    - int64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 165
    functionName: "LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - left::fetch_add
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - index
    - now_us
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: "LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t index,
      int64_t now_us)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t
      index, int64_t now_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:194,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:195,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' in'
    - index
    - dice
    argTypes:
    - SelectIn
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 209
    functionName: "LocalityAwareLoadBalancer::Weight::AddInflight(\n    const SelectIn&
      in, size_t index, int64_t dice)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - Disabled
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: LocalityAwareLoadBalancer::Weight::AddInflightResult
    signature: "LocalityAwareLoadBalancer::Weight::AddInflightResult LocalityAwareLoadBalancer::Weight::AddInflight(\n
      \   const SelectIn& in, size_t index, int64_t dice)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:213,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - index
    - avg_weight
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 219
    functionName: "LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t index,
      int64_t avg_weight)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t
      index, int64_t avg_weight)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::volatile_value
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t volatile_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::policy::LocalityAwareLoadBalancer::Weight::Disabled
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Disabled() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:121,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: brpc::policy::LocalityAwareLoadBalancer::Servers::Servers
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void Servers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:144,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 146
    functionName: brpc::policy::LocalityAwareLoadBalancer::PushLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - push_back
    - back
    linkageType: ''
    returnType: butil::atomic<int64_t>
    signature: butil::atomic<int64_t> * PushLeft()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: brpc::policy::LocalityAwareLoadBalancer::PopLeft
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - pop_back
    linkageType: ''
    returnType: void
    signature: void PopLeft()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: left::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:160,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - diff
    - index
    argTypes:
    - int64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 165
    functionName: "LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - left::fetch_add
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Servers::UpdateParentWeights(\n    int64_t
      diff, size_t index) const"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - index
    - now_us
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: "LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t index,
      int64_t now_us)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::ResetWeight(\n    size_t
      index, int64_t now_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:194,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:195,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' in'
    - index
    - dice
    argTypes:
    - SelectIn
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 209
    functionName: "LocalityAwareLoadBalancer::Weight::AddInflight(\n    const SelectIn&
      in, size_t index, int64_t dice)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - Disabled
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: LocalityAwareLoadBalancer::Weight::AddInflightResult
    signature: "LocalityAwareLoadBalancer::Weight::AddInflightResult LocalityAwareLoadBalancer::Weight::AddInflight(\n
      \   const SelectIn& in, size_t index, int64_t dice)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:213,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - index
    - avg_weight
    argTypes:
    - size_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 219
    functionName: "LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t index,
      int64_t avg_weight)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.h
    functionUses: 0
    functionsReached:
    - ResetWeight
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::MarkFailed(\n    size_t
      index, int64_t avg_weight)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: ~ReplicaPolicy()
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - hash
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::DefaultReplicaPolicy::DefaultReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultReplicaPolicy(HashFunc hash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetHashName
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: brpc::policy::DefaultReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetHashName
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:70,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:78,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:81,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: _hash_func
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:85,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:87,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 91
    functionName: brpc::policy::DefaultReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - _hash_func
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::remote_side
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool DefaultReplicaPolicy::Build(ServerId server,\n                                 size_t
      num_replicas,\n                                 std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::policy::KetamaReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:106,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:109,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:111,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:117,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:120,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: MD5HashSignature
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:124,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:128,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:133,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 137
    functionName: brpc::policy::KetamaReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK
    - SocketUniquePtr::remote_side
    - MD5HashSignature
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool KetamaReplicaPolicy::Build(ServerId server,\n                                size_t
      num_replicas,\n                                std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 164
    functionName: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - CHECK
    - GetReplicaPolicy
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer(\n
      \   ConsistentHashingLoadBalancerType type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::set_union
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:177,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<Node>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 179
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::begin
    - std::vector<Node>::resize
    - std::vector<Node>::end
    - std::vector<Node>::size
    - std::set_union
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg, \n        const std::vector<Node> &servers,
      bool *executed)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<ServerId>::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:188,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:192,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:195,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:196,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:205,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:206,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:208,1
    - Dst: std::find
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:210,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:212,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<ServerId>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<ServerId>::end
    - std::vector<ServerId>::size
    - butil::FlatSet::init
    - std::find
    - butil::FlatSet::seek
    - std::vector<ServerId>::empty
    - std::vector<Node>::clear
    - std::vector<Node>::size
    - CHECK
    - std::vector<ServerId>::begin
    - berror
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    - std::vector<Node>::push_back
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const std::vector<ServerId> &servers,
      bool *executed)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:225,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:226,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:228,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - bg
    - fg
    - ' server'
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - ServerId
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 232
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    - std::vector<Node>::clear
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::Remove(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const ServerId& server, bool *executed)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:236,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:237,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:242,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 246
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - CHECK
    - ModifyWithForeground
    - std::vector::reserve
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::AddServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:253,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:254,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:255,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:256,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:262,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:263,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 269
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector<ServerId>::size
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - std::vector::insert
    - CHECK
    - ModifyWithForeground
    - std::vector::clear
    - std::vector::reserve
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:273,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 276
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::RemoveServer(const ServerId& server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:281,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 285
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:289,1
    - Dst: ConsistentHashingLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:290,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 295
    functionName: brpc::policy::ConsistentHashingLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ConsistentHashingLoadBalancer*::SetParameters
    - ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: LoadBalancer *ConsistentHashingLoadBalancer::New(const butil::StringPiece&
      params) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 299
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsistentHashingLoadBalancer::Destroy()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:308,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:312,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:315,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:320,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:321,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:323,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:324,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:325,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:327,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:331,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 301
    functionDepth: 3
    functionLinenumber: 301
    functionLinenumberEnd: 336
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: "int ConsistentHashingLoadBalancer::SelectServer(\n    const SelectIn
      &in, SelectOut *out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:345,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:348,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:349,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:351,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:364,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 366
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetReplicaPolicy
    - std::map::begin
    - sqrt
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - std::map::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::map<butil::EndPoint, double>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:370,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:377,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:382,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:383,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 391
    functionName: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - std::map<butil::EndPoint, double>*::clear
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::GetLoads(\n    std::map<butil::EndPoint,
      double> *load_map)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 409
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - butil::KeyValuePairsSplitter::key_and_value
    - begin
    - butil::StringToSizeT
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: ~ReplicaPolicy()
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - hash
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::DefaultReplicaPolicy::DefaultReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultReplicaPolicy(HashFunc hash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetHashName
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: brpc::policy::DefaultReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetHashName
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:70,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:78,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:81,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: _hash_func
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:85,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:87,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 91
    functionName: brpc::policy::DefaultReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - _hash_func
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::remote_side
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool DefaultReplicaPolicy::Build(ServerId server,\n                                 size_t
      num_replicas,\n                                 std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::policy::KetamaReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:106,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:109,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:111,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:117,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:120,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: MD5HashSignature
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:124,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:128,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:133,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 137
    functionName: brpc::policy::KetamaReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK
    - SocketUniquePtr::remote_side
    - MD5HashSignature
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool KetamaReplicaPolicy::Build(ServerId server,\n                                size_t
      num_replicas,\n                                std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 164
    functionName: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - CHECK
    - GetReplicaPolicy
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer(\n
      \   ConsistentHashingLoadBalancerType type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::set_union
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:177,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<Node>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 179
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::begin
    - std::vector<Node>::resize
    - std::vector<Node>::end
    - std::vector<Node>::size
    - std::set_union
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg, \n        const std::vector<Node> &servers,
      bool *executed)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<ServerId>::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:188,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:192,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:195,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:196,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:205,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:206,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:208,1
    - Dst: std::find
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:210,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:212,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<ServerId>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<ServerId>::end
    - std::vector<ServerId>::size
    - butil::FlatSet::init
    - std::find
    - butil::FlatSet::seek
    - std::vector<ServerId>::empty
    - std::vector<Node>::clear
    - std::vector<Node>::size
    - CHECK
    - std::vector<ServerId>::begin
    - berror
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    - std::vector<Node>::push_back
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const std::vector<ServerId> &servers,
      bool *executed)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:225,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:226,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:228,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - bg
    - fg
    - ' server'
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - ServerId
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 232
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    - std::vector<Node>::clear
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::Remove(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const ServerId& server, bool *executed)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:236,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:237,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:242,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 246
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - CHECK
    - ModifyWithForeground
    - std::vector::reserve
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::AddServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:253,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:254,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:255,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:256,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:262,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:263,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 269
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector<ServerId>::size
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - std::vector::insert
    - CHECK
    - ModifyWithForeground
    - std::vector::clear
    - std::vector::reserve
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:273,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 276
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::RemoveServer(const ServerId& server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:281,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 285
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:289,1
    - Dst: ConsistentHashingLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:290,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 295
    functionName: brpc::policy::ConsistentHashingLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ConsistentHashingLoadBalancer*::SetParameters
    - ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: LoadBalancer *ConsistentHashingLoadBalancer::New(const butil::StringPiece&
      params) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 299
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsistentHashingLoadBalancer::Destroy()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:308,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:312,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:315,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:320,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:321,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:323,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:324,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:325,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:327,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:331,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 301
    functionDepth: 3
    functionLinenumber: 301
    functionLinenumberEnd: 336
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: "int ConsistentHashingLoadBalancer::SelectServer(\n    const SelectIn
      &in, SelectOut *out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:345,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:348,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:349,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:351,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:364,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 338
    functionDepth: 2
    functionLinenumber: 338
    functionLinenumberEnd: 366
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetReplicaPolicy
    - std::map::begin
    - sqrt
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - std::map::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::map<butil::EndPoint, double>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:370,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:377,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:382,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:383,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 391
    functionName: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - std::map<butil::EndPoint, double>*::clear
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::GetLoads(\n    std::map<butil::EndPoint,
      double> *load_map)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 409
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - butil::KeyValuePairsSplitter::key_and_value
    - begin
    - butil::StringToSizeT
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: ~ReplicaPolicy()
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - hash
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::DefaultReplicaPolicy::DefaultReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultReplicaPolicy(HashFunc hash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetHashName
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: brpc::policy::DefaultReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetHashName
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:70,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:78,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:81,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: _hash_func
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:85,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:87,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 91
    functionName: brpc::policy::DefaultReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - _hash_func
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::remote_side
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool DefaultReplicaPolicy::Build(ServerId server,\n                                 size_t
      num_replicas,\n                                 std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::policy::KetamaReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:106,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:109,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:111,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:117,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:120,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: MD5HashSignature
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:124,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:128,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:133,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 137
    functionName: brpc::policy::KetamaReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK
    - SocketUniquePtr::remote_side
    - MD5HashSignature
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool KetamaReplicaPolicy::Build(ServerId server,\n                                size_t
      num_replicas,\n                                std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 164
    functionName: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - CHECK
    - GetReplicaPolicy
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer(\n
      \   ConsistentHashingLoadBalancerType type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::set_union
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:177,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<Node>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 179
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::begin
    - std::vector<Node>::resize
    - std::vector<Node>::end
    - std::vector<Node>::size
    - std::set_union
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg, \n        const std::vector<Node> &servers,
      bool *executed)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<ServerId>::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:188,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:192,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:195,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:196,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:205,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:206,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:208,1
    - Dst: std::find
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:210,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:212,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<ServerId>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<ServerId>::end
    - std::vector<ServerId>::size
    - butil::FlatSet::init
    - std::find
    - butil::FlatSet::seek
    - std::vector<ServerId>::empty
    - std::vector<Node>::clear
    - std::vector<Node>::size
    - CHECK
    - std::vector<ServerId>::begin
    - berror
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    - std::vector<Node>::push_back
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const std::vector<ServerId> &servers,
      bool *executed)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:225,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:226,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:228,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - bg
    - fg
    - ' server'
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - ServerId
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 232
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    - std::vector<Node>::clear
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::Remove(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const ServerId& server, bool *executed)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:236,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:237,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:242,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 246
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - CHECK
    - ModifyWithForeground
    - std::vector::reserve
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::AddServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:253,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:254,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:255,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:256,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:262,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:263,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 269
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector<ServerId>::size
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - std::vector::insert
    - CHECK
    - ModifyWithForeground
    - std::vector::clear
    - std::vector::reserve
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:273,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 276
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::RemoveServer(const ServerId& server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:281,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 285
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:289,1
    - Dst: ConsistentHashingLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:290,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 295
    functionName: brpc::policy::ConsistentHashingLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ConsistentHashingLoadBalancer*::SetParameters
    - ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: LoadBalancer *ConsistentHashingLoadBalancer::New(const butil::StringPiece&
      params) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 299
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsistentHashingLoadBalancer::Destroy()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:308,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:312,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:315,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:320,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:321,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:323,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:324,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:325,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:327,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:331,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 301
    functionDepth: 3
    functionLinenumber: 301
    functionLinenumberEnd: 336
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: "int ConsistentHashingLoadBalancer::SelectServer(\n    const SelectIn
      &in, SelectOut *out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:345,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:348,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:349,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:351,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:364,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 338
    functionDepth: 2
    functionLinenumber: 338
    functionLinenumberEnd: 366
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetReplicaPolicy
    - std::map::begin
    - sqrt
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - std::map::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::map<butil::EndPoint, double>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:370,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:377,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:382,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:383,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 391
    functionName: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 5
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - std::map<butil::EndPoint, double>*::clear
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::GetLoads(\n    std::map<butil::EndPoint,
      double> *load_map)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 409
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - butil::KeyValuePairsSplitter::key_and_value
    - begin
    - butil::StringToSizeT
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: ~ReplicaPolicy()
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - hash
    argTypes:
    - HashFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::DefaultReplicaPolicy::DefaultReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultReplicaPolicy(HashFunc hash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetHashName
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: brpc::policy::DefaultReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetHashName
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:70,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:73,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:78,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:79,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:81,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:82,1
    - Dst: _hash_func
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:85,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:87,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 91
    functionName: brpc::policy::DefaultReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - _hash_func
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::remote_side
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool DefaultReplicaPolicy::Build(ServerId server,\n                                 size_t
      num_replicas,\n                                 std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: brpc::policy::KetamaReplicaPolicy::name
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * name() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:106,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:109,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:111,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:117,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:118,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:120,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: ServerId::tag::c_str
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:121,1
    - Dst: MD5HashSignature
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:124,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:128,1
    - Dst: std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:133,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - server
    - num_replicas
    - replicas
    argTypes:
    - ServerId
    - size_t
    - std::vector<ConsistentHashingLoadBalancer::Node>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 137
    functionName: brpc::policy::KetamaReplicaPolicy::Build
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - endpoint2str
    - ServerId::tag::c_str
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    - snprintf
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK
    - SocketUniquePtr::remote_side
    - MD5HashSignature
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    linkageType: ''
    returnType: bool
    signature: "bool KetamaReplicaPolicy::Build(ServerId server,\n                                size_t
      num_replicas,\n                                std::vector<ConsistentHashingLoadBalancer::Node>*
      replicas) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:146,1
    - Dst: DefaultReplicaPolicy::DefaultReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:147,1
    - Dst: KetamaReplicaPolicy::KetamaReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:148,1
    - Dst: std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
        CONS_HASH_LB_LAST>
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 150
    functionName: brpc::policy::InitReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::array<const ReplicaPolicy*, CONS_HASH_LB_LAST>::array<const ReplicaPolicy*,
      CONS_HASH_LB_LAST>
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    linkageType: ''
    returnType: void
    signature: void InitReplicaPolicy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:153,1
    - Dst: at
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: brpc::policy::GetReplicaPolicy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - at
    linkageType: ''
    returnType: ReplicaPolicy
    signature: ReplicaPolicy * GetReplicaPolicy(ConsistentHashingLoadBalancerType
      type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - ConsistentHashingLoadBalancerType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 164
    functionName: brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - CHECK
    - GetReplicaPolicy
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer(\n
      \   ConsistentHashingLoadBalancerType type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:171,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:174,1
    - Dst: std::vector<Node>::resize
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::set_union
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:175,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:176,1
    - Dst: std::vector<Node>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:177,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<Node>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 179
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::begin
    - std::vector<Node>::resize
    - std::vector<Node>::end
    - std::vector<Node>::size
    - std::set_union
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg, \n        const std::vector<Node> &servers,
      bool *executed)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:185,1
    - Dst: std::vector<ServerId>::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:188,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:192,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:194,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:195,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:196,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:204,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:205,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:206,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:208,1
    - Dst: std::find
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:209,1
    - Dst: std::vector<ServerId>::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:210,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:212,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:215,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 4
    argNames:
    - bg
    - fg
    - servers
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - std::vector<ServerId>
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<ServerId>::end
    - std::vector<ServerId>::size
    - butil::FlatSet::init
    - std::find
    - butil::FlatSet::seek
    - std::vector<ServerId>::empty
    - std::vector<Node>::clear
    - std::vector<Node>::size
    - CHECK
    - std::vector<ServerId>::begin
    - berror
    - butil::FlatSet::FlatSet
    - butil::FlatSet::insert
    - std::vector<Node>::push_back
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveBatch(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const std::vector<ServerId> &servers,
      bool *executed)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:222,1
    - Dst: std::vector<Node>::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:225,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:226,1
    - Dst: std::vector<Node>::push_back
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:228,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    - Dst: std::vector<Node>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:231,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - bg
    - fg
    - ' server'
    - executed
    argTypes:
    - std::vector<Node>
    - std::vector<Node>
    - ServerId
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 232
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    - std::vector<Node>::clear
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::Remove(\n        std::vector<Node>
      &bg, const std::vector<Node> &fg,\n        const ServerId& server, bool *executed)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:236,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:237,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:240,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:242,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 246
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - CHECK
    - ModifyWithForeground
    - std::vector::reserve
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::AddServer(const ServerId& server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:251,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:253,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:254,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:255,1
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:256,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:257,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:260,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:262,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:263,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:265,1
    - Dst: std::vector<ServerId>::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 269
    functionName: brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::vector<ServerId>::size
    - std::vector::end
    - std::sort
    - GetReplicaPolicy
    - std::vector::begin
    - std::vector::insert
    - CHECK
    - ModifyWithForeground
    - std::vector::clear
    - std::vector::reserve
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::AddServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:273,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 271
    functionDepth: 1
    functionLinenumber: 271
    functionLinenumberEnd: 276
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::RemoveServer(const ServerId& server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:281,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - servers
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 285
    functionName: brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t ConsistentHashingLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId> &servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:289,1
    - Dst: ConsistentHashingLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:290,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 295
    functionName: brpc::policy::ConsistentHashingLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ConsistentHashingLoadBalancer*::SetParameters
    - ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    linkageType: ''
    returnType: LoadBalancer
    signature: LoadBalancer *ConsistentHashingLoadBalancer::New(const butil::StringPiece&
      params) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 299
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConsistentHashingLoadBalancer::Destroy()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:304,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:308,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:312,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:315,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:319,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:320,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:321,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:323,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:324,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:325,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:327,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:331,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 301
    functionDepth: 3
    functionLinenumber: 301
    functionLinenumberEnd: 336
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - std::lower_bound
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: "int ConsistentHashingLoadBalancer::SelectServer(\n    const SelectIn
      &in, SelectOut *out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetReplicaPolicy
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:345,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:348,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:349,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:351,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:355,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:364,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 338
    functionDepth: 2
    functionLinenumber: 338
    functionLinenumberEnd: 366
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - GetReplicaPolicy
    - std::map::begin
    - sqrt
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - std::map::size
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::Describe(\n    std::ostream &os,
      const DescribeOptions& options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::map<butil::EndPoint, double>*::clear
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:370,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:377,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:382,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:383,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:384,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:388,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 391
    functionName: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 6
    functionsReached:
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - std::map<butil::EndPoint, double>*::clear
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - std::map::end
    linkageType: ''
    returnType: void
    signature: "void ConsistentHashingLoadBalancer::GetLoads(\n    std::map<butil::EndPoint,
      double> *load_map)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:394,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:397,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:406,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 409
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key
    - butil::KeyValuePairsSplitter::key_and_value
    - begin
    - butil::StringToSizeT
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ConsistentHashingLoadBalancer::SetParameters(const butil::StringPiece&
      params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' passwd'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: brpc::policy::RedisAuthenticator::RedisAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisAuthenticator(const std::string& passwd, int db = -1)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::policy::RedisAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                        brpc::AuthContext*) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.h:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: brpc::policy::RedisAuthenticator::GetAuthFlags
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetAuthFlags() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' passwd'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: brpc::policy::RedisAuthenticator::RedisAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisAuthenticator(const std::string& passwd, int db = -1)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::policy::RedisAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                        brpc::AuthContext*) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.h:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: brpc::policy::RedisAuthenticator::GetAuthFlags
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetAuthFlags() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' passwd'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: brpc::policy::RedisAuthenticator::RedisAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisAuthenticator(const std::string& passwd, int db = -1)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::policy::RedisAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                        brpc::AuthContext*) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.h:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: brpc::policy::RedisAuthenticator::GetAuthFlags
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetAuthFlags() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' passwd'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 30
    functionName: brpc::policy::RedisAuthenticator::RedisAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisAuthenticator(const std::string& passwd, int db = -1)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::policy::RedisAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int VerifyCredential(const std::string&, const butil::EndPoint&,\n
      \                        brpc::AuthContext*) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/redis_authenticator.h:41,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: brpc::policy::RedisAuthenticator::GetAuthFlags
    functionSourceFile: /src/brpc/src/brpc/policy/redis_authenticator.h
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetAuthFlags() const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Node
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: operator<(const Node &rhs) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const Node &rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - code
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: operator<(const uint32_t code) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const uint32_t code) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Node
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: operator<(const Node &rhs) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const Node &rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - code
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: operator<(const uint32_t code) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const uint32_t code) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Node
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: operator<(const Node &rhs) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const Node &rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - code
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: operator<(const uint32_t code) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const uint32_t code) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Node
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: operator<(const Node &rhs) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const Node &rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - code
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: operator<(const uint32_t code) const
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const uint32_t code) const
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 38
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipOutputStream::Format format)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipInputStream::Format format)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:59,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:64,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:65,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:66,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:69,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - format
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::Compress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::Close
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool Compress(const google::protobuf::Message& msg, butil::IOBuf*
      buf,\n                     google::protobuf::io::GzipOutputStream::Format format)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:78,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:83,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:84,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:85,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 89
    functionName: brpc::policy::Decompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: "bool Decompress(const butil::IOBuf& data, google::protobuf::Message*
      msg,\n                       google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 3
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool GzipCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::io::GzipOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:113,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:116,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:120,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:129,1
    - Dst: google::protobuf::io::GzipOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:133,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:135,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - options_in
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - GzipCompressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipOutputStream::Close
    - google::protobuf::io::GzipOutputStream::Next
    - butil::IOBufAsZeroCopyInputStream::Next
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipCompress(const butil::IOBuf& msg, butil::IOBuf* buf,\n                  const
      GzipCompressOptions* options_in)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:149,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:152,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:155,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:156,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:169,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 176
    functionName: brpc::policy::GzipDecompressBase
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::io::GzipInputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::policy::Format2CStr
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipDecompressBase(\n    const butil::IOBuf& data, butil::IOBuf*
      msg,\n    google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 3
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: brpc::policy::ZlibCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool ZlibCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 3
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: "bool ZlibDecompress(const butil::IOBuf& data,\n                    google::protobuf::Message*
      msg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 195
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool ZlibDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 38
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipOutputStream::Format format)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipInputStream::Format format)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:59,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:64,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:65,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:66,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:69,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - format
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::Compress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 2
    functionsReached:
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::Close
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool Compress(const google::protobuf::Message& msg, butil::IOBuf*
      buf,\n                     google::protobuf::io::GzipOutputStream::Format format)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:78,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:83,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:84,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:85,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 89
    functionName: brpc::policy::Decompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: "bool Decompress(const butil::IOBuf& data, google::protobuf::Message*
      msg,\n                       google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 3
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool GzipCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::io::GzipOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:113,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:116,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:120,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:129,1
    - Dst: google::protobuf::io::GzipOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:133,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:135,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - options_in
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - GzipCompressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipOutputStream::Close
    - google::protobuf::io::GzipOutputStream::Next
    - butil::IOBufAsZeroCopyInputStream::Next
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipCompress(const butil::IOBuf& msg, butil::IOBuf* buf,\n                  const
      GzipCompressOptions* options_in)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:149,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:152,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:155,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:156,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:169,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 176
    functionName: brpc::policy::GzipDecompressBase
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::io::GzipInputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::policy::Format2CStr
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipDecompressBase(\n    const butil::IOBuf& data, butil::IOBuf*
      msg,\n    google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 3
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: brpc::policy::ZlibCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool ZlibCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 3
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: "bool ZlibDecompress(const butil::IOBuf& data,\n                    google::protobuf::Message*
      msg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 195
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool ZlibDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 38
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipOutputStream::Format format)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipInputStream::Format format)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:59,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:64,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:65,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:66,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:69,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - format
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::Compress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::Close
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool Compress(const google::protobuf::Message& msg, butil::IOBuf*
      buf,\n                     google::protobuf::io::GzipOutputStream::Format format)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:78,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:83,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:84,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:85,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 89
    functionName: brpc::policy::Decompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: "bool Decompress(const butil::IOBuf& data, google::protobuf::Message*
      msg,\n                       google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 3
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool GzipCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::io::GzipOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:113,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:116,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:120,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:129,1
    - Dst: google::protobuf::io::GzipOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:133,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:135,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - options_in
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - GzipCompressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipOutputStream::Close
    - google::protobuf::io::GzipOutputStream::Next
    - butil::IOBufAsZeroCopyInputStream::Next
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipCompress(const butil::IOBuf& msg, butil::IOBuf* buf,\n                  const
      GzipCompressOptions* options_in)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:149,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:152,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:155,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:156,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:169,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 176
    functionName: brpc::policy::GzipDecompressBase
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::io::GzipInputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::policy::Format2CStr
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipDecompressBase(\n    const butil::IOBuf& data, butil::IOBuf*
      msg,\n    google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 3
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: brpc::policy::ZlibCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool ZlibCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 3
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: "bool ZlibDecompress(const butil::IOBuf& data,\n                    google::protobuf::Message*
      msg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 195
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool ZlibDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 38
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipOutputStream::Format format)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - format
    argTypes:
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: brpc::policy::Format2CStr
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * Format2CStr(google::protobuf::io::GzipInputStream::Format format)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:58,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:59,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:64,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:65,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:66,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:67,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:69,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - format
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    - google::protobuf::io::GzipOutputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::Compress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 6
    functionsReached:
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::Close
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool Compress(const google::protobuf::Message& msg, butil::IOBuf*
      buf,\n                     google::protobuf::io::GzipOutputStream::Format format)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:77,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:78,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:83,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:84,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:85,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 89
    functionName: brpc::policy::Decompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 6
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: "bool Decompress(const butil::IOBuf& data, google::protobuf::Message*
      msg,\n                       google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 3
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool GzipCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 3
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::io::GzipOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:113,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:116,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:119,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:120,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:128,1
    - Dst: google::protobuf::io::GzipOutputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:129,1
    - Dst: google::protobuf::io::GzipOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:133,1
    - Dst: google::protobuf::io::GzipOutputStream::Close
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:135,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 3
    argNames:
    - ' msg'
    - buf
    - options_in
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - GzipCompressOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::GzipCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipOutputStream::Close
    - google::protobuf::io::GzipOutputStream::Next
    - butil::IOBufAsZeroCopyInputStream::Next
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipCompress(const butil::IOBuf& msg, butil::IOBuf* buf,\n                  const
      GzipCompressOptions* options_in)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:149,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:152,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:155,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:156,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:163,1
    - Dst: google::protobuf::io::GzipInputStream::Next
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: brpc::policy::Format2CStr
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:168,1
    - Dst: google::protobuf::io::GzipInputStream::ZlibErrorMessage
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:169,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - ' data'
    - msg
    - format
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    - google::protobuf::io::GzipInputStream::Format
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 176
    functionName: brpc::policy::GzipDecompressBase
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 6
    functionsReached:
    - google::protobuf::io::GzipInputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::policy::Format2CStr
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - std::min
    - size
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool GzipDecompressBase(\n    const butil::IOBuf& data, butil::IOBuf*
      msg,\n    google::protobuf::io::GzipInputStream::Format format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Compress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 178
    functionDepth: 3
    functionLinenumber: 178
    functionLinenumberEnd: 180
    functionName: brpc::policy::ZlibCompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Compress
    linkageType: ''
    returnType: bool
    signature: bool ZlibCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::Decompress
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 182
    functionDepth: 3
    functionLinenumber: 182
    functionLinenumberEnd: 185
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::Decompress
    linkageType: ''
    returnType: bool
    signature: "bool ZlibDecompress(const butil::IOBuf& data,\n                    google::protobuf::Message*
      msg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: brpc::policy::GzipDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool GzipDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::GzipDecompressBase
      Src: /src/brpc/src/brpc/policy/gzip_compress.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 195
    functionName: brpc::policy::ZlibDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/gzip_compress.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GzipDecompressBase
    linkageType: ''
    returnType: bool
    signature: bool ZlibDecompress(const butil::IOBuf& data, butil::IOBuf* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - format
    argTypes:
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: brpc::policy::UbrpcAdaptor::UbrpcAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcAdaptor(mcpack2pb::SerializationFormat format)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::UbrpcCompackAdaptor::UbrpcCompackAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcCompackAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::policy::UbrpcMcpack2Adaptor::UbrpcMcpack2Adaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcMcpack2Adaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - format
    argTypes:
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: brpc::policy::UbrpcAdaptor::UbrpcAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcAdaptor(mcpack2pb::SerializationFormat format)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::UbrpcCompackAdaptor::UbrpcCompackAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcCompackAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::policy::UbrpcMcpack2Adaptor::UbrpcMcpack2Adaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcMcpack2Adaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - format
    argTypes:
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: brpc::policy::UbrpcAdaptor::UbrpcAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcAdaptor(mcpack2pb::SerializationFormat format)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::UbrpcCompackAdaptor::UbrpcCompackAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcCompackAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::policy::UbrpcMcpack2Adaptor::UbrpcMcpack2Adaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcMcpack2Adaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - format
    argTypes:
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: brpc::policy::UbrpcAdaptor::UbrpcAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcAdaptor(mcpack2pb::SerializationFormat format)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::UbrpcCompackAdaptor::UbrpcCompackAdaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcCompackAdaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::policy::UbrpcMcpack2Adaptor::UbrpcMcpack2Adaptor
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UbrpcMcpack2Adaptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::policy::CheckStreamWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckStreamWindowSize(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: brpc::policy::CheckConnWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckConnWindowSize(const char*, int32_t val)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: brpc::policy::H2StreamState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2StreamState2Str(H2StreamState s)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2ConnectionState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: brpc::policy::H2ConnectionState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2ConnectionState2Str(H2ConnectionState s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: brpc::policy::LoadUint8
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t LoadUint8(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: brpc::policy::LoadUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t LoadUint16(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: brpc::policy::LoadUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LoadUint32(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: brpc::policy::SaveUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint16(void* out, uint16_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: brpc::policy::SaveUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint32(void* out, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 5
    argNames:
    - out_buf
    - payload_size
    - type
    - flags
    - stream_id
    argTypes:
    - void*
    - uint32_t
    - H2FrameType
    - uint8_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 135
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeFrameHead(void* out_buf,\n                        uint32_t
      payload_size, H2FrameType type,\n                        uint8_t flags, uint32_t
      stream_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - out_buf
    - ' h'
    argTypes:
    - void*
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 15
    functionsReached:
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void SerializeFrameHead(void* out_buf, const H2FrameHead& h)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:144,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - s
    - data
    - n
    argTypes:
    - Socket*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::policy::WriteAck
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteAck(Socket* s, const void* data, size_t n)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:166,1
    - Dst: brpc::policy::LoadUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:170,1
    - Dst: brpc::policy::LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:171,1
    - Dst: static_cast<H2SettingsIdentifier>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:196,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 42
    argCount: 3
    argNames:
    - out
    - ' it'
    - n
    argTypes:
    - H2Settings*
    - butil::IOBufBytesIterator
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 211
    functionName: brpc::policy::ParseH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LoadUint32
    - static_cast<H2SettingsIdentifier>
    - LOG
    - brpc::policy::LoadUint16
    linkageType: ''
    returnType: bool
    signature: bool ParseH2Settings(H2Settings* out, butil::IOBufBytesIterator& it,
      size_t n)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:221,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:222,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:226,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:227,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:231,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:232,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:236,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:237,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:241,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:242,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:245,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:246,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:247,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 251
    functionName: brpc::policy::SerializeH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::policy::SaveUint32
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2Settings(const H2Settings& in, void* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:255,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:256,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:259,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 265
    functionName: brpc::policy::SerializeH2SettingsFrameAndWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2SettingsFrameAndWU(const H2Settings& in, void* out)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - window_size
    - diff
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 287
    functionName: brpc::policy::AddWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool AddWindowSize(butil::atomic<int64_t>* window_size, int64_t diff)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:290,1
    - Dst: butil::atomic<int64_t>*::fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:294,1
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - window_size
    - size
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 300
    functionName: brpc::policy::MinusWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool MinusWindowSize(butil::atomic<int64_t>* window_size, int64_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 315
    functionName: brpc::policy::InitFrameHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitFrameHandlers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:317,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - type
    argTypes:
    - H2FrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 322
    functionName: brpc::policy::FindFrameHandler
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: H2Context::FrameHandler
    signature: H2Context::FrameHandler FindFrameHandler(H2FrameType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:341,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - socket
    - server
    argTypes:
    - Socket*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 353
    functionName: brpc::policy::H2Context::H2Context
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - Server*::options
    linkageType: ''
    returnType: void
    signature: void H2Context::H2Context(Socket* socket, const Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:356,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:357,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:360,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 361
    functionName: H2Context::~H2Context()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void H2Context::~H2Context()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:364,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:365,1
    - Dst: brpc::policy::H2Context::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:368,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 371
    functionName: brpc::policy::H2Context::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - init
    - LOG
    - brpc::policy::H2Context::Init
    linkageType: ''
    returnType: int
    signature: int H2Context::Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:377,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    - Dst: H2StreamContext*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 386
    functionName: brpc::policy::H2Context::RemoveStreamAndDeferWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::DeferWindowUpdate
    - erase
    - H2StreamContext*::ReleaseDeferredWindowUpdate
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::RemoveStreamAndDeferWU(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<H2StreamContext*>*::clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:390,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:396,1
    - Dst: StreamMap::begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: StreamMap::end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:399,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:404,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:405,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:407,1
    - Dst: std::vector<H2StreamContext*>*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:410,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - goaway_stream_id
    - out_streams
    argTypes:
    - int
    - std::vector<H2StreamContext*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 414
    functionName: brpc::policy::H2Context::RemoveGoAwayStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - end
    - StreamMap::end
    - std::vector<H2StreamContext*>*::size
    - erase
    - stream_id
    - begin
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    - StreamMap::begin
    linkageType: ''
    returnType: void
    signature: "void H2Context::RemoveGoAwayStreams(\n    int goaway_stream_id, std::vector<H2StreamContext*>*
      out_streams)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 423
    functionName: brpc::policy::H2Context::FindStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::FindStream(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - stream_id
    - ctx
    argTypes:
    - int
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 436
    functionName: brpc::policy::H2Context::TryToInsertStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int H2Context::TryToInsertStream(int stream_id, H2StreamContext* ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:441,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:448,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:450,1
    - Dst: bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:452,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:453,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:456,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:457,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:460,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:461,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:463,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:464,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' it'
    - frame_head
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 465
    functionName: brpc::policy::H2Context::ConsumeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - copy_and_forward
    - LoadUint8
    - MakeParseError
    - MakeMessage
    - static_cast<int>
    - bytes_left
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::ConsumeFrameHead(\n    butil::IOBufBytesIterator&
      it, H2FrameHead* frame_head)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:470,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:473,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:474,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:475,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:478,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:484,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:487,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:492,1
    - Dst: brpc::policy::H2Context::ConsumeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:495,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:496,1
    - Dst: FindFrameHandler
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:501,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:502,1
    - Dst: H2ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:505,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:508,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:510,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:511,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:514,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:515,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:519,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:521,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:523,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:525,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:528,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:531,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:532,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:535,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:536,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:538,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:541,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 60
    argCount: 2
    argNames:
    - ' it'
    - socket
    argTypes:
    - butil::IOBufBytesIterator
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 467
    functionDepth: 2
    functionLinenumber: 467
    functionLinenumberEnd: 543
    functionName: brpc::policy::H2Context::Consume
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - H2ParseResult::error
    - WriteAck
    - MakeParseError
    - brpc::policy::H2Context::ConsumeFrameHead
    - H2ParseResult::message
    - copy_and_forward
    - SaveUint32
    - MakeMessage
    - H2StreamContext*::header
    - LOG
    - ParseResult::is_ok
    - brpc::policy::H2Context::is_server_side
    - SerializeH2SettingsFrameAndWU
    - H2ErrorToStatusCode
    - SerializeFrameHead
    - H2ParseResult::stream_id
    - FindFrameHandler
    - H2ParseResult::is_ok
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::Consume(\n    butil::IOBufBytesIterator& it,
      Socket* socket)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:551,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:558,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:559,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:564,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:568,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:569,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:573,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:574,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:581,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:583,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:587,1
    - Dst: brpc::policy::H2Context::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:588,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:591,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:592,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:595,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:598,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:600,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:604,1
    - Dst: H2StreamContext::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:605,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:606,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:608,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:609,1
    - Dst: H2StreamContext*::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:613,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 53
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 545
    functionDepth: 2
    functionLinenumber: 545
    functionLinenumberEnd: 614
    functionName: brpc::policy::H2Context::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnHeaders
    - LoadUint8
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::TryToInsertStream
    - H2StreamContext*::Init
    - brpc::policy::H2Context::FindStream
    - is_read_progressive
    - brpc::policy::H2Context::is_client_side
    - H2StreamContext::OnHeaders
    - MakeH2Message
    - MakeH2Error
    - H2StreamContext::H2StreamContext
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:624,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:625,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:627,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:629,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:631,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:632,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:633,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:635,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:638,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:640,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:643,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:645,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:651,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 653
    functionName: brpc::policy::H2StreamContext::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - forward
    - CHECK_EQ
    - MakeH2Error
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - brpc::policy::H2StreamContext::SetState
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:657,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:659,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:663,1
    - Dst: H2StreamContext::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:664,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:665,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:667,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:668,1
    - Dst: H2StreamContext*::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 672
    functionName: brpc::policy::H2Context::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Error
    - H2StreamContext::OnContinuation
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:677,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:678,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:681,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:683,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:688,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:690,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:693,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:696,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 674
    functionDepth: 1
    functionLinenumber: 674
    functionLinenumberEnd: 697
    functionName: brpc::policy::H2StreamContext::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    - pop_front
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - size
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:708,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:718,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:719,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:725,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 699
    functionDepth: 1
    functionLinenumber: 699
    functionLinenumberEnd: 726
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext::OnData
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - LoadUint8
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - MakeH2Error
    - H2StreamContext*::OnData
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:732,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:733,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:734,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:735,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:744,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:747,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:756,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:766,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:767,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:768,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:771,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 728
    functionDepth: 1
    functionLinenumber: 728
    functionLinenumberEnd: 779
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block
    - WriteAck
    - brpc::policy::H2StreamContext::OnEndStream
    - OnBody
    - fetch_add
    - butil::StringPiece::data
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    - brpc::policy::H2StreamContext::stream_id
    - SaveUint32
    - local_settings
    - LOG
    - butil::StringPiece::size
    - SerializeFrameHead
    - MakeH2Error
    - append_and_forward
    - static_cast<int64_t>
    - VolatilePendingStreamSize
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - forward
    - exchange
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnData(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:784,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:788,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:791,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:793,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 794
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - MakeH2Message
    - MakeH2Error
    - static_cast<H2Error>
    - LOG
    - LoadUint32
    - H2StreamContext*::OnResetStream
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnResetStream(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:801,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:802,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:806,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:807,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:813,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:815,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 823
      start: 796
    functionDepth: 1
    functionLinenumber: 796
    functionLinenumberEnd: 823
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2ErrorToStatusCode
    - MakeH2Message
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - is_client_side
    - H2StreamContext*::header
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnResetStream(\n    H2Error h2_error,
      const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:827,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:829,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:830,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:833,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:834,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:842,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:845,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 825
    functionDepth: 1
    functionLinenumber: 825
    functionLinenumberEnd: 846
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - MakeH2Message
    - CHECK_EQ
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    - OnMessageComplete
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:856,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:857,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:861,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:866,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:878,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:879,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:882,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:888,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:893,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:901,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:902,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:903,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:904,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:912,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:913,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:915,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 916
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - WriteAck
    - static_cast<int64_t>
    - MakeH2Message
    - AddWindowSize
    - SerializeFrameHead
    - MakeH2Error
    - begin
    - LOG
    - fetch_sub
    - ParseH2Settings
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnSettings(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 918
    functionDepth: 1
    functionLinenumber: 918
    functionLinenumberEnd: 922
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPriority(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:926,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:927,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 924
    functionDepth: 1
    functionLinenumber: 924
    functionLinenumberEnd: 928
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPushPromise(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:937,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:938,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:946,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:947,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:949,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:951,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 952
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - WriteAck
    - copy_and_forward
    - SerializeFrameHead
    - MakeH2Error
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPing(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessHttpResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 954
    functionDepth: 12
    functionLinenumber: 954
    functionLinenumberEnd: 957
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - brpc::policy::ProcessHttpResponse
    linkageType: ''
    returnType: void
    signature: void * ProcessHttpResponseWrapper(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:966,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:967,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:971,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:979,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:981,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:984,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:986,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:992,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1004,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 959
    functionDepth: 4
    functionLinenumber: 959
    functionLinenumberEnd: 1006
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - forward
    - bthread_start_background
    - MakeH2Message
    - brpc::policy::H2Context::is_client_side
    - CHECK_EQ
    - MakeH2Error
    - std::vector::empty
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<int>
    - H2StreamContext*::header
    - static_cast<H2Error>
    - std::vector::size
    - SetLogOff
    - keytable_pool
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnGoAway(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& h)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1011,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1012,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1014,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1016,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1017,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1020,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1022,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1024,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1032,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1034,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1036,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1008
    functionDepth: 1
    functionLinenumber: 1008
    functionLinenumberEnd: 1038
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - MakeH2Message
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - MakeH2Error
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnWindowUpdate(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: H2ConnectionState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1049,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1051,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1057,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1061,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1062,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1065,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1040
    functionDepth: 1
    functionLinenumber: 1040
    functionLinenumberEnd: 1069
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - size
    linkageType: ''
    returnType: void
    signature: void H2Context::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1072,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1075,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1076
      start: 1071
    functionDepth: 0
    functionLinenumber: 1071
    functionLinenumberEnd: 1076
    functionName: brpc::policy::H2Context::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t H2Context::ReleaseDeferredWindowUpdate()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1082,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1083,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1085,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1088,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1089,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1090,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1091,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1078
    functionDepth: 1
    functionLinenumber: 1078
    functionLinenumberEnd: 1095
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - WriteAck
    - fetch_add
    - SaveUint32
    - SerializeFrameHead
    - local_settings
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void H2Context::DeferWindowUpdate(int64_t size)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1111,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1113,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1114,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1118,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1128,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1138
      start: 1103
    functionDepth: 2
    functionLinenumber: 1103
    functionLinenumberEnd: 1138
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 14
    functionsReached:
    - butil::IOBuf*::empty
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::size
    - H2Context*::Consume
    - MakeParseError
    - Socket*::initialize_parsing_context
    - ParseResult::is_ok
    - H2Context*::ClearAbandonedStreams
    - Socket*::parsing_context
    - H2Context*::Init
    - ParseResult::message
    - CHECK_EQ
    - static_cast<const Server*>
    - static_cast<H2Context*>
    - butil::IOBuf*::pop_front
    - LOG
    - H2Context::H2Context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseH2Message(butil::IOBuf *source, Socket *socket,\n
      \                          bool read_eof, const void *arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1143
      start: 1140
    functionDepth: 0
    functionLinenumber: 1140
    functionLinenumberEnd: 1143
    functionName: brpc::policy::H2Context::AddAbandonedStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void H2Context::AddAbandonedStream(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1147,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1148,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1149,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1150,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1151,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1157
      start: 1145
    functionDepth: 2
    functionLinenumber: 1145
    functionLinenumberEnd: 1157
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - back
    - pop_back
    - std::unique_lock::lock
    - empty
    - std::unique_lock::unlock
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1181
      start: 1176
    functionDepth: 0
    functionLinenumber: 1176
    functionLinenumberEnd: 1181
    functionName: brpc::policy::H2StreamContext::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - H2Context*::remote_settings
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::Init(H2Context* conn_ctx, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1187
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1187
    functionName: H2StreamContext::~H2StreamContext()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::~H2StreamContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1193,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1194,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1190
    functionDepth: 1
    functionLinenumber: 1190
    functionLinenumberEnd: 1196
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2StreamState2Str
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::SetState(H2StreamState state)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1206,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1209,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1214,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1215,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1219
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1219
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MinusWindowSize
    - load
    - fetch_add
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: bool
    signature: bool H2StreamContext::ConsumeWindowSize(int64_t size)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1222,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1226,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1233,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1238,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1240,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1244,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1248,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1251,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1255,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1258,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1262,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1265,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1270,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1280,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1284,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1285,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1287,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1291,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1295,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1298,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1306
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1306
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - strtol
    - hpacker
    - uri
    - HPacker::Header::value::c_str
    - set_content_type
    - AppendHeader
    - header
    - set_method
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - HPacker::Header::name::c_str
    - LOG
    - set_status_code
    - Decode
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - is_server_side
    - strcmp
    - butil::my_ip
    - Str2HttpMethod
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: int H2StreamContext::ConsumeHeaders(butil::IOBufBytesIterator& it)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1316,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1319,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1325,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1326,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1330,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1331,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1332,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1338,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1342,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1343,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1350,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1364,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1376,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1377,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 53
    argCount: 6
    argNames:
    - out
    - ' headers'
    - ' trailer_headers'
    - ' data'
    - stream_id
    - conn_ctx
    argTypes:
    - butil::IOBuf*
    - butil::IOBuf
    - butil::IOBuf
    - butil::IOBuf
    - int
    - H2Context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1310
    functionDepth: 1
    functionLinenumber: 1310
    functionLinenumberEnd: 1380
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SaveUint32
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::append
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - empty
    - cutn
    - size
    - butil::IOBufBytesIterator::append_and_forward
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: "void PackH2Message(butil::IOBuf* out,\n                          butil::IOBuf&
      headers,\n                          butil::IOBuf& trailer_headers,\n                          const
      butil::IOBuf& data,\n                          int stream_id,\n                          H2Context*
      conn_ctx)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1383,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1384,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1391,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1401,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1402,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1403,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1408,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1413,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1421,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1423,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1425,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1429,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1437,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1440,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1448,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1451,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1452,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1456
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1456
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - method
    - uri
    - H2StreamContext::H2StreamContext
    - butil::endpoint2str
    - HttpMethod2Str
    - butil::Base64Encode
    - port
    - Controller*::remote_side
    - butil::string_printf
    - std::string*::reserve
    - Controller*::http_request
    - H2UnsentRequest*::push
    - malloc
    - H2UnsentRequest*::_sctx::reset
    - get_common_strings
    - std::string*::append
    - GetHeader
    - HeaderCount
    - H2UnsentRequest::H2UnsentRequest
    - Controller*::is_ssl
    - content_type
    - empty
    - host
    - Controller*::is_response_read_progressively
    - std::string*::empty
    - std::string::size
    linkageType: ''
    returnType: H2UnsentRequest
    signature: H2UnsentRequest * H2UnsentRequest::New(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1462,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1464
      start: 1458
    functionDepth: 0
    functionLinenumber: 1458
    functionLinenumberEnd: 1464
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2UnsentRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1467
    functionName: brpc::policy::RemoveRefOnQuit
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoveRefOnQuit(H2UnsentRequest* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1468,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1468
    functionName: ~RemoveRefOnQuit()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void ~RemoveRefOnQuit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1480,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1485,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1474
    functionDepth: 0
    functionLinenumber: 1474
    functionLinenumberEnd: 1488
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - CHECK_EQ
    - H2Context*::AddAbandonedStream
    - static_cast<H2Context*>
    linkageType: ''
    returnType: void
    signature: "void H2UnsentRequest::DestroyStreamUserData(SocketUniquePtr& sending_sock,\n
      \                                           Controller* cntl,\n                                            int
      error_code,\n                                            bool /*end_of_rpc*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1503,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1510,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1511,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1513,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1515,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1523,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1525,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1530,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1537,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1540,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1547,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1550,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1552,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1553,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1554,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1555,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1565,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1567,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1569,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1581,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1582,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1584,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1586,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1589,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1496
    functionDepth: 2
    functionLinenumber: 1496
    functionLinenumberEnd: 1594
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::append
    - Init
    - H2Context*::VolatilePendingStreamSize
    - stream_id
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context*::AllocateClientStreamId
    - Socket*::parsing_context
    - butil::IOBufAppender::IOBufAppender
    - get
    - PackH2Message
    - H2Context::H2Context
    - BuiltinServiceTest::TestStatus
    - request_attachment
    - SerializeH2SettingsFrameAndWU
    - H2Context*::Init
    - CHECK
    - release
    - Encode
    - HeaderEnd
    - Socket*::initialize_parsing_context
    - has_http_request
    - ConsumeWindowSize
    - H2Context*::remote_settings
    - H2Context*::hpacker
    - Socket*::CreatedByConnect
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentRequest::AppendAndDestroySelf(butil::IOBuf* out,
      Socket* socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1605,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1606,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1607,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1612,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1596
    functionDepth: 0
    functionLinenumber: 1596
    functionLinenumberEnd: 1614
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - request_attachment
    - name::size
    - HeaderEnd
    - value::size
    - has_http_request
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentRequest::EstimatedByteSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1625,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1626,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1627,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1628,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1632,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1633,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1638
      start: 1616
    functionDepth: 1
    functionLinenumber: 1616
    functionLinenumberEnd: 1638
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::empty
    - request_attachment
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - HeaderEnd
    - has_http_request
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Print(std::ostream& os) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::release_http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1643,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1650
      start: 1640
    functionDepth: 1
    functionLinenumber: 1640
    functionLinenumberEnd: 1650
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - PercentEncode
    - Controller*::ErrorCode
    - Controller*::response_attachment
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorText
    - Controller*::release_http_response
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::H2UnsentResponse(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1653,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1655,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1662,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1666,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1652
    functionDepth: 1
    functionLinenumber: 1652
    functionLinenumberEnd: 1672
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - H2UnsentResponse*::push
    - butil::string_printf
    - HttpHeader*::content_type
    - Controller*::http_response
    - H2UnsentResponse::H2UnsentResponse
    - malloc
    - get_common_strings
    - HttpHeader*::status_code
    linkageType: ''
    returnType: H2UnsentResponse
    signature: H2UnsentResponse * H2UnsentResponse::New(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1676,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1679,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1680
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1680
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1695,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1708,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1709,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1710,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1711,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1714,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1727,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1730,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1734,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1740,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1741,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1750
      start: 1688
    functionDepth: 1
    functionLinenumber: 1688
    functionLinenumberEnd: 1750
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::IOBuf*::append
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - butil::IOBufAppender::move_to
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - SaveUint32
    - size
    - PackH2Message
    - butil::string_printf
    - MinusWindowSize
    - SerializeFrameHead
    - Encode
    - HeaderEnd
    - H2Context*::hpacker
    - H2Context*::remote_settings
    - empty
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentResponse::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1759,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1763,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1752
    functionDepth: 0
    functionLinenumber: 1752
    functionLinenumberEnd: 1765
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - size
    - name::size
    - HeaderEnd
    - value::size
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentResponse::EstimatedByteSize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1773,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1774,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1778,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1781,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1782
      start: 1767
    functionDepth: 1
    functionLinenumber: 1767
    functionLinenumberEnd: 1782
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - empty
    - HeaderEnd
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Print(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1793,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1794,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1796,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1797,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1799,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1804,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1809,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 4
    argNames:
    - user_message
    - correlation_id
    - cntl
    - auth
    argTypes:
    - SocketMessage**
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1811
      start: 1784
    functionDepth: 1
    functionLinenumber: 1784
    functionLinenumberEnd: 1811
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_stream_user_data
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - H2UnsentRequest*::_sctx::set_correlation_id
    - dynamic_cast<H2UnsentRequest*>
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackH2Request(butil::IOBuf*,\n                   SocketMessage**
      user_message,\n                   uint64_t correlation_id,\n                   const
      google::protobuf::MethodDescriptor*,\n                   Controller* cntl,\n
      \                  const butil::IOBuf&,\n                   const Authenticator*
      auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1815,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1816
      start: 1813
    functionDepth: 0
    functionLinenumber: 1813
    functionLinenumberEnd: 1816
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::parsing_context
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1820,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1821,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1825,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1827,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1831
      start: 1818
    functionDepth: 0
    functionLinenumber: 1818
    functionLinenumberEnd: 1831
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - GetAgentSocket
    - Controller*::SetFailed
    - brpc::policy::H2UnsentRequest::New
    linkageType: ''
    returnType: StreamUserData
    signature: "StreamUserData * H2GlobalStreamCreator::OnCreatingStream(\n        SocketUniquePtr*
      inout, Controller* cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1836
      start: 1833
    functionDepth: 0
    functionLinenumber: 1833
    functionLinenumberEnd: 1836
    functionName: brpc::policy::H2GlobalStreamCreator::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2GlobalStreamCreator::DestroyStreamCreator(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2GlobalStreamCreator>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1839,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1838
    functionDepth: 0
    functionLinenumber: 1838
    functionLinenumberEnd: 1840
    functionName: brpc::policy::get_h2_global_stream_creator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<H2GlobalStreamCreator>
    linkageType: ''
    returnType: StreamCreator
    signature: StreamCreator * get_h2_global_stream_creator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::policy::CheckStreamWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckStreamWindowSize(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: brpc::policy::CheckConnWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckConnWindowSize(const char*, int32_t val)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: brpc::policy::H2StreamState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2StreamState2Str(H2StreamState s)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2ConnectionState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: brpc::policy::H2ConnectionState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2ConnectionState2Str(H2ConnectionState s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: brpc::policy::LoadUint8
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t LoadUint8(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: brpc::policy::LoadUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t LoadUint16(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: brpc::policy::LoadUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LoadUint32(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: brpc::policy::SaveUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint16(void* out, uint16_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: brpc::policy::SaveUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint32(void* out, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 5
    argNames:
    - out_buf
    - payload_size
    - type
    - flags
    - stream_id
    argTypes:
    - void*
    - uint32_t
    - H2FrameType
    - uint8_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 135
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeFrameHead(void* out_buf,\n                        uint32_t
      payload_size, H2FrameType type,\n                        uint8_t flags, uint32_t
      stream_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - out_buf
    - ' h'
    argTypes:
    - void*
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 18
    functionsReached:
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void SerializeFrameHead(void* out_buf, const H2FrameHead& h)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:144,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - s
    - data
    - n
    argTypes:
    - Socket*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::policy::WriteAck
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteAck(Socket* s, const void* data, size_t n)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:166,1
    - Dst: brpc::policy::LoadUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:170,1
    - Dst: brpc::policy::LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:171,1
    - Dst: static_cast<H2SettingsIdentifier>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:196,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 42
    argCount: 3
    argNames:
    - out
    - ' it'
    - n
    argTypes:
    - H2Settings*
    - butil::IOBufBytesIterator
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 211
    functionName: brpc::policy::ParseH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LoadUint32
    - static_cast<H2SettingsIdentifier>
    - LOG
    - brpc::policy::LoadUint16
    linkageType: ''
    returnType: bool
    signature: bool ParseH2Settings(H2Settings* out, butil::IOBufBytesIterator& it,
      size_t n)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:221,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:222,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:226,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:227,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:231,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:232,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:236,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:237,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:241,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:242,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:245,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:246,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:247,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 251
    functionName: brpc::policy::SerializeH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::policy::SaveUint32
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2Settings(const H2Settings& in, void* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:255,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:256,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:259,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 265
    functionName: brpc::policy::SerializeH2SettingsFrameAndWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2SettingsFrameAndWU(const H2Settings& in, void* out)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - window_size
    - diff
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 287
    functionName: brpc::policy::AddWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool AddWindowSize(butil::atomic<int64_t>* window_size, int64_t diff)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:290,1
    - Dst: butil::atomic<int64_t>*::fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:294,1
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - window_size
    - size
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 300
    functionName: brpc::policy::MinusWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool MinusWindowSize(butil::atomic<int64_t>* window_size, int64_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 315
    functionName: brpc::policy::InitFrameHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitFrameHandlers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:317,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - type
    argTypes:
    - H2FrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 322
    functionName: brpc::policy::FindFrameHandler
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: H2Context::FrameHandler
    signature: H2Context::FrameHandler FindFrameHandler(H2FrameType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:341,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - socket
    - server
    argTypes:
    - Socket*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 353
    functionName: brpc::policy::H2Context::H2Context
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - Server*::options
    linkageType: ''
    returnType: void
    signature: void H2Context::H2Context(Socket* socket, const Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:356,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:357,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:360,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 361
    functionName: H2Context::~H2Context()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void H2Context::~H2Context()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:364,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:365,1
    - Dst: brpc::policy::H2Context::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:368,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 371
    functionName: brpc::policy::H2Context::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - init
    - LOG
    - brpc::policy::H2Context::Init
    linkageType: ''
    returnType: int
    signature: int H2Context::Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:377,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    - Dst: H2StreamContext*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 373
    functionDepth: 2
    functionLinenumber: 373
    functionLinenumberEnd: 386
    functionName: brpc::policy::H2Context::RemoveStreamAndDeferWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::H2Context::DeferWindowUpdate
    - erase
    - H2StreamContext*::ReleaseDeferredWindowUpdate
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::RemoveStreamAndDeferWU(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<H2StreamContext*>*::clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:390,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:396,1
    - Dst: StreamMap::begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: StreamMap::end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:399,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:404,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:405,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:407,1
    - Dst: std::vector<H2StreamContext*>*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:410,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - goaway_stream_id
    - out_streams
    argTypes:
    - int
    - std::vector<H2StreamContext*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 414
    functionName: brpc::policy::H2Context::RemoveGoAwayStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - swap
    - end
    - StreamMap::end
    - std::vector<H2StreamContext*>*::size
    - erase
    - stream_id
    - begin
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    - StreamMap::begin
    linkageType: ''
    returnType: void
    signature: "void H2Context::RemoveGoAwayStreams(\n    int goaway_stream_id, std::vector<H2StreamContext*>*
      out_streams)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 423
    functionName: brpc::policy::H2Context::FindStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - seek
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::FindStream(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - stream_id
    - ctx
    argTypes:
    - int
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 436
    functionName: brpc::policy::H2Context::TryToInsertStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int H2Context::TryToInsertStream(int stream_id, H2StreamContext* ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:441,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:448,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:450,1
    - Dst: bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:452,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:453,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:456,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:457,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:460,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:461,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:463,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:464,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' it'
    - frame_head
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 465
    functionName: brpc::policy::H2Context::ConsumeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - copy_and_forward
    - LoadUint8
    - MakeParseError
    - MakeMessage
    - static_cast<int>
    - bytes_left
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::ConsumeFrameHead(\n    butil::IOBufBytesIterator&
      it, H2FrameHead* frame_head)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:470,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:473,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:474,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:475,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:478,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:484,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:487,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:492,1
    - Dst: brpc::policy::H2Context::ConsumeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:495,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:496,1
    - Dst: FindFrameHandler
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:501,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:502,1
    - Dst: H2ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:505,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:508,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:510,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:511,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:514,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:515,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:519,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:521,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:523,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:525,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:528,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:531,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:532,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:535,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:536,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:538,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:541,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 60
    argCount: 2
    argNames:
    - ' it'
    - socket
    argTypes:
    - butil::IOBufBytesIterator
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 467
    functionDepth: 2
    functionLinenumber: 467
    functionLinenumberEnd: 543
    functionName: brpc::policy::H2Context::Consume
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - H2ParseResult::error
    - WriteAck
    - MakeParseError
    - brpc::policy::H2Context::ConsumeFrameHead
    - H2ParseResult::message
    - copy_and_forward
    - SaveUint32
    - MakeMessage
    - H2StreamContext*::header
    - LOG
    - ParseResult::is_ok
    - brpc::policy::H2Context::is_server_side
    - SerializeH2SettingsFrameAndWU
    - H2ErrorToStatusCode
    - SerializeFrameHead
    - H2ParseResult::stream_id
    - FindFrameHandler
    - H2ParseResult::is_ok
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::Consume(\n    butil::IOBufBytesIterator& it,
      Socket* socket)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:551,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:558,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:559,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:564,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:568,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:569,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:573,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:574,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:581,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:583,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:587,1
    - Dst: brpc::policy::H2Context::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:588,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:591,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:592,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:595,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:598,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:600,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:604,1
    - Dst: H2StreamContext::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:605,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:606,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:608,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:609,1
    - Dst: H2StreamContext*::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:613,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 53
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 545
    functionDepth: 2
    functionLinenumber: 545
    functionLinenumberEnd: 614
    functionName: brpc::policy::H2Context::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnHeaders
    - LoadUint8
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::TryToInsertStream
    - H2StreamContext*::Init
    - brpc::policy::H2Context::FindStream
    - is_read_progressive
    - brpc::policy::H2Context::is_client_side
    - H2StreamContext::OnHeaders
    - MakeH2Message
    - MakeH2Error
    - H2StreamContext::H2StreamContext
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:624,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:625,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:627,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:629,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:631,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:632,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:633,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:635,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:638,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:640,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:643,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:645,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:651,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 616
    functionDepth: 2
    functionLinenumber: 616
    functionLinenumberEnd: 653
    functionName: brpc::policy::H2StreamContext::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - forward
    - CHECK_EQ
    - MakeH2Error
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - brpc::policy::H2StreamContext::SetState
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:657,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:659,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:663,1
    - Dst: H2StreamContext::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:664,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:665,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:667,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:668,1
    - Dst: H2StreamContext*::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 672
    functionName: brpc::policy::H2Context::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Error
    - H2StreamContext::OnContinuation
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:677,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:678,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:681,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:683,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:688,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:690,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:693,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:696,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 674
    functionDepth: 2
    functionLinenumber: 674
    functionLinenumberEnd: 697
    functionName: brpc::policy::H2StreamContext::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    - pop_front
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - size
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:708,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:718,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:719,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:725,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 726
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext::OnData
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - LoadUint8
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - MakeH2Error
    - H2StreamContext*::OnData
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:732,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:733,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:734,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:735,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:744,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:747,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:756,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:766,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:767,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:768,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:771,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 728
    functionDepth: 2
    functionLinenumber: 728
    functionLinenumberEnd: 779
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block
    - WriteAck
    - brpc::policy::H2StreamContext::OnEndStream
    - OnBody
    - fetch_add
    - butil::StringPiece::data
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    - brpc::policy::H2StreamContext::stream_id
    - SaveUint32
    - local_settings
    - LOG
    - butil::StringPiece::size
    - SerializeFrameHead
    - MakeH2Error
    - append_and_forward
    - static_cast<int64_t>
    - VolatilePendingStreamSize
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - forward
    - exchange
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnData(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:784,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:788,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:791,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:793,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 794
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - MakeH2Message
    - MakeH2Error
    - static_cast<H2Error>
    - LOG
    - LoadUint32
    - H2StreamContext*::OnResetStream
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnResetStream(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:801,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:802,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:806,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:807,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:813,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:815,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 823
      start: 796
    functionDepth: 2
    functionLinenumber: 796
    functionLinenumberEnd: 823
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2ErrorToStatusCode
    - MakeH2Message
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - is_client_side
    - H2StreamContext*::header
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnResetStream(\n    H2Error h2_error,
      const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:827,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:829,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:830,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:833,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:834,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:842,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:845,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 825
    functionDepth: 2
    functionLinenumber: 825
    functionLinenumberEnd: 846
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - MakeH2Message
    - CHECK_EQ
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    - OnMessageComplete
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:856,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:857,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:861,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:866,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:878,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:879,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:882,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:888,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:893,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:901,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:902,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:903,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:904,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:912,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:913,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:915,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 916
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - WriteAck
    - static_cast<int64_t>
    - MakeH2Message
    - AddWindowSize
    - SerializeFrameHead
    - MakeH2Error
    - begin
    - LOG
    - fetch_sub
    - ParseH2Settings
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnSettings(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 918
    functionDepth: 1
    functionLinenumber: 918
    functionLinenumberEnd: 922
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPriority(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:926,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:927,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 924
    functionDepth: 1
    functionLinenumber: 924
    functionLinenumberEnd: 928
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPushPromise(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:937,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:938,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:946,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:947,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:949,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:951,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 952
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - WriteAck
    - copy_and_forward
    - SerializeFrameHead
    - MakeH2Error
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPing(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessHttpResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 954
    functionDepth: 12
    functionLinenumber: 954
    functionLinenumberEnd: 957
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - brpc::policy::ProcessHttpResponse
    linkageType: ''
    returnType: void
    signature: void * ProcessHttpResponseWrapper(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:966,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:967,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:971,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:979,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:981,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:984,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:986,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:992,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1004,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 959
    functionDepth: 4
    functionLinenumber: 959
    functionLinenumberEnd: 1006
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - forward
    - bthread_start_background
    - MakeH2Message
    - brpc::policy::H2Context::is_client_side
    - CHECK_EQ
    - MakeH2Error
    - std::vector::empty
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<int>
    - H2StreamContext*::header
    - static_cast<H2Error>
    - std::vector::size
    - SetLogOff
    - keytable_pool
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnGoAway(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& h)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1011,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1012,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1014,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1016,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1017,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1020,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1022,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1024,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1032,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1034,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1036,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1008
    functionDepth: 1
    functionLinenumber: 1008
    functionLinenumberEnd: 1038
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - MakeH2Message
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - MakeH2Error
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnWindowUpdate(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: H2ConnectionState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1049,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1051,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1057,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1061,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1062,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1065,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1040
    functionDepth: 1
    functionLinenumber: 1040
    functionLinenumberEnd: 1069
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - size
    linkageType: ''
    returnType: void
    signature: void H2Context::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1072,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1075,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1076
      start: 1071
    functionDepth: 0
    functionLinenumber: 1071
    functionLinenumberEnd: 1076
    functionName: brpc::policy::H2Context::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t H2Context::ReleaseDeferredWindowUpdate()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1082,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1083,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1085,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1088,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1089,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1090,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1091,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1078
    functionDepth: 1
    functionLinenumber: 1078
    functionLinenumberEnd: 1095
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - WriteAck
    - fetch_add
    - SaveUint32
    - SerializeFrameHead
    - local_settings
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void H2Context::DeferWindowUpdate(int64_t size)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1111,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1113,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1114,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1118,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1128,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1138
      start: 1103
    functionDepth: 2
    functionLinenumber: 1103
    functionLinenumberEnd: 1138
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 14
    functionsReached:
    - butil::IOBuf*::empty
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::size
    - H2Context*::Consume
    - MakeParseError
    - Socket*::initialize_parsing_context
    - ParseResult::is_ok
    - H2Context*::ClearAbandonedStreams
    - Socket*::parsing_context
    - H2Context*::Init
    - ParseResult::message
    - CHECK_EQ
    - static_cast<const Server*>
    - static_cast<H2Context*>
    - butil::IOBuf*::pop_front
    - LOG
    - H2Context::H2Context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseH2Message(butil::IOBuf *source, Socket *socket,\n
      \                          bool read_eof, const void *arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1143
      start: 1140
    functionDepth: 0
    functionLinenumber: 1140
    functionLinenumberEnd: 1143
    functionName: brpc::policy::H2Context::AddAbandonedStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void H2Context::AddAbandonedStream(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1147,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1148,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1149,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1150,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1151,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1157
      start: 1145
    functionDepth: 2
    functionLinenumber: 1145
    functionLinenumberEnd: 1157
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - back
    - pop_back
    - std::unique_lock::lock
    - empty
    - std::unique_lock::unlock
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1181
      start: 1176
    functionDepth: 0
    functionLinenumber: 1176
    functionLinenumberEnd: 1181
    functionName: brpc::policy::H2StreamContext::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - H2Context*::remote_settings
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::Init(H2Context* conn_ctx, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1187
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1187
    functionName: H2StreamContext::~H2StreamContext()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::~H2StreamContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1193,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1194,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1190
    functionDepth: 1
    functionLinenumber: 1190
    functionLinenumberEnd: 1196
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2StreamState2Str
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::SetState(H2StreamState state)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1206,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1209,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1214,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1215,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1219
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1219
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MinusWindowSize
    - load
    - fetch_add
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: bool
    signature: bool H2StreamContext::ConsumeWindowSize(int64_t size)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1222,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1226,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1233,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1238,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1240,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1244,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1248,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1251,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1255,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1258,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1262,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1265,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1270,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1280,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1284,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1285,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1287,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1291,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1295,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1298,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1306
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1306
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - strtol
    - hpacker
    - uri
    - HPacker::Header::value::c_str
    - set_content_type
    - AppendHeader
    - header
    - set_method
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - HPacker::Header::name::c_str
    - LOG
    - set_status_code
    - Decode
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - is_server_side
    - strcmp
    - butil::my_ip
    - Str2HttpMethod
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: int H2StreamContext::ConsumeHeaders(butil::IOBufBytesIterator& it)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1316,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1319,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1325,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1326,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1330,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1331,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1332,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1338,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1342,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1343,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1350,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1364,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1376,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1377,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 53
    argCount: 6
    argNames:
    - out
    - ' headers'
    - ' trailer_headers'
    - ' data'
    - stream_id
    - conn_ctx
    argTypes:
    - butil::IOBuf*
    - butil::IOBuf
    - butil::IOBuf
    - butil::IOBuf
    - int
    - H2Context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1310
    functionDepth: 1
    functionLinenumber: 1310
    functionLinenumberEnd: 1380
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SaveUint32
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::append
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - empty
    - cutn
    - size
    - butil::IOBufBytesIterator::append_and_forward
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: "void PackH2Message(butil::IOBuf* out,\n                          butil::IOBuf&
      headers,\n                          butil::IOBuf& trailer_headers,\n                          const
      butil::IOBuf& data,\n                          int stream_id,\n                          H2Context*
      conn_ctx)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1383,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1384,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1391,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1401,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1402,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1403,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1408,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1413,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1421,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1423,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1425,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1429,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1437,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1440,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1448,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1451,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1452,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1456
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1456
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - method
    - uri
    - H2StreamContext::H2StreamContext
    - butil::endpoint2str
    - HttpMethod2Str
    - butil::Base64Encode
    - port
    - Controller*::remote_side
    - butil::string_printf
    - std::string*::reserve
    - Controller*::http_request
    - H2UnsentRequest*::push
    - malloc
    - H2UnsentRequest*::_sctx::reset
    - get_common_strings
    - std::string*::append
    - GetHeader
    - HeaderCount
    - H2UnsentRequest::H2UnsentRequest
    - Controller*::is_ssl
    - content_type
    - empty
    - host
    - Controller*::is_response_read_progressively
    - std::string*::empty
    - std::string::size
    linkageType: ''
    returnType: H2UnsentRequest
    signature: H2UnsentRequest * H2UnsentRequest::New(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1462,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1464
      start: 1458
    functionDepth: 0
    functionLinenumber: 1458
    functionLinenumberEnd: 1464
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2UnsentRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1467
    functionName: brpc::policy::RemoveRefOnQuit
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoveRefOnQuit(H2UnsentRequest* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1468,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1468
    functionName: ~RemoveRefOnQuit()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void ~RemoveRefOnQuit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1480,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1485,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1474
    functionDepth: 0
    functionLinenumber: 1474
    functionLinenumberEnd: 1488
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - CHECK_EQ
    - H2Context*::AddAbandonedStream
    - static_cast<H2Context*>
    linkageType: ''
    returnType: void
    signature: "void H2UnsentRequest::DestroyStreamUserData(SocketUniquePtr& sending_sock,\n
      \                                           Controller* cntl,\n                                            int
      error_code,\n                                            bool /*end_of_rpc*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1503,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1510,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1511,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1513,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1515,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1523,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1525,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1530,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1537,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1540,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1547,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1550,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1552,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1553,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1554,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1555,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1565,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1567,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1569,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1581,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1582,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1584,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1586,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1589,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1496
    functionDepth: 2
    functionLinenumber: 1496
    functionLinenumberEnd: 1594
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::append
    - Init
    - H2Context*::VolatilePendingStreamSize
    - stream_id
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context*::AllocateClientStreamId
    - Socket*::parsing_context
    - butil::IOBufAppender::IOBufAppender
    - get
    - PackH2Message
    - H2Context::H2Context
    - BuiltinServiceTest::TestStatus
    - request_attachment
    - SerializeH2SettingsFrameAndWU
    - H2Context*::Init
    - CHECK
    - release
    - Encode
    - HeaderEnd
    - Socket*::initialize_parsing_context
    - has_http_request
    - ConsumeWindowSize
    - H2Context*::remote_settings
    - H2Context*::hpacker
    - Socket*::CreatedByConnect
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentRequest::AppendAndDestroySelf(butil::IOBuf* out,
      Socket* socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1605,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1606,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1607,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1612,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1596
    functionDepth: 0
    functionLinenumber: 1596
    functionLinenumberEnd: 1614
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - request_attachment
    - name::size
    - HeaderEnd
    - value::size
    - has_http_request
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentRequest::EstimatedByteSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1625,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1626,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1627,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1628,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1632,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1633,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1638
      start: 1616
    functionDepth: 1
    functionLinenumber: 1616
    functionLinenumberEnd: 1638
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::empty
    - request_attachment
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - HeaderEnd
    - has_http_request
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Print(std::ostream& os) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::release_http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1643,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1650
      start: 1640
    functionDepth: 1
    functionLinenumber: 1640
    functionLinenumberEnd: 1650
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - PercentEncode
    - Controller*::ErrorCode
    - Controller*::response_attachment
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorText
    - Controller*::release_http_response
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::H2UnsentResponse(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1653,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1655,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1662,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1666,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1652
    functionDepth: 1
    functionLinenumber: 1652
    functionLinenumberEnd: 1672
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - H2UnsentResponse*::push
    - butil::string_printf
    - HttpHeader*::content_type
    - Controller*::http_response
    - H2UnsentResponse::H2UnsentResponse
    - malloc
    - get_common_strings
    - HttpHeader*::status_code
    linkageType: ''
    returnType: H2UnsentResponse
    signature: H2UnsentResponse * H2UnsentResponse::New(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1676,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1679,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1680
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1680
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1695,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1708,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1709,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1710,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1711,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1714,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1727,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1730,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1734,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1740,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1741,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1750
      start: 1688
    functionDepth: 1
    functionLinenumber: 1688
    functionLinenumberEnd: 1750
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::IOBuf*::append
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - butil::IOBufAppender::move_to
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - SaveUint32
    - size
    - PackH2Message
    - butil::string_printf
    - MinusWindowSize
    - SerializeFrameHead
    - Encode
    - HeaderEnd
    - H2Context*::hpacker
    - H2Context*::remote_settings
    - empty
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentResponse::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1759,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1763,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1752
    functionDepth: 0
    functionLinenumber: 1752
    functionLinenumberEnd: 1765
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - size
    - name::size
    - HeaderEnd
    - value::size
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentResponse::EstimatedByteSize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1773,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1774,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1778,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1781,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1782
      start: 1767
    functionDepth: 1
    functionLinenumber: 1767
    functionLinenumberEnd: 1782
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - empty
    - HeaderEnd
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Print(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1793,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1794,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1796,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1797,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1799,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1804,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1809,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 4
    argNames:
    - user_message
    - correlation_id
    - cntl
    - auth
    argTypes:
    - SocketMessage**
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1811
      start: 1784
    functionDepth: 1
    functionLinenumber: 1784
    functionLinenumberEnd: 1811
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_stream_user_data
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - H2UnsentRequest*::_sctx::set_correlation_id
    - dynamic_cast<H2UnsentRequest*>
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackH2Request(butil::IOBuf*,\n                   SocketMessage**
      user_message,\n                   uint64_t correlation_id,\n                   const
      google::protobuf::MethodDescriptor*,\n                   Controller* cntl,\n
      \                  const butil::IOBuf&,\n                   const Authenticator*
      auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1815,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1816
      start: 1813
    functionDepth: 0
    functionLinenumber: 1813
    functionLinenumberEnd: 1816
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::parsing_context
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1820,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1821,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1825,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1827,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1831
      start: 1818
    functionDepth: 0
    functionLinenumber: 1818
    functionLinenumberEnd: 1831
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - GetAgentSocket
    - Controller*::SetFailed
    - brpc::policy::H2UnsentRequest::New
    linkageType: ''
    returnType: StreamUserData
    signature: "StreamUserData * H2GlobalStreamCreator::OnCreatingStream(\n        SocketUniquePtr*
      inout, Controller* cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1836
      start: 1833
    functionDepth: 0
    functionLinenumber: 1833
    functionLinenumberEnd: 1836
    functionName: brpc::policy::H2GlobalStreamCreator::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2GlobalStreamCreator::DestroyStreamCreator(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2GlobalStreamCreator>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1839,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1838
    functionDepth: 0
    functionLinenumber: 1838
    functionLinenumberEnd: 1840
    functionName: brpc::policy::get_h2_global_stream_creator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<H2GlobalStreamCreator>
    linkageType: ''
    returnType: StreamCreator
    signature: StreamCreator * get_h2_global_stream_creator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::policy::CheckStreamWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckStreamWindowSize(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: brpc::policy::CheckConnWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckConnWindowSize(const char*, int32_t val)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: brpc::policy::H2StreamState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2StreamState2Str(H2StreamState s)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2ConnectionState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: brpc::policy::H2ConnectionState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2ConnectionState2Str(H2ConnectionState s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: brpc::policy::LoadUint8
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t LoadUint8(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: brpc::policy::LoadUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t LoadUint16(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: brpc::policy::LoadUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LoadUint32(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: brpc::policy::SaveUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint16(void* out, uint16_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: brpc::policy::SaveUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint32(void* out, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 5
    argNames:
    - out_buf
    - payload_size
    - type
    - flags
    - stream_id
    argTypes:
    - void*
    - uint32_t
    - H2FrameType
    - uint8_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 135
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeFrameHead(void* out_buf,\n                        uint32_t
      payload_size, H2FrameType type,\n                        uint8_t flags, uint32_t
      stream_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - out_buf
    - ' h'
    argTypes:
    - void*
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 21
    functionsReached:
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void SerializeFrameHead(void* out_buf, const H2FrameHead& h)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:144,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - s
    - data
    - n
    argTypes:
    - Socket*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::policy::WriteAck
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteAck(Socket* s, const void* data, size_t n)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:166,1
    - Dst: brpc::policy::LoadUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:170,1
    - Dst: brpc::policy::LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:171,1
    - Dst: static_cast<H2SettingsIdentifier>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:196,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 42
    argCount: 3
    argNames:
    - out
    - ' it'
    - n
    argTypes:
    - H2Settings*
    - butil::IOBufBytesIterator
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 211
    functionName: brpc::policy::ParseH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LoadUint32
    - static_cast<H2SettingsIdentifier>
    - LOG
    - brpc::policy::LoadUint16
    linkageType: ''
    returnType: bool
    signature: bool ParseH2Settings(H2Settings* out, butil::IOBufBytesIterator& it,
      size_t n)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:221,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:222,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:226,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:227,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:231,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:232,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:236,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:237,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:241,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:242,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:245,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:246,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:247,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 251
    functionName: brpc::policy::SerializeH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::policy::SaveUint32
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2Settings(const H2Settings& in, void* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:255,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:256,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:259,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 265
    functionName: brpc::policy::SerializeH2SettingsFrameAndWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2SettingsFrameAndWU(const H2Settings& in, void* out)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - window_size
    - diff
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 287
    functionName: brpc::policy::AddWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool AddWindowSize(butil::atomic<int64_t>* window_size, int64_t diff)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:290,1
    - Dst: butil::atomic<int64_t>*::fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:294,1
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - window_size
    - size
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 300
    functionName: brpc::policy::MinusWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool MinusWindowSize(butil::atomic<int64_t>* window_size, int64_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 315
    functionName: brpc::policy::InitFrameHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitFrameHandlers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:317,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - type
    argTypes:
    - H2FrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 322
    functionName: brpc::policy::FindFrameHandler
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: H2Context::FrameHandler
    signature: H2Context::FrameHandler FindFrameHandler(H2FrameType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:341,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - socket
    - server
    argTypes:
    - Socket*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 353
    functionName: brpc::policy::H2Context::H2Context
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - Server*::options
    linkageType: ''
    returnType: void
    signature: void H2Context::H2Context(Socket* socket, const Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:356,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:357,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:360,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 361
    functionName: H2Context::~H2Context()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void H2Context::~H2Context()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:364,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:365,1
    - Dst: brpc::policy::H2Context::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:368,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 371
    functionName: brpc::policy::H2Context::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - init
    - LOG
    - brpc::policy::H2Context::Init
    linkageType: ''
    returnType: int
    signature: int H2Context::Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:377,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    - Dst: H2StreamContext*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 373
    functionDepth: 2
    functionLinenumber: 373
    functionLinenumberEnd: 386
    functionName: brpc::policy::H2Context::RemoveStreamAndDeferWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2Context::DeferWindowUpdate
    - erase
    - H2StreamContext*::ReleaseDeferredWindowUpdate
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::RemoveStreamAndDeferWU(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<H2StreamContext*>*::clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:390,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:396,1
    - Dst: StreamMap::begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: StreamMap::end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:399,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:404,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:405,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:407,1
    - Dst: std::vector<H2StreamContext*>*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:410,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - goaway_stream_id
    - out_streams
    argTypes:
    - int
    - std::vector<H2StreamContext*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 414
    functionName: brpc::policy::H2Context::RemoveGoAwayStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - swap
    - end
    - StreamMap::end
    - std::vector<H2StreamContext*>*::size
    - erase
    - stream_id
    - begin
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    - StreamMap::begin
    linkageType: ''
    returnType: void
    signature: "void H2Context::RemoveGoAwayStreams(\n    int goaway_stream_id, std::vector<H2StreamContext*>*
      out_streams)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 423
    functionName: brpc::policy::H2Context::FindStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 10
    functionsReached:
    - seek
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::FindStream(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - stream_id
    - ctx
    argTypes:
    - int
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 436
    functionName: brpc::policy::H2Context::TryToInsertStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int H2Context::TryToInsertStream(int stream_id, H2StreamContext* ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:441,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:448,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:450,1
    - Dst: bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:452,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:453,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:456,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:457,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:460,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:461,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:463,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:464,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' it'
    - frame_head
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 465
    functionName: brpc::policy::H2Context::ConsumeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - copy_and_forward
    - LoadUint8
    - MakeParseError
    - MakeMessage
    - static_cast<int>
    - bytes_left
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::ConsumeFrameHead(\n    butil::IOBufBytesIterator&
      it, H2FrameHead* frame_head)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:470,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:473,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:474,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:475,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:478,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:484,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:487,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:492,1
    - Dst: brpc::policy::H2Context::ConsumeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:495,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:496,1
    - Dst: FindFrameHandler
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:501,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:502,1
    - Dst: H2ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:505,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:508,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:510,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:511,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:514,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:515,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:519,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:521,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:523,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:525,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:528,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:531,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:532,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:535,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:536,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:538,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:541,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 60
    argCount: 2
    argNames:
    - ' it'
    - socket
    argTypes:
    - butil::IOBufBytesIterator
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 467
    functionDepth: 2
    functionLinenumber: 467
    functionLinenumberEnd: 543
    functionName: brpc::policy::H2Context::Consume
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - H2ParseResult::error
    - WriteAck
    - MakeParseError
    - brpc::policy::H2Context::ConsumeFrameHead
    - H2ParseResult::message
    - copy_and_forward
    - SaveUint32
    - MakeMessage
    - H2StreamContext*::header
    - LOG
    - ParseResult::is_ok
    - brpc::policy::H2Context::is_server_side
    - SerializeH2SettingsFrameAndWU
    - H2ErrorToStatusCode
    - SerializeFrameHead
    - H2ParseResult::stream_id
    - FindFrameHandler
    - H2ParseResult::is_ok
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::Consume(\n    butil::IOBufBytesIterator& it,
      Socket* socket)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:551,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:558,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:559,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:564,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:568,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:569,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:573,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:574,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:581,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:583,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:587,1
    - Dst: brpc::policy::H2Context::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:588,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:591,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:592,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:595,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:598,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:600,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:604,1
    - Dst: H2StreamContext::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:605,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:606,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:608,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:609,1
    - Dst: H2StreamContext*::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:613,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 53
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 545
    functionDepth: 2
    functionLinenumber: 545
    functionLinenumberEnd: 614
    functionName: brpc::policy::H2Context::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnHeaders
    - LoadUint8
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::TryToInsertStream
    - H2StreamContext*::Init
    - brpc::policy::H2Context::FindStream
    - is_read_progressive
    - brpc::policy::H2Context::is_client_side
    - H2StreamContext::OnHeaders
    - MakeH2Message
    - MakeH2Error
    - H2StreamContext::H2StreamContext
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:624,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:625,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:627,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:629,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:631,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:632,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:633,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:635,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:638,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:640,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:643,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:645,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:651,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 616
    functionDepth: 2
    functionLinenumber: 616
    functionLinenumberEnd: 653
    functionName: brpc::policy::H2StreamContext::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - forward
    - CHECK_EQ
    - MakeH2Error
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - brpc::policy::H2StreamContext::SetState
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:657,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:659,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:663,1
    - Dst: H2StreamContext::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:664,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:665,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:667,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:668,1
    - Dst: H2StreamContext*::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 672
    functionName: brpc::policy::H2Context::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Error
    - H2StreamContext::OnContinuation
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:677,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:678,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:681,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:683,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:688,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:690,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:693,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:696,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 674
    functionDepth: 2
    functionLinenumber: 674
    functionLinenumberEnd: 697
    functionName: brpc::policy::H2StreamContext::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    - pop_front
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - size
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:708,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:718,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:719,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:725,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 726
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext::OnData
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - LoadUint8
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - MakeH2Error
    - H2StreamContext*::OnData
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:732,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:733,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:734,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:735,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:744,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:747,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:756,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:766,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:767,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:768,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:771,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 728
    functionDepth: 2
    functionLinenumber: 728
    functionLinenumberEnd: 779
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block
    - WriteAck
    - brpc::policy::H2StreamContext::OnEndStream
    - OnBody
    - fetch_add
    - butil::StringPiece::data
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    - brpc::policy::H2StreamContext::stream_id
    - SaveUint32
    - local_settings
    - LOG
    - butil::StringPiece::size
    - SerializeFrameHead
    - MakeH2Error
    - append_and_forward
    - static_cast<int64_t>
    - VolatilePendingStreamSize
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - forward
    - exchange
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnData(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:784,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:788,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:791,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:793,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 794
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - MakeH2Message
    - MakeH2Error
    - static_cast<H2Error>
    - LOG
    - LoadUint32
    - H2StreamContext*::OnResetStream
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnResetStream(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:801,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:802,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:806,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:807,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:813,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:815,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 823
      start: 796
    functionDepth: 2
    functionLinenumber: 796
    functionLinenumberEnd: 823
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2ErrorToStatusCode
    - MakeH2Message
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - is_client_side
    - H2StreamContext*::header
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnResetStream(\n    H2Error h2_error,
      const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:827,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:829,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:830,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:833,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:834,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:842,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:845,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 825
    functionDepth: 2
    functionLinenumber: 825
    functionLinenumberEnd: 846
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - MakeH2Message
    - CHECK_EQ
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    - OnMessageComplete
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:856,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:857,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:861,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:866,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:878,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:879,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:882,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:888,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:893,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:901,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:902,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:903,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:904,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:912,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:913,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:915,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 916
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - WriteAck
    - static_cast<int64_t>
    - MakeH2Message
    - AddWindowSize
    - SerializeFrameHead
    - MakeH2Error
    - begin
    - LOG
    - fetch_sub
    - ParseH2Settings
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnSettings(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 918
    functionDepth: 1
    functionLinenumber: 918
    functionLinenumberEnd: 922
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPriority(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:926,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:927,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 924
    functionDepth: 1
    functionLinenumber: 924
    functionLinenumberEnd: 928
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPushPromise(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:937,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:938,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:946,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:947,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:949,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:951,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 952
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - WriteAck
    - copy_and_forward
    - SerializeFrameHead
    - MakeH2Error
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPing(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessHttpResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 954
    functionDepth: 12
    functionLinenumber: 954
    functionLinenumberEnd: 957
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - brpc::policy::ProcessHttpResponse
    linkageType: ''
    returnType: void
    signature: void * ProcessHttpResponseWrapper(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:966,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:967,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:971,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:979,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:981,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:984,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:986,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:992,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1004,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 959
    functionDepth: 4
    functionLinenumber: 959
    functionLinenumberEnd: 1006
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - forward
    - bthread_start_background
    - MakeH2Message
    - brpc::policy::H2Context::is_client_side
    - CHECK_EQ
    - MakeH2Error
    - std::vector::empty
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<int>
    - H2StreamContext*::header
    - static_cast<H2Error>
    - std::vector::size
    - SetLogOff
    - keytable_pool
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnGoAway(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& h)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1011,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1012,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1014,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1016,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1017,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1020,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1022,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1024,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1032,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1034,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1036,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1008
    functionDepth: 1
    functionLinenumber: 1008
    functionLinenumberEnd: 1038
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - MakeH2Message
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - MakeH2Error
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnWindowUpdate(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: H2ConnectionState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1049,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1051,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1057,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1061,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1062,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1065,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1040
    functionDepth: 1
    functionLinenumber: 1040
    functionLinenumberEnd: 1069
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - size
    linkageType: ''
    returnType: void
    signature: void H2Context::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1072,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1075,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1076
      start: 1071
    functionDepth: 0
    functionLinenumber: 1071
    functionLinenumberEnd: 1076
    functionName: brpc::policy::H2Context::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t H2Context::ReleaseDeferredWindowUpdate()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1082,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1083,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1085,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1088,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1089,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1090,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1091,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1078
    functionDepth: 1
    functionLinenumber: 1078
    functionLinenumberEnd: 1095
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - WriteAck
    - fetch_add
    - SaveUint32
    - SerializeFrameHead
    - local_settings
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void H2Context::DeferWindowUpdate(int64_t size)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1111,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1113,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1114,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1118,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1128,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1138
      start: 1103
    functionDepth: 2
    functionLinenumber: 1103
    functionLinenumberEnd: 1138
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 14
    functionsReached:
    - butil::IOBuf*::empty
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::size
    - H2Context*::Consume
    - MakeParseError
    - Socket*::initialize_parsing_context
    - ParseResult::is_ok
    - H2Context*::ClearAbandonedStreams
    - Socket*::parsing_context
    - H2Context*::Init
    - ParseResult::message
    - CHECK_EQ
    - static_cast<const Server*>
    - static_cast<H2Context*>
    - butil::IOBuf*::pop_front
    - LOG
    - H2Context::H2Context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseH2Message(butil::IOBuf *source, Socket *socket,\n
      \                          bool read_eof, const void *arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1143
      start: 1140
    functionDepth: 0
    functionLinenumber: 1140
    functionLinenumberEnd: 1143
    functionName: brpc::policy::H2Context::AddAbandonedStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void H2Context::AddAbandonedStream(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1147,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1148,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1149,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1150,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1151,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1157
      start: 1145
    functionDepth: 2
    functionLinenumber: 1145
    functionLinenumberEnd: 1157
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - back
    - pop_back
    - std::unique_lock::lock
    - empty
    - std::unique_lock::unlock
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1181
      start: 1176
    functionDepth: 0
    functionLinenumber: 1176
    functionLinenumberEnd: 1181
    functionName: brpc::policy::H2StreamContext::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - H2Context*::remote_settings
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::Init(H2Context* conn_ctx, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1187
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1187
    functionName: H2StreamContext::~H2StreamContext()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::~H2StreamContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1193,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1194,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1190
    functionDepth: 1
    functionLinenumber: 1190
    functionLinenumberEnd: 1196
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2StreamState2Str
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::SetState(H2StreamState state)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1206,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1209,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1214,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1215,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1219
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1219
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MinusWindowSize
    - load
    - fetch_add
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: bool
    signature: bool H2StreamContext::ConsumeWindowSize(int64_t size)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1222,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1226,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1233,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1238,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1240,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1244,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1248,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1251,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1255,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1258,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1262,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1265,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1270,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1280,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1284,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1285,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1287,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1291,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1295,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1298,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1306
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1306
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - strtol
    - hpacker
    - uri
    - HPacker::Header::value::c_str
    - set_content_type
    - AppendHeader
    - header
    - set_method
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - HPacker::Header::name::c_str
    - LOG
    - set_status_code
    - Decode
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - is_server_side
    - strcmp
    - butil::my_ip
    - Str2HttpMethod
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: int H2StreamContext::ConsumeHeaders(butil::IOBufBytesIterator& it)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1316,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1319,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1325,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1326,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1330,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1331,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1332,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1338,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1342,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1343,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1350,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1364,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1376,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1377,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 53
    argCount: 6
    argNames:
    - out
    - ' headers'
    - ' trailer_headers'
    - ' data'
    - stream_id
    - conn_ctx
    argTypes:
    - butil::IOBuf*
    - butil::IOBuf
    - butil::IOBuf
    - butil::IOBuf
    - int
    - H2Context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1310
    functionDepth: 1
    functionLinenumber: 1310
    functionLinenumberEnd: 1380
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SaveUint32
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::append
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - empty
    - cutn
    - size
    - butil::IOBufBytesIterator::append_and_forward
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: "void PackH2Message(butil::IOBuf* out,\n                          butil::IOBuf&
      headers,\n                          butil::IOBuf& trailer_headers,\n                          const
      butil::IOBuf& data,\n                          int stream_id,\n                          H2Context*
      conn_ctx)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1383,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1384,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1391,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1401,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1402,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1403,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1408,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1413,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1421,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1423,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1425,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1429,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1437,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1440,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1448,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1451,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1452,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1456
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1456
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - method
    - uri
    - H2StreamContext::H2StreamContext
    - butil::endpoint2str
    - HttpMethod2Str
    - butil::Base64Encode
    - port
    - Controller*::remote_side
    - butil::string_printf
    - std::string*::reserve
    - Controller*::http_request
    - H2UnsentRequest*::push
    - malloc
    - H2UnsentRequest*::_sctx::reset
    - get_common_strings
    - std::string*::append
    - GetHeader
    - HeaderCount
    - H2UnsentRequest::H2UnsentRequest
    - Controller*::is_ssl
    - content_type
    - empty
    - host
    - Controller*::is_response_read_progressively
    - std::string*::empty
    - std::string::size
    linkageType: ''
    returnType: H2UnsentRequest
    signature: H2UnsentRequest * H2UnsentRequest::New(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1462,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1464
      start: 1458
    functionDepth: 0
    functionLinenumber: 1458
    functionLinenumberEnd: 1464
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2UnsentRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1467
    functionName: brpc::policy::RemoveRefOnQuit
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoveRefOnQuit(H2UnsentRequest* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1468,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1468
    functionName: ~RemoveRefOnQuit()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void ~RemoveRefOnQuit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1480,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1485,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1474
    functionDepth: 0
    functionLinenumber: 1474
    functionLinenumberEnd: 1488
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - CHECK_EQ
    - H2Context*::AddAbandonedStream
    - static_cast<H2Context*>
    linkageType: ''
    returnType: void
    signature: "void H2UnsentRequest::DestroyStreamUserData(SocketUniquePtr& sending_sock,\n
      \                                           Controller* cntl,\n                                            int
      error_code,\n                                            bool /*end_of_rpc*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1503,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1510,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1511,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1513,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1515,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1523,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1525,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1530,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1537,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1540,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1547,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1550,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1552,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1553,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1554,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1555,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1565,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1567,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1569,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1581,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1582,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1584,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1586,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1589,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1496
    functionDepth: 2
    functionLinenumber: 1496
    functionLinenumberEnd: 1594
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::append
    - Init
    - H2Context*::VolatilePendingStreamSize
    - stream_id
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context*::AllocateClientStreamId
    - Socket*::parsing_context
    - butil::IOBufAppender::IOBufAppender
    - get
    - PackH2Message
    - H2Context::H2Context
    - BuiltinServiceTest::TestStatus
    - request_attachment
    - SerializeH2SettingsFrameAndWU
    - H2Context*::Init
    - CHECK
    - release
    - Encode
    - HeaderEnd
    - Socket*::initialize_parsing_context
    - has_http_request
    - ConsumeWindowSize
    - H2Context*::remote_settings
    - H2Context*::hpacker
    - Socket*::CreatedByConnect
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentRequest::AppendAndDestroySelf(butil::IOBuf* out,
      Socket* socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1605,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1606,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1607,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1612,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1596
    functionDepth: 0
    functionLinenumber: 1596
    functionLinenumberEnd: 1614
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - request_attachment
    - name::size
    - HeaderEnd
    - value::size
    - has_http_request
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentRequest::EstimatedByteSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1625,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1626,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1627,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1628,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1632,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1633,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1638
      start: 1616
    functionDepth: 1
    functionLinenumber: 1616
    functionLinenumberEnd: 1638
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::empty
    - request_attachment
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - HeaderEnd
    - has_http_request
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Print(std::ostream& os) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::release_http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1643,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1650
      start: 1640
    functionDepth: 1
    functionLinenumber: 1640
    functionLinenumberEnd: 1650
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - PercentEncode
    - Controller*::ErrorCode
    - Controller*::response_attachment
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorText
    - Controller*::release_http_response
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::H2UnsentResponse(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1653,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1655,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1662,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1666,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1652
    functionDepth: 1
    functionLinenumber: 1652
    functionLinenumberEnd: 1672
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - H2UnsentResponse*::push
    - butil::string_printf
    - HttpHeader*::content_type
    - Controller*::http_response
    - H2UnsentResponse::H2UnsentResponse
    - malloc
    - get_common_strings
    - HttpHeader*::status_code
    linkageType: ''
    returnType: H2UnsentResponse
    signature: H2UnsentResponse * H2UnsentResponse::New(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1676,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1679,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1680
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1680
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1695,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1708,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1709,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1710,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1711,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1714,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1727,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1730,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1734,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1740,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1741,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1750
      start: 1688
    functionDepth: 1
    functionLinenumber: 1688
    functionLinenumberEnd: 1750
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::IOBuf*::append
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - butil::IOBufAppender::move_to
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - SaveUint32
    - size
    - PackH2Message
    - butil::string_printf
    - MinusWindowSize
    - SerializeFrameHead
    - Encode
    - HeaderEnd
    - H2Context*::hpacker
    - H2Context*::remote_settings
    - empty
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentResponse::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1759,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1763,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1752
    functionDepth: 0
    functionLinenumber: 1752
    functionLinenumberEnd: 1765
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - size
    - name::size
    - HeaderEnd
    - value::size
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentResponse::EstimatedByteSize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1773,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1774,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1778,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1781,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1782
      start: 1767
    functionDepth: 1
    functionLinenumber: 1767
    functionLinenumberEnd: 1782
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - empty
    - HeaderEnd
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Print(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1793,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1794,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1796,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1797,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1799,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1804,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1809,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 4
    argNames:
    - user_message
    - correlation_id
    - cntl
    - auth
    argTypes:
    - SocketMessage**
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1811
      start: 1784
    functionDepth: 1
    functionLinenumber: 1784
    functionLinenumberEnd: 1811
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_stream_user_data
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - H2UnsentRequest*::_sctx::set_correlation_id
    - dynamic_cast<H2UnsentRequest*>
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackH2Request(butil::IOBuf*,\n                   SocketMessage**
      user_message,\n                   uint64_t correlation_id,\n                   const
      google::protobuf::MethodDescriptor*,\n                   Controller* cntl,\n
      \                  const butil::IOBuf&,\n                   const Authenticator*
      auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1815,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1816
      start: 1813
    functionDepth: 0
    functionLinenumber: 1813
    functionLinenumberEnd: 1816
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::parsing_context
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1820,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1821,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1825,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1827,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1831
      start: 1818
    functionDepth: 0
    functionLinenumber: 1818
    functionLinenumberEnd: 1831
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - GetAgentSocket
    - Controller*::SetFailed
    - brpc::policy::H2UnsentRequest::New
    linkageType: ''
    returnType: StreamUserData
    signature: "StreamUserData * H2GlobalStreamCreator::OnCreatingStream(\n        SocketUniquePtr*
      inout, Controller* cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1836
      start: 1833
    functionDepth: 0
    functionLinenumber: 1833
    functionLinenumberEnd: 1836
    functionName: brpc::policy::H2GlobalStreamCreator::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2GlobalStreamCreator::DestroyStreamCreator(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2GlobalStreamCreator>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1839,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1838
    functionDepth: 0
    functionLinenumber: 1838
    functionLinenumberEnd: 1840
    functionName: brpc::policy::get_h2_global_stream_creator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<H2GlobalStreamCreator>
    linkageType: ''
    returnType: StreamCreator
    signature: StreamCreator * get_h2_global_stream_creator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::policy::CheckStreamWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckStreamWindowSize(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: brpc::policy::CheckConnWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CheckConnWindowSize(const char*, int32_t val)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: brpc::policy::H2StreamState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2StreamState2Str(H2StreamState s)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - H2ConnectionState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: brpc::policy::H2ConnectionState2Str
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * H2ConnectionState2Str(H2ConnectionState s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: brpc::policy::LoadUint8
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t LoadUint8(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: brpc::policy::LoadUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t LoadUint16(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: brpc::policy::LoadUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LoadUint32(butil::IOBufBytesIterator& it)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: brpc::policy::SaveUint16
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint16(void* out, uint16_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: brpc::policy::SaveUint32
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SaveUint32(void* out, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 5
    argNames:
    - out_buf
    - payload_size
    - type
    - flags
    - stream_id
    argTypes:
    - void*
    - uint32_t
    - H2FrameType
    - uint8_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 135
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 23
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeFrameHead(void* out_buf,\n                        uint32_t
      payload_size, H2FrameType type,\n                        uint8_t flags, uint32_t
      stream_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - out_buf
    - ' h'
    argTypes:
    - void*
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: brpc::policy::SerializeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 24
    functionsReached:
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: void SerializeFrameHead(void* out_buf, const H2FrameHead& h)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:144,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - s
    - data
    - n
    argTypes:
    - Socket*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::policy::WriteAck
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteAck(Socket* s, const void* data, size_t n)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:166,1
    - Dst: brpc::policy::LoadUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:170,1
    - Dst: brpc::policy::LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:171,1
    - Dst: static_cast<H2SettingsIdentifier>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:196,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 42
    argCount: 3
    argNames:
    - out
    - ' it'
    - n
    argTypes:
    - H2Settings*
    - butil::IOBufBytesIterator
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 211
    functionName: brpc::policy::ParseH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LoadUint32
    - static_cast<H2SettingsIdentifier>
    - LOG
    - brpc::policy::LoadUint16
    linkageType: ''
    returnType: bool
    signature: bool ParseH2Settings(H2Settings* out, butil::IOBufBytesIterator& it,
      size_t n)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:221,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:222,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:226,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:227,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:230,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:231,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:232,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:236,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:237,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:241,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:242,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:245,1
    - Dst: brpc::policy::SaveUint16
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:246,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:247,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:250,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 251
    functionName: brpc::policy::SerializeH2Settings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::policy::SaveUint32
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2Settings(const H2Settings& in, void* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:255,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:256,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:259,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:260,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - H2Settings
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 265
    functionName: brpc::policy::SerializeH2SettingsFrameAndWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: size_t
    signature: size_t SerializeH2SettingsFrameAndWU(const H2Settings& in, void* out)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:272,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - window_size
    - diff
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 287
    functionName: brpc::policy::AddWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool AddWindowSize(butil::atomic<int64_t>* window_size, int64_t diff)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int64_t>*::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:290,1
    - Dst: butil::atomic<int64_t>*::fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:294,1
    - Dst: butil::atomic<int64_t>*::fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - window_size
    - size
    argTypes:
    - butil::atomic<int64_t>*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 300
    functionName: brpc::policy::MinusWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    - butil::atomic<int64_t>*::fetch_add
    linkageType: ''
    returnType: bool
    signature: bool MinusWindowSize(butil::atomic<int64_t>* window_size, int64_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 315
    functionName: brpc::policy::InitFrameHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitFrameHandlers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:317,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - type
    argTypes:
    - H2FrameType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 322
    functionName: brpc::policy::FindFrameHandler
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: H2Context::FrameHandler
    signature: H2Context::FrameHandler FindFrameHandler(H2FrameType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:341,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - socket
    - server
    argTypes:
    - Socket*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 353
    functionName: brpc::policy::H2Context::H2Context
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - Server*::options
    linkageType: ''
    returnType: void
    signature: void H2Context::H2Context(Socket* socket, const Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:356,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:357,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:360,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 361
    functionName: H2Context::~H2Context()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void H2Context::~H2Context()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:364,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:365,1
    - Dst: brpc::policy::H2Context::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:368,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 371
    functionName: brpc::policy::H2Context::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - init
    - LOG
    - brpc::policy::H2Context::Init
    linkageType: ''
    returnType: int
    signature: int H2Context::Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:377,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    - Dst: H2StreamContext*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:384,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 373
    functionDepth: 2
    functionLinenumber: 373
    functionLinenumberEnd: 386
    functionName: brpc::policy::H2Context::RemoveStreamAndDeferWU
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::H2Context::DeferWindowUpdate
    - erase
    - H2StreamContext*::ReleaseDeferredWindowUpdate
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::RemoveStreamAndDeferWU(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<H2StreamContext*>*::clear
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:390,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:396,1
    - Dst: StreamMap::begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: StreamMap::end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:398,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:399,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:404,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:405,1
    - Dst: std::vector<H2StreamContext*>*::push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:407,1
    - Dst: std::vector<H2StreamContext*>*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:410,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:411,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - goaway_stream_id
    - out_streams
    argTypes:
    - int
    - std::vector<H2StreamContext*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 414
    functionName: brpc::policy::H2Context::RemoveGoAwayStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - swap
    - end
    - StreamMap::end
    - std::vector<H2StreamContext*>*::size
    - erase
    - stream_id
    - begin
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    - StreamMap::begin
    linkageType: ''
    returnType: void
    signature: "void H2Context::RemoveGoAwayStreams(\n    int goaway_stream_id, std::vector<H2StreamContext*>*
      out_streams)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 416
    functionDepth: 0
    functionLinenumber: 416
    functionLinenumberEnd: 423
    functionName: brpc::policy::H2Context::FindStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 15
    functionsReached:
    - seek
    linkageType: ''
    returnType: H2StreamContext
    signature: H2StreamContext * H2Context::FindStream(int stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - stream_id
    - ctx
    argTypes:
    - int
    - H2StreamContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 436
    functionName: brpc::policy::H2Context::TryToInsertStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int H2Context::TryToInsertStream(int stream_id, H2StreamContext* ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:441,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:448,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:450,1
    - Dst: bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:452,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:453,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:456,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:457,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:458,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:460,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:461,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:463,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:464,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' it'
    - frame_head
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 465
    functionName: brpc::policy::H2Context::ConsumeFrameHead
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - copy_and_forward
    - LoadUint8
    - MakeParseError
    - MakeMessage
    - static_cast<int>
    - bytes_left
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::ConsumeFrameHead(\n    butil::IOBufBytesIterator&
      it, H2FrameHead* frame_head)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:470,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:473,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:474,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:475,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:478,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:484,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:487,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:492,1
    - Dst: brpc::policy::H2Context::ConsumeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:495,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:496,1
    - Dst: FindFrameHandler
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:501,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:502,1
    - Dst: H2ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:505,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:506,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:508,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:510,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:511,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:512,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:513,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:514,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:515,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: H2ParseResult::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:517,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:519,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:521,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:523,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:524,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:525,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:528,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:531,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:532,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: H2ParseResult::error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:533,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:535,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:536,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:538,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:541,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 60
    argCount: 2
    argNames:
    - ' it'
    - socket
    argTypes:
    - butil::IOBufBytesIterator
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 467
    functionDepth: 2
    functionLinenumber: 467
    functionLinenumberEnd: 543
    functionName: brpc::policy::H2Context::Consume
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - H2ParseResult::error
    - WriteAck
    - MakeParseError
    - brpc::policy::H2Context::ConsumeFrameHead
    - H2ParseResult::message
    - copy_and_forward
    - SaveUint32
    - MakeMessage
    - H2StreamContext*::header
    - LOG
    - ParseResult::is_ok
    - brpc::policy::H2Context::is_server_side
    - SerializeH2SettingsFrameAndWU
    - H2ErrorToStatusCode
    - SerializeFrameHead
    - H2ParseResult::stream_id
    - FindFrameHandler
    - H2ParseResult::is_ok
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult H2Context::Consume(\n    butil::IOBufBytesIterator& it,
      Socket* socket)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:551,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:558,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:559,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:564,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:568,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:569,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:573,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:574,1
    - Dst: brpc::policy::H2Context::is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:581,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:583,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:586,1
    - Dst: H2StreamContext*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:587,1
    - Dst: brpc::policy::H2Context::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:588,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:591,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:592,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:595,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:598,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:600,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:604,1
    - Dst: H2StreamContext::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:605,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:606,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:608,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:609,1
    - Dst: H2StreamContext*::OnHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:613,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 53
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 545
    functionDepth: 2
    functionLinenumber: 545
    functionLinenumberEnd: 614
    functionName: brpc::policy::H2Context::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnHeaders
    - LoadUint8
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::TryToInsertStream
    - H2StreamContext*::Init
    - brpc::policy::H2Context::FindStream
    - is_read_progressive
    - brpc::policy::H2Context::is_client_side
    - H2StreamContext::OnHeaders
    - MakeH2Message
    - MakeH2Error
    - H2StreamContext::H2StreamContext
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:621,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:624,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:625,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:627,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:629,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:630,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:631,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:632,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:633,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:635,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:638,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:640,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:643,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:645,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:651,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 616
    functionDepth: 2
    functionLinenumber: 616
    functionLinenumberEnd: 653
    functionName: brpc::policy::H2StreamContext::OnHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - forward
    - CHECK_EQ
    - MakeH2Error
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - brpc::policy::H2StreamContext::SetState
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnHeaders(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:657,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:659,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:663,1
    - Dst: H2StreamContext::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:664,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:665,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:667,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:668,1
    - Dst: H2StreamContext*::OnContinuation
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 672
    functionName: brpc::policy::H2Context::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Error
    - H2StreamContext::OnContinuation
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:677,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:678,1
    - Dst: brpc::policy::H2StreamContext::ConsumeHeaders
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:681,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:683,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:685,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:688,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:690,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:693,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:696,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 674
    functionDepth: 2
    functionLinenumber: 674
    functionLinenumberEnd: 697
    functionName: brpc::policy::H2StreamContext::OnContinuation
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - append_and_forward
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    - pop_front
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - size
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:708,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:718,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:719,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:720,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:725,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 726
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext::Init
    - H2StreamContext::OnData
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - LoadUint8
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - MakeH2Error
    - H2StreamContext*::OnData
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:732,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:733,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:734,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:735,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:744,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:747,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:756,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:762,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:766,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:767,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:768,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:771,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 728
    functionDepth: 2
    functionLinenumber: 728
    functionLinenumberEnd: 779
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block
    - WriteAck
    - brpc::policy::H2StreamContext::OnEndStream
    - OnBody
    - fetch_add
    - butil::StringPiece::data
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    - brpc::policy::H2StreamContext::stream_id
    - SaveUint32
    - local_settings
    - LOG
    - butil::StringPiece::size
    - SerializeFrameHead
    - MakeH2Error
    - append_and_forward
    - static_cast<int64_t>
    - VolatilePendingStreamSize
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - forward
    - exchange
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnData(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head,\n    uint32_t frag_size, uint8_t pad_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:784,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:787,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:788,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:791,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:793,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 794
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - MakeH2Message
    - MakeH2Error
    - static_cast<H2Error>
    - LOG
    - LoadUint32
    - H2StreamContext*::OnResetStream
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnResetStream(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:801,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:802,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:805,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:806,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:807,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:810,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:812,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:813,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:815,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:816,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 823
      start: 796
    functionDepth: 2
    functionLinenumber: 796
    functionLinenumberEnd: 823
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2ErrorToStatusCode
    - MakeH2Message
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - is_client_side
    - H2StreamContext*::header
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnResetStream(\n    H2Error h2_error,
      const H2FrameHead& frame_head)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:827,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:829,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:830,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:832,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:833,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:834,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:842,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:845,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 825
    functionDepth: 2
    functionLinenumber: 825
    functionLinenumberEnd: 846
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - MakeH2Message
    - CHECK_EQ
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - LOG
    - H2StreamState2Str
    - OnMessageComplete
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:856,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:857,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:861,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:866,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:878,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:879,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:882,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:888,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:893,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:901,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:902,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:903,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:904,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:912,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:913,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:915,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 916
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - WriteAck
    - static_cast<int64_t>
    - MakeH2Message
    - AddWindowSize
    - SerializeFrameHead
    - MakeH2Error
    - begin
    - LOG
    - fetch_sub
    - ParseH2Settings
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnSettings(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 918
    functionDepth: 1
    functionLinenumber: 918
    functionLinenumberEnd: 922
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPriority(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:926,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:927,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 924
    functionDepth: 1
    functionLinenumber: 924
    functionLinenumberEnd: 928
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeH2Error
    - LOG
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPushPromise(\n    butil::IOBufBytesIterator&,
      const H2FrameHead&)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:937,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:938,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:946,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:947,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:949,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:951,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 930
    functionDepth: 1
    functionLinenumber: 930
    functionLinenumberEnd: 952
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - WriteAck
    - copy_and_forward
    - SerializeFrameHead
    - MakeH2Error
    - LOG
    - MakeH2Message
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnPing(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ProcessHttpResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 954
    functionDepth: 12
    functionLinenumber: 954
    functionLinenumberEnd: 957
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - brpc::policy::ProcessHttpResponse
    linkageType: ''
    returnType: void
    signature: void * ProcessHttpResponseWrapper(void* void_arg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:966,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:967,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:971,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:975,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:976,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:979,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:981,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:984,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:986,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:992,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:998,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1004,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 959
    functionDepth: 4
    functionLinenumber: 959
    functionLinenumberEnd: 1006
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<InputMessageBase*>
    - forward
    - bthread_start_background
    - MakeH2Message
    - brpc::policy::H2Context::is_client_side
    - CHECK_EQ
    - MakeH2Error
    - std::vector::empty
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<int>
    - H2StreamContext*::header
    - static_cast<H2Error>
    - std::vector::size
    - SetLogOff
    - keytable_pool
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnGoAway(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& h)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1011,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1012,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1014,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1016,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1017,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1020,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1022,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1024,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1032,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1034,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1036,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1008
    functionDepth: 1
    functionLinenumber: 1008
    functionLinenumberEnd: 1038
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - MakeH2Message
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - MakeH2Error
    - LOG
    - LoadUint32
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnWindowUpdate(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: H2ConnectionState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1049,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1051,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1057,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1061,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1062,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1065,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1069
      start: 1040
    functionDepth: 1
    functionLinenumber: 1040
    functionLinenumberEnd: 1069
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - size
    linkageType: ''
    returnType: void
    signature: void H2Context::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1072,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1075,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1076
      start: 1071
    functionDepth: 0
    functionLinenumber: 1071
    functionLinenumberEnd: 1076
    functionName: brpc::policy::H2Context::ReleaseDeferredWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - exchange
    linkageType: ''
    returnType: int64_t
    signature: int64_t H2Context::ReleaseDeferredWindowUpdate()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1082,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1083,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1085,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1088,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1089,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1090,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1091,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1078
    functionDepth: 1
    functionLinenumber: 1078
    functionLinenumberEnd: 1095
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - WriteAck
    - fetch_add
    - SaveUint32
    - SerializeFrameHead
    - local_settings
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void H2Context::DeferWindowUpdate(int64_t size)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1108,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1111,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1113,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1114,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1118,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1128,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1134,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1138
      start: 1103
    functionDepth: 2
    functionLinenumber: 1103
    functionLinenumberEnd: 1138
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 14
    functionsReached:
    - butil::IOBuf*::empty
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::size
    - H2Context*::Consume
    - MakeParseError
    - Socket*::initialize_parsing_context
    - ParseResult::is_ok
    - H2Context*::ClearAbandonedStreams
    - Socket*::parsing_context
    - H2Context*::Init
    - ParseResult::message
    - CHECK_EQ
    - static_cast<const Server*>
    - static_cast<H2Context*>
    - butil::IOBuf*::pop_front
    - LOG
    - H2Context::H2Context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseH2Message(butil::IOBuf *source, Socket *socket,\n
      \                          bool read_eof, const void *arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1143
      start: 1140
    functionDepth: 0
    functionLinenumber: 1140
    functionLinenumberEnd: 1143
    functionName: brpc::policy::H2Context::AddAbandonedStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void H2Context::AddAbandonedStream(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1147,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1148,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1149,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1150,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1151,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1157
      start: 1145
    functionDepth: 2
    functionLinenumber: 1145
    functionLinenumberEnd: 1157
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - back
    - pop_back
    - std::unique_lock::lock
    - empty
    - std::unique_lock::unlock
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1181
      start: 1176
    functionDepth: 0
    functionLinenumber: 1176
    functionLinenumberEnd: 1181
    functionName: brpc::policy::H2StreamContext::Init
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - H2Context*::remote_settings
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::Init(H2Context* conn_ctx, int stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_h2_bvars
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1187
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1187
    functionName: H2StreamContext::~H2StreamContext()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - get_h2_bvars
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::~H2StreamContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1193,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1194,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1190
    functionDepth: 1
    functionLinenumber: 1190
    functionLinenumberEnd: 1196
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - brpc::policy::H2StreamContext::stream_id
    - H2StreamState2Str
    linkageType: ''
    returnType: void
    signature: void H2StreamContext::SetState(H2StreamState state)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1206,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1209,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1214,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1215,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1219
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1219
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - MinusWindowSize
    - load
    - fetch_add
    - LOG
    - fetch_sub
    linkageType: ''
    returnType: bool
    signature: bool H2StreamContext::ConsumeWindowSize(int64_t size)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1222,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1226,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1233,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1238,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1240,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1244,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1248,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1251,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1255,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1258,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1262,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1265,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1268,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1270,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1280,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1284,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1285,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1287,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1291,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1295,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1298,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1306
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1306
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - strtol
    - hpacker
    - uri
    - HPacker::Header::value::c_str
    - set_content_type
    - AppendHeader
    - header
    - set_method
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - HPacker::Header::name::c_str
    - LOG
    - set_status_code
    - Decode
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - is_server_side
    - strcmp
    - butil::my_ip
    - Str2HttpMethod
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: int H2StreamContext::ConsumeHeaders(butil::IOBufBytesIterator& it)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1316,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1319,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1320,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1325,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1326,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1327,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1330,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1331,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1332,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1338,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1342,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1343,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1350,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1364,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1371,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1376,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1377,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 53
    argCount: 6
    argNames:
    - out
    - ' headers'
    - ' trailer_headers'
    - ' data'
    - stream_id
    - conn_ctx
    argTypes:
    - butil::IOBuf*
    - butil::IOBuf
    - butil::IOBuf
    - butil::IOBuf
    - int
    - H2Context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1310
    functionDepth: 1
    functionLinenumber: 1310
    functionLinenumberEnd: 1380
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SaveUint32
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBuf*::append
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - empty
    - cutn
    - size
    - butil::IOBufBytesIterator::append_and_forward
    - brpc::policy::SerializeFrameHead
    linkageType: ''
    returnType: void
    signature: "void PackH2Message(butil::IOBuf* out,\n                          butil::IOBuf&
      headers,\n                          butil::IOBuf& trailer_headers,\n                          const
      butil::IOBuf& data,\n                          int stream_id,\n                          H2Context*
      conn_ctx)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1383,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1384,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1390,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1391,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1398,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1401,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1402,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1403,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1405,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1408,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1413,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1415,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1421,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1423,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1425,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1427,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1429,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1430,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1437,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1440,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1448,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1450,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1451,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1452,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1454,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1456
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1456
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 10
    functionsReached:
    - method
    - uri
    - H2StreamContext::H2StreamContext
    - butil::endpoint2str
    - HttpMethod2Str
    - butil::Base64Encode
    - port
    - Controller*::remote_side
    - butil::string_printf
    - std::string*::reserve
    - Controller*::http_request
    - H2UnsentRequest*::push
    - malloc
    - H2UnsentRequest*::_sctx::reset
    - get_common_strings
    - std::string*::append
    - GetHeader
    - HeaderCount
    - H2UnsentRequest::H2UnsentRequest
    - Controller*::is_ssl
    - content_type
    - empty
    - host
    - Controller*::is_response_read_progressively
    - std::string*::empty
    - std::string::size
    linkageType: ''
    returnType: H2UnsentRequest
    signature: H2UnsentRequest * H2UnsentRequest::New(Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1462,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1464
      start: 1458
    functionDepth: 0
    functionLinenumber: 1458
    functionLinenumberEnd: 1464
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - msg
    argTypes:
    - H2UnsentRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1467
    functionName: brpc::policy::RemoveRefOnQuit
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RemoveRefOnQuit(H2UnsentRequest* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1468,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1468
    functionName: ~RemoveRefOnQuit()
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void ~RemoveRefOnQuit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1480,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1484,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1485,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1474
    functionDepth: 0
    functionLinenumber: 1474
    functionLinenumberEnd: 1488
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - CHECK_EQ
    - H2Context*::AddAbandonedStream
    - static_cast<H2Context*>
    linkageType: ''
    returnType: void
    signature: "void H2UnsentRequest::DestroyStreamUserData(SocketUniquePtr& sending_sock,\n
      \                                           Controller* cntl,\n                                            int
      error_code,\n                                            bool /*end_of_rpc*/)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1503,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1505,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1509,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1510,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1511,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1513,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1515,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1523,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1525,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1529,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1530,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1537,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1540,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1547,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1550,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1552,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1553,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1554,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1555,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1565,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1567,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1569,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1581,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1582,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1584,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1586,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1589,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1496
    functionDepth: 2
    functionLinenumber: 1496
    functionLinenumberEnd: 1594
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::append
    - Init
    - H2Context*::VolatilePendingStreamSize
    - stream_id
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context*::AllocateClientStreamId
    - Socket*::parsing_context
    - butil::IOBufAppender::IOBufAppender
    - get
    - PackH2Message
    - H2Context::H2Context
    - BuiltinServiceTest::TestStatus
    - request_attachment
    - SerializeH2SettingsFrameAndWU
    - H2Context*::Init
    - CHECK
    - release
    - Encode
    - HeaderEnd
    - Socket*::initialize_parsing_context
    - has_http_request
    - ConsumeWindowSize
    - H2Context*::remote_settings
    - H2Context*::hpacker
    - Socket*::CreatedByConnect
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentRequest::AppendAndDestroySelf(butil::IOBuf* out,
      Socket* socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1605,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1606,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1607,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1609,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1612,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1596
    functionDepth: 0
    functionLinenumber: 1596
    functionLinenumberEnd: 1614
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - request_attachment
    - name::size
    - HeaderEnd
    - value::size
    - has_http_request
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentRequest::EstimatedByteSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1625,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1626,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1627,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1628,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1632,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1633,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1638
      start: 1616
    functionDepth: 1
    functionLinenumber: 1616
    functionLinenumberEnd: 1638
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - HeaderBegin
    - butil::IOBuf*::empty
    - request_attachment
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - HeaderEnd
    - has_http_request
    linkageType: ''
    returnType: void
    signature: void H2UnsentRequest::Print(std::ostream& os) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::release_http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1643,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1647,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1650
      start: 1640
    functionDepth: 1
    functionLinenumber: 1640
    functionLinenumberEnd: 1650
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - swap
    - PercentEncode
    - Controller*::ErrorCode
    - Controller*::response_attachment
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorText
    - Controller*::release_http_response
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::H2UnsentResponse(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1653,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1655,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1660,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1662,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1665,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1666,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1652
    functionDepth: 1
    functionLinenumber: 1652
    functionLinenumberEnd: 1672
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - H2UnsentResponse*::push
    - butil::string_printf
    - HttpHeader*::content_type
    - Controller*::http_response
    - H2UnsentResponse::H2UnsentResponse
    - malloc
    - get_common_strings
    - HttpHeader*::status_code
    linkageType: ''
    returnType: H2UnsentResponse
    signature: H2UnsentResponse * H2UnsentResponse::New(Controller* c, int stream_id,
      bool is_grpc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~Header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1676,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1679,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1680
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1680
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - free
    - ~Header
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1695,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1697,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1708,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1709,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1710,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1711,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1714,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1727,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1730,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1734,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1740,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1741,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1750
      start: 1688
    functionDepth: 1
    functionLinenumber: 1688
    functionLinenumberEnd: 1750
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::IOBuf*::append
    - static_cast<H2Context*>
    - butil::IOBuf::IOBuf
    - butil::Status::OK
    - butil::IOBufAppender::move_to
    - butil::IOBufAppender::IOBufAppender
    - Socket*::parsing_context
    - SaveUint32
    - size
    - PackH2Message
    - butil::string_printf
    - MinusWindowSize
    - SerializeFrameHead
    - Encode
    - HeaderEnd
    - H2Context*::hpacker
    - H2Context*::remote_settings
    - empty
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status H2UnsentResponse::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1755,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1759,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1760,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1763,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1752
    functionDepth: 0
    functionLinenumber: 1752
    functionLinenumberEnd: 1765
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - HttpHeader::HeaderIterator::first::size
    - size
    - name::size
    - HeaderEnd
    - value::size
    linkageType: ''
    returnType: size_t
    signature: size_t H2UnsentResponse::EstimatedByteSize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1773,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1774,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1778,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1781,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1782
      start: 1767
    functionDepth: 1
    functionLinenumber: 1767
    functionLinenumberEnd: 1782
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - butil::my_ip
    - empty
    - HeaderEnd
    linkageType: ''
    returnType: void
    signature: void H2UnsentResponse::Print(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1793,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1794,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1796,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1797,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1799,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1804,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1809,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 4
    argNames:
    - user_message
    - correlation_id
    - cntl
    - auth
    argTypes:
    - SocketMessage**
    - uint64_t
    - Controller*
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1811
      start: 1784
    functionDepth: 1
    functionLinenumber: 1784
    functionLinenumberEnd: 1811
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::GetHeader
    - ControllerPrivateAccessor::get_stream_user_data
    - HttpHeader*::SetHeader
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - H2UnsentRequest*::_sctx::set_correlation_id
    - dynamic_cast<H2UnsentRequest*>
    - LOG
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PackH2Request(butil::IOBuf*,\n                   SocketMessage**
      user_message,\n                   uint64_t correlation_id,\n                   const
      google::protobuf::MethodDescriptor*,\n                   Controller* cntl,\n
      \                  const butil::IOBuf&,\n                   const Authenticator*
      auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1815,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1816
      start: 1813
    functionDepth: 0
    functionLinenumber: 1813
    functionLinenumberEnd: 1816
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::parsing_context
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1820,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1821,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1825,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1827,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1831
      start: 1818
    functionDepth: 0
    functionLinenumber: 1818
    functionLinenumberEnd: 1831
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - GetAgentSocket
    - Controller*::SetFailed
    - brpc::policy::H2UnsentRequest::New
    linkageType: ''
    returnType: StreamUserData
    signature: "StreamUserData * H2GlobalStreamCreator::OnCreatingStream(\n        SocketUniquePtr*
      inout, Controller* cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1836
      start: 1833
    functionDepth: 0
    functionLinenumber: 1833
    functionLinenumberEnd: 1836
    functionName: brpc::policy::H2GlobalStreamCreator::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void H2GlobalStreamCreator::DestroyStreamCreator(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<H2GlobalStreamCreator>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1839,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1838
    functionDepth: 0
    functionLinenumber: 1838
    functionLinenumberEnd: 1840
    functionName: brpc::policy::get_h2_global_stream_creator
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton<H2GlobalStreamCreator>
    linkageType: ''
    returnType: StreamCreator
    signature: StreamCreator * get_h2_global_stream_creator()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:29,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:33,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:38,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:39,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:45,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:46,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 28
    functionDepth: 2
    functionLinenumber: 28
    functionLinenumberEnd: 49
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 5
    functionsReached:
    - brpc::policy::SnappyCompress
    - butil::IOBuf::size
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:52,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:61,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:66,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:67,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 4
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - size
    - butil::IOBuf::IOBuf
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 5
    functionsReached:
    - butil::snappy::Compress
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Uncompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 4
    functionsReached:
    - butil::snappy::Uncompress
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:29,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:33,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:38,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:39,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:45,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:46,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 28
    functionDepth: 2
    functionLinenumber: 28
    functionLinenumberEnd: 49
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::SnappyCompress
    - butil::IOBuf::size
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:52,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:61,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:66,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:67,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 5
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - size
    - butil::IOBuf::IOBuf
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 6
    functionsReached:
    - butil::snappy::Compress
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Uncompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 5
    functionsReached:
    - butil::snappy::Uncompress
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:29,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:33,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:38,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:39,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:45,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:46,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 28
    functionDepth: 2
    functionLinenumber: 28
    functionLinenumberEnd: 49
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 7
    functionsReached:
    - brpc::policy::SnappyCompress
    - butil::IOBuf::size
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:52,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:61,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:66,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:67,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 6
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - size
    - butil::IOBuf::IOBuf
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 7
    functionsReached:
    - butil::snappy::Compress
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Uncompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 6
    functionsReached:
    - butil::snappy::Uncompress
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:29,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:32,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:33,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:38,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:39,1
    - Dst: brpc::policy::SnappyCompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:45,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:46,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' msg'
    - buf
    argTypes:
    - google::protobuf::Message
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 28
    functionDepth: 2
    functionLinenumber: 28
    functionLinenumberEnd: 49
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::SnappyCompress
    - butil::IOBuf::size
    - GetDescriptor
    - SerializeTo
    - SerializeToZeroCopyStream
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const google::protobuf::Message& msg, butil::IOBuf*
      buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:52,1
    - Dst: brpc::policy::SnappyDecompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:54,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:60,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:61,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:66,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:67,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' data'
    - msg
    argTypes:
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 2
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 7
    functionsReached:
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::GetDescriptor
    - pbrpcframework::get_prototype_by_method_descriptor
    - size
    - butil::IOBuf::IOBuf
    - LOG
    - DeserializeFrom
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& data, google::protobuf::Message*
      msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Compress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: brpc::policy::SnappyCompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 8
    functionsReached:
    - butil::snappy::Compress
    linkageType: ''
    returnType: bool
    signature: bool SnappyCompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::snappy::Uncompress
      Src: /src/brpc/src/brpc/policy/snappy_compress.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - butil::IOBuf
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: brpc::policy::SnappyDecompress
    functionSourceFile: /src/brpc/src/brpc/policy/snappy_compress.cpp
    functionUses: 7
    functionsReached:
    - butil::snappy::Uncompress
    linkageType: ''
    returnType: bool
    signature: bool SnappyDecompress(const butil::IOBuf& in, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:35,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:40,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - static_cast<const char*>
    - butil::HostToNet32
    - butil::crc32c::Mask
    - ControllerPrivateAccessor
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:51,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - butil::NetToHost32
    - reinterpret_cast<const uint32_t*>
    - static_cast<const char*>
    - ControllerPrivateAccessor
    - CHECK_EQ
    - data
    - butil::IOBufAsZeroCopyInputStream::Next
    - size
    - const_cast<Controller*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: bool
    signature: bool Crc32cVerify(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:35,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:40,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - static_cast<const char*>
    - butil::HostToNet32
    - butil::crc32c::Mask
    - ControllerPrivateAccessor
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:51,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - butil::NetToHost32
    - reinterpret_cast<const uint32_t*>
    - static_cast<const char*>
    - ControllerPrivateAccessor
    - CHECK_EQ
    - data
    - butil::IOBufAsZeroCopyInputStream::Next
    - size
    - const_cast<Controller*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: bool
    signature: bool Crc32cVerify(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:35,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:40,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - static_cast<const char*>
    - butil::HostToNet32
    - butil::crc32c::Mask
    - ControllerPrivateAccessor
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:51,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - butil::NetToHost32
    - reinterpret_cast<const uint32_t*>
    - static_cast<const char*>
    - ControllerPrivateAccessor
    - CHECK_EQ
    - data
    - butil::IOBufAsZeroCopyInputStream::Next
    - size
    - const_cast<Controller*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: bool
    signature: bool Crc32cVerify(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:35,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:36,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:39,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:40,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<char*>
    - static_cast<const char*>
    - butil::HostToNet32
    - butil::crc32c::Mask
    - ControllerPrivateAccessor
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::crc32c::Extend
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:51,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:52,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:54,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:57,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - butil::crc32c::Unmask
    - butil::NetToHost32
    - reinterpret_cast<const uint32_t*>
    - static_cast<const char*>
    - ControllerPrivateAccessor
    - CHECK_EQ
    - data
    - butil::IOBufAsZeroCopyInputStream::Next
    - size
    - const_cast<Controller*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: bool
    signature: bool Crc32cVerify(const ChecksumIn& in)
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:51,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:63,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:66,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:67,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:74,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:84,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:85,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:90,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:93,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:98,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:107,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:108,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:111,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:117,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:118,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:122,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:125,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:126,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:127,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:131,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:136,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:137,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:141,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:145,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:150,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:151,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:154,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:155,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:163,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:165,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 167
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::unbox
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - mcpack2pb::is_integral
    - std::string::append
    - size
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::as_string
    - const_cast<butil::IOBuf&>
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::field_count
    - body::size
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - NsheadMeta*::set_correlation_id
    - std::string::reserve
    - NsheadMeta*::set_full_method_name
    - std::string::empty
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - std::string::size
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseNsheadMeta(\n    const Server&, const NsheadMessage&
      request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:172,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:176,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - body::size
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - Controller*::SetFailed
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:190,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:192,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:193,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:196,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:202,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::begin_object
    - Controller*::ErrorCode
    - mcpack2pb::Serializer::end_array
    - Controller*::ErrorText
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::add_int64
    - correlation_id
    - mcpack2pb::Serializer::begin_mcpack_array
    linkageType: ''
    returnType: void
    signature: "void AppendError(const NsheadMeta& meta,\n                        Controller*
      cntl, butil::IOBuf& buf)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:213,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:217,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:230,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:231,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:234,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:241,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:244,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:247,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:254,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:257,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:258,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:262,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:264,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:265,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:268,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 274
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - google::protobuf::Message*::GetDescriptor
    - correlation_id
    - Controller*::SetFailed
    - AppendError
    - Controller*::idl_names
    - mcpack2pb::Serializer::add_int64
    - LOG
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - Controller*::Failed
    - Controller*::idl_result
    - mcpack2pb::MessageHandler::serialize_body
    - Controller*::response_compress_type
    - c_str
    - NsheadMessage*::body::clear
    - mcpack2pb::Serializer::good
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&
      meta, Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:282,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:283,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:286,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:303,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:306,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:307,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:313,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:323,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:333,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:348,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:349,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:355,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:359,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:363,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:364,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:381,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:387,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:388,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:390,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:401,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:406,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:407,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:411,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:417,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:422,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:423,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:425,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:426,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:434,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 117
    argCount: 3
    argNames:
    - cntl
    - ' buf'
    - res
    argTypes:
    - Controller*
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 276
    functionDepth: 2
    functionLinenumber: 276
    functionLinenumberEnd: 438
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - mcpack2pb::unbox
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - std::string::c_str
    - mcpack2pb::is_integral
    - Controller*::idl_names
    - size
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - c_str
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void ParseResponse(Controller* cntl, butil::IOBuf& buf,\n                          google::protobuf::Message*
      res)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:441,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:443,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:451,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:456,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:463,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:468,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 440
    functionDepth: 3
    functionLinenumber: 440
    functionLinenumberEnd: 470
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - brpc::policy::ParseResponse
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessUbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:475,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:477,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:480,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:483,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:486,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:493,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:495,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:500,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:509,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:513,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:515,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:517,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:520,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 4
    argNames:
    - buf
    - cntl
    - request
    - format
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 472
    functionDepth: 2
    functionLinenumber: 472
    functionLinenumberEnd: 526
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::add_bool
    - Controller*::SetFailed
    - Controller*::method
    - Controller*::idl_names
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::add_int64
    - Controller*::connection_type
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - mcpack2pb::MessageHandler::serialize_body
    - c_str
    - Controller*::call_id
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request,\n
      \                                 mcpack2pb::SerializationFormat format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 528
    functionDepth: 3
    functionLinenumber: 528
    functionLinenumberEnd: 531
    functionName: brpc::policy::SerializeUbrpcCompackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcCompackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 533
    functionDepth: 3
    functionLinenumber: 533
    functionLinenumberEnd: 536
    functionName: brpc::policy::SerializeUbrpcMcpack2Request
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcMcpack2Request(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:552,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:555,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:558,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:560,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:568,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 538
    functionDepth: 1
    functionLinenumber: 538
    functionLinenumberEnd: 569
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackUbrpcRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t correlation_id,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* controller,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* /*not supported*/)"
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:51,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:63,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:66,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:67,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:74,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:84,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:85,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:90,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:93,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:98,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:107,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:108,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:111,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:117,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:118,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:122,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:125,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:126,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:127,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:131,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:136,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:137,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:141,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:145,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:150,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:151,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:154,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:155,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:163,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:165,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 167
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::unbox
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - mcpack2pb::is_integral
    - std::string::append
    - size
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::as_string
    - const_cast<butil::IOBuf&>
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::field_count
    - body::size
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - NsheadMeta*::set_correlation_id
    - std::string::reserve
    - NsheadMeta*::set_full_method_name
    - std::string::empty
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - std::string::size
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseNsheadMeta(\n    const Server&, const NsheadMessage&
      request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:172,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:176,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - body::size
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - Controller*::SetFailed
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:190,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:192,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:193,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:196,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:202,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::begin_object
    - Controller*::ErrorCode
    - mcpack2pb::Serializer::end_array
    - Controller*::ErrorText
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::add_int64
    - correlation_id
    - mcpack2pb::Serializer::begin_mcpack_array
    linkageType: ''
    returnType: void
    signature: "void AppendError(const NsheadMeta& meta,\n                        Controller*
      cntl, butil::IOBuf& buf)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:213,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:217,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:230,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:231,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:234,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:241,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:244,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:247,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:254,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:257,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:258,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:262,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:264,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:265,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:268,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 274
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - google::protobuf::Message*::GetDescriptor
    - correlation_id
    - Controller*::SetFailed
    - AppendError
    - Controller*::idl_names
    - mcpack2pb::Serializer::add_int64
    - LOG
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - Controller*::Failed
    - Controller*::idl_result
    - mcpack2pb::MessageHandler::serialize_body
    - Controller*::response_compress_type
    - c_str
    - NsheadMessage*::body::clear
    - mcpack2pb::Serializer::good
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&
      meta, Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:282,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:283,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:286,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:303,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:306,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:307,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:313,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:323,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:333,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:348,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:349,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:355,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:359,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:363,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:364,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:381,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:387,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:388,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:390,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:401,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:406,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:407,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:411,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:417,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:422,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:423,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:425,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:426,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:434,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 117
    argCount: 3
    argNames:
    - cntl
    - ' buf'
    - res
    argTypes:
    - Controller*
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 276
    functionDepth: 2
    functionLinenumber: 276
    functionLinenumberEnd: 438
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - mcpack2pb::unbox
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - std::string::c_str
    - mcpack2pb::is_integral
    - Controller*::idl_names
    - size
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - c_str
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void ParseResponse(Controller* cntl, butil::IOBuf& buf,\n                          google::protobuf::Message*
      res)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:441,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:443,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:451,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:456,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:463,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:468,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 440
    functionDepth: 3
    functionLinenumber: 440
    functionLinenumberEnd: 470
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - brpc::policy::ParseResponse
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessUbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:475,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:477,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:480,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:483,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:486,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:493,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:495,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:500,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:509,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:513,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:515,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:517,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:520,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 4
    argNames:
    - buf
    - cntl
    - request
    - format
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 472
    functionDepth: 2
    functionLinenumber: 472
    functionLinenumberEnd: 526
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::add_bool
    - Controller*::SetFailed
    - Controller*::method
    - Controller*::idl_names
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::add_int64
    - Controller*::connection_type
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - mcpack2pb::MessageHandler::serialize_body
    - c_str
    - Controller*::call_id
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request,\n
      \                                 mcpack2pb::SerializationFormat format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 528
    functionDepth: 3
    functionLinenumber: 528
    functionLinenumberEnd: 531
    functionName: brpc::policy::SerializeUbrpcCompackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcCompackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 533
    functionDepth: 3
    functionLinenumber: 533
    functionLinenumberEnd: 536
    functionName: brpc::policy::SerializeUbrpcMcpack2Request
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcMcpack2Request(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:552,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:555,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:558,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:560,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:568,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 538
    functionDepth: 1
    functionLinenumber: 538
    functionLinenumberEnd: 569
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackUbrpcRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t correlation_id,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* controller,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* /*not supported*/)"
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:51,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:63,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:66,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:67,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:74,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:84,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:85,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:90,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:93,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:98,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:107,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:108,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:111,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:117,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:118,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:122,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:125,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:126,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:127,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:131,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:136,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:137,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:141,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:145,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:150,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:151,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:154,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:155,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:163,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:165,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 167
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::unbox
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - mcpack2pb::is_integral
    - std::string::append
    - size
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::as_string
    - const_cast<butil::IOBuf&>
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::field_count
    - body::size
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - NsheadMeta*::set_correlation_id
    - std::string::reserve
    - NsheadMeta*::set_full_method_name
    - std::string::empty
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - std::string::size
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseNsheadMeta(\n    const Server&, const NsheadMessage&
      request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:172,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:176,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - body::size
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - Controller*::SetFailed
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:190,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:192,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:193,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:196,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:202,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::begin_object
    - Controller*::ErrorCode
    - mcpack2pb::Serializer::end_array
    - Controller*::ErrorText
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::add_int64
    - correlation_id
    - mcpack2pb::Serializer::begin_mcpack_array
    linkageType: ''
    returnType: void
    signature: "void AppendError(const NsheadMeta& meta,\n                        Controller*
      cntl, butil::IOBuf& buf)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:213,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:217,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:230,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:231,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:234,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:241,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:244,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:247,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:254,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:257,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:258,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:262,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:264,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:265,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:268,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 274
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - google::protobuf::Message*::GetDescriptor
    - correlation_id
    - Controller*::SetFailed
    - AppendError
    - Controller*::idl_names
    - mcpack2pb::Serializer::add_int64
    - LOG
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - Controller*::Failed
    - Controller*::idl_result
    - mcpack2pb::MessageHandler::serialize_body
    - Controller*::response_compress_type
    - c_str
    - NsheadMessage*::body::clear
    - mcpack2pb::Serializer::good
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&
      meta, Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:282,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:283,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:286,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:303,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:306,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:307,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:313,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:323,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:333,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:348,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:349,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:355,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:359,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:363,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:364,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:381,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:387,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:388,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:390,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:401,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:406,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:407,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:411,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:417,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:422,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:423,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:425,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:426,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:434,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 117
    argCount: 3
    argNames:
    - cntl
    - ' buf'
    - res
    argTypes:
    - Controller*
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 276
    functionDepth: 2
    functionLinenumber: 276
    functionLinenumberEnd: 438
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - mcpack2pb::unbox
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - std::string::c_str
    - mcpack2pb::is_integral
    - Controller*::idl_names
    - size
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - c_str
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void ParseResponse(Controller* cntl, butil::IOBuf& buf,\n                          google::protobuf::Message*
      res)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:441,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:443,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:451,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:456,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:463,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:468,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 440
    functionDepth: 3
    functionLinenumber: 440
    functionLinenumberEnd: 470
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - brpc::policy::ParseResponse
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessUbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:475,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:477,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:480,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:483,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:486,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:493,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:495,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:500,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:509,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:513,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:515,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:517,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:520,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 4
    argNames:
    - buf
    - cntl
    - request
    - format
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 472
    functionDepth: 2
    functionLinenumber: 472
    functionLinenumberEnd: 526
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 4
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::add_bool
    - Controller*::SetFailed
    - Controller*::method
    - Controller*::idl_names
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::add_int64
    - Controller*::connection_type
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - mcpack2pb::MessageHandler::serialize_body
    - c_str
    - Controller*::call_id
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request,\n
      \                                 mcpack2pb::SerializationFormat format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 528
    functionDepth: 3
    functionLinenumber: 528
    functionLinenumberEnd: 531
    functionName: brpc::policy::SerializeUbrpcCompackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcCompackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 533
    functionDepth: 3
    functionLinenumber: 533
    functionLinenumberEnd: 536
    functionName: brpc::policy::SerializeUbrpcMcpack2Request
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcMcpack2Request(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:552,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:555,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:558,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:560,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:568,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 538
    functionDepth: 1
    functionLinenumber: 538
    functionLinenumberEnd: 569
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackUbrpcRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t correlation_id,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* controller,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* /*not supported*/)"
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:51,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:54,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:63,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:66,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:67,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:68,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:74,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:84,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:85,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:90,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:93,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:98,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:101,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:107,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:108,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:111,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:117,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:118,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:119,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:122,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:125,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:126,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:127,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:131,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:132,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:136,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:137,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:141,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:145,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:150,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:151,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:154,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:155,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:159,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:162,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:163,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:165,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 167
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::unbox
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - mcpack2pb::is_integral
    - std::string::append
    - size
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::as_string
    - const_cast<butil::IOBuf&>
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::field_count
    - body::size
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - NsheadMeta*::set_correlation_id
    - std::string::reserve
    - NsheadMeta*::set_full_method_name
    - std::string::empty
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - std::string::size
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseNsheadMeta(\n    const Server&, const NsheadMessage&
      request, Controller* cntl,\n    NsheadMeta* out_meta) const"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:172,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:176,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:179,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' raw_req'
    - cntl
    - pb_req
    argTypes:
    - NsheadMessage
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 183
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - body::size
    - google::protobuf::Message*::GetDescriptor
    - c_str
    - Controller*::SetFailed
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::ParseRequestFromIOBuf(\n    const NsheadMeta&,
      const NsheadMessage& raw_req,\n    Controller* cntl, google::protobuf::Message*
      pb_req) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:190,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:192,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:193,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:196,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:202,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::begin_object
    - Controller*::ErrorCode
    - mcpack2pb::Serializer::end_array
    - Controller*::ErrorText
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::add_int64
    - correlation_id
    - mcpack2pb::Serializer::begin_mcpack_array
    linkageType: ''
    returnType: void
    signature: "void AppendError(const NsheadMeta& meta,\n                        Controller*
      cntl, butil::IOBuf& buf)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:213,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:217,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:230,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:231,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:234,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:241,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:244,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:247,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:251,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:254,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:257,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:258,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:262,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:264,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:265,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:268,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 4
    argNames:
    - ' meta'
    - cntl
    - pb_res
    - raw_res
    argTypes:
    - NsheadMeta
    - Controller*
    - google::protobuf::Message*
    - NsheadMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 274
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::find_message_handler
    - google::protobuf::Message*::GetDescriptor
    - correlation_id
    - Controller*::SetFailed
    - AppendError
    - Controller*::idl_names
    - mcpack2pb::Serializer::add_int64
    - LOG
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - Controller*::Failed
    - Controller*::idl_result
    - mcpack2pb::MessageHandler::serialize_body
    - Controller*::response_compress_type
    - c_str
    - NsheadMessage*::body::clear
    - mcpack2pb::Serializer::good
    linkageType: ''
    returnType: void
    signature: "void UbrpcAdaptor::SerializeResponseToIOBuf(\n    const NsheadMeta&
      meta, Controller* cntl,\n    const google::protobuf::Message* pb_res, NsheadMessage*
      raw_res) const"
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:282,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:283,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:286,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:290,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:294,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:303,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:306,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:307,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:308,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:313,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:323,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:332,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:333,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:338,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:348,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:349,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:352,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:355,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:359,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:363,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:364,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:368,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:371,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:372,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:378,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:381,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:387,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:388,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:389,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:390,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:401,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:406,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:407,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:411,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:412,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:417,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:422,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:423,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:425,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:426,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:430,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:433,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:434,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 117
    argCount: 3
    argNames:
    - cntl
    - ' buf'
    - res
    argTypes:
    - Controller*
    - butil::IOBuf
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 276
    functionDepth: 2
    functionLinenumber: 276
    functionLinenumberEnd: 438
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 3
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - mcpack2pb::unbox
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::type2str
    - mcpack2pb::InputStream::popped_bytes
    - Controller*::SetFailed
    - std::string::c_str
    - mcpack2pb::is_integral
    - Controller*::idl_names
    - size
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::is_primitive
    - pop_back
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - c_str
    - pop_front
    - mcpack2pb::ObjectIterator::value::type
    - mcpack2pb::InputStream::popn
    - mcpack2pb::MessageHandler::parse_body
    linkageType: ''
    returnType: void
    signature: "void ParseResponse(Controller* cntl, butil::IOBuf& buf,\n                          google::protobuf::Message*
      res)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:441,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:443,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:446,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:451,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:456,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:463,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:468,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 440
    functionDepth: 3
    functionLinenumber: 440
    functionLinenumberEnd: 470
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - DestroyingPtr::received_us
    - DestroyingPtr::payload::size
    - butil::cpuwide_time_us
    - DestroyingPtr::socket
    - Span*::set_response_size
    - static_cast<uint64_t>
    - Controller*::response
    - LOG_IF
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - brpc::policy::ParseResponse
    - DestroyingPtr::reset
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::base_real_us
    - Span*::set_base_real_us
    - Socket*::correlation_id
    - Span*::set_start_parse_us
    - DestroyingPtr::meta::size
    linkageType: ''
    returnType: void
    signature: void ProcessUbrpcResponse(InputMessageBase* msg_base)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:475,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:477,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:480,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:483,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:486,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:493,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:495,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:500,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:503,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:509,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:513,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:515,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:517,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:520,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 4
    argNames:
    - buf
    - cntl
    - request
    - format
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    - mcpack2pb::SerializationFormat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 472
    functionDepth: 2
    functionLinenumber: 472
    functionLinenumberEnd: 526
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 6
    functionsReached:
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::add_bool
    - Controller*::SetFailed
    - Controller*::method
    - Controller*::idl_names
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::add_int64
    - Controller*::connection_type
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::OutputStream::done
    - mcpack2pb::MessageHandler::serialize_body
    - c_str
    - Controller*::call_id
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request,\n
      \                                 mcpack2pb::SerializationFormat format)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:530,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 528
    functionDepth: 3
    functionLinenumber: 528
    functionLinenumberEnd: 531
    functionName: brpc::policy::SerializeUbrpcCompackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcCompackRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeUbrpcRequest
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:535,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 533
    functionDepth: 3
    functionLinenumber: 533
    functionLinenumberEnd: 536
    functionName: brpc::policy::SerializeUbrpcMcpack2Request
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeUbrpcRequest
    linkageType: ''
    returnType: void
    signature: "void SerializeUbrpcMcpack2Request(butil::IOBuf* buf, Controller* cntl,\n
      \                                 const google::protobuf::Message* request)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:546,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:552,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:555,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:558,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:560,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:568,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - correlation_id
    - controller
    - ' request'
    argTypes:
    - butil::IOBuf*
    - uint64_t
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 538
    functionDepth: 1
    functionLinenumber: 538
    functionLinenumberEnd: 569
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - size
    - memset
    - Controller*::connection_type
    - Controller*::SetFailed
    - Controller*::log_id
    linkageType: ''
    returnType: void
    signature: "void PackUbrpcRequest(butil::IOBuf* buf,\n                      SocketMessage**,\n
      \                     uint64_t correlation_id,\n                      const
      google::protobuf::MethodDescriptor*,\n                      Controller* controller,\n
      \                     const butil::IOBuf& request,\n                      const
      Authenticator* /*not supported*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:41,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:42,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:45,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:47,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:48,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:49,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:50,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:51,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: brpc::policy::CouchbaseAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - butil::HostToNet32
    - length
    - std::string*::append
    - butil::HostToNet16
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int CouchbaseAuthenticator::GenerateCredential(std::string* auth_str)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:41,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:42,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:45,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:47,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:48,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:49,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:50,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:51,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: brpc::policy::CouchbaseAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - butil::HostToNet32
    - length
    - std::string*::append
    - butil::HostToNet16
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int CouchbaseAuthenticator::GenerateCredential(std::string* auth_str)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:41,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:42,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:45,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:47,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:48,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:49,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:50,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:51,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: brpc::policy::CouchbaseAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - butil::HostToNet32
    - length
    - std::string*::append
    - butil::HostToNet16
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int CouchbaseAuthenticator::GenerateCredential(std::string* auth_str)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:41,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:42,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:43,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:45,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:46,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:47,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:48,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:49,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:50,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:51,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: brpc::policy::CouchbaseAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - butil::HostToNet32
    - length
    - std::string*::append
    - butil::HostToNet16
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int CouchbaseAuthenticator::GenerateCredential(std::string* auth_str)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:50,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: brpc::policy::NacosNamingService::Connect
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - Init
    - LOG
    - c_str
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::Connect()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:60,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:61,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:62,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:64,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:65,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:66,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:67,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:68,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:70,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:72,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:84,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:89,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:93,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:98,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 1
    argNames:
    - service_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 106
    functionName: brpc::policy::NacosNamingService::RefreshAccessToken
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - Controller::request_attachment
    - auto::append
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::Failed
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - time
    - LOG
    - CallMethod
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::RefreshAccessToken(const char *service_name)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:114,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:122,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:123,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:125,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:126,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:130,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:131,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:138,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:142,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:147,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:149,1
    - Dst: auto::IsArray
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:155,1
    - Dst: auto::Begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::End
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:163,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:167,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:169,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:174,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:176,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:181,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:189,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:197,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:199,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:205,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: auto::value::IsNumber
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: static_cast<long>
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: auto::value::GetDouble
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:211,1
    - Dst: std::vector<ServerNode>*::reserve
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::set::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::vector<ServerNode>*::assign
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: auto::Size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:218,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:223,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:224,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:227,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::IsInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::GetInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:229,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 77
    argCount: 3
    argNames:
    - service_name
    - token_changed
    - nodes
    argTypes:
    - char*
    - bool
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 233
    functionName: brpc::policy::NacosNamingService::GetServerNodes
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - std::set::size
    - Controller::response_attachment
    - auto::GetUint
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::GetInt
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::IsArray
    - Controller::http_response
    - auto::End
    - std::set::end
    - static_cast<long>
    - Controller::Failed
    - auto::value::GetBool
    - std::to_string
    - LOG
    - auto::value::IsInt
    - std::set::begin
    - std::vector<ServerNode>*::size
    - auto::FindMember
    - auto::GetString
    - auto::MemberEnd
    - auto::value::IsInt64
    - std::vector<ServerNode>*::assign
    - auto::Size
    - auto::Begin
    - auto::value::IsBool
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::vector<ServerNode>*::reserve
    - auto::value::GetDouble
    - std::set::insert
    - auto::value::GetInt64
    - Controller::http_request
    - auto::value::IsNumber
    - std::vector<ServerNode>*::empty
    - empty
    - str2endpoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::IsObject
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServerNodes(const char *service_name,\n
      \                                      bool token_changed,\n                                       std::vector<ServerNode>
      *nodes)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 236
    functionName: brpc::policy::NacosNamingService::NacosNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::NacosNamingService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 243
    functionName: brpc::policy::NacosNamingService::GetNamingServiceAccessIntervalMs
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::GetNamingServiceAccessIntervalMs() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::NacosNamingService::Connect
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:248,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:259,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:260,1
    - Dst: brpc::policy::NacosNamingService::RefreshAccessToken
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:264,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:272,1
    - Dst: brpc::policy::NacosNamingService::GetServerNodes
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:273,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 245
    functionDepth: 2
    functionLinenumber: 245
    functionLinenumberEnd: 274
    functionName: brpc::policy::NacosNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::NacosNamingService::GetServerNodes
    - std::vector<ServerNode>*::clear
    - empty
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - time
    - brpc::policy::NacosNamingService::Connect
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>
      *servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: brpc::policy::NacosNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void NacosNamingService::Describe(std::ostream &os,\n                                  const
      DescribeOptions &) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NacosNamingService::NacosNamingService
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: brpc::policy::NacosNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - NacosNamingService::NacosNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService *NacosNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 286
    functionName: brpc::policy::NacosNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:50,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: brpc::policy::NacosNamingService::Connect
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 1
    functionsReached:
    - Init
    - LOG
    - c_str
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::Connect()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:60,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:61,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:62,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:64,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:65,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:66,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:67,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:68,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:70,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:72,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:84,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:89,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:93,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:98,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 1
    argNames:
    - service_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 106
    functionName: brpc::policy::NacosNamingService::RefreshAccessToken
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 1
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - Controller::request_attachment
    - auto::append
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::Failed
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - time
    - LOG
    - CallMethod
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::RefreshAccessToken(const char *service_name)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:114,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:122,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:123,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:125,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:126,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:130,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:131,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:138,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:142,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:147,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:149,1
    - Dst: auto::IsArray
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:155,1
    - Dst: auto::Begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::End
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:163,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:167,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:169,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:174,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:176,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:181,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:189,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:197,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:199,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:205,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: auto::value::IsNumber
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: static_cast<long>
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: auto::value::GetDouble
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:211,1
    - Dst: std::vector<ServerNode>*::reserve
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::set::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::vector<ServerNode>*::assign
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: auto::Size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:218,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:223,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:224,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:227,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::IsInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::GetInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:229,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 77
    argCount: 3
    argNames:
    - service_name
    - token_changed
    - nodes
    argTypes:
    - char*
    - bool
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 233
    functionName: brpc::policy::NacosNamingService::GetServerNodes
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 1
    functionsReached:
    - std::set::size
    - Controller::response_attachment
    - auto::GetUint
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::GetInt
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::IsArray
    - Controller::http_response
    - auto::End
    - std::set::end
    - static_cast<long>
    - Controller::Failed
    - auto::value::GetBool
    - std::to_string
    - LOG
    - auto::value::IsInt
    - std::set::begin
    - std::vector<ServerNode>*::size
    - auto::FindMember
    - auto::GetString
    - auto::MemberEnd
    - auto::value::IsInt64
    - std::vector<ServerNode>*::assign
    - auto::Size
    - auto::Begin
    - auto::value::IsBool
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::vector<ServerNode>*::reserve
    - auto::value::GetDouble
    - std::set::insert
    - auto::value::GetInt64
    - Controller::http_request
    - auto::value::IsNumber
    - std::vector<ServerNode>*::empty
    - empty
    - str2endpoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::IsObject
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServerNodes(const char *service_name,\n
      \                                      bool token_changed,\n                                       std::vector<ServerNode>
      *nodes)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 236
    functionName: brpc::policy::NacosNamingService::NacosNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::NacosNamingService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 243
    functionName: brpc::policy::NacosNamingService::GetNamingServiceAccessIntervalMs
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::GetNamingServiceAccessIntervalMs() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::NacosNamingService::Connect
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:248,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:259,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:260,1
    - Dst: brpc::policy::NacosNamingService::RefreshAccessToken
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:264,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:272,1
    - Dst: brpc::policy::NacosNamingService::GetServerNodes
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:273,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 245
    functionDepth: 2
    functionLinenumber: 245
    functionLinenumberEnd: 274
    functionName: brpc::policy::NacosNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::NacosNamingService::GetServerNodes
    - std::vector<ServerNode>*::clear
    - empty
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - time
    - brpc::policy::NacosNamingService::Connect
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>
      *servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: brpc::policy::NacosNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void NacosNamingService::Describe(std::ostream &os,\n                                  const
      DescribeOptions &) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NacosNamingService::NacosNamingService
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: brpc::policy::NacosNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - NacosNamingService::NacosNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService *NacosNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 286
    functionName: brpc::policy::NacosNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:50,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: brpc::policy::NacosNamingService::Connect
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - Init
    - LOG
    - c_str
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::Connect()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:60,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:61,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:62,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:64,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:65,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:66,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:67,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:68,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:70,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:72,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:84,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:89,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:93,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:98,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 1
    argNames:
    - service_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 106
    functionName: brpc::policy::NacosNamingService::RefreshAccessToken
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - Controller::request_attachment
    - auto::append
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::Failed
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - time
    - LOG
    - CallMethod
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::RefreshAccessToken(const char *service_name)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:114,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:122,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:123,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:125,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:126,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:130,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:131,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:138,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:142,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:147,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:149,1
    - Dst: auto::IsArray
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:155,1
    - Dst: auto::Begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::End
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:163,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:167,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:169,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:174,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:176,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:181,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:189,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:197,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:199,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:205,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: auto::value::IsNumber
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: static_cast<long>
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: auto::value::GetDouble
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:211,1
    - Dst: std::vector<ServerNode>*::reserve
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::set::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::vector<ServerNode>*::assign
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: auto::Size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:218,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:223,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:224,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:227,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::IsInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::GetInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:229,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 77
    argCount: 3
    argNames:
    - service_name
    - token_changed
    - nodes
    argTypes:
    - char*
    - bool
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 233
    functionName: brpc::policy::NacosNamingService::GetServerNodes
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - std::set::size
    - Controller::response_attachment
    - auto::GetUint
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::GetInt
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::IsArray
    - Controller::http_response
    - auto::End
    - std::set::end
    - static_cast<long>
    - Controller::Failed
    - auto::value::GetBool
    - std::to_string
    - LOG
    - auto::value::IsInt
    - std::set::begin
    - std::vector<ServerNode>*::size
    - auto::FindMember
    - auto::GetString
    - auto::MemberEnd
    - auto::value::IsInt64
    - std::vector<ServerNode>*::assign
    - auto::Size
    - auto::Begin
    - auto::value::IsBool
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::vector<ServerNode>*::reserve
    - auto::value::GetDouble
    - std::set::insert
    - auto::value::GetInt64
    - Controller::http_request
    - auto::value::IsNumber
    - std::vector<ServerNode>*::empty
    - empty
    - str2endpoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::IsObject
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServerNodes(const char *service_name,\n
      \                                      bool token_changed,\n                                       std::vector<ServerNode>
      *nodes)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 236
    functionName: brpc::policy::NacosNamingService::NacosNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::NacosNamingService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 243
    functionName: brpc::policy::NacosNamingService::GetNamingServiceAccessIntervalMs
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::GetNamingServiceAccessIntervalMs() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::NacosNamingService::Connect
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:248,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:259,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:260,1
    - Dst: brpc::policy::NacosNamingService::RefreshAccessToken
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:264,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:272,1
    - Dst: brpc::policy::NacosNamingService::GetServerNodes
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:273,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 245
    functionDepth: 2
    functionLinenumber: 245
    functionLinenumberEnd: 274
    functionName: brpc::policy::NacosNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::NacosNamingService::GetServerNodes
    - std::vector<ServerNode>*::clear
    - empty
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - time
    - brpc::policy::NacosNamingService::Connect
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>
      *servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: brpc::policy::NacosNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void NacosNamingService::Describe(std::ostream &os,\n                                  const
      DescribeOptions &) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NacosNamingService::NacosNamingService
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: brpc::policy::NacosNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - NacosNamingService::NacosNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService *NacosNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 286
    functionName: brpc::policy::NacosNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:49,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:50,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: brpc::policy::NacosNamingService::Connect
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 3
    functionsReached:
    - Init
    - LOG
    - c_str
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::Connect()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:60,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:61,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:62,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:64,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:65,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:66,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:67,1
    - Dst: auto::append
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:68,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:70,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:72,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:84,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:89,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:90,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:93,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:98,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:99,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:100,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 1
    argNames:
    - service_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 106
    functionName: brpc::policy::NacosNamingService::RefreshAccessToken
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 3
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - Controller::request_attachment
    - auto::append
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::Failed
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - time
    - LOG
    - CallMethod
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::RefreshAccessToken(const char *service_name)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:111,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:114,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:122,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:123,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:125,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:126,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:130,1
    - Dst: Controller::http_response
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:131,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:138,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:142,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:147,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:149,1
    - Dst: auto::IsArray
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:155,1
    - Dst: auto::Begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::End
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:160,1
    - Dst: auto::IsObject
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:163,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:167,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:169,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:174,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:175,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:176,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:181,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:182,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:184,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:189,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::IsBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:190,1
    - Dst: auto::value::GetBool
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: auto::GetInt
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:192,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:197,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:199,1
    - Dst: auto::GetString
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::GetUint
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:200,1
    - Dst: auto::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:205,1
    - Dst: auto::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: auto::value::IsNumber
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:206,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: static_cast<long>
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: auto::value::GetDouble
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:208,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:211,1
    - Dst: std::vector<ServerNode>*::reserve
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::set::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:214,1
    - Dst: std::vector<ServerNode>*::assign
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:215,1
    - Dst: std::vector<ServerNode>*::empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: auto::Size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:218,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:223,1
    - Dst: std::vector<ServerNode>*::size
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:224,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:227,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::IsInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:228,1
    - Dst: auto::value::GetInt64
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:229,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 77
    argCount: 3
    argNames:
    - service_name
    - token_changed
    - nodes
    argTypes:
    - char*
    - bool
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 233
    functionName: brpc::policy::NacosNamingService::GetServerNodes
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 3
    functionsReached:
    - std::set::size
    - Controller::response_attachment
    - auto::GetUint
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::GetInt
    - butil::EndPoint::EndPoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::IsArray
    - Controller::http_response
    - auto::End
    - std::set::end
    - static_cast<long>
    - Controller::Failed
    - auto::value::GetBool
    - std::to_string
    - LOG
    - auto::value::IsInt
    - std::set::begin
    - std::vector<ServerNode>*::size
    - auto::FindMember
    - auto::GetString
    - auto::MemberEnd
    - auto::value::IsInt64
    - std::vector<ServerNode>*::assign
    - auto::Size
    - auto::Begin
    - auto::value::IsBool
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::vector<ServerNode>*::reserve
    - auto::value::GetDouble
    - std::set::insert
    - auto::value::GetInt64
    - Controller::http_request
    - auto::value::IsNumber
    - std::vector<ServerNode>*::empty
    - empty
    - str2endpoint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::IsObject
    - auto::value::IsString
    - CallMethod
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServerNodes(const char *service_name,\n
      \                                      bool token_changed,\n                                       std::vector<ServerNode>
      *nodes)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 236
    functionName: brpc::policy::NacosNamingService::NacosNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::NacosNamingService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 243
    functionName: brpc::policy::NacosNamingService::GetNamingServiceAccessIntervalMs
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    linkageType: ''
    returnType: int
    signature: int NacosNamingService::GetNamingServiceAccessIntervalMs() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::NacosNamingService::Connect
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:248,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:257,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:259,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:260,1
    - Dst: brpc::policy::NacosNamingService::RefreshAccessToken
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:264,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:272,1
    - Dst: brpc::policy::NacosNamingService::GetServerNodes
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:273,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 245
    functionDepth: 2
    functionLinenumber: 245
    functionLinenumberEnd: 274
    functionName: brpc::policy::NacosNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::NacosNamingService::GetServerNodes
    - std::vector<ServerNode>*::clear
    - empty
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - time
    - brpc::policy::NacosNamingService::Connect
    linkageType: ''
    returnType: int
    signature: "int NacosNamingService::GetServers(const char *service_name,\n                                   std::vector<ServerNode>
      *servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    functionName: brpc::policy::NacosNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void NacosNamingService::Describe(std::ostream &os,\n                                  const
      DescribeOptions &) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NacosNamingService::NacosNamingService
      Src: /src/brpc/src/brpc/policy/nacos_naming_service.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: brpc::policy::NacosNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached:
    - NacosNamingService::NacosNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService *NacosNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 286
    functionName: brpc::policy::NacosNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/nacos_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NacosNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::LocalityAwareLoadBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: weight_tree::capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:55,1
    - Dst: weight_tree::reserve
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:56,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:58,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:62,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:68,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:74,1
    - Dst: LocalityAwareLoadBalancer*::_total::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:75,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:76,1
    - Dst: LocalityAwareLoadBalancer*::PushLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: Weight::Weight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:87,1
    - Dst: ServerInfo::weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:92,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:94,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:95,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:100,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - id
    - lb
    argTypes:
    - Servers
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ServerInfo::weight::volatile_value
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::size
    - server_map::seek
    - Weight::Weight
    - weight_tree::empty
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - UpdateParentWeights
    - weight_tree::reserve
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Add(Servers& bg, const Servers& fg,\n
      \                                   SocketId id,\n                                    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:115,1
    - Dst: Weight*::Disable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:121,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:122,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:124,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:132,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:133,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:137,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:141,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:142,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:144,1
    - Dst: Weight*::MarkOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:165,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:166,1
    - Dst: Weight*::ClearOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:174,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:178,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:185,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' bg'
    - id
    - lb
    argTypes:
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 192
    functionName: brpc::policy::LocalityAwareLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight_tree::size
    - server_map::seek
    - Weight*::Disable
    - LocalityAwareLoadBalancer*::PopLeft
    - weight_tree::back
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - Weight*::MarkOld
    - server_map::erase
    - UpdateParentWeights
    - weight_tree::pop_back
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Remove(\n    Servers& bg, SocketId
      id, LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:195,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:196,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:197,1
    - Dst: weight_tree::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' fg'
    argTypes:
    - Servers
    - Servers
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 203
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveAll
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight_tree::empty
    - server_map::clear
    - weight_tree::size
    - weight_tree::clear
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveAll(Servers& bg, const Servers&
      fg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:209,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 205
    functionDepth: 2
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::LocalityAwareLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchAdd(\n    Servers& bg, const
      Servers& fg, const std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:220,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 224
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::AddServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:227,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:236,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 242
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - Modify
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:246,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:247,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:248,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - AddServers
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:254,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:255,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:257,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - RemoveServers
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:267,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:270,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:276,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:285,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:293,1
    - Dst: weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:299,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:306,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:309,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:314,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:317,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:332,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:339,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:354,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 265
    functionDepth: 3
    functionLinenumber: 265
    functionLinenumberEnd: 358
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - weight::AddInflight
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - fetch_add
    - weight::MarkFailed
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - weight::volatile_value
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int LocalityAwareLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:362,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:365,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:371,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 376
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - fetch_add
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - Weight*::Update
    - Read
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:380,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:383,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:400,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:402,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:421,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:425,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:428,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:438,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:443,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:449,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:458,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:460,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:471,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 378
    functionDepth: 1
    functionLinenumber: 378
    functionLinenumberEnd: 472
    functionName: "LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - elim_push
    - std::max
    - controller::retried_count
    - controller::max_retry
    - push
    - top
    - BAIDU_SCOPED_LOCK
    - empty
    - ResetWeight
    - capacity
    - size
    - bottom
    - controller::timeout_ms
    - Disabled
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:476,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 477
    functionName: brpc::policy::LocalityAwareLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    linkageType: ''
    returnType: LocalityAwareLoadBalancer
    signature: "LocalityAwareLoadBalancer * LocalityAwareLoadBalancer::New(\n    const
      butil::StringPiece&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 481
    functionName: brpc::policy::LocalityAwareLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:489,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:495,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:498,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 514
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - size
    - std::unique_lock::unlock
    - top
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os,
      int64_t now)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:523,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:525,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:529,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:536,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:542,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 516
    functionDepth: 3
    functionLinenumber: 516
    functionLinenumberEnd: 548
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - weight::Describe
    - brpc::SetTrackMeAddress
    - Read
    - left::load
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Describe(\n    std::ostream& os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - initial_weight
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 560
    functionName: LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 563
    functionName: LocalityAwareLoadBalancer::Weight::~Weight()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::~Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 571
    functionName: LocalityAwareLoadBalancer::Weight::Disable()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::Disable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 573
    functionDepth: 1
    functionLinenumber: 573
    functionLinenumberEnd: 580
    functionName: LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:583,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 590
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::make_pair
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: std::pair<int64_t, int64_t>
    signature: std::pair<int64_t, int64_t> LocalityAwareLoadBalancer::Weight::ClearOld()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::LocalityAwareLoadBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: weight_tree::capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:55,1
    - Dst: weight_tree::reserve
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:56,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:58,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:62,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:68,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:74,1
    - Dst: LocalityAwareLoadBalancer*::_total::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:75,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:76,1
    - Dst: LocalityAwareLoadBalancer*::PushLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: Weight::Weight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:87,1
    - Dst: ServerInfo::weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:92,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:94,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:95,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:100,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - id
    - lb
    argTypes:
    - Servers
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - ServerInfo::weight::volatile_value
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::size
    - server_map::seek
    - Weight::Weight
    - weight_tree::empty
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - UpdateParentWeights
    - weight_tree::reserve
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Add(Servers& bg, const Servers& fg,\n
      \                                   SocketId id,\n                                    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:115,1
    - Dst: Weight*::Disable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:121,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:122,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:124,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:132,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:133,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:137,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:141,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:142,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:144,1
    - Dst: Weight*::MarkOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:165,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:166,1
    - Dst: Weight*::ClearOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:174,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:178,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:185,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' bg'
    - id
    - lb
    argTypes:
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 192
    functionName: brpc::policy::LocalityAwareLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - weight_tree::size
    - server_map::seek
    - Weight*::Disable
    - LocalityAwareLoadBalancer*::PopLeft
    - weight_tree::back
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - Weight*::MarkOld
    - server_map::erase
    - UpdateParentWeights
    - weight_tree::pop_back
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Remove(\n    Servers& bg, SocketId
      id, LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:195,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:196,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:197,1
    - Dst: weight_tree::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' fg'
    argTypes:
    - Servers
    - Servers
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 203
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveAll
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight_tree::empty
    - server_map::clear
    - weight_tree::size
    - weight_tree::clear
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveAll(Servers& bg, const Servers&
      fg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:209,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 205
    functionDepth: 2
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::LocalityAwareLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchAdd(\n    Servers& bg, const
      Servers& fg, const std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:220,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 224
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::AddServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:227,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:236,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 242
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - Modify
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:246,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:247,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:248,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - AddServers
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:254,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:255,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:257,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - RemoveServers
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:267,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:270,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:276,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:285,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:293,1
    - Dst: weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:299,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:306,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:309,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:314,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:317,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:332,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:339,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:354,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 265
    functionDepth: 3
    functionLinenumber: 265
    functionLinenumberEnd: 358
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - weight::AddInflight
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - fetch_add
    - weight::MarkFailed
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - weight::volatile_value
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int LocalityAwareLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:362,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:365,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:371,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 376
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - fetch_add
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - Weight*::Update
    - Read
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:380,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:383,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:400,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:402,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:421,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:425,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:428,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:438,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:443,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:449,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:458,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:460,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:471,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 378
    functionDepth: 1
    functionLinenumber: 378
    functionLinenumberEnd: 472
    functionName: "LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - elim_push
    - std::max
    - controller::retried_count
    - controller::max_retry
    - push
    - top
    - BAIDU_SCOPED_LOCK
    - empty
    - ResetWeight
    - capacity
    - size
    - bottom
    - controller::timeout_ms
    - Disabled
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:476,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 477
    functionName: brpc::policy::LocalityAwareLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    linkageType: ''
    returnType: LocalityAwareLoadBalancer
    signature: "LocalityAwareLoadBalancer * LocalityAwareLoadBalancer::New(\n    const
      butil::StringPiece&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 481
    functionName: brpc::policy::LocalityAwareLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:489,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:495,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:498,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 514
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - size
    - std::unique_lock::unlock
    - top
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os,
      int64_t now)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:523,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:525,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:529,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:536,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:542,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 516
    functionDepth: 3
    functionLinenumber: 516
    functionLinenumberEnd: 548
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - weight::Describe
    - brpc::SetTrackMeAddress
    - Read
    - left::load
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Describe(\n    std::ostream& os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - initial_weight
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 560
    functionName: LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 563
    functionName: LocalityAwareLoadBalancer::Weight::~Weight()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::~Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 571
    functionName: LocalityAwareLoadBalancer::Weight::Disable()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::Disable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 573
    functionDepth: 1
    functionLinenumber: 573
    functionLinenumberEnd: 580
    functionName: LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:583,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 590
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::make_pair
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: std::pair<int64_t, int64_t>
    signature: std::pair<int64_t, int64_t> LocalityAwareLoadBalancer::Weight::ClearOld()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::LocalityAwareLoadBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: weight_tree::capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:55,1
    - Dst: weight_tree::reserve
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:56,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:58,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:62,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:68,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:74,1
    - Dst: LocalityAwareLoadBalancer*::_total::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:75,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:76,1
    - Dst: LocalityAwareLoadBalancer*::PushLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: Weight::Weight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:87,1
    - Dst: ServerInfo::weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:92,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:94,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:95,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:100,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - id
    - lb
    argTypes:
    - Servers
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - ServerInfo::weight::volatile_value
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::size
    - server_map::seek
    - Weight::Weight
    - weight_tree::empty
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - UpdateParentWeights
    - weight_tree::reserve
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Add(Servers& bg, const Servers& fg,\n
      \                                   SocketId id,\n                                    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:115,1
    - Dst: Weight*::Disable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:121,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:122,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:124,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:132,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:133,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:137,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:141,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:142,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:144,1
    - Dst: Weight*::MarkOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:165,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:166,1
    - Dst: Weight*::ClearOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:174,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:178,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:185,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' bg'
    - id
    - lb
    argTypes:
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 192
    functionName: brpc::policy::LocalityAwareLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - weight_tree::size
    - server_map::seek
    - Weight*::Disable
    - LocalityAwareLoadBalancer*::PopLeft
    - weight_tree::back
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - Weight*::MarkOld
    - server_map::erase
    - UpdateParentWeights
    - weight_tree::pop_back
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Remove(\n    Servers& bg, SocketId
      id, LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:195,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:196,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:197,1
    - Dst: weight_tree::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' fg'
    argTypes:
    - Servers
    - Servers
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 203
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveAll
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight_tree::empty
    - server_map::clear
    - weight_tree::size
    - weight_tree::clear
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveAll(Servers& bg, const Servers&
      fg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:209,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 205
    functionDepth: 2
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::LocalityAwareLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchAdd(\n    Servers& bg, const
      Servers& fg, const std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:220,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 224
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::AddServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:227,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:236,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 242
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - Modify
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:246,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:247,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:248,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - AddServers
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:254,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:255,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:257,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - RemoveServers
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:267,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:270,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:276,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:285,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:293,1
    - Dst: weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:299,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:306,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:309,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:314,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:317,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:332,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:339,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:354,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 265
    functionDepth: 3
    functionLinenumber: 265
    functionLinenumberEnd: 358
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - weight::AddInflight
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - fetch_add
    - weight::MarkFailed
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - weight::volatile_value
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int LocalityAwareLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:362,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:365,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:371,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 376
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - fetch_add
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - Weight*::Update
    - Read
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:380,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:383,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:400,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:402,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:421,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:425,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:428,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:438,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:443,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:449,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:458,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:460,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:471,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 378
    functionDepth: 1
    functionLinenumber: 378
    functionLinenumberEnd: 472
    functionName: "LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - elim_push
    - std::max
    - controller::retried_count
    - controller::max_retry
    - push
    - top
    - BAIDU_SCOPED_LOCK
    - empty
    - ResetWeight
    - capacity
    - size
    - bottom
    - controller::timeout_ms
    - Disabled
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:476,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 477
    functionName: brpc::policy::LocalityAwareLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    linkageType: ''
    returnType: LocalityAwareLoadBalancer
    signature: "LocalityAwareLoadBalancer * LocalityAwareLoadBalancer::New(\n    const
      butil::StringPiece&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 481
    functionName: brpc::policy::LocalityAwareLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:489,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:495,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:498,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 514
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - size
    - std::unique_lock::unlock
    - top
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os,
      int64_t now)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:523,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:525,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:529,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:536,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:542,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 516
    functionDepth: 3
    functionLinenumber: 516
    functionLinenumberEnd: 548
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - weight::Describe
    - brpc::SetTrackMeAddress
    - Read
    - left::load
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Describe(\n    std::ostream& os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - initial_weight
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 560
    functionName: LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 563
    functionName: LocalityAwareLoadBalancer::Weight::~Weight()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::~Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 571
    functionName: LocalityAwareLoadBalancer::Weight::Disable()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::Disable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 573
    functionDepth: 1
    functionLinenumber: 573
    functionLinenumberEnd: 580
    functionName: LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:583,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 590
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::make_pair
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: std::pair<int64_t, int64_t>
    signature: std::pair<int64_t, int64_t> LocalityAwareLoadBalancer::Weight::ClearOld()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: brpc::policy::LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::LocalityAwareLoadBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::~LocalityAwareLoadBalancer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: weight_tree::capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:55,1
    - Dst: weight_tree::reserve
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:56,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:58,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:62,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:68,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:74,1
    - Dst: LocalityAwareLoadBalancer*::_total::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:75,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:76,1
    - Dst: LocalityAwareLoadBalancer*::PushLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: Weight::Weight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:86,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:87,1
    - Dst: ServerInfo::weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:92,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:94,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:95,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:100,1
    - Dst: weight_tree::push_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - id
    - lb
    argTypes:
    - Servers
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - ServerInfo::weight::volatile_value
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::size
    - server_map::seek
    - Weight::Weight
    - weight_tree::empty
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - UpdateParentWeights
    - weight_tree::reserve
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Add(Servers& bg, const Servers& fg,\n
      \                                   SocketId id,\n                                    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:108,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:115,1
    - Dst: Weight*::Disable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:121,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:122,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:124,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:132,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:133,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:137,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:141,1
    - Dst: weight_tree::back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:142,1
    - Dst: weight_tree::pop_back
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:144,1
    - Dst: Weight*::MarkOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:158,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:165,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:166,1
    - Dst: Weight*::ClearOld
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:174,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:178,1
    - Dst: UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:183,1
    - Dst: LocalityAwareLoadBalancer*::_total::fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:185,1
    - Dst: LocalityAwareLoadBalancer*::PopLeft
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' bg'
    - id
    - lb
    argTypes:
    - Servers
    - SocketId
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 192
    functionName: brpc::policy::LocalityAwareLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - weight_tree::size
    - server_map::seek
    - Weight*::Disable
    - LocalityAwareLoadBalancer*::PopLeft
    - weight_tree::back
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - Weight*::MarkOld
    - server_map::erase
    - UpdateParentWeights
    - weight_tree::pop_back
    linkageType: ''
    returnType: bool
    signature: "bool LocalityAwareLoadBalancer::Remove(\n    Servers& bg, SocketId
      id, LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:195,1
    - Dst: weight_tree::empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:196,1
    - Dst: weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:197,1
    - Dst: weight_tree::clear
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' fg'
    argTypes:
    - Servers
    - Servers
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 194
    functionDepth: 1
    functionLinenumber: 194
    functionLinenumberEnd: 203
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveAll
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight_tree::empty
    - server_map::clear
    - weight_tree::size
    - weight_tree::clear
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveAll(Servers& bg, const Servers&
      fg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:209,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 205
    functionDepth: 2
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::LocalityAwareLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchAdd(\n    Servers& bg, const
      Servers& fg, const std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer*
      lb)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:220,1
    - Dst: brpc::policy::LocalityAwareLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' servers'
    - lb
    argTypes:
    - Servers
    - std::vector<SocketId>
    - LocalityAwareLoadBalancer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 224
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::BatchRemove(\n    Servers& bg, const
      std::vector<SocketId>& servers,\n    LocalityAwareLoadBalancer* lb)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::AddServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:227,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:236,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:238,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 242
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - Modify
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    linkageType: ''
    returnType: bool
    signature: bool LocalityAwareLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:246,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:247,1
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:248,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 250
    functionName: brpc::policy::LocalityAwareLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - AddServers
    - ModifyWithForeground
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServers
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:254,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:255,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:257,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: brpc::policy::LocalityAwareLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - RemoveServers
    linkageType: ''
    returnType: size_t
    signature: "size_t LocalityAwareLoadBalancer::RemoveServersInBatch(\n    const
      std::vector<ServerId>& servers)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:267,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:270,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:276,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:285,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:293,1
    - Dst: weight::volatile_value
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:299,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: IsAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:306,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:309,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:314,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:317,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:332,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:339,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:354,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 265
    functionDepth: 3
    functionLinenumber: 265
    functionLinenumberEnd: 358
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - weight::AddInflight
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - fetch_add
    - weight::MarkFailed
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - LOG
    - weight::volatile_value
    - IsAvailable
    linkageType: ''
    returnType: int
    signature: int LocalityAwareLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:362,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:365,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:371,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 376
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    - fetch_add
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - Weight*::Update
    - Read
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:380,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:383,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:400,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:402,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:421,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:425,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:428,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:435,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:438,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:443,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:449,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:458,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:460,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:471,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 378
    functionDepth: 1
    functionLinenumber: 378
    functionLinenumberEnd: 472
    functionName: "LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - elim_push
    - std::max
    - controller::retried_count
    - controller::max_retry
    - push
    - top
    - BAIDU_SCOPED_LOCK
    - empty
    - ResetWeight
    - capacity
    - size
    - bottom
    - controller::timeout_ms
    - Disabled
    linkageType: ''
    returnType: int64_t
    signature: "int64_t LocalityAwareLoadBalancer::Weight::Update(\n    const CallInfo&
      ci, size_t index)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:476,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 477
    functionName: brpc::policy::LocalityAwareLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LocalityAwareLoadBalancer::LocalityAwareLoadBalancer
    linkageType: ''
    returnType: LocalityAwareLoadBalancer
    signature: "LocalityAwareLoadBalancer * LocalityAwareLoadBalancer::New(\n    const
      butil::StringPiece&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 481
    functionName: brpc::policy::LocalityAwareLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Destroy()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:489,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:495,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:498,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 514
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - size
    - std::unique_lock::unlock
    - top
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os,
      int64_t now)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:523,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:525,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:529,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:536,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:542,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 516
    functionDepth: 3
    functionLinenumber: 516
    functionLinenumberEnd: 548
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - weight::Describe
    - brpc::SetTrackMeAddress
    - Read
    - left::load
    linkageType: ''
    returnType: void
    signature: "void LocalityAwareLoadBalancer::Describe(\n    std::ostream& os, const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - initial_weight
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 560
    functionName: LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::Weight(int64_t initial_weight)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 563
    functionName: LocalityAwareLoadBalancer::Weight::~Weight()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocalityAwareLoadBalancer::Weight::~Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 571
    functionName: LocalityAwareLoadBalancer::Weight::Disable()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::Disable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 573
    functionDepth: 1
    functionLinenumber: 573
    functionLinenumberEnd: 580
    functionName: LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int64_t
    signature: int64_t LocalityAwareLoadBalancer::Weight::MarkOld(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:583,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 590
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::make_pair
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: std::pair<int64_t, int64_t>
    signature: std::pair<int64_t, int64_t> LocalityAwareLoadBalancer::Weight::ClearOld()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:59,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:63,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:64,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:67,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:71,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:76,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:77,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:82,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:87,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:90,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:92,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:93,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:94,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:95,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:96,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:97,1
    - Dst: auto::value::GetUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:101,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:103,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 36
    argCount: 2
    argNames:
    - discovery_api_addr
    - servers
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 106
    functionName: brpc::policy::ListDiscoveryNodes
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - std::string*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetUint
    - std::string::c_str
    - auto::value::GetStringLength
    - Controller::Failed
    - Size
    - MemberEnd
    - LOG
    - Channel::CallMethod
    - FindMember
    - IsArray
    - auto::value::IsUint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string*::append
    - auto::value::GetString
    - Controller::http_request
    - Channel::Init
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - std::string*::assign
    - auto::value::IsString
    linkageType: ''
    returnType: int
    signature: int ListDiscoveryNodes(const char* discovery_api_addr, std::string*
      servers)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListDiscoveryNodes
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:115,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:122,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 108
    functionDepth: 2
    functionLinenumber: 108
    functionLinenumberEnd: 127
    functionName: brpc::policy::NewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ListDiscoveryNodes
    - std::string::c_str
    - Init
    - Channel::Channel
    - c_str
    - LOG
    linkageType: ''
    returnType: void
    signature: void NewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    functionName: brpc::policy::GetOrNewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: Channel
    signature: Channel * GetOrNewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::DiscoveryRegisterParam::IsValid
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool DiscoveryRegisterParam::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: brpc::policy::DiscoveryClient::DiscoveryClient
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::DiscoveryClient()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:144,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:145,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:146,1
    - Dst: DoCancel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 3
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: DiscoveryClient::~DiscoveryClient()
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - load
    - DoCancel
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::~DiscoveryClient()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: to_string
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:152,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:156,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:159,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:161,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:164,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:165,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:168,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' buf'
    - error_text
    argTypes:
    - butil::IOBuf
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 171
    functionName: brpc::policy::ParseCommonResult
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - std::string::c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetStringLength
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - to_string
    - std::string*::assign
    - LOG
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int ParseCommonResult(const butil::IOBuf& buf, std::string* error_text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:181,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:186,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:187,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:188,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:189,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:196,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:203,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 208
    functionName: brpc::policy::DiscoveryClient::DoRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRenew() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DiscoveryClient*>
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:211,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:214,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:215,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:223,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: DiscoveryClient*::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:226,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:229,1
    - Dst: DiscoveryClient*::DoRenew
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:233,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:238,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 241
    functionName: brpc::policy::DiscoveryClient::PeriodicRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_usleep
    - DiscoveryClient*::DoRegister
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - static_cast<DiscoveryClient*>
    - bthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void * DiscoveryClient::PeriodicRenew(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:244,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:245,1
    - Dst: IsValid
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:248,1
    - Dst: brpc::policy::DiscoveryClient::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:253,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:257,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - DiscoveryRegisterParam
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 243
    functionDepth: 4
    functionLinenumber: 243
    functionLinenumberEnd: 261
    functionName: brpc::policy::DiscoveryClient::Register
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - bthread_start_background
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - IsValid
    - exchange
    - LOG
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::Register(const DiscoveryRegisterParam& params)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:266,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:270,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:271,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:272,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:273,1
    - Dst: butil::SplitString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:278,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:279,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:280,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:292,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:299,1
    - Dst: Controller::remote_side
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 305
    functionName: brpc::policy::DiscoveryClient::DoRegister
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - ParseCommonResult
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - GetOrNewDiscoveryChannel
    - empty
    - Controller::Failed
    - butil::SplitString
    - std::vector::size
    - Channel*::CallMethod
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Controller::remote_side
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRegister()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:315,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:320,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:321,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:322,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:323,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:330,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:337,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 342
    functionName: brpc::policy::DiscoveryClient::DoCancel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoCancel() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:349,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:350,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:351,1
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:356,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:359,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:361,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:364,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:365,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:366,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:368,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:369,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:370,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:375,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:378,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:379,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:382,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:383,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:384,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:388,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:389,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:390,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:394,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:396,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:401,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:405,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:408,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:409,1
    - Dst: auto::value::Accept
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:412,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:416,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:418,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:422,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:423,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:429,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:436,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:444,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:447,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 69
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 451
    functionName: brpc::policy::DiscoveryNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - LOG_ONCE
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::StringPiece::data
    - auto::value::IsArray
    - std::string::c_str
    - GetStringLength
    - std::string::append
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - Size
    - MemberEnd
    - LOG
    - std::string::assign
    - butil::string_printf
    - GetString
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - FindMember
    - GetOrNewDiscoveryChannel
    - IsArray
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::Accept
    - butil::StringPiece::find
    - IsString
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - str2endpoint
    - Channel*::CallMethod
    linkageType: ''
    returnType: int
    signature: "int DiscoveryNamingService::GetServers(const char* service_name,\n
      \                                      std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 457
    functionName: brpc::policy::DiscoveryNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DiscoveryNamingService::Describe(std::ostream& os,\n                                      const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DiscoveryNamingService::DiscoveryNamingService
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 461
    functionName: brpc::policy::DiscoveryNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DiscoveryNamingService::DiscoveryNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DiscoveryNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 465
    functionName: brpc::policy::DiscoveryNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:59,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:63,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:64,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:67,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:71,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:76,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:77,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:82,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:87,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:90,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:92,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:93,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:94,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:95,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:96,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:97,1
    - Dst: auto::value::GetUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:101,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:103,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 36
    argCount: 2
    argNames:
    - discovery_api_addr
    - servers
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 106
    functionName: brpc::policy::ListDiscoveryNodes
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 1
    functionsReached:
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - std::string*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetUint
    - std::string::c_str
    - auto::value::GetStringLength
    - Controller::Failed
    - Size
    - MemberEnd
    - LOG
    - Channel::CallMethod
    - FindMember
    - IsArray
    - auto::value::IsUint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string*::append
    - auto::value::GetString
    - Controller::http_request
    - Channel::Init
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - std::string*::assign
    - auto::value::IsString
    linkageType: ''
    returnType: int
    signature: int ListDiscoveryNodes(const char* discovery_api_addr, std::string*
      servers)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListDiscoveryNodes
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:115,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:122,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 108
    functionDepth: 2
    functionLinenumber: 108
    functionLinenumberEnd: 127
    functionName: brpc::policy::NewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ListDiscoveryNodes
    - std::string::c_str
    - Init
    - Channel::Channel
    - c_str
    - LOG
    linkageType: ''
    returnType: void
    signature: void NewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    functionName: brpc::policy::GetOrNewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: Channel
    signature: Channel * GetOrNewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::DiscoveryRegisterParam::IsValid
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool DiscoveryRegisterParam::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: brpc::policy::DiscoveryClient::DiscoveryClient
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::DiscoveryClient()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:144,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:145,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:146,1
    - Dst: DoCancel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 3
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: DiscoveryClient::~DiscoveryClient()
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - load
    - DoCancel
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::~DiscoveryClient()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: to_string
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:152,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:156,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:159,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:161,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:164,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:165,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:168,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' buf'
    - error_text
    argTypes:
    - butil::IOBuf
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 171
    functionName: brpc::policy::ParseCommonResult
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - std::string::c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetStringLength
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - to_string
    - std::string*::assign
    - LOG
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int ParseCommonResult(const butil::IOBuf& buf, std::string* error_text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:181,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:186,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:187,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:188,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:189,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:196,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:203,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 208
    functionName: brpc::policy::DiscoveryClient::DoRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRenew() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DiscoveryClient*>
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:211,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:214,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:215,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:223,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: DiscoveryClient*::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:226,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:229,1
    - Dst: DiscoveryClient*::DoRenew
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:233,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:238,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 241
    functionName: brpc::policy::DiscoveryClient::PeriodicRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_usleep
    - DiscoveryClient*::DoRegister
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - static_cast<DiscoveryClient*>
    - bthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void * DiscoveryClient::PeriodicRenew(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:244,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:245,1
    - Dst: IsValid
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:248,1
    - Dst: brpc::policy::DiscoveryClient::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:253,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:257,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - DiscoveryRegisterParam
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 243
    functionDepth: 4
    functionLinenumber: 243
    functionLinenumberEnd: 261
    functionName: brpc::policy::DiscoveryClient::Register
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - bthread_start_background
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - IsValid
    - exchange
    - LOG
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::Register(const DiscoveryRegisterParam& params)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:266,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:270,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:271,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:272,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:273,1
    - Dst: butil::SplitString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:278,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:279,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:280,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:292,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:299,1
    - Dst: Controller::remote_side
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 305
    functionName: brpc::policy::DiscoveryClient::DoRegister
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBufBuilder::move_to
    - ParseCommonResult
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - GetOrNewDiscoveryChannel
    - empty
    - Controller::Failed
    - butil::SplitString
    - std::vector::size
    - Channel*::CallMethod
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Controller::remote_side
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRegister()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:315,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:320,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:321,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:322,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:323,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:330,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:337,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 342
    functionName: brpc::policy::DiscoveryClient::DoCancel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoCancel() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:349,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:350,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:351,1
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:356,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:359,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:361,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:364,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:365,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:366,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:368,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:369,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:370,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:375,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:378,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:379,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:382,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:383,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:384,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:388,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:389,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:390,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:394,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:396,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:401,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:405,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:408,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:409,1
    - Dst: auto::value::Accept
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:412,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:416,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:418,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:422,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:423,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:429,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:436,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:444,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:447,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 69
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 451
    functionName: brpc::policy::DiscoveryNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - LOG_ONCE
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::StringPiece::data
    - auto::value::IsArray
    - std::string::c_str
    - GetStringLength
    - std::string::append
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - Size
    - MemberEnd
    - LOG
    - std::string::assign
    - butil::string_printf
    - GetString
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - FindMember
    - GetOrNewDiscoveryChannel
    - IsArray
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::Accept
    - butil::StringPiece::find
    - IsString
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - str2endpoint
    - Channel*::CallMethod
    linkageType: ''
    returnType: int
    signature: "int DiscoveryNamingService::GetServers(const char* service_name,\n
      \                                      std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 457
    functionName: brpc::policy::DiscoveryNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DiscoveryNamingService::Describe(std::ostream& os,\n                                      const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DiscoveryNamingService::DiscoveryNamingService
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 461
    functionName: brpc::policy::DiscoveryNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DiscoveryNamingService::DiscoveryNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DiscoveryNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 465
    functionName: brpc::policy::DiscoveryNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:59,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:63,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:64,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:67,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:71,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:76,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:77,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:82,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:87,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:90,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:92,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:93,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:94,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:95,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:96,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:97,1
    - Dst: auto::value::GetUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:101,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:103,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 36
    argCount: 2
    argNames:
    - discovery_api_addr
    - servers
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 106
    functionName: brpc::policy::ListDiscoveryNodes
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - std::string*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetUint
    - std::string::c_str
    - auto::value::GetStringLength
    - Controller::Failed
    - Size
    - MemberEnd
    - LOG
    - Channel::CallMethod
    - FindMember
    - IsArray
    - auto::value::IsUint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string*::append
    - auto::value::GetString
    - Controller::http_request
    - Channel::Init
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - std::string*::assign
    - auto::value::IsString
    linkageType: ''
    returnType: int
    signature: int ListDiscoveryNodes(const char* discovery_api_addr, std::string*
      servers)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListDiscoveryNodes
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:115,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:122,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 108
    functionDepth: 2
    functionLinenumber: 108
    functionLinenumberEnd: 127
    functionName: brpc::policy::NewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ListDiscoveryNodes
    - std::string::c_str
    - Init
    - Channel::Channel
    - c_str
    - LOG
    linkageType: ''
    returnType: void
    signature: void NewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    functionName: brpc::policy::GetOrNewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: Channel
    signature: Channel * GetOrNewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::DiscoveryRegisterParam::IsValid
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool DiscoveryRegisterParam::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: brpc::policy::DiscoveryClient::DiscoveryClient
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::DiscoveryClient()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:144,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:145,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:146,1
    - Dst: DoCancel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 3
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: DiscoveryClient::~DiscoveryClient()
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - load
    - DoCancel
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::~DiscoveryClient()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: to_string
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:152,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:156,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:159,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:161,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:164,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:165,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:168,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' buf'
    - error_text
    argTypes:
    - butil::IOBuf
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 171
    functionName: brpc::policy::ParseCommonResult
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - std::string::c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetStringLength
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - to_string
    - std::string*::assign
    - LOG
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int ParseCommonResult(const butil::IOBuf& buf, std::string* error_text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:181,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:186,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:187,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:188,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:189,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:196,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:203,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 208
    functionName: brpc::policy::DiscoveryClient::DoRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRenew() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DiscoveryClient*>
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:211,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:214,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:215,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:223,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: DiscoveryClient*::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:226,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:229,1
    - Dst: DiscoveryClient*::DoRenew
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:233,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:238,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 241
    functionName: brpc::policy::DiscoveryClient::PeriodicRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_usleep
    - DiscoveryClient*::DoRegister
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - static_cast<DiscoveryClient*>
    - bthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void * DiscoveryClient::PeriodicRenew(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:244,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:245,1
    - Dst: IsValid
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:248,1
    - Dst: brpc::policy::DiscoveryClient::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:253,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:257,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - DiscoveryRegisterParam
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 243
    functionDepth: 4
    functionLinenumber: 243
    functionLinenumberEnd: 261
    functionName: brpc::policy::DiscoveryClient::Register
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - bthread_start_background
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - IsValid
    - exchange
    - LOG
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::Register(const DiscoveryRegisterParam& params)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:266,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:270,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:271,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:272,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:273,1
    - Dst: butil::SplitString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:278,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:279,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:280,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:292,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:299,1
    - Dst: Controller::remote_side
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 305
    functionName: brpc::policy::DiscoveryClient::DoRegister
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBufBuilder::move_to
    - ParseCommonResult
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - GetOrNewDiscoveryChannel
    - empty
    - Controller::Failed
    - butil::SplitString
    - std::vector::size
    - Channel*::CallMethod
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Controller::remote_side
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRegister()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:315,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:320,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:321,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:322,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:323,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:330,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:337,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 342
    functionName: brpc::policy::DiscoveryClient::DoCancel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoCancel() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:349,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:350,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:351,1
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:356,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:359,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:361,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:364,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:365,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:366,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:368,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:369,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:370,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:375,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:378,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:379,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:382,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:383,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:384,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:388,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:389,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:390,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:394,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:396,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:401,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:405,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:408,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:409,1
    - Dst: auto::value::Accept
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:412,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:416,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:418,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:422,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:423,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:429,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:436,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:444,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:447,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 69
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 451
    functionName: brpc::policy::DiscoveryNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - LOG_ONCE
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::StringPiece::data
    - auto::value::IsArray
    - std::string::c_str
    - GetStringLength
    - std::string::append
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - Size
    - MemberEnd
    - LOG
    - std::string::assign
    - butil::string_printf
    - GetString
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - FindMember
    - GetOrNewDiscoveryChannel
    - IsArray
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::Accept
    - butil::StringPiece::find
    - IsString
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - str2endpoint
    - Channel*::CallMethod
    linkageType: ''
    returnType: int
    signature: "int DiscoveryNamingService::GetServers(const char* service_name,\n
      \                                      std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 457
    functionName: brpc::policy::DiscoveryNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DiscoveryNamingService::Describe(std::ostream& os,\n                                      const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DiscoveryNamingService::DiscoveryNamingService
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 461
    functionName: brpc::policy::DiscoveryNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DiscoveryNamingService::DiscoveryNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DiscoveryNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 465
    functionName: brpc::policy::DiscoveryNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryNamingService::Destroy()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:59,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:63,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:64,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:65,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:66,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:67,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:71,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:73,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:75,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:76,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:77,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:80,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:82,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:87,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:90,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:92,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:93,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:94,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:95,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:96,1
    - Dst: auto::value::IsUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:97,1
    - Dst: auto::value::GetUint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:101,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:102,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:103,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 36
    argCount: 2
    argNames:
    - discovery_api_addr
    - servers
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 106
    functionName: brpc::policy::ListDiscoveryNodes
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 3
    functionsReached:
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - std::string*::push_back
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetUint
    - std::string::c_str
    - auto::value::GetStringLength
    - Controller::Failed
    - Size
    - MemberEnd
    - LOG
    - Channel::CallMethod
    - FindMember
    - IsArray
    - auto::value::IsUint
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string*::append
    - auto::value::GetString
    - Controller::http_request
    - Channel::Init
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - std::string*::assign
    - auto::value::IsString
    linkageType: ''
    returnType: int
    signature: int ListDiscoveryNodes(const char* discovery_api_addr, std::string*
      servers)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ListDiscoveryNodes
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:115,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:122,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 108
    functionDepth: 2
    functionLinenumber: 108
    functionLinenumberEnd: 127
    functionName: brpc::policy::NewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ListDiscoveryNodes
    - std::string::c_str
    - Init
    - Channel::Channel
    - c_str
    - LOG
    linkageType: ''
    returnType: void
    signature: void NewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    functionName: brpc::policy::GetOrNewDiscoveryChannel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: Channel
    signature: Channel * GetOrNewDiscoveryChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:135,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:136,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::DiscoveryRegisterParam::IsValid
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool DiscoveryRegisterParam::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: brpc::policy::DiscoveryClient::DiscoveryClient
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::DiscoveryClient()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:144,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:145,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:146,1
    - Dst: DoCancel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:147,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 143
    functionDepth: 3
    functionLinenumber: 143
    functionLinenumberEnd: 149
    functionName: DiscoveryClient::~DiscoveryClient()
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - load
    - DoCancel
    - bthread_join
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void DiscoveryClient::~DiscoveryClient()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: to_string
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:152,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:154,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:156,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:159,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: auto::value::IsInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:161,1
    - Dst: auto::value::GetInt
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:164,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:165,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: auto::value::IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:166,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:167,1
    - Dst: auto::value::GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:168,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' buf'
    - error_text
    argTypes:
    - butil::IOBuf
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 171
    functionName: brpc::policy::ParseCommonResult
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - auto::value::IsInt
    - auto::value::GetInt
    - std::string::c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetStringLength
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - to_string
    - std::string*::assign
    - LOG
    - auto::value::GetString
    linkageType: ''
    returnType: int
    signature: int ParseCommonResult(const butil::IOBuf& buf, std::string* error_text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:181,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:186,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:187,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:188,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:189,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:195,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:196,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:198,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:203,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 208
    functionName: brpc::policy::DiscoveryClient::DoRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRenew() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<DiscoveryClient*>
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:211,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:214,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:215,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:223,1
    - Dst: bthread_stopped
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:225,1
    - Dst: DiscoveryClient*::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:226,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:229,1
    - Dst: DiscoveryClient*::DoRenew
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:233,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:238,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 241
    functionName: brpc::policy::DiscoveryClient::PeriodicRenew
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - bthread_stopped
    - bthread_usleep
    - DiscoveryClient*::DoRegister
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - static_cast<DiscoveryClient*>
    - bthread_self
    - LOG
    linkageType: ''
    returnType: void
    signature: void * DiscoveryClient::PeriodicRenew(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:244,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:245,1
    - Dst: IsValid
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:248,1
    - Dst: brpc::policy::DiscoveryClient::DoRegister
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:253,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:257,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - DiscoveryRegisterParam
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 243
    functionDepth: 4
    functionLinenumber: 243
    functionLinenumberEnd: 261
    functionName: brpc::policy::DiscoveryClient::Register
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - bthread_start_background
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - IsValid
    - exchange
    - LOG
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::Register(const DiscoveryRegisterParam& params)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:266,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:270,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:271,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:272,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:273,1
    - Dst: butil::SplitString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:278,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:279,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:280,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:291,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:292,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:294,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:299,1
    - Dst: Controller::remote_side
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 305
    functionName: brpc::policy::DiscoveryClient::DoRegister
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBufBuilder::move_to
    - ParseCommonResult
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - GetOrNewDiscoveryChannel
    - empty
    - Controller::Failed
    - butil::SplitString
    - std::vector::size
    - Channel*::CallMethod
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Controller::remote_side
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoRegister()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Channel::Init
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:315,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:320,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:321,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:322,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:323,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Controller::request_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:329,1
    - Dst: Channel::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:330,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:332,1
    - Dst: ParseCommonResult
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:337,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 342
    functionName: brpc::policy::DiscoveryClient::DoCancel
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller::request_attachment
    - Controller::http_request
    - Controller::response_attachment
    - Controller::ErrorText
    - Controller::Failed
    - Channel::Init
    - ParseCommonResult
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - Channel::CallMethod
    linkageType: ''
    returnType: int
    signature: int DiscoveryClient::DoCancel() const
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:349,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:350,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:351,1
    - Dst: GetOrNewDiscoveryChannel
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:356,1
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:359,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:361,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:363,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:364,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:365,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:366,1
    - Dst: Controller::http_request
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:368,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:369,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:370,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:371,1
    - Dst: Controller::response_attachment
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:375,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:377,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:378,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:379,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:382,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:383,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:384,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:388,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:389,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:390,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:394,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:396,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:401,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:405,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:408,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:409,1
    - Dst: auto::value::Accept
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:412,1
    - Dst: std::string::assign
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:413,1
    - Dst: FindMember
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:416,1
    - Dst: MemberEnd
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: auto::value::IsArray
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:418,1
    - Dst: Size
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:422,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:423,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: GetStringLength
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:428,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:429,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:432,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:436,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:444,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:447,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 69
    argCount: 2
    argNames:
    - service_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 451
    functionName: brpc::policy::DiscoveryNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 2
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - LOG_ONCE
    - Controller::response_attachment
    - Controller::ErrorText
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - butil::StringPiece::data
    - auto::value::IsArray
    - std::string::c_str
    - GetStringLength
    - std::string::append
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - Size
    - MemberEnd
    - LOG
    - std::string::assign
    - butil::string_printf
    - GetString
    - butil::StringPiece::remove_prefix
    - std::vector<ServerNode>*::push_back
    - FindMember
    - GetOrNewDiscoveryChannel
    - IsArray
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::Accept
    - butil::StringPiece::find
    - IsString
    - Controller::http_request
    - std::vector<ServerNode>*::clear
    - c_str
    - empty
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - str2endpoint
    - Channel*::CallMethod
    linkageType: ''
    returnType: int
    signature: "int DiscoveryNamingService::GetServers(const char* service_name,\n
      \                                      std::vector<ServerNode>* servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 457
    functionName: brpc::policy::DiscoveryNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DiscoveryNamingService::Describe(std::ostream& os,\n                                      const
      DescribeOptions&) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DiscoveryNamingService::DiscoveryNamingService
      Src: /src/brpc/src/brpc/policy/discovery_naming_service.cpp:460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 461
    functionName: brpc::policy::DiscoveryNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DiscoveryNamingService::DiscoveryNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DiscoveryNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 465
    functionName: brpc::policy::DiscoveryNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/discovery_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DiscoveryNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::DomainNamingService(int default_port)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:52,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:85,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: getaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:90,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:93,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: freeaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:103,1
    - Dst: gethostbyname
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:116,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: gethostbyname_r
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: hstrerror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:148,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:154,1
    - Dst: bcopy
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:159,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:162,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 88
    argCount: 2
    argNames:
    - dns_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 167
    functionName: brpc::policy::DomainNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached:
    - strtol
    - arraysize
    - butil::EndPoint::EndPoint
    - freeaddrinfo
    - reset
    - std::string
    - getaddrinfo
    - gethostbyname_r
    - get
    - LOG
    - butil::sockaddr2endpoint
    - std::vector<ServerNode>*::push_back
    - snprintf
    - memset
    - ServerNode
    - berror
    - char::char
    - bcopy
    - gethostbyname
    - std::vector<ServerNode>*::clear
    - hstrerror
    linkageType: ''
    returnType: int
    signature: "int DomainNamingService::GetServers(const char* dns_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 173
    functionName: brpc::policy::DomainNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainNamingService::DomainNamingService
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::policy::DomainNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainNamingService::DomainNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: brpc::policy::DomainNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::DomainNamingService(int default_port)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:52,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:85,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: getaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:90,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:93,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: freeaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:103,1
    - Dst: gethostbyname
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:116,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: gethostbyname_r
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: hstrerror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:148,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:154,1
    - Dst: bcopy
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:159,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:162,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 88
    argCount: 2
    argNames:
    - dns_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 167
    functionName: brpc::policy::DomainNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached:
    - strtol
    - arraysize
    - butil::EndPoint::EndPoint
    - freeaddrinfo
    - reset
    - std::string
    - getaddrinfo
    - gethostbyname_r
    - get
    - LOG
    - butil::sockaddr2endpoint
    - std::vector<ServerNode>*::push_back
    - snprintf
    - memset
    - ServerNode
    - berror
    - char::char
    - bcopy
    - gethostbyname
    - std::vector<ServerNode>*::clear
    - hstrerror
    linkageType: ''
    returnType: int
    signature: "int DomainNamingService::GetServers(const char* dns_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 173
    functionName: brpc::policy::DomainNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainNamingService::DomainNamingService
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::policy::DomainNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainNamingService::DomainNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: brpc::policy::DomainNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::DomainNamingService(int default_port)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:52,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:85,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: getaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:90,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:93,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: freeaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:103,1
    - Dst: gethostbyname
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:116,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: gethostbyname_r
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: hstrerror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:148,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:154,1
    - Dst: bcopy
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:159,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:162,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 88
    argCount: 2
    argNames:
    - dns_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 167
    functionName: brpc::policy::DomainNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached:
    - strtol
    - arraysize
    - butil::EndPoint::EndPoint
    - freeaddrinfo
    - reset
    - std::string
    - getaddrinfo
    - gethostbyname_r
    - get
    - LOG
    - butil::sockaddr2endpoint
    - std::vector<ServerNode>*::push_back
    - snprintf
    - memset
    - ServerNode
    - berror
    - char::char
    - bcopy
    - gethostbyname
    - std::vector<ServerNode>*::clear
    - hstrerror
    linkageType: ''
    returnType: int
    signature: "int DomainNamingService::GetServers(const char* dns_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 173
    functionName: brpc::policy::DomainNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainNamingService::DomainNamingService
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::policy::DomainNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainNamingService::DomainNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: brpc::policy::DomainNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_port
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: brpc::policy::DomainNamingService::DomainNamingService
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::DomainNamingService(int default_port)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerNode>*::clear
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:38,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:52,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:85,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:89,1
    - Dst: getaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:90,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:93,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:94,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:96,1
    - Dst: freeaddrinfo
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:103,1
    - Dst: gethostbyname
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:116,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:122,1
    - Dst: gethostbyname_r
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:131,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:143,1
    - Dst: hstrerror
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:148,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:154,1
    - Dst: bcopy
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:159,1
    - Dst: std::vector<ServerNode>*::push_back
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: ServerNode
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:162,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 88
    argCount: 2
    argNames:
    - dns_name
    - servers
    argTypes:
    - char*
    - std::vector<ServerNode>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 167
    functionName: brpc::policy::DomainNamingService::GetServers
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 4
    functionsReached:
    - strtol
    - arraysize
    - butil::EndPoint::EndPoint
    - freeaddrinfo
    - reset
    - std::string
    - getaddrinfo
    - gethostbyname_r
    - get
    - LOG
    - butil::sockaddr2endpoint
    - std::vector<ServerNode>*::push_back
    - snprintf
    - memset
    - ServerNode
    - berror
    - char::char
    - bcopy
    - gethostbyname
    - std::vector<ServerNode>*::clear
    - hstrerror
    linkageType: ''
    returnType: int
    signature: "int DomainNamingService::GetServers(const char* dns_name,\n                                    std::vector<ServerNode>*
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 173
    functionName: brpc::policy::DomainNamingService::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DomainNamingService::Describe(\n    std::ostream& os, const DescribeOptions&)
      const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DomainNamingService::DomainNamingService
      Src: /src/brpc/src/brpc/policy/domain_naming_service.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: brpc::policy::DomainNamingService::New
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached:
    - DomainNamingService::DomainNamingService
    linkageType: ''
    returnType: NamingService
    signature: NamingService * DomainNamingService::New() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: brpc::policy::DomainNamingService::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/domain_naming_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DomainNamingService::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:35,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:36,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:38,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:39,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:42,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 45
    functionName: brpc::policy::DynPartLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:48,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:49,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:51,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:53,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 58
    functionName: brpc::policy::DynPartLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:63,1
    - Dst: brpc::policy::DynPartLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: brpc::policy::DynPartLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:72,1
    - Dst: brpc::policy::DynPartLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: brpc::policy::DynPartLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::policy::DynPartLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:88,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: brpc::policy::DynPartLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:103,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:106,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:123,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:124,1
    - Dst: brpc::schan::GetSubChannelWeight
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: first::user
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:127,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:139,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:147,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 43
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 101
    functionDepth: 3
    functionLinenumber: 101
    functionLinenumberEnd: 155
    functionName: brpc::policy::DynPartLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SelectOut*::ptr::reset
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - RELEASE_ASSERT_VERBOSE
    - first::user
    - CHECK_EQ
    - first::release
    - brpc::schan::GetSubChannelWeight
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: int
    signature: int DynPartLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DynPartLoadBalancer::DynPartLoadBalancer
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: brpc::policy::DynPartLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DynPartLoadBalancer::DynPartLoadBalancer
    linkageType: ''
    returnType: DynPartLoadBalancer
    signature: DynPartLoadBalancer * DynPartLoadBalancer::New(const butil::StringPiece&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: brpc::policy::DynPartLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DynPartLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:173,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:176,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:177,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 182
    functionName: brpc::policy::DynPartLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void DynPartLoadBalancer::Describe(\n    std::ostream &os, const DescribeOptions&
      options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:35,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:36,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:38,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:39,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:42,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 45
    functionName: brpc::policy::DynPartLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:48,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:49,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:51,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:53,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 58
    functionName: brpc::policy::DynPartLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:63,1
    - Dst: brpc::policy::DynPartLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: brpc::policy::DynPartLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:72,1
    - Dst: brpc::policy::DynPartLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: brpc::policy::DynPartLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::policy::DynPartLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:88,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: brpc::policy::DynPartLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:103,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:106,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:123,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:124,1
    - Dst: brpc::schan::GetSubChannelWeight
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: first::user
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:127,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:139,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:147,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 43
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 101
    functionDepth: 3
    functionLinenumber: 101
    functionLinenumberEnd: 155
    functionName: brpc::policy::DynPartLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SelectOut*::ptr::reset
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - RELEASE_ASSERT_VERBOSE
    - first::user
    - CHECK_EQ
    - first::release
    - brpc::schan::GetSubChannelWeight
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: int
    signature: int DynPartLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DynPartLoadBalancer::DynPartLoadBalancer
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: brpc::policy::DynPartLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DynPartLoadBalancer::DynPartLoadBalancer
    linkageType: ''
    returnType: DynPartLoadBalancer
    signature: DynPartLoadBalancer * DynPartLoadBalancer::New(const butil::StringPiece&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: brpc::policy::DynPartLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DynPartLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:173,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:176,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:177,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 182
    functionName: brpc::policy::DynPartLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void DynPartLoadBalancer::Describe(\n    std::ostream &os, const DescribeOptions&
      options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:35,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:36,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:38,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:39,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:42,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 45
    functionName: brpc::policy::DynPartLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:48,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:49,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:51,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:53,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 58
    functionName: brpc::policy::DynPartLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:63,1
    - Dst: brpc::policy::DynPartLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: brpc::policy::DynPartLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:72,1
    - Dst: brpc::policy::DynPartLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: brpc::policy::DynPartLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::policy::DynPartLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:88,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: brpc::policy::DynPartLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:103,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:106,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:123,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:124,1
    - Dst: brpc::schan::GetSubChannelWeight
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: first::user
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:127,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:139,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:147,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 43
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 101
    functionDepth: 3
    functionLinenumber: 101
    functionLinenumberEnd: 155
    functionName: brpc::policy::DynPartLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SelectOut*::ptr::reset
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - RELEASE_ASSERT_VERBOSE
    - first::user
    - CHECK_EQ
    - first::release
    - brpc::schan::GetSubChannelWeight
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: int
    signature: int DynPartLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DynPartLoadBalancer::DynPartLoadBalancer
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: brpc::policy::DynPartLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DynPartLoadBalancer::DynPartLoadBalancer
    linkageType: ''
    returnType: DynPartLoadBalancer
    signature: DynPartLoadBalancer * DynPartLoadBalancer::New(const butil::StringPiece&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: brpc::policy::DynPartLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DynPartLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:173,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:176,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:177,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 182
    functionName: brpc::policy::DynPartLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void DynPartLoadBalancer::Describe(\n    std::ostream &os, const DescribeOptions&
      options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:35,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:36,1
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:38,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:39,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:42,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 45
    functionName: brpc::policy::DynPartLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::size
    - server_list::reserve
    - server_map::find
    - server_list::push_back
    - server_map::end
    - server_list::capacity
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Add(Servers& bg, const ServerId& id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::find
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:48,1
    - Dst: server_map::end
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:49,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:51,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:53,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 58
    functionName: brpc::policy::DynPartLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::back
    - server_map::find
    - server_list::pop_back
    - server_map::erase
    - server_map::end
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:63,1
    - Dst: brpc::policy::DynPartLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: brpc::policy::DynPartLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchAdd(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:72,1
    - Dst: brpc::policy::DynPartLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' bg'
    - ' servers'
    argTypes:
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: brpc::policy::DynPartLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::DynPartLoadBalancer::Remove
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::policy::DynPartLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool DynPartLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:88,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: brpc::policy::DynPartLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::policy::DynPartLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t DynPartLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:103,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:106,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:111,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:123,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:124,1
    - Dst: brpc::schan::GetSubChannelWeight
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: first::user
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:125,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:127,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:139,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:144,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:147,1
    - Dst: SelectOut*::ptr::reset
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    - Dst: first::release
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:150,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 43
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 101
    functionDepth: 3
    functionLinenumber: 101
    functionLinenumberEnd: 155
    functionName: brpc::policy::DynPartLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SelectOut*::ptr::reset
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - RELEASE_ASSERT_VERBOSE
    - first::user
    - CHECK_EQ
    - first::release
    - brpc::schan::GetSubChannelWeight
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: int
    signature: int DynPartLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DynPartLoadBalancer::DynPartLoadBalancer
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: brpc::policy::DynPartLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DynPartLoadBalancer::DynPartLoadBalancer
    linkageType: ''
    returnType: DynPartLoadBalancer
    signature: DynPartLoadBalancer * DynPartLoadBalancer::New(const butil::StringPiece&)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 163
    functionName: brpc::policy::DynPartLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DynPartLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:173,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:176,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp:177,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 182
    functionName: brpc::policy::DynPartLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/dynpart_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - Read
    linkageType: ''
    returnType: void
    signature: "void DynPartLoadBalancer::Describe(\n    std::ostream &os, const DescribeOptions&
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::TimeoutConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::TimeoutConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::TimeoutConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: brpc::policy::TimeoutConcurrencyLimiter::SampleWindow
    functionSourceFile: /src/brpc/src/brpc/policy/timeout_concurrency_limiter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SampleWindow()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: brpc::policy::HuluController::HuluController
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluController()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:41,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::policy::HuluController::Reset
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::Reset
    - clear
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::HuluController::request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t request_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - request_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: brpc::policy::HuluController::set_request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_source_addr(int64_t request_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: '& request_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & request_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' request_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 62
    functionName: brpc::policy::HuluController::set_request_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_user_data(const std::string& request_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::HuluController::response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t response_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - response_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 73
    functionName: brpc::policy::HuluController::set_response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_source_addr(int64_t response_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: '& response_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & response_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' response_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: brpc::policy::HuluController::set_response_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_user_data(const std::string& response_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: brpc::policy::HuluController::HuluController
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluController()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:41,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::policy::HuluController::Reset
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::Reset
    - clear
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::HuluController::request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t request_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - request_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: brpc::policy::HuluController::set_request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_source_addr(int64_t request_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: '& request_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & request_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' request_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 62
    functionName: brpc::policy::HuluController::set_request_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_user_data(const std::string& request_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::HuluController::response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t response_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - response_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 73
    functionName: brpc::policy::HuluController::set_response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_source_addr(int64_t response_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: '& response_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & response_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' response_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: brpc::policy::HuluController::set_response_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_user_data(const std::string& response_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: brpc::policy::HuluController::HuluController
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluController()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:41,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::policy::HuluController::Reset
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::Reset
    - clear
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::HuluController::request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t request_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - request_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: brpc::policy::HuluController::set_request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_source_addr(int64_t request_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: '& request_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & request_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' request_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 62
    functionName: brpc::policy::HuluController::set_request_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_user_data(const std::string& request_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::HuluController::response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t response_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - response_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 73
    functionName: brpc::policy::HuluController::set_response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_source_addr(int64_t response_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: '& response_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & response_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' response_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: brpc::policy::HuluController::set_response_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_user_data(const std::string& response_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: brpc::policy::HuluController::HuluController
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuluController()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:41,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: brpc::policy::HuluController::Reset
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::Reset
    - clear
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: brpc::policy::HuluController::request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t request_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - request_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: brpc::policy::HuluController::set_request_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_source_addr(int64_t request_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: '& request_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & request_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' request_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 62
    functionName: brpc::policy::HuluController::set_request_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_user_data(const std::string& request_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: brpc::policy::HuluController::response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t response_source_addr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - response_source_addr
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 73
    functionName: brpc::policy::HuluController::set_response_source_addr
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_source_addr(int64_t response_source_addr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 77
    functionName: '& response_user_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & response_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' response_user_data'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: brpc::policy::HuluController::set_response_user_data
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_user_data(const std::string& response_user_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - level
    - ','
    - socket
    - ','
    - mh
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: RTMP_LOG
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RTMP_LOG(level, socket, mh)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - socket
    - ','
    - mh
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: RTMP_ERROR
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RTMP_ERROR(socket, mh)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - socket
    - ','
    - mh
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: RTMP_WARNING
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RTMP_WARNING(socket, mh)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - s
    - ' msg'
    argTypes:
    - Socket*
    - SocketMessagePtr<>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::policy::WriteWithoutOvercrowded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteWithoutOvercrowded(Socket* s, SocketMessagePtr<>& msg)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 34
    argCount: 1
    argNames:
    - t
    argTypes:
    - RtmpMessageType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 91
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(RtmpMessageType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::messagetype2str
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(uint8_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:114,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:116,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: brpc::policy::InitRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: brpc::policy::GetRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:129,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:131,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: brpc::policy::InitRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::GetRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: brpc::policy::GetRtmpTimestamp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRtmpTimestamp()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 1
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 576
    functionName: brpc::policy::GetBasicHeaderLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBasicHeaderLength(uint32_t cs_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:583,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:594,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - buf
    - chunk_type
    - cs_id
    argTypes:
    - char**
    - RtmpChunkType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 597
    functionName: brpc::policy::WriteBasicHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void WriteBasicHeader(char** buf, RtmpChunkType chunk_type, uint32_t
      cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:604,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:605,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:616,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:617,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 2
    argNames:
    - fd
    - buf
    argTypes:
    - int
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 603
    functionDepth: 2
    functionLinenumber: 603
    functionLinenumberEnd: 624
    functionName: brpc::policy::WriteAll
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    - butil::IOBuf*::cut_into_file_descriptor
    - bthread_usleep
    linkageType: ''
    returnType: int
    signature: int WriteAll(int fd, butil::IOBuf* buf)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:630,1
    - Dst: adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:633,1
    - Dst: adobe_hs::C1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:636,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:640,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:651,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:652,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::GetRtmpHandshakeClientRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - fd
    - is_simple_handshake
    argTypes:
    - int
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 628
    functionDepth: 3
    functionLinenumber: 628
    functionLinenumberEnd: 656
    functionName: brpc::policy::SendC0C1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Save
    - brpc::policy::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - adobe_hs::C1::Generate
    - brpc::policy::WriteBigEndian4Bytes
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int SendC0C1(int fd, bool* is_simple_handshake)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 667
    functionName: brpc::policy::RtmpContext::state2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpContext::state2str(State s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:672,1
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:673,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' remote_side'
    - new_state
    argTypes:
    - butil::EndPoint
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 674
    functionName: brpc::policy::RtmpContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::state2str
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SetState(const butil::EndPoint& remote_side, State
      new_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:679,1
    - Dst: RtmpUnsentMessage*::body::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:684,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 4
    argNames:
    - message_type
    - chunk_stream_id
    - data
    - n
    argTypes:
    - uint8_t
    - uint32_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 686
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpUnsentMessage*::body::append
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id,\n    const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:690,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - message_type
    - data
    - n
    argTypes:
    - uint8_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 688
    functionDepth: 1
    functionLinenumber: 688
    functionLinenumberEnd: 692
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:697,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - message_type
    - chunk_stream_id
    - ' body'
    argTypes:
    - uint8_t
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 703
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 703
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - size
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id, const butil::IOBuf& body)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:707,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - message_type
    - ' body'
    argTypes:
    - uint8_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 709
      start: 705
    functionDepth: 1
    functionLinenumber: 705
    functionLinenumberEnd: 709
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const butil::IOBuf& body)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:731,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:733,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:734,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:735,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:738,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - copt
    - server
    argTypes:
    - RtmpClientOptions*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 711
    functionDepth: 1
    functionLinenumber: 711
    functionLinenumberEnd: 741
    functionName: brpc::policy::RtmpContext::RtmpContext
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    - Server*::options
    - reserve
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::RtmpContext(const RtmpClientOptions* copt, const
      Server* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:744,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:749,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:756,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:765,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:768,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:772,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:774,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:779,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 743
    functionDepth: 1
    functionLinenumber: 743
    functionLinenumberEnd: 781
    functionName: RtmpContext::~RtmpContext()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - free
    - load
    - store
    - empty
    - clear
    - begin
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::~RtmpContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 785
    functionName: brpc::policy::RtmpContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpContext::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:792,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:795,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:797,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:798,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:800,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:801,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:802,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:808,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:810,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:811,1
    - Dst: RtmpUnsentMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:812,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 787
    functionDepth: 2
    functionLinenumber: 787
    functionLinenumberEnd: 813
    functionName: brpc::policy::RtmpUnsentMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - Socket*::SetFailed
    - Socket*::parsing_context
    - release
    - std::unique_ptr::reset
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpUnsentMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 817
    functionName: RtmpContext::SubChunkArray::SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::SubChunkArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:821,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 827
    functionName: RtmpContext::SubChunkArray::~SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::~SubChunkArray()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:831,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:836,1
    - Dst: SubChunkArray::SubChunkArray
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:839,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:841,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:849,1
    - Dst: RtmpChunkStream::RtmpChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:852,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:854,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 829
    functionDepth: 1
    functionLinenumber: 829
    functionLinenumberEnd: 861
    functionName: brpc::policy::RtmpContext::GetChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_strong
    - RtmpChunkStream::RtmpChunkStream
    - LOG
    - SubChunkArray::SubChunkArray
    linkageType: ''
    returnType: RtmpChunkStream
    signature: RtmpChunkStream * RtmpContext::GetChunkStream(uint32_t cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:865,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:870,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:872,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:879,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:882,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 884
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 884
    functionName: brpc::policy::RtmpContext::ClearChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpContext::ClearChunkStream(uint32_t cs_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:887,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:888,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:889,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 886
    functionDepth: 1
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - empty
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AllocateChunkStreamId(uint32_t* chunk_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:900,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 901
      start: 898
    functionDepth: 0
    functionLinenumber: 898
    functionLinenumberEnd: 901
    functionName: brpc::policy::RtmpContext::DeallocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateChunkStreamId(uint32_t chunk_stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:904,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:905,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:906,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:909,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 903
    functionDepth: 1
    functionLinenumber: 903
    functionLinenumberEnd: 914
    functionName: brpc::policy::RtmpContext::AllocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    - empty
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AllocateMessageStreamId(uint32_t* stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:917,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 918
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 918
    functionName: brpc::policy::RtmpContext::DeallocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateMessageStreamId(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:922,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - stream_id
    - stream
    argTypes:
    - uint32_t
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 920
    functionDepth: 1
    functionLinenumber: 920
    functionLinenumberEnd: 929
    functionName: brpc::policy::RtmpContext::FindMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::FindMessageStream(\n    uint32_t stream_id, butil::intrusive_ptr<RtmpStreamBase>*
      stream)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:932,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:934,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:943,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:944,1
    - Dst: brpc::policy::RtmpContext::AllocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:947,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:948,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 931
    functionDepth: 2
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    - stream::reset
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddClientStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::AllocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:958,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:964,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:967,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 954
    functionDepth: 2
    functionLinenumber: 954
    functionLinenumberEnd: 972
    functionName: brpc::policy::RtmpContext::AddServerStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - LOG
    - brpc::policy::RtmpContext::AllocateMessageStreamId
    - stream::reset
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddServerStream(RtmpStreamBase* stream)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:976,1
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:981,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:986,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:989,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:991,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:995,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:996,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:997,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1001,1
    - Dst: brpc::policy::RtmpContext::DeallocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1002,1
    - Dst: brpc::policy::RtmpContext::DeallocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1004,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1006,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1007,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 974
    functionDepth: 1
    functionLinenumber: 974
    functionLinenumberEnd: 1010
    functionName: brpc::policy::RtmpContext::RemoveMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - RtmpStreamBase*::stream_id
    - erase
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - std::unique_lock::unlock
    - seek
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::RemoveMessageStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1021,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1029,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - out_transaction_id
    - handler
    argTypes:
    - uint32_t*
    - RtmpTransactionHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1036
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1036
    functionName: brpc::policy::RtmpContext::AddTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::AddTransaction(uint32_t* out_transaction_id,\n                                 RtmpTransactionHandler*
      handler)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1042,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1043,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1046,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - transaction_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1050
      start: 1038
    functionDepth: 1
    functionLinenumber: 1038
    functionLinenumberEnd: 1050
    functionName: brpc::policy::RtmpContext::RemoveTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - erase
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: RtmpTransactionHandler
    signature: 'RtmpTransactionHandler *

      RtmpContext::RemoveTransaction(uint32_t transaction_id)'
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1053,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1057,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1058,1
    - Dst: app::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1060,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1061,1
    - Dst: RtmpConnectRequest::set_app
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1064,1
    - Dst: flashVer::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1065,1
    - Dst: RtmpConnectRequest::set_flashver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1066,1
    - Dst: swfUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1068,1
    - Dst: RtmpConnectRequest::set_swfurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1069,1
    - Dst: tcUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1072,1
    - Dst: RtmpConnectRequest::mutable_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1073,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: app::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1075,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1077,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1078,1
    - Dst: RtmpConnectRequest::set_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1080,1
    - Dst: RtmpConnectRequest::set_fpad
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1082,1
    - Dst: RtmpConnectRequest::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1083,1
    - Dst: RtmpConnectRequest::set_audiocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1084,1
    - Dst: RtmpConnectRequest::set_videocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1085,1
    - Dst: RtmpConnectRequest::set_videofunction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1086,1
    - Dst: pageUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1087,1
    - Dst: RtmpConnectRequest::set_pageurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1088,1
    - Dst: RtmpConnectRequest::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1090,1
    - Dst: RtmpConnectRequest::set_stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1091,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1092,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1093,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1094,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1099,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1108,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1109,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1111,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1112,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1113,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1121,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1126,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1127,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1129,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1138,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1144,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1146,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1152,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 73
    argCount: 3
    argNames:
    - ' remote_side'
    - fd
    - simplified_rtmp
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1052
    functionDepth: 2
    functionLinenumber: 1052
    functionLinenumberEnd: 1153
    functionName: brpc::policy::RtmpContext::SendConnectRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - pageUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - app::empty
    - RtmpConnectRequest::set_audiocodecs
    - std::string*::push_back
    - RtmpConnectRequest::set_videofunction
    - butil::IOBuf::append
    - butil::endpoint2str
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_swfurl
    - WriteAMFObject
    - RtmpConnectRequest::mutable_tcurl
    - WriteBigEndian4Bytes
    - RtmpConnectRequest::set_tcurl
    - memcpy
    - LOG
    - RtmpConnectRequest::set_flashver
    - tcUrl::empty
    - std::string*::reserve
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf::size
    - RtmpConnectRequest::set_fpad
    - RtmpConnectRequest::set_capabilities
    - WriteAll
    - std::string*::append
    - swfUrl::empty
    - RtmpConnectRequest::set_pageurl
    - RtmpConnectRequest::set_videocodecs
    - WriteAMFUint32
    - RtmpConnectRequest::set_objectencoding
    - app::size
    - WriteAMFString
    - flashVer::empty
    - RtmpConnectRequest::set_app
    linkageType: ''
    returnType: int
    signature: int RtmpContext::SendConnectRequest(const butil::EndPoint& remote_side,
      int fd, bool simplified_rtmp)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1158,1
    - Dst: brpc::policy::RtmpContext::WaitForS0S1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1159,1
    - Dst: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1161,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1164,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1166,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1169,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1171,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1172,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1155
    functionDepth: 1
    functionLinenumber: 1155
    functionLinenumberEnd: 1173
    functionName: brpc::policy::RtmpContext::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::WaitForC2
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForS0S1
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::Feed(butil::IOBuf* source, Socket* socket)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1177,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1180,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1182,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1189,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1193,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1196,1
    - Dst: adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1199,1
    - Dst: adobe_hs::C1::schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1200,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1201,1
    - Dst: adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1206,1
    - Dst: adobe_hs::S1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1209,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1210,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1214,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: adobe_hs::C1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1223,1
    - Dst: adobe_hs::S2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1226,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1227,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1230,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1237,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpHandshakeServerRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1242,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1243,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1244,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1248,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1250,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 54
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1251
      start: 1175
    functionDepth: 2
    functionLinenumber: 1175
    functionLinenumberEnd: 1251
    functionName: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - memcmp
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - butil::IOBuf::append
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - adobe_hs::S2::Generate
    - adobe_hs::S2::Save
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::C1::digest_blk::digest
    - brpc::policy::RtmpContext::WaitForC2
    - memcpy
    - LOG
    - adobe_hs::S1::Save
    - adobe_hs::C1::Load
    - butil::IOBuf*::length
    - malloc
    - adobe_hs::S1::Generate
    - WriteAll
    - Socket*::remote_side
    - adobe_hs::C1::schema
    - GetRtmpHandshakeServerRandom
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf::push_back
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC0C1orSimpleRtmp(butil::IOBuf* source,
      Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1254,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1255,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1259,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1253
    functionDepth: 2
    functionLinenumber: 1253
    functionLinenumberEnd: 1270
    functionName: brpc::policy::RtmpContext::WaitForC2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - Socket*::remote_side
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1273,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1274,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1278,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1281,1
    - Dst: adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1285,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1286,1
    - Dst: adobe_hs::C2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1290,1
    - Dst: adobe_hs::C2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1292,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1293,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1296,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1303,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1304,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1305,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1309,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1311,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1272
    functionDepth: 2
    functionLinenumber: 1272
    functionLinenumberEnd: 1312
    functionName: brpc::policy::RtmpContext::WaitForS0S1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C2::Generate
    - adobe_hs::C2::Save
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::S1::Load
    - GetRtmpTimestamp
    - butil::IOBuf::append
    - WriteAll
    - brpc::policy::RtmpContext::WaitForS2
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS0S1(butil::IOBuf* source, Socket*
      socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1315,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1316,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1319,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: brpc::policy::RtmpContext::SendConnectRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1324,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1326,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1314
    functionDepth: 3
    functionLinenumber: 1314
    functionLinenumberEnd: 1327
    functionName: brpc::policy::RtmpContext::WaitForS2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - Socket*::fd
    - brpc::policy::RtmpContext::OnChunks
    - brpc::policy::RtmpContext::SendConnectRequest
    - Socket*::remote_side
    - butil::IOBuf*::pop_front
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1331,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1333,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1342,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1343,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1346,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1354,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1361,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1362,1
    - Dst: RtmpChunkStream*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1364,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1329
    functionDepth: 2
    functionLinenumber: 1329
    functionLinenumberEnd: 1365
    functionName: brpc::policy::RtmpContext::OnChunks
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf*::fetch
    - RtmpChunkStream*::Feed
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::size
    - MakeParseError
    - butil::IOBuf*::fetch1
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::OnChunks(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1368,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1370,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - socket
    - received_bytes
    argTypes:
    - Socket*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1372
      start: 1367
    functionDepth: 2
    functionLinenumber: 1367
    functionLinenumberEnd: 1372
    functionName: brpc::policy::SendAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteWithoutOvercrowded
    - butil::HostToNet32
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: int
    signature: int SendAck(Socket* socket, uint64_t received_bytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: SendAck
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - socket
    - sz
    argTypes:
    - Socket*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1374
    functionDepth: 1
    functionLinenumber: 1374
    functionLinenumberEnd: 1382
    functionName: brpc::policy::RtmpContext::AddReceivedBytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - PLOG_IF
    - SendAck
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AddReceivedBytes(Socket* socket, uint32_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - conn_ctx
    - cs_id
    argTypes:
    - RtmpContext*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1389
      start: 1386
    functionDepth: 0
    functionLinenumber: 1386
    functionLinenumberEnd: 1389
    functionName: brpc::policy::RtmpChunkStream::RtmpChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::RtmpChunkStream(RtmpContext* conn_ctx, uint32_t
      cs_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1396
      start: 1391
    functionDepth: 0
    functionLinenumber: 1391
    functionLinenumberEnd: 1396
    functionName: RtmpChunkStream::ReadParams::ReadParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::ReadParams::ReadParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1398
    functionDepth: 0
    functionLinenumber: 1398
    functionLinenumberEnd: 1401
    functionName: RtmpChunkStream::WriteParams::WriteParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::WriteParams::WriteParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1406,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1408
      start: 1405
    functionDepth: 1
    functionLinenumber: 1405
    functionLinenumberEnd: 1408
    functionName: brpc::policy::InitClientMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitClientMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1413,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1415
      start: 1412
    functionDepth: 1
    functionLinenumber: 1412
    functionLinenumberEnd: 1415
    functionName: brpc::policy::InitServerMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitServerMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1420
      start: 1420
    functionDepth: 0
    functionLinenumber: 1420
    functionLinenumberEnd: 1420
    functionName: brpc::policy::ChunkStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChunkStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ChunkStatus>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1424
      start: 1422
    functionDepth: 0
    functionLinenumber: 1422
    functionLinenumberEnd: 1424
    functionName: brpc::policy::AddChunk
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ChunkStatus>
    linkageType: ''
    returnType: void
    signature: void AddChunk()
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1434,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1444,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1445,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1448,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1450,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1453,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1454,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1456,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1458,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1462,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1464,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1465,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1466,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1487,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1490,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1492,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1495,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1496,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1498,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1500,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1504,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1506,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1509,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1511,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1512,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1513,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1528,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1529,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1532,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1534,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1537,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1538,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1540,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1542,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1546,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1548,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1552,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1553,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1554,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1567,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1568,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1571,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1573,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1587,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1589,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1597,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1598,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1599,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1607,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1608,1
    - Dst: RtmpContext*::AddReceivedBytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1609,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: AddChunk
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1619,1
    - Dst: RtmpContext*::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1623,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1624,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1627,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1631,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1632,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1634,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1635,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1638,1
    - Dst: msg_body::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1640,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1646,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 158
    argCount: 3
    argNames:
    - ' bh'
    - source
    - socket
    argTypes:
    - RtmpBasicHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1426
    functionDepth: 1
    functionLinenumber: 1426
    functionLinenumberEnd: 1647
    functionName: brpc::policy::RtmpChunkStream::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - msg_body::clear
    - VLOG
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - AddChunk
    - butil::IOBuf*::fetch
    - RtmpContext*::AddReceivedBytes
    - butil::Timer::start
    - MethodStatus*::OnRequested
    - RtmpContext*::service
    - MakeMessage
    - brpc::policy::RtmpChunkStream::OnMessage
    - LOG
    - butil::Timer::Timer
    - ReadBigEndian3Bytes
    - butil::Timer::u_elapsed
    - butil::IOBuf*::size
    - CHECK
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - pthread_once
    - butil::Timer::stop
    - std::min
    - MethodStatus*::OnResponded
    - last_msg_header::is_valid
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult RtmpChunkStream::Feed(const RtmpBasicHeader& bh,\n                                  butil::IOBuf*
      source, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: GetBasicHeaderLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1652,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1654,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1662,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1664,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1669,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1679,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1680,1
    - Dst: WriteLittleEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1682,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1692,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1693,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1704,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1711,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1715,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1716,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1717,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1725,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1730,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1734,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1736,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1737,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 65
    argCount: 3
    argNames:
    - buf
    - ' mh'
    - body
    argTypes:
    - butil::IOBuf*
    - RtmpMessageHeader
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1740
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1740
    functionName: brpc::policy::RtmpChunkStream::SerializeMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::size
    - std::min
    - butil::IOBuf*::append
    - GetBasicHeaderLength
    - WriteBigEndian4Bytes
    - WriteBigEndian3Bytes
    - CHECK
    - last_msg_header::is_valid
    - CHECK_LE
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::cutn
    - WriteLittleEndian4Bytes
    - WriteBasicHeader
    linkageType: ''
    returnType: int
    signature: "int RtmpChunkStream::SerializeMessage(butil::IOBuf* buf,\n                                      const
      RtmpMessageHeader& mh,\n                                      butil::IOBuf*
      body)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CommandHandlerMap::CommandHandlerMap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1772,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1773,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1774,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1770
    functionDepth: 1
    functionLinenumber: 1770
    functionLinenumberEnd: 1794
    functionName: brpc::policy::InitCommandHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - init
    - CommandHandlerMap::CommandHandlerMap
    linkageType: ''
    returnType: void
    signature: void InitCommandHandlers()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1810,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1815,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1816,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1821,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1831,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 4
    argNames:
    - ' bh'
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpBasicHeader
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1834
      start: 1796
    functionDepth: 1
    functionLinenumber: 1796
    functionLinenumberEnd: 1834
    functionName: brpc::policy::RtmpChunkStream::OnMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::size
    - arraysize
    - CHECK_EQ
    - Socket*::remote_side
    - RTMP_ERROR
    - VLOG
    - messagetype2str
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnMessage(const RtmpBasicHeader& bh,\n                                const
      RtmpMessageHeader& mh,\n                                butil::IOBuf* msg_body,\n
      \                               Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1839,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1844,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1845,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1847,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1851,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1852,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1856
      start: 1836
    functionDepth: 1
    functionLinenumber: 1836
    functionLinenumberEnd: 1856
    functionName: brpc::policy::RtmpChunkStream::OnSetChunkSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetChunkSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1861,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1866,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1867,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1869,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1872,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1874
      start: 1858
    functionDepth: 1
    functionLinenumber: 1858
    functionLinenumberEnd: 1874
    functionName: brpc::policy::RtmpChunkStream::OnAbortMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAbortMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1879,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1884,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1885,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1876
    functionDepth: 1
    functionLinenumber: 1876
    functionLinenumberEnd: 1890
    functionName: brpc::policy::RtmpChunkStream::OnAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAck(\n    const RtmpMessageHeader& mh, butil::IOBuf*
      msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1895,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1900,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1901,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1902,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1903,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1904,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1907
      start: 1892
    functionDepth: 1
    functionLinenumber: 1892
    functionLinenumberEnd: 1907
    functionName: brpc::policy::RtmpChunkStream::OnWindowAckSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnWindowAckSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1912,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1917,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1918,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1920,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1924
      start: 1909
    functionDepth: 1
    functionLinenumber: 1909
    functionLinenumberEnd: 1924
    functionName: brpc::policy::RtmpChunkStream::OnSetPeerBandwidth
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetPeerBandwidth(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1929,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1934,1
    - Dst: ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1935,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamBegin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1939,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamEOF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1941,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamDry
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1943,1
    - Dst: brpc::policy::RtmpChunkStream::OnSetBufferLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1945,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1947,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1949,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1951,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferEmpty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1953,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferReady
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1955,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1957,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 28
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1959
      start: 1926
    functionDepth: 1
    functionLinenumber: 1926
    functionLinenumberEnd: 1959
    functionName: brpc::policy::RtmpChunkStream::OnUserControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnPingRequest
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnUserControlMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1964,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1966,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1969,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1970,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1971,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1976
      start: 1961
    functionDepth: 1
    functionLinenumber: 1961
    functionLinenumberEnd: 1976
    functionName: brpc::policy::RtmpChunkStream::OnStreamBegin
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamBegin(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1981,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1983,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1986,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1987,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1988,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1993
      start: 1978
    functionDepth: 1
    functionLinenumber: 1978
    functionLinenumberEnd: 1993
    functionName: brpc::policy::RtmpChunkStream::OnStreamEOF
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamEOF(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1998,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2000,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2003,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2004,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2005,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2010
      start: 1995
    functionDepth: 1
    functionLinenumber: 1995
    functionLinenumberEnd: 2010
    functionName: brpc::policy::RtmpChunkStream::OnStreamDry
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamDry(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2015,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2017,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2020,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2021,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2022,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2027
      start: 2012
    functionDepth: 1
    functionLinenumber: 2012
    functionLinenumberEnd: 2027
    functionName: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamIsRecorded(const RtmpMessageHeader&
      mh,\n                                         const butil::StringPiece& event_data,\n
      \                                        Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2032,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2034,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2037,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2038,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2039,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2044,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2051,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2052,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2053,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2058
    functionName: brpc::policy::RtmpChunkStream::OnSetBufferLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetBufferLength(const RtmpMessageHeader& mh,\n
      \                                       const butil::StringPiece& event_data,\n
      \                                       Socket* socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2063,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2065,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2068,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2069,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2070,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2076,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2077,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2080,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2081,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2085
    functionName: brpc::policy::RtmpChunkStream::OnPingRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - WriteBigEndian2Bytes
    - size
    - WriteBigEndian4Bytes
    - data
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - PLOG
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingRequest(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2090,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2092,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2095,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2096,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2097,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: RtmpService*::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2103
      start: 2087
    functionDepth: 1
    functionLinenumber: 2087
    functionLinenumberEnd: 2103
    functionName: brpc::policy::RtmpChunkStream::OnPingResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpService*::OnPingResponse
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingResponse(const RtmpMessageHeader& mh,\n
      \                                    const butil::StringPiece& event_data,\n
      \                                    Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2111,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2112,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2113,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2121
      start: 2105
    functionDepth: 1
    functionLinenumber: 2105
    functionLinenumberEnd: 2121
    functionName: brpc::policy::RtmpChunkStream::OnBufferEmpty
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferEmpty(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2126,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2127,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2128,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2136
      start: 2123
    functionDepth: 1
    functionLinenumber: 2123
    functionLinenumberEnd: 2136
    functionName: brpc::policy::RtmpChunkStream::OnBufferReady
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferReady(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2141,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2152,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2156,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2157,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: butil::intrusive_ptr::CallOnAudioMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2138
    functionDepth: 1
    functionLinenumber: 2138
    functionLinenumberEnd: 2164
    functionName: brpc::policy::RtmpChunkStream::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - butil::intrusive_ptr::CallOnAudioMessage
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAudioMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2169,1
    - Dst: is_video_frame_type_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2178,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2179,1
    - Dst: is_video_codec_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2181,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2182,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2184,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2188,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2189,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: butil::intrusive_ptr::CallOnVideoMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2196
      start: 2166
    functionDepth: 1
    functionLinenumber: 2166
    functionLinenumberEnd: 2196
    functionName: brpc::policy::RtmpChunkStream::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::intrusive_ptr::CallOnVideoMessage
    - butil::IOBuf*::cut1
    - is_video_frame_type_valid
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - is_video_codec_valid
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnVideoMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2209,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2213,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2218,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2224,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2225,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2229,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2230,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: butil::intrusive_ptr::CallOnMetaData
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2235,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2238,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2243,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2244,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2248,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2249,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: butil::intrusive_ptr::CallOnCuePoint
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2254,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2262
      start: 2198
    functionDepth: 1
    functionLinenumber: 2198
    functionLinenumberEnd: 2262
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - butil::intrusive_ptr::CallOnCuePoint
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::CallOnMetaData
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - AMFInputStream::check_emptiness
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2268
      start: 2264
    functionDepth: 1
    functionLinenumber: 2264
    functionLinenumberEnd: 2268
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF0(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2275,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2276,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2279,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2282,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2284,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2290
      start: 2270
    functionDepth: 1
    functionLinenumber: 2270
    functionLinenumberEnd: 2290
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2294,1
    - Dst: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2296
      start: 2292
    functionDepth: 2
    functionLinenumber: 2292
    functionLinenumberEnd: 2296
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2302
      start: 2298
    functionDepth: 1
    functionLinenumber: 2298
    functionLinenumberEnd: 2302
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF3(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2306,1
    - Dst: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2308
      start: 2304
    functionDepth: 2
    functionLinenumber: 2304
    functionLinenumberEnd: 2308
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2314
      start: 2310
    functionDepth: 1
    functionLinenumber: 2310
    functionLinenumberEnd: 2314
    functionName: brpc::policy::RtmpChunkStream::OnAggregateMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAggregateMessage(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2337,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2341,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2342,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2345,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2346,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2347,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2350,1
    - Dst: RtmpConnectRequest*::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2351,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2359,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2366,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2380,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2381,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2387,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2397,1
    - Dst: RtmpConnectResponse::has_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2398,1
    - Dst: RtmpConnectResponse::set_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2399,1
    - Dst: RtmpConnectResponse::has_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2401,1
    - Dst: RtmpConnectResponse::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2402,1
    - Dst: RtmpConnectResponse::has_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2404,1
    - Dst: RtmpConnectResponse::set_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2405,1
    - Dst: RtmpConnectResponse::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2407,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2408,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2410,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2411,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2412,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2413,1
    - Dst: RtmpInfo::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpConnectRequest*::objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2416,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2417,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2418,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2420,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2424,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2427,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2431,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2432,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2433,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2438,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2440,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2443,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2445,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2448,1
    - Dst: RtmpConnectResponse::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2449,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2450,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 69
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2452
      start: 2333
    functionDepth: 1
    functionLinenumber: 2333
    functionLinenumberEnd: 2452
    functionName: brpc::policy::RtmpChunkStream::OnConnect
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - RtmpInfo::set_objectencoding
    - RtmpConnectResponse::set_capabilities
    - TemporaryArrayBuilder::push
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::has_fmsver
    - butil::IOBuf::clear
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFObject
    - next::reset
    - TemporaryArrayBuilder::size
    - RtmpConnectResponse::ShortDebugString
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - RtmpConnectResponse::has_capabilities
    - PLOG
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    - RtmpConnectResponse::set_fmsver
    - CHECK
    - release
    - Socket*::remote_side
    - Socket*::Write
    - WriteAMFUint32
    - RtmpConnectResponse::has_mode
    - Socket*::SetFailed
    - RtmpConnectRequest*::objectencoding
    - std::string::empty
    - RtmpConnectResponse::set_mode
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnConnect(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' mh'
    - socket
    argTypes:
    - RtmpMessageHeader
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2460
      start: 2454
    functionDepth: 0
    functionLinenumber: 2454
    functionLinenumberEnd: 2460
    functionName: brpc::policy::RtmpChunkStream::OnBWDone
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBWDone(const RtmpMessageHeader& mh,\n                               AMFInputStream*,\n
      \                              Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: saved_on_connect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2469
      start: 2462
    functionDepth: 0
    functionLinenumber: 2462
    functionLinenumberEnd: 2469
    functionName: brpc::policy::RtmpContext::OnConnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - saved_on_connect
    linkageType: ''
    returnType: void
    signature: void RtmpContext::OnConnected(int error_code)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2474,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2475,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2481,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2482,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2489,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2490,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2492,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2499,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2500,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2504,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2506,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2511,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2513
      start: 2471
    functionDepth: 1
    functionLinenumber: 2471
    functionLinenumberEnd: 2513
    functionName: brpc::policy::RtmpChunkStream::OnResult
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - CHECK
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnResult(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream, Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2519,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2520,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2525,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2529,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2530,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2534,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2536,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2540,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2542
      start: 2515
    functionDepth: 1
    functionLinenumber: 2515
    functionLinenumberEnd: 2542
    functionName: brpc::policy::RtmpChunkStream::OnError
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnError(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2547,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2548,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2552,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2553,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2556,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2557,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2561,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2562,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2565,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2566,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2567,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2570,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2571,1
    - Dst: static_cast<RtmpClientStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2574
      start: 2544
    functionDepth: 1
    functionLinenumber: 2544
    functionLinenumberEnd: 2574
    functionName: brpc::policy::RtmpChunkStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpClientStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStatus(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream,\n                               Socket* socket)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2579,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2581,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2585,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2586,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2593,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2594,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2597,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2598,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2599,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2601,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2602,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2603,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2606,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2607,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2611,1
    - Dst: RtmpService*::NewStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2622,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2624,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2627,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2632,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2633,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2634,1
    - Dst: butil::intrusive_ptr<RtmpServerStream>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2638,1
    - Dst: Socket*::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2639,1
    - Dst: Socket*::NotifyOnFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2640,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2650,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2651,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2652,1
    - Dst: AMFObject::SetBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2654,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2655,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2657,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2661,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2665,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2666,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2667,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2674,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2680,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2684,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2687,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2690,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2694,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2695,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2696,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2705,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2707,1
    - Dst: brpc::policy::RtmpChunkStream::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2709,1
    - Dst: brpc::policy::RtmpChunkStream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2711,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 95
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2713
      start: 2576
    functionDepth: 3
    functionLinenumber: 2576
    functionLinenumberEnd: 2713
    functionName: brpc::policy::RtmpChunkStream::OnCreateStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - AMFOutputStream::good
    - AMFObject::Find
    - butil::intrusive_ptr::OnStopInternal
    - WriteAMFNull
    - bthread_id_create
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::OnPublish
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - RtmpService*::NewStream
    - WriteAMFObject
    - WriteWithoutOvercrowded
    - Socket*::NotifyOnFailed
    - AMFObject::SetBool
    - RtmpPublishType2Str
    - RTMP_ERROR
    - bthread_id_error
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - Socket*::ReAddress
    - butil::intrusive_ptr<RtmpServerStream>
    - AMFField*::IsString
    - butil::intrusive_ptr::stream_id
    - butil::IOBuf::size
    - brpc::policy::RtmpChunkStream::OnPlay
    - stream_multiplexing
    - CHECK
    - Str2RtmpPublishType
    - berror
    - Socket*::remote_side
    - AMFField*::AsString
    - WriteAMFUint32
    - std::string::empty
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCreateStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2726,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2736,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2741,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2743
      start: 2723
    functionDepth: 1
    functionLinenumber: 2723
    functionLinenumberEnd: 2743
    functionName: brpc::policy::OnPlayContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - error_cstr
    - ok
    - SendStopMessage
    - stream_id
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnPlayContinuation::Run()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2748,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2749,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2753,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2754,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2759,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2760,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2764,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2765,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2770,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2771,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2772,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2776,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2777,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2778,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2782,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2783,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2784,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2788,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2795,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2804,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2805,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2813,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2817,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2818,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2819,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2821,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2822,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2823,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2824,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2826,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2827,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2830,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2832,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2836,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2840,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2841,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2842,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2844,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2845,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2846,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2847,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2849,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2850,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2853,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2855,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2858,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2862,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2863,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2864,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2866,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2867,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2870,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2872,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2875,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2879,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2881,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2882,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2884,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2885,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2888,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2890,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2892,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2893,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2894,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2899,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2902,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2905,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: RtmpServerStream*::OnPause
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2915,1
    - Dst: OnPlayContinuation::OnPlayContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2918,1
    - Dst: OnPlayContinuation*::player_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2919,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2920,1
    - Dst: OnPlayContinuation*::player_stream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2921,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 115
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2923
      start: 2745
    functionDepth: 1
    functionLinenumber: 2745
    functionLinenumberEnd: 2923
    functionName: brpc::policy::RtmpChunkStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - WriteAMFNull
    - OnPlayContinuation::OnPlayContinuation
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - OnPlayContinuation*::player_stream::OnPlay
    - RtmpServerStream*::OnPause
    - TemporaryArrayBuilder::push
    - static_cast<RtmpServerStream*>
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ReadAMFNumber
    - WriteAMFObject
    - next::reset
    - WriteBigEndian2Bytes
    - TemporaryArrayBuilder::size
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - ReadAMFString
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - AMFInputStream*::check_emptiness
    - ReadAMFBool
    - butil::IOBuf::size
    - release
    - Socket*::remote_side
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - RTMP_WARNING
    - WriteAMFUint32
    - butil::intrusive_ptr::detach
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2928,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2929,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2933,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2934,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2937,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2938,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2942,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2943,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2946,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2947,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2948,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2953
      start: 2925
    functionDepth: 1
    functionLinenumber: 2925
    functionLinenumberEnd: 2953
    functionName: brpc::policy::RtmpChunkStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay2(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2958,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2959,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2963,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2964,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2967,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2968,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2972,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2973,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2976,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2977,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2984,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2987
      start: 2955
    functionDepth: 1
    functionLinenumber: 2955
    functionLinenumberEnd: 2987
    functionName: brpc::policy::RtmpChunkStream::OnDeleteStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDeleteStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2992,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2993,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2997,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2998,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3001,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3002,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3005,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3006,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3017
      start: 2989
    functionDepth: 1
    functionLinenumber: 2989
    functionLinenumberEnd: 3017
    functionName: brpc::policy::RtmpChunkStream::OnCloseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCloseStream(const RtmpMessageHeader& mh,\n
      \                                   AMFInputStream* istream,\n                                    Socket*
      socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3030,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3032,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3033,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3037,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3042,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3046,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3047,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3048,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3050,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3051,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3052,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3056,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3057,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3059,1
    - Dst: chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3060,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3065,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3067
      start: 3028
    functionDepth: 1
    functionLinenumber: 3028
    functionLinenumberEnd: 3067
    functionName: brpc::policy::OnPublishContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - error_cstr
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - stream_id
    - butil::IOBuf::IOBuf
    - remote_side
    - WriteAMFObject
    - SendStopMessage
    - WriteWithoutOvercrowded
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - ok
    - chunk_stream_id
    - butil::IOBuf::size
    - CHECK
    - WriteAMFUint32
    - socket
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_description
    linkageType: ''
    returnType: void
    signature: void OnPublishContinuation::Run()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3072,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3073,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3077,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3078,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3081,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3082,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3086,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3087,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3091,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3092,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3096,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3097,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3101,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3104,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3106,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3107,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3108,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3113,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: OnPublishContinuation::OnPublishContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3116,1
    - Dst: OnPublishContinuation*::publish_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3118,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3119,1
    - Dst: RtmpServerStream*::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3120,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3122
      start: 3069
    functionDepth: 1
    functionLinenumber: 3069
    functionLinenumberEnd: 3122
    functionName: brpc::policy::RtmpChunkStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::intrusive_ptr::detach
    - brpc::policy::RtmpChunkStream::connection_context
    - OnPublishContinuation::OnPublishContinuation
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::get
    - RtmpServerStream*::OnPublish
    - RtmpPublishType2Str
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPublish(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3125,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3129,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3130,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3131,1
    - Dst: WriteAMFUndefined
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3132,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3137,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - sock
    - transaction_id
    argTypes:
    - Socket*
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3142
      start: 3124
    functionDepth: 1
    functionLinenumber: 3124
    functionLinenumberEnd: 3142
    functionName: brpc::policy::SendFMLEStartResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - WriteAMFUndefined
    - PLOG
    - WriteAMFString
    - CHECK
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: bool SendFMLEStartResponse(Socket* sock, double transaction_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3146,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3147,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3151,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3152,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3155,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3156,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3160,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3161,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3164,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3166
      start: 3144
    functionDepth: 1
    functionLinenumber: 3144
    functionLinenumberEnd: 3166
    functionName: brpc::policy::RtmpChunkStream::OnReleaseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnReleaseStream(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3170,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3171,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3175,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3176,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3179,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3180,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3184,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3185,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3188,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3189,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3190
      start: 3168
    functionDepth: 1
    functionLinenumber: 3168
    functionLinenumberEnd: 3190
    functionName: brpc::policy::RtmpChunkStream::OnFCPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCPublish(\n    const RtmpMessageHeader& mh,
      AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3194,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3195,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3199,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3200,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3209,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3212,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3213,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3214
      start: 3192
    functionDepth: 1
    functionLinenumber: 3192
    functionLinenumberEnd: 3214
    functionName: brpc::policy::RtmpChunkStream::OnFCUnpublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCUnpublish(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3226
      start: 3216
    functionDepth: 0
    functionLinenumber: 3216
    functionLinenumberEnd: 3226
    functionName: brpc::policy::RtmpChunkStream::OnGetStreamLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnGetStreamLength(\n    const RtmpMessageHeader&,
      AMFInputStream*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3231
      start: 3228
    functionDepth: 0
    functionLinenumber: 3228
    functionLinenumberEnd: 3231
    functionName: brpc::policy::RtmpChunkStream::OnCheckBW
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCheckBW(\n    const RtmpMessageHeader&, AMFInputStream*,
      Socket*)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3236,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3237,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3241,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3242,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3245,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3246,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3250,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3251,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3255,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3256,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3257,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3262,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3267,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3268,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3269,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3271,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3272,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3273,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3274,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3277,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3278,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3279,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3281,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3282,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3283,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3288,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3289,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3295,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3300
      start: 3233
    functionDepth: 1
    functionLinenumber: 3233
    functionLinenumberEnd: 3300
    functionName: brpc::policy::RtmpChunkStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - Socket*::Write
    - WriteAMFUint32
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSeek(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3305,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3306,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3310,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3311,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3314,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3315,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3319,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3320,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3324,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3325,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3329,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3330,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3331,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3338,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3346,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3351,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3352,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3353,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3356,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3358,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3360,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3361,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3362,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3365,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3366,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3367,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3370,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3372,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3374,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3375,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3377,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3381,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3382,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3385,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3392,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3394,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3396,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3397,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3399,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3401,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 82
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3411
      start: 3302
    functionDepth: 1
    functionLinenumber: 3302
    functionLinenumberEnd: 3411
    functionName: brpc::policy::RtmpChunkStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - MakeUnsentControlMessage
    - ReadAMFNumber
    - WriteAMFObject
    - WriteBigEndian2Bytes
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - ReadAMFBool
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPause(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3416,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3418,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3421,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3423,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3424
      start: 3415
    functionDepth: 0
    functionLinenumber: 3415
    functionLinenumberEnd: 3424
    functionName: brpc::policy::IsPossiblyRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::fetch1
    - MakeParseError
    - MakeMessage
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult IsPossiblyRtmp(const butil::IOBuf* source)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3432,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3434,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3435,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3442,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3446,1
    - Dst: brpc::policy::IsPossiblyRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3448,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3449,1
    - Dst: RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3454,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3455,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3457,1
    - Dst: RtmpContext*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3460,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3461
      start: 3426
    functionDepth: 1
    functionLinenumber: 3426
    functionLinenumberEnd: 3461
    functionName: brpc::policy::ParseRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    - MakeParseError
    - RtmpContext::RtmpContext
    - RtmpContext*::Feed
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - brpc::policy::IsPossiblyRtmp
    - Socket*::reset_parsing_context
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRtmpMessage(butil::IOBuf* source, Socket *socket,
      bool read_eof,\n                             const void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3465
      start: 3463
    functionDepth: 1
    functionLinenumber: 3463
    functionLinenumberEnd: 3465
    functionName: brpc::policy::ProcessRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRtmpMessage(InputMessageBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - stream
    - call_id
    argTypes:
    - RtmpClientStream*
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3480
      start: 3478
    functionDepth: 0
    functionLinenumber: 3478
    functionLinenumberEnd: 3480
    functionName: brpc::policy::OnServerStreamCreated::OnServerStreamCreated
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::OnServerStreamCreated(\n    RtmpClientStream*
      stream, CallId call_id)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3490,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3493,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3496,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3499,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3501,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3502,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3507,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3511,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3514,1
    - Dst: AMFField*::IsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: AMFField*::AsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3525,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3530,1
    - Dst: RtmpContext*::AddClientStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3539,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3543,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3548,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3554,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3555
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3555
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - AMFObject::Find
    - ControllerPrivateAccessor::span
    - AMFInputStream*::popped_bytes
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - RtmpContext*::AddClientStream
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - get
    - Span*::set_response_size
    - LOG
    - RtmpInfo::description
    - LOG_IF
    - butil::gettimeofday_us
    - ReadAMFUint32
    - AMFField*::AsBool
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Controller*::OnVersionedRPCReturned
    - RtmpInfo::code
    - Span*::set_base_real_us
    - AMFField*::IsBool
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::Run(bool error,\n                                const
      RtmpMessageHeader&,\n                                AMFInputStream* istream,\n
      \                               Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3559
      start: 3557
    functionDepth: 0
    functionLinenumber: 3557
    functionLinenumberEnd: 3559
    functionName: brpc::policy::OnServerStreamCreated::Cancel
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnServerStreamCreated::Cancel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3565,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3571,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3573,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3578,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3589,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3591,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3592,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3593,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3597,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3598,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3600,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3602,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3605,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3609,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3613,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3617,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3622,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3624,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3625
      start: 3561
    functionDepth: 2
    functionLinenumber: 3561
    functionLinenumberEnd: 3625
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - WriteAMFObject
    - AMFObject::SetString
    - static_cast<RtmpContext*>
    - description
    - RtmpPublishType2Str
    - play_name::empty
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf::size
    - CHECK
    - parsing_context
    - publish_name::empty
    - WriteAMFUint32
    - WriteAMFString
    - SetFailed
    - RtmpContext*::GetChunkStream
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpCreateStreamMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3640,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3644,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3650,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3653,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3655,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3660,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3666,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3668,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3670
      start: 3627
    functionDepth: 1
    functionLinenumber: 3627
    functionLinenumberEnd: 3670
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::set_log_id
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - OnServerStreamCreated::OnServerStreamCreated
    - Controller*::log_id
    - Socket*::parsing_context
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpTransactionHandler*::Cancel
    - RtmpContext*::AddTransaction
    - Controller*::call_id
    - RtmpClientStream*::options
    - butil::BaseIteratorRangeToNumberTraits::max
    - Socket*::description
    - CHECK_LT
    - Controller*::SetFailed
    - Controller*::response
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: "void PackRtmpRequest(butil::IOBuf* /*buf*/,\n                     SocketMessage**
      user_message,\n                     uint64_t /*correlation_id*/,\n                     const
      google::protobuf::MethodDescriptor* /*NULL*/,\n                     Controller*
      cntl,\n                     const butil::IOBuf& /*request*/,\n                     const
      Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3675
      start: 3672
    functionDepth: 0
    functionLinenumber: 3672
    functionLinenumberEnd: 3675
    functionName: brpc::policy::SerializeRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeRtmpRequest(butil::IOBuf* /*buf*/,\n                          Controller*
      /*cntl*/,\n                          const google::protobuf::Message* /*NULL*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - s
    - ' msg'
    argTypes:
    - Socket*
    - SocketMessagePtr<>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::policy::WriteWithoutOvercrowded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteWithoutOvercrowded(Socket* s, SocketMessagePtr<>& msg)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 34
    argCount: 1
    argNames:
    - t
    argTypes:
    - RtmpMessageType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 91
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(RtmpMessageType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::messagetype2str
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(uint8_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:114,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:116,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: brpc::policy::InitRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: brpc::policy::GetRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:129,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:131,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: brpc::policy::InitRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::GetRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: brpc::policy::GetRtmpTimestamp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRtmpTimestamp()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 576
    functionName: brpc::policy::GetBasicHeaderLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBasicHeaderLength(uint32_t cs_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:583,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:594,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - buf
    - chunk_type
    - cs_id
    argTypes:
    - char**
    - RtmpChunkType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 597
    functionName: brpc::policy::WriteBasicHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void WriteBasicHeader(char** buf, RtmpChunkType chunk_type, uint32_t
      cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:604,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:605,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:616,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:617,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 2
    argNames:
    - fd
    - buf
    argTypes:
    - int
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 603
    functionDepth: 2
    functionLinenumber: 603
    functionLinenumberEnd: 624
    functionName: brpc::policy::WriteAll
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    - butil::IOBuf*::cut_into_file_descriptor
    - bthread_usleep
    linkageType: ''
    returnType: int
    signature: int WriteAll(int fd, butil::IOBuf* buf)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:630,1
    - Dst: adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:633,1
    - Dst: adobe_hs::C1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:636,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:640,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:651,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:652,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::GetRtmpHandshakeClientRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - fd
    - is_simple_handshake
    argTypes:
    - int
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 628
    functionDepth: 3
    functionLinenumber: 628
    functionLinenumberEnd: 656
    functionName: brpc::policy::SendC0C1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Save
    - brpc::policy::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - adobe_hs::C1::Generate
    - brpc::policy::WriteBigEndian4Bytes
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int SendC0C1(int fd, bool* is_simple_handshake)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 667
    functionName: brpc::policy::RtmpContext::state2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpContext::state2str(State s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:672,1
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:673,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' remote_side'
    - new_state
    argTypes:
    - butil::EndPoint
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 674
    functionName: brpc::policy::RtmpContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::RtmpContext::state2str
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SetState(const butil::EndPoint& remote_side, State
      new_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:679,1
    - Dst: RtmpUnsentMessage*::body::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:684,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 4
    argNames:
    - message_type
    - chunk_stream_id
    - data
    - n
    argTypes:
    - uint8_t
    - uint32_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 686
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 9
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpUnsentMessage*::body::append
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id,\n    const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:690,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - message_type
    - data
    - n
    argTypes:
    - uint8_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 688
    functionDepth: 1
    functionLinenumber: 688
    functionLinenumberEnd: 692
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:697,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - message_type
    - chunk_stream_id
    - ' body'
    argTypes:
    - uint8_t
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 703
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 703
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - size
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id, const butil::IOBuf& body)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:707,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - message_type
    - ' body'
    argTypes:
    - uint8_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 709
      start: 705
    functionDepth: 1
    functionLinenumber: 705
    functionLinenumberEnd: 709
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 11
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const butil::IOBuf& body)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:731,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:733,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:734,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:735,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:738,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - copt
    - server
    argTypes:
    - RtmpClientOptions*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 711
    functionDepth: 1
    functionLinenumber: 711
    functionLinenumberEnd: 741
    functionName: brpc::policy::RtmpContext::RtmpContext
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    - Server*::options
    - reserve
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::RtmpContext(const RtmpClientOptions* copt, const
      Server* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:744,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:749,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:756,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:765,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:768,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:772,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:774,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:779,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 743
    functionDepth: 1
    functionLinenumber: 743
    functionLinenumberEnd: 781
    functionName: RtmpContext::~RtmpContext()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - free
    - load
    - store
    - empty
    - clear
    - begin
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::~RtmpContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 785
    functionName: brpc::policy::RtmpContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpContext::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:792,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:795,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:797,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:798,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:800,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:801,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:802,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:808,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:810,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:811,1
    - Dst: RtmpUnsentMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:812,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 787
    functionDepth: 2
    functionLinenumber: 787
    functionLinenumberEnd: 813
    functionName: brpc::policy::RtmpUnsentMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - Socket*::SetFailed
    - Socket*::parsing_context
    - release
    - std::unique_ptr::reset
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpUnsentMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 817
    functionName: RtmpContext::SubChunkArray::SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::SubChunkArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:821,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 827
    functionName: RtmpContext::SubChunkArray::~SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::~SubChunkArray()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:831,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:836,1
    - Dst: SubChunkArray::SubChunkArray
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:839,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:841,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:849,1
    - Dst: RtmpChunkStream::RtmpChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:852,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:854,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 829
    functionDepth: 1
    functionLinenumber: 829
    functionLinenumberEnd: 861
    functionName: brpc::policy::RtmpContext::GetChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - load
    - compare_exchange_strong
    - RtmpChunkStream::RtmpChunkStream
    - LOG
    - SubChunkArray::SubChunkArray
    linkageType: ''
    returnType: RtmpChunkStream
    signature: RtmpChunkStream * RtmpContext::GetChunkStream(uint32_t cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:865,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:870,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:872,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:879,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:882,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 884
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 884
    functionName: brpc::policy::RtmpContext::ClearChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpContext::ClearChunkStream(uint32_t cs_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:887,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:888,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:889,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 886
    functionDepth: 1
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - pop_back
    - back
    - empty
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AllocateChunkStreamId(uint32_t* chunk_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:900,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 901
      start: 898
    functionDepth: 0
    functionLinenumber: 898
    functionLinenumberEnd: 901
    functionName: brpc::policy::RtmpContext::DeallocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateChunkStreamId(uint32_t chunk_stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:904,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:905,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:906,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:909,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 903
    functionDepth: 1
    functionLinenumber: 903
    functionLinenumberEnd: 914
    functionName: brpc::policy::RtmpContext::AllocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - pop_back
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    - empty
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AllocateMessageStreamId(uint32_t* stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:917,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 918
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 918
    functionName: brpc::policy::RtmpContext::DeallocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateMessageStreamId(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:922,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - stream_id
    - stream
    argTypes:
    - uint32_t
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 920
    functionDepth: 1
    functionLinenumber: 920
    functionLinenumberEnd: 929
    functionName: brpc::policy::RtmpContext::FindMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::FindMessageStream(\n    uint32_t stream_id, butil::intrusive_ptr<RtmpStreamBase>*
      stream)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:932,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:934,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:943,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:944,1
    - Dst: brpc::policy::RtmpContext::AllocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:947,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:948,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 931
    functionDepth: 2
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    - stream::reset
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddClientStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::AllocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:958,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:964,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:967,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 954
    functionDepth: 2
    functionLinenumber: 954
    functionLinenumberEnd: 972
    functionName: brpc::policy::RtmpContext::AddServerStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - LOG
    - brpc::policy::RtmpContext::AllocateMessageStreamId
    - stream::reset
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddServerStream(RtmpStreamBase* stream)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:976,1
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:981,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:986,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:989,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:991,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:995,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:996,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:997,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1001,1
    - Dst: brpc::policy::RtmpContext::DeallocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1002,1
    - Dst: brpc::policy::RtmpContext::DeallocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1004,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1006,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1007,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 974
    functionDepth: 1
    functionLinenumber: 974
    functionLinenumberEnd: 1010
    functionName: brpc::policy::RtmpContext::RemoveMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - RtmpStreamBase*::stream_id
    - erase
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - std::unique_lock::unlock
    - seek
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::RemoveMessageStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1021,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1029,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - out_transaction_id
    - handler
    argTypes:
    - uint32_t*
    - RtmpTransactionHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1036
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1036
    functionName: brpc::policy::RtmpContext::AddTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::AddTransaction(uint32_t* out_transaction_id,\n                                 RtmpTransactionHandler*
      handler)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1042,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1043,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1046,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - transaction_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1050
      start: 1038
    functionDepth: 1
    functionLinenumber: 1038
    functionLinenumberEnd: 1050
    functionName: brpc::policy::RtmpContext::RemoveTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - erase
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: RtmpTransactionHandler
    signature: 'RtmpTransactionHandler *

      RtmpContext::RemoveTransaction(uint32_t transaction_id)'
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1053,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1057,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1058,1
    - Dst: app::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1060,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1061,1
    - Dst: RtmpConnectRequest::set_app
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1064,1
    - Dst: flashVer::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1065,1
    - Dst: RtmpConnectRequest::set_flashver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1066,1
    - Dst: swfUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1068,1
    - Dst: RtmpConnectRequest::set_swfurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1069,1
    - Dst: tcUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1072,1
    - Dst: RtmpConnectRequest::mutable_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1073,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: app::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1075,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1077,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1078,1
    - Dst: RtmpConnectRequest::set_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1080,1
    - Dst: RtmpConnectRequest::set_fpad
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1082,1
    - Dst: RtmpConnectRequest::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1083,1
    - Dst: RtmpConnectRequest::set_audiocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1084,1
    - Dst: RtmpConnectRequest::set_videocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1085,1
    - Dst: RtmpConnectRequest::set_videofunction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1086,1
    - Dst: pageUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1087,1
    - Dst: RtmpConnectRequest::set_pageurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1088,1
    - Dst: RtmpConnectRequest::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1090,1
    - Dst: RtmpConnectRequest::set_stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1091,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1092,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1093,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1094,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1099,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1108,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1109,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1111,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1112,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1113,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1121,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1126,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1127,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1129,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1138,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1144,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1146,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1152,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 73
    argCount: 3
    argNames:
    - ' remote_side'
    - fd
    - simplified_rtmp
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1052
    functionDepth: 2
    functionLinenumber: 1052
    functionLinenumberEnd: 1153
    functionName: brpc::policy::RtmpContext::SendConnectRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream::good
    - pageUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - app::empty
    - RtmpConnectRequest::set_audiocodecs
    - std::string*::push_back
    - RtmpConnectRequest::set_videofunction
    - butil::IOBuf::append
    - butil::endpoint2str
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_swfurl
    - WriteAMFObject
    - RtmpConnectRequest::mutable_tcurl
    - WriteBigEndian4Bytes
    - RtmpConnectRequest::set_tcurl
    - memcpy
    - LOG
    - RtmpConnectRequest::set_flashver
    - tcUrl::empty
    - std::string*::reserve
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf::size
    - RtmpConnectRequest::set_fpad
    - RtmpConnectRequest::set_capabilities
    - WriteAll
    - std::string*::append
    - swfUrl::empty
    - RtmpConnectRequest::set_pageurl
    - RtmpConnectRequest::set_videocodecs
    - WriteAMFUint32
    - RtmpConnectRequest::set_objectencoding
    - app::size
    - WriteAMFString
    - flashVer::empty
    - RtmpConnectRequest::set_app
    linkageType: ''
    returnType: int
    signature: int RtmpContext::SendConnectRequest(const butil::EndPoint& remote_side,
      int fd, bool simplified_rtmp)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1158,1
    - Dst: brpc::policy::RtmpContext::WaitForS0S1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1159,1
    - Dst: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1161,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1164,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1166,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1169,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1171,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1172,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1155
    functionDepth: 4
    functionLinenumber: 1155
    functionLinenumberEnd: 1173
    functionName: brpc::policy::RtmpContext::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::WaitForC2
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForS0S1
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::Feed(butil::IOBuf* source, Socket* socket)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1177,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1180,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1182,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1189,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1193,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1196,1
    - Dst: adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1199,1
    - Dst: adobe_hs::C1::schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1200,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1201,1
    - Dst: adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1206,1
    - Dst: adobe_hs::S1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1209,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1210,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1214,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: adobe_hs::C1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1223,1
    - Dst: adobe_hs::S2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1226,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1227,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1230,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1237,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpHandshakeServerRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1242,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1243,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1244,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1248,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1250,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 54
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1251
      start: 1175
    functionDepth: 3
    functionLinenumber: 1175
    functionLinenumberEnd: 1251
    functionName: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - memcmp
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - butil::IOBuf::append
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - adobe_hs::S2::Generate
    - adobe_hs::S2::Save
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::C1::digest_blk::digest
    - brpc::policy::RtmpContext::WaitForC2
    - memcpy
    - LOG
    - adobe_hs::S1::Save
    - adobe_hs::C1::Load
    - butil::IOBuf*::length
    - malloc
    - adobe_hs::S1::Generate
    - WriteAll
    - Socket*::remote_side
    - adobe_hs::C1::schema
    - GetRtmpHandshakeServerRandom
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf::push_back
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC0C1orSimpleRtmp(butil::IOBuf* source,
      Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1254,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1255,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1259,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1253
    functionDepth: 3
    functionLinenumber: 1253
    functionLinenumberEnd: 1270
    functionName: brpc::policy::RtmpContext::WaitForC2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - Socket*::remote_side
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1273,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1274,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1278,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1281,1
    - Dst: adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1285,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1286,1
    - Dst: adobe_hs::C2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1290,1
    - Dst: adobe_hs::C2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1292,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1293,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1296,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1303,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1304,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1305,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1309,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1311,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1272
    functionDepth: 4
    functionLinenumber: 1272
    functionLinenumberEnd: 1312
    functionName: brpc::policy::RtmpContext::WaitForS0S1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C2::Generate
    - adobe_hs::C2::Save
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::S1::Load
    - GetRtmpTimestamp
    - butil::IOBuf::append
    - WriteAll
    - brpc::policy::RtmpContext::WaitForS2
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS0S1(butil::IOBuf* source, Socket*
      socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1315,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1316,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1319,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: brpc::policy::RtmpContext::SendConnectRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1324,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1326,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1314
    functionDepth: 3
    functionLinenumber: 1314
    functionLinenumberEnd: 1327
    functionName: brpc::policy::RtmpContext::WaitForS2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - Socket*::fd
    - brpc::policy::RtmpContext::OnChunks
    - brpc::policy::RtmpContext::SendConnectRequest
    - Socket*::remote_side
    - butil::IOBuf*::pop_front
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1331,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1333,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1342,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1343,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1346,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1354,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1361,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1362,1
    - Dst: RtmpChunkStream*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1364,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1329
    functionDepth: 2
    functionLinenumber: 1329
    functionLinenumberEnd: 1365
    functionName: brpc::policy::RtmpContext::OnChunks
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - butil::IOBuf*::fetch
    - RtmpChunkStream*::Feed
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::size
    - MakeParseError
    - butil::IOBuf*::fetch1
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::OnChunks(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1368,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1370,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - socket
    - received_bytes
    argTypes:
    - Socket*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1372
      start: 1367
    functionDepth: 2
    functionLinenumber: 1367
    functionLinenumberEnd: 1372
    functionName: brpc::policy::SendAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteWithoutOvercrowded
    - butil::HostToNet32
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: int
    signature: int SendAck(Socket* socket, uint64_t received_bytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: SendAck
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - socket
    - sz
    argTypes:
    - Socket*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1374
    functionDepth: 1
    functionLinenumber: 1374
    functionLinenumberEnd: 1382
    functionName: brpc::policy::RtmpContext::AddReceivedBytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - PLOG_IF
    - SendAck
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AddReceivedBytes(Socket* socket, uint32_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - conn_ctx
    - cs_id
    argTypes:
    - RtmpContext*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1389
      start: 1386
    functionDepth: 0
    functionLinenumber: 1386
    functionLinenumberEnd: 1389
    functionName: brpc::policy::RtmpChunkStream::RtmpChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::RtmpChunkStream(RtmpContext* conn_ctx, uint32_t
      cs_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1396
      start: 1391
    functionDepth: 0
    functionLinenumber: 1391
    functionLinenumberEnd: 1396
    functionName: RtmpChunkStream::ReadParams::ReadParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::ReadParams::ReadParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1398
    functionDepth: 0
    functionLinenumber: 1398
    functionLinenumberEnd: 1401
    functionName: RtmpChunkStream::WriteParams::WriteParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::WriteParams::WriteParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1406,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1408
      start: 1405
    functionDepth: 1
    functionLinenumber: 1405
    functionLinenumberEnd: 1408
    functionName: brpc::policy::InitClientMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitClientMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1413,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1415
      start: 1412
    functionDepth: 1
    functionLinenumber: 1412
    functionLinenumberEnd: 1415
    functionName: brpc::policy::InitServerMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitServerMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1420
      start: 1420
    functionDepth: 0
    functionLinenumber: 1420
    functionLinenumberEnd: 1420
    functionName: brpc::policy::ChunkStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChunkStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ChunkStatus>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1424
      start: 1422
    functionDepth: 0
    functionLinenumber: 1422
    functionLinenumberEnd: 1424
    functionName: brpc::policy::AddChunk
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ChunkStatus>
    linkageType: ''
    returnType: void
    signature: void AddChunk()
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1434,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1444,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1445,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1448,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1450,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1453,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1454,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1456,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1458,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1462,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1464,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1465,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1466,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1487,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1490,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1492,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1495,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1496,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1498,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1500,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1504,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1506,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1509,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1511,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1512,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1513,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1528,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1529,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1532,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1534,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1537,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1538,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1540,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1542,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1546,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1548,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1552,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1553,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1554,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1567,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1568,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1571,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1573,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1587,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1589,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1597,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1598,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1599,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1607,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1608,1
    - Dst: RtmpContext*::AddReceivedBytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1609,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: AddChunk
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1619,1
    - Dst: RtmpContext*::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1623,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1624,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1627,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1631,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1632,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1634,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1635,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1638,1
    - Dst: msg_body::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1640,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1646,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 158
    argCount: 3
    argNames:
    - ' bh'
    - source
    - socket
    argTypes:
    - RtmpBasicHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1426
    functionDepth: 2
    functionLinenumber: 1426
    functionLinenumberEnd: 1647
    functionName: brpc::policy::RtmpChunkStream::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - msg_body::clear
    - VLOG
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - AddChunk
    - butil::IOBuf*::fetch
    - RtmpContext*::AddReceivedBytes
    - butil::Timer::start
    - MethodStatus*::OnRequested
    - RtmpContext*::service
    - MakeMessage
    - brpc::policy::RtmpChunkStream::OnMessage
    - LOG
    - butil::Timer::Timer
    - ReadBigEndian3Bytes
    - butil::Timer::u_elapsed
    - butil::IOBuf*::size
    - CHECK
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - pthread_once
    - butil::Timer::stop
    - std::min
    - MethodStatus*::OnResponded
    - last_msg_header::is_valid
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult RtmpChunkStream::Feed(const RtmpBasicHeader& bh,\n                                  butil::IOBuf*
      source, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: GetBasicHeaderLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1652,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1654,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1662,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1664,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1669,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1679,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1680,1
    - Dst: WriteLittleEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1682,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1692,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1693,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1704,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1711,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1715,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1716,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1717,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1725,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1730,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1734,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1736,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1737,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 65
    argCount: 3
    argNames:
    - buf
    - ' mh'
    - body
    argTypes:
    - butil::IOBuf*
    - RtmpMessageHeader
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1740
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1740
    functionName: brpc::policy::RtmpChunkStream::SerializeMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::size
    - std::min
    - butil::IOBuf*::append
    - GetBasicHeaderLength
    - WriteBigEndian4Bytes
    - WriteBigEndian3Bytes
    - CHECK
    - last_msg_header::is_valid
    - CHECK_LE
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::cutn
    - WriteLittleEndian4Bytes
    - WriteBasicHeader
    linkageType: ''
    returnType: int
    signature: "int RtmpChunkStream::SerializeMessage(butil::IOBuf* buf,\n                                      const
      RtmpMessageHeader& mh,\n                                      butil::IOBuf*
      body)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CommandHandlerMap::CommandHandlerMap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1772,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1773,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1774,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1770
    functionDepth: 1
    functionLinenumber: 1770
    functionLinenumberEnd: 1794
    functionName: brpc::policy::InitCommandHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - init
    - CommandHandlerMap::CommandHandlerMap
    linkageType: ''
    returnType: void
    signature: void InitCommandHandlers()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1810,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1815,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1816,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1821,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1831,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 4
    argNames:
    - ' bh'
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpBasicHeader
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1834
      start: 1796
    functionDepth: 1
    functionLinenumber: 1796
    functionLinenumberEnd: 1834
    functionName: brpc::policy::RtmpChunkStream::OnMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::size
    - arraysize
    - CHECK_EQ
    - Socket*::remote_side
    - RTMP_ERROR
    - VLOG
    - messagetype2str
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnMessage(const RtmpBasicHeader& bh,\n                                const
      RtmpMessageHeader& mh,\n                                butil::IOBuf* msg_body,\n
      \                               Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1839,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1844,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1845,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1847,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1851,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1852,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1856
      start: 1836
    functionDepth: 1
    functionLinenumber: 1836
    functionLinenumberEnd: 1856
    functionName: brpc::policy::RtmpChunkStream::OnSetChunkSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetChunkSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1861,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1866,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1867,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1869,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1872,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1874
      start: 1858
    functionDepth: 1
    functionLinenumber: 1858
    functionLinenumberEnd: 1874
    functionName: brpc::policy::RtmpChunkStream::OnAbortMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAbortMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1879,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1884,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1885,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1876
    functionDepth: 1
    functionLinenumber: 1876
    functionLinenumberEnd: 1890
    functionName: brpc::policy::RtmpChunkStream::OnAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAck(\n    const RtmpMessageHeader& mh, butil::IOBuf*
      msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1895,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1900,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1901,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1902,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1903,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1904,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1907
      start: 1892
    functionDepth: 1
    functionLinenumber: 1892
    functionLinenumberEnd: 1907
    functionName: brpc::policy::RtmpChunkStream::OnWindowAckSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnWindowAckSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1912,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1917,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1918,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1920,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1924
      start: 1909
    functionDepth: 1
    functionLinenumber: 1909
    functionLinenumberEnd: 1924
    functionName: brpc::policy::RtmpChunkStream::OnSetPeerBandwidth
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetPeerBandwidth(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1929,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1934,1
    - Dst: ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1935,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamBegin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1939,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamEOF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1941,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamDry
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1943,1
    - Dst: brpc::policy::RtmpChunkStream::OnSetBufferLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1945,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1947,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1949,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1951,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferEmpty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1953,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferReady
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1955,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1957,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 28
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1959
      start: 1926
    functionDepth: 2
    functionLinenumber: 1926
    functionLinenumberEnd: 1959
    functionName: brpc::policy::RtmpChunkStream::OnUserControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnPingRequest
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnUserControlMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1964,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1966,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1969,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1970,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1971,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1976
      start: 1961
    functionDepth: 1
    functionLinenumber: 1961
    functionLinenumberEnd: 1976
    functionName: brpc::policy::RtmpChunkStream::OnStreamBegin
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamBegin(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1981,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1983,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1986,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1987,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1988,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1993
      start: 1978
    functionDepth: 1
    functionLinenumber: 1978
    functionLinenumberEnd: 1993
    functionName: brpc::policy::RtmpChunkStream::OnStreamEOF
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamEOF(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1998,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2000,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2003,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2004,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2005,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2010
      start: 1995
    functionDepth: 1
    functionLinenumber: 1995
    functionLinenumberEnd: 2010
    functionName: brpc::policy::RtmpChunkStream::OnStreamDry
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamDry(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2015,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2017,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2020,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2021,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2022,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2027
      start: 2012
    functionDepth: 1
    functionLinenumber: 2012
    functionLinenumberEnd: 2027
    functionName: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamIsRecorded(const RtmpMessageHeader&
      mh,\n                                         const butil::StringPiece& event_data,\n
      \                                        Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2032,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2034,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2037,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2038,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2039,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2044,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2051,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2052,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2053,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2058
    functionName: brpc::policy::RtmpChunkStream::OnSetBufferLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetBufferLength(const RtmpMessageHeader& mh,\n
      \                                       const butil::StringPiece& event_data,\n
      \                                       Socket* socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2063,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2065,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2068,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2069,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2070,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2076,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2077,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2080,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2081,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2085
    functionName: brpc::policy::RtmpChunkStream::OnPingRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - WriteBigEndian2Bytes
    - size
    - WriteBigEndian4Bytes
    - data
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - PLOG
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingRequest(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2090,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2092,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2095,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2096,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2097,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: RtmpService*::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2103
      start: 2087
    functionDepth: 1
    functionLinenumber: 2087
    functionLinenumberEnd: 2103
    functionName: brpc::policy::RtmpChunkStream::OnPingResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpService*::OnPingResponse
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingResponse(const RtmpMessageHeader& mh,\n
      \                                    const butil::StringPiece& event_data,\n
      \                                    Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2111,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2112,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2113,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2121
      start: 2105
    functionDepth: 1
    functionLinenumber: 2105
    functionLinenumberEnd: 2121
    functionName: brpc::policy::RtmpChunkStream::OnBufferEmpty
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferEmpty(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2126,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2127,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2128,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2136
      start: 2123
    functionDepth: 1
    functionLinenumber: 2123
    functionLinenumberEnd: 2136
    functionName: brpc::policy::RtmpChunkStream::OnBufferReady
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferReady(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2141,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2152,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2156,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2157,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: butil::intrusive_ptr::CallOnAudioMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2138
    functionDepth: 1
    functionLinenumber: 2138
    functionLinenumberEnd: 2164
    functionName: brpc::policy::RtmpChunkStream::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - butil::intrusive_ptr::CallOnAudioMessage
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAudioMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2169,1
    - Dst: is_video_frame_type_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2178,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2179,1
    - Dst: is_video_codec_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2181,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2182,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2184,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2188,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2189,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: butil::intrusive_ptr::CallOnVideoMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2196
      start: 2166
    functionDepth: 1
    functionLinenumber: 2166
    functionLinenumberEnd: 2196
    functionName: brpc::policy::RtmpChunkStream::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::intrusive_ptr::CallOnVideoMessage
    - butil::IOBuf*::cut1
    - is_video_frame_type_valid
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - is_video_codec_valid
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnVideoMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2209,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2213,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2218,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2224,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2225,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2229,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2230,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: butil::intrusive_ptr::CallOnMetaData
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2235,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2238,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2243,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2244,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2248,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2249,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: butil::intrusive_ptr::CallOnCuePoint
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2254,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2262
      start: 2198
    functionDepth: 1
    functionLinenumber: 2198
    functionLinenumberEnd: 2262
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - ReadAMFObject
    - butil::intrusive_ptr::CallOnCuePoint
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::CallOnMetaData
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - AMFInputStream::check_emptiness
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2268
      start: 2264
    functionDepth: 1
    functionLinenumber: 2264
    functionLinenumberEnd: 2268
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF0(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2275,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2276,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2279,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2282,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2284,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2290
      start: 2270
    functionDepth: 1
    functionLinenumber: 2270
    functionLinenumberEnd: 2290
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2294,1
    - Dst: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2296
      start: 2292
    functionDepth: 2
    functionLinenumber: 2292
    functionLinenumberEnd: 2296
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2302
      start: 2298
    functionDepth: 1
    functionLinenumber: 2298
    functionLinenumberEnd: 2302
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF3(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2306,1
    - Dst: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2308
      start: 2304
    functionDepth: 2
    functionLinenumber: 2304
    functionLinenumberEnd: 2308
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2314
      start: 2310
    functionDepth: 1
    functionLinenumber: 2310
    functionLinenumberEnd: 2314
    functionName: brpc::policy::RtmpChunkStream::OnAggregateMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAggregateMessage(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2337,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2341,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2342,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2345,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2346,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2347,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2350,1
    - Dst: RtmpConnectRequest*::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2351,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2359,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2366,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2380,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2381,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2387,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2397,1
    - Dst: RtmpConnectResponse::has_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2398,1
    - Dst: RtmpConnectResponse::set_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2399,1
    - Dst: RtmpConnectResponse::has_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2401,1
    - Dst: RtmpConnectResponse::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2402,1
    - Dst: RtmpConnectResponse::has_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2404,1
    - Dst: RtmpConnectResponse::set_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2405,1
    - Dst: RtmpConnectResponse::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2407,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2408,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2410,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2411,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2412,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2413,1
    - Dst: RtmpInfo::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpConnectRequest*::objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2416,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2417,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2418,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2420,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2424,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2427,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2431,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2432,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2433,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2438,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2440,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2443,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2445,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2448,1
    - Dst: RtmpConnectResponse::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2449,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2450,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 69
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2452
      start: 2333
    functionDepth: 1
    functionLinenumber: 2333
    functionLinenumberEnd: 2452
    functionName: brpc::policy::RtmpChunkStream::OnConnect
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - RtmpInfo::set_objectencoding
    - RtmpConnectResponse::set_capabilities
    - TemporaryArrayBuilder::push
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::has_fmsver
    - butil::IOBuf::clear
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFObject
    - next::reset
    - TemporaryArrayBuilder::size
    - RtmpConnectResponse::ShortDebugString
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - RtmpConnectResponse::has_capabilities
    - PLOG
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    - RtmpConnectResponse::set_fmsver
    - CHECK
    - release
    - Socket*::remote_side
    - Socket*::Write
    - WriteAMFUint32
    - RtmpConnectResponse::has_mode
    - Socket*::SetFailed
    - RtmpConnectRequest*::objectencoding
    - std::string::empty
    - RtmpConnectResponse::set_mode
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnConnect(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' mh'
    - socket
    argTypes:
    - RtmpMessageHeader
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2460
      start: 2454
    functionDepth: 0
    functionLinenumber: 2454
    functionLinenumberEnd: 2460
    functionName: brpc::policy::RtmpChunkStream::OnBWDone
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBWDone(const RtmpMessageHeader& mh,\n                               AMFInputStream*,\n
      \                              Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: saved_on_connect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2469
      start: 2462
    functionDepth: 0
    functionLinenumber: 2462
    functionLinenumberEnd: 2469
    functionName: brpc::policy::RtmpContext::OnConnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - saved_on_connect
    linkageType: ''
    returnType: void
    signature: void RtmpContext::OnConnected(int error_code)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2474,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2475,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2481,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2482,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2489,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2490,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2492,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2499,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2500,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2504,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2506,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2511,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2513
      start: 2471
    functionDepth: 1
    functionLinenumber: 2471
    functionLinenumberEnd: 2513
    functionName: brpc::policy::RtmpChunkStream::OnResult
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - CHECK
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnResult(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream, Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2519,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2520,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2525,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2529,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2530,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2534,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2536,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2540,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2542
      start: 2515
    functionDepth: 1
    functionLinenumber: 2515
    functionLinenumberEnd: 2542
    functionName: brpc::policy::RtmpChunkStream::OnError
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnError(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2547,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2548,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2552,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2553,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2556,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2557,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2561,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2562,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2565,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2566,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2567,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2570,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2571,1
    - Dst: static_cast<RtmpClientStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2574
      start: 2544
    functionDepth: 1
    functionLinenumber: 2544
    functionLinenumberEnd: 2574
    functionName: brpc::policy::RtmpChunkStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpClientStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStatus(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream,\n                               Socket* socket)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2579,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2581,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2585,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2586,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2593,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2594,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2597,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2598,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2599,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2601,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2602,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2603,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2606,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2607,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2611,1
    - Dst: RtmpService*::NewStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2622,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2624,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2627,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2632,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2633,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2634,1
    - Dst: butil::intrusive_ptr<RtmpServerStream>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2638,1
    - Dst: Socket*::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2639,1
    - Dst: Socket*::NotifyOnFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2640,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2650,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2651,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2652,1
    - Dst: AMFObject::SetBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2654,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2655,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2657,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2661,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2665,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2666,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2667,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2674,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2680,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2684,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2687,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2690,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2694,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2695,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2696,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2705,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2707,1
    - Dst: brpc::policy::RtmpChunkStream::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2709,1
    - Dst: brpc::policy::RtmpChunkStream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2711,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 95
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2713
      start: 2576
    functionDepth: 3
    functionLinenumber: 2576
    functionLinenumberEnd: 2713
    functionName: brpc::policy::RtmpChunkStream::OnCreateStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - AMFOutputStream::good
    - AMFObject::Find
    - butil::intrusive_ptr::OnStopInternal
    - WriteAMFNull
    - bthread_id_create
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::OnPublish
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - RtmpService*::NewStream
    - WriteAMFObject
    - WriteWithoutOvercrowded
    - Socket*::NotifyOnFailed
    - AMFObject::SetBool
    - RtmpPublishType2Str
    - RTMP_ERROR
    - bthread_id_error
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - Socket*::ReAddress
    - butil::intrusive_ptr<RtmpServerStream>
    - AMFField*::IsString
    - butil::intrusive_ptr::stream_id
    - butil::IOBuf::size
    - brpc::policy::RtmpChunkStream::OnPlay
    - stream_multiplexing
    - CHECK
    - Str2RtmpPublishType
    - berror
    - Socket*::remote_side
    - AMFField*::AsString
    - WriteAMFUint32
    - std::string::empty
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCreateStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2726,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2736,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2741,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2743
      start: 2723
    functionDepth: 1
    functionLinenumber: 2723
    functionLinenumberEnd: 2743
    functionName: brpc::policy::OnPlayContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - error_cstr
    - ok
    - SendStopMessage
    - stream_id
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnPlayContinuation::Run()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2748,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2749,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2753,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2754,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2759,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2760,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2764,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2765,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2770,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2771,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2772,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2776,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2777,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2778,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2782,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2783,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2784,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2788,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2795,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2804,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2805,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2813,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2817,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2818,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2819,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2821,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2822,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2823,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2824,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2826,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2827,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2830,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2832,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2836,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2840,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2841,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2842,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2844,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2845,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2846,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2847,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2849,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2850,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2853,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2855,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2858,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2862,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2863,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2864,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2866,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2867,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2870,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2872,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2875,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2879,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2881,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2882,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2884,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2885,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2888,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2890,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2892,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2893,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2894,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2899,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2902,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2905,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: RtmpServerStream*::OnPause
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2915,1
    - Dst: OnPlayContinuation::OnPlayContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2918,1
    - Dst: OnPlayContinuation*::player_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2919,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2920,1
    - Dst: OnPlayContinuation*::player_stream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2921,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 115
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2923
      start: 2745
    functionDepth: 1
    functionLinenumber: 2745
    functionLinenumberEnd: 2923
    functionName: brpc::policy::RtmpChunkStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - WriteAMFNull
    - OnPlayContinuation::OnPlayContinuation
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - OnPlayContinuation*::player_stream::OnPlay
    - RtmpServerStream*::OnPause
    - TemporaryArrayBuilder::push
    - static_cast<RtmpServerStream*>
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ReadAMFNumber
    - WriteAMFObject
    - next::reset
    - WriteBigEndian2Bytes
    - TemporaryArrayBuilder::size
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - ReadAMFString
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - AMFInputStream*::check_emptiness
    - ReadAMFBool
    - butil::IOBuf::size
    - release
    - Socket*::remote_side
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - RTMP_WARNING
    - WriteAMFUint32
    - butil::intrusive_ptr::detach
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2928,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2929,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2933,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2934,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2937,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2938,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2942,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2943,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2946,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2947,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2948,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2953
      start: 2925
    functionDepth: 1
    functionLinenumber: 2925
    functionLinenumberEnd: 2953
    functionName: brpc::policy::RtmpChunkStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay2(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2958,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2959,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2963,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2964,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2967,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2968,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2972,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2973,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2976,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2977,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2984,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2987
      start: 2955
    functionDepth: 1
    functionLinenumber: 2955
    functionLinenumberEnd: 2987
    functionName: brpc::policy::RtmpChunkStream::OnDeleteStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDeleteStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2992,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2993,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2997,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2998,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3001,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3002,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3005,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3006,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3017
      start: 2989
    functionDepth: 1
    functionLinenumber: 2989
    functionLinenumberEnd: 3017
    functionName: brpc::policy::RtmpChunkStream::OnCloseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCloseStream(const RtmpMessageHeader& mh,\n
      \                                   AMFInputStream* istream,\n                                    Socket*
      socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3030,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3032,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3033,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3037,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3042,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3046,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3047,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3048,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3050,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3051,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3052,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3056,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3057,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3059,1
    - Dst: chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3060,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3065,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3067
      start: 3028
    functionDepth: 1
    functionLinenumber: 3028
    functionLinenumberEnd: 3067
    functionName: brpc::policy::OnPublishContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - error_cstr
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - stream_id
    - butil::IOBuf::IOBuf
    - remote_side
    - WriteAMFObject
    - SendStopMessage
    - WriteWithoutOvercrowded
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - ok
    - chunk_stream_id
    - butil::IOBuf::size
    - CHECK
    - WriteAMFUint32
    - socket
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_description
    linkageType: ''
    returnType: void
    signature: void OnPublishContinuation::Run()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3072,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3073,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3077,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3078,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3081,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3082,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3086,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3087,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3091,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3092,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3096,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3097,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3101,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3104,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3106,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3107,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3108,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3113,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: OnPublishContinuation::OnPublishContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3116,1
    - Dst: OnPublishContinuation*::publish_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3118,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3119,1
    - Dst: RtmpServerStream*::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3120,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3122
      start: 3069
    functionDepth: 1
    functionLinenumber: 3069
    functionLinenumberEnd: 3122
    functionName: brpc::policy::RtmpChunkStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::intrusive_ptr::detach
    - brpc::policy::RtmpChunkStream::connection_context
    - OnPublishContinuation::OnPublishContinuation
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::get
    - RtmpServerStream*::OnPublish
    - RtmpPublishType2Str
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPublish(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3125,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3129,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3130,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3131,1
    - Dst: WriteAMFUndefined
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3132,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3137,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - sock
    - transaction_id
    argTypes:
    - Socket*
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3142
      start: 3124
    functionDepth: 1
    functionLinenumber: 3124
    functionLinenumberEnd: 3142
    functionName: brpc::policy::SendFMLEStartResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - WriteAMFUndefined
    - PLOG
    - WriteAMFString
    - CHECK
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: bool SendFMLEStartResponse(Socket* sock, double transaction_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3146,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3147,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3151,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3152,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3155,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3156,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3160,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3161,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3164,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3166
      start: 3144
    functionDepth: 1
    functionLinenumber: 3144
    functionLinenumberEnd: 3166
    functionName: brpc::policy::RtmpChunkStream::OnReleaseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnReleaseStream(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3170,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3171,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3175,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3176,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3179,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3180,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3184,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3185,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3188,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3189,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3190
      start: 3168
    functionDepth: 1
    functionLinenumber: 3168
    functionLinenumberEnd: 3190
    functionName: brpc::policy::RtmpChunkStream::OnFCPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCPublish(\n    const RtmpMessageHeader& mh,
      AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3194,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3195,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3199,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3200,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3209,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3212,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3213,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3214
      start: 3192
    functionDepth: 1
    functionLinenumber: 3192
    functionLinenumberEnd: 3214
    functionName: brpc::policy::RtmpChunkStream::OnFCUnpublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCUnpublish(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3226
      start: 3216
    functionDepth: 0
    functionLinenumber: 3216
    functionLinenumberEnd: 3226
    functionName: brpc::policy::RtmpChunkStream::OnGetStreamLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnGetStreamLength(\n    const RtmpMessageHeader&,
      AMFInputStream*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3231
      start: 3228
    functionDepth: 0
    functionLinenumber: 3228
    functionLinenumberEnd: 3231
    functionName: brpc::policy::RtmpChunkStream::OnCheckBW
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCheckBW(\n    const RtmpMessageHeader&, AMFInputStream*,
      Socket*)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3236,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3237,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3241,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3242,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3245,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3246,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3250,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3251,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3255,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3256,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3257,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3262,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3267,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3268,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3269,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3271,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3272,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3273,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3274,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3277,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3278,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3279,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3281,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3282,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3283,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3288,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3289,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3295,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3300
      start: 3233
    functionDepth: 1
    functionLinenumber: 3233
    functionLinenumberEnd: 3300
    functionName: brpc::policy::RtmpChunkStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - Socket*::Write
    - WriteAMFUint32
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSeek(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3305,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3306,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3310,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3311,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3314,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3315,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3319,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3320,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3324,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3325,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3329,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3330,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3331,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3338,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3346,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3351,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3352,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3353,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3356,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3358,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3360,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3361,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3362,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3365,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3366,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3367,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3370,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3372,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3374,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3375,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3377,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3381,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3382,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3385,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3392,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3394,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3396,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3397,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3399,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3401,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 82
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3411
      start: 3302
    functionDepth: 1
    functionLinenumber: 3302
    functionLinenumberEnd: 3411
    functionName: brpc::policy::RtmpChunkStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - MakeUnsentControlMessage
    - ReadAMFNumber
    - WriteAMFObject
    - WriteBigEndian2Bytes
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - ReadAMFBool
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPause(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3416,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3418,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3421,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3423,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3424
      start: 3415
    functionDepth: 0
    functionLinenumber: 3415
    functionLinenumberEnd: 3424
    functionName: brpc::policy::IsPossiblyRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::fetch1
    - MakeParseError
    - MakeMessage
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult IsPossiblyRtmp(const butil::IOBuf* source)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3432,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3434,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3435,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3442,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3446,1
    - Dst: brpc::policy::IsPossiblyRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3448,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3449,1
    - Dst: RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3454,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3455,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3457,1
    - Dst: RtmpContext*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3460,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3461
      start: 3426
    functionDepth: 1
    functionLinenumber: 3426
    functionLinenumberEnd: 3461
    functionName: brpc::policy::ParseRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    - MakeParseError
    - RtmpContext::RtmpContext
    - RtmpContext*::Feed
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - brpc::policy::IsPossiblyRtmp
    - Socket*::reset_parsing_context
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRtmpMessage(butil::IOBuf* source, Socket *socket,
      bool read_eof,\n                             const void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3465
      start: 3463
    functionDepth: 1
    functionLinenumber: 3463
    functionLinenumberEnd: 3465
    functionName: brpc::policy::ProcessRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRtmpMessage(InputMessageBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - stream
    - call_id
    argTypes:
    - RtmpClientStream*
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3480
      start: 3478
    functionDepth: 0
    functionLinenumber: 3478
    functionLinenumberEnd: 3480
    functionName: brpc::policy::OnServerStreamCreated::OnServerStreamCreated
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::OnServerStreamCreated(\n    RtmpClientStream*
      stream, CallId call_id)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3490,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3493,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3496,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3499,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3501,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3502,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3507,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3511,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3514,1
    - Dst: AMFField*::IsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: AMFField*::AsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3525,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3530,1
    - Dst: RtmpContext*::AddClientStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3539,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3543,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3548,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3554,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3555
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3555
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - AMFObject::Find
    - ControllerPrivateAccessor::span
    - AMFInputStream*::popped_bytes
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - RtmpContext*::AddClientStream
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - get
    - Span*::set_response_size
    - LOG
    - RtmpInfo::description
    - LOG_IF
    - butil::gettimeofday_us
    - ReadAMFUint32
    - AMFField*::AsBool
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Controller*::OnVersionedRPCReturned
    - RtmpInfo::code
    - Span*::set_base_real_us
    - AMFField*::IsBool
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::Run(bool error,\n                                const
      RtmpMessageHeader&,\n                                AMFInputStream* istream,\n
      \                               Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3559
      start: 3557
    functionDepth: 0
    functionLinenumber: 3557
    functionLinenumberEnd: 3559
    functionName: brpc::policy::OnServerStreamCreated::Cancel
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnServerStreamCreated::Cancel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3565,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3571,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3573,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3578,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3589,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3591,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3592,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3593,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3597,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3598,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3600,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3602,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3605,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3609,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3613,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3617,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3622,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3624,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3625
      start: 3561
    functionDepth: 2
    functionLinenumber: 3561
    functionLinenumberEnd: 3625
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - WriteAMFObject
    - AMFObject::SetString
    - static_cast<RtmpContext*>
    - description
    - RtmpPublishType2Str
    - play_name::empty
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf::size
    - CHECK
    - parsing_context
    - publish_name::empty
    - WriteAMFUint32
    - WriteAMFString
    - SetFailed
    - RtmpContext*::GetChunkStream
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpCreateStreamMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3640,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3644,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3650,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3653,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3655,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3660,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3666,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3668,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3670
      start: 3627
    functionDepth: 1
    functionLinenumber: 3627
    functionLinenumberEnd: 3670
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::set_log_id
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - OnServerStreamCreated::OnServerStreamCreated
    - Controller*::log_id
    - Socket*::parsing_context
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpTransactionHandler*::Cancel
    - RtmpContext*::AddTransaction
    - Controller*::call_id
    - RtmpClientStream*::options
    - butil::BaseIteratorRangeToNumberTraits::max
    - Socket*::description
    - CHECK_LT
    - Controller*::SetFailed
    - Controller*::response
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: "void PackRtmpRequest(butil::IOBuf* /*buf*/,\n                     SocketMessage**
      user_message,\n                     uint64_t /*correlation_id*/,\n                     const
      google::protobuf::MethodDescriptor* /*NULL*/,\n                     Controller*
      cntl,\n                     const butil::IOBuf& /*request*/,\n                     const
      Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3675
      start: 3672
    functionDepth: 0
    functionLinenumber: 3672
    functionLinenumberEnd: 3675
    functionName: brpc::policy::SerializeRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeRtmpRequest(butil::IOBuf* /*buf*/,\n                          Controller*
      /*cntl*/,\n                          const google::protobuf::Message* /*NULL*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - s
    - ' msg'
    argTypes:
    - Socket*
    - SocketMessagePtr<>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::policy::WriteWithoutOvercrowded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteWithoutOvercrowded(Socket* s, SocketMessagePtr<>& msg)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 34
    argCount: 1
    argNames:
    - t
    argTypes:
    - RtmpMessageType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 91
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(RtmpMessageType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::messagetype2str
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(uint8_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:114,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:116,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: brpc::policy::InitRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: brpc::policy::GetRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:129,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:131,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: brpc::policy::InitRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::GetRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: brpc::policy::GetRtmpTimestamp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRtmpTimestamp()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 9
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 11
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 10
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 576
    functionName: brpc::policy::GetBasicHeaderLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBasicHeaderLength(uint32_t cs_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:583,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:594,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - buf
    - chunk_type
    - cs_id
    argTypes:
    - char**
    - RtmpChunkType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 597
    functionName: brpc::policy::WriteBasicHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void WriteBasicHeader(char** buf, RtmpChunkType chunk_type, uint32_t
      cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:604,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:605,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:616,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:617,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 2
    argNames:
    - fd
    - buf
    argTypes:
    - int
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 603
    functionDepth: 2
    functionLinenumber: 603
    functionLinenumberEnd: 624
    functionName: brpc::policy::WriteAll
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    - butil::IOBuf*::cut_into_file_descriptor
    - bthread_usleep
    linkageType: ''
    returnType: int
    signature: int WriteAll(int fd, butil::IOBuf* buf)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:630,1
    - Dst: adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:633,1
    - Dst: adobe_hs::C1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:636,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:640,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:651,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:652,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::GetRtmpHandshakeClientRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - fd
    - is_simple_handshake
    argTypes:
    - int
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 628
    functionDepth: 3
    functionLinenumber: 628
    functionLinenumberEnd: 656
    functionName: brpc::policy::SendC0C1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Save
    - brpc::policy::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - adobe_hs::C1::Generate
    - brpc::policy::WriteBigEndian4Bytes
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int SendC0C1(int fd, bool* is_simple_handshake)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 667
    functionName: brpc::policy::RtmpContext::state2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpContext::state2str(State s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:672,1
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:673,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' remote_side'
    - new_state
    argTypes:
    - butil::EndPoint
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 674
    functionName: brpc::policy::RtmpContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::RtmpContext::state2str
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SetState(const butil::EndPoint& remote_side, State
      new_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:679,1
    - Dst: RtmpUnsentMessage*::body::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:684,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 4
    argNames:
    - message_type
    - chunk_stream_id
    - data
    - n
    argTypes:
    - uint8_t
    - uint32_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 686
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpUnsentMessage*::body::append
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id,\n    const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:690,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - message_type
    - data
    - n
    argTypes:
    - uint8_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 688
    functionDepth: 1
    functionLinenumber: 688
    functionLinenumberEnd: 692
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 13
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:697,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - message_type
    - chunk_stream_id
    - ' body'
    argTypes:
    - uint8_t
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 703
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 703
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 13
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - size
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id, const butil::IOBuf& body)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:707,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - message_type
    - ' body'
    argTypes:
    - uint8_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 709
      start: 705
    functionDepth: 1
    functionLinenumber: 705
    functionLinenumberEnd: 709
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 14
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const butil::IOBuf& body)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:731,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:733,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:734,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:735,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:738,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - copt
    - server
    argTypes:
    - RtmpClientOptions*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 711
    functionDepth: 1
    functionLinenumber: 711
    functionLinenumberEnd: 741
    functionName: brpc::policy::RtmpContext::RtmpContext
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    - Server*::options
    - reserve
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::RtmpContext(const RtmpClientOptions* copt, const
      Server* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:744,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:749,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:756,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:765,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:768,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:772,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:774,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:779,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 743
    functionDepth: 1
    functionLinenumber: 743
    functionLinenumberEnd: 781
    functionName: RtmpContext::~RtmpContext()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - free
    - load
    - store
    - empty
    - clear
    - begin
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::~RtmpContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 785
    functionName: brpc::policy::RtmpContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpContext::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:792,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:795,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:797,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:798,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:800,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:801,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:802,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:808,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:810,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:811,1
    - Dst: RtmpUnsentMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:812,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 787
    functionDepth: 2
    functionLinenumber: 787
    functionLinenumberEnd: 813
    functionName: brpc::policy::RtmpUnsentMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - Socket*::SetFailed
    - Socket*::parsing_context
    - release
    - std::unique_ptr::reset
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpUnsentMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 817
    functionName: RtmpContext::SubChunkArray::SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::SubChunkArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:821,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 827
    functionName: RtmpContext::SubChunkArray::~SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::~SubChunkArray()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:831,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:836,1
    - Dst: SubChunkArray::SubChunkArray
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:839,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:841,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:849,1
    - Dst: RtmpChunkStream::RtmpChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:852,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:854,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 829
    functionDepth: 1
    functionLinenumber: 829
    functionLinenumberEnd: 861
    functionName: brpc::policy::RtmpContext::GetChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - load
    - compare_exchange_strong
    - RtmpChunkStream::RtmpChunkStream
    - LOG
    - SubChunkArray::SubChunkArray
    linkageType: ''
    returnType: RtmpChunkStream
    signature: RtmpChunkStream * RtmpContext::GetChunkStream(uint32_t cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:865,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:870,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:872,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:879,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:882,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 884
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 884
    functionName: brpc::policy::RtmpContext::ClearChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpContext::ClearChunkStream(uint32_t cs_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:887,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:888,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:889,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 886
    functionDepth: 1
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - pop_back
    - back
    - empty
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AllocateChunkStreamId(uint32_t* chunk_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:900,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 901
      start: 898
    functionDepth: 0
    functionLinenumber: 898
    functionLinenumberEnd: 901
    functionName: brpc::policy::RtmpContext::DeallocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateChunkStreamId(uint32_t chunk_stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:904,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:905,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:906,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:909,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 903
    functionDepth: 1
    functionLinenumber: 903
    functionLinenumberEnd: 914
    functionName: brpc::policy::RtmpContext::AllocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - pop_back
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    - empty
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AllocateMessageStreamId(uint32_t* stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:917,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 918
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 918
    functionName: brpc::policy::RtmpContext::DeallocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateMessageStreamId(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:922,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - stream_id
    - stream
    argTypes:
    - uint32_t
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 920
    functionDepth: 1
    functionLinenumber: 920
    functionLinenumberEnd: 929
    functionName: brpc::policy::RtmpContext::FindMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::FindMessageStream(\n    uint32_t stream_id, butil::intrusive_ptr<RtmpStreamBase>*
      stream)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:932,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:934,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:943,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:944,1
    - Dst: brpc::policy::RtmpContext::AllocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:947,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:948,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 931
    functionDepth: 2
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    - stream::reset
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddClientStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::AllocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:958,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:964,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:967,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 954
    functionDepth: 2
    functionLinenumber: 954
    functionLinenumberEnd: 972
    functionName: brpc::policy::RtmpContext::AddServerStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - LOG
    - brpc::policy::RtmpContext::AllocateMessageStreamId
    - stream::reset
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddServerStream(RtmpStreamBase* stream)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:976,1
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:981,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:986,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:989,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:991,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:995,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:996,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:997,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1001,1
    - Dst: brpc::policy::RtmpContext::DeallocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1002,1
    - Dst: brpc::policy::RtmpContext::DeallocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1004,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1006,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1007,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 974
    functionDepth: 1
    functionLinenumber: 974
    functionLinenumberEnd: 1010
    functionName: brpc::policy::RtmpContext::RemoveMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - RtmpStreamBase*::stream_id
    - erase
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - std::unique_lock::unlock
    - seek
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::RemoveMessageStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1021,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1029,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - out_transaction_id
    - handler
    argTypes:
    - uint32_t*
    - RtmpTransactionHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1036
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1036
    functionName: brpc::policy::RtmpContext::AddTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::AddTransaction(uint32_t* out_transaction_id,\n                                 RtmpTransactionHandler*
      handler)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1042,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1043,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1046,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - transaction_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1050
      start: 1038
    functionDepth: 1
    functionLinenumber: 1038
    functionLinenumberEnd: 1050
    functionName: brpc::policy::RtmpContext::RemoveTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - erase
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: RtmpTransactionHandler
    signature: 'RtmpTransactionHandler *

      RtmpContext::RemoveTransaction(uint32_t transaction_id)'
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1053,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1057,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1058,1
    - Dst: app::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1060,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1061,1
    - Dst: RtmpConnectRequest::set_app
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1064,1
    - Dst: flashVer::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1065,1
    - Dst: RtmpConnectRequest::set_flashver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1066,1
    - Dst: swfUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1068,1
    - Dst: RtmpConnectRequest::set_swfurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1069,1
    - Dst: tcUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1072,1
    - Dst: RtmpConnectRequest::mutable_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1073,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: app::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1075,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1077,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1078,1
    - Dst: RtmpConnectRequest::set_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1080,1
    - Dst: RtmpConnectRequest::set_fpad
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1082,1
    - Dst: RtmpConnectRequest::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1083,1
    - Dst: RtmpConnectRequest::set_audiocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1084,1
    - Dst: RtmpConnectRequest::set_videocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1085,1
    - Dst: RtmpConnectRequest::set_videofunction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1086,1
    - Dst: pageUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1087,1
    - Dst: RtmpConnectRequest::set_pageurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1088,1
    - Dst: RtmpConnectRequest::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1090,1
    - Dst: RtmpConnectRequest::set_stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1091,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1092,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1093,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1094,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1099,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1108,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1109,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1111,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1112,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1113,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1121,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1126,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1127,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1129,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1138,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1144,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1146,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1152,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 73
    argCount: 3
    argNames:
    - ' remote_side'
    - fd
    - simplified_rtmp
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1052
    functionDepth: 2
    functionLinenumber: 1052
    functionLinenumberEnd: 1153
    functionName: brpc::policy::RtmpContext::SendConnectRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - AMFOutputStream::good
    - pageUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - app::empty
    - RtmpConnectRequest::set_audiocodecs
    - std::string*::push_back
    - RtmpConnectRequest::set_videofunction
    - butil::IOBuf::append
    - butil::endpoint2str
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_swfurl
    - WriteAMFObject
    - RtmpConnectRequest::mutable_tcurl
    - WriteBigEndian4Bytes
    - RtmpConnectRequest::set_tcurl
    - memcpy
    - LOG
    - RtmpConnectRequest::set_flashver
    - tcUrl::empty
    - std::string*::reserve
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf::size
    - RtmpConnectRequest::set_fpad
    - RtmpConnectRequest::set_capabilities
    - WriteAll
    - std::string*::append
    - swfUrl::empty
    - RtmpConnectRequest::set_pageurl
    - RtmpConnectRequest::set_videocodecs
    - WriteAMFUint32
    - RtmpConnectRequest::set_objectencoding
    - app::size
    - WriteAMFString
    - flashVer::empty
    - RtmpConnectRequest::set_app
    linkageType: ''
    returnType: int
    signature: int RtmpContext::SendConnectRequest(const butil::EndPoint& remote_side,
      int fd, bool simplified_rtmp)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1158,1
    - Dst: brpc::policy::RtmpContext::WaitForS0S1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1159,1
    - Dst: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1161,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1164,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1166,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1169,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1171,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1172,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1155
    functionDepth: 4
    functionLinenumber: 1155
    functionLinenumberEnd: 1173
    functionName: brpc::policy::RtmpContext::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::WaitForC2
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForS0S1
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::Feed(butil::IOBuf* source, Socket* socket)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1177,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1180,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1182,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1189,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1193,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1196,1
    - Dst: adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1199,1
    - Dst: adobe_hs::C1::schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1200,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1201,1
    - Dst: adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1206,1
    - Dst: adobe_hs::S1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1209,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1210,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1214,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: adobe_hs::C1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1223,1
    - Dst: adobe_hs::S2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1226,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1227,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1230,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1237,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpHandshakeServerRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1242,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1243,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1244,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1248,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1250,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 54
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1251
      start: 1175
    functionDepth: 3
    functionLinenumber: 1175
    functionLinenumberEnd: 1251
    functionName: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - memcmp
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - butil::IOBuf::append
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - adobe_hs::S2::Generate
    - adobe_hs::S2::Save
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::C1::digest_blk::digest
    - brpc::policy::RtmpContext::WaitForC2
    - memcpy
    - LOG
    - adobe_hs::S1::Save
    - adobe_hs::C1::Load
    - butil::IOBuf*::length
    - malloc
    - adobe_hs::S1::Generate
    - WriteAll
    - Socket*::remote_side
    - adobe_hs::C1::schema
    - GetRtmpHandshakeServerRandom
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf::push_back
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC0C1orSimpleRtmp(butil::IOBuf* source,
      Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1254,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1255,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1259,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1253
    functionDepth: 3
    functionLinenumber: 1253
    functionLinenumberEnd: 1270
    functionName: brpc::policy::RtmpContext::WaitForC2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - Socket*::remote_side
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1273,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1274,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1278,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1281,1
    - Dst: adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1285,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1286,1
    - Dst: adobe_hs::C2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1290,1
    - Dst: adobe_hs::C2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1292,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1293,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1296,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1303,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1304,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1305,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1309,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1311,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1272
    functionDepth: 4
    functionLinenumber: 1272
    functionLinenumberEnd: 1312
    functionName: brpc::policy::RtmpContext::WaitForS0S1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C2::Generate
    - adobe_hs::C2::Save
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::S1::Load
    - GetRtmpTimestamp
    - butil::IOBuf::append
    - WriteAll
    - brpc::policy::RtmpContext::WaitForS2
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS0S1(butil::IOBuf* source, Socket*
      socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1315,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1316,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1319,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: brpc::policy::RtmpContext::SendConnectRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1324,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1326,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1314
    functionDepth: 3
    functionLinenumber: 1314
    functionLinenumberEnd: 1327
    functionName: brpc::policy::RtmpContext::WaitForS2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - Socket*::fd
    - brpc::policy::RtmpContext::OnChunks
    - brpc::policy::RtmpContext::SendConnectRequest
    - Socket*::remote_side
    - butil::IOBuf*::pop_front
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1331,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1333,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1342,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1343,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1346,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1354,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1361,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1362,1
    - Dst: RtmpChunkStream*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1364,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1329
    functionDepth: 2
    functionLinenumber: 1329
    functionLinenumberEnd: 1365
    functionName: brpc::policy::RtmpContext::OnChunks
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - butil::IOBuf*::fetch
    - RtmpChunkStream*::Feed
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::size
    - MakeParseError
    - butil::IOBuf*::fetch1
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::OnChunks(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1368,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1370,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - socket
    - received_bytes
    argTypes:
    - Socket*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1372
      start: 1367
    functionDepth: 2
    functionLinenumber: 1367
    functionLinenumberEnd: 1372
    functionName: brpc::policy::SendAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteWithoutOvercrowded
    - butil::HostToNet32
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: int
    signature: int SendAck(Socket* socket, uint64_t received_bytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: SendAck
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - socket
    - sz
    argTypes:
    - Socket*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1374
    functionDepth: 1
    functionLinenumber: 1374
    functionLinenumberEnd: 1382
    functionName: brpc::policy::RtmpContext::AddReceivedBytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - PLOG_IF
    - SendAck
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AddReceivedBytes(Socket* socket, uint32_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - conn_ctx
    - cs_id
    argTypes:
    - RtmpContext*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1389
      start: 1386
    functionDepth: 0
    functionLinenumber: 1386
    functionLinenumberEnd: 1389
    functionName: brpc::policy::RtmpChunkStream::RtmpChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::RtmpChunkStream(RtmpContext* conn_ctx, uint32_t
      cs_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1396
      start: 1391
    functionDepth: 0
    functionLinenumber: 1391
    functionLinenumberEnd: 1396
    functionName: RtmpChunkStream::ReadParams::ReadParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::ReadParams::ReadParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1398
    functionDepth: 0
    functionLinenumber: 1398
    functionLinenumberEnd: 1401
    functionName: RtmpChunkStream::WriteParams::WriteParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::WriteParams::WriteParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1406,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1408
      start: 1405
    functionDepth: 1
    functionLinenumber: 1405
    functionLinenumberEnd: 1408
    functionName: brpc::policy::InitClientMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitClientMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1413,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1415
      start: 1412
    functionDepth: 1
    functionLinenumber: 1412
    functionLinenumberEnd: 1415
    functionName: brpc::policy::InitServerMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitServerMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1420
      start: 1420
    functionDepth: 0
    functionLinenumber: 1420
    functionLinenumberEnd: 1420
    functionName: brpc::policy::ChunkStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChunkStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ChunkStatus>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1424
      start: 1422
    functionDepth: 0
    functionLinenumber: 1422
    functionLinenumberEnd: 1424
    functionName: brpc::policy::AddChunk
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ChunkStatus>
    linkageType: ''
    returnType: void
    signature: void AddChunk()
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1434,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1444,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1445,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1448,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1450,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1453,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1454,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1456,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1458,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1462,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1464,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1465,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1466,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1487,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1490,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1492,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1495,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1496,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1498,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1500,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1504,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1506,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1509,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1511,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1512,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1513,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1528,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1529,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1532,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1534,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1537,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1538,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1540,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1542,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1546,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1548,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1552,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1553,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1554,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1567,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1568,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1571,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1573,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1587,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1589,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1597,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1598,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1599,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1607,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1608,1
    - Dst: RtmpContext*::AddReceivedBytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1609,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: AddChunk
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1619,1
    - Dst: RtmpContext*::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1623,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1624,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1627,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1631,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1632,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1634,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1635,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1638,1
    - Dst: msg_body::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1640,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1646,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 158
    argCount: 3
    argNames:
    - ' bh'
    - source
    - socket
    argTypes:
    - RtmpBasicHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1426
    functionDepth: 2
    functionLinenumber: 1426
    functionLinenumberEnd: 1647
    functionName: brpc::policy::RtmpChunkStream::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - msg_body::clear
    - VLOG
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - AddChunk
    - butil::IOBuf*::fetch
    - RtmpContext*::AddReceivedBytes
    - butil::Timer::start
    - MethodStatus*::OnRequested
    - RtmpContext*::service
    - MakeMessage
    - brpc::policy::RtmpChunkStream::OnMessage
    - LOG
    - butil::Timer::Timer
    - ReadBigEndian3Bytes
    - butil::Timer::u_elapsed
    - butil::IOBuf*::size
    - CHECK
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - pthread_once
    - butil::Timer::stop
    - std::min
    - MethodStatus*::OnResponded
    - last_msg_header::is_valid
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult RtmpChunkStream::Feed(const RtmpBasicHeader& bh,\n                                  butil::IOBuf*
      source, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: GetBasicHeaderLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1652,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1654,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1662,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1664,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1669,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1679,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1680,1
    - Dst: WriteLittleEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1682,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1692,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1693,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1704,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1711,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1715,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1716,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1717,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1725,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1730,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1734,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1736,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1737,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 65
    argCount: 3
    argNames:
    - buf
    - ' mh'
    - body
    argTypes:
    - butil::IOBuf*
    - RtmpMessageHeader
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1740
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1740
    functionName: brpc::policy::RtmpChunkStream::SerializeMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::size
    - std::min
    - butil::IOBuf*::append
    - GetBasicHeaderLength
    - WriteBigEndian4Bytes
    - WriteBigEndian3Bytes
    - CHECK
    - last_msg_header::is_valid
    - CHECK_LE
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::cutn
    - WriteLittleEndian4Bytes
    - WriteBasicHeader
    linkageType: ''
    returnType: int
    signature: "int RtmpChunkStream::SerializeMessage(butil::IOBuf* buf,\n                                      const
      RtmpMessageHeader& mh,\n                                      butil::IOBuf*
      body)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CommandHandlerMap::CommandHandlerMap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1772,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1773,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1774,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1770
    functionDepth: 1
    functionLinenumber: 1770
    functionLinenumberEnd: 1794
    functionName: brpc::policy::InitCommandHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - init
    - CommandHandlerMap::CommandHandlerMap
    linkageType: ''
    returnType: void
    signature: void InitCommandHandlers()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1810,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1815,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1816,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1821,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1831,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 4
    argNames:
    - ' bh'
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpBasicHeader
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1834
      start: 1796
    functionDepth: 1
    functionLinenumber: 1796
    functionLinenumberEnd: 1834
    functionName: brpc::policy::RtmpChunkStream::OnMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::size
    - arraysize
    - CHECK_EQ
    - Socket*::remote_side
    - RTMP_ERROR
    - VLOG
    - messagetype2str
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnMessage(const RtmpBasicHeader& bh,\n                                const
      RtmpMessageHeader& mh,\n                                butil::IOBuf* msg_body,\n
      \                               Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1839,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1844,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1845,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1847,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1851,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1852,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1856
      start: 1836
    functionDepth: 1
    functionLinenumber: 1836
    functionLinenumberEnd: 1856
    functionName: brpc::policy::RtmpChunkStream::OnSetChunkSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetChunkSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1861,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1866,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1867,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1869,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1872,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1874
      start: 1858
    functionDepth: 1
    functionLinenumber: 1858
    functionLinenumberEnd: 1874
    functionName: brpc::policy::RtmpChunkStream::OnAbortMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAbortMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1879,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1884,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1885,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1876
    functionDepth: 1
    functionLinenumber: 1876
    functionLinenumberEnd: 1890
    functionName: brpc::policy::RtmpChunkStream::OnAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAck(\n    const RtmpMessageHeader& mh, butil::IOBuf*
      msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1895,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1900,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1901,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1902,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1903,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1904,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1907
      start: 1892
    functionDepth: 1
    functionLinenumber: 1892
    functionLinenumberEnd: 1907
    functionName: brpc::policy::RtmpChunkStream::OnWindowAckSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnWindowAckSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1912,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1917,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1918,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1920,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1924
      start: 1909
    functionDepth: 1
    functionLinenumber: 1909
    functionLinenumberEnd: 1924
    functionName: brpc::policy::RtmpChunkStream::OnSetPeerBandwidth
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetPeerBandwidth(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1929,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1934,1
    - Dst: ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1935,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamBegin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1939,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamEOF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1941,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamDry
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1943,1
    - Dst: brpc::policy::RtmpChunkStream::OnSetBufferLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1945,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1947,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1949,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1951,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferEmpty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1953,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferReady
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1955,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1957,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 28
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1959
      start: 1926
    functionDepth: 2
    functionLinenumber: 1926
    functionLinenumberEnd: 1959
    functionName: brpc::policy::RtmpChunkStream::OnUserControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnPingRequest
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnUserControlMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1964,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1966,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1969,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1970,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1971,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1976
      start: 1961
    functionDepth: 1
    functionLinenumber: 1961
    functionLinenumberEnd: 1976
    functionName: brpc::policy::RtmpChunkStream::OnStreamBegin
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamBegin(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1981,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1983,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1986,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1987,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1988,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1993
      start: 1978
    functionDepth: 1
    functionLinenumber: 1978
    functionLinenumberEnd: 1993
    functionName: brpc::policy::RtmpChunkStream::OnStreamEOF
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamEOF(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1998,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2000,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2003,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2004,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2005,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2010
      start: 1995
    functionDepth: 1
    functionLinenumber: 1995
    functionLinenumberEnd: 2010
    functionName: brpc::policy::RtmpChunkStream::OnStreamDry
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamDry(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2015,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2017,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2020,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2021,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2022,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2027
      start: 2012
    functionDepth: 1
    functionLinenumber: 2012
    functionLinenumberEnd: 2027
    functionName: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamIsRecorded(const RtmpMessageHeader&
      mh,\n                                         const butil::StringPiece& event_data,\n
      \                                        Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2032,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2034,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2037,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2038,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2039,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2044,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2051,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2052,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2053,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2058
    functionName: brpc::policy::RtmpChunkStream::OnSetBufferLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetBufferLength(const RtmpMessageHeader& mh,\n
      \                                       const butil::StringPiece& event_data,\n
      \                                       Socket* socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2063,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2065,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2068,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2069,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2070,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2076,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2077,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2080,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2081,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2085
    functionName: brpc::policy::RtmpChunkStream::OnPingRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - WriteBigEndian2Bytes
    - size
    - WriteBigEndian4Bytes
    - data
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - PLOG
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingRequest(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2090,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2092,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2095,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2096,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2097,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: RtmpService*::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2103
      start: 2087
    functionDepth: 1
    functionLinenumber: 2087
    functionLinenumberEnd: 2103
    functionName: brpc::policy::RtmpChunkStream::OnPingResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpService*::OnPingResponse
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingResponse(const RtmpMessageHeader& mh,\n
      \                                    const butil::StringPiece& event_data,\n
      \                                    Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2111,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2112,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2113,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2121
      start: 2105
    functionDepth: 1
    functionLinenumber: 2105
    functionLinenumberEnd: 2121
    functionName: brpc::policy::RtmpChunkStream::OnBufferEmpty
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferEmpty(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2126,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2127,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2128,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2136
      start: 2123
    functionDepth: 1
    functionLinenumber: 2123
    functionLinenumberEnd: 2136
    functionName: brpc::policy::RtmpChunkStream::OnBufferReady
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferReady(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2141,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2152,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2156,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2157,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: butil::intrusive_ptr::CallOnAudioMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2138
    functionDepth: 1
    functionLinenumber: 2138
    functionLinenumberEnd: 2164
    functionName: brpc::policy::RtmpChunkStream::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - butil::intrusive_ptr::CallOnAudioMessage
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAudioMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2169,1
    - Dst: is_video_frame_type_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2178,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2179,1
    - Dst: is_video_codec_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2181,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2182,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2184,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2188,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2189,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: butil::intrusive_ptr::CallOnVideoMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2196
      start: 2166
    functionDepth: 1
    functionLinenumber: 2166
    functionLinenumberEnd: 2196
    functionName: brpc::policy::RtmpChunkStream::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::intrusive_ptr::CallOnVideoMessage
    - butil::IOBuf*::cut1
    - is_video_frame_type_valid
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - is_video_codec_valid
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnVideoMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2209,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2213,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2218,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2224,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2225,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2229,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2230,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: butil::intrusive_ptr::CallOnMetaData
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2235,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2238,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2243,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2244,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2248,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2249,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: butil::intrusive_ptr::CallOnCuePoint
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2254,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2262
      start: 2198
    functionDepth: 1
    functionLinenumber: 2198
    functionLinenumberEnd: 2262
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - ReadAMFObject
    - butil::intrusive_ptr::CallOnCuePoint
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::CallOnMetaData
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - AMFInputStream::check_emptiness
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2268
      start: 2264
    functionDepth: 1
    functionLinenumber: 2264
    functionLinenumberEnd: 2268
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF0(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2275,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2276,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2279,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2282,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2284,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2290
      start: 2270
    functionDepth: 1
    functionLinenumber: 2270
    functionLinenumberEnd: 2290
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - pthread_once
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2294,1
    - Dst: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2296
      start: 2292
    functionDepth: 2
    functionLinenumber: 2292
    functionLinenumberEnd: 2296
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2302
      start: 2298
    functionDepth: 1
    functionLinenumber: 2298
    functionLinenumberEnd: 2302
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF3(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2306,1
    - Dst: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2308
      start: 2304
    functionDepth: 2
    functionLinenumber: 2304
    functionLinenumberEnd: 2308
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2314
      start: 2310
    functionDepth: 1
    functionLinenumber: 2310
    functionLinenumberEnd: 2314
    functionName: brpc::policy::RtmpChunkStream::OnAggregateMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAggregateMessage(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2337,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2341,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2342,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2345,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2346,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2347,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2350,1
    - Dst: RtmpConnectRequest*::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2351,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2359,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2366,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2380,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2381,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2387,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2397,1
    - Dst: RtmpConnectResponse::has_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2398,1
    - Dst: RtmpConnectResponse::set_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2399,1
    - Dst: RtmpConnectResponse::has_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2401,1
    - Dst: RtmpConnectResponse::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2402,1
    - Dst: RtmpConnectResponse::has_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2404,1
    - Dst: RtmpConnectResponse::set_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2405,1
    - Dst: RtmpConnectResponse::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2407,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2408,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2410,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2411,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2412,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2413,1
    - Dst: RtmpInfo::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpConnectRequest*::objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2416,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2417,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2418,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2420,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2424,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2427,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2431,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2432,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2433,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2438,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2440,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2443,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2445,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2448,1
    - Dst: RtmpConnectResponse::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2449,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2450,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 69
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2452
      start: 2333
    functionDepth: 1
    functionLinenumber: 2333
    functionLinenumberEnd: 2452
    functionName: brpc::policy::RtmpChunkStream::OnConnect
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - RtmpInfo::set_objectencoding
    - RtmpConnectResponse::set_capabilities
    - TemporaryArrayBuilder::push
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::has_fmsver
    - butil::IOBuf::clear
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFObject
    - next::reset
    - TemporaryArrayBuilder::size
    - RtmpConnectResponse::ShortDebugString
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - RtmpConnectResponse::has_capabilities
    - PLOG
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    - RtmpConnectResponse::set_fmsver
    - CHECK
    - release
    - Socket*::remote_side
    - Socket*::Write
    - WriteAMFUint32
    - RtmpConnectResponse::has_mode
    - Socket*::SetFailed
    - RtmpConnectRequest*::objectencoding
    - std::string::empty
    - RtmpConnectResponse::set_mode
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnConnect(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' mh'
    - socket
    argTypes:
    - RtmpMessageHeader
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2460
      start: 2454
    functionDepth: 0
    functionLinenumber: 2454
    functionLinenumberEnd: 2460
    functionName: brpc::policy::RtmpChunkStream::OnBWDone
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBWDone(const RtmpMessageHeader& mh,\n                               AMFInputStream*,\n
      \                              Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: saved_on_connect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2469
      start: 2462
    functionDepth: 0
    functionLinenumber: 2462
    functionLinenumberEnd: 2469
    functionName: brpc::policy::RtmpContext::OnConnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - saved_on_connect
    linkageType: ''
    returnType: void
    signature: void RtmpContext::OnConnected(int error_code)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2474,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2475,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2481,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2482,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2489,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2490,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2492,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2499,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2500,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2504,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2506,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2511,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2513
      start: 2471
    functionDepth: 1
    functionLinenumber: 2471
    functionLinenumberEnd: 2513
    functionName: brpc::policy::RtmpChunkStream::OnResult
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - CHECK
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnResult(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream, Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2519,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2520,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2525,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2529,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2530,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2534,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2536,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2540,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2542
      start: 2515
    functionDepth: 1
    functionLinenumber: 2515
    functionLinenumberEnd: 2542
    functionName: brpc::policy::RtmpChunkStream::OnError
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnError(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2547,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2548,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2552,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2553,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2556,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2557,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2561,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2562,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2565,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2566,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2567,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2570,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2571,1
    - Dst: static_cast<RtmpClientStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2574
      start: 2544
    functionDepth: 1
    functionLinenumber: 2544
    functionLinenumberEnd: 2574
    functionName: brpc::policy::RtmpChunkStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpClientStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStatus(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream,\n                               Socket* socket)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2579,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2581,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2585,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2586,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2593,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2594,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2597,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2598,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2599,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2601,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2602,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2603,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2606,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2607,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2611,1
    - Dst: RtmpService*::NewStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2622,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2624,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2627,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2632,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2633,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2634,1
    - Dst: butil::intrusive_ptr<RtmpServerStream>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2638,1
    - Dst: Socket*::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2639,1
    - Dst: Socket*::NotifyOnFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2640,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2650,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2651,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2652,1
    - Dst: AMFObject::SetBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2654,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2655,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2657,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2661,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2665,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2666,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2667,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2674,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2680,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2684,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2687,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2690,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2694,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2695,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2696,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2705,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2707,1
    - Dst: brpc::policy::RtmpChunkStream::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2709,1
    - Dst: brpc::policy::RtmpChunkStream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2711,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 95
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2713
      start: 2576
    functionDepth: 3
    functionLinenumber: 2576
    functionLinenumberEnd: 2713
    functionName: brpc::policy::RtmpChunkStream::OnCreateStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - AMFOutputStream::good
    - AMFObject::Find
    - butil::intrusive_ptr::OnStopInternal
    - WriteAMFNull
    - bthread_id_create
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::OnPublish
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - RtmpService*::NewStream
    - WriteAMFObject
    - WriteWithoutOvercrowded
    - Socket*::NotifyOnFailed
    - AMFObject::SetBool
    - RtmpPublishType2Str
    - RTMP_ERROR
    - bthread_id_error
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - Socket*::ReAddress
    - butil::intrusive_ptr<RtmpServerStream>
    - AMFField*::IsString
    - butil::intrusive_ptr::stream_id
    - butil::IOBuf::size
    - brpc::policy::RtmpChunkStream::OnPlay
    - stream_multiplexing
    - CHECK
    - Str2RtmpPublishType
    - berror
    - Socket*::remote_side
    - AMFField*::AsString
    - WriteAMFUint32
    - std::string::empty
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCreateStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2726,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2736,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2741,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2743
      start: 2723
    functionDepth: 1
    functionLinenumber: 2723
    functionLinenumberEnd: 2743
    functionName: brpc::policy::OnPlayContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - error_cstr
    - ok
    - SendStopMessage
    - stream_id
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnPlayContinuation::Run()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2748,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2749,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2753,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2754,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2759,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2760,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2764,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2765,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2770,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2771,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2772,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2776,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2777,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2778,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2782,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2783,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2784,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2788,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2795,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2804,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2805,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2813,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2817,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2818,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2819,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2821,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2822,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2823,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2824,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2826,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2827,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2830,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2832,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2836,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2840,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2841,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2842,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2844,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2845,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2846,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2847,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2849,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2850,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2853,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2855,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2858,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2862,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2863,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2864,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2866,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2867,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2870,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2872,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2875,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2879,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2881,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2882,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2884,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2885,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2888,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2890,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2892,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2893,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2894,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2899,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2902,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2905,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: RtmpServerStream*::OnPause
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2915,1
    - Dst: OnPlayContinuation::OnPlayContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2918,1
    - Dst: OnPlayContinuation*::player_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2919,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2920,1
    - Dst: OnPlayContinuation*::player_stream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2921,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 115
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2923
      start: 2745
    functionDepth: 1
    functionLinenumber: 2745
    functionLinenumberEnd: 2923
    functionName: brpc::policy::RtmpChunkStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - WriteAMFNull
    - OnPlayContinuation::OnPlayContinuation
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - OnPlayContinuation*::player_stream::OnPlay
    - RtmpServerStream*::OnPause
    - TemporaryArrayBuilder::push
    - static_cast<RtmpServerStream*>
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ReadAMFNumber
    - WriteAMFObject
    - next::reset
    - WriteBigEndian2Bytes
    - TemporaryArrayBuilder::size
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - ReadAMFString
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - AMFInputStream*::check_emptiness
    - ReadAMFBool
    - butil::IOBuf::size
    - release
    - Socket*::remote_side
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - RTMP_WARNING
    - WriteAMFUint32
    - butil::intrusive_ptr::detach
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2928,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2929,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2933,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2934,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2937,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2938,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2942,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2943,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2946,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2947,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2948,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2953
      start: 2925
    functionDepth: 1
    functionLinenumber: 2925
    functionLinenumberEnd: 2953
    functionName: brpc::policy::RtmpChunkStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay2(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2958,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2959,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2963,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2964,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2967,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2968,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2972,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2973,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2976,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2977,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2984,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2987
      start: 2955
    functionDepth: 1
    functionLinenumber: 2955
    functionLinenumberEnd: 2987
    functionName: brpc::policy::RtmpChunkStream::OnDeleteStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDeleteStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2992,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2993,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2997,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2998,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3001,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3002,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3005,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3006,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3017
      start: 2989
    functionDepth: 1
    functionLinenumber: 2989
    functionLinenumberEnd: 3017
    functionName: brpc::policy::RtmpChunkStream::OnCloseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCloseStream(const RtmpMessageHeader& mh,\n
      \                                   AMFInputStream* istream,\n                                    Socket*
      socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3030,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3032,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3033,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3037,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3042,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3046,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3047,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3048,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3050,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3051,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3052,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3056,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3057,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3059,1
    - Dst: chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3060,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3065,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3067
      start: 3028
    functionDepth: 1
    functionLinenumber: 3028
    functionLinenumberEnd: 3067
    functionName: brpc::policy::OnPublishContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - error_cstr
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - stream_id
    - butil::IOBuf::IOBuf
    - remote_side
    - WriteAMFObject
    - SendStopMessage
    - WriteWithoutOvercrowded
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - ok
    - chunk_stream_id
    - butil::IOBuf::size
    - CHECK
    - WriteAMFUint32
    - socket
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_description
    linkageType: ''
    returnType: void
    signature: void OnPublishContinuation::Run()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3072,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3073,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3077,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3078,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3081,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3082,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3086,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3087,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3091,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3092,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3096,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3097,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3101,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3104,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3106,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3107,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3108,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3113,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: OnPublishContinuation::OnPublishContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3116,1
    - Dst: OnPublishContinuation*::publish_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3118,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3119,1
    - Dst: RtmpServerStream*::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3120,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3122
      start: 3069
    functionDepth: 1
    functionLinenumber: 3069
    functionLinenumberEnd: 3122
    functionName: brpc::policy::RtmpChunkStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::intrusive_ptr::detach
    - brpc::policy::RtmpChunkStream::connection_context
    - OnPublishContinuation::OnPublishContinuation
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::get
    - RtmpServerStream*::OnPublish
    - RtmpPublishType2Str
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPublish(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3125,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3129,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3130,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3131,1
    - Dst: WriteAMFUndefined
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3132,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3137,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - sock
    - transaction_id
    argTypes:
    - Socket*
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3142
      start: 3124
    functionDepth: 1
    functionLinenumber: 3124
    functionLinenumberEnd: 3142
    functionName: brpc::policy::SendFMLEStartResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - WriteAMFUndefined
    - PLOG
    - WriteAMFString
    - CHECK
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: bool SendFMLEStartResponse(Socket* sock, double transaction_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3146,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3147,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3151,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3152,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3155,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3156,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3160,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3161,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3164,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3166
      start: 3144
    functionDepth: 1
    functionLinenumber: 3144
    functionLinenumberEnd: 3166
    functionName: brpc::policy::RtmpChunkStream::OnReleaseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnReleaseStream(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3170,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3171,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3175,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3176,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3179,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3180,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3184,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3185,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3188,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3189,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3190
      start: 3168
    functionDepth: 1
    functionLinenumber: 3168
    functionLinenumberEnd: 3190
    functionName: brpc::policy::RtmpChunkStream::OnFCPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCPublish(\n    const RtmpMessageHeader& mh,
      AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3194,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3195,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3199,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3200,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3209,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3212,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3213,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3214
      start: 3192
    functionDepth: 1
    functionLinenumber: 3192
    functionLinenumberEnd: 3214
    functionName: brpc::policy::RtmpChunkStream::OnFCUnpublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCUnpublish(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3226
      start: 3216
    functionDepth: 0
    functionLinenumber: 3216
    functionLinenumberEnd: 3226
    functionName: brpc::policy::RtmpChunkStream::OnGetStreamLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnGetStreamLength(\n    const RtmpMessageHeader&,
      AMFInputStream*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3231
      start: 3228
    functionDepth: 0
    functionLinenumber: 3228
    functionLinenumberEnd: 3231
    functionName: brpc::policy::RtmpChunkStream::OnCheckBW
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCheckBW(\n    const RtmpMessageHeader&, AMFInputStream*,
      Socket*)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3236,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3237,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3241,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3242,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3245,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3246,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3250,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3251,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3255,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3256,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3257,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3262,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3267,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3268,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3269,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3271,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3272,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3273,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3274,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3277,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3278,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3279,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3281,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3282,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3283,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3288,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3289,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3295,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3300
      start: 3233
    functionDepth: 1
    functionLinenumber: 3233
    functionLinenumberEnd: 3300
    functionName: brpc::policy::RtmpChunkStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - Socket*::Write
    - WriteAMFUint32
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSeek(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3305,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3306,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3310,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3311,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3314,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3315,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3319,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3320,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3324,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3325,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3329,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3330,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3331,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3338,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3346,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3351,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3352,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3353,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3356,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3358,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3360,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3361,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3362,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3365,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3366,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3367,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3370,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3372,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3374,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3375,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3377,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3381,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3382,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3385,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3392,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3394,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3396,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3397,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3399,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3401,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 82
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3411
      start: 3302
    functionDepth: 1
    functionLinenumber: 3302
    functionLinenumberEnd: 3411
    functionName: brpc::policy::RtmpChunkStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - MakeUnsentControlMessage
    - ReadAMFNumber
    - WriteAMFObject
    - WriteBigEndian2Bytes
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - ReadAMFBool
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPause(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3416,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3418,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3421,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3423,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3424
      start: 3415
    functionDepth: 0
    functionLinenumber: 3415
    functionLinenumberEnd: 3424
    functionName: brpc::policy::IsPossiblyRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::fetch1
    - MakeParseError
    - MakeMessage
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult IsPossiblyRtmp(const butil::IOBuf* source)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3432,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3434,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3435,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3442,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3446,1
    - Dst: brpc::policy::IsPossiblyRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3448,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3449,1
    - Dst: RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3454,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3455,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3457,1
    - Dst: RtmpContext*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3460,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3461
      start: 3426
    functionDepth: 1
    functionLinenumber: 3426
    functionLinenumberEnd: 3461
    functionName: brpc::policy::ParseRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    - MakeParseError
    - RtmpContext::RtmpContext
    - RtmpContext*::Feed
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - brpc::policy::IsPossiblyRtmp
    - Socket*::reset_parsing_context
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRtmpMessage(butil::IOBuf* source, Socket *socket,
      bool read_eof,\n                             const void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3465
      start: 3463
    functionDepth: 1
    functionLinenumber: 3463
    functionLinenumberEnd: 3465
    functionName: brpc::policy::ProcessRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRtmpMessage(InputMessageBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - stream
    - call_id
    argTypes:
    - RtmpClientStream*
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3480
      start: 3478
    functionDepth: 0
    functionLinenumber: 3478
    functionLinenumberEnd: 3480
    functionName: brpc::policy::OnServerStreamCreated::OnServerStreamCreated
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::OnServerStreamCreated(\n    RtmpClientStream*
      stream, CallId call_id)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3490,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3493,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3496,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3499,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3501,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3502,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3507,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3511,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3514,1
    - Dst: AMFField*::IsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: AMFField*::AsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3525,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3530,1
    - Dst: RtmpContext*::AddClientStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3539,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3543,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3548,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3554,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3555
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3555
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - AMFObject::Find
    - ControllerPrivateAccessor::span
    - AMFInputStream*::popped_bytes
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - RtmpContext*::AddClientStream
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - get
    - Span*::set_response_size
    - LOG
    - RtmpInfo::description
    - LOG_IF
    - butil::gettimeofday_us
    - ReadAMFUint32
    - AMFField*::AsBool
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Controller*::OnVersionedRPCReturned
    - RtmpInfo::code
    - Span*::set_base_real_us
    - AMFField*::IsBool
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::Run(bool error,\n                                const
      RtmpMessageHeader&,\n                                AMFInputStream* istream,\n
      \                               Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3559
      start: 3557
    functionDepth: 0
    functionLinenumber: 3557
    functionLinenumberEnd: 3559
    functionName: brpc::policy::OnServerStreamCreated::Cancel
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnServerStreamCreated::Cancel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3565,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3571,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3573,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3578,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3589,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3591,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3592,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3593,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3597,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3598,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3600,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3602,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3605,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3609,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3613,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3617,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3622,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3624,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3625
      start: 3561
    functionDepth: 2
    functionLinenumber: 3561
    functionLinenumberEnd: 3625
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - WriteAMFObject
    - AMFObject::SetString
    - static_cast<RtmpContext*>
    - description
    - RtmpPublishType2Str
    - play_name::empty
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf::size
    - CHECK
    - parsing_context
    - publish_name::empty
    - WriteAMFUint32
    - WriteAMFString
    - SetFailed
    - RtmpContext*::GetChunkStream
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpCreateStreamMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3640,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3644,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3650,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3653,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3655,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3660,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3666,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3668,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3670
      start: 3627
    functionDepth: 1
    functionLinenumber: 3627
    functionLinenumberEnd: 3670
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::set_log_id
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - OnServerStreamCreated::OnServerStreamCreated
    - Controller*::log_id
    - Socket*::parsing_context
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpTransactionHandler*::Cancel
    - RtmpContext*::AddTransaction
    - Controller*::call_id
    - RtmpClientStream*::options
    - butil::BaseIteratorRangeToNumberTraits::max
    - Socket*::description
    - CHECK_LT
    - Controller*::SetFailed
    - Controller*::response
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: "void PackRtmpRequest(butil::IOBuf* /*buf*/,\n                     SocketMessage**
      user_message,\n                     uint64_t /*correlation_id*/,\n                     const
      google::protobuf::MethodDescriptor* /*NULL*/,\n                     Controller*
      cntl,\n                     const butil::IOBuf& /*request*/,\n                     const
      Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3675
      start: 3672
    functionDepth: 0
    functionLinenumber: 3672
    functionLinenumberEnd: 3675
    functionName: brpc::policy::SerializeRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeRtmpRequest(butil::IOBuf* /*buf*/,\n                          Controller*
      /*cntl*/,\n                          const google::protobuf::Message* /*NULL*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - s
    - ' msg'
    argTypes:
    - Socket*
    - SocketMessagePtr<>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::policy::WriteWithoutOvercrowded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 9
    functionsReached:
    - Socket*::Write
    linkageType: ''
    returnType: int
    signature: int WriteWithoutOvercrowded(Socket* s, SocketMessagePtr<>& msg)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 34
    argCount: 1
    argNames:
    - t
    argTypes:
    - RtmpMessageType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 91
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(RtmpMessageType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: brpc::policy::messagetype2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::messagetype2str
    linkageType: ''
    returnType: char
    signature: char * messagetype2str(uint8_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:114,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:116,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: brpc::policy::InitRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 122
    functionName: brpc::policy::GetRtmpHandshakeServerRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeServerRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:129,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:131,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: brpc::policy::InitRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::fast_rand
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: brpc::policy::GetRtmpHandshakeClientRandom
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetRtmpHandshakeClientRandom()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: brpc::policy::GetRtmpTimestamp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRtmpTimestamp()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 13
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 14
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 14
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:151,1
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:158,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:160,1
    - Dst: HMAC
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 5
    argNames:
    - key
    - key_size
    - data
    - data_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 178
    functionName: brpc::policy::adobe_hs::openssl_HMACsha256
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - const_cast<void*>
    - LOG_ONCE
    - HMAC
    - LOG
    - EVP_Digest
    linkageType: ''
    returnType: int
    signature: "int openssl_HMACsha256(const void* key, int key_size,\n                       const
      void* data, int data_size, void* digest)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: brpc::policy::adobe_hs::KeyBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 219
    functionName: brpc::policy::adobe_hs::KeyBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    functionName: brpc::policy::adobe_hs::KeyBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    functionName: brpc::policy::adobe_hs::KeyBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: brpc::policy::adobe_hs::KeyBlock::key
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * key()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    functionName: brpc::policy::adobe_hs::DigestBlock::random0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random0() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: brpc::policy::adobe_hs::DigestBlock::random0_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random0_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: brpc::policy::adobe_hs::DigestBlock::random1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * random1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: brpc::policy::adobe_hs::DigestBlock::random1_size
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int random1_size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: brpc::policy::adobe_hs::DigestBlock::digest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * digest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: brpc::policy::adobe_hs::C1S1Base::C1S1Base
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void C1S1Base()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    functionName: brpc::policy::adobe_hs::C1S1Base::schema
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: C1S1Schema
    signature: C1S1Schema schema() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 281
    functionName: brpc::policy::adobe_hs::C1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 14
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ComputeDigestBase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 290
    functionName: brpc::policy::adobe_hs::S1::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 14
    functionsReached:
    - ComputeDigestBase
    linkageType: ''
    returnType: bool
    signature: bool ComputeDigest(void* digest) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 312
    functionDepth: 3
    functionLinenumber: 312
    functionLinenumberEnd: 313
    functionName: brpc::policy::adobe_hs::C2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* s1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - s1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 315
    functionName: brpc::policy::adobe_hs::C2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* s1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c1_digest
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 321
    functionName: brpc::policy::adobe_hs::S2::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Generate
    linkageType: ''
    returnType: bool
    signature: bool Generate(const void* c1_digest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::adobe_hs::C2S2Base::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1_digest
    - buf
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 323
    functionName: brpc::policy::adobe_hs::S2::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C2S2Base::Load
    linkageType: ''
    returnType: bool
    signature: bool Load(const void* c1_digest, const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:328,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 334
    functionName: brpc::policy::adobe_hs::KeyBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:342,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 346
    functionName: brpc::policy::adobe_hs::KeyBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:349,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:350,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 352
    functionName: brpc::policy::adobe_hs::KeyBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void KeyBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:355,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: brpc::policy::adobe_hs::DigestBlock::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Generate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 373
    functionName: brpc::policy::adobe_hs::DigestBlock::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Load(const void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:376,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:377,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 379
    functionName: brpc::policy::adobe_hs::DigestBlock::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void DigestBlock::Save(void* buf) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:382,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:383,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:384,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random0_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:385,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    - Dst: brpc::policy::adobe_hs::DigestBlock::random1_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: brpc::policy::adobe_hs::DigestBlock::SaveWithoutDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1_size
    - brpc::policy::adobe_hs::DigestBlock::random1
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - memcpy
    linkageType: ''
    returnType: void
    signature: void DigestBlock::SaveWithoutDigest(void* buf) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:390,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:391,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:392,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:394,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:395,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:398,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:399,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:402,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 405
    functionName: brpc::policy::adobe_hs::C1S1Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 15
    functionsReached:
    - CHECK
    - brpc::policy::adobe_hs::C1S1Base::Save
    - WriteBigEndian4Bytes
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool C1S1Base::Save(void* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:411,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:412,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:414,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:415,1
    - Dst: SaveWithoutDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:417,1
    - Dst: brpc::policy::adobe_hs::C1S1Base::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:420,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:425,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 3
    argNames:
    - key
    - key_size
    - digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 407
    functionDepth: 2
    functionLinenumber: 407
    functionLinenumberEnd: 430
    functionName: brpc::policy::adobe_hs::C1S1Base::ComputeDigestBase
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::adobe_hs::C1S1Base::Save
    - openssl_HMACsha256
    - WriteBigEndian4Bytes
    - SaveWithoutDigest
    - memcpy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C1S1Base::ComputeDigestBase(const void* key, int key_size,\n
      \                                void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:434,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:436,1
    - Dst: brpc::policy::adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:437,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - schema
    argTypes:
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 439
    functionName: brpc::policy::adobe_hs::C1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::C1::Generate
    linkageType: ''
    returnType: bool
    signature: bool C1::Generate(C1S1Schema schema)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:442,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:443,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:444,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:447,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:448,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:451,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:454,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:460,1
    - Dst: brpc::policy::adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:461,1
    - Dst: brpc::policy::adobe_hs::C1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:462,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:463,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:466,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 472
    functionName: brpc::policy::adobe_hs::C1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - memcmp
    - digest
    - static_cast<const uint8_t*>
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool C1::Load(const void* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:475,1
    - Dst: bvar::get_uptime
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:476,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:478,1
    - Dst: brpc::policy::adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:479,1
    - Dst: DHWrapper::initialize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:482,1
    - Dst: DHWrapper::copy_shared_key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key_blk::key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:486,1
    - Dst: key
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:487,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:488,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:491,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ' c1'
    argTypes:
    - C1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - DHWrapper::copy_shared_key
    - digest
    - bvar::get_uptime
    - brpc::policy::adobe_hs::S1::Generate
    - key_blk::key
    - DHWrapper::initialize
    - schema
    - key
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Generate(const C1& c1)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const uint8_t*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:495,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:497,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:498,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:500,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:501,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:503,1
    - Dst: brpc::policy::adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:504,1
    - Dst: brpc::policy::adobe_hs::S1::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:508,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    - Dst: digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - schema
    argTypes:
    - void*
    - C1S1Schema
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 516
    functionName: brpc::policy::adobe_hs::S1::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - memcmp
    - digest
    - brpc::policy::adobe_hs::S1::Load
    - static_cast<const uint8_t*>
    - ReadBigEndian4Bytes
    - LOG
    - brpc::policy::adobe_hs::S1::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: bool S1::Load(const void* buf, C1S1Schema schema)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:523,1
    - Dst: openssl_HMACsha256
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - digest
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 534
    functionName: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 14
    functionsReached:
    - memcpy
    - openssl_HMACsha256
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::ComputeDigest(const void* key, int key_size,\n                             const
      void* c1s1_digest, void* digest) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:539,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - key
    - key_size
    - c1s1_digest
    argTypes:
    - void*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 536
    functionDepth: 2
    functionLinenumber: 536
    functionLinenumberEnd: 542
    functionName: brpc::policy::adobe_hs::C2S2Base::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 16
    functionsReached:
    - butil::fast_rand
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Generate(const void* key, int key_size,\n                        const
      void* c1s1_digest)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:546,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:547,1
    - Dst: brpc::policy::adobe_hs::C2S2Base::ComputeDigest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:550,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - key
    - key_size
    - c1s1_digest
    - buf
    argTypes:
    - void*
    - int
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 2
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: brpc::policy::adobe_hs::C2S2Base::Load
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 16
    functionsReached:
    - memcmp
    - memcpy
    - LOG
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    linkageType: ''
    returnType: bool
    signature: "bool C2S2Base::Load(const void* key, int key_size, const void* c1s1_digest,\n
      \                   const void* buf)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 559
    functionName: brpc::policy::adobe_hs::C2S2Base::Save
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void C2S2Base::Save(void* buf) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 576
    functionName: brpc::policy::GetBasicHeaderLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBasicHeaderLength(uint32_t cs_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:583,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:594,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - buf
    - chunk_type
    - cs_id
    argTypes:
    - char**
    - RtmpChunkType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 579
    functionDepth: 1
    functionLinenumber: 579
    functionLinenumberEnd: 597
    functionName: brpc::policy::WriteBasicHeader
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void WriteBasicHeader(char** buf, RtmpChunkType chunk_type, uint32_t
      cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:604,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:605,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:616,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:617,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 2
    argNames:
    - fd
    - buf
    argTypes:
    - int
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 603
    functionDepth: 2
    functionLinenumber: 603
    functionLinenumberEnd: 624
    functionName: brpc::policy::WriteAll
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    - butil::IOBuf*::cut_into_file_descriptor
    - bthread_usleep
    linkageType: ''
    returnType: int
    signature: int WriteAll(int fd, butil::IOBuf* buf)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:630,1
    - Dst: adobe_hs::C1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:633,1
    - Dst: adobe_hs::C1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:636,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:637,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:640,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:650,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:651,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:652,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::GetRtmpHandshakeClientRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:653,1
    - Dst: brpc::policy::WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - fd
    - is_simple_handshake
    argTypes:
    - int
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 628
    functionDepth: 3
    functionLinenumber: 628
    functionLinenumberEnd: 656
    functionName: brpc::policy::SendC0C1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Save
    - brpc::policy::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - adobe_hs::C1::Generate
    - brpc::policy::WriteBigEndian4Bytes
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - LOG
    linkageType: ''
    returnType: int
    signature: int SendC0C1(int fd, bool* is_simple_handshake)
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 667
    functionName: brpc::policy::RtmpContext::state2str
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * RtmpContext::state2str(State s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:672,1
    - Dst: brpc::policy::RtmpContext::state2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:673,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' remote_side'
    - new_state
    argTypes:
    - butil::EndPoint
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 674
    functionName: brpc::policy::RtmpContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 12
    functionsReached:
    - brpc::policy::RtmpContext::state2str
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SetState(const butil::EndPoint& remote_side, State
      new_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:679,1
    - Dst: RtmpUnsentMessage*::body::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:684,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 4
    argNames:
    - message_type
    - chunk_stream_id
    - data
    - n
    argTypes:
    - uint8_t
    - uint32_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 686
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 15
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpUnsentMessage*::body::append
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id,\n    const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:690,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - message_type
    - data
    - n
    argTypes:
    - uint8_t
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 688
    functionDepth: 1
    functionLinenumber: 688
    functionLinenumberEnd: 692
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 16
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const void* data, size_t n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:697,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - message_type
    - chunk_stream_id
    - ' body'
    argTypes:
    - uint8_t
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 703
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 703
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 16
    functionsReached:
    - RtmpUnsentMessage::RtmpUnsentMessage
    - size
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      uint32_t chunk_stream_id, const butil::IOBuf& body)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:707,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - message_type
    - ' body'
    argTypes:
    - uint8_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 709
      start: 705
    functionDepth: 1
    functionLinenumber: 705
    functionLinenumberEnd: 709
    functionName: brpc::policy::MakeUnsentControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 17
    functionsReached:
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: RtmpUnsentMessage
    signature: "RtmpUnsentMessage * MakeUnsentControlMessage(\n    uint8_t message_type,
      const butil::IOBuf& body)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:731,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:733,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:734,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:735,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:738,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:740,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - copt
    - server
    argTypes:
    - RtmpClientOptions*
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 711
    functionDepth: 1
    functionLinenumber: 711
    functionLinenumberEnd: 741
    functionName: brpc::policy::RtmpContext::RtmpContext
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    - Server*::options
    - reserve
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::RtmpContext(const RtmpClientOptions* copt, const
      Server* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:744,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:748,1
    - Dst: butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:749,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:755,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:756,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:763,1
    - Dst: butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:765,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:768,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:772,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:774,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:779,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 781
      start: 743
    functionDepth: 1
    functionLinenumber: 743
    functionLinenumberEnd: 781
    functionName: RtmpContext::~RtmpContext()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - end
    - free
    - load
    - store
    - empty
    - clear
    - begin
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpContext::~RtmpContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 785
    functionName: brpc::policy::RtmpContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpContext::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:792,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:794,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:795,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:797,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:798,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:800,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:801,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:802,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:808,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:810,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:811,1
    - Dst: RtmpUnsentMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:812,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 787
    functionDepth: 2
    functionLinenumber: 787
    functionLinenumberEnd: 813
    functionName: brpc::policy::RtmpUnsentMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - Socket*::SetFailed
    - Socket*::parsing_context
    - release
    - std::unique_ptr::reset
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpUnsentMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:816,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 817
    functionName: RtmpContext::SubChunkArray::SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::SubChunkArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:821,1
    - Dst: store
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 827
    functionName: RtmpContext::SubChunkArray::~SubChunkArray()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - store
    - load
    linkageType: ''
    returnType: void
    signature: void RtmpContext::SubChunkArray::~SubChunkArray()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:831,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:836,1
    - Dst: SubChunkArray::SubChunkArray
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:839,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:841,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:849,1
    - Dst: RtmpChunkStream::RtmpChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:852,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:854,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 829
    functionDepth: 1
    functionLinenumber: 829
    functionLinenumberEnd: 861
    functionName: brpc::policy::RtmpContext::GetChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - load
    - compare_exchange_strong
    - RtmpChunkStream::RtmpChunkStream
    - LOG
    - SubChunkArray::SubChunkArray
    linkageType: ''
    returnType: RtmpChunkStream
    signature: RtmpChunkStream * RtmpContext::GetChunkStream(uint32_t cs_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:865,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:870,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:872,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:877,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:879,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:882,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - cs_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 884
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 884
    functionName: brpc::policy::RtmpContext::ClearChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpContext::ClearChunkStream(uint32_t cs_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:887,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:888,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:889,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 886
    functionDepth: 1
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - pop_back
    - back
    - empty
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AllocateChunkStreamId(uint32_t* chunk_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:900,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - chunk_stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 901
      start: 898
    functionDepth: 0
    functionLinenumber: 898
    functionLinenumberEnd: 901
    functionName: brpc::policy::RtmpContext::DeallocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateChunkStreamId(uint32_t chunk_stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:904,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:905,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:906,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:909,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 914
      start: 903
    functionDepth: 1
    functionLinenumber: 903
    functionLinenumberEnd: 914
    functionName: brpc::policy::RtmpContext::AllocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - pop_back
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    - empty
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AllocateMessageStreamId(uint32_t* stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:917,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 918
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 918
    functionName: brpc::policy::RtmpContext::DeallocateMessageStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void RtmpContext::DeallocateMessageStreamId(uint32_t stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:922,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - stream_id
    - stream
    argTypes:
    - uint32_t
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 920
    functionDepth: 1
    functionLinenumber: 920
    functionLinenumberEnd: 929
    functionName: brpc::policy::RtmpContext::FindMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::FindMessageStream(\n    uint32_t stream_id, butil::intrusive_ptr<RtmpStreamBase>*
      stream)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:932,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:934,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:943,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:944,1
    - Dst: brpc::policy::RtmpContext::AllocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:947,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:948,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 931
    functionDepth: 2
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    - stream::reset
    - std::unique_lock::unlock
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddClientStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpContext::AllocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:958,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:963,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:964,1
    - Dst: stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:967,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 954
    functionDepth: 2
    functionLinenumber: 954
    functionLinenumberEnd: 972
    functionName: brpc::policy::RtmpContext::AddServerStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::unlock
    - LOG
    - brpc::policy::RtmpContext::AllocateMessageStreamId
    - stream::reset
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::AddServerStream(RtmpStreamBase* stream)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:976,1
    - Dst: RtmpStreamBase*::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:979,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:981,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:986,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:989,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:991,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:995,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:996,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:997,1
    - Dst: RtmpStreamBase*::is_client_stream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1001,1
    - Dst: brpc::policy::RtmpContext::DeallocateChunkStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1002,1
    - Dst: brpc::policy::RtmpContext::DeallocateMessageStreamId
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1004,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1006,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1007,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 974
    functionDepth: 1
    functionLinenumber: 974
    functionLinenumberEnd: 1010
    functionName: brpc::policy::RtmpContext::RemoveMessageStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - RtmpStreamBase*::stream_id
    - erase
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - std::unique_lock::unlock
    - seek
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RtmpContext::RemoveMessageStream(RtmpStreamBase* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1021,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1029,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - out_transaction_id
    - handler
    argTypes:
    - uint32_t*
    - RtmpTransactionHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1036
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1036
    functionName: brpc::policy::RtmpContext::AddTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: "bool RtmpContext::AddTransaction(uint32_t* out_transaction_id,\n                                 RtmpTransactionHandler*
      handler)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1042,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1043,1
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1046,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - transaction_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1050
      start: 1038
    functionDepth: 1
    functionLinenumber: 1038
    functionLinenumberEnd: 1050
    functionName: brpc::policy::RtmpContext::RemoveTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - seek
    - erase
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: RtmpTransactionHandler
    signature: 'RtmpTransactionHandler *

      RtmpContext::RemoveTransaction(uint32_t transaction_id)'
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1053,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1057,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1058,1
    - Dst: app::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1060,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1061,1
    - Dst: RtmpConnectRequest::set_app
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1064,1
    - Dst: flashVer::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1065,1
    - Dst: RtmpConnectRequest::set_flashver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1066,1
    - Dst: swfUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1068,1
    - Dst: RtmpConnectRequest::set_swfurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1069,1
    - Dst: tcUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1072,1
    - Dst: RtmpConnectRequest::mutable_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1073,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: app::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1074,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1075,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1076,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1077,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1078,1
    - Dst: RtmpConnectRequest::set_tcurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1080,1
    - Dst: RtmpConnectRequest::set_fpad
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1082,1
    - Dst: RtmpConnectRequest::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1083,1
    - Dst: RtmpConnectRequest::set_audiocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1084,1
    - Dst: RtmpConnectRequest::set_videocodecs
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1085,1
    - Dst: RtmpConnectRequest::set_videofunction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1086,1
    - Dst: pageUrl::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1087,1
    - Dst: RtmpConnectRequest::set_pageurl
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1088,1
    - Dst: RtmpConnectRequest::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1090,1
    - Dst: RtmpConnectRequest::set_stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1091,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1092,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1093,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1094,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1099,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1108,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1109,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1111,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1112,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1113,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1121,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1126,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1127,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1129,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1138,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1143,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1144,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1146,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1152,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 73
    argCount: 3
    argNames:
    - ' remote_side'
    - fd
    - simplified_rtmp
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1052
    functionDepth: 2
    functionLinenumber: 1052
    functionLinenumberEnd: 1153
    functionName: brpc::policy::RtmpContext::SendConnectRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - AMFOutputStream::good
    - pageUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - app::empty
    - RtmpConnectRequest::set_audiocodecs
    - std::string*::push_back
    - RtmpConnectRequest::set_videofunction
    - butil::IOBuf::append
    - butil::endpoint2str
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_swfurl
    - WriteAMFObject
    - RtmpConnectRequest::mutable_tcurl
    - WriteBigEndian4Bytes
    - RtmpConnectRequest::set_tcurl
    - memcpy
    - LOG
    - RtmpConnectRequest::set_flashver
    - tcUrl::empty
    - std::string*::reserve
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf::size
    - RtmpConnectRequest::set_fpad
    - RtmpConnectRequest::set_capabilities
    - WriteAll
    - std::string*::append
    - swfUrl::empty
    - RtmpConnectRequest::set_pageurl
    - RtmpConnectRequest::set_videocodecs
    - WriteAMFUint32
    - RtmpConnectRequest::set_objectencoding
    - app::size
    - WriteAMFString
    - flashVer::empty
    - RtmpConnectRequest::set_app
    linkageType: ''
    returnType: int
    signature: int RtmpContext::SendConnectRequest(const butil::EndPoint& remote_side,
      int fd, bool simplified_rtmp)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1158,1
    - Dst: brpc::policy::RtmpContext::WaitForS0S1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1159,1
    - Dst: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1161,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1164,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1166,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1169,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1171,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1172,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1155
    functionDepth: 4
    functionLinenumber: 1155
    functionLinenumberEnd: 1173
    functionName: brpc::policy::RtmpContext::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::WaitForC2
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForS0S1
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::Feed(butil::IOBuf* source, Socket* socket)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1177,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1180,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1181,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1182,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1183,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1189,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1193,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1194,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1196,1
    - Dst: adobe_hs::C1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1198,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1199,1
    - Dst: adobe_hs::C1::schema
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1200,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1201,1
    - Dst: adobe_hs::S1::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1205,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1206,1
    - Dst: adobe_hs::S1::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1209,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1210,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1214,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1216,1
    - Dst: adobe_hs::S2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: adobe_hs::C1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1222,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1223,1
    - Dst: adobe_hs::S2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1226,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1227,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1230,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1235,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1237,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpHandshakeServerRandom
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1238,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1242,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1243,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1244,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1247,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1248,1
    - Dst: brpc::policy::RtmpContext::WaitForC2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1250,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 54
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1251
      start: 1175
    functionDepth: 3
    functionLinenumber: 1175
    functionLinenumberEnd: 1251
    functionName: brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - memcmp
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - butil::IOBuf::append
    - butil::IOBuf*::pop_front
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - adobe_hs::S2::Generate
    - adobe_hs::S2::Save
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::C1::digest_blk::digest
    - brpc::policy::RtmpContext::WaitForC2
    - memcpy
    - LOG
    - adobe_hs::S1::Save
    - adobe_hs::C1::Load
    - butil::IOBuf*::length
    - malloc
    - adobe_hs::S1::Generate
    - WriteAll
    - Socket*::remote_side
    - adobe_hs::C1::schema
    - GetRtmpHandshakeServerRandom
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf::push_back
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC0C1orSimpleRtmp(butil::IOBuf* source,
      Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1254,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1255,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1259,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1268,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1269,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1253
    functionDepth: 3
    functionLinenumber: 1253
    functionLinenumberEnd: 1270
    functionName: brpc::policy::RtmpContext::WaitForC2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - brpc::policy::RtmpContext::OnChunks
    - Socket*::remote_side
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForC2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1273,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1274,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1278,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1279,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1281,1
    - Dst: adobe_hs::S1::Load
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1285,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1286,1
    - Dst: adobe_hs::C2::Generate
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: adobe_hs::S1::digest_blk::digest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1289,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1290,1
    - Dst: adobe_hs::C2::Save
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1292,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1293,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1296,1
    - Dst: GetRtmpTimestamp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1303,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1304,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1305,1
    - Dst: WriteAll
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1308,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1309,1
    - Dst: brpc::policy::RtmpContext::WaitForS2
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1311,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1272
    functionDepth: 4
    functionLinenumber: 1272
    functionLinenumberEnd: 1312
    functionName: brpc::policy::RtmpContext::WaitForS0S1
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C2::Generate
    - adobe_hs::C2::Save
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - WriteBigEndian4Bytes
    - Socket*::fd
    - adobe_hs::S1::Load
    - GetRtmpTimestamp
    - butil::IOBuf::append
    - WriteAll
    - brpc::policy::RtmpContext::WaitForS2
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::cutn
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS0S1(butil::IOBuf* source, Socket*
      socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1315,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1316,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1319,1
    - Dst: brpc::policy::RtmpContext::SetState
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1320,1
    - Dst: brpc::policy::RtmpContext::SendConnectRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1323,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1324,1
    - Dst: brpc::policy::RtmpContext::OnChunks
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1326,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1314
    functionDepth: 3
    functionLinenumber: 1314
    functionLinenumberEnd: 1327
    functionName: brpc::policy::RtmpContext::WaitForS2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::RtmpContext::SetState
    - butil::IOBuf*::length
    - MakeParseError
    - Socket*::fd
    - brpc::policy::RtmpContext::OnChunks
    - brpc::policy::RtmpContext::SendConnectRequest
    - Socket*::remote_side
    - butil::IOBuf*::pop_front
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::WaitForS2(butil::IOBuf* source, Socket* socket)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1331,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1333,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1342,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1343,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1346,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1354,1
    - Dst: brpc::policy::RtmpContext::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1361,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1362,1
    - Dst: RtmpChunkStream*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1364,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1329
    functionDepth: 2
    functionLinenumber: 1329
    functionLinenumberEnd: 1365
    functionName: brpc::policy::RtmpContext::OnChunks
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 16
    functionsReached:
    - butil::IOBuf*::fetch
    - RtmpChunkStream*::Feed
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::size
    - MakeParseError
    - butil::IOBuf*::fetch1
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RtmpContext::OnChunks(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1368,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1370,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - socket
    - received_bytes
    argTypes:
    - Socket*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1372
      start: 1367
    functionDepth: 2
    functionLinenumber: 1367
    functionLinenumberEnd: 1372
    functionName: brpc::policy::SendAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::WriteWithoutOvercrowded
    - butil::HostToNet32
    - brpc::policy::MakeUnsentControlMessage
    linkageType: ''
    returnType: int
    signature: int SendAck(Socket* socket, uint64_t received_bytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: SendAck
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1379,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - socket
    - sz
    argTypes:
    - Socket*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1374
    functionDepth: 1
    functionLinenumber: 1374
    functionLinenumberEnd: 1382
    functionName: brpc::policy::RtmpContext::AddReceivedBytes
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - PLOG_IF
    - SendAck
    linkageType: ''
    returnType: void
    signature: void RtmpContext::AddReceivedBytes(Socket* socket, uint32_t sz)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - conn_ctx
    - cs_id
    argTypes:
    - RtmpContext*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1389
      start: 1386
    functionDepth: 0
    functionLinenumber: 1386
    functionLinenumberEnd: 1389
    functionName: brpc::policy::RtmpChunkStream::RtmpChunkStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::RtmpChunkStream(RtmpContext* conn_ctx, uint32_t
      cs_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1396
      start: 1391
    functionDepth: 0
    functionLinenumber: 1391
    functionLinenumberEnd: 1396
    functionName: RtmpChunkStream::ReadParams::ReadParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::ReadParams::ReadParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1401
      start: 1398
    functionDepth: 0
    functionLinenumber: 1398
    functionLinenumberEnd: 1401
    functionName: RtmpChunkStream::WriteParams::WriteParams()
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RtmpChunkStream::WriteParams::WriteParams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1406,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1408
      start: 1405
    functionDepth: 1
    functionLinenumber: 1405
    functionLinenumberEnd: 1408
    functionName: brpc::policy::InitClientMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitClientMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1413,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1415
      start: 1412
    functionDepth: 1
    functionLinenumber: 1412
    functionLinenumberEnd: 1415
    functionName: brpc::policy::InitServerMessageStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    - Expose
    linkageType: ''
    returnType: void
    signature: void InitServerMessageStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1420
      start: 1420
    functionDepth: 0
    functionLinenumber: 1420
    functionLinenumberEnd: 1420
    functionName: brpc::policy::ChunkStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChunkStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton<ChunkStatus>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1424
      start: 1422
    functionDepth: 0
    functionLinenumber: 1422
    functionLinenumberEnd: 1424
    functionName: brpc::policy::AddChunk
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::get_leaky_singleton<ChunkStatus>
    linkageType: ''
    returnType: void
    signature: void AddChunk()
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1434,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1444,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1445,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1448,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1450,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1453,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1454,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1456,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1458,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1462,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1464,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1465,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1466,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1486,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1487,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1490,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1492,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1495,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1496,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1498,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1500,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1504,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1506,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1509,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1511,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1512,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1513,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1528,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1529,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1532,1
    - Dst: ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1534,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1537,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1538,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1540,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1542,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1546,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1548,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1552,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1553,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1554,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1567,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1568,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1571,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1573,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1587,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1589,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1597,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1598,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1599,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1607,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1608,1
    - Dst: RtmpContext*::AddReceivedBytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1609,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1611,1
    - Dst: AddChunk
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1619,1
    - Dst: RtmpContext*::service
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1623,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1624,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1627,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1631,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1632,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1633,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1634,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1635,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1636,1
    - Dst: brpc::policy::RtmpChunkStream::OnMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1638,1
    - Dst: msg_body::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1640,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1646,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 158
    argCount: 3
    argNames:
    - ' bh'
    - source
    - socket
    argTypes:
    - RtmpBasicHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1426
    functionDepth: 2
    functionLinenumber: 1426
    functionLinenumberEnd: 1647
    functionName: brpc::policy::RtmpChunkStream::Feed
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - MakeParseError
    - msg_body::clear
    - VLOG
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - AddChunk
    - butil::IOBuf*::fetch
    - RtmpContext*::AddReceivedBytes
    - butil::Timer::start
    - MethodStatus*::OnRequested
    - RtmpContext*::service
    - MakeMessage
    - brpc::policy::RtmpChunkStream::OnMessage
    - LOG
    - butil::Timer::Timer
    - ReadBigEndian3Bytes
    - butil::Timer::u_elapsed
    - butil::IOBuf*::size
    - CHECK
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - pthread_once
    - butil::Timer::stop
    - std::min
    - MethodStatus*::OnResponded
    - last_msg_header::is_valid
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult RtmpChunkStream::Feed(const RtmpBasicHeader& bh,\n                                  butil::IOBuf*
      source, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: GetBasicHeaderLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1652,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1654,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1659,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1662,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1664,1
    - Dst: last_msg_header::is_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1669,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1679,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1680,1
    - Dst: WriteLittleEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1682,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1692,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1693,1
    - Dst: WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1704,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1711,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1715,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1716,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1717,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1725,1
    - Dst: WriteBasicHeader
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1730,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1734,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1736,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1737,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 65
    argCount: 3
    argNames:
    - buf
    - ' mh'
    - body
    argTypes:
    - butil::IOBuf*
    - RtmpMessageHeader
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1740
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1740
    functionName: brpc::policy::RtmpChunkStream::SerializeMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::size
    - std::min
    - butil::IOBuf*::append
    - GetBasicHeaderLength
    - WriteBigEndian4Bytes
    - WriteBigEndian3Bytes
    - CHECK
    - last_msg_header::is_valid
    - CHECK_LE
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::cutn
    - WriteLittleEndian4Bytes
    - WriteBasicHeader
    linkageType: ''
    returnType: int
    signature: "int RtmpChunkStream::SerializeMessage(butil::IOBuf* buf,\n                                      const
      RtmpMessageHeader& mh,\n                                      butil::IOBuf*
      body)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CommandHandlerMap::CommandHandlerMap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1772,1
    - Dst: init
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1773,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1774,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1770
    functionDepth: 1
    functionLinenumber: 1770
    functionLinenumberEnd: 1794
    functionName: brpc::policy::InitCommandHandlers
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - init
    - CommandHandlerMap::CommandHandlerMap
    linkageType: ''
    returnType: void
    signature: void InitCommandHandlers()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1802,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1810,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1815,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1816,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1821,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1829,1
    - Dst: messagetype2str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1831,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 4
    argNames:
    - ' bh'
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpBasicHeader
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1834
      start: 1796
    functionDepth: 1
    functionLinenumber: 1796
    functionLinenumberEnd: 1834
    functionName: brpc::policy::RtmpChunkStream::OnMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf*::size
    - arraysize
    - CHECK_EQ
    - Socket*::remote_side
    - RTMP_ERROR
    - VLOG
    - messagetype2str
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnMessage(const RtmpBasicHeader& bh,\n                                const
      RtmpMessageHeader& mh,\n                                butil::IOBuf* msg_body,\n
      \                               Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1839,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1844,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1845,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1847,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1851,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1852,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1856
      start: 1836
    functionDepth: 1
    functionLinenumber: 1836
    functionLinenumberEnd: 1856
    functionName: brpc::policy::RtmpChunkStream::OnSetChunkSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetChunkSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1861,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1866,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1867,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1869,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1872,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1874
      start: 1858
    functionDepth: 1
    functionLinenumber: 1858
    functionLinenumberEnd: 1874
    functionName: brpc::policy::RtmpChunkStream::OnAbortMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAbortMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1879,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1884,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1885,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1890
      start: 1876
    functionDepth: 1
    functionLinenumber: 1876
    functionLinenumberEnd: 1890
    functionName: brpc::policy::RtmpChunkStream::OnAck
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAck(\n    const RtmpMessageHeader& mh, butil::IOBuf*
      msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1895,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1900,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1901,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1902,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1903,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1904,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1907
      start: 1892
    functionDepth: 1
    functionLinenumber: 1892
    functionLinenumberEnd: 1907
    functionName: brpc::policy::RtmpChunkStream::OnWindowAckSize
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnWindowAckSize(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1912,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1917,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1918,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1920,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1924
      start: 1909
    functionDepth: 1
    functionLinenumber: 1909
    functionLinenumberEnd: 1924
    functionName: brpc::policy::RtmpChunkStream::OnSetPeerBandwidth
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetPeerBandwidth(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1929,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1934,1
    - Dst: ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1935,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamBegin
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1939,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamEOF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1941,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamDry
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1943,1
    - Dst: brpc::policy::RtmpChunkStream::OnSetBufferLength
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1945,1
    - Dst: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1947,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingRequest
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1949,1
    - Dst: brpc::policy::RtmpChunkStream::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1951,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferEmpty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1953,1
    - Dst: brpc::policy::RtmpChunkStream::OnBufferReady
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1955,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1957,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 28
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1959
      start: 1926
    functionDepth: 2
    functionLinenumber: 1926
    functionLinenumberEnd: 1959
    functionName: brpc::policy::RtmpChunkStream::OnUserControlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnPingRequest
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnUserControlMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1964,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1966,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1969,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1970,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1971,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1976
      start: 1961
    functionDepth: 1
    functionLinenumber: 1961
    functionLinenumberEnd: 1976
    functionName: brpc::policy::RtmpChunkStream::OnStreamBegin
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamBegin(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1981,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1983,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1986,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1987,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1988,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1993
      start: 1978
    functionDepth: 1
    functionLinenumber: 1978
    functionLinenumberEnd: 1993
    functionName: brpc::policy::RtmpChunkStream::OnStreamEOF
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamEOF(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:1998,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2000,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2003,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2004,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2005,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2010
      start: 1995
    functionDepth: 1
    functionLinenumber: 1995
    functionLinenumberEnd: 2010
    functionName: brpc::policy::RtmpChunkStream::OnStreamDry
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamDry(const RtmpMessageHeader& mh,\n                                  const
      butil::StringPiece& event_data,\n                                  Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2015,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2017,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2020,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2021,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2022,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2027
      start: 2012
    functionDepth: 1
    functionLinenumber: 2012
    functionLinenumberEnd: 2027
    functionName: brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - RTMP_ERROR
    - size
    - brpc::policy::RtmpChunkStream::connection_context
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStreamIsRecorded(const RtmpMessageHeader&
      mh,\n                                         const butil::StringPiece& event_data,\n
      \                                        Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2032,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2034,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2037,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2038,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2039,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2042,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2043,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2044,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2051,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2052,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2053,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2056,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2058
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2058
    functionName: brpc::policy::RtmpChunkStream::OnSetBufferLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSetBufferLength(const RtmpMessageHeader& mh,\n
      \                                       const butil::StringPiece& event_data,\n
      \                                       Socket* socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2063,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2065,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2068,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2069,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2070,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2073,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2076,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2077,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2080,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2081,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2060
    functionDepth: 1
    functionLinenumber: 2060
    functionLinenumberEnd: 2085
    functionName: brpc::policy::RtmpChunkStream::OnPingRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - WriteBigEndian2Bytes
    - size
    - WriteBigEndian4Bytes
    - data
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - PLOG
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingRequest(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2090,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2092,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2095,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2096,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2097,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2100,1
    - Dst: RtmpService*::OnPingResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2101,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2103
      start: 2087
    functionDepth: 1
    functionLinenumber: 2087
    functionLinenumberEnd: 2103
    functionName: brpc::policy::RtmpChunkStream::OnPingResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpService*::OnPingResponse
    - size
    - data
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPingResponse(const RtmpMessageHeader& mh,\n
      \                                    const butil::StringPiece& event_data,\n
      \                                    Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2111,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2112,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2113,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2116,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2121
      start: 2105
    functionDepth: 1
    functionLinenumber: 2105
    functionLinenumberEnd: 2121
    functionName: brpc::policy::RtmpChunkStream::OnBufferEmpty
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferEmpty(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2126,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2127,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2128,1
    - Dst: ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2131,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' mh'
    - ' event_data'
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::StringPiece
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2136
      start: 2123
    functionDepth: 1
    functionLinenumber: 2123
    functionLinenumberEnd: 2136
    functionName: brpc::policy::RtmpChunkStream::OnBufferReady
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - size
    - RTMP_ERROR
    - Socket*::remote_side
    - data
    - VLOG
    - ReadBigEndian4Bytes
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBufferReady(const RtmpMessageHeader& mh,\n
      \                                   const butil::StringPiece& event_data,\n
      \                                   Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2141,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2152,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2155,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2156,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2157,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2158,1
    - Dst: butil::intrusive_ptr::CallOnAudioMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2164
      start: 2138
    functionDepth: 1
    functionLinenumber: 2138
    functionLinenumberEnd: 2164
    functionName: brpc::policy::RtmpChunkStream::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - butil::intrusive_ptr::CallOnAudioMessage
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAudioMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2169,1
    - Dst: is_video_frame_type_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2178,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2179,1
    - Dst: is_video_codec_valid
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2181,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2182,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2184,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2187,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2188,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2189,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2190,1
    - Dst: butil::intrusive_ptr::CallOnVideoMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2196
      start: 2166
    functionDepth: 1
    functionLinenumber: 2166
    functionLinenumberEnd: 2196
    functionName: brpc::policy::RtmpChunkStream::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::swap
    - butil::intrusive_ptr::CallOnVideoMessage
    - butil::IOBuf*::cut1
    - is_video_frame_type_valid
    - Socket*::remote_side
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - is_video_codec_valid
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnVideoMessage(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2209,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2213,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2218,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2224,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2225,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2229,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2230,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2231,1
    - Dst: butil::intrusive_ptr::CallOnMetaData
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2235,1
    - Dst: AMFInputStream::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2238,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2243,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2244,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2248,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2249,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2250,1
    - Dst: butil::intrusive_ptr::CallOnCuePoint
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2254,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2262
      start: 2198
    functionDepth: 1
    functionLinenumber: 2198
    functionLinenumberEnd: 2262
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - ReadAMFObject
    - butil::intrusive_ptr::CallOnCuePoint
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::CallOnMetaData
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::intrusive_ptr
    - LOG_EVERY_SECOND
    - AMFInputStream::check_emptiness
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2268
      start: 2264
    functionDepth: 1
    functionLinenumber: 2264
    functionLinenumberEnd: 2268
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF0(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2275,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2276,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2279,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2282,1
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2284,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2290
      start: 2270
    functionDepth: 1
    functionLinenumber: 2270
    functionLinenumberEnd: 2290
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - pthread_once
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF0(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2294,1
    - Dst: brpc::policy::RtmpChunkStream::OnDataMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2296
      start: 2292
    functionDepth: 2
    functionLinenumber: 2292
    functionLinenumberEnd: 2296
    functionName: brpc::policy::RtmpChunkStream::OnDataMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnDataMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDataMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2302
      start: 2298
    functionDepth: 1
    functionLinenumber: 2298
    functionLinenumberEnd: 2302
    functionName: brpc::policy::RtmpChunkStream::OnSharedObjectMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSharedObjectMessageAMF3(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2306,1
    - Dst: brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' mh'
    - msg_body
    - socket
    argTypes:
    - RtmpMessageHeader
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2308
      start: 2304
    functionDepth: 2
    functionLinenumber: 2304
    functionLinenumberEnd: 2308
    functionName: brpc::policy::RtmpChunkStream::OnCommandMessageAMF3
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::policy::RtmpChunkStream::OnCommandMessageAMF0
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCommandMessageAMF3(\n    const RtmpMessageHeader&
      mh, butil::IOBuf* msg_body, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2314
      start: 2310
    functionDepth: 1
    functionLinenumber: 2310
    functionLinenumberEnd: 2314
    functionName: brpc::policy::RtmpChunkStream::OnAggregateMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnAggregateMessage(\n    const RtmpMessageHeader&,
      butil::IOBuf*, Socket*)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2337,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2341,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2342,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2345,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2346,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2347,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2350,1
    - Dst: RtmpConnectRequest*::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2351,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2359,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2360,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2366,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2368,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2380,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2381,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2387,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2395,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2397,1
    - Dst: RtmpConnectResponse::has_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2398,1
    - Dst: RtmpConnectResponse::set_fmsver
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2399,1
    - Dst: RtmpConnectResponse::has_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2401,1
    - Dst: RtmpConnectResponse::set_capabilities
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2402,1
    - Dst: RtmpConnectResponse::has_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2404,1
    - Dst: RtmpConnectResponse::set_mode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2405,1
    - Dst: RtmpConnectResponse::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2407,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2408,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2410,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2411,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2412,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2413,1
    - Dst: RtmpInfo::set_objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpConnectRequest*::objectencoding
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2414,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2416,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2417,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2418,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2420,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2421,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2423,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2424,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2427,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2431,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2432,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2433,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2434,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2437,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2438,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2440,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2441,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2443,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2444,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2445,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2448,1
    - Dst: RtmpConnectResponse::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2449,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2450,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 69
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2452
      start: 2333
    functionDepth: 1
    functionLinenumber: 2333
    functionLinenumberEnd: 2452
    functionName: brpc::policy::RtmpChunkStream::OnConnect
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - RtmpInfo::set_objectencoding
    - RtmpConnectResponse::set_capabilities
    - TemporaryArrayBuilder::push
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::has_fmsver
    - butil::IOBuf::clear
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFObject
    - next::reset
    - TemporaryArrayBuilder::size
    - RtmpConnectResponse::ShortDebugString
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - RtmpConnectResponse::has_capabilities
    - PLOG
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    - RtmpConnectResponse::set_fmsver
    - CHECK
    - release
    - Socket*::remote_side
    - Socket*::Write
    - WriteAMFUint32
    - RtmpConnectResponse::has_mode
    - Socket*::SetFailed
    - RtmpConnectRequest*::objectencoding
    - std::string::empty
    - RtmpConnectResponse::set_mode
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnConnect(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' mh'
    - socket
    argTypes:
    - RtmpMessageHeader
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2460
      start: 2454
    functionDepth: 0
    functionLinenumber: 2454
    functionLinenumberEnd: 2460
    functionName: brpc::policy::RtmpChunkStream::OnBWDone
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::remote_side
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnBWDone(const RtmpMessageHeader& mh,\n                               AMFInputStream*,\n
      \                              Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: saved_on_connect
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2469
      start: 2462
    functionDepth: 0
    functionLinenumber: 2462
    functionLinenumberEnd: 2469
    functionName: brpc::policy::RtmpContext::OnConnected
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - saved_on_connect
    linkageType: ''
    returnType: void
    signature: void RtmpContext::OnConnected(int error_code)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2474,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2475,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2481,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2482,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2489,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2490,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2492,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: RtmpConnectResponse::create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2494,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2499,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2500,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2503,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2504,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2506,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2511,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2513
      start: 2471
    functionDepth: 1
    functionLinenumber: 2471
    functionLinenumberEnd: 2513
    functionName: brpc::policy::RtmpChunkStream::OnResult
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - CHECK
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnResult(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream, Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2519,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2520,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2525,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2529,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2530,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2533,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2534,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2536,1
    - Dst: RtmpTransactionHandler*::Run
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2540,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2542
      start: 2515
    functionDepth: 1
    functionLinenumber: 2515
    functionLinenumberEnd: 2542
    functionName: brpc::policy::RtmpChunkStream::OnError
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpTransactionHandler*::Run
    - RTMP_WARNING
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnError(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2547,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2548,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2552,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2553,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2556,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2557,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2561,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2562,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2565,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2566,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2567,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2570,1
    - Dst: RtmpInfo::ShortDebugString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2571,1
    - Dst: static_cast<RtmpClientStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2572,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2574
      start: 2544
    functionDepth: 1
    functionLinenumber: 2544
    functionLinenumberEnd: 2574
    functionName: brpc::policy::RtmpChunkStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::ShortDebugString
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpClientStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnStatus(const RtmpMessageHeader& mh,\n                               AMFInputStream*
      istream,\n                               Socket* socket)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2579,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2581,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2585,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2586,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2593,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2594,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2597,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2598,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2599,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2601,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2602,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2603,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2606,1
    - Dst: AMFField*::IsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2607,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: AMFField*::AsString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2608,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2611,1
    - Dst: RtmpService*::NewStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2615,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: stream_multiplexing
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2616,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2622,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2624,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2625,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2627,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2632,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2633,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2634,1
    - Dst: butil::intrusive_ptr<RtmpServerStream>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2638,1
    - Dst: Socket*::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2639,1
    - Dst: Socket*::NotifyOnFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2640,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2644,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2648,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2650,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2651,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2652,1
    - Dst: AMFObject::SetBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2654,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2655,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2657,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2659,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2661,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2665,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2666,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2667,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2669,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2674,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2675,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2680,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2684,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2687,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2690,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2694,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2695,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2696,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2698,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2705,1
    - Dst: butil::intrusive_ptr::stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2707,1
    - Dst: brpc::policy::RtmpChunkStream::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2709,1
    - Dst: brpc::policy::RtmpChunkStream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2711,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 95
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2713
      start: 2576
    functionDepth: 3
    functionLinenumber: 2576
    functionLinenumberEnd: 2713
    functionName: brpc::policy::RtmpChunkStream::OnCreateStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - AMFOutputStream::good
    - AMFObject::Find
    - butil::intrusive_ptr::OnStopInternal
    - WriteAMFNull
    - bthread_id_create
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::OnPublish
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - RtmpService*::NewStream
    - WriteAMFObject
    - WriteWithoutOvercrowded
    - Socket*::NotifyOnFailed
    - AMFObject::SetBool
    - RtmpPublishType2Str
    - RTMP_ERROR
    - bthread_id_error
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - Socket*::ReAddress
    - butil::intrusive_ptr<RtmpServerStream>
    - AMFField*::IsString
    - butil::intrusive_ptr::stream_id
    - butil::IOBuf::size
    - brpc::policy::RtmpChunkStream::OnPlay
    - stream_multiplexing
    - CHECK
    - Str2RtmpPublishType
    - berror
    - Socket*::remote_side
    - AMFField*::AsString
    - WriteAMFUint32
    - std::string::empty
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCreateStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2726,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2735,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2736,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2737,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2740,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2741,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2743
      start: 2723
    functionDepth: 1
    functionLinenumber: 2723
    functionLinenumberEnd: 2743
    functionName: brpc::policy::OnPlayContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - error_cstr
    - ok
    - SendStopMessage
    - stream_id
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnPlayContinuation::Run()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2748,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2749,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2753,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2754,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2759,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2760,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2764,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2765,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2770,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2771,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2772,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2776,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2777,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2778,1
    - Dst: AMFInputStream*::check_emptiness
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2782,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2783,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2784,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2788,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2795,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2804,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2805,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2806,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2813,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2817,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2818,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2819,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2821,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2822,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2823,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2824,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2826,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2827,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2830,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2832,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2836,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2840,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2841,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2842,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2844,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2845,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2846,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2847,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2849,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2850,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2853,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2855,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2858,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2862,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2863,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2864,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2866,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2867,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2870,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2872,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2875,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2879,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2881,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2882,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2884,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2885,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2888,1
    - Dst: TemporaryArrayBuilder::push
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2890,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2892,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2893,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2894,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2899,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2900,1
    - Dst: TemporaryArrayBuilder::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2902,1
    - Dst: next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2903,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2905,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2906,1
    - Dst: RtmpServerStream*::OnPause
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2915,1
    - Dst: OnPlayContinuation::OnPlayContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2918,1
    - Dst: OnPlayContinuation*::player_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2919,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2920,1
    - Dst: OnPlayContinuation*::player_stream::OnPlay
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2921,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 115
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2923
      start: 2745
    functionDepth: 1
    functionLinenumber: 2745
    functionLinenumberEnd: 2923
    functionName: brpc::policy::RtmpChunkStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - WriteAMFNull
    - OnPlayContinuation::OnPlayContinuation
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - OnPlayContinuation*::player_stream::OnPlay
    - RtmpServerStream*::OnPause
    - TemporaryArrayBuilder::push
    - static_cast<RtmpServerStream*>
    - MakeUnsentControlMessage
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    - ReadAMFNumber
    - WriteAMFObject
    - next::reset
    - WriteBigEndian2Bytes
    - TemporaryArrayBuilder::size
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - ReadAMFString
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - AMFInputStream*::check_emptiness
    - ReadAMFBool
    - butil::IOBuf::size
    - release
    - Socket*::remote_side
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - RTMP_WARNING
    - WriteAMFUint32
    - butil::intrusive_ptr::detach
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2928,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2929,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2933,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2934,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2937,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2938,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2942,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2943,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2946,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2947,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2948,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2951,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2953
      start: 2925
    functionDepth: 1
    functionLinenumber: 2925
    functionLinenumberEnd: 2953
    functionName: brpc::policy::RtmpChunkStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPlay2(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2958,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2959,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2963,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2964,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2967,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2968,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2972,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2973,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2976,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2977,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2982,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2984,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2987
      start: 2955
    functionDepth: 1
    functionLinenumber: 2955
    functionLinenumberEnd: 2987
    functionName: brpc::policy::RtmpChunkStream::OnDeleteStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnDeleteStream(const RtmpMessageHeader& mh,\n
      \                                    AMFInputStream* istream,\n                                     Socket*
      socket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2992,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2993,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2997,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:2998,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3001,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3002,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3005,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3006,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3014,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3017
      start: 2989
    functionDepth: 1
    functionLinenumber: 2989
    functionLinenumberEnd: 3017
    functionName: brpc::policy::RtmpChunkStream::OnCloseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFUint32
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::get
    - RTMP_ERROR
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCloseStream(const RtmpMessageHeader& mh,\n
      \                                   AMFInputStream* istream,\n                                    Socket*
      socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3030,1
    - Dst: SendStopMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: error_cstr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3031,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3032,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3033,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3036,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3037,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3042,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3046,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3047,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3048,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3050,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3051,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3052,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3054,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3056,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3057,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3059,1
    - Dst: chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3060,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3064,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3065,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3067
      start: 3028
    functionDepth: 1
    functionLinenumber: 3028
    functionLinenumberEnd: 3067
    functionName: brpc::policy::OnPublishContinuation::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - error_cstr
    - AMFOutputStream::good
    - WriteAMFNull
    - RtmpInfo::set_code
    - stream_id
    - butil::IOBuf::IOBuf
    - remote_side
    - WriteAMFObject
    - SendStopMessage
    - WriteWithoutOvercrowded
    - PLOG
    - LOG
    - RtmpInfo::set_level
    - ok
    - chunk_stream_id
    - butil::IOBuf::size
    - CHECK
    - WriteAMFUint32
    - socket
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_description
    linkageType: ''
    returnType: void
    signature: void OnPublishContinuation::Run()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3072,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3073,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3077,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3078,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3081,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3082,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3086,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3087,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3091,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3092,1
    - Dst: Str2RtmpPublishType
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3096,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3097,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3101,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3104,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3106,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3107,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3108,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3113,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3114,1
    - Dst: OnPublishContinuation::OnPublishContinuation
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3116,1
    - Dst: OnPublishContinuation*::publish_stream::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3118,1
    - Dst: butil::intrusive_ptr::detach
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3119,1
    - Dst: RtmpServerStream*::OnPublish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3120,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3122
      start: 3069
    functionDepth: 1
    functionLinenumber: 3069
    functionLinenumberEnd: 3122
    functionName: brpc::policy::RtmpChunkStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::intrusive_ptr::detach
    - brpc::policy::RtmpChunkStream::connection_context
    - OnPublishContinuation::OnPublishContinuation
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::get
    - RtmpServerStream*::OnPublish
    - RtmpPublishType2Str
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - static_cast<RtmpServerStream*>
    - butil::intrusive_ptr::intrusive_ptr
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPublish(const RtmpMessageHeader& mh,\n                                AMFInputStream*
      istream,\n                                Socket* socket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3125,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3129,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3130,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3131,1
    - Dst: WriteAMFUndefined
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3132,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3133,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3137,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - sock
    - transaction_id
    argTypes:
    - Socket*
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3142
      start: 3124
    functionDepth: 1
    functionLinenumber: 3124
    functionLinenumberEnd: 3142
    functionName: brpc::policy::SendFMLEStartResponse
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - WriteAMFUndefined
    - PLOG
    - WriteAMFString
    - CHECK
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - Socket*::Write
    linkageType: ''
    returnType: bool
    signature: bool SendFMLEStartResponse(Socket* sock, double transaction_id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3146,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3147,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3151,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3152,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3155,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3156,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3160,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3161,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3164,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3166
      start: 3144
    functionDepth: 1
    functionLinenumber: 3144
    functionLinenumberEnd: 3166
    functionName: brpc::policy::RtmpChunkStream::OnReleaseStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnReleaseStream(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3170,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3171,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3175,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3176,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3179,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3180,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3184,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3185,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3188,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3189,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3190
      start: 3168
    functionDepth: 1
    functionLinenumber: 3168
    functionLinenumberEnd: 3190
    functionName: brpc::policy::RtmpChunkStream::OnFCPublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCPublish(\n    const RtmpMessageHeader& mh,
      AMFInputStream* istream, Socket* socket)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3194,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3195,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3199,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3200,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3203,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3204,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3208,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3209,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3212,1
    - Dst: SendFMLEStartResponse
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3213,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3214
      start: 3192
    functionDepth: 1
    functionLinenumber: 3192
    functionLinenumberEnd: 3214
    functionName: brpc::policy::RtmpChunkStream::OnFCUnpublish
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFNumber
    - brpc::policy::RtmpChunkStream::connection_context
    - SendFMLEStartResponse
    - ReadAMFString
    - RTMP_ERROR
    - RTMP_WARNING
    - ReadAMFNull
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnFCUnpublish(\n    const RtmpMessageHeader&
      mh, AMFInputStream* istream, Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3226
      start: 3216
    functionDepth: 0
    functionLinenumber: 3216
    functionLinenumberEnd: 3226
    functionName: brpc::policy::RtmpChunkStream::OnGetStreamLength
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnGetStreamLength(\n    const RtmpMessageHeader&,
      AMFInputStream*, Socket*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3231
      start: 3228
    functionDepth: 0
    functionLinenumber: 3228
    functionLinenumberEnd: 3231
    functionName: brpc::policy::RtmpChunkStream::OnCheckBW
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnCheckBW(\n    const RtmpMessageHeader&, AMFInputStream*,
      Socket*)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3236,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3237,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3241,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3242,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3245,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3246,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3250,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3251,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3255,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3256,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3257,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3261,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3262,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3267,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3268,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3269,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3271,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3272,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3273,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3274,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3275,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3277,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3278,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3279,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3281,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3282,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3283,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3285,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3288,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3289,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3295,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 51
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3300
      start: 3233
    functionDepth: 1
    functionLinenumber: 3233
    functionLinenumberEnd: 3300
    functionName: brpc::policy::RtmpChunkStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - Socket*::Write
    - WriteAMFUint32
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnSeek(const RtmpMessageHeader& mh,\n                             AMFInputStream*
      istream,\n                             Socket* socket)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3305,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3306,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3310,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3311,1
    - Dst: ReadAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3314,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3315,1
    - Dst: ReadAMFBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3319,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3320,1
    - Dst: ReadAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3324,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3325,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3329,1
    - Dst: brpc::policy::RtmpChunkStream::connection_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3330,1
    - Dst: RTMP_WARNING
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3331,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3336,1
    - Dst: RTMP_ERROR
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3338,1
    - Dst: static_cast<RtmpServerStream*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3342,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3346,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3351,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3352,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3353,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3356,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3358,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3360,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3361,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3362,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3363,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3365,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3366,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3367,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3370,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3372,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3374,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3375,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3377,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3378,1
    - Dst: RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3381,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3382,1
    - Dst: brpc::policy::RtmpChunkStream::chunk_stream_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3385,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3392,1
    - Dst: WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3394,1
    - Dst: WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3396,1
    - Dst: MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3397,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3399,1
    - Dst: WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3401,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3402,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 82
    argCount: 3
    argNames:
    - ' mh'
    - istream
    - socket
    argTypes:
    - RtmpMessageHeader
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3411
      start: 3302
    functionDepth: 1
    functionLinenumber: 3302
    functionLinenumberEnd: 3411
    functionName: brpc::policy::RtmpChunkStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - RtmpInfo::set_code
    - static_cast<RtmpServerStream*>
    - butil::IOBuf::IOBuf
    - WriteAMFNumber
    - MakeUnsentControlMessage
    - ReadAMFNumber
    - WriteAMFObject
    - WriteBigEndian2Bytes
    - WriteWithoutOvercrowded
    - WriteBigEndian4Bytes
    - RTMP_ERROR
    - PLOG
    - RtmpInfo::set_level
    - ReadAMFNull
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - ReadAMFUint32
    - ReadAMFBool
    - butil::IOBuf::size
    - CHECK
    - Socket*::remote_side
    - RTMP_WARNING
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - WriteAMFString
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpInfo::set_description
    linkageType: ''
    returnType: bool
    signature: "bool RtmpChunkStream::OnPause(const RtmpMessageHeader& mh,\n                              AMFInputStream*
      istream,\n                              Socket* socket)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3416,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3418,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3421,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3423,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3424
      start: 3415
    functionDepth: 0
    functionLinenumber: 3415
    functionLinenumberEnd: 3424
    functionName: brpc::policy::IsPossiblyRtmp
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::fetch1
    - MakeParseError
    - MakeMessage
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult IsPossiblyRtmp(const butil::IOBuf* source)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3428,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3432,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3434,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3435,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3442,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3446,1
    - Dst: brpc::policy::IsPossiblyRtmp
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3448,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3449,1
    - Dst: RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3452,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3454,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3455,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3457,1
    - Dst: RtmpContext*::Feed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3460,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3461
      start: 3426
    functionDepth: 1
    functionLinenumber: 3426
    functionLinenumberEnd: 3461
    functionName: brpc::policy::ParseRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    - MakeParseError
    - RtmpContext::RtmpContext
    - RtmpContext*::Feed
    - Socket*::parsing_context
    - Server*::options
    - static_cast<const Server*>
    - brpc::policy::IsPossiblyRtmp
    - Socket*::reset_parsing_context
    - LOG
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRtmpMessage(butil::IOBuf* source, Socket *socket,
      bool read_eof,\n                             const void* arg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3465
      start: 3463
    functionDepth: 1
    functionLinenumber: 3463
    functionLinenumberEnd: 3465
    functionName: brpc::policy::ProcessRtmpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRtmpMessage(InputMessageBase*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - stream
    - call_id
    argTypes:
    - RtmpClientStream*
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3480
      start: 3478
    functionDepth: 0
    functionLinenumber: 3478
    functionLinenumberEnd: 3480
    functionName: brpc::policy::OnServerStreamCreated::OnServerStreamCreated
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::OnServerStreamCreated(\n    RtmpClientStream*
      stream, CallId call_id)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3488,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3490,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3493,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3496,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3499,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3501,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3502,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3507,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3511,1
    - Dst: AMFObject::Find
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3514,1
    - Dst: AMFField*::IsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: AMFField*::AsBool
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3515,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3520,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3521,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3524,1
    - Dst: RtmpInfo::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3525,1
    - Dst: ReadAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3529,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3530,1
    - Dst: RtmpContext*::AddClientStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3538,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3539,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3543,1
    - Dst: Span*::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: Span*::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: Span*::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Span*::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3548,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3554,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3555
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3555
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ReadAMFObject
    - AMFObject::Find
    - ControllerPrivateAccessor::span
    - AMFInputStream*::popped_bytes
    - Controller*::SetFailed
    - butil::cpuwide_time_us
    - RtmpContext*::AddClientStream
    - static_cast<RtmpContext*>
    - Socket*::parsing_context
    - get
    - Span*::set_response_size
    - LOG
    - RtmpInfo::description
    - LOG_IF
    - butil::gettimeofday_us
    - ReadAMFUint32
    - AMFField*::AsBool
    - Controller*::ErrorCode
    - bthread_id_lock
    - Span*::set_received_us
    - berror
    - Controller*::OnVersionedRPCReturned
    - RtmpInfo::code
    - Span*::set_base_real_us
    - AMFField*::IsBool
    - Span*::set_start_parse_us
    linkageType: ''
    returnType: void
    signature: "void OnServerStreamCreated::Run(bool error,\n                                const
      RtmpMessageHeader&,\n                                AMFInputStream* istream,\n
      \                               Socket* socket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3559
      start: 3557
    functionDepth: 0
    functionLinenumber: 3557
    functionLinenumberEnd: 3559
    functionName: brpc::policy::OnServerStreamCreated::Cancel
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnServerStreamCreated::Cancel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3565,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3571,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3573,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3578,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3589,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3591,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3592,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3593,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3597,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3598,1
    - Dst: AMFObject::SetString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3600,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3602,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3605,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3607,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3609,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3613,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3617,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3622,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3624,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3625
      start: 3561
    functionDepth: 2
    functionLinenumber: 3561
    functionLinenumberEnd: 3625
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - AMFOutputStream::good
    - WriteAMFNull
    - butil::IOBuf::IOBuf
    - RtmpChunkStream*::SerializeMessage
    - butil::Status::OK
    - WriteAMFObject
    - AMFObject::SetString
    - static_cast<RtmpContext*>
    - description
    - RtmpPublishType2Str
    - play_name::empty
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf::size
    - CHECK
    - parsing_context
    - publish_name::empty
    - WriteAMFUint32
    - WriteAMFString
    - SetFailed
    - RtmpContext*::GetChunkStream
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status RtmpCreateStreamMessage::AppendAndDestroySelf(butil::IOBuf*
      out, Socket* s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3637,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3640,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3644,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3650,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3653,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3655,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3660,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3666,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3668,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3670
      start: 3627
    functionDepth: 1
    functionLinenumber: 3627
    functionLinenumberEnd: 3670
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::set_log_id
    - RtmpContext*::RemoveTransaction
    - static_cast<RtmpContext*>
    - OnServerStreamCreated::OnServerStreamCreated
    - Controller*::log_id
    - Socket*::parsing_context
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpTransactionHandler*::Cancel
    - RtmpContext*::AddTransaction
    - Controller*::call_id
    - RtmpClientStream*::options
    - butil::BaseIteratorRangeToNumberTraits::max
    - Socket*::description
    - CHECK_LT
    - Controller*::SetFailed
    - Controller*::response
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: "void PackRtmpRequest(butil::IOBuf* /*buf*/,\n                     SocketMessage**
      user_message,\n                     uint64_t /*correlation_id*/,\n                     const
      google::protobuf::MethodDescriptor* /*NULL*/,\n                     Controller*
      cntl,\n                     const butil::IOBuf& /*request*/,\n                     const
      Authenticator*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3675
      start: 3672
    functionDepth: 0
    functionLinenumber: 3672
    functionLinenumberEnd: 3675
    functionName: brpc::policy::SerializeRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SerializeRtmpRequest(butil::IOBuf* /*buf*/,\n                          Controller*
      /*cntl*/,\n                          const google::protobuf::Message* /*NULL*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:34,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:35,1
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: PipelinedInfo::reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - PipelinedInfo::reset
    - butil::return_object
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MostCommonMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 4
    functionsReached:
    - butil::get_object<MostCommonMessage>
    linkageType: ''
    returnType: MostCommonMessage
    signature: MostCommonMessage * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - reset
    - butil::return_object
    - clear
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:34,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:35,1
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: PipelinedInfo::reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - PipelinedInfo::reset
    - butil::return_object
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MostCommonMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 4
    functionsReached:
    - butil::get_object<MostCommonMessage>
    linkageType: ''
    returnType: MostCommonMessage
    signature: MostCommonMessage * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - reset
    - butil::return_object
    - clear
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:34,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:35,1
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: PipelinedInfo::reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - PipelinedInfo::reset
    - butil::return_object
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MostCommonMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 4
    functionsReached:
    - butil::get_object<MostCommonMessage>
    linkageType: ''
    returnType: MostCommonMessage
    signature: MostCommonMessage * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - reset
    - butil::return_object
    - clear
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:34,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/most_common_message.h:35,1
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: PipelinedInfo::reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - PipelinedInfo::reset
    - butil::return_object
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::IOBuf
    - butil::IOBuf::clear
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT MostCommonMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<MostCommonMessage>
      Src: /src/brpc/src/brpc/policy/most_common_message.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::policy::Get
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 4
    functionsReached:
    - butil::get_object<MostCommonMessage>
    linkageType: ''
    returnType: MostCommonMessage
    signature: MostCommonMessage * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:44,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/most_common_message.h:45,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/most_common_message.h:46,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/most_common_message.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - reset
    - butil::return_object
    - clear
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: brpc::BitStream::BitStream
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BitStream(const void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~BitStream()
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BitStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::BitStream::empty
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: brpc::BitStream::read_bit
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int8_t
    signature: int8_t read_bit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: brpc::BitStream::BitStream
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BitStream(const void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: ~BitStream()
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BitStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: brpc::BitStream::empty
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: brpc::BitStream::read_bit
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int8_t
    signature: int8_t read_bit()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProfilerStart
      Src: /src/brpc/src/brpc/details/profiler_linker.h:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: brpc::ProfilerLinker
    functionSourceFile: /src/brpc/src/brpc/details/profiler_linker.h
    functionUses: 0
    functionsReached:
    - ProfilerStart
    linkageType: ''
    returnType: void
    signature: void ProfilerLinker()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProfilerStart
      Src: /src/brpc/src/brpc/details/profiler_linker.h:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: brpc::ProfilerLinker
    functionSourceFile: /src/brpc/src/brpc/details/profiler_linker.h
    functionUses: 0
    functionsReached:
    - ProfilerStart
    linkageType: ''
    returnType: void
    signature: void ProfilerLinker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - svr
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::ServerPrivateAccessor::ServerPrivateAccessor
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ServerPrivateAccessor(const Server* svr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: brpc::ServerPrivateAccessor::AddError
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddError()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:45,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:48,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:49,1
    - Dst: options
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 51
    functionName: brpc::ServerPrivateAccessor::AddConcurrency
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - options
    - butil::subtle::NoBarrier_AtomicIncrement
    - Controller*::add_flag
    linkageType: ''
    returnType: bool
    signature: bool AddConcurrency(Controller* c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::has_flag
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:54,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: brpc::ServerPrivateAccessor::RemoveConcurrency
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - Controller*::has_flag
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: void
    signature: void RemoveConcurrency(const Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fullname
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 1
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\n    FindMethodPropertyByFullName(const butil::StringPiece
      &fullname)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' fullname'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 2
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\n    FindMethodPropertyByFullName(const butil::StringPiece&
      fullname) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_service_name'
    - ' method_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 73
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 3
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\n    FindMethodPropertyByFullName(const butil::StringPiece&
      full_service_name,\n                                 const butil::StringPiece&
      method_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' service_name'
    - method_index
    argTypes:
    - butil::StringPiece
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 77
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 1
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty * FindMethodPropertyByNameAndIndex(\n        const
      butil::StringPiece& service_name, int method_index) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' fullname'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 82
    functionName: brpc::ServerPrivateAccessor::FindServicePropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 1
    functionsReached:
    - brpc::ServerPrivateAccessor::FindServicePropertyByFullName
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: "Server::ServiceProperty *\n    FindServicePropertyByFullName(const
      butil::StringPiece& fullname) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 87
    functionName: brpc::ServerPrivateAccessor::FindServicePropertyByName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 1
    functionsReached:
    - brpc::ServerPrivateAccessor::FindServicePropertyByName
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: "Server::ServiceProperty *\n    FindServicePropertyByName(const butil::StringPiece&
      name) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:91,1
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:92,1
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' service_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 89
    functionDepth: 2
    functionLinenumber: 89
    functionLinenumberEnd: 96
    functionName: brpc::ServerPrivateAccessor::FindServicePropertyAdaptively
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - find
    - brpc::ServerPrivateAccessor::FindServicePropertyByName
    - brpc::ServerPrivateAccessor::FindServicePropertyByFullName
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: "Server::ServiceProperty *\n    FindServicePropertyAdaptively(const
      butil::StringPiece& service_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::ServerPrivateAccessor::acceptor
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Acceptor
    signature: Acceptor * acceptor() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 101
    functionName: brpc::ServerPrivateAccessor::global_restful_map
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RestfulMap
    signature: RestfulMap * global_restful_map() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: brpc::ScopedNonServiceError::ScopedNonServiceError
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedNonServiceError(const Server* server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: ~ScopedNonServiceError()
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - ServerPrivateAccessor
    linkageType: ''
    returnType: void
    signature: void ~ScopedNonServiceError()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 121
    functionName: brpc::ScopedNonServiceError::release
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - svr
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: brpc::ServerPrivateAccessor::ServerPrivateAccessor
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ServerPrivateAccessor(const Server* svr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: brpc::ServerPrivateAccessor::AddError
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddError()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:45,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:48,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:49,1
    - Dst: options
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 51
    functionName: brpc::ServerPrivateAccessor::AddConcurrency
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - options
    - butil::subtle::NoBarrier_AtomicIncrement
    - Controller*::add_flag
    linkageType: ''
    returnType: bool
    signature: bool AddConcurrency(Controller* c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::has_flag
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:54,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: brpc::ServerPrivateAccessor::RemoveConcurrency
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - Controller*::has_flag
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: void
    signature: void RemoveConcurrency(const Controller* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fullname
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 4
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\n    FindMethodPropertyByFullName(const butil::StringPiece
      &fullname)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' fullname'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 5
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\n    FindMethodPropertyByFullName(const butil::StringPiece&
      fullname) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_service_name'
    - ' method_name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 73
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 6
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByFullName
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty *\n    FindMethodPropertyByFullName(const butil::StringPiece&
      full_service_name,\n                                 const butil::StringPiece&
      method_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' service_name'
    - method_index
    argTypes:
    - butil::StringPiece
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 77
    functionName: brpc::ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 2
    functionsReached:
    - brpc::ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    linkageType: ''
    returnType: Server::MethodProperty
    signature: "Server::MethodProperty * FindMethodPropertyByNameAndIndex(\n        const
      butil::StringPiece& service_name, int method_index) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' fullname'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 82
    functionName: brpc::ServerPrivateAccessor::FindServicePropertyByFullName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 3
    functionsReached:
    - brpc::ServerPrivateAccessor::FindServicePropertyByFullName
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: "Server::ServiceProperty *\n    FindServicePropertyByFullName(const
      butil::StringPiece& fullname) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 87
    functionName: brpc::ServerPrivateAccessor::FindServicePropertyByName
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 3
    functionsReached:
    - brpc::ServerPrivateAccessor::FindServicePropertyByName
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: "Server::ServiceProperty *\n    FindServicePropertyByName(const butil::StringPiece&
      name) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:91,1
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:92,1
    - Dst: brpc::ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' service_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 89
    functionDepth: 2
    functionLinenumber: 89
    functionLinenumberEnd: 96
    functionName: brpc::ServerPrivateAccessor::FindServicePropertyAdaptively
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - find
    - brpc::ServerPrivateAccessor::FindServicePropertyByName
    - brpc::ServerPrivateAccessor::FindServicePropertyByFullName
    linkageType: ''
    returnType: Server::ServiceProperty
    signature: "Server::ServiceProperty *\n    FindServicePropertyAdaptively(const
      butil::StringPiece& service_name) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: brpc::ServerPrivateAccessor::acceptor
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Acceptor
    signature: Acceptor * acceptor() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 101
    functionName: brpc::ServerPrivateAccessor::global_restful_map
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RestfulMap
    signature: RestfulMap * global_restful_map() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: brpc::ScopedNonServiceError::ScopedNonServiceError
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedNonServiceError(const Server* server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/details/server_private_accessor.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: ~ScopedNonServiceError()
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached:
    - ServerPrivateAccessor
    linkageType: ''
    returnType: void
    signature: void ~ScopedNonServiceError()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 121
    functionName: brpc::ScopedNonServiceError::release
    functionSourceFile: /src/brpc/src/brpc/details/server_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Server
    signature: Server * release()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:47,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:49,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:49,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - strncmp
    - c_str
    - strlen
    linkageType: ''
    returnType: bool
    signature: bool IsPemString(const std::string& input)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - SSLState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 67
    functionName: brpc::SSLStateToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToString(SSLState s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:71,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:72,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:72,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:74,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:74,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:75,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:76,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:76,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:76,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:78,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:78,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:78,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:80,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:80,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:80,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:82,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:82,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:85,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 69
    functionDepth: 2
    functionLinenumber: 69
    functionLinenumberEnd: 90
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - strncasecmp
    - butil::StringSplitter::field
    - data
    - brpc::size
    - butil::StringPiece::data
    - butil::StringPiece::trim_spaces
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: int
    signature: int ParseSSLProtocols(const std::string& str_protocol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_error_string_n
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: '& operator<<(std::ostream& os, const SSLError& ssl)'
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - ERR_error_string_n
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const SSLError& ssl)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:100,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:101,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:107,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:113,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:114,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:120,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 126
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - private_key::find
    - private_key::substr
    - IsPemString
    - certificate::find
    - certificate::substr
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const CertInfo& cert)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_app_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:131,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:132,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:140,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:142,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ssl
    - where
    - ret
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 128
    functionDepth: 3
    functionLinenumber: 128
    functionLinenumberEnd: 145
    functionName: brpc::SSLInfoCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ssl_state
    - SSL_get_app_data
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void SSLInfoCallback(const SSL* ssl, int where, int ret)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSLerr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:181,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 7
    argNames:
    - write_p
    - version
    - content_type
    - buf
    - len
    - ssl
    - arg
    argTypes:
    - int
    - int
    - int
    - void*
    - size_t
    - SSL*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 185
    functionName: brpc::SSLMessageCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSLerr
    linkageType: ''
    returnType: void
    signature: "void SSLMessageCallback(int write_p, int version, int content_type,\n
      \                              const void* buf, size_t len, SSL* ssl, void*
      arg)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_privatekey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:190,1
    - Dst: EVP_PKEY_base_id
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:191,1
    - Dst: EVP_PKEY_bits
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:196,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - ssl
    - exp
    - keylen
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 208
    functionName: brpc::SSLGetDHCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_base_id
    - EVP_PKEY_bits
    - SSL_get_privatekey
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDHCallback(SSL* ssl, int exp, int keylen)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:213,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:213,1
    - Dst: X509_get_ext_d2i
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:214,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:216,1
    - Dst: sk_GENERAL_NAME_num
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:216,1
    - Dst: sk_GENERAL_NAME_value
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:218,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:220,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:223,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:224,1
    - Dst: sk_GENERAL_NAME_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:228,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:233,1
    - Dst: X509_NAME_get_index_by_NID
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:234,1
    - Dst: X509_NAME_get_entry
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:236,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:237,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:238,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:241,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:242,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 245
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - STACK_OF
    - ASN1_STRING_to_UTF8
    - X509_get_subject_name
    - std::vector<std::string>*::push_back
    - sk_GENERAL_NAME_num
    - static_cast<size_t>
    - X509_NAME_get_entry
    - X509_NAME_get_index_by_NID
    - X509_get_ext_d2i
    - sk_GENERAL_NAME_value
    - sk_GENERAL_NAME_pop_free
    - OPENSSL_free
    - X509_NAME_ENTRY_get_data
    linkageType: ''
    returnType: void
    signature: void ExtractHostnames(X509* x, std::vector<std::string>* hostnames)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 252
    functionName: operator()(SSL* ssl) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_free
    linkageType: ''
    returnType: void
    signature: void operator()(SSL* ssl) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 260
    functionName: operator()(BIO* io) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BIO_free
    linkageType: ''
    returnType: void
    signature: void operator()(BIO* io) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:266,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 268
    functionName: operator()(X509* x) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - X509_free
    linkageType: ''
    returnType: void
    signature: void operator()(X509* x) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 276
    functionName: operator()(EVP_PKEY* k) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_free
    linkageType: ''
    returnType: void
    signature: void operator()(EVP_PKEY* k) const
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:284,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:286,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:286,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:288,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:288,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:289,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:289,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:290,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:291,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:291,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:296,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:297,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:298,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:299,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:299,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:305,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:306,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:307,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:307,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:307,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:309,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:309,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:309,1
    - Dst: BIO_read_filename
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:310,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:310,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:310,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:311,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:312,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:312,1
    - Dst: PEM_read_bio_X509_AUX
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:317,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:319,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:320,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:320,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:325,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:326,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:327,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:327,1
    - Dst: SSL_CTX_clear_chain_certs
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:333,1
    - Dst: sk_X509_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:336,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:341,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:341,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:342,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:343,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:344,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:344,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:345,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:350,1
    - Dst: ERR_GET_LIB
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:351,1
    - Dst: ERR_GET_REASON
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:352,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:353,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:354,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:357,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:360,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:361,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:362,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:362,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:367,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:367,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 54
    argCount: 4
    argNames:
    - ctx
    - ' certificate'
    - ' private_key'
    - hostnames
    argTypes:
    - SSL_CTX*
    - std::string
    - std::string
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 370
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - PEM_read_bio_X509
    - SSL_CTX_check_private_key
    - std::unique_ptr::reset
    - SSL_CTX_use_PrivateKey
    - SSL_CTX_add_extra_chain_cert
    - ERR_get_error
    - BIO_read_filename
    - brpc::ExtractHostnames
    - LOG
    - PEM_read_bio_X509_AUX
    - SSL_CTX_use_certificate
    - ERR_clear_error
    - X509_free
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - BIO_new
    - PEM_read_bio_PrivateKey
    - ERR_GET_REASON
    - BIO_new_mem_buf
    - BIO_s_file
    - SSL_CTX_clear_chain_certs
    - sk_X509_pop_free
    - c_str
    - std::unique_ptr::unique_ptr
    - ERR_GET_LIB
    - brpc::SSLError
    - std::unique_ptr::get
    linkageType: ''
    returnType: int
    signature: "int LoadCertificate(SSL_CTX* ctx,\n                           const
      std::string& certificate,\n                           const std::string& private_key,\n
      \                          std::vector<std::string>* hostnames)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_set_options
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:400,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:404,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:406,1
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:407,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:407,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:408,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:409,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:409,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:415,1
    - Dst: SSL_CTX_set_verify_depth
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:417,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:419,1
    - Dst: X509_get_default_cert_area
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:420,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:420,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:422,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:422,1
    - Dst: ca_file_path::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:423,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:424,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:425,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:427,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:428,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:428,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:433,1
    - Dst: SSL_CTX_set_info_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:436,1
    - Dst: SSL_CTX_set_msg_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:439,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 443
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - ERR_get_error
    - SSL_CTX_set_mode
    - std::string
    - brpc::SSLError
    - SSL_CTX_set_options
    - SSL_CTX_set_verify
    - std::string::c_str
    - ca_file_path::empty
    - SSL_CTX_set_verify_depth
    - SSL_CTX_set_msg_callback
    - std::string::empty
    - SSL_CTX_set_info_callback
    - c_str
    - X509_get_default_cert_area
    - brpc::empty
    - LOG
    - SSL_CTX_set_cipher_list
    - SSL_CTX_load_verify_locations
    linkageType: ''
    returnType: int
    signature: "int SetSSLOptions(SSL_CTX* ctx, const std::string& ciphers,\n                         int
      protocols, const VerifyOptions& verify)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const std::string*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:448,1
    - Dst: SSL_select_next_proto
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:454,1
    - Dst: const_cast<unsigned char**>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:455,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:456,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:456,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 6
    argNames:
    - ssl
    - out
    - outlen
    - in
    - inlen
    - arg
    argTypes:
    - SSL*
    - unsigned char**
    - unsigned char*
    - unsigned char*
    - unsigned int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 445
    functionDepth: 0
    functionLinenumber: 445
    functionLinenumberEnd: 460
    functionName: brpc::ServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const std::string*>
    - std::string*::size
    - reinterpret_cast<const unsigned char*>
    - SSL_select_next_proto
    - std::string*::data
    - const_cast<unsigned char**>
    linkageType: ''
    returnType: int
    signature: "int ServerALPNCallback(\n        SSL* ssl, const unsigned char** out,
      unsigned char* outlen,\n        const unsigned char* in, unsigned int inlen,
      void* arg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:464,1
    - Dst: SSL_VERSION_NUMBER
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:469,1
    - Dst: SSL_CTX_set_alpn_select_cb
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:470,1
    - Dst: const_cast<std::string*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:471,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:473,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ssl_ctx
    - alpns
    argTypes:
    - SSL_CTX*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 477
    functionName: brpc::SetServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_VERSION_NUMBER
    - SSL_CTX_set_alpn_select_cb
    - LOG
    - const_cast<std::string*>
    linkageType: ''
    returnType: int
    signature: int SetServerALPNCallback(SSL_CTX* ssl_ctx, const std::string* alpns)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:487,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:488,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:488,1
    - Dst: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:494,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:496,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:496,1
    - Dst: alpn_protocols::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:501,1
    - Dst: brpc::BuildALPNProtocolList
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:503,1
    - Dst: SSL_CTX_set_alpn_protos
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: std::vector::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:509,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:509,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:510,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 479
    functionDepth: 1
    functionLinenumber: 479
    functionLinenumberEnd: 511
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - std::unique_ptr::get
    - ERR_get_error
    - brpc::SetSSLOptions
    - brpc::ParseSSLProtocols
    - alpn_protocols::empty
    - SSL_CTX_set_session_cache_mode
    - SSL_CTX_set_alpn_protos
    - std::vector::data
    - brpc::BuildALPNProtocolList
    - std::unique_ptr::release
    - brpc::LoadCertificate
    - brpc::SSLError
    - LOG
    - std::vector::size
    - client_cert::certificate::empty
    linkageType: ''
    returnType: SSL_CTX
    signature: SSL_CTX * CreateClientSSLContext(const ChannelSSLOptions& options)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:525,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:525,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:534,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:534,1
    - Dst: SSL_CTX_get_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:541,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:541,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:543,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:543,1
    - Dst: SSL_CTX_set_timeout
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:547,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:547,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:548,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:548,1
    - Dst: SSL_CTX_set_tmp_dh_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:551,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:551,1
    - Dst: OBJ_sn2nid
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:555,1
    - Dst: ecdhe_curve_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:555,1
    - Dst: EC_KEY_new_by_curve_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:557,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:559,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:559,1
    - Dst: SSL_CTX_set_tmp_ecdh
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: EC_KEY_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:563,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:569,1
    - Dst: brpc::SetServerALPNCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:570,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:570,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:574,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 5
    argNames:
    - ' certificate'
    - ' private_key'
    - ' options'
    - alpns
    - hostnames
    argTypes:
    - std::string
    - std::string
    - ServerSSLOptions
    - std::string*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 513
    functionDepth: 2
    functionLinenumber: 513
    functionLinenumberEnd: 575
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - brpc::SetServerALPNCallback
    - SSL_CTX_set_mode
    - ecdhe_curve_name::c_str
    - std::unique_ptr::get
    - ERR_get_error
    - SSL_CTX_get_mode
    - OBJ_sn2nid
    - std::unique_ptr::release
    - SSL_CTX_set_tmp_ecdh
    - EC_KEY_new_by_curve_name
    - LOG
    - brpc::SetSSLOptions
    - SSL_CTX_set_timeout
    - SSL_CTX_sess_set_cache_size
    - EC_KEY_free
    - brpc::LoadCertificate
    - brpc::SSLError
    - std::string*::empty
    - SSL_CTX_set_tmp_dh_callback
    linkageType: ''
    returnType: SSL_CTX
    signature: "SSL_CTX * CreateServerSSLContext(const std::string& certificate,\n
      \                               const std::string& private_key,\n                                const
      ServerSSLOptions& options,\n                                const std::string*
      alpns,\n                                std::vector<std::string>* hostnames)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:579,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:582,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:584,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:584,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:584,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:587,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:588,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:588,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:588,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:589,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:594,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:596,1
    - Dst: SSL_set_app_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:598,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - ctx
    - id
    - fd
    - server_mode
    argTypes:
    - SSL_CTX*
    - SocketId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 577
    functionDepth: 1
    functionLinenumber: 577
    functionLinenumberEnd: 600
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - ERR_get_error
    - SSL_set_connect_state
    - SSL_set_app_data
    - SSL_free
    - SSL_set_accept_state
    - brpc::SSLError
    - LOG
    - SSL_new
    - SSL_set_fd
    linkageType: ''
    returnType: SSL
    signature: SSL * CreateSSLSession(SSL_CTX* ctx, SocketId id, int fd, bool server_mode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:604,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:604,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:605,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:605,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:607,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:607,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:608,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:609,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:609,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:610,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:612,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:612,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:614,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:615,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:615,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:616,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:617,1
    - Dst: SSL_set_bio
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:618,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - ssl
    - fd
    - bufsize
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 619
    functionName: brpc::AddBIOBuffer
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BIO_push
    - BIO_set_fd
    - SSL_set_bio
    - BIO_f_buffer
    - BIO_new
    - BIO_set_buffer_size
    - BIO_s_fd
    - BIO_s_mem
    linkageType: ''
    returnType: void
    signature: void AddBIOBuffer(SSL* ssl, int fd, int bufsize)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: recv
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:638,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 659
    functionName: brpc::DetectSSLState
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - recv
    linkageType: ''
    returnType: SSLState
    signature: SSLState DetectSSLState(int fd, int* error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_THREADID_set_numeric
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - CRYPTO_THREADID*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 668
    functionName: brpc::SSLGetThreadId
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - CRYPTO_THREADID_set_numeric
    linkageType: ''
    returnType: void
    signature: void SSLGetThreadId(CRYPTO_THREADID* tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:671,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 672
    functionName: brpc::SSLGetThreadId
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    linkageType: ''
    returnType: unsigned long
    signature: unsigned long SSLGetThreadId()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:690,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - mode
    - n
    - file
    - line
    argTypes:
    - int
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 694
    functionName: brpc::SSLLockCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    linkageType: ''
    returnType: void
    signature: void SSLLockCallback(int mode, int n, const char* file, int line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_num_locks
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:699,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:699,1
    - Dst: CRYPTO_set_locking_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:700,1
    - Dst: CRYPTO_THREADID_set_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:702,1
    - Dst: CRYPTO_set_id_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:704,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 708
    functionName: brpc::SSLThreadInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - CRYPTO_set_locking_callback
    - CRYPTO_set_id_callback
    - butil::Mutex::Mutex
    - CRYPTO_THREADID_set_callback
    - CRYPTO_num_locks
    linkageType: ''
    returnType: int
    signature: int SSLThreadInit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:713,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:720,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:722,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:725,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:727,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:728,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:731,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 733
    functionName: brpc::SSLGetDH1024
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH1024()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:736,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:743,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:745,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:748,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:750,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:751,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:754,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 735
    functionDepth: 1
    functionLinenumber: 735
    functionLinenumberEnd: 756
    functionName: brpc::SSLGetDH2048
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - BN_free
    - get_rfc3526_prime_2048
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH2048()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:759,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:766,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:768,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:771,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:773,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:774,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 758
    functionDepth: 1
    functionLinenumber: 758
    functionLinenumberEnd: 779
    functionName: brpc::SSLGetDH4096
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - get_rfc3526_prime_4096
    - BN_dec2bn
    - DH_set0_pqg
    - BN_free
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH4096()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:782,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:789,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:791,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:794,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:796,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:797,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:800,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 802
    functionName: brpc::SSLGetDH8192
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc3526_prime_8192
    - BN_free
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH8192()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SSLGetDH1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:808,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:809,1
    - Dst: brpc::SSLGetDH2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:812,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:813,1
    - Dst: brpc::SSLGetDH4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:816,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:817,1
    - Dst: brpc::SSLGetDH8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:820,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 806
    functionDepth: 2
    functionLinenumber: 806
    functionLinenumberEnd: 826
    functionName: brpc::SSLDHInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::SSLGetDH4096
    - brpc::SSLGetDH8192
    - brpc::SSLGetDH2048
    - LOG
    - brpc::SSLGetDH1024
    linkageType: ''
    returnType: int
    signature: int SSLDHInit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:832,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:837,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:838,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:839,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sep
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 828
    functionDepth: 1
    functionLinenumber: 828
    functionLinenumberEnd: 841
    functionName: brpc::GetNextLevelSeparator
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - std::string::reserve
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string GetNextLevelSeparator(const char* sep)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_cipher
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:844,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:845,1
    - Dst: SSL_get_verify_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:846,1
    - Dst: SSL_get_peer_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:848,1
    - Dst: brpc::GetNextLevelSeparator
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:851,1
    - Dst: brpc::Print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:855,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:855,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 843
    functionDepth: 2
    functionLinenumber: 843
    functionLinenumberEnd: 861
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - std::string::c_str
    - SSL_get_version
    - SSL_get_verify_mode
    - brpc::GetNextLevelSeparator
    - brpc::Print
    - SSL_get_cipher
    - SSL_get_peer_certificate
    linkageType: ''
    returnType: void
    signature: void Print(std::ostream& os, SSL* ssl, const char* sep)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:864,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:864,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:868,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:869,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:869,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:870,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:871,1
    - Dst: X509_get_notBefore
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:871,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:872,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:873,1
    - Dst: X509_get_notAfter
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:873,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:875,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:877,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:878,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:879,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:879,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:882,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:883,1
    - Dst: X509_get_issuer_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:883,1
    - Dst: BIO_get_mem_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:886,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:887,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 3
    argNames:
    - ' os'
    - cert
    - sep
    argTypes:
    - std::ostream
    - X509*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 888
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - X509_get_subject_name
    - X509_get_notBefore
    - BIO_get_mem_data
    - butil::BasicStringPiece::BasicStringPiece
    - X509_get_notAfter
    - c_str
    - X509_get_issuer_name
    - X509_NAME_print
    - ASN1_TIME_print
    - brpc::ExtractHostnames
    - BIO_new
    - BIO_printf
    - std::vector::size
    - BIO_s_mem
    linkageType: ''
    returnType: void
    signature: void Print(std::ostream& os, X509* cert, const char* sep)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:891,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:893,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:894,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:899,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:900,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:903,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:903,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:904,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:904,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' protocol'
    argTypes:
    - AdaptiveProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 890
    functionDepth: 0
    functionLinenumber: 890
    functionLinenumberEnd: 905
    functionName: brpc::ALPNProtocolToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::starts_with
    - name
    - butil::StringPiece::set
    - butil::StringPiece::substr
    - std::string
    - static_cast<char>
    - butil::StringPiece::data
    - butil::StringPiece::size
    linkageType: ''
    returnType: std::string
    signature: std::string ALPNProtocolToString(const AdaptiveProtocolType& protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:914,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:915,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:919,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:922,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:923,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:924,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:925,1
    - Dst: std::copy
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:927,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:928,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:929,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:930,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:932,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' alpn_protocols'
    - ' result'
    argTypes:
    - std::vector<std::string>
    - std::vector<unsigned char>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 935
    functionName: brpc::BuildALPNProtocolList
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - static_cast<unsigned char>
    - end
    - resize
    - brpc::size
    - begin
    - std::copy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool BuildALPNProtocolList(\n    const std::vector<std::string>& alpn_protocols,\n
      \   std::vector<unsigned char>& result\n)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:47,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:49,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:49,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - strncmp
    - c_str
    - strlen
    linkageType: ''
    returnType: bool
    signature: bool IsPemString(const std::string& input)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - SSLState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 67
    functionName: brpc::SSLStateToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToString(SSLState s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:71,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:72,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:72,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:74,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:74,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:75,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:76,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:76,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:76,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:78,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:78,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:78,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:80,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:80,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:80,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:82,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:82,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:85,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 69
    functionDepth: 2
    functionLinenumber: 69
    functionLinenumberEnd: 90
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - butil::StringSplitter::length
    - strncasecmp
    - butil::StringSplitter::field
    - data
    - brpc::size
    - butil::StringPiece::data
    - butil::StringPiece::trim_spaces
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: int
    signature: int ParseSSLProtocols(const std::string& str_protocol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_error_string_n
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: '& operator<<(std::ostream& os, const SSLError& ssl)'
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - ERR_error_string_n
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const SSLError& ssl)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:100,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:101,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:107,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:113,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:114,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:120,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 126
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - private_key::find
    - private_key::substr
    - IsPemString
    - certificate::find
    - certificate::substr
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const CertInfo& cert)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_app_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:131,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:132,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:140,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:142,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ssl
    - where
    - ret
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 128
    functionDepth: 3
    functionLinenumber: 128
    functionLinenumberEnd: 145
    functionName: brpc::SSLInfoCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ssl_state
    - SSL_get_app_data
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void SSLInfoCallback(const SSL* ssl, int where, int ret)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSLerr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:181,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 7
    argNames:
    - write_p
    - version
    - content_type
    - buf
    - len
    - ssl
    - arg
    argTypes:
    - int
    - int
    - int
    - void*
    - size_t
    - SSL*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 185
    functionName: brpc::SSLMessageCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSLerr
    linkageType: ''
    returnType: void
    signature: "void SSLMessageCallback(int write_p, int version, int content_type,\n
      \                              const void* buf, size_t len, SSL* ssl, void*
      arg)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_privatekey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:190,1
    - Dst: EVP_PKEY_base_id
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:191,1
    - Dst: EVP_PKEY_bits
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:196,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - ssl
    - exp
    - keylen
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 208
    functionName: brpc::SSLGetDHCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_base_id
    - EVP_PKEY_bits
    - SSL_get_privatekey
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDHCallback(SSL* ssl, int exp, int keylen)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:213,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:213,1
    - Dst: X509_get_ext_d2i
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:214,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:216,1
    - Dst: sk_GENERAL_NAME_num
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:216,1
    - Dst: sk_GENERAL_NAME_value
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:218,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:220,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:223,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:224,1
    - Dst: sk_GENERAL_NAME_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:228,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:233,1
    - Dst: X509_NAME_get_index_by_NID
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:234,1
    - Dst: X509_NAME_get_entry
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:236,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:237,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:238,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:241,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:242,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 245
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - STACK_OF
    - ASN1_STRING_to_UTF8
    - X509_get_subject_name
    - std::vector<std::string>*::push_back
    - sk_GENERAL_NAME_num
    - static_cast<size_t>
    - X509_NAME_get_entry
    - X509_NAME_get_index_by_NID
    - X509_get_ext_d2i
    - sk_GENERAL_NAME_value
    - sk_GENERAL_NAME_pop_free
    - OPENSSL_free
    - X509_NAME_ENTRY_get_data
    linkageType: ''
    returnType: void
    signature: void ExtractHostnames(X509* x, std::vector<std::string>* hostnames)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 252
    functionName: operator()(SSL* ssl) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_free
    linkageType: ''
    returnType: void
    signature: void operator()(SSL* ssl) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 260
    functionName: operator()(BIO* io) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BIO_free
    linkageType: ''
    returnType: void
    signature: void operator()(BIO* io) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:266,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 268
    functionName: operator()(X509* x) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - X509_free
    linkageType: ''
    returnType: void
    signature: void operator()(X509* x) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 276
    functionName: operator()(EVP_PKEY* k) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_free
    linkageType: ''
    returnType: void
    signature: void operator()(EVP_PKEY* k) const
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:284,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:286,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:286,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:288,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:288,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:289,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:289,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:290,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:291,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:291,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:296,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:297,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:298,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:299,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:299,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:305,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:306,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:307,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:307,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:307,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:309,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:309,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:309,1
    - Dst: BIO_read_filename
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:310,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:310,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:310,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:311,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:312,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:312,1
    - Dst: PEM_read_bio_X509_AUX
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:317,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:319,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:320,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:320,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:325,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:326,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:327,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:327,1
    - Dst: SSL_CTX_clear_chain_certs
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:333,1
    - Dst: sk_X509_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:336,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:341,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:341,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:342,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:343,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:344,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:344,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:345,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:350,1
    - Dst: ERR_GET_LIB
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:351,1
    - Dst: ERR_GET_REASON
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:352,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:353,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:354,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:357,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:360,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:361,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:362,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:362,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:367,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:367,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 54
    argCount: 4
    argNames:
    - ctx
    - ' certificate'
    - ' private_key'
    - hostnames
    argTypes:
    - SSL_CTX*
    - std::string
    - std::string
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 370
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - PEM_read_bio_X509
    - SSL_CTX_check_private_key
    - std::unique_ptr::reset
    - SSL_CTX_use_PrivateKey
    - SSL_CTX_add_extra_chain_cert
    - ERR_get_error
    - BIO_read_filename
    - brpc::ExtractHostnames
    - LOG
    - PEM_read_bio_X509_AUX
    - SSL_CTX_use_certificate
    - ERR_clear_error
    - X509_free
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - BIO_new
    - PEM_read_bio_PrivateKey
    - ERR_GET_REASON
    - BIO_new_mem_buf
    - BIO_s_file
    - SSL_CTX_clear_chain_certs
    - sk_X509_pop_free
    - c_str
    - std::unique_ptr::unique_ptr
    - ERR_GET_LIB
    - brpc::SSLError
    - std::unique_ptr::get
    linkageType: ''
    returnType: int
    signature: "int LoadCertificate(SSL_CTX* ctx,\n                           const
      std::string& certificate,\n                           const std::string& private_key,\n
      \                          std::vector<std::string>* hostnames)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_set_options
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:400,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:404,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:406,1
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:407,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:407,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:408,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:409,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:409,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:415,1
    - Dst: SSL_CTX_set_verify_depth
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:417,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:419,1
    - Dst: X509_get_default_cert_area
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:420,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:420,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:422,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:422,1
    - Dst: ca_file_path::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:423,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:424,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:425,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:427,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:428,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:428,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:433,1
    - Dst: SSL_CTX_set_info_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:436,1
    - Dst: SSL_CTX_set_msg_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:439,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 443
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - ERR_get_error
    - SSL_CTX_set_mode
    - std::string
    - brpc::SSLError
    - SSL_CTX_set_options
    - SSL_CTX_set_verify
    - std::string::c_str
    - ca_file_path::empty
    - SSL_CTX_set_verify_depth
    - SSL_CTX_set_msg_callback
    - std::string::empty
    - SSL_CTX_set_info_callback
    - c_str
    - X509_get_default_cert_area
    - brpc::empty
    - LOG
    - SSL_CTX_set_cipher_list
    - SSL_CTX_load_verify_locations
    linkageType: ''
    returnType: int
    signature: "int SetSSLOptions(SSL_CTX* ctx, const std::string& ciphers,\n                         int
      protocols, const VerifyOptions& verify)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const std::string*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:448,1
    - Dst: SSL_select_next_proto
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:454,1
    - Dst: const_cast<unsigned char**>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:455,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:456,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:456,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 6
    argNames:
    - ssl
    - out
    - outlen
    - in
    - inlen
    - arg
    argTypes:
    - SSL*
    - unsigned char**
    - unsigned char*
    - unsigned char*
    - unsigned int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 445
    functionDepth: 0
    functionLinenumber: 445
    functionLinenumberEnd: 460
    functionName: brpc::ServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const std::string*>
    - std::string*::size
    - reinterpret_cast<const unsigned char*>
    - SSL_select_next_proto
    - std::string*::data
    - const_cast<unsigned char**>
    linkageType: ''
    returnType: int
    signature: "int ServerALPNCallback(\n        SSL* ssl, const unsigned char** out,
      unsigned char* outlen,\n        const unsigned char* in, unsigned int inlen,
      void* arg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:464,1
    - Dst: SSL_VERSION_NUMBER
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:469,1
    - Dst: SSL_CTX_set_alpn_select_cb
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:470,1
    - Dst: const_cast<std::string*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:471,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:473,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ssl_ctx
    - alpns
    argTypes:
    - SSL_CTX*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 477
    functionName: brpc::SetServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - SSL_VERSION_NUMBER
    - SSL_CTX_set_alpn_select_cb
    - LOG
    - const_cast<std::string*>
    linkageType: ''
    returnType: int
    signature: int SetServerALPNCallback(SSL_CTX* ssl_ctx, const std::string* alpns)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:487,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:488,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:488,1
    - Dst: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:494,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:496,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:496,1
    - Dst: alpn_protocols::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:501,1
    - Dst: brpc::BuildALPNProtocolList
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:503,1
    - Dst: SSL_CTX_set_alpn_protos
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: std::vector::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:506,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:509,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:509,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:510,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 479
    functionDepth: 3
    functionLinenumber: 479
    functionLinenumberEnd: 511
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - std::unique_ptr::get
    - ERR_get_error
    - brpc::SetSSLOptions
    - brpc::ParseSSLProtocols
    - alpn_protocols::empty
    - SSL_CTX_set_session_cache_mode
    - SSL_CTX_set_alpn_protos
    - std::vector::data
    - brpc::BuildALPNProtocolList
    - std::unique_ptr::release
    - brpc::LoadCertificate
    - brpc::SSLError
    - LOG
    - std::vector::size
    - client_cert::certificate::empty
    linkageType: ''
    returnType: SSL_CTX
    signature: SSL_CTX * CreateClientSSLContext(const ChannelSSLOptions& options)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:525,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:525,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:534,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:534,1
    - Dst: SSL_CTX_get_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:541,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:541,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:543,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:543,1
    - Dst: SSL_CTX_set_timeout
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:547,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:547,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:548,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:548,1
    - Dst: SSL_CTX_set_tmp_dh_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:551,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:551,1
    - Dst: OBJ_sn2nid
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:555,1
    - Dst: ecdhe_curve_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:555,1
    - Dst: EC_KEY_new_by_curve_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:556,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:557,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:559,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:559,1
    - Dst: SSL_CTX_set_tmp_ecdh
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: EC_KEY_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:563,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:569,1
    - Dst: brpc::SetServerALPNCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:570,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:570,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:574,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 5
    argNames:
    - ' certificate'
    - ' private_key'
    - ' options'
    - alpns
    - hostnames
    argTypes:
    - std::string
    - std::string
    - ServerSSLOptions
    - std::string*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 513
    functionDepth: 2
    functionLinenumber: 513
    functionLinenumberEnd: 575
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - brpc::SetServerALPNCallback
    - SSL_CTX_set_mode
    - ecdhe_curve_name::c_str
    - std::unique_ptr::get
    - ERR_get_error
    - SSL_CTX_get_mode
    - OBJ_sn2nid
    - std::unique_ptr::release
    - SSL_CTX_set_tmp_ecdh
    - EC_KEY_new_by_curve_name
    - LOG
    - brpc::SetSSLOptions
    - SSL_CTX_set_timeout
    - SSL_CTX_sess_set_cache_size
    - EC_KEY_free
    - brpc::LoadCertificate
    - brpc::SSLError
    - std::string*::empty
    - SSL_CTX_set_tmp_dh_callback
    linkageType: ''
    returnType: SSL_CTX
    signature: "SSL_CTX * CreateServerSSLContext(const std::string& certificate,\n
      \                               const std::string& private_key,\n                                const
      ServerSSLOptions& options,\n                                const std::string*
      alpns,\n                                std::vector<std::string>* hostnames)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:579,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:582,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:584,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:584,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:584,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:587,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:588,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:588,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:588,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:589,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:594,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:596,1
    - Dst: SSL_set_app_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:598,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - ctx
    - id
    - fd
    - server_mode
    argTypes:
    - SSL_CTX*
    - SocketId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 577
    functionDepth: 1
    functionLinenumber: 577
    functionLinenumberEnd: 600
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - ERR_get_error
    - SSL_set_connect_state
    - SSL_set_app_data
    - SSL_free
    - SSL_set_accept_state
    - brpc::SSLError
    - LOG
    - SSL_new
    - SSL_set_fd
    linkageType: ''
    returnType: SSL
    signature: SSL * CreateSSLSession(SSL_CTX* ctx, SocketId id, int fd, bool server_mode)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:604,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:604,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:605,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:605,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:607,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:607,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:608,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:609,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:609,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:610,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:612,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:612,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:614,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:615,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:615,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:616,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:617,1
    - Dst: SSL_set_bio
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:618,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - ssl
    - fd
    - bufsize
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 619
    functionName: brpc::AddBIOBuffer
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BIO_push
    - BIO_set_fd
    - SSL_set_bio
    - BIO_f_buffer
    - BIO_new
    - BIO_set_buffer_size
    - BIO_s_fd
    - BIO_s_mem
    linkageType: ''
    returnType: void
    signature: void AddBIOBuffer(SSL* ssl, int fd, int bufsize)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: recv
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:638,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 659
    functionName: brpc::DetectSSLState
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - recv
    linkageType: ''
    returnType: SSLState
    signature: SSLState DetectSSLState(int fd, int* error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_THREADID_set_numeric
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - CRYPTO_THREADID*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 668
    functionName: brpc::SSLGetThreadId
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - CRYPTO_THREADID_set_numeric
    linkageType: ''
    returnType: void
    signature: void SSLGetThreadId(CRYPTO_THREADID* tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:671,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 672
    functionName: brpc::SSLGetThreadId
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    linkageType: ''
    returnType: unsigned long
    signature: unsigned long SSLGetThreadId()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:690,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - mode
    - n
    - file
    - line
    argTypes:
    - int
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 694
    functionName: brpc::SSLLockCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - lock
    - unlock
    linkageType: ''
    returnType: void
    signature: void SSLLockCallback(int mode, int n, const char* file, int line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_num_locks
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:699,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:699,1
    - Dst: CRYPTO_set_locking_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:700,1
    - Dst: CRYPTO_THREADID_set_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:702,1
    - Dst: CRYPTO_set_id_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:704,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 708
    functionName: brpc::SSLThreadInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - CRYPTO_set_locking_callback
    - CRYPTO_set_id_callback
    - butil::Mutex::Mutex
    - CRYPTO_THREADID_set_callback
    - CRYPTO_num_locks
    linkageType: ''
    returnType: int
    signature: int SSLThreadInit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:713,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:720,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:722,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:725,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:727,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:728,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:731,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 733
    functionName: brpc::SSLGetDH1024
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH1024()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:736,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:743,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:745,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:748,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:750,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:751,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:754,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 735
    functionDepth: 1
    functionLinenumber: 735
    functionLinenumberEnd: 756
    functionName: brpc::SSLGetDH2048
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - BN_free
    - get_rfc3526_prime_2048
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH2048()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:759,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:766,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:768,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:771,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:773,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:774,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 758
    functionDepth: 1
    functionLinenumber: 758
    functionLinenumberEnd: 779
    functionName: brpc::SSLGetDH4096
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - get_rfc3526_prime_4096
    - BN_dec2bn
    - DH_set0_pqg
    - BN_free
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH4096()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:782,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:789,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:791,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:794,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:796,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:797,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:800,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 802
    functionName: brpc::SSLGetDH8192
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - BN_dec2bn
    - DH_set0_pqg
    - get_rfc3526_prime_8192
    - BN_free
    - DH_new
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH8192()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SSLGetDH1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:808,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:809,1
    - Dst: brpc::SSLGetDH2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:812,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:813,1
    - Dst: brpc::SSLGetDH4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:816,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:817,1
    - Dst: brpc::SSLGetDH8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:820,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:821,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 806
    functionDepth: 2
    functionLinenumber: 806
    functionLinenumberEnd: 826
    functionName: brpc::SSLDHInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::SSLGetDH4096
    - brpc::SSLGetDH8192
    - brpc::SSLGetDH2048
    - LOG
    - brpc::SSLGetDH1024
    linkageType: ''
    returnType: int
    signature: int SSLDHInit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:832,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:837,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:838,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:839,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sep
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 828
    functionDepth: 1
    functionLinenumber: 828
    functionLinenumberEnd: 841
    functionName: brpc::GetNextLevelSeparator
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - std::string::append
    - std::string::reserve
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string GetNextLevelSeparator(const char* sep)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_cipher
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:844,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:845,1
    - Dst: SSL_get_verify_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:846,1
    - Dst: SSL_get_peer_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:848,1
    - Dst: brpc::GetNextLevelSeparator
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:851,1
    - Dst: brpc::Print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:855,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:855,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 843
    functionDepth: 2
    functionLinenumber: 843
    functionLinenumberEnd: 861
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::c_str
    - SSL_get_version
    - SSL_get_verify_mode
    - brpc::GetNextLevelSeparator
    - brpc::Print
    - SSL_get_cipher
    - SSL_get_peer_certificate
    linkageType: ''
    returnType: void
    signature: void Print(std::ostream& os, SSL* ssl, const char* sep)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:864,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:864,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:868,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:869,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:869,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:870,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:871,1
    - Dst: X509_get_notBefore
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:871,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:872,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:873,1
    - Dst: X509_get_notAfter
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:873,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:875,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:877,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:878,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:879,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:879,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:882,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:883,1
    - Dst: X509_get_issuer_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:883,1
    - Dst: BIO_get_mem_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:886,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:887,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 3
    argNames:
    - ' os'
    - cert
    - sep
    argTypes:
    - std::ostream
    - X509*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 888
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - X509_get_subject_name
    - X509_get_notBefore
    - BIO_get_mem_data
    - butil::BasicStringPiece::BasicStringPiece
    - X509_get_notAfter
    - c_str
    - X509_get_issuer_name
    - X509_NAME_print
    - ASN1_TIME_print
    - brpc::ExtractHostnames
    - BIO_new
    - BIO_printf
    - std::vector::size
    - BIO_s_mem
    linkageType: ''
    returnType: void
    signature: void Print(std::ostream& os, X509* cert, const char* sep)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:891,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:893,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:894,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:899,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:900,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:903,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:903,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:904,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:904,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' protocol'
    argTypes:
    - AdaptiveProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 890
    functionDepth: 0
    functionLinenumber: 890
    functionLinenumberEnd: 905
    functionName: brpc::ALPNProtocolToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::starts_with
    - name
    - butil::StringPiece::set
    - butil::StringPiece::substr
    - std::string
    - static_cast<char>
    - butil::StringPiece::data
    - butil::StringPiece::size
    linkageType: ''
    returnType: std::string
    signature: std::string ALPNProtocolToString(const AdaptiveProtocolType& protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:914,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:915,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:919,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:922,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:923,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:924,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:925,1
    - Dst: std::copy
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:927,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:928,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:929,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:930,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:932,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - ' alpn_protocols'
    - ' result'
    argTypes:
    - std::vector<std::string>
    - std::vector<unsigned char>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 935
    functionName: brpc::BuildALPNProtocolList
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - static_cast<unsigned char>
    - end
    - resize
    - brpc::size
    - begin
    - std::copy
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool BuildALPNProtocolList(\n    const std::vector<std::string>& alpn_protocols,\n
      \   std::vector<unsigned char>& result\n)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:36,1
    - Dst: socketpair
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:41,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:44,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:46,1
    - Dst: close
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:49,1
    - Dst: brpc::release
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:49,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:54,1
    - Dst: static_cast<EPOLL_EVENTS>
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:58,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 35
    functionDepth: 3
    functionLinenumber: 35
    functionLinenumberEnd: 59
    functionName: brpc::check_epollrdhup
    functionSourceFile: /src/brpc/src/brpc/details/has_epollrdhup.cpp
    functionUses: 0
    functionsReached:
    - socketpair
    - epoll_wait
    - epoll_create
    - brpc::release
    - static_cast<EPOLL_EVENTS>
    - static_cast<uint32_t>
    - close
    - epoll_ctl
    linkageType: ''
    returnType: unsigned int
    signature: unsigned int check_epollrdhup()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:36,1
    - Dst: socketpair
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:41,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:44,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:46,1
    - Dst: close
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:49,1
    - Dst: brpc::release
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:49,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:54,1
    - Dst: static_cast<EPOLL_EVENTS>
      Src: /src/brpc/src/brpc/details/has_epollrdhup.cpp:58,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 35
    functionDepth: 3
    functionLinenumber: 35
    functionLinenumberEnd: 59
    functionName: brpc::check_epollrdhup
    functionSourceFile: /src/brpc/src/brpc/details/has_epollrdhup.cpp
    functionUses: 0
    functionsReached:
    - socketpair
    - epoll_wait
    - epoll_create
    - brpc::release
    - static_cast<EPOLL_EVENTS>
    - static_cast<uint32_t>
    - close
    - epoll_ctl
    linkageType: ''
    returnType: unsigned int
    signature: unsigned int check_epollrdhup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' prot_in'
    - ' service_in'
    - ' sig'
    argTypes:
    - std::string
    - std::string
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: brpc::NSKey
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void NSKey(const std::string& prot_in,\n          const std::string&
      service_in,\n          const ChannelSignature& sig)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:45,1
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' nskey'
    argTypes:
    - NSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: operator()(const NSKey& nskey) const
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::DefaultHasher<std::string>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const NSKey& nskey) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - NSKey
    - NSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: operator==(const NSKey& k1, const NSKey& k2)
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const NSKey& k1, const NSKey& k2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:67,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - owner
    argTypes:
    - NamingServiceThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 3
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: NamingServiceThread::Actions::Actions(NamingServiceThread* owner)
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_id_create
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Actions::Actions(NamingServiceThread* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:72,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:73,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:75,1
    - Dst: EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 78
    functionName: NamingServiceThread::Actions::~Actions()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - SocketMapRemove
    - end
    - EndWait
    - begin
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Actions::~Actions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: "NamingServiceThread::Actions::AddServers(\n    const std::vector<ServerNode>&)"
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Actions::AddServers(\n    const std::vector<ServerNode>&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: "NamingServiceThread::Actions::RemoveServers(\n    const std::vector<ServerNode>&)"
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Actions::RemoveServers(\n    const std::vector<ServerNode>&)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:94,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:94,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:94,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:98,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:98,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:98,1
    - Dst: std::unique
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:99,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:99,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:99,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:100,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:102,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:102,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:104,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:106,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:106,1
    - Dst: std::set_difference
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:108,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:108,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:108,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:109,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:109,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:110,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:111,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:111,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:113,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:113,1
    - Dst: std::set_difference
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:115,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:115,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:115,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:116,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:116,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:117,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:118,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:118,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:120,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:121,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:128,1
    - Dst: SocketMapInsert
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:128,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:130,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:133,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:134,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:138,1
    - Dst: SocketMapFind
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:138,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:139,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:143,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:146,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:146,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:146,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:147,1
    - Dst: _last_sockets::size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:147,1
    - Dst: std::set_difference
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:149,1
    - Dst: _last_sockets::begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:150,1
    - Dst: _last_sockets::end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:150,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:151,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:151,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:152,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:153,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:153,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:155,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:156,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:157,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:157,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:157,1
    - Dst: insert
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:158,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:158,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:159,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:159,1
    - Dst: std::inplace_merge
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:160,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:160,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:160,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:161,1
    - Dst: ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:164,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:167,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:168,1
    - Dst: _last_sockets::swap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:169,1
    - Dst: _watchers::begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:172,1
    - Dst: _watchers::end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:173,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:174,1
    - Dst: "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnRemovedServers"
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:175,1
    - Dst: ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:179,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:180,1
    - Dst: "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnAddedServers"
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:181,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:186,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:190,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:193,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:193,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:195,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:198,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:200,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:203,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:203,1
    - Dst: EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:206,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:206,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 63
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerNode>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 207
    functionName: "NamingServiceThread::Actions::ResetServers(\n        const std::vector<ServerNode>&
      servers)"
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnAddedServers"
    - std::set_difference
    - _watchers::end
    - assign
    - CHECK_EQ
    - _last_sockets::begin
    - SocketMapInsert
    - _last_sockets::size
    - swap
    - _last_sockets::swap
    - _last_sockets::end
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - std::inplace_merge
    - std::unique
    - clear
    - insert
    - size
    - LOG
    - std::ostringstream::str
    - SocketMapRemove
    - std::sort
    - BAIDU_SCOPED_LOCK
    - push_back
    - EndWait
    - begin
    - SocketMapFind
    - end
    - butil::class_name_str
    - resize
    - _watchers::begin
    - empty
    - ServerNodeWithId2ServerId
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Actions::ResetServers(\n        const std::vector<ServerNode>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_trylock
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:210,1
    - Dst: store
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:212,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:213,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 209
    functionDepth: 5
    functionLinenumber: 209
    functionLinenumberEnd: 215
    functionName: NamingServiceThread::Actions::EndWait(int error_code)
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - store
    - bthread_id_trylock
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Actions::EndWait(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:220,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 217
    functionDepth: 5
    functionLinenumber: 217
    functionLinenumberEnd: 224
    functionName: NamingServiceThread::Actions::WaitForFirstBatchOfServers()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_id_join
    linkageType: ''
    returnType: int
    signature: int NamingServiceThread::Actions::WaitForFirstBatchOfServers()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: brpc::NamingServiceThread::NamingServiceThread
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::NamingServiceThread()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:235,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:239,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:241,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:246,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:247,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:251,1
    - Dst: ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:253,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:254,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:257,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:257,1
    - Dst: "std::map<NamingServiceWatcher*,\n                          const NamingServiceFilter*>::iterator::first::OnRemovedServers"
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:258,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:261,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:265,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 232
    functionDepth: 3
    functionLinenumber: 232
    functionLinenumberEnd: 268
    functionName: NamingServiceThread::~NamingServiceThread()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - end
    - "std::map<NamingServiceWatcher*,\n                          const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - Destroy
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - erase
    - empty
    - clear
    - begin
    - seek
    - ServerNodeWithId2ServerId
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::~NamingServiceThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<NamingServiceThread*>
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 273
    functionName: brpc::NamingServiceThread::RunThis
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - static_cast<NamingServiceThread*>
    linkageType: ''
    returnType: void
    signature: void * NamingServiceThread::RunThis(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:280,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:289,1
    - Dst: RunNamingServiceReturnsQuickly
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:290,1
    - Dst: brpc::NamingServiceThread::RunThis
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:291,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:295,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:295,1
    - Dst: brpc::NamingServiceThread::WaitForFirstBatchOfServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:299,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - naming_service
    - ' protocol'
    - ' service_name'
    - opt_in
    argTypes:
    - NamingService*
    - std::string
    - std::string
    - GetNamingServiceThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 275
    functionDepth: 4
    functionLinenumber: 275
    functionLinenumberEnd: 300
    functionName: brpc::NamingServiceThread::Start
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - brpc::NamingServiceThread::RunThis
    - clear
    - RunNamingServiceReturnsQuickly
    - LOG
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - berror
    linkageType: ''
    returnType: int
    signature: "int NamingServiceThread::Start(NamingService* naming_service,\n                               const
      std::string& protocol,\n                               const std::string& service_name,\n
      \                              const GetNamingServiceThreadOptions* opt_in)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::WaitForFirstBatchOfServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:312,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:312,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 316
    functionName: brpc::NamingServiceThread::WaitForFirstBatchOfServers
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 2
    functionsReached:
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int NamingServiceThread::WaitForFirstBatchOfServers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 320
    functionName: brpc::NamingServiceThread::EndWait
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 1
    functionsReached:
    - brpc::NamingServiceThread::EndWait
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::EndWait(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerId>*::reserve
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:325,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:325,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:327,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:327,1
    - Dst: NamingServiceFilter*::Accept
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:328,1
    - Dst: std::vector<ServerId>*::push_back
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:334,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 3
    argNames:
    - ' src'
    - dst
    - filter
    argTypes:
    - std::vector<ServerNodeWithId>
    - std::vector<ServerId>*
    - NamingServiceFilter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 336
    functionName: brpc::NamingServiceThread::ServerNodeWithId2ServerId
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - end
    - NamingServiceFilter*::Accept
    - std::vector<ServerId>*::push_back
    - std::vector<ServerId>*::reserve
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::ServerNodeWithId2ServerId(\n    const std::vector<ServerNodeWithId>&
      src,\n    std::vector<ServerId>* dst, const NamingServiceFilter* filter)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:341,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:344,1
    - Dst: emplace
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:345,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:346,1
    - Dst: brpc::NamingServiceThread::ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:348,1
    - Dst: NamingServiceWatcher*::OnAddedServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:349,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - watcher
    - filter
    argTypes:
    - NamingServiceWatcher*
    - NamingServiceFilter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 338
    functionDepth: 2
    functionLinenumber: 338
    functionLinenumberEnd: 354
    functionName: brpc::NamingServiceThread::AddWatcher
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - NamingServiceWatcher*::OnAddedServers
    - emplace
    - BAIDU_SCOPED_LOCK
    - empty
    - LOG
    - brpc::NamingServiceThread::ServerNodeWithId2ServerId
    linkageType: ''
    returnType: int
    signature: "int NamingServiceThread::AddWatcher(NamingServiceWatcher* watcher,\n
      \                                   const NamingServiceFilter* filter)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:358,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:361,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:362,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - watcher
    argTypes:
    - NamingServiceWatcher*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 369
    functionName: brpc::NamingServiceThread::RemoveWatcher
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - erase
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int NamingServiceThread::RemoveWatcher(NamingServiceWatcher* watcher)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RunNamingService
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:372,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:372,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:374,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:376,1
    - Dst: brpc::NamingServiceThread::EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:380,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 371
    functionDepth: 2
    functionLinenumber: 371
    functionLinenumberEnd: 386
    functionName: brpc::NamingServiceThread::Run
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - brpc::NamingServiceThread::EndWait
    - c_str
    - berror
    - RunNamingService
    - LOG
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:394,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 2
    argNames:
    - url
    - protocol
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 413
    functionName: brpc::ParseNamingServiceUrl
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - __builtin_expect
    linkageType: ''
    returnType: char
    signature: char * ParseNamingServiceUrl(const char* url, char* protocol)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParseNamingServiceUrl
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:422,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:427,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:431,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:433,1
    - Dst: NamingServiceMap::NamingServiceMap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:437,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:440,1
    - Dst: init
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:444,1
    - Dst: AddRefManually
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:449,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:458,1
    - Dst: NamingServiceThread::NamingServiceThread
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:462,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:464,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:465,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:469,1
    - Dst: butil::intrusive_ptr::Start
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:474,1
    - Dst: NamingService*::New
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:476,1
    - Dst: butil::intrusive_ptr::EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:478,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:480,1
    - Dst: butil::intrusive_ptr::WaitForFirstBatchOfServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:484,1
    - Dst: butil::intrusive_ptr<NamingServiceThread>*::swap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:488,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 3
    argNames:
    - nsthread_out
    - url
    - options
    argTypes:
    - butil::intrusive_ptr<NamingServiceThread>*
    - char*
    - GetNamingServiceThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 415
    functionDepth: 2
    functionLinenumber: 415
    functionLinenumberEnd: 490
    functionName: brpc::GetNamingServiceThread
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParseNamingServiceUrl
    - init
    - butil::intrusive_ptr::Start
    - butil::intrusive_ptr<NamingServiceThread>*::swap
    - brpc::ChannelSignature
    - AddRefManually
    - NamingServiceThread::NamingServiceThread
    - NamingService*::New
    - NamingServiceMap::NamingServiceMap
    - butil::intrusive_ptr::reset
    - erase
    - butil::intrusive_ptr::EndWait
    - butil::intrusive_ptr::WaitForFirstBatchOfServers
    - std::unique_lock::unlock
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    - brpc::NamingServiceExtension
    linkageType: ''
    returnType: int
    signature: "int GetNamingServiceThread(\n    butil::intrusive_ptr<NamingServiceThread>*
      nsthread_out,\n    const char* url,\n    const GetNamingServiceThreadOptions*
      options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::Describe
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:497,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 500
    functionName: brpc::NamingServiceThread::Describe
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 1
    functionsReached:
    - brpc::NamingServiceThread::Describe
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Describe(std::ostream& os,\n                                   const
      DescribeOptions& options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Describe
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:503,1
    - Dst: DescribeOptions
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' nsthr'
    argTypes:
    - std::ostream
    - NamingServiceThread
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 505
    functionName: '& operator<<(std::ostream& os, const NamingServiceThread& nsthr)'
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - DescribeOptions
    - Describe
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const NamingServiceThread&
      nsthr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' prot_in'
    - ' service_in'
    - ' sig'
    argTypes:
    - std::string
    - std::string
    - ChannelSignature
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: brpc::NSKey
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void NSKey(const std::string& prot_in,\n          const std::string&
      service_in,\n          const ChannelSignature& sig)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:45,1
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' nskey'
    argTypes:
    - NSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: operator()(const NSKey& nskey) const
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::DefaultHasher<std::string>
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const NSKey& nskey) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - NSKey
    - NSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: operator==(const NSKey& k1, const NSKey& k2)
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const NSKey& k1, const NSKey& k2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:67,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - owner
    argTypes:
    - NamingServiceThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 3
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: NamingServiceThread::Actions::Actions(NamingServiceThread* owner)
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - bthread_id_create
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Actions::Actions(NamingServiceThread* owner)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:72,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:73,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:75,1
    - Dst: EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 78
    functionName: NamingServiceThread::Actions::~Actions()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - SocketMapRemove
    - end
    - EndWait
    - begin
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Actions::~Actions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: "NamingServiceThread::Actions::AddServers(\n    const std::vector<ServerNode>&)"
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Actions::AddServers(\n    const std::vector<ServerNode>&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: "NamingServiceThread::Actions::RemoveServers(\n    const std::vector<ServerNode>&)"
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Actions::RemoveServers(\n    const std::vector<ServerNode>&)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:94,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:94,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:94,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:98,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:98,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:98,1
    - Dst: std::unique
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:99,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:99,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:99,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:100,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:102,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:102,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:104,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:106,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:106,1
    - Dst: std::set_difference
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:108,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:108,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:108,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:109,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:109,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:110,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:111,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:111,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:113,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:113,1
    - Dst: std::set_difference
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:115,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:115,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:115,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:116,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:116,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:117,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:118,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:118,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:120,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:121,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:128,1
    - Dst: SocketMapInsert
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:128,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:130,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:133,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:134,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:138,1
    - Dst: SocketMapFind
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:138,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:139,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:143,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:146,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:146,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:146,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:147,1
    - Dst: _last_sockets::size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:147,1
    - Dst: std::set_difference
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:149,1
    - Dst: _last_sockets::begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:150,1
    - Dst: _last_sockets::end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:150,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:151,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:151,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:152,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:153,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:153,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:155,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:156,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:157,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:157,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:157,1
    - Dst: insert
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:158,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:158,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:159,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:159,1
    - Dst: std::inplace_merge
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:160,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:160,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:160,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:161,1
    - Dst: ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:164,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:167,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:168,1
    - Dst: _last_sockets::swap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:169,1
    - Dst: _watchers::begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:172,1
    - Dst: _watchers::end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:173,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:174,1
    - Dst: "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnRemovedServers"
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:175,1
    - Dst: ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:179,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:180,1
    - Dst: "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnAddedServers"
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:181,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:186,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:190,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:193,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:193,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:195,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:198,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:200,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:203,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:203,1
    - Dst: EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:206,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:206,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 63
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerNode>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 207
    functionName: "NamingServiceThread::Actions::ResetServers(\n        const std::vector<ServerNode>&
      servers)"
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnAddedServers"
    - std::set_difference
    - _watchers::end
    - assign
    - CHECK_EQ
    - _last_sockets::begin
    - SocketMapInsert
    - _last_sockets::size
    - swap
    - _last_sockets::swap
    - _last_sockets::end
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - std::inplace_merge
    - std::unique
    - clear
    - insert
    - size
    - LOG
    - std::ostringstream::str
    - SocketMapRemove
    - std::sort
    - BAIDU_SCOPED_LOCK
    - push_back
    - EndWait
    - begin
    - SocketMapFind
    - end
    - butil::class_name_str
    - resize
    - _watchers::begin
    - empty
    - ServerNodeWithId2ServerId
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Actions::ResetServers(\n        const std::vector<ServerNode>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_trylock
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:210,1
    - Dst: store
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:212,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:213,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 209
    functionDepth: 5
    functionLinenumber: 209
    functionLinenumberEnd: 215
    functionName: NamingServiceThread::Actions::EndWait(int error_code)
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - store
    - bthread_id_trylock
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Actions::EndWait(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:220,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 217
    functionDepth: 5
    functionLinenumber: 217
    functionLinenumberEnd: 224
    functionName: NamingServiceThread::Actions::WaitForFirstBatchOfServers()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_id_join
    linkageType: ''
    returnType: int
    signature: int NamingServiceThread::Actions::WaitForFirstBatchOfServers()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: brpc::NamingServiceThread::NamingServiceThread
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::NamingServiceThread()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:235,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:239,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:241,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:246,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:247,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:251,1
    - Dst: ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:253,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:254,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:257,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:257,1
    - Dst: "std::map<NamingServiceWatcher*,\n                          const NamingServiceFilter*>::iterator::first::OnRemovedServers"
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:258,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:261,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:265,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 232
    functionDepth: 3
    functionLinenumber: 232
    functionLinenumberEnd: 268
    functionName: NamingServiceThread::~NamingServiceThread()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - end
    - "std::map<NamingServiceWatcher*,\n                          const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - Destroy
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - erase
    - empty
    - clear
    - begin
    - seek
    - ServerNodeWithId2ServerId
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::~NamingServiceThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<NamingServiceThread*>
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 273
    functionName: brpc::NamingServiceThread::RunThis
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 1
    functionsReached:
    - static_cast<NamingServiceThread*>
    linkageType: ''
    returnType: void
    signature: void * NamingServiceThread::RunThis(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:280,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:289,1
    - Dst: RunNamingServiceReturnsQuickly
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:290,1
    - Dst: brpc::NamingServiceThread::RunThis
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:291,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:293,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:295,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:295,1
    - Dst: brpc::NamingServiceThread::WaitForFirstBatchOfServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:299,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 4
    argNames:
    - naming_service
    - ' protocol'
    - ' service_name'
    - opt_in
    argTypes:
    - NamingService*
    - std::string
    - std::string
    - GetNamingServiceThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 275
    functionDepth: 4
    functionLinenumber: 275
    functionLinenumberEnd: 300
    functionName: brpc::NamingServiceThread::Start
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - brpc::NamingServiceThread::RunThis
    - clear
    - RunNamingServiceReturnsQuickly
    - LOG
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - berror
    linkageType: ''
    returnType: int
    signature: "int NamingServiceThread::Start(NamingService* naming_service,\n                               const
      std::string& protocol,\n                               const std::string& service_name,\n
      \                              const GetNamingServiceThreadOptions* opt_in)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::WaitForFirstBatchOfServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:312,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:312,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 316
    functionName: brpc::NamingServiceThread::WaitForFirstBatchOfServers
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 4
    functionsReached:
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int NamingServiceThread::WaitForFirstBatchOfServers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 320
    functionName: brpc::NamingServiceThread::EndWait
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 3
    functionsReached:
    - brpc::NamingServiceThread::EndWait
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::EndWait(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ServerId>*::reserve
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:325,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:325,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:327,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:327,1
    - Dst: NamingServiceFilter*::Accept
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:328,1
    - Dst: std::vector<ServerId>*::push_back
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:334,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 3
    argNames:
    - ' src'
    - dst
    - filter
    argTypes:
    - std::vector<ServerNodeWithId>
    - std::vector<ServerId>*
    - NamingServiceFilter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 336
    functionName: brpc::NamingServiceThread::ServerNodeWithId2ServerId
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 1
    functionsReached:
    - end
    - NamingServiceFilter*::Accept
    - std::vector<ServerId>*::push_back
    - std::vector<ServerId>*::reserve
    - begin
    - size
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::ServerNodeWithId2ServerId(\n    const std::vector<ServerNodeWithId>&
      src,\n    std::vector<ServerId>* dst, const NamingServiceFilter* filter)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:341,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:344,1
    - Dst: emplace
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:345,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:346,1
    - Dst: brpc::NamingServiceThread::ServerNodeWithId2ServerId
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:348,1
    - Dst: NamingServiceWatcher*::OnAddedServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:349,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - watcher
    - filter
    argTypes:
    - NamingServiceWatcher*
    - NamingServiceFilter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 338
    functionDepth: 2
    functionLinenumber: 338
    functionLinenumberEnd: 354
    functionName: brpc::NamingServiceThread::AddWatcher
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - NamingServiceWatcher*::OnAddedServers
    - emplace
    - BAIDU_SCOPED_LOCK
    - empty
    - LOG
    - brpc::NamingServiceThread::ServerNodeWithId2ServerId
    linkageType: ''
    returnType: int
    signature: "int NamingServiceThread::AddWatcher(NamingServiceWatcher* watcher,\n
      \                                   const NamingServiceFilter* filter)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:358,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:361,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:362,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - watcher
    argTypes:
    - NamingServiceWatcher*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 369
    functionName: brpc::NamingServiceThread::RemoveWatcher
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - erase
    - LOG
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: int NamingServiceThread::RemoveWatcher(NamingServiceWatcher* watcher)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RunNamingService
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:372,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:372,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:374,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:376,1
    - Dst: brpc::NamingServiceThread::EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:380,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 371
    functionDepth: 2
    functionLinenumber: 371
    functionLinenumberEnd: 386
    functionName: brpc::NamingServiceThread::Run
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - brpc::NamingServiceThread::EndWait
    - c_str
    - berror
    - RunNamingService
    - LOG
    linkageType: ''
    returnType: void
    signature: void NamingServiceThread::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:394,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 2
    argNames:
    - url
    - protocol
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 413
    functionName: brpc::ParseNamingServiceUrl
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 1
    functionsReached:
    - __builtin_expect
    linkageType: ''
    returnType: char
    signature: char * ParseNamingServiceUrl(const char* url, char* protocol)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ParseNamingServiceUrl
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:422,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:427,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:431,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:433,1
    - Dst: NamingServiceMap::NamingServiceMap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:437,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:440,1
    - Dst: init
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:443,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:444,1
    - Dst: AddRefManually
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:449,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:458,1
    - Dst: NamingServiceThread::NamingServiceThread
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:462,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:464,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:465,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:469,1
    - Dst: butil::intrusive_ptr::Start
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:474,1
    - Dst: NamingService*::New
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:476,1
    - Dst: butil::intrusive_ptr::EndWait
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:478,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:480,1
    - Dst: butil::intrusive_ptr::WaitForFirstBatchOfServers
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:484,1
    - Dst: butil::intrusive_ptr<NamingServiceThread>*::swap
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:488,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 3
    argNames:
    - nsthread_out
    - url
    - options
    argTypes:
    - butil::intrusive_ptr<NamingServiceThread>*
    - char*
    - GetNamingServiceThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 415
    functionDepth: 2
    functionLinenumber: 415
    functionLinenumberEnd: 490
    functionName: brpc::GetNamingServiceThread
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - brpc::ParseNamingServiceUrl
    - init
    - butil::intrusive_ptr::Start
    - butil::intrusive_ptr<NamingServiceThread>*::swap
    - brpc::ChannelSignature
    - AddRefManually
    - NamingServiceThread::NamingServiceThread
    - NamingService*::New
    - NamingServiceMap::NamingServiceMap
    - butil::intrusive_ptr::reset
    - erase
    - butil::intrusive_ptr::EndWait
    - butil::intrusive_ptr::WaitForFirstBatchOfServers
    - std::unique_lock::unlock
    - butil::intrusive_ptr::intrusive_ptr
    - LOG
    - brpc::NamingServiceExtension
    linkageType: ''
    returnType: int
    signature: "int GetNamingServiceThread(\n    butil::intrusive_ptr<NamingServiceThread>*
      nsthread_out,\n    const char* url,\n    const GetNamingServiceThreadOptions*
      options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::Describe
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:497,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 500
    functionName: brpc::NamingServiceThread::Describe
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 2
    functionsReached:
    - brpc::NamingServiceThread::Describe
    linkageType: ''
    returnType: void
    signature: "void NamingServiceThread::Describe(std::ostream& os,\n                                   const
      DescribeOptions& options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Describe
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:503,1
    - Dst: DescribeOptions
      Src: /src/brpc/src/brpc/details/naming_service_thread.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' nsthr'
    argTypes:
    - std::ostream
    - NamingServiceThread
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 505
    functionName: '& operator<<(std::ostream& os, const NamingServiceThread& nsthr)'
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.cpp
    functionUses: 0
    functionsReached:
    - DescribeOptions
    - Describe
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const NamingServiceThread&
      nsthr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::TooManyUserCode
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool TooManyUserCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::static_atomic::fetch_add
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:58,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: brpc::BeginRunningUserCode
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 2
    functionsReached:
    - butil::static_atomic::fetch_add
    - bthread_getconcurrency
    linkageType: ''
    returnType: bool
    signature: bool BeginRunningUserCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::static_atomic::fetch_sub
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 65
    functionName: brpc::EndRunningUserCodeInPlace
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 2
    functionsReached:
    - butil::static_atomic::fetch_sub
    linkageType: ''
    returnType: void
    signature: void EndRunningUserCodeInPlace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::BeginRunningUserCode
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:73,1
    - Dst: fn
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:74,1
    - Dst: brpc::EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:75,1
    - Dst: brpc::EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 79
    functionName: brpc::RunUserCode
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 0
    functionsReached:
    - brpc::EndRunningUserCodeInPlace
    - brpc::BeginRunningUserCode
    - brpc::EndRunningUserCodeInPool
    - fn
    linkageType: ''
    returnType: void
    signature: void RunUserCode(void (*fn)(void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::TooManyUserCode
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool TooManyUserCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::static_atomic::fetch_add
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:58,1
    - Dst: bthread_getconcurrency
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: brpc::BeginRunningUserCode
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 3
    functionsReached:
    - butil::static_atomic::fetch_add
    - bthread_getconcurrency
    linkageType: ''
    returnType: bool
    signature: bool BeginRunningUserCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::static_atomic::fetch_sub
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 65
    functionName: brpc::EndRunningUserCodeInPlace
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 3
    functionsReached:
    - butil::static_atomic::fetch_sub
    linkageType: ''
    returnType: void
    signature: void EndRunningUserCodeInPlace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::BeginRunningUserCode
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:73,1
    - Dst: fn
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:74,1
    - Dst: brpc::EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:75,1
    - Dst: brpc::EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 79
    functionName: brpc::RunUserCode
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.h
    functionUses: 0
    functionsReached:
    - brpc::EndRunningUserCodeInPlace
    - brpc::BeginRunningUserCode
    - brpc::EndRunningUserCodeInPool
    - fn
    linkageType: ''
    returnType: void
    signature: void RunUserCode(void (*fn)(void*), void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BitStream*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:25,1
    - Dst: BitStream*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:37,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:38,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:45,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 50
    functionName: brpc::avc_nalu_read_uev
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::empty
    - BitStream*::read_bit
    linkageType: ''
    returnType: int
    signature: int avc_nalu_read_uev(BitStream* stream, int32_t* v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BitStream*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:53,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: brpc::avc_nalu_read_bit
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::empty
    - BitStream*::read_bit
    linkageType: ''
    returnType: int
    signature: int avc_nalu_read_bit(BitStream* stream, int8_t* v)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BitStream*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:25,1
    - Dst: BitStream*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:37,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:38,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:45,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 50
    functionName: brpc::avc_nalu_read_uev
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::empty
    - BitStream*::read_bit
    linkageType: ''
    returnType: int
    signature: int avc_nalu_read_uev(BitStream* stream, int32_t* v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BitStream*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:53,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: brpc::avc_nalu_read_bit
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::empty
    - BitStream*::read_bit
    linkageType: ''
    returnType: int
    signature: int avc_nalu_read_bit(BitStream* stream, int8_t* v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::HPackOptions::HPackOptions
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HPackOptions::HPackOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: brpc::HPacker::Header
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' name2'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: brpc::HPacker::Header
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header(const std::string& name2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name2'
    - ' value2'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 94
    functionName: brpc::HPacker::Header
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header(const std::string& name2, const std::string& value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/src/brpc/details/hpack.h:109,1
    - Dst: HPackOptions
      Src: /src/brpc/src/brpc/details/hpack.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - out
    - ' header'
    argTypes:
    - butil::IOBufAppender*
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 109
    functionName: brpc::HPacker::Encode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 9
    functionsReached:
    - brpc::HPacker::Encode
    - HPackOptions
    linkageType: ''
    returnType: void
    signature: void Encode(butil::IOBufAppender* out, const Header& header)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/src/brpc/details/hpack.h:142,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/details/hpack.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - source
    - h
    argTypes:
    - butil::IOBuf*
    - Header*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: brpc::HPacker::Decode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 10
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::HPacker::Decode
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HPacker::Decode(butil::IOBuf* source, Header* h)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: brpc::HPackOptions::HPackOptions
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HPackOptions::HPackOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: brpc::HPacker::Header
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' name2'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: brpc::HPacker::Header
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header(const std::string& name2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name2'
    - ' value2'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 94
    functionName: brpc::HPacker::Header
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header(const std::string& name2, const std::string& value2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/src/brpc/details/hpack.h:109,1
    - Dst: HPackOptions
      Src: /src/brpc/src/brpc/details/hpack.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - out
    - ' header'
    argTypes:
    - butil::IOBufAppender*
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 109
    functionName: brpc::HPacker::Encode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 10
    functionsReached:
    - brpc::HPacker::Encode
    - HPackOptions
    linkageType: ''
    returnType: void
    signature: void Encode(butil::IOBufAppender* out, const Header& header)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/src/brpc/details/hpack.h:142,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/details/hpack.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - source
    - h
    argTypes:
    - butil::IOBuf*
    - Header*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: brpc::HPacker::Decode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.h
    functionUses: 11
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::HPacker::Decode
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HPacker::Decode(butil::IOBuf* source, Header* h)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - major
    - ','
    - minor
    - ','
    - patch
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: SSL_VERSION_NUMBER
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SSL_VERSION_NUMBER(major, minor, patch)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_free
      Src: /src/brpc/src/brpc/details/ssl_helper.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: operator()(SSL_CTX* ctx) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.h
    functionUses: 0
    functionsReached:
    - SSL_CTX_free
    linkageType: ''
    returnType: void
    signature: void operator()(SSL_CTX* ctx) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - e
    argTypes:
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::SSLError
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SSLError(unsigned long e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - major
    - ','
    - minor
    - ','
    - patch
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: SSL_VERSION_NUMBER
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SSL_VERSION_NUMBER(major, minor, patch)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_free
      Src: /src/brpc/src/brpc/details/ssl_helper.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: operator()(SSL_CTX* ctx) const
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.h
    functionUses: 0
    functionsReached:
    - SSL_CTX_free
    linkageType: ''
    returnType: void
    signature: void operator()(SSL_CTX* ctx) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - e
    argTypes:
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::SSLError
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SSLError(unsigned long e)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:40,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:42,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - strncmp
    - c_str
    - strlen
    linkageType: ''
    returnType: bool
    signature: bool IsPemString(const std::string& input)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - SSLState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 60
    functionName: brpc::SSLStateToString
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToString(SSLState s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:64,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:65,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:65,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:67,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:67,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:68,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:70,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:70,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:70,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:72,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:73,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:73,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:76,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 62
    functionDepth: 2
    functionLinenumber: 62
    functionLinenumberEnd: 81
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - strncasecmp
    - butil::StringSplitter::field
    - data
    - brpc::size
    - butil::StringPiece::data
    - butil::StringPiece::trim_spaces
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: int
    signature: int ParseSSLProtocols(const std::string& str_protocol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_error_string_n
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: '& operator<<(std::ostream& os, const SSLError& ssl)'
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - ERR_error_string_n
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const SSLError& ssl)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:91,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:92,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:98,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:104,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:105,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:111,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 117
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - private_key::find
    - private_key::substr
    - IsPemString
    - certificate::find
    - certificate::substr
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const CertInfo& cert)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:120,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:120,1
    - Dst: X509_get_alt_subject_names
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:121,1
    - Dst: sk_X509_NAME_num
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:123,1
    - Dst: sk_X509_NAME_value
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:125,1
    - Dst: X509_NAME_oneline
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:126,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:128,1
    - Dst: sk_X509_NAME_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 133
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 5
    functionsReached:
    - STACK_OF
    - X509_NAME_oneline
    - std::vector<std::string>*::push_back
    - sk_X509_NAME_value
    - sk_X509_NAME_num
    - sk_X509_NAME_free
    - X509_get_alt_subject_names
    linkageType: ''
    returnType: void
    signature: void ExtractHostnames(X509* x, std::vector<std::string>* hostnames)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 140
    functionName: operator()(SSL* ssl) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_free
    linkageType: ''
    returnType: void
    signature: void operator()(SSL* ssl) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: operator()(BIO* io) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BIO_free
    linkageType: ''
    returnType: void
    signature: void operator()(BIO* io) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:154,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 156
    functionName: operator()(X509* x) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - X509_free
    linkageType: ''
    returnType: void
    signature: void operator()(X509* x) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 164
    functionName: operator()(EVP_PKEY* k) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_free
    linkageType: ''
    returnType: void
    signature: void operator()(EVP_PKEY* k) const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:172,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:174,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:174,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:176,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:176,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:177,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:178,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:179,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:179,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:183,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:185,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:186,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:186,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:192,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:193,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:194,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:194,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:194,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: BIO_read_filename
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:199,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:199,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:204,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:206,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:207,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:207,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:212,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:213,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:214,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:214,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:221,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:221,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:223,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:224,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:224,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:225,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:229,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:233,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:234,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:234,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 4
    argNames:
    - ctx
    - ' certificate'
    - ' private_key'
    - hostnames
    argTypes:
    - SSL_CTX*
    - std::string
    - std::string
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 239
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - PEM_read_bio_X509
    - SSL_CTX_check_private_key
    - std::unique_ptr::reset
    - SSL_CTX_use_PrivateKey
    - SSL_CTX_add_extra_chain_cert
    - ERR_get_error
    - BIO_read_filename
    - LOG
    - SSL_CTX_use_certificate
    - ERR_clear_error
    - X509_free
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - BIO_new
    - PEM_read_bio_PrivateKey
    - BIO_new_mem_buf
    - BIO_s_file
    - c_str
    - std::unique_ptr::unique_ptr
    - brpc::SSLError
    - std::unique_ptr::get
    linkageType: ''
    returnType: int
    signature: "int LoadCertificate(SSL_CTX* ctx,\n                           const
      std::string& certificate,\n                           const std::string& private_key,\n
      \                          std::vector<std::string>* hostnames)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:245,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:246,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:247,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:248,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:248,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:252,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:255,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 259
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - ERR_get_error
    - std::string::c_str
    - SSL_CTX_set_verify
    - std::string::empty
    - brpc::SSLError
    - LOG
    - SSL_CTX_load_verify_locations
    linkageType: ''
    returnType: int
    signature: "int SetSSLOptions(SSL_CTX* ctx, const std::string& ciphers,\n                         int
      protocols, const VerifyOptions& verify)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:265,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:265,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:265,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:269,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:270,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:270,1
    - Dst: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:276,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:278,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:278,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:283,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:283,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:284,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 285
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - std::unique_ptr::get
    - ERR_get_error
    - brpc::SetSSLOptions
    - brpc::ParseSSLProtocols
    - SSL_CTX_set_session_cache_mode
    - std::unique_ptr::release
    - brpc::LoadCertificate
    - brpc::SSLError
    - LOG
    - client_cert::certificate::empty
    linkageType: ''
    returnType: SSL_CTX
    signature: SSL_CTX * CreateClientSSLContext(const ChannelSSLOptions& options)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:294,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:294,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:294,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:298,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:298,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:307,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:307,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:313,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:313,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:315,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 4
    argNames:
    - ' certificate'
    - ' private_key'
    - ' options'
    - hostnames
    argTypes:
    - std::string
    - std::string
    - ServerSSLOptions
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 316
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - SSL_CTX_sess_set_cache_size
    - ERR_get_error
    - brpc::SetSSLOptions
    - std::unique_ptr::release
    - LOG
    - brpc::LoadCertificate
    - brpc::SSLError
    - std::unique_ptr::get
    linkageType: ''
    returnType: SSL_CTX
    signature: "SSL_CTX * CreateServerSSLContext(const std::string& certificate,\n
      \                               const std::string& private_key,\n                                const
      ServerSSLOptions& options,\n                                std::vector<std::string>*
      hostnames)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:320,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:325,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:325,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:325,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:329,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:329,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:329,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:330,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:335,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 4
    argNames:
    - ctx
    - id
    - fd
    - server_mode
    argTypes:
    - SSL_CTX*
    - SocketId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 341
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - ERR_get_error
    - SSL_set_connect_state
    - SSL_free
    - SSL_set_accept_state
    - brpc::SSLError
    - LOG
    - SSL_new
    - SSL_set_fd
    linkageType: ''
    returnType: SSL
    signature: SSL * CreateSSLSession(SSL_CTX* ctx, SocketId id, int fd, bool server_mode)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ssl
    - fd
    - bufsize
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 345
    functionName: brpc::AddBIOBuffer
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddBIOBuffer(SSL* ssl, int fd, int bufsize)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: recv
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:364,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 385
    functionName: brpc::DetectSSLState
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - recv
    linkageType: ''
    returnType: SSLState
    signature: SSLState DetectSSLState(int fd, int* error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: brpc::SSLThreadInit
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int SSLThreadInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 393
    functionName: brpc::SSLDHInit
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int SSLDHInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_cipher_name
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:396,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 398
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - SSL_get_cipher_name
    - SSL_get_version
    linkageType: ''
    returnType: void
    signature: void Print(std::ostream& os, SSL* ssl, const char* sep)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:40,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:42,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - strncmp
    - c_str
    - strlen
    linkageType: ''
    returnType: bool
    signature: bool IsPemString(const std::string& input)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - s
    argTypes:
    - SSLState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 60
    functionName: brpc::SSLStateToString
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToString(SSLState s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:64,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:65,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:65,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:67,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:67,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:68,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:70,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:70,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:70,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:72,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:73,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:73,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:76,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 62
    functionDepth: 2
    functionLinenumber: 62
    functionLinenumberEnd: 81
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - butil::StringSplitter::length
    - strncasecmp
    - butil::StringSplitter::field
    - data
    - brpc::size
    - butil::StringPiece::data
    - butil::StringPiece::trim_spaces
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: int
    signature: int ParseSSLProtocols(const std::string& str_protocol)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_error_string_n
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 87
    functionName: '& operator<<(std::ostream& os, const SSLError& ssl)'
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - ERR_error_string_n
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const SSLError& ssl)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:91,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:92,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:98,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:104,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:105,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:111,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 117
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - private_key::find
    - private_key::substr
    - IsPemString
    - certificate::find
    - certificate::substr
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const CertInfo& cert)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:120,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:120,1
    - Dst: X509_get_alt_subject_names
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:121,1
    - Dst: sk_X509_NAME_num
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:123,1
    - Dst: sk_X509_NAME_value
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:125,1
    - Dst: X509_NAME_oneline
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:126,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:128,1
    - Dst: sk_X509_NAME_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 133
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 5
    functionsReached:
    - STACK_OF
    - X509_NAME_oneline
    - std::vector<std::string>*::push_back
    - sk_X509_NAME_value
    - sk_X509_NAME_num
    - sk_X509_NAME_free
    - X509_get_alt_subject_names
    linkageType: ''
    returnType: void
    signature: void ExtractHostnames(X509* x, std::vector<std::string>* hostnames)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 140
    functionName: operator()(SSL* ssl) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_free
    linkageType: ''
    returnType: void
    signature: void operator()(SSL* ssl) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: operator()(BIO* io) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - BIO_free
    linkageType: ''
    returnType: void
    signature: void operator()(BIO* io) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:154,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 156
    functionName: operator()(X509* x) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - X509_free
    linkageType: ''
    returnType: void
    signature: void operator()(X509* x) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 164
    functionName: operator()(EVP_PKEY* k) const
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_free
    linkageType: ''
    returnType: void
    signature: void operator()(EVP_PKEY* k) const
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:172,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:174,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:174,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:176,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:176,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:177,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:178,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:179,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:179,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:183,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:185,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:186,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:186,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:192,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:193,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:194,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:194,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:194,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: BIO_read_filename
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:199,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:199,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:204,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:204,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:206,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:207,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:207,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:212,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:213,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:214,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:214,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:221,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:221,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:223,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:224,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:224,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:225,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:229,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:233,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:234,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:234,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 4
    argNames:
    - ctx
    - ' certificate'
    - ' private_key'
    - hostnames
    argTypes:
    - SSL_CTX*
    - std::string
    - std::string
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 239
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - PEM_read_bio_X509
    - SSL_CTX_check_private_key
    - std::unique_ptr::reset
    - SSL_CTX_use_PrivateKey
    - SSL_CTX_add_extra_chain_cert
    - ERR_get_error
    - BIO_read_filename
    - LOG
    - SSL_CTX_use_certificate
    - ERR_clear_error
    - X509_free
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - BIO_new
    - PEM_read_bio_PrivateKey
    - BIO_new_mem_buf
    - BIO_s_file
    - c_str
    - std::unique_ptr::unique_ptr
    - brpc::SSLError
    - std::unique_ptr::get
    linkageType: ''
    returnType: int
    signature: "int LoadCertificate(SSL_CTX* ctx,\n                           const
      std::string& certificate,\n                           const std::string& private_key,\n
      \                          std::vector<std::string>* hostnames)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:245,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:246,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:247,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:248,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:248,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:252,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:255,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 259
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - ERR_get_error
    - std::string::c_str
    - SSL_CTX_set_verify
    - std::string::empty
    - brpc::SSLError
    - LOG
    - SSL_CTX_load_verify_locations
    linkageType: ''
    returnType: int
    signature: "int SetSSLOptions(SSL_CTX* ctx, const std::string& ciphers,\n                         int
      protocols, const VerifyOptions& verify)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:265,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:265,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:265,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:269,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:270,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:270,1
    - Dst: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:276,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:278,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:278,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:283,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:283,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:284,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 285
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - std::unique_ptr::get
    - ERR_get_error
    - brpc::SetSSLOptions
    - brpc::ParseSSLProtocols
    - SSL_CTX_set_session_cache_mode
    - std::unique_ptr::release
    - brpc::LoadCertificate
    - brpc::SSLError
    - LOG
    - client_cert::certificate::empty
    linkageType: ''
    returnType: SSL_CTX
    signature: SSL_CTX * CreateClientSSLContext(const ChannelSSLOptions& options)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:294,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:294,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:294,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:298,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:298,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:307,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:307,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:313,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:313,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:315,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 4
    argNames:
    - ' certificate'
    - ' private_key'
    - ' options'
    - hostnames
    argTypes:
    - std::string
    - std::string
    - ServerSSLOptions
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 316
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - SSL_CTX_sess_set_cache_size
    - ERR_get_error
    - brpc::SetSSLOptions
    - std::unique_ptr::release
    - LOG
    - brpc::LoadCertificate
    - brpc::SSLError
    - std::unique_ptr::get
    linkageType: ''
    returnType: SSL_CTX
    signature: "SSL_CTX * CreateServerSSLContext(const std::string& certificate,\n
      \                               const std::string& private_key,\n                                const
      ServerSSLOptions& options,\n                                std::vector<std::string>*
      hostnames)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:320,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:325,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:325,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:325,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:329,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:329,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:329,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:330,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:335,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 4
    argNames:
    - ctx
    - id
    - fd
    - server_mode
    argTypes:
    - SSL_CTX*
    - SocketId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 341
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - ERR_get_error
    - SSL_set_connect_state
    - SSL_free
    - SSL_set_accept_state
    - brpc::SSLError
    - LOG
    - SSL_new
    - SSL_set_fd
    linkageType: ''
    returnType: SSL
    signature: SSL * CreateSSLSession(SSL_CTX* ctx, SocketId id, int fd, bool server_mode)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ssl
    - fd
    - bufsize
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 345
    functionName: brpc::AddBIOBuffer
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddBIOBuffer(SSL* ssl, int fd, int bufsize)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: recv
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:364,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 385
    functionName: brpc::DetectSSLState
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - recv
    linkageType: ''
    returnType: SSLState
    signature: SSLState DetectSSLState(int fd, int* error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: brpc::SSLThreadInit
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int SSLThreadInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 393
    functionName: brpc::SSLDHInit
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int SSLDHInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_cipher_name
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:396,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 398
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - SSL_get_cipher_name
    - SSL_get_version
    linkageType: ''
    returnType: void
    signature: void Print(std::ostream& os, SSL* ssl, const char* sep)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::HealthCheckChannel::HealthCheckChannel
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~HealthCheckChannel()
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HealthCheckChannel()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/details/health_check.cpp:43,1
    - Dst: InitChannelOptions
      Src: /src/brpc/src/brpc/details/health_check.cpp:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - id
    - options
    argTypes:
    - SocketId
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 42
    functionDepth: 2
    functionLinenumber: 42
    functionLinenumberEnd: 49
    functionName: brpc::HealthCheckChannel::Init
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - InitChannelOptions
    - brpc::GlobalInitializeOrDie
    linkageType: ''
    returnType: int
    signature: int HealthCheckChannel::Init(SocketId id, const ChannelOptions* options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/details/health_check.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:77,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/details/health_check.cpp:77,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:77,1
    - Dst: OnAppHealthCheckDone::OnAppHealthCheckDone
      Src: /src/brpc/src/brpc/details/health_check.cpp:78,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/src/brpc/details/health_check.cpp:82,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/health_check.cpp:86,1
    - Dst: OnAppHealthCheckDone*::channel::Init
      Src: /src/brpc/src/brpc/details/health_check.cpp:87,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:88,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_sub
      Src: /src/brpc/src/brpc/details/health_check.cpp:89,1
    - Dst: brpc::HealthCheckManager::AppCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 2
    argNames:
    - id
    - check_interval_s
    argTypes:
    - SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 69
    functionDepth: 2
    functionLinenumber: 69
    functionLinenumberEnd: 95
    functionName: brpc::HealthCheckManager::StartCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - OnAppHealthCheckDone*::channel::Init
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - brpc::HealthCheckManager::AppCheck
    - std::min
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - brpc::ChannelOptions::ChannelOptions
    - SocketUniquePtr::health_check_path
    - SocketUniquePtr::remote_side
    - OnAppHealthCheckDone::OnAppHealthCheckDone
    - LOG
    linkageType: ''
    returnType: void
    signature: void HealthCheckManager::StartCheck(SocketId id, int64_t check_interval_s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<OnAppHealthCheckDone*>
      Src: /src/brpc/src/brpc/details/health_check.cpp:98,1
    - Dst: OnAppHealthCheckDone*::cntl::Reset
      Src: /src/brpc/src/brpc/details/health_check.cpp:99,1
    - Dst: OnAppHealthCheckDone*::cntl::http_request
      Src: /src/brpc/src/brpc/details/health_check.cpp:100,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/details/health_check.cpp:101,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/details/health_check.cpp:102,1
    - Dst: OnAppHealthCheckDone*::channel::CallMethod
      Src: /src/brpc/src/brpc/details/health_check.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 105
    functionName: brpc::HealthCheckManager::AppCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_ms
    - static_cast<OnAppHealthCheckDone*>
    - OnAppHealthCheckDone*::channel::CallMethod
    - OnAppHealthCheckDone*::cntl::Reset
    - OnAppHealthCheckDone*::cntl::http_request
    - ControllerPrivateAccessor
    linkageType: ''
    returnType: void
    signature: void * HealthCheckManager::AppCheck(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/details/health_check.cpp:110,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/details/health_check.cpp:116,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/details/health_check.cpp:116,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/details/health_check.cpp:117,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/details/health_check.cpp:117,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/details/health_check.cpp:118,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_sub
      Src: /src/brpc/src/brpc/details/health_check.cpp:121,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/details/health_check.cpp:126,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/details/health_check.cpp:129,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/details/health_check.cpp:135,1
    - Dst: brpc::HealthCheckManager::AppCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:137,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/health_check.cpp:137,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 138
    functionName: brpc::OnAppHealthCheckDone::Run
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - bthread_usleep
    - brpc::HealthCheckManager::AppCheck
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - std::unique_ptr::release
    - SocketUniquePtr::Failed
    - SocketUniquePtr::remote_side
    - Failed
    - LOG_IF
    - ErrorText
    linkageType: ''
    returnType: void
    signature: void OnAppHealthCheckDone::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: brpc::HealthCheckTask::HealthCheckTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckTask::HealthCheckTask(SocketId id)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/details/health_check.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/health_check.cpp:158,1
    - Dst: SocketUniquePtr::WaitAndReset
      Src: /src/brpc/src/brpc/details/health_check.cpp:184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:185,1
    - Dst: SocketUniquePtr::AfterHCCompleted
      Src: /src/brpc/src/brpc/details/health_check.cpp:186,1
    - Dst: SocketUniquePtr::_user::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:198,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/details/health_check.cpp:198,1
    - Dst: SocketUniquePtr::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:200,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:203,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_add
      Src: /src/brpc/src/brpc/details/health_check.cpp:204,1
    - Dst: SocketUniquePtr::Revive
      Src: /src/brpc/src/brpc/details/health_check.cpp:208,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:210,1
    - Dst: brpc::HealthCheckManager::StartCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:211,1
    - Dst: SocketUniquePtr::AfterHCCompleted
      Src: /src/brpc/src/brpc/details/health_check.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:216,1
    - Dst: SocketUniquePtr::AfterHCCompleted
      Src: /src/brpc/src/brpc/details/health_check.cpp:217,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/health_check.cpp:222,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:225,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 1
    argNames:
    - next_abstime
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 155
    functionDepth: 3
    functionLinenumber: 155
    functionLinenumberEnd: 227
    functionName: brpc::HealthCheckTask::OnTriggeringTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::WaitAndReset
    - SocketUniquePtr::_ninflight_app_health_check::fetch_add
    - SocketUniquePtr::AfterHCCompleted
    - SocketUniquePtr::get
    - SocketUniquePtr::CheckHealth
    - brpc::HealthCheckManager::StartCheck
    - SocketUniquePtr::Revive
    - butil::seconds_from_now
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK
    - SocketUniquePtr::health_check_path
    - berror
    - SocketUniquePtr::_user::CheckHealth
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool HealthCheckTask::OnTriggeringTask(timespec* next_abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: brpc::HealthCheckTask::OnDestroyingTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckTask::OnDestroyingTask()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PeriodicTaskManager::StartTaskAt
      Src: /src/brpc/src/brpc/details/health_check.cpp:234,1
    - Dst: HealthCheckTask::HealthCheckTask
      Src: /src/brpc/src/brpc/details/health_check.cpp:234,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - delay_ms
    argTypes:
    - SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 233
    functionDepth: 4
    functionLinenumber: 233
    functionLinenumberEnd: 236
    functionName: brpc::StartHealthCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - HealthCheckTask::HealthCheckTask
    - butil::milliseconds_from_now
    - brpc::PeriodicTaskManager::StartTaskAt
    linkageType: ''
    returnType: void
    signature: void StartHealthCheck(SocketId id, int64_t delay_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: brpc::HealthCheckChannel::HealthCheckChannel
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckChannel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~HealthCheckChannel()
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HealthCheckChannel()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/details/health_check.cpp:43,1
    - Dst: InitChannelOptions
      Src: /src/brpc/src/brpc/details/health_check.cpp:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - id
    - options
    argTypes:
    - SocketId
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 42
    functionDepth: 2
    functionLinenumber: 42
    functionLinenumberEnd: 49
    functionName: brpc::HealthCheckChannel::Init
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - InitChannelOptions
    - brpc::GlobalInitializeOrDie
    linkageType: ''
    returnType: int
    signature: int HealthCheckChannel::Init(SocketId id, const ChannelOptions* options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/details/health_check.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:77,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/details/health_check.cpp:77,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:77,1
    - Dst: OnAppHealthCheckDone::OnAppHealthCheckDone
      Src: /src/brpc/src/brpc/details/health_check.cpp:78,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/src/brpc/details/health_check.cpp:82,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/health_check.cpp:86,1
    - Dst: OnAppHealthCheckDone*::channel::Init
      Src: /src/brpc/src/brpc/details/health_check.cpp:87,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:88,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_sub
      Src: /src/brpc/src/brpc/details/health_check.cpp:89,1
    - Dst: brpc::HealthCheckManager::AppCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 2
    argNames:
    - id
    - check_interval_s
    argTypes:
    - SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 69
    functionDepth: 2
    functionLinenumber: 69
    functionLinenumberEnd: 95
    functionName: brpc::HealthCheckManager::StartCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 1
    functionsReached:
    - OnAppHealthCheckDone*::channel::Init
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - brpc::HealthCheckManager::AppCheck
    - std::min
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - brpc::ChannelOptions::ChannelOptions
    - SocketUniquePtr::health_check_path
    - SocketUniquePtr::remote_side
    - OnAppHealthCheckDone::OnAppHealthCheckDone
    - LOG
    linkageType: ''
    returnType: void
    signature: void HealthCheckManager::StartCheck(SocketId id, int64_t check_interval_s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<OnAppHealthCheckDone*>
      Src: /src/brpc/src/brpc/details/health_check.cpp:98,1
    - Dst: OnAppHealthCheckDone*::cntl::Reset
      Src: /src/brpc/src/brpc/details/health_check.cpp:99,1
    - Dst: OnAppHealthCheckDone*::cntl::http_request
      Src: /src/brpc/src/brpc/details/health_check.cpp:100,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/details/health_check.cpp:101,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/details/health_check.cpp:102,1
    - Dst: OnAppHealthCheckDone*::channel::CallMethod
      Src: /src/brpc/src/brpc/details/health_check.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 105
    functionName: brpc::HealthCheckManager::AppCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 3
    functionsReached:
    - butil::gettimeofday_ms
    - static_cast<OnAppHealthCheckDone*>
    - OnAppHealthCheckDone*::channel::CallMethod
    - OnAppHealthCheckDone*::cntl::Reset
    - OnAppHealthCheckDone*::cntl::http_request
    - ControllerPrivateAccessor
    linkageType: ''
    returnType: void
    signature: void * HealthCheckManager::AppCheck(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/details/health_check.cpp:110,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/details/health_check.cpp:116,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/details/health_check.cpp:116,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/details/health_check.cpp:117,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/details/health_check.cpp:117,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/details/health_check.cpp:118,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_sub
      Src: /src/brpc/src/brpc/details/health_check.cpp:121,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/details/health_check.cpp:126,1
    - Dst: butil::gettimeofday_ms
      Src: /src/brpc/src/brpc/details/health_check.cpp:129,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/details/health_check.cpp:135,1
    - Dst: brpc::HealthCheckManager::AppCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:137,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/health_check.cpp:137,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 138
    functionName: brpc::OnAppHealthCheckDone::Run
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_ms
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - bthread_usleep
    - brpc::HealthCheckManager::AppCheck
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - std::unique_ptr::release
    - SocketUniquePtr::Failed
    - SocketUniquePtr::remote_side
    - Failed
    - LOG_IF
    - ErrorText
    linkageType: ''
    returnType: void
    signature: void OnAppHealthCheckDone::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: brpc::HealthCheckTask::HealthCheckTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckTask::HealthCheckTask(SocketId id)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/details/health_check.cpp:157,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/health_check.cpp:158,1
    - Dst: SocketUniquePtr::WaitAndReset
      Src: /src/brpc/src/brpc/details/health_check.cpp:184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:185,1
    - Dst: SocketUniquePtr::AfterHCCompleted
      Src: /src/brpc/src/brpc/details/health_check.cpp:186,1
    - Dst: SocketUniquePtr::_user::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:198,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/details/health_check.cpp:198,1
    - Dst: SocketUniquePtr::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:200,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:203,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_add
      Src: /src/brpc/src/brpc/details/health_check.cpp:204,1
    - Dst: SocketUniquePtr::Revive
      Src: /src/brpc/src/brpc/details/health_check.cpp:208,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:210,1
    - Dst: brpc::HealthCheckManager::StartCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:211,1
    - Dst: SocketUniquePtr::AfterHCCompleted
      Src: /src/brpc/src/brpc/details/health_check.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:216,1
    - Dst: SocketUniquePtr::AfterHCCompleted
      Src: /src/brpc/src/brpc/details/health_check.cpp:217,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/health_check.cpp:222,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:225,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 1
    argNames:
    - next_abstime
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 155
    functionDepth: 3
    functionLinenumber: 155
    functionLinenumberEnd: 227
    functionName: brpc::HealthCheckTask::OnTriggeringTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::WaitAndReset
    - SocketUniquePtr::_ninflight_app_health_check::fetch_add
    - SocketUniquePtr::AfterHCCompleted
    - SocketUniquePtr::get
    - SocketUniquePtr::CheckHealth
    - brpc::HealthCheckManager::StartCheck
    - SocketUniquePtr::Revive
    - butil::seconds_from_now
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - CHECK
    - SocketUniquePtr::health_check_path
    - berror
    - SocketUniquePtr::_user::CheckHealth
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool HealthCheckTask::OnTriggeringTask(timespec* next_abstime)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: brpc::HealthCheckTask::OnDestroyingTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HealthCheckTask::OnDestroyingTask()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PeriodicTaskManager::StartTaskAt
      Src: /src/brpc/src/brpc/details/health_check.cpp:234,1
    - Dst: HealthCheckTask::HealthCheckTask
      Src: /src/brpc/src/brpc/details/health_check.cpp:234,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - delay_ms
    argTypes:
    - SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 233
    functionDepth: 4
    functionLinenumber: 233
    functionLinenumberEnd: 236
    functionName: brpc::StartHealthCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - HealthCheckTask::HealthCheckTask
    - butil::milliseconds_from_now
    - brpc::PeriodicTaskManager::StartTaskAt
    linkageType: ''
    returnType: void
    signature: void StartHealthCheck(SocketId id, int64_t delay_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dlsym
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: InitGetInstanceFn
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.cpp
    functionUses: 0
    functionsReached:
    - dlsym
    linkageType: ''
    returnType: void
    signature: void InitGetInstanceFn()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dlsym
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: InitGetInstanceFn
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.cpp
    functionUses: 0
    functionsReached:
    - dlsym
    linkageType: ''
    returnType: void
    signature: void InitGetInstanceFn()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: IsHeapProfilerEnabled
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.cpp
    functionUses: 2
    functionsReached:
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: bool
    signature: bool IsHeapProfilerEnabled()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 2
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: IsTCMallocEnabled
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.cpp
    functionUses: 0
    functionsReached:
    - IsHeapProfilerEnabled
    linkageType: ''
    returnType: bool
    signature: bool IsTCMallocEnabled()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:58,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 65
    functionName: check_TCMALLOC_SAMPLE_PARAMETER
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.cpp
    functionUses: 0
    functionsReached:
    - getenv
    - strtol
    linkageType: ''
    returnType: bool
    signature: bool check_TCMALLOC_SAMPLE_PARAMETER()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: has_TCMALLOC_SAMPLE_PARAMETER
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.cpp
    functionUses: 2
    functionsReached:
    - check_TCMALLOC_SAMPLE_PARAMETER
    linkageType: ''
    returnType: bool
    signature: bool has_TCMALLOC_SAMPLE_PARAMETER()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: brpc::HttpMessage::on_message_begin
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_message_begin(http_parser *parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HttpMessage*::_url::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: brpc::HttpMessage::on_url
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMessage*::_url::append
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_url(http_parser *parser, \n                        const
      char *at, const size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: brpc::HttpMessage::on_status
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_status(http_parser *parser, const char *, const
      size_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HttpMessage*::_cur_header::clear
      Src: /src/brpc/src/brpc/details/http_message.cpp:84,1
    - Dst: HttpMessage*::_cur_header::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 88
    functionName: brpc::HttpMessage::on_header_field
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMessage*::_cur_header::clear
    - HttpMessage*::_cur_header::append
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_header_field(http_parser *parser,\n                                 const
      char *at, const size_t length)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: HttpMessage*::_cur_header::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:98,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:101,1
    - Dst: CanFoldedInLine
      Src: /src/brpc/src/brpc/details/http_message.cpp:102,1
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:104,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:107,1
    - Dst: HttpMessage*::_cur_value::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:109,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:110,1
    - Dst: HeaderValueDelimiter
      Src: /src/brpc/src/brpc/details/http_message.cpp:111,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:115,1
    - Dst: HttpMessage*::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/details/http_message.cpp:118,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:120,1
    - Dst: HttpMessage*::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:121,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:123,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:124,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:129,1
    - Dst: HttpReasonPhrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:132,1
    - Dst: butil::IOBufBuilder*::write
      Src: /src/brpc/src/brpc/details/http_message.cpp:138,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 36
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 141
    functionName: brpc::HttpMessage::on_header_value
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - AddHeader
    - HttpMethod2Str
    - HttpMessage*::_cur_value::append
    - HttpMessage*::_vmsgbuilder::get
    - butil::IOBufBuilder*::write
    - HttpMessage*::_cur_header::empty
    - GetOrAddHeader
    - CanFoldedInLine
    - HttpMessage*::_cur_value::empty
    - HttpMessage*::header
    - HttpMessage*::_vmsgbuilder::reset
    - HeaderValueDelimiter
    - butil::my_ip
    - HttpReasonPhrase
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_header_value(http_parser *parser,\n                                 const
      char *at, const size_t length)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:149,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:152,1
    - Dst: set_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:153,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:158,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:163,1
    - Dst: static_cast<HttpMethod>
      Src: /src/brpc/src/brpc/details/http_message.cpp:163,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:165,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:166,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:176,1
    - Dst: _host::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:177,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:178,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/details/http_message.cpp:180,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:187,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/details/http_message.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:190,1
    - Dst: RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:210,1
    - Dst: HttpMessage*::request_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:219,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 34
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 223
    functionName: brpc::HttpMessage::on_headers_complete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - SetHostAndPort
    - set_version
    - HttpMessage*::request_method
    - uri
    - _host::empty
    - RemoveHeader
    - HttpMessage*::header
    - static_cast<HttpMethod>
    - host
    - GetHeader
    - LOG
    - before_http_1_1
    - set_method
    - set_status_code
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_headers_complete(http_parser *parser)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:226,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:227,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:230,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:232,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:233,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:234,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:237,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:239,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:240,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' mu'
    argTypes:
    - std::unique_lock<butil::Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 245
    functionName: brpc::HttpMessage::UnlockAndFlushToBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::backing_block_num
    - ProgressiveReader*::OnEndOfMessage
    - butil::IOBuf::backing_block
    - unlock
    - ProgressiveReader*::OnReadOnePart
    - butil::StringPiece::data
    - empty
    - movable
    - lock
    - butil::StringPiece::size
    - butil::Status::ok
    linkageType: ''
    returnType: int
    signature: int HttpMessage::UnlockAndFlushToBodyReader(std::unique_lock<butil::Mutex>&
      mu)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpMessage*>
      Src: /src/brpc/src/brpc/details/http_message.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::HttpMessage::on_body_cb
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - static_cast<HttpMessage*>
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_body_cb(http_parser *parser,\n                            const
      char *at, const size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpMessage*>
      Src: /src/brpc/src/brpc/details/http_message.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: brpc::HttpMessage::on_message_complete_cb
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - static_cast<HttpMessage*>
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_message_complete_cb(http_parser *parser)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: header
      Src: /src/brpc/src/brpc/details/http_message.cpp:266,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:267,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:267,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:268,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/http_message.cpp:271,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/details/http_message.cpp:273,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/details/http_message.cpp:274,1
    - Dst: write
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:286,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:289,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/http_message.cpp:303,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:304,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:307,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/details/http_message.cpp:308,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:309,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:314,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:317,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:318,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:321,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:323,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:324,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 47
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 256
    functionDepth: 2
    functionLinenumber: 256
    functionLinenumberEnd: 326
    functionName: brpc::HttpMessage::OnBody
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - append
    - bthread_usleep
    - buf
    - header
    - ProgressiveReader*::OnEndOfMessage
    - reset
    - std::string::data
    - size
    - LOG
    - append_to
    - ProgressiveReader*::OnReadOnePart
    - butil::ToPrintableString
    - std::unique_lock::unlock
    - butil::Status::ok
    - std::min
    - std::unique_lock::lock
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - butil::BaseIteratorRangeToNumberTraits::max
    - write
    - std::string::size
    linkageType: ''
    returnType: int
    signature: int HttpMessage::OnBody(const char *at, const size_t length)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:334,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:334,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:335,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/http_message.cpp:337,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:351,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:354,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:357,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:358,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:358,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 328
    functionDepth: 2
    functionLinenumber: 328
    functionLinenumberEnd: 361
    functionName: brpc::HttpMessage::OnMessageComplete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - reset
    - std::unique_lock::lock
    - buf
    - clear
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - std::unique_lock::unlock
    - LOG
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: int
    signature: int HttpMessage::OnMessageComplete()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 366
    functionDepth: 2
    functionLinenumber: 366
    functionLinenumberEnd: 369
    functionName: brpc::FailAllRead::OnReadOnePart
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 370
    functionName: brpc::FailAllRead::OnEndOfMessage
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FailAllRead::FailAllRead
      Src: /src/brpc/src/brpc/details/http_message.cpp:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 375
    functionName: brpc::CreateFailAllRead
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - FailAllRead::FailAllRead
    linkageType: ''
    returnType: void
    signature: void CreateFailAllRead()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:379,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:380,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:388,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:389,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:390,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:392,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:397,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:398,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:398,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:408,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:409,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:410,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:411,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:412,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:412,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:412,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:413,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:414,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/http_message.cpp:418,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 425
    functionName: brpc::HttpMessage::SetBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - butil::IOBuf::backing_block_num
    - pthread_once
    - butil::IOBuf::backing_block
    - ProgressiveReader*::OnReadOnePart
    - butil::StringPiece::data
    - movable
    - empty
    - std::unique_lock::unlock
    - butil::StringPiece::size
    - butil::Status::ok
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: void HttpMessage::SetBodyReader(ProgressiveReader* r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: http_parser_init
      Src: /src/brpc/src/brpc/details/http_message.cpp:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - read_body_progressively
    - request_method
    argTypes:
    - bool
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 445
    functionName: brpc::HttpMessage::HttpMessage
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 22
    functionsReached:
    - http_parser_init
    linkageType: ''
    returnType: void
    signature: "void HttpMessage::HttpMessage(bool read_body_progressively,\n                         HttpMethod
      request_method)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:455,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 447
    functionDepth: 2
    functionLinenumber: 447
    functionLinenumberEnd: 458
    functionName: HttpMessage::~HttpMessage()
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: void HttpMessage::~HttpMessage()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:461,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:465,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:470,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/http_message.cpp:474,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 479
    functionName: brpc::HttpMessage::ParseFromArray
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 13
    functionsReached:
    - http_parser_execute
    - brpc::HttpMessage::Completed
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HttpMessage::ParseFromArray(const char *data, const size_t
      length)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:482,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:483,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:486,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:486,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:496,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:497,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:498,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:502,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:503,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:504,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:504,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/details/http_message.cpp:510,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:513,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 481
    functionDepth: 1
    functionLinenumber: 481
    functionLinenumberEnd: 519
    functionName: brpc::HttpMessage::ParseFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 18
    functionsReached:
    - butil::IOBuf::backing_block_num
    - brpc::HttpMessage::Completed
    - butil::IOBuf::backing_block
    - http_parser_execute
    - butil::IOBuf::size
    - butil::ToPrintable::ToPrintable
    - butil::StringPiece::data
    - butil::StringPiece::empty
    - butil::IOBuf::empty
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HttpMessage::ParseFromIOBuf(const butil::IOBuf &buf)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - ' os'
    - flags
    argTypes:
    - std::ostream
    - unsigned int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 543
    functionName: brpc::DescribeHttpParserFlags
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DescribeHttpParserFlags(std::ostream& os, unsigned int flags)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: http_parser_type_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:546,1
    - Dst: DescribeHttpParserFlags
      Src: /src/brpc/src/brpc/details/http_message.cpp:548,1
    - Dst: http_parser_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:549,1
    - Dst: http_parser_header_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:550,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/details/http_message.cpp:552,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:563,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' parser'
    argTypes:
    - std::ostream
    - http_parser
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 568
    functionName: '& operator<<(std::ostream& os, const http_parser& parser)'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMethod2Str
    - http_parser_state_name
    - http_parser_type_name
    - DescribeHttpParserFlags
    - http_errno_description
    - http_parser_header_state_name
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const http_parser& parser)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:594,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:595,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:595,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:596,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/src/brpc/details/http_message.cpp:597,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:598,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:599,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:601,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:602,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:603,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:604,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:609,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:613,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:615,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:626,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:628,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:629,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:630,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:631,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:638,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:639,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:642,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:643,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:646,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:650,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:653,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:654,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:654,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/details/http_message.cpp:660,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:664,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:665,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:666,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 48
    argCount: 4
    argNames:
    - request
    - h
    - ' remote_side'
    - content
    argTypes:
    - butil::IOBuf*
    - HttpHeader*
    - butil::EndPoint
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 668
    functionName: brpc::MakeRawHttpRequest
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - butil::IOBuf*::append
    - HttpHeader*::method
    - brpc::empty
    - PrintWithoutHost
    - HttpHeader*::major_version
    - brpc::HttpMethod2Str
    - HttpHeader*::GetHeader
    - HttpHeader*::uri
    - butil::Base64Encode
    - port
    - HttpHeader*::content_type
    - butil::IOBuf*::length
    - HttpHeader*::HeaderEnd
    - HttpHeader*::RemoveHeader
    - HttpHeader*::HeaderBegin
    - HttpHeader*::minor_version
    - host
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void MakeRawHttpRequest(butil::IOBuf* request,\n                        HttpHeader*
      h,\n                        const butil::EndPoint& remote_side,\n                        const
      butil::IOBuf* content)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:681,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:682,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:683,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:683,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:684,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:685,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:686,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:687,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:693,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:697,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:699,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:704,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:707,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:712,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:717,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:722,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:727,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:728,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:731,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:732,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:736,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:743,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:743,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 35
    argCount: 3
    argNames:
    - response
    - h
    - content
    argTypes:
    - butil::IOBuf*
    - HttpHeader*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 678
    functionDepth: 1
    functionLinenumber: 678
    functionLinenumberEnd: 745
    functionName: brpc::MakeRawHttpResponse
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader*::GetHeader
    - butil::IOBufBuilder::move_to
    - HttpHeader*::minor_version
    - HttpHeader*::content_type
    - HttpHeader*::reason_phrase
    - butil::IOBuf*::length
    - butil::IOBuf*::append
    - butil::IOBuf::Movable
    - HttpHeader*::method
    - HttpHeader*::HeaderEnd
    - HttpHeader*::HeaderBegin
    - HttpHeader*::RemoveHeader
    - HttpHeader*::status_code
    - butil::IOBufBuilder::IOBufBuilder
    - HttpHeader*::major_version
    linkageType: ''
    returnType: void
    signature: "void MakeRawHttpResponse(butil::IOBuf* response,\n                         HttpHeader*
      h,\n                         butil::IOBuf* content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: brpc::HttpMessage::on_message_begin
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_message_begin(http_parser *parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HttpMessage*::_url::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: brpc::HttpMessage::on_url
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMessage*::_url::append
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_url(http_parser *parser, \n                        const
      char *at, const size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 67
    functionName: brpc::HttpMessage::on_status
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_status(http_parser *parser, const char *, const
      size_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HttpMessage*::_cur_header::clear
      Src: /src/brpc/src/brpc/details/http_message.cpp:84,1
    - Dst: HttpMessage*::_cur_header::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 88
    functionName: brpc::HttpMessage::on_header_field
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMessage*::_cur_header::clear
    - HttpMessage*::_cur_header::append
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_header_field(http_parser *parser,\n                                 const
      char *at, const size_t length)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: HttpMessage*::_cur_header::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:98,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:101,1
    - Dst: CanFoldedInLine
      Src: /src/brpc/src/brpc/details/http_message.cpp:102,1
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:104,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:107,1
    - Dst: HttpMessage*::_cur_value::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:109,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:110,1
    - Dst: HeaderValueDelimiter
      Src: /src/brpc/src/brpc/details/http_message.cpp:111,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:115,1
    - Dst: HttpMessage*::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/details/http_message.cpp:118,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:120,1
    - Dst: HttpMessage*::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:121,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:123,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:124,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:129,1
    - Dst: HttpReasonPhrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:132,1
    - Dst: butil::IOBufBuilder*::write
      Src: /src/brpc/src/brpc/details/http_message.cpp:138,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 36
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 141
    functionName: brpc::HttpMessage::on_header_value
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - AddHeader
    - HttpMethod2Str
    - HttpMessage*::_cur_value::append
    - HttpMessage*::_vmsgbuilder::get
    - butil::IOBufBuilder*::write
    - HttpMessage*::_cur_header::empty
    - GetOrAddHeader
    - CanFoldedInLine
    - HttpMessage*::_cur_value::empty
    - HttpMessage*::header
    - HttpMessage*::_vmsgbuilder::reset
    - HeaderValueDelimiter
    - butil::my_ip
    - HttpReasonPhrase
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_header_value(http_parser *parser,\n                                 const
      char *at, const size_t length)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:149,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:152,1
    - Dst: set_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:153,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:158,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:163,1
    - Dst: static_cast<HttpMethod>
      Src: /src/brpc/src/brpc/details/http_message.cpp:163,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:165,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:166,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:176,1
    - Dst: _host::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:177,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:178,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/details/http_message.cpp:180,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:187,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/details/http_message.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:190,1
    - Dst: RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:210,1
    - Dst: HttpMessage*::request_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:219,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 34
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 223
    functionName: brpc::HttpMessage::on_headers_complete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - SetHostAndPort
    - set_version
    - HttpMessage*::request_method
    - uri
    - _host::empty
    - RemoveHeader
    - HttpMessage*::header
    - static_cast<HttpMethod>
    - host
    - GetHeader
    - LOG
    - before_http_1_1
    - set_method
    - set_status_code
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_headers_complete(http_parser *parser)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:226,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:227,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:230,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:232,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:233,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:234,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:237,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:239,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:240,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' mu'
    argTypes:
    - std::unique_lock<butil::Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 245
    functionName: brpc::HttpMessage::UnlockAndFlushToBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::backing_block_num
    - ProgressiveReader*::OnEndOfMessage
    - butil::IOBuf::backing_block
    - unlock
    - ProgressiveReader*::OnReadOnePart
    - butil::StringPiece::data
    - empty
    - movable
    - lock
    - butil::StringPiece::size
    - butil::Status::ok
    linkageType: ''
    returnType: int
    signature: int HttpMessage::UnlockAndFlushToBodyReader(std::unique_lock<butil::Mutex>&
      mu)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpMessage*>
      Src: /src/brpc/src/brpc/details/http_message.cpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 250
    functionName: brpc::HttpMessage::on_body_cb
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - static_cast<HttpMessage*>
    linkageType: ''
    returnType: int
    signature: "int HttpMessage::on_body_cb(http_parser *parser,\n                            const
      char *at, const size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpMessage*>
      Src: /src/brpc/src/brpc/details/http_message.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 254
    functionName: brpc::HttpMessage::on_message_complete_cb
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - static_cast<HttpMessage*>
    linkageType: ''
    returnType: int
    signature: int HttpMessage::on_message_complete_cb(http_parser *parser)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: header
      Src: /src/brpc/src/brpc/details/http_message.cpp:266,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:267,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:267,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:268,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/http_message.cpp:271,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/details/http_message.cpp:273,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/details/http_message.cpp:274,1
    - Dst: write
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:286,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:289,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/http_message.cpp:303,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:304,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:307,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/details/http_message.cpp:308,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:309,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:314,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:317,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:318,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:321,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:323,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:324,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 47
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 256
    functionDepth: 2
    functionLinenumber: 256
    functionLinenumberEnd: 326
    functionName: brpc::HttpMessage::OnBody
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - append
    - bthread_usleep
    - buf
    - header
    - ProgressiveReader*::OnEndOfMessage
    - reset
    - std::string::data
    - size
    - LOG
    - append_to
    - ProgressiveReader*::OnReadOnePart
    - butil::ToPrintableString
    - std::unique_lock::unlock
    - butil::Status::ok
    - std::min
    - std::unique_lock::lock
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - butil::BaseIteratorRangeToNumberTraits::max
    - write
    - std::string::size
    linkageType: ''
    returnType: int
    signature: int HttpMessage::OnBody(const char *at, const size_t length)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:334,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:334,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:335,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/http_message.cpp:337,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:351,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:354,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:357,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:358,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:358,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 328
    functionDepth: 2
    functionLinenumber: 328
    functionLinenumberEnd: 361
    functionName: brpc::HttpMessage::OnMessageComplete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - reset
    - std::unique_lock::lock
    - buf
    - clear
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - std::unique_lock::unlock
    - LOG
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: int
    signature: int HttpMessage::OnMessageComplete()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 366
    functionDepth: 2
    functionLinenumber: 366
    functionLinenumberEnd: 369
    functionName: brpc::FailAllRead::OnReadOnePart
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status OnReadOnePart(const void* /*data*/, size_t /*length*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 370
    functionName: brpc::FailAllRead::OnEndOfMessage
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnEndOfMessage(const butil::Status&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FailAllRead::FailAllRead
      Src: /src/brpc/src/brpc/details/http_message.cpp:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 375
    functionName: brpc::CreateFailAllRead
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - FailAllRead::FailAllRead
    linkageType: ''
    returnType: void
    signature: void CreateFailAllRead()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:379,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:380,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:388,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:389,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:390,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:392,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:397,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:398,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:398,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:408,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:409,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:410,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:411,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:412,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:412,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:412,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:413,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:414,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/http_message.cpp:418,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 425
    functionName: brpc::HttpMessage::SetBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - butil::IOBuf::backing_block_num
    - pthread_once
    - butil::IOBuf::backing_block
    - ProgressiveReader*::OnReadOnePart
    - butil::StringPiece::data
    - movable
    - empty
    - std::unique_lock::unlock
    - butil::StringPiece::size
    - butil::Status::ok
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: void HttpMessage::SetBodyReader(ProgressiveReader* r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: http_parser_init
      Src: /src/brpc/src/brpc/details/http_message.cpp:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - read_body_progressively
    - request_method
    argTypes:
    - bool
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 445
    functionName: brpc::HttpMessage::HttpMessage
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 22
    functionsReached:
    - http_parser_init
    linkageType: ''
    returnType: void
    signature: "void HttpMessage::HttpMessage(bool read_body_progressively,\n                         HttpMethod
      request_method)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:455,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 447
    functionDepth: 2
    functionLinenumber: 447
    functionLinenumberEnd: 458
    functionName: HttpMessage::~HttpMessage()
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnEndOfMessage
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: void
    signature: void HttpMessage::~HttpMessage()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:461,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:465,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:470,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/http_message.cpp:474,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 479
    functionName: brpc::HttpMessage::ParseFromArray
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 13
    functionsReached:
    - http_parser_execute
    - brpc::HttpMessage::Completed
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HttpMessage::ParseFromArray(const char *data, const size_t
      length)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:482,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:483,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:486,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:486,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:496,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:497,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:498,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:502,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:503,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:504,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:504,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/details/http_message.cpp:510,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:513,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 481
    functionDepth: 1
    functionLinenumber: 481
    functionLinenumberEnd: 519
    functionName: brpc::HttpMessage::ParseFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 18
    functionsReached:
    - butil::IOBuf::backing_block_num
    - brpc::HttpMessage::Completed
    - butil::IOBuf::backing_block
    - http_parser_execute
    - butil::IOBuf::size
    - butil::ToPrintable::ToPrintable
    - butil::StringPiece::data
    - butil::StringPiece::empty
    - butil::IOBuf::empty
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HttpMessage::ParseFromIOBuf(const butil::IOBuf &buf)
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - ' os'
    - flags
    argTypes:
    - std::ostream
    - unsigned int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 543
    functionName: brpc::DescribeHttpParserFlags
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DescribeHttpParserFlags(std::ostream& os, unsigned int flags)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: http_parser_type_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:546,1
    - Dst: DescribeHttpParserFlags
      Src: /src/brpc/src/brpc/details/http_message.cpp:548,1
    - Dst: http_parser_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:549,1
    - Dst: http_parser_header_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:550,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/details/http_message.cpp:552,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:563,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' parser'
    argTypes:
    - std::ostream
    - http_parser
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 568
    functionName: '& operator<<(std::ostream& os, const http_parser& parser)'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMethod2Str
    - http_parser_state_name
    - http_parser_type_name
    - DescribeHttpParserFlags
    - http_errno_description
    - http_parser_header_state_name
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const http_parser& parser)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:594,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:595,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:595,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:596,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/src/brpc/details/http_message.cpp:597,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:598,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:599,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:601,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:602,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:603,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:604,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:609,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:613,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:615,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:626,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:628,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:629,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:630,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:631,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:638,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:639,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:642,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:643,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:646,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:650,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:653,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:654,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:654,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/details/http_message.cpp:660,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:664,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:665,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:666,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 48
    argCount: 4
    argNames:
    - request
    - h
    - ' remote_side'
    - content
    argTypes:
    - butil::IOBuf*
    - HttpHeader*
    - butil::EndPoint
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 668
    functionName: brpc::MakeRawHttpRequest
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - butil::IOBuf*::append
    - HttpHeader*::method
    - brpc::empty
    - PrintWithoutHost
    - HttpHeader*::major_version
    - brpc::HttpMethod2Str
    - HttpHeader*::GetHeader
    - HttpHeader*::uri
    - butil::Base64Encode
    - port
    - HttpHeader*::content_type
    - butil::IOBuf*::length
    - HttpHeader*::HeaderEnd
    - HttpHeader*::RemoveHeader
    - HttpHeader*::HeaderBegin
    - HttpHeader*::minor_version
    - host
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void MakeRawHttpRequest(butil::IOBuf* request,\n                        HttpHeader*
      h,\n                        const butil::EndPoint& remote_side,\n                        const
      butil::IOBuf* content)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:681,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:682,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:683,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:683,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:684,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:685,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:686,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:687,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:693,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:697,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:699,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:704,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:707,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:712,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:717,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:722,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:727,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:728,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:731,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:732,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:736,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:743,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:743,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 35
    argCount: 3
    argNames:
    - response
    - h
    - content
    argTypes:
    - butil::IOBuf*
    - HttpHeader*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 678
    functionDepth: 1
    functionLinenumber: 678
    functionLinenumberEnd: 745
    functionName: brpc::MakeRawHttpResponse
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader*::GetHeader
    - butil::IOBufBuilder::move_to
    - HttpHeader*::minor_version
    - HttpHeader*::content_type
    - HttpHeader*::reason_phrase
    - butil::IOBuf*::length
    - butil::IOBuf*::append
    - butil::IOBuf::Movable
    - HttpHeader*::method
    - HttpHeader*::HeaderEnd
    - HttpHeader*::HeaderBegin
    - HttpHeader*::RemoveHeader
    - HttpHeader*::status_code
    - butil::IOBufBuilder::IOBufBuilder
    - HttpHeader*::major_version
    linkageType: ''
    returnType: void
    signature: "void MakeRawHttpResponse(butil::IOBuf* response,\n                         HttpHeader*
      h,\n                         butil::IOBuf* content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: brpc::GetUserCodeInPlace
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int GetUserCodeInPlace(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:77,1
    - Dst: queue::size
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: brpc::GetUserCodeQueueSize
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - queue::size
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: size_t
    signature: size_t GetUserCodeQueueSize(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bvar::Adder<int64_t>*>
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: brpc::GetInPoolElapseInSecond
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bvar::Adder<int64_t>*>
    linkageType: ''
    returnType: double
    signature: double GetInPoolElapseInSecond(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 92
    functionName: brpc::UserCodeBackupPool::UserCodeBackupPool
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UserCodeBackupPool::UserCodeBackupPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:95,1
    - Dst: static_cast<UserCodeBackupPool*>
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: brpc::UserCodeRunner
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UserCodeBackupPool*>
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void * UserCodeRunner(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:106,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 111
    functionName: brpc::UserCodeBackupPool::Init
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: int
    signature: int UserCodeBackupPool::Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::run_worker_startfn
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:115,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:117,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:120,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:125,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:126,1
    - Dst: pthread_cond_wait
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:127,1
    - Dst: front
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:130,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:131,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:133,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:137,1
    - Dst: UserCode::fn
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:138,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:139,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 144
    functionName: brpc::UserCodeBackupPool::UserCodeRunningLoop
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - size
    - BAIDU_SCOPED_LOCK
    - pop_front
    - empty
    - bthread::run_worker_startfn
    - pthread_cond_wait
    - front
    - logging::ComlogInitializer::ComlogInitializer
    - UserCode::fn
    linkageType: ''
    returnType: void
    signature: void UserCodeBackupPool::UserCodeRunningLoop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UserCodeBackupPool::UserCodeBackupPool
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:147,1
    - Dst: Init
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:149,1
    - Dst: exit
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 155
    functionName: brpc::InitUserCodeBackupPool
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - Init
    - UserCodeBackupPool::UserCodeBackupPool
    - exit
    linkageType: ''
    returnType: void
    signature: void InitUserCodeBackupPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: brpc::InitUserCodeBackupPoolOnceOrDie
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 2
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void InitUserCodeBackupPoolOnceOrDie()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::InitUserCodeBackupPoolOnceOrDie
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:162,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:164,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:170,1
    - Dst: queue::push_back
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:171,1
    - Dst: queue::size
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:177,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:182,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 161
    functionDepth: 5
    functionLinenumber: 161
    functionLinenumberEnd: 184
    functionName: brpc::EndRunningUserCodeInPool
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 4
    functionsReached:
    - pthread_cond_signal
    - pthread_mutex_lock
    - queue::push_back
    - pthread_mutex_unlock
    - queue::size
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void EndRunningUserCodeInPool(void (*fn)(void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 74
    functionName: brpc::GetUserCodeInPlace
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int GetUserCodeInPlace(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:77,1
    - Dst: queue::size
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: brpc::GetUserCodeQueueSize
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - queue::size
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: size_t
    signature: size_t GetUserCodeQueueSize(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<bvar::Adder<int64_t>*>
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: brpc::GetInPoolElapseInSecond
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bvar::Adder<int64_t>*>
    linkageType: ''
    returnType: double
    signature: double GetInPoolElapseInSecond(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 92
    functionName: brpc::UserCodeBackupPool::UserCodeBackupPool
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UserCodeBackupPool::UserCodeBackupPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:95,1
    - Dst: static_cast<UserCodeBackupPool*>
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: brpc::UserCodeRunner
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UserCodeBackupPool*>
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void * UserCodeRunner(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_create
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:106,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 111
    functionName: brpc::UserCodeBackupPool::Init
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - LOG
    linkageType: ''
    returnType: int
    signature: int UserCodeBackupPool::Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::run_worker_startfn
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:115,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:117,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:120,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:125,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:126,1
    - Dst: pthread_cond_wait
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:127,1
    - Dst: front
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:130,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:131,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:133,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:137,1
    - Dst: UserCode::fn
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:138,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:139,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 144
    functionName: brpc::UserCodeBackupPool::UserCodeRunningLoop
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - size
    - BAIDU_SCOPED_LOCK
    - pop_front
    - empty
    - bthread::run_worker_startfn
    - pthread_cond_wait
    - front
    - logging::ComlogInitializer::ComlogInitializer
    - UserCode::fn
    linkageType: ''
    returnType: void
    signature: void UserCodeBackupPool::UserCodeRunningLoop()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UserCodeBackupPool::UserCodeBackupPool
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:147,1
    - Dst: Init
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:149,1
    - Dst: exit
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 155
    functionName: brpc::InitUserCodeBackupPool
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - Init
    - UserCodeBackupPool::UserCodeBackupPool
    - exit
    linkageType: ''
    returnType: void
    signature: void InitUserCodeBackupPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: brpc::InitUserCodeBackupPoolOnceOrDie
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 3
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void InitUserCodeBackupPoolOnceOrDie()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::InitUserCodeBackupPoolOnceOrDie
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:162,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:164,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:170,1
    - Dst: queue::push_back
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:171,1
    - Dst: queue::size
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:177,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:182,1
    - Dst: pthread_cond_signal
      Src: /src/brpc/src/brpc/details/usercode_backup_pool.cpp:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 161
    functionDepth: 5
    functionLinenumber: 161
    functionLinenumberEnd: 184
    functionName: brpc::EndRunningUserCodeInPool
    functionSourceFile: /src/brpc/src/brpc/details/usercode_backup_pool.cpp
    functionUses: 4
    functionsReached:
    - pthread_cond_signal
    - pthread_mutex_lock
    - queue::push_back
    - pthread_mutex_unlock
    - queue::size
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void EndRunningUserCodeInPool(void (*fn)(void*), void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: brpc::ControllerPrivateAccessor::ControllerPrivateAccessor
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ControllerPrivateAccessor(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - saved_error
    argTypes:
    - CallId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::ControllerPrivateAccessor::OnResponse
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - OnVersionedRPCReturned
    linkageType: ''
    returnType: void
    signature: void OnResponse(CallId id, int saved_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - peer_id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: '&set_peer_id(SocketId peer_id)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_peer_id(SocketId peer_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _current_call::sending_sock::get
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::ControllerPrivateAccessor::get_sending_socket
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _current_call::sending_sock::get
    linkageType: ''
    returnType: Socket
    signature: Socket * get_sending_socket()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: brpc::ControllerPrivateAccessor::real_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t real_timeout_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:65,1
    - Dst: _current_call::sending_sock::reset
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:66,1
    - Dst: release
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: brpc::ControllerPrivateAccessor::move_in_server_receiving_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _current_call::sending_sock::reset
    - release
    - CHECK
    linkageType: ''
    returnType: void
    signature: void move_in_server_receiving_sock(SocketUniquePtr& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::ControllerPrivateAccessor::get_stream_user_data
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamUserData
    signature: StreamUserData * get_stream_user_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_flag
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - security_mode
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: '&set_security_mode(bool security_mode)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - set_flag
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_security_mode(bool security_mode)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: '&set_remote_side(const butil::EndPoint& pt)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_remote_side(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: '&set_local_side(const butil::EndPoint& pt)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_local_side(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_auth_context
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 91
    functionName: '&set_auth_context(const AuthContext* ctx)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - set_auth_context
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_auth_context(const AuthContext* ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - span
    argTypes:
    - Span*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 96
    functionName: '&set_span(Span* span)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_span(Span* span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: '&set_request_protocol(ProtocolType protocol)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_request_protocol(ProtocolType protocol)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::ControllerPrivateAccessor::span
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: Span * span() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: brpc::ControllerPrivateAccessor::pipelined_count
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t pipelined_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: brpc::ControllerPrivateAccessor::set_pipelined_count
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_pipelined_count(uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: '& set_server(const Server* server)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & set_server(const Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 117
    functionName: brpc::ControllerPrivateAccessor::set_remote_stream_settings
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_remote_stream_settings(StreamSettings *settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: brpc::ControllerPrivateAccessor::remote_stream_settings
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamSettings
    signature: StreamSettings * remote_stream_settings()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: brpc::ControllerPrivateAccessor::request_streams
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamIds
    signature: StreamIds request_streams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::ControllerPrivateAccessor::response_streams
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamIds
    signature: StreamIds response_streams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - method
    argTypes:
    - google::protobuf::MethodDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: brpc::ControllerPrivateAccessor::set_method
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method(const google::protobuf::MethodDescriptor* method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rpa::reset
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ReadableProgressiveAttachment*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 129
    functionName: brpc::ControllerPrivateAccessor::set_readable_progressive_attachment
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _rpa::reset
    linkageType: ''
    returnType: void
    signature: void set_readable_progressive_attachment(ReadableProgressiveAttachment*
      s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - auth_flags
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: brpc::ControllerPrivateAccessor::set_auth_flags
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_auth_flags(uint32_t auth_flags)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: brpc::ControllerPrivateAccessor::clear_auth_flags
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void clear_auth_flags()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: protocol_param
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: '& protocol_param()'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - protocol_param
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: protocol_param
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& protocol_param() const'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - protocol_param
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - deadline_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: brpc::ControllerPrivateAccessor::set_deadline_us
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_deadline_us(int64_t deadline_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - begin_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: '& set_begin_time_us(int64_t begin_time_us)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & set_begin_time_us(int64_t begin_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_flag
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: '& set_health_check_call()'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - add_flag
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & set_health_check_call()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _checksum_value::assign
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - size
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: brpc::ControllerPrivateAccessor::set_checksum_value
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _checksum_value::assign
    linkageType: ''
    returnType: void
    signature: void set_checksum_value(const char* c, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::ControllerPrivateAccessor::set_checksum_value
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_checksum_value(const std::string& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    functionName: '& checksum_value() const'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & checksum_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: ~RPCSender()
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RPCSender()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: brpc::ControllerPrivateAccessor::ControllerPrivateAccessor
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ControllerPrivateAccessor(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - saved_error
    argTypes:
    - CallId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::ControllerPrivateAccessor::OnResponse
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - OnVersionedRPCReturned
    linkageType: ''
    returnType: void
    signature: void OnResponse(CallId id, int saved_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - peer_id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: '&set_peer_id(SocketId peer_id)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_peer_id(SocketId peer_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _current_call::sending_sock::get
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::ControllerPrivateAccessor::get_sending_socket
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _current_call::sending_sock::get
    linkageType: ''
    returnType: Socket
    signature: Socket * get_sending_socket()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: brpc::ControllerPrivateAccessor::real_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t real_timeout_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:65,1
    - Dst: _current_call::sending_sock::reset
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:66,1
    - Dst: release
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 67
    functionName: brpc::ControllerPrivateAccessor::move_in_server_receiving_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _current_call::sending_sock::reset
    - release
    - CHECK
    linkageType: ''
    returnType: void
    signature: void move_in_server_receiving_sock(SocketUniquePtr& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: brpc::ControllerPrivateAccessor::get_stream_user_data
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamUserData
    signature: StreamUserData * get_stream_user_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_flag
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - security_mode
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: '&set_security_mode(bool security_mode)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - set_flag
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_security_mode(bool security_mode)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: '&set_remote_side(const butil::EndPoint& pt)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_remote_side(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: '&set_local_side(const butil::EndPoint& pt)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_local_side(const butil::EndPoint& pt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_auth_context
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 91
    functionName: '&set_auth_context(const AuthContext* ctx)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - set_auth_context
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_auth_context(const AuthContext* ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - span
    argTypes:
    - Span*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 96
    functionName: '&set_span(Span* span)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_span(Span* span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: '&set_request_protocol(ProtocolType protocol)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor &set_request_protocol(ProtocolType protocol)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: brpc::ControllerPrivateAccessor::span
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: Span * span() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: brpc::ControllerPrivateAccessor::pipelined_count
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t pipelined_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: brpc::ControllerPrivateAccessor::set_pipelined_count
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_pipelined_count(uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: '& set_server(const Server* server)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & set_server(const Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 117
    functionName: brpc::ControllerPrivateAccessor::set_remote_stream_settings
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_remote_stream_settings(StreamSettings *settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: brpc::ControllerPrivateAccessor::remote_stream_settings
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamSettings
    signature: StreamSettings * remote_stream_settings()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    functionName: brpc::ControllerPrivateAccessor::request_streams
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamIds
    signature: StreamIds request_streams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: brpc::ControllerPrivateAccessor::response_streams
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StreamIds
    signature: StreamIds response_streams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - method
    argTypes:
    - google::protobuf::MethodDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: brpc::ControllerPrivateAccessor::set_method
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_method(const google::protobuf::MethodDescriptor* method)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rpa::reset
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ReadableProgressiveAttachment*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 129
    functionName: brpc::ControllerPrivateAccessor::set_readable_progressive_attachment
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _rpa::reset
    linkageType: ''
    returnType: void
    signature: void set_readable_progressive_attachment(ReadableProgressiveAttachment*
      s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - auth_flags
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: brpc::ControllerPrivateAccessor::set_auth_flags
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_auth_flags(uint32_t auth_flags)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: brpc::ControllerPrivateAccessor::clear_auth_flags
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void clear_auth_flags()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: protocol_param
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: '& protocol_param()'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - protocol_param
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: protocol_param
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& protocol_param() const'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - protocol_param
    linkageType: ''
    returnType: std::string
    signature: std::string & protocol_param() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - deadline_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: brpc::ControllerPrivateAccessor::set_deadline_us
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_deadline_us(int64_t deadline_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - begin_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: '& set_begin_time_us(int64_t begin_time_us)'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & set_begin_time_us(int64_t begin_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_flag
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: '& set_health_check_call()'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - add_flag
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & set_health_check_call()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _checksum_value::assign
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - size
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: brpc::ControllerPrivateAccessor::set_checksum_value
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _checksum_value::assign
    linkageType: ''
    returnType: void
    signature: void set_checksum_value(const char* c, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::ControllerPrivateAccessor::set_checksum_value
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_checksum_value(const std::string& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    functionName: '& checksum_value() const'
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & checksum_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: ~RPCSender()
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RPCSender()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: '&body() const'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf &body() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: '&body()'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf &body()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: brpc::HttpMessage::Completed
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Completed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::HttpMessage::stage
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: HttpParserStage
    signature: HttpParserStage stage() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::HttpMessage::request_method
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpMethod
    signature: HttpMethod request_method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: '& header()'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & header()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: '& header() const'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & header() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::HttpMessage::parsed_length
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t parsed_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: '& parser() const'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: http_parser
    signature: http_parser & parser() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::HttpMessage::read_body_progressively
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool read_body_progressively() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - read_body_progressively
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: brpc::HttpMessage::set_read_body_progressively
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_read_body_progressively(bool read_body_progressively)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: '&body() const'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf &body() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: '&body()'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf &body()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: brpc::HttpMessage::Completed
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Completed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: brpc::HttpMessage::stage
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: HttpParserStage
    signature: HttpParserStage stage() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: brpc::HttpMessage::request_method
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpMethod
    signature: HttpMethod request_method() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: '& header()'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & header()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: '& header() const'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: HttpHeader
    signature: HttpHeader & header() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: brpc::HttpMessage::parsed_length
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t parsed_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: '& parser() const'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: http_parser
    signature: http_parser & parser() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: brpc::HttpMessage::read_body_progressively
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool read_body_progressively() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - read_body_progressively
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: brpc::HttpMessage::set_read_body_progressively
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_read_body_progressively(bool read_body_progressively)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:25,1
    - Dst: RemoveWatcher
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:26,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: LoadBalancerWithNaming::~LoadBalancerWithNaming()
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 0
    functionsReached:
    - RemoveWatcher
    - get
    linkageType: ''
    returnType: void
    signature: void LoadBalancerWithNaming::~LoadBalancerWithNaming()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:33,1
    - Dst: GetNamingServiceThread
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:37,1
    - Dst: AddWatcher
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:41,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - ns_url
    - lb_name
    - filter
    - options
    argTypes:
    - char*
    - char*
    - NamingServiceFilter*
    - GetNamingServiceThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 45
    functionName: brpc::LoadBalancerWithNaming::Init
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - AddWatcher
    - GetNamingServiceThread
    - brpc::SharedLoadBalancer::Init
    linkageType: ''
    returnType: int
    signature: "int LoadBalancerWithNaming::Init(const char* ns_url, const char* lb_name,\n
      \                                const NamingServiceFilter* filter,\n                                 const
      GetNamingServiceThreadOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddServersInBatch
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: brpc::LoadBalancerWithNaming::OnAddedServers
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 0
    functionsReached:
    - AddServersInBatch
    linkageType: ''
    returnType: void
    signature: "void LoadBalancerWithNaming::OnAddedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServersInBatch
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: brpc::LoadBalancerWithNaming::OnRemovedServers
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 0
    functionsReached:
    - RemoveServersInBatch
    linkageType: ''
    returnType: void
    signature: "void LoadBalancerWithNaming::OnRemovedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::LoadBalancerWithNaming::Describe
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:60,1
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 2
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::LoadBalancerWithNaming::Describe
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::Describe
    - brpc::LoadBalancerWithNaming::Describe
    linkageType: ''
    returnType: void
    signature: "void LoadBalancerWithNaming::Describe(std::ostream& os,\n                                      const
      DescribeOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:25,1
    - Dst: RemoveWatcher
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:26,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: LoadBalancerWithNaming::~LoadBalancerWithNaming()
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 0
    functionsReached:
    - RemoveWatcher
    - get
    linkageType: ''
    returnType: void
    signature: void LoadBalancerWithNaming::~LoadBalancerWithNaming()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:33,1
    - Dst: GetNamingServiceThread
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:37,1
    - Dst: AddWatcher
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:41,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - ns_url
    - lb_name
    - filter
    - options
    argTypes:
    - char*
    - char*
    - NamingServiceFilter*
    - GetNamingServiceThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 45
    functionName: brpc::LoadBalancerWithNaming::Init
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - AddWatcher
    - GetNamingServiceThread
    - brpc::SharedLoadBalancer::Init
    linkageType: ''
    returnType: int
    signature: "int LoadBalancerWithNaming::Init(const char* ns_url, const char* lb_name,\n
      \                                const NamingServiceFilter* filter,\n                                 const
      GetNamingServiceThreadOptions* options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddServersInBatch
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: brpc::LoadBalancerWithNaming::OnAddedServers
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 0
    functionsReached:
    - AddServersInBatch
    linkageType: ''
    returnType: void
    signature: "void LoadBalancerWithNaming::OnAddedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServersInBatch
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: brpc::LoadBalancerWithNaming::OnRemovedServers
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 0
    functionsReached:
    - RemoveServersInBatch
    linkageType: ''
    returnType: void
    signature: "void LoadBalancerWithNaming::OnRemovedServers(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::LoadBalancerWithNaming::Describe
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:60,1
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 2
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: brpc::LoadBalancerWithNaming::Describe
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.cpp
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::Describe
    - brpc::LoadBalancerWithNaming::Describe
    linkageType: ''
    returnType: void
    signature: "void LoadBalancerWithNaming::Describe(std::ostream& os,\n                                      const
      DescribeOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - XX
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: HTTP_METHOD_MAP
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_METHOD_MAP(XX)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - XX
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 153
    functionName: HTTP_ERRNO_MAP
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_ERRNO_MAP(XX)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - s
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: HTTP_ERRNO_GEN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_ERRNO_GEN(n, s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 205
    functionName: HTTP_PARSER_ERRNO
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_PARSER_ERRNO(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - XX
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: HTTP_METHOD_MAP
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_METHOD_MAP(XX)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - XX
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 153
    functionName: HTTP_ERRNO_MAP
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_ERRNO_MAP(XX)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - s
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: HTTP_ERRNO_GEN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_ERRNO_GEN(n, s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 205
    functionName: HTTP_PARSER_ERRNO
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_PARSER_ERRNO(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: brpc::SparseMinuteCounter::Item
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Item()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ts
    - ' v'
    argTypes:
    - int64_t
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::SparseMinuteCounter::Item
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Item(int64_t ts, const T& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::SparseMinuteCounter::SparseMinuteCounter
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SparseMinuteCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DestroyQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: ~SparseMinuteCounter()
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - DestroyQueue
    linkageType: ''
    returnType: void
    signature: void ~SparseMinuteCounter()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: full
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:70,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:71,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:73,1
    - Dst: brpc::SparseMinuteCounter<T>::Resize
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:74,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:75,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:79,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:80,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:84,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:91,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:98,1
    - Dst: brpc::SparseMinuteCounter<T>::CreateQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:108,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:109,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:110,1
    - Dst: Item
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:110,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - now_ms
    - ' val'
    - popped
    argTypes:
    - int64_t
    - T
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 113
    functionName: brpc::SparseMinuteCounter<T>::Add
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - std::max
    - Item
    - push
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - pop
    - brpc::SparseMinuteCounter<T>::Resize
    - capacity
    - full
    - top
    linkageType: ''
    returnType: bool
    signature: bool SparseMinuteCounter<T>::Add(int64_t now_ms, const T& val, T* popped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:120,1
    - Dst: Q::Q
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cap
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: brpc::SparseMinuteCounter<T>::CreateQueue
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 1
    functionsReached:
    - malloc
    - Q::Q
    linkageType: ''
    returnType: typename SparseMinuteCounter<T>::Q
    signature: 'typename SparseMinuteCounter<T>::Q *

      SparseMinuteCounter<T>::CreateQueue(uint32_t cap)'
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Q*::~Q
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:127,1
    - Dst: free
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - q
    argTypes:
    - Q*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 130
    functionName: brpc::SparseMinuteCounter<T>::DestroyQueue
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - free
    - Q*::~Q
    linkageType: ''
    returnType: void
    signature: void SparseMinuteCounter<T>::DestroyQueue(Q* q)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:134,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:134,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:135,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:135,1
    - Dst: brpc::SparseMinuteCounter<T>::CreateQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:137,1
    - Dst: Q*::push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:138,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:138,1
    - Dst: brpc::SparseMinuteCounter<T>::DestroyQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 142
    functionName: brpc::SparseMinuteCounter<T>::Resize
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 1
    functionsReached:
    - std::min
    - brpc::SparseMinuteCounter<T>::DestroyQueue
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - Q*::push
    - capacity
    - size
    - CHECK_LT
    - top
    linkageType: ''
    returnType: void
    signature: void SparseMinuteCounter<T>::Resize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: top
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:147,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:152,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - now_ms
    - popped
    argTypes:
    - int64_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 163
    functionName: brpc::SparseMinuteCounter<T>::TryPop
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - pop
    - top
    linkageType: ''
    returnType: bool
    signature: bool SparseMinuteCounter<T>::TryPop(int64_t now_ms, T* popped)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: brpc::SparseMinuteCounter::Item
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Item()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ts
    - ' v'
    argTypes:
    - int64_t
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: brpc::SparseMinuteCounter::Item
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Item(int64_t ts, const T& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: brpc::SparseMinuteCounter::SparseMinuteCounter
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SparseMinuteCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DestroyQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: ~SparseMinuteCounter()
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - DestroyQueue
    linkageType: ''
    returnType: void
    signature: void ~SparseMinuteCounter()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: full
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:70,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:71,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:73,1
    - Dst: brpc::SparseMinuteCounter<T>::Resize
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:74,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:75,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:79,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:80,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:84,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:91,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:98,1
    - Dst: brpc::SparseMinuteCounter<T>::CreateQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:108,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:109,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:110,1
    - Dst: Item
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:110,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 3
    argNames:
    - now_ms
    - ' val'
    - popped
    argTypes:
    - int64_t
    - T
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 113
    functionName: brpc::SparseMinuteCounter<T>::Add
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - std::max
    - Item
    - push
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - pop
    - brpc::SparseMinuteCounter<T>::Resize
    - capacity
    - full
    - top
    linkageType: ''
    returnType: bool
    signature: bool SparseMinuteCounter<T>::Add(int64_t now_ms, const T& val, T* popped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:120,1
    - Dst: Q::Q
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cap
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: brpc::SparseMinuteCounter<T>::CreateQueue
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 3
    functionsReached:
    - malloc
    - Q::Q
    linkageType: ''
    returnType: typename SparseMinuteCounter<T>::Q
    signature: 'typename SparseMinuteCounter<T>::Q *

      SparseMinuteCounter<T>::CreateQueue(uint32_t cap)'
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Q*::~Q
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:127,1
    - Dst: free
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - q
    argTypes:
    - Q*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 130
    functionName: brpc::SparseMinuteCounter<T>::DestroyQueue
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 1
    functionsReached:
    - free
    - Q*::~Q
    linkageType: ''
    returnType: void
    signature: void SparseMinuteCounter<T>::DestroyQueue(Q* q)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:134,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:134,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:135,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:135,1
    - Dst: brpc::SparseMinuteCounter<T>::CreateQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:137,1
    - Dst: Q*::push
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:138,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:138,1
    - Dst: brpc::SparseMinuteCounter<T>::DestroyQueue
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 142
    functionName: brpc::SparseMinuteCounter<T>::Resize
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 2
    functionsReached:
    - std::min
    - brpc::SparseMinuteCounter<T>::DestroyQueue
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - Q*::push
    - capacity
    - size
    - CHECK_LT
    - top
    linkageType: ''
    returnType: void
    signature: void SparseMinuteCounter<T>::Resize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: top
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:147,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/sparse_minute_counter.h:152,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - now_ms
    - popped
    argTypes:
    - int64_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 163
    functionName: brpc::SparseMinuteCounter<T>::TryPop
    functionSourceFile: /src/brpc/src/brpc/details/sparse_minute_counter.h
    functionUses: 0
    functionsReached:
    - pop
    - top
    linkageType: ''
    returnType: bool
    signature: bool SparseMinuteCounter<T>::TryPop(int64_t now_ms, T* popped)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::set::count
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:58,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 63
    functionName: brpc::HasInit
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - std::set::insert
    - std::set::count
    linkageType: ''
    returnType: bool
    signature: bool HasInit(const std::string& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::HasJemalloc
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HasJemalloc()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: brpc::HasEnableJemallocProfile
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - mallctl
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool HasEnableJemallocProfile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::string*>
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - opaque
    - str
    argTypes:
    - void*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: brpc::WriteCb
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<std::string*>
    linkageType: ''
    returnType: void
    signature: void WriteCb(void *opaque, const char *str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc_stats_print
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:92,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' opts'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: brpc::StatsPrint
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - malloc_stats_print
    - c_str
    linkageType: ''
    returnType: std::string
    signature: std::string StatsPrint(const std::string& opts)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:98,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:103,1
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - active
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 114
    functionName: brpc::JeProfileActive
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - mallctl
    - brpc::HasEnableJemallocProfile
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: int
    signature: int JeProfileActive(bool active)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:118,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:123,1
    - Dst: brpc::MakeProfName
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:129,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:129,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:133,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:135,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:135,1
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:145,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 116
    functionDepth: 2
    functionLinenumber: 116
    functionLinenumberEnd: 147
    functionName: brpc::JeProfileDump
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - butil::CreateDirectoryAndGetError
    - butil::FilePath
    - butil::FilePath::value
    - brpc::HasEnableJemallocProfile
    - mallctl
    - berror
    - brpc::MakeProfName
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: std::string
    signature: std::string JeProfileDump()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:151,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:156,1
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:165,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - lg_sample
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 167
    functionName: brpc::JeProfileReset
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - mallctl
    - brpc::HasEnableJemallocProfile
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: int
    signature: int JeProfileReset(size_t lg_sample)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:170,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:172,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:174,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:175,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:179,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:180,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:181,1
    - Dst: brpc::StatsPrint
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:181,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:186,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:191,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:192,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:193,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:194,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:199,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:201,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:202,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:205,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:210,1
    - Dst: std::getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:213,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:214,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:217,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:218,1
    - Dst: butil::GetProcessAbsolutePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:225,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:226,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:235,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:236,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:247,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:248,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:252,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:257,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:258,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:261,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:262,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:262,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:264,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:269,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:269,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:270,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:272,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:273,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:273,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 71
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 169
    functionDepth: 3
    functionLinenumber: 169
    functionLinenumberEnd: 275
    functionName: brpc::JeControlProfile
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::JeProfileDump
    - Controller*::http_response
    - brpc::HasEnableJemallocProfile
    - getenv
    - Controller*::SetFailed
    - butil::ReadFileToString
    - swap
    - std::string
    - std::string::c_str
    - std::getenv
    - butil::PathExists
    - std::to_string
    - butil::read_command_output
    - LOG
    - Controller*::http_request
    - butil::FilePath
    - GetQuery
    - butil::GetProcessAbsolutePath
    - butil::IOBufBuilder::buf
    - std::string::empty
    - Controller*::response_attachment
    - brpc::StatsPrint
    - std::string*::empty
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: void JeControlProfile(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:278,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:282,1
    - Dst: brpc::JeProfileActive
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:287,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - enable
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 277
    functionDepth: 3
    functionLinenumber: 277
    functionLinenumberEnd: 292
    functionName: brpc::validate_je_prof_active
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - LOG
    - brpc::JeProfileActive
    - brpc::HasJemalloc
    linkageType: ''
    returnType: bool
    signature: bool validate_je_prof_active(const char*, bool enable)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:295,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:298,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:302,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:304,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 294
    functionDepth: 3
    functionLinenumber: 294
    functionLinenumberEnd: 308
    functionName: brpc::validate_je_prof_dump
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::JeProfileDump
    - brpc::HasInit
    - std::string::empty
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: bool
    signature: bool validate_je_prof_dump(const char*, int32_t val)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:311,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:314,1
    - Dst: brpc::JeProfileReset
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:318,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 310
    functionDepth: 3
    functionLinenumber: 310
    functionLinenumberEnd: 324
    functionName: brpc::validate_je_prof_reset
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::JeProfileReset
    - brpc::HasInit
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: bool
    signature: bool validate_je_prof_reset(const char*, int32_t val)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::set::count
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:58,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 63
    functionName: brpc::HasInit
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 3
    functionsReached:
    - std::set::insert
    - std::set::count
    linkageType: ''
    returnType: bool
    signature: bool HasInit(const std::string& fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: brpc::HasJemalloc
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HasJemalloc()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: brpc::HasEnableJemallocProfile
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 4
    functionsReached:
    - mallctl
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool HasEnableJemallocProfile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::string*>
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - opaque
    - str
    argTypes:
    - void*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: brpc::WriteCb
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - static_cast<std::string*>
    linkageType: ''
    returnType: void
    signature: void WriteCb(void *opaque, const char *str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc_stats_print
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:92,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' opts'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: brpc::StatsPrint
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 1
    functionsReached:
    - malloc_stats_print
    - c_str
    linkageType: ''
    returnType: std::string
    signature: std::string StatsPrint(const std::string& opts)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:98,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:103,1
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - active
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 114
    functionName: brpc::JeProfileActive
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 1
    functionsReached:
    - mallctl
    - brpc::HasEnableJemallocProfile
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: int
    signature: int JeProfileActive(bool active)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:118,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:123,1
    - Dst: brpc::MakeProfName
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:129,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:129,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:133,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:135,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:135,1
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:145,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 116
    functionDepth: 2
    functionLinenumber: 116
    functionLinenumberEnd: 147
    functionName: brpc::JeProfileDump
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 2
    functionsReached:
    - butil::CreateDirectoryAndGetError
    - butil::FilePath
    - butil::FilePath::value
    - brpc::HasEnableJemallocProfile
    - mallctl
    - berror
    - brpc::MakeProfName
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: std::string
    signature: std::string JeProfileDump()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:151,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:156,1
    - Dst: mallctl
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:165,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - lg_sample
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 167
    functionName: brpc::JeProfileReset
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 1
    functionsReached:
    - mallctl
    - brpc::HasEnableJemallocProfile
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: int
    signature: int JeProfileReset(size_t lg_sample)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:170,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:172,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:174,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:175,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:179,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:180,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:181,1
    - Dst: brpc::StatsPrint
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:181,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:186,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:191,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:192,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:193,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:194,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:199,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:201,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:202,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:205,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:210,1
    - Dst: std::getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:213,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:214,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:217,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:218,1
    - Dst: butil::GetProcessAbsolutePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:225,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:226,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:235,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:236,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:247,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:248,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:252,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:257,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:258,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:261,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:262,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:262,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:264,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:269,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:269,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:270,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:272,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:273,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:273,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 71
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 169
    functionDepth: 3
    functionLinenumber: 169
    functionLinenumberEnd: 275
    functionName: brpc::JeControlProfile
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::JeProfileDump
    - Controller*::http_response
    - brpc::HasEnableJemallocProfile
    - getenv
    - Controller*::SetFailed
    - butil::ReadFileToString
    - swap
    - std::string
    - std::string::c_str
    - std::getenv
    - butil::PathExists
    - std::to_string
    - butil::read_command_output
    - LOG
    - Controller*::http_request
    - butil::FilePath
    - GetQuery
    - butil::GetProcessAbsolutePath
    - butil::IOBufBuilder::buf
    - std::string::empty
    - Controller*::response_attachment
    - brpc::StatsPrint
    - std::string*::empty
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: void JeControlProfile(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:278,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:282,1
    - Dst: brpc::JeProfileActive
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:287,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - enable
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 277
    functionDepth: 3
    functionLinenumber: 277
    functionLinenumberEnd: 292
    functionName: brpc::validate_je_prof_active
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - LOG
    - brpc::JeProfileActive
    - brpc::HasJemalloc
    linkageType: ''
    returnType: bool
    signature: bool validate_je_prof_active(const char*, bool enable)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:295,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:298,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:302,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:303,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:304,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 294
    functionDepth: 3
    functionLinenumber: 294
    functionLinenumberEnd: 308
    functionName: brpc::validate_je_prof_dump
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::JeProfileDump
    - brpc::HasInit
    - std::string::empty
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: bool
    signature: bool validate_je_prof_dump(const char*, int32_t val)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:311,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:314,1
    - Dst: brpc::JeProfileReset
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:318,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 310
    functionDepth: 3
    functionLinenumber: 310
    functionLinenumberEnd: 324
    functionName: brpc::validate_je_prof_reset
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::JeProfileReset
    - brpc::HasInit
    - LOG
    - brpc::HasJemalloc
    linkageType: ''
    returnType: bool
    signature: bool validate_je_prof_reset(const char*, int32_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: brpc::cast_int
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int cast_int(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::unique_ptr<ConcurrencyLimiter>*>
      Src: /src/brpc/src/brpc/details/method_status.cpp:32,1
    - Dst: auto::MaxConcurrency
      Src: /src/brpc/src/brpc/details/method_status.cpp:34,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 37
    functionName: brpc::cast_cl
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - auto::MaxConcurrency
    - static_cast<std::unique_ptr<ConcurrencyLimiter>*>
    linkageType: ''
    returnType: int
    signature: int cast_cl(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 45
    functionName: brpc::MethodStatus::MethodStatus
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodStatus::MethodStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: MethodStatus::~MethodStatus()
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodStatus::~MethodStatus()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:51,1
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:54,1
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:57,1
    - Dst: expose
      Src: /src/brpc/src/brpc/details/method_status.cpp:60,1
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:64,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 69
    functionName: brpc::MethodStatus::Expose
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - expose
    - expose_as
    linkageType: ''
    returnType: int
    signature: int MethodStatus::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - prefix
    - ' value'
    argTypes:
    - std::ostream
    - char*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: brpc::OutputTextValue
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void OutputTextValue(std::ostream& os,\n                     const
      char* prefix,\n                     const T& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:95,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 6
    argNames:
    - ' os'
    - prefix
    - ' bvar_name'
    - ' value'
    - ' options'
    - expand
    argTypes:
    - std::ostream
    - char*
    - std::string
    - T
    - DescribeOptions
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 97
    functionName: brpc::OutputValue
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - brpc::OutputTextValue
    linkageType: ''
    returnType: void
    signature: "void OutputValue(std::ostream& os,\n                 const char* prefix,\n
      \                const std::string& bvar_name,\n                 const T& value,\n
      \                const DescribeOptions& options,\n                 bool expand)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:102,1
    - Dst: count_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:102,1
    - Dst: count
      Src: /src/brpc/src/brpc/details/method_status.cpp:102,1
    - Dst: qps
      Src: /src/brpc/src/brpc/details/method_status.cpp:104,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:106,1
    - Dst: qps_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:106,1
    - Dst: qps
      Src: /src/brpc/src/brpc/details/method_status.cpp:106,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:110,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:110,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/details/method_status.cpp:110,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:112,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:112,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/details/method_status.cpp:113,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:116,1
    - Dst: latency_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:116,1
    - Dst: latency
      Src: /src/brpc/src/brpc/details/method_status.cpp:117,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:119,1
    - Dst: latency_percentiles_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:120,1
    - Dst: latency_percentiles
      Src: /src/brpc/src/brpc/details/method_status.cpp:121,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:122,1
    - Dst: latency_cdf_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:122,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:125,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:126,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:127,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:128,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:129,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:130,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:131,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:132,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:133,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:134,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:136,1
    - Dst: max_latency_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:136,1
    - Dst: max_latency
      Src: /src/brpc/src/brpc/details/method_status.cpp:137,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:140,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:140,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:143,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:143,1
    - Dst: brpc::MethodStatus::MaxConcurrency
      Src: /src/brpc/src/brpc/details/method_status.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 146
    functionName: brpc::MethodStatus::Describe
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - latency_percentiles
    - name
    - get_value
    - latency
    - OutputTextValue
    - latency_cdf_name
    - max_latency_name
    - qps_name
    - latency_percentiles_name
    - count_name
    - count
    - max_latency
    - latency_name
    - qps
    - latency_percentile
    - brpc::MethodStatus::MaxConcurrency
    - OutputValue
    linkageType: ''
    returnType: void
    signature: "void MethodStatus::Describe(\n    std::ostream &os, const DescribeOptions&
      options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/details/method_status.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cl
    argTypes:
    - ConcurrencyLimiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 150
    functionName: brpc::MethodStatus::SetConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void MethodStatus::SetConcurrencyLimiter(ConcurrencyLimiter* cl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ResponseWriteInfo*>
      Src: /src/brpc/src/brpc/details/method_status.cpp:153,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/method_status.cpp:154,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/method_status.cpp:155,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/details/method_status.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 152
    functionDepth: 5
    functionLinenumber: 152
    functionLinenumberEnd: 157
    functionName: brpc::HandleResponseWritten
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ResponseWriteInfo*>
    - CHECK_EQ
    - butil::cpuwide_time_us
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int HandleResponseWritten(bthread_id_t id, void* data, int /*error_code*/)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OnResponded
      Src: /src/brpc/src/brpc/details/method_status.cpp:161,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/details/method_status.cpp:161,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/method_status.cpp:161,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/details/method_status.cpp:164,1
    - Dst: server
      Src: /src/brpc/src/brpc/details/method_status.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 165
    functionName: ConcurrencyRemover::~ConcurrencyRemover()
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - server
    - butil::cpuwide_time_us
    - ErrorCode
    - ServerPrivateAccessor
    - OnResponded
    linkageType: ''
    returnType: void
    signature: void ConcurrencyRemover::~ConcurrencyRemover()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: brpc::cast_int
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int cast_int(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::unique_ptr<ConcurrencyLimiter>*>
      Src: /src/brpc/src/brpc/details/method_status.cpp:32,1
    - Dst: auto::MaxConcurrency
      Src: /src/brpc/src/brpc/details/method_status.cpp:34,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 37
    functionName: brpc::cast_cl
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - auto::MaxConcurrency
    - static_cast<std::unique_ptr<ConcurrencyLimiter>*>
    linkageType: ''
    returnType: int
    signature: int cast_cl(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 45
    functionName: brpc::MethodStatus::MethodStatus
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodStatus::MethodStatus()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: MethodStatus::~MethodStatus()
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MethodStatus::~MethodStatus()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:51,1
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:54,1
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:57,1
    - Dst: expose
      Src: /src/brpc/src/brpc/details/method_status.cpp:60,1
    - Dst: expose_as
      Src: /src/brpc/src/brpc/details/method_status.cpp:64,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 69
    functionName: brpc::MethodStatus::Expose
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - expose
    - expose_as
    linkageType: ''
    returnType: int
    signature: int MethodStatus::Expose(const butil::StringPiece& prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - prefix
    - ' value'
    argTypes:
    - std::ostream
    - char*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: brpc::OutputTextValue
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void OutputTextValue(std::ostream& os,\n                     const
      char* prefix,\n                     const T& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:95,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 6
    argNames:
    - ' os'
    - prefix
    - ' bvar_name'
    - ' value'
    - ' options'
    - expand
    argTypes:
    - std::ostream
    - char*
    - std::string
    - T
    - DescribeOptions
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 97
    functionName: brpc::OutputValue
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - brpc::OutputTextValue
    linkageType: ''
    returnType: void
    signature: "void OutputValue(std::ostream& os,\n                 const char* prefix,\n
      \                const std::string& bvar_name,\n                 const T& value,\n
      \                const DescribeOptions& options,\n                 bool expand)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:102,1
    - Dst: count_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:102,1
    - Dst: count
      Src: /src/brpc/src/brpc/details/method_status.cpp:102,1
    - Dst: qps
      Src: /src/brpc/src/brpc/details/method_status.cpp:104,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:106,1
    - Dst: qps_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:106,1
    - Dst: qps
      Src: /src/brpc/src/brpc/details/method_status.cpp:106,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:110,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:110,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/details/method_status.cpp:110,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:112,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:112,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/details/method_status.cpp:113,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:116,1
    - Dst: latency_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:116,1
    - Dst: latency
      Src: /src/brpc/src/brpc/details/method_status.cpp:117,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:119,1
    - Dst: latency_percentiles_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:120,1
    - Dst: latency_percentiles
      Src: /src/brpc/src/brpc/details/method_status.cpp:121,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:122,1
    - Dst: latency_cdf_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:122,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:125,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:126,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:127,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:128,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:129,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:130,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:131,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:132,1
    - Dst: OutputTextValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:133,1
    - Dst: latency_percentile
      Src: /src/brpc/src/brpc/details/method_status.cpp:134,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:136,1
    - Dst: max_latency_name
      Src: /src/brpc/src/brpc/details/method_status.cpp:136,1
    - Dst: max_latency
      Src: /src/brpc/src/brpc/details/method_status.cpp:137,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:140,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:140,1
    - Dst: OutputValue
      Src: /src/brpc/src/brpc/details/method_status.cpp:143,1
    - Dst: name
      Src: /src/brpc/src/brpc/details/method_status.cpp:143,1
    - Dst: brpc::MethodStatus::MaxConcurrency
      Src: /src/brpc/src/brpc/details/method_status.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 146
    functionName: brpc::MethodStatus::Describe
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - latency_percentiles
    - name
    - get_value
    - latency
    - OutputTextValue
    - latency_cdf_name
    - max_latency_name
    - qps_name
    - latency_percentiles_name
    - count_name
    - count
    - max_latency
    - latency_name
    - qps
    - latency_percentile
    - brpc::MethodStatus::MaxConcurrency
    - OutputValue
    linkageType: ''
    returnType: void
    signature: "void MethodStatus::Describe(\n    std::ostream &os, const DescribeOptions&
      options) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/details/method_status.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cl
    argTypes:
    - ConcurrencyLimiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 150
    functionName: brpc::MethodStatus::SetConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void MethodStatus::SetConcurrencyLimiter(ConcurrencyLimiter* cl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ResponseWriteInfo*>
      Src: /src/brpc/src/brpc/details/method_status.cpp:153,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/method_status.cpp:154,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/method_status.cpp:155,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/details/method_status.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 152
    functionDepth: 5
    functionLinenumber: 152
    functionLinenumberEnd: 157
    functionName: brpc::HandleResponseWritten
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ResponseWriteInfo*>
    - CHECK_EQ
    - butil::cpuwide_time_us
    - bthread_id_unlock_and_destroy
    linkageType: ''
    returnType: int
    signature: int HandleResponseWritten(bthread_id_t id, void* data, int /*error_code*/)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OnResponded
      Src: /src/brpc/src/brpc/details/method_status.cpp:161,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/details/method_status.cpp:161,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/details/method_status.cpp:161,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/details/method_status.cpp:164,1
    - Dst: server
      Src: /src/brpc/src/brpc/details/method_status.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 165
    functionName: ConcurrencyRemover::~ConcurrencyRemover()
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - server
    - butil::cpuwide_time_us
    - ErrorCode
    - ServerPrivateAccessor
    - OnResponded
    linkageType: ''
    returnType: void
    signature: void ConcurrencyRemover::~ConcurrencyRemover()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: brpc::IndexTableOptions
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IndexTableOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CaseIgnoredHasher
      Src: /src/brpc/src/brpc/details/hpack.cpp:54,1
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/details/hpack.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - HPacker::Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: operator()(const HPacker::Header& h) const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::DefaultHasher<std::string>
    - butil::CaseIgnoredHasher
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const HPacker::Header& h) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - HeaderAndHashCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: operator()(const HeaderAndHashCode& h) const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const HeaderAndHashCode& h) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CaseIgnoredEqual
      Src: /src/brpc/src/brpc/details/hpack.cpp:64,1
    - Dst: butil::DefaultEqualTo<std::string>
      Src: /src/brpc/src/brpc/details/hpack.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' h1'
    - ' h2'
    argTypes:
    - HPacker::Header
    - HPacker::Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: operator()(const HPacker::Header& h1, const HPacker::Header& h2)
      const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::CaseIgnoredEqual
    - butil::DefaultEqualTo<std::string>
    linkageType: ''
    returnType: bool
    signature: bool operator()(const HPacker::Header& h1, const HPacker::Header& h2)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: operator
      Src: /src/brpc/src/brpc/details/hpack.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' h1'
    - ' h2'
    argTypes:
    - HPacker::Header
    - HeaderAndHashCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: operator()(const HPacker::Header& h1, const HeaderAndHashCode& h2)
      const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - operator
    linkageType: ''
    returnType: bool
    signature: bool operator()(const HPacker::Header& h1, const HeaderAndHashCode&
      h2) const
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/details/hpack.cpp:73,1
    - Dst: brpc::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:76,1
    - Dst: _start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:77,1
    - Dst: _add_times
      Src: /src/brpc/src/brpc/details/hpack.cpp:78,1
    - Dst: _size
      Src: /src/brpc/src/brpc/details/hpack.cpp:79,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:85,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/details/hpack.cpp:88,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:92,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:93,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:103,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:104,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    - Dst: brpc::start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    - Dst: name::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/hpack.cpp:124,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:125,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:126,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:127,1
    - Dst: brpc::RemoveHeaderFromIndexes
      Src: /src/brpc/src/brpc/details/hpack.cpp:129,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/hpack.cpp:132,1
    - Dst: Header*::value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:136,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:137,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:138,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:140,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:143,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:144,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:146,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: Header*::name::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:152,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:154,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:155,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: full
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/hpack.cpp:167,1
    - Dst: Header*::value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:180,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:191,1
    - Dst: butil::BoundedQueue::BoundedQueue
      Src: /src/brpc/src/brpc/details/hpack.cpp:206,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 87
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 218
    functionName: brpc::IndexTable
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 1
    functionsReached:
    - brpc::PopHeader
    - name::size
    - _start_index
    - brpc::empty
    - Header*::name::empty
    - brpc::RemoveHeaderFromIndexes
    - Header*::value::empty
    - butil::BoundedQueue::BoundedQueue
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::start_index
    - BAIDU_UNLIKELY
    - value::size
    - LOG
    - brpc::HeaderSize
    - _size
    - push
    - pop
    - erase
    - CHECK
    - brpc::size
    - _add_times
    - full
    - DCHECK_LE
    - DCHECK
    - brpc::IndexTable
    - seek
    - bottom
    - top
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT IndexTable
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: ~IndexTable()
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IndexTable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:85,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/details/hpack.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: brpc::HeaderAt
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - bottom
    linkageType: ''
    returnType: Header
    signature: Header * HeaderAt(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:92,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:93,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - HeaderAndHashCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 91
    functionDepth: 2
    functionLinenumber: 91
    functionLinenumberEnd: 100
    functionName: brpc::GetIndexOfHeader
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - seek
    - DCHECK_LE
    - DCHECK
    - brpc::size
    linkageType: ''
    returnType: int
    signature: int GetIndexOfHeader(const HeaderAndHashCode& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:103,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:104,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 111
    functionName: brpc::GetIndexOfName
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - seek
    - DCHECK_LE
    - DCHECK
    - brpc::size
    linkageType: ''
    returnType: int
    signature: int GetIndexOfName(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: brpc::empty
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: brpc::start_index
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int start_index() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: brpc::end_index
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::start_index
    - brpc::size
    linkageType: ''
    returnType: int
    signature: int end_index() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 120
    functionName: brpc::HeaderSize
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 1
    functionsReached:
    - value::size
    - name::size
    linkageType: ''
    returnType: size_t
    signature: size_t HeaderSize(const Header& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/hpack.cpp:124,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:125,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:126,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:127,1
    - Dst: brpc::RemoveHeaderFromIndexes
      Src: /src/brpc/src/brpc/details/hpack.cpp:129,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/hpack.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 122
    functionDepth: 2
    functionLinenumber: 122
    functionLinenumberEnd: 133
    functionName: brpc::PopHeader
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 1
    functionsReached:
    - DCHECK_LE
    - brpc::RemoveHeaderFromIndexes
    - DCHECK
    - top
    - pop
    - brpc::size
    - brpc::empty
    - brpc::HeaderSize
    linkageType: ''
    returnType: void
    signature: void PopHeader()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:136,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:137,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:138,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:140,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:143,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:144,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:146,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - ' h'
    - expected_id
    argTypes:
    - Header
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 148
    functionName: brpc::RemoveHeaderFromIndexes
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 2
    functionsReached:
    - seek
    - erase
    - value::empty
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RemoveHeaderFromIndexes(const Header& h, uint64_t expected_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: name::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:152,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:154,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:155,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: full
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/hpack.cpp:167,1
    - Dst: value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:172,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 150
    functionDepth: 3
    functionLinenumber: 150
    functionLinenumberEnd: 177
    functionName: brpc::AddHeader
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::PopHeader
    - name::empty
    - DCHECK
    - push
    - CHECK
    - value::empty
    - brpc::empty
    - full
    - brpc::HeaderSize
    linkageType: ''
    returnType: void
    signature: void AddHeader(const Header& h)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:180,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:191,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - new_max_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 179
    functionDepth: 3
    functionLinenumber: 179
    functionLinenumberEnd: 195
    functionName: brpc::ResetMaxSize
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::PopHeader
    - LOG
    linkageType: ''
    returnType: void
    signature: void ResetMaxSize(size_t new_max_size)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/details/hpack.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:233,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/hpack.cpp:239,1
    - Dst: init
      Src: /src/brpc/src/brpc/details/hpack.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:244,1
    - Dst: init
      Src: /src/brpc/src/brpc/details/hpack.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:247,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:256,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - IndexTableOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 260
    functionName: brpc::IndexTable::Init
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - swap
    - AddHeader
    - malloc
    - init
    - LOG
    linkageType: ''
    returnType: int
    signature: int IndexTable::Init(const IndexTableOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:268,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:269,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 272
    functionName: brpc::IndexTable::Print
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void IndexTable::Print(std::ostream& os) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/details/hpack.cpp:281,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:293,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:301,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:302,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:303,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:305,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:307,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:308,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:309,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:311,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:317,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:324,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 280
    functionDepth: 2
    functionLinenumber: 280
    functionLinenumberEnd: 334
    functionName: brpc::HuffmanTree
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::AllocNode
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::node
    - push_back
    - CHECK_EQ
    - brpc::size
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT HuffmanTree
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 294
    functionName: brpc::HuffmanTree
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void HuffmanTree()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:301,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:302,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:303,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:305,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:307,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:308,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:309,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:311,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:317,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - value
    - ' code'
    argTypes:
    - int32_t
    - HuffmanCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 318
    functionName: brpc::AddLeafNode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - brpc::AllocNode
    - brpc::node
    linkageType: ''
    returnType: void
    signature: void AddLeafNode(int32_t value, const HuffmanCode& code)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:324,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - NodeId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 320
    functionDepth: 2
    functionLinenumber: 320
    functionLinenumberEnd: 328
    functionName: brpc::node
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 2
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: HuffmanNode
    signature: HuffmanNode * node(NodeId id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:337,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 336
    functionDepth: 2
    functionLinenumber: 336
    functionLinenumberEnd: 341
    functionName: brpc::AllocNode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 2
    functionsReached:
    - push_back
    - brpc::size
    linkageType: ''
    returnType: NodeId
    signature: NodeId AllocNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: brpc::IndexTableOptions
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IndexTableOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CaseIgnoredHasher
      Src: /src/brpc/src/brpc/details/hpack.cpp:54,1
    - Dst: butil::DefaultHasher<std::string>
      Src: /src/brpc/src/brpc/details/hpack.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - HPacker::Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: operator()(const HPacker::Header& h) const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::DefaultHasher<std::string>
    - butil::CaseIgnoredHasher
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const HPacker::Header& h) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - HeaderAndHashCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: operator()(const HeaderAndHashCode& h) const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const HeaderAndHashCode& h) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CaseIgnoredEqual
      Src: /src/brpc/src/brpc/details/hpack.cpp:64,1
    - Dst: butil::DefaultEqualTo<std::string>
      Src: /src/brpc/src/brpc/details/hpack.cpp:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' h1'
    - ' h2'
    argTypes:
    - HPacker::Header
    - HPacker::Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: operator()(const HPacker::Header& h1, const HPacker::Header& h2)
      const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::CaseIgnoredEqual
    - butil::DefaultEqualTo<std::string>
    linkageType: ''
    returnType: bool
    signature: bool operator()(const HPacker::Header& h1, const HPacker::Header& h2)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: operator
      Src: /src/brpc/src/brpc/details/hpack.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' h1'
    - ' h2'
    argTypes:
    - HPacker::Header
    - HeaderAndHashCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 69
    functionName: operator()(const HPacker::Header& h1, const HeaderAndHashCode& h2)
      const
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - operator
    linkageType: ''
    returnType: bool
    signature: bool operator()(const HPacker::Header& h1, const HeaderAndHashCode&
      h2) const
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/details/hpack.cpp:73,1
    - Dst: brpc::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:76,1
    - Dst: _start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:77,1
    - Dst: _add_times
      Src: /src/brpc/src/brpc/details/hpack.cpp:78,1
    - Dst: _size
      Src: /src/brpc/src/brpc/details/hpack.cpp:79,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:85,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/details/hpack.cpp:88,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:92,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:93,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:103,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:104,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    - Dst: brpc::start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    - Dst: name::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/hpack.cpp:124,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:125,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:126,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:127,1
    - Dst: brpc::RemoveHeaderFromIndexes
      Src: /src/brpc/src/brpc/details/hpack.cpp:129,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/hpack.cpp:132,1
    - Dst: Header*::value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:136,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:137,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:138,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:140,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:143,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:144,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:146,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: Header*::name::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:152,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:154,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:155,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: full
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/hpack.cpp:167,1
    - Dst: Header*::value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:180,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:191,1
    - Dst: butil::BoundedQueue::BoundedQueue
      Src: /src/brpc/src/brpc/details/hpack.cpp:206,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 87
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 72
    functionDepth: 3
    functionLinenumber: 72
    functionLinenumberEnd: 218
    functionName: brpc::IndexTable
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 2
    functionsReached:
    - brpc::PopHeader
    - name::size
    - _start_index
    - brpc::empty
    - Header*::name::empty
    - brpc::RemoveHeaderFromIndexes
    - Header*::value::empty
    - butil::BoundedQueue::BoundedQueue
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::start_index
    - BAIDU_UNLIKELY
    - value::size
    - LOG
    - brpc::HeaderSize
    - _size
    - push
    - pop
    - erase
    - CHECK
    - brpc::size
    - _add_times
    - full
    - DCHECK_LE
    - DCHECK
    - brpc::IndexTable
    - seek
    - bottom
    - top
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT IndexTable
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: ~IndexTable()
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IndexTable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:85,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/details/hpack.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: brpc::HeaderAt
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - bottom
    linkageType: ''
    returnType: Header
    signature: Header * HeaderAt(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:92,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:93,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - HeaderAndHashCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 91
    functionDepth: 2
    functionLinenumber: 91
    functionLinenumberEnd: 100
    functionName: brpc::GetIndexOfHeader
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - seek
    - DCHECK_LE
    - DCHECK
    - brpc::size
    linkageType: ''
    returnType: int
    signature: int GetIndexOfHeader(const HeaderAndHashCode& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:103,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:104,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 111
    functionName: brpc::GetIndexOfName
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - seek
    - DCHECK_LE
    - DCHECK
    - brpc::size
    linkageType: ''
    returnType: int
    signature: int GetIndexOfName(const std::string& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: brpc::empty
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: brpc::start_index
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int start_index() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 2
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: brpc::end_index
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::start_index
    - brpc::size
    linkageType: ''
    returnType: int
    signature: int end_index() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: name::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 120
    functionName: brpc::HeaderSize
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 4
    functionsReached:
    - value::size
    - name::size
    linkageType: ''
    returnType: size_t
    signature: size_t HeaderSize(const Header& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:123,1
    - Dst: top
      Src: /src/brpc/src/brpc/details/hpack.cpp:124,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:125,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/brpc/details/hpack.cpp:126,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:127,1
    - Dst: brpc::RemoveHeaderFromIndexes
      Src: /src/brpc/src/brpc/details/hpack.cpp:129,1
    - Dst: pop
      Src: /src/brpc/src/brpc/details/hpack.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 122
    functionDepth: 2
    functionLinenumber: 122
    functionLinenumberEnd: 133
    functionName: brpc::PopHeader
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 4
    functionsReached:
    - DCHECK_LE
    - brpc::RemoveHeaderFromIndexes
    - DCHECK
    - top
    - pop
    - brpc::size
    - brpc::empty
    - brpc::HeaderSize
    linkageType: ''
    returnType: void
    signature: void PopHeader()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:136,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:137,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:138,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:140,1
    - Dst: seek
      Src: /src/brpc/src/brpc/details/hpack.cpp:143,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:144,1
    - Dst: erase
      Src: /src/brpc/src/brpc/details/hpack.cpp:146,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - ' h'
    - expected_id
    argTypes:
    - Header
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 148
    functionName: brpc::RemoveHeaderFromIndexes
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 4
    functionsReached:
    - seek
    - erase
    - value::empty
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RemoveHeaderFromIndexes(const Header& h, uint64_t expected_id)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: name::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:151,1
    - Dst: brpc::HeaderSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:152,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:154,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:155,1
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:161,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: full
      Src: /src/brpc/src/brpc/details/hpack.cpp:166,1
    - Dst: push
      Src: /src/brpc/src/brpc/details/hpack.cpp:167,1
    - Dst: value::empty
      Src: /src/brpc/src/brpc/details/hpack.cpp:172,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 150
    functionDepth: 3
    functionLinenumber: 150
    functionLinenumberEnd: 177
    functionName: brpc::AddHeader
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::PopHeader
    - name::empty
    - DCHECK
    - push
    - CHECK
    - value::empty
    - brpc::empty
    - full
    - brpc::HeaderSize
    linkageType: ''
    returnType: void
    signature: void AddHeader(const Header& h)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:180,1
    - Dst: brpc::PopHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:191,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - new_max_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 179
    functionDepth: 3
    functionLinenumber: 179
    functionLinenumberEnd: 195
    functionName: brpc::ResetMaxSize
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::PopHeader
    - LOG
    linkageType: ''
    returnType: void
    signature: void ResetMaxSize(size_t new_max_size)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/details/hpack.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:233,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/hpack.cpp:239,1
    - Dst: init
      Src: /src/brpc/src/brpc/details/hpack.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:244,1
    - Dst: init
      Src: /src/brpc/src/brpc/details/hpack.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:247,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:256,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - IndexTableOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 260
    functionName: brpc::IndexTable::Init
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - swap
    - AddHeader
    - malloc
    - init
    - LOG
    linkageType: ''
    returnType: int
    signature: int IndexTable::Init(const IndexTableOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:268,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:269,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 272
    functionName: brpc::IndexTable::Print
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: void
    signature: void IndexTable::Print(std::ostream& os) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/details/hpack.cpp:281,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:293,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:301,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:302,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:303,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:305,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:307,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:308,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:309,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:311,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:317,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:324,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 280
    functionDepth: 3
    functionLinenumber: 280
    functionLinenumberEnd: 334
    functionName: brpc::HuffmanTree
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - brpc::AllocNode
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::node
    - push_back
    - CHECK_EQ
    - brpc::size
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT HuffmanTree
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 294
    functionName: brpc::HuffmanTree
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - push_back
    linkageType: ''
    returnType: void
    signature: void HuffmanTree()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:299,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:301,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:302,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:303,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:305,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:307,1
    - Dst: brpc::AllocNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:308,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:309,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:311,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:314,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:315,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:316,1
    - Dst: brpc::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:317,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - value
    - ' code'
    argTypes:
    - int32_t
    - HuffmanCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 296
    functionDepth: 3
    functionLinenumber: 296
    functionLinenumberEnd: 318
    functionName: brpc::AddLeafNode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - brpc::AllocNode
    - brpc::node
    linkageType: ''
    returnType: void
    signature: void AddLeafNode(int32_t value, const HuffmanCode& code)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:324,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - id
    argTypes:
    - NodeId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 320
    functionDepth: 2
    functionLinenumber: 320
    functionLinenumberEnd: 328
    functionName: brpc::node
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 4
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: HuffmanNode
    signature: HuffmanNode * node(NodeId id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:337,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:339,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 336
    functionDepth: 2
    functionLinenumber: 336
    functionLinenumberEnd: 341
    functionName: brpc::AllocNode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 4
    functionsReached:
    - push_back
    - brpc::size
    linkageType: ''
    returnType: NodeId
    signature: NodeId AllocNode()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - out
    - table
    argTypes:
    - butil::IOBufAppender*
    - HuffmanCode*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 349
    functionDepth: 0
    functionLinenumber: 349
    functionLinenumberEnd: 355
    functionName: HuffmanEncoder::HuffmanEncoder
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HuffmanEncoder(butil::IOBufAppender* out, const HuffmanCode* table)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/hpack.cpp:361,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:362,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:370,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - byte
    argTypes:
    - unsigned char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 375
    functionName: HuffmanEncoder::Encode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - std::min
    - static_cast<uint8_t>
    linkageType: ''
    returnType: void
    signature: void Encode(unsigned char byte)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_LT
      Src: /src/brpc/src/brpc/details/hpack.cpp:381,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 391
    functionName: HuffmanEncoder::EndStream
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - DCHECK_LT
    linkageType: ''
    returnType: void
    signature: void EndStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 393
    functionName: HuffmanEncoder::out_bytes
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t out_bytes() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HuffmanTree*::node
      Src: /src/brpc/src/brpc/details/hpack.cpp:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - out
    - tree
    argTypes:
    - std::string*
    - HuffmanTree*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 413
    functionName: HuffmanDecoder::HuffmanDecoder
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - HuffmanTree*::node
    linkageType: ''
    returnType: void
    signature: void HuffmanDecoder(std::string* out, const HuffmanTree* tree)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: node
      Src: /src/brpc/src/brpc/details/hpack.cpp:417,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:419,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:423,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:424,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:427,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:427,1
    - Dst: node
      Src: /src/brpc/src/brpc/details/hpack.cpp:428,1
    - Dst: node
      Src: /src/brpc/src/brpc/details/hpack.cpp:435,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:436,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:437,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/details/hpack.cpp:441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:442,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:445,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:445,1
    - Dst: node
      Src: /src/brpc/src/brpc/details/hpack.cpp:446,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 1
    argNames:
    - byte
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 456
    functionName: HuffmanDecoder::Decode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - node
    - push_back
    - static_cast<uint8_t>
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: int
    signature: int Decode(uint8_t byte)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 457
    functionDepth: 0
    functionLinenumber: 457
    functionLinenumberEnd: 467
    functionName: HuffmanDecoder::EndStream
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int EndStream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:484,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:489,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:493,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:495,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 4
    argNames:
    - out
    - msb
    - prefix_size
    - value
    argTypes:
    - butil::IOBufAppender*
    - uint8_t
    - uint8_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 496
    functionName: EncodeInteger
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender*::push_back
    - static_cast<uint8_t>
    linkageType: ''
    returnType: void
    signature: "void EncodeInteger(butil::IOBufAppender* out, uint8_t msb,\n                          uint8_t
      prefix_size, uint32_t value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HuffmanTree::HuffmanTree
      Src: /src/brpc/src/brpc/details/hpack.cpp:504,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/details/hpack.cpp:505,1
    - Dst: AddLeafNode
      Src: /src/brpc/src/brpc/details/hpack.cpp:506,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/details/hpack.cpp:511,1
    - Dst: IndexTable::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:514,1
    - Dst: Init
      Src: /src/brpc/src/brpc/details/hpack.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:516,1
    - Dst: exit
      Src: /src/brpc/src/brpc/details/hpack.cpp:517,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 519
    functionName: CreateStaticTableOrDie
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - Init
    - exit
    - HuffmanTree::HuffmanTree
    - AddLeafNode
    - LOG
    - IndexTable::IndexTable
    linkageType: ''
    returnType: void
    signature: void CreateStaticTableOrDie()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/hpack.cpp:522,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:523,1
    - Dst: exit
      Src: /src/brpc/src/brpc/details/hpack.cpp:524,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 526
    functionName: CreateStaticTableOnceOrDie
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - PLOG
    - exit
    linkageType: ''
    returnType: void
    signature: void CreateStaticTableOnceOrDie()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:540,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:558,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:562,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 3
    argNames:
    - ' iter'
    - prefix_size
    - value
    argTypes:
    - butil::IOBufBytesIterator
    - uint8_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 531
    functionDepth: 1
    functionLinenumber: 531
    functionLinenumberEnd: 565
    functionName: DecodeInteger
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - static_cast<uint64_t>
    - static_cast<uint32_t>
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t DecodeInteger(butil::IOBufBytesIterator& iter,\n                             uint8_t
      prefix_size, uint32_t* value)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:571,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:571,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:573,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:574,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:574,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/details/hpack.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:584,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:585,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:588,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:592,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:595,1
    - Dst: HuffmanEncoder::Encode
      Src: /src/brpc/src/brpc/details/hpack.cpp:596,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:596,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:599,1
    - Dst: HuffmanEncoder::Encode
      Src: /src/brpc/src/brpc/details/hpack.cpp:600,1
    - Dst: HuffmanEncoder::EndStream
      Src: /src/brpc/src/brpc/details/hpack.cpp:603,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 3
    argNames:
    - out
    - ' s'
    - huffman_encoding
    argTypes:
    - butil::IOBufAppender*
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 568
    functionDepth: 2
    functionLinenumber: 568
    functionLinenumberEnd: 604
    functionName: EncodeString
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender*::push_back
    - EncodeInteger
    - HuffmanEncoder::Encode
    - butil::ascii_tolower
    - HuffmanEncoder::EndStream
    - size
    - butil::IOBufAppender*::append
    linkageType: ''
    returnType: void
    signature: "void EncodeString(butil::IOBufAppender* out, const std::string& s,\n
      \                        bool huffman_encoding)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: DecodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:612,1
    - Dst: bytes_left
      Src: /src/brpc/src/brpc/details/hpack.cpp:616,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/details/hpack.cpp:620,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/details/hpack.cpp:622,1
    - Dst: HuffmanDecoder::Decode
      Src: /src/brpc/src/brpc/details/hpack.cpp:627,1
    - Dst: HuffmanDecoder::EndStream
      Src: /src/brpc/src/brpc/details/hpack.cpp:631,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 2
    argNames:
    - ' iter'
    - out
    argTypes:
    - butil::IOBufBytesIterator
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 606
    functionDepth: 2
    functionLinenumber: 606
    functionLinenumberEnd: 635
    functionName: DecodeString
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - copy_and_forward
    - HuffmanDecoder::Decode
    - HuffmanDecoder::EndStream
    - DecodeInteger
    - bytes_left
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t DecodeString(butil::IOBufBytesIterator& iter, std::string*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateStaticTableOnceOrDie
      Src: /src/brpc/src/brpc/details/hpack.cpp:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 637
    functionDepth: 2
    functionLinenumber: 637
    functionLinenumberEnd: 641
    functionName: HPacker::HPacker
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - CreateStaticTableOnceOrDie
    linkageType: ''
    returnType: void
    signature: void HPacker::HPacker()
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 643
    functionDepth: 0
    functionLinenumber: 643
    functionLinenumberEnd: 652
    functionName: HPacker::~HPacker()
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HPacker::~HPacker()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:655,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:656,1
    - Dst: end_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:659,1
    - Dst: IndexTable::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:661,1
    - Dst: HPacker::Init
      Src: /src/brpc/src/brpc/details/hpack.cpp:662,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:663,1
    - Dst: end_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:668,1
    - Dst: IndexTable::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:670,1
    - Dst: HPacker::Init
      Src: /src/brpc/src/brpc/details/hpack.cpp:671,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 1
    argNames:
    - max_table_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 654
    functionDepth: 1
    functionLinenumber: 654
    functionLinenumberEnd: 676
    functionName: HPacker::Init
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 10
    functionsReached:
    - end_index
    - HPacker::Init
    - CHECK
    - LOG
    - IndexTable::IndexTable
    linkageType: ''
    returnType: int
    signature: int HPacker::Init(size_t max_table_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HeaderHasher
      Src: /src/brpc/src/brpc/details/hpack.cpp:680,1
    - Dst: GetIndexOfHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:681,1
    - Dst: GetIndexOfHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:685,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 686
    functionName: HPacker::FindHeaderFromIndexTable
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - HeaderHasher
    - GetIndexOfHeader
    linkageType: ''
    returnType: int
    signature: int HPacker::FindHeaderFromIndexTable(const Header& h) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetIndexOfName
      Src: /src/brpc/src/brpc/details/hpack.cpp:689,1
    - Dst: GetIndexOfName
      Src: /src/brpc/src/brpc/details/hpack.cpp:693,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 688
    functionDepth: 0
    functionLinenumber: 688
    functionLinenumberEnd: 694
    functionName: HPacker::FindNameFromIndexTable
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - GetIndexOfName
    linkageType: ''
    returnType: int
    signature: int HPacker::FindNameFromIndexTable(const std::string& name) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: HPacker::FindHeaderFromIndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:699,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:702,1
    - Dst: HPacker::FindNameFromIndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:706,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:709,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:713,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:716,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:719,1
    - Dst: EncodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:723,1
    - Dst: EncodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:725,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 3
    argNames:
    - out
    - ' header'
    - ' options'
    argTypes:
    - butil::IOBufAppender*
    - Header
    - HPackOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 696
    functionDepth: 3
    functionLinenumber: 696
    functionLinenumberEnd: 726
    functionName: HPacker::Encode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 10
    functionsReached:
    - EncodeInteger
    - EncodeString
    - HPacker::FindNameFromIndexTable
    - HPacker::FindHeaderFromIndexTable
    - AddHeader
    linkageType: ''
    returnType: void
    signature: "void HPacker::Encode(butil::IOBufAppender* out, const Header& header,\n
      \                    const HPackOptions& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:729,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:730,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:730,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 728
    functionDepth: 1
    functionLinenumber: 728
    functionLinenumberEnd: 731
    functionName: HPacker::HeaderAt
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 1
    functionsReached:
    - HPacker::HeaderAt
    - start_index
    linkageType: ''
    returnType: HPacker::Header
    signature: HPacker::Header * HPacker::HeaderAt(int index) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DecodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:736,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:739,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:743,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:745,1
    - Dst: DecodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:750,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:752,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:755,1
    - Dst: DecodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:757,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:759,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 3
    argNames:
    - ' iter'
    - h
    - prefix_size
    argTypes:
    - butil::IOBufBytesIterator
    - Header*
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 733
    functionDepth: 3
    functionLinenumber: 733
    functionLinenumberEnd: 763
    functionName: HPacker::DecodeWithKnownPrefix
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - DecodeString
    - DecodeInteger
    - HPacker::HeaderAt
    - LOG
    - tolower
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t HPacker::DecodeWithKnownPrefix(\n    butil::IOBufBytesIterator&
      iter, Header* h, uint8_t prefix_size) const"
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: DecodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:784,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:788,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:790,1
    - Dst: HPacker::DecodeWithKnownPrefix
      Src: /src/brpc/src/brpc/details/hpack.cpp:804,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:808,1
    - Dst: DecodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:818,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:823,1
    - Dst: ResetMaxSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:826,1
    - Dst: HPacker::Decode
      Src: /src/brpc/src/brpc/details/hpack.cpp:827,1
    - Dst: HPacker::DecodeWithKnownPrefix
      Src: /src/brpc/src/brpc/details/hpack.cpp:832,1
    - Dst: HPacker::DecodeWithKnownPrefix
      Src: /src/brpc/src/brpc/details/hpack.cpp:837,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:840,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 55
    argCount: 2
    argNames:
    - ' iter'
    - h
    argTypes:
    - butil::IOBufBytesIterator
    - Header*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 765
    functionDepth: 4
    functionLinenumber: 765
    functionLinenumberEnd: 843
    functionName: HPacker::Decode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 12
    functionsReached:
    - HPacker::Decode
    - AddHeader
    - HPacker::DecodeWithKnownPrefix
    - ResetMaxSize
    - CHECK
    - DecodeInteger
    - HPacker::HeaderAt
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t HPacker::Decode(butil::IOBufBytesIterator& iter, Header* h)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/details/hpack.cpp:852,1
    - Dst: Print
      Src: /src/brpc/src/brpc/details/hpack.cpp:858,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 865
      start: 845
    functionDepth: 0
    functionLinenumber: 845
    functionLinenumberEnd: 865
    functionName: HPacker::Describe
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: void HPacker::Describe(std::ostream& os, const DescribeOptions& opt)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/details/hpack.cpp:868,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:869,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:871,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 876
      start: 867
    functionDepth: 1
    functionLinenumber: 867
    functionLinenumberEnd: 876
    functionName: tolower
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 9
    functionsReached:
    - std::string*::c_str
    - butil::ascii_tolower
    - std::string*::size
    linkageType: ''
    returnType: void
    signature: void tolower(std::string* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - a
    - ','
    - b
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 38
    functionName: MIN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MIN(a,b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - a
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: ARRAY_SIZE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 141
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ARRAY_SIZE(a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - a
    - ','
    - i
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: BIT_AT
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BIT_AT(a, i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - a
    - ','
    - i
    - ','
    - v
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: ELEM_AT
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ELEM_AT(a, i, v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - e
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: SET_ERRNO
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SET_ERRNO(e)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - FOR
    - ','
    - ER
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 70
    functionName: CALLBACK_NOTIFY_
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CALLBACK_NOTIFY_(FOR, ER)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FOR
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: CALLBACK_NOTIFY
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CALLBACK_NOTIFY(FOR)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FOR
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 82
    functionName: CALLBACK_NOTIFY_NOADVANCE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CALLBACK_NOTIFY_NOADVANCE(FOR)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - FOR
    - ','
    - LEN
    - ','
    - ER
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 94
    functionName: CALLBACK_DATA_
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CALLBACK_DATA_(FOR, LEN, ER)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FOR
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: CALLBACK_DATA
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CALLBACK_DATA(FOR)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FOR
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: CALLBACK_DATA_NOADVANCE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CALLBACK_DATA_NOADVANCE(FOR)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FOR
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 118
    functionName: MARK
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MARK(FOR)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - v
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 196
    functionName: T
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 383
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: T(v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - v
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 198
    functionName: T
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 383
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: T(v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 319
    functionName: brpc::is_failed_after_queries
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int is_failed_after_queries(const http_parser* parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    functionName: brpc::is_failed_after_http_version
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int is_failed_after_http_version(const http_parser* parser)
  - BBCount: 63
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 128
    argCount: 1
    argNames:
    - state
    argTypes:
    - unsigned int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 391
    functionName: brpc::http_parser_state_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * http_parser_state_name(unsigned int state)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - state
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 394
    functionName: PARSING_HEADER
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PARSING_HEADER(state)
  - BBCount: 20
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 42
    argCount: 1
    argNames:
    - header_state
    argTypes:
    - unsigned int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 448
    functionName: brpc::http_parser_header_state_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * http_parser_header_state_name(unsigned int header_state)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - type
    argTypes:
    - enum http_parser_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 457
    functionName: brpc::http_parser_type_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * http_parser_type_name(enum http_parser_type type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 477
    functionName: LOWER
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOWER(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 478
    functionName: IS_ALPHA
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_ALPHA(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 479
    functionName: IS_NUM
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_NUM(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 480
    functionName: IS_ALPHANUM
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_ALPHANUM(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 481
    functionName: IS_HEX
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_HEX(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 484
    functionName: IS_MARK
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_MARK(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 487
    functionName: IS_USERINFO_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_USERINFO_CHAR(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 491
    functionDepth: 0
    functionLinenumber: 491
    functionLinenumberEnd: 492
    functionName: TOKEN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TOKEN(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 494
    functionName: IS_HOST_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_HOST_CHAR(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 499
    functionName: IS_URL_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_URL_CHAR(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 501
    functionName: brpc::is_url_char
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached:
    - IS_URL_CHAR
    linkageType: ''
    returnType: bool
    signature: bool is_url_char(char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ch
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 511
    functionName: IS_HEADER_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_HEADER_CHAR(ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 520
    functionName: STRICT_CHECK
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: STRICT_CHECK(cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 521
    functionName: NEW_MESSAGE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NEW_MESSAGE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 524
    functionName: NEW_MESSAGE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NEW_MESSAGE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - s
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 528
    functionDepth: 0
    functionLinenumber: 528
    functionLinenumberEnd: 529
    functionName: HTTP_STRERROR_GEN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_STRERROR_GEN(n, s)
  - BBCount: 39
    BranchProfiles: []
    Callsites:
    - Dst: IS_ALPHA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:573,1
    - Dst: IS_ALPHA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:580,1
    - Dst: IS_USERINFO_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:624,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:631,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:647,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:660,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:672,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 101
    argCount: 2
    argNames:
    - s
    - ch
    argTypes:
    - enum state
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 688
    functionName: brpc::parse_url_char
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - IS_URL_CHAR
    - IS_USERINFO_CHAR
    - IS_ALPHA
    linkageType: ''
    returnType: enum state
    signature: enum state parse_url_char(enum state s, const char ch)
  - BBCount: 300
    BranchProfiles: []
    Callsites:
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:707,1
    - Dst: CALLBACK_NOTIFY_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:717,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:727,1
    - Dst: PARSING_HEADER
      Src: /src/brpc/src/brpc/details/http_parser.cpp:759,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:773,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:788,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:802,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:818,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:845,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:849,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:854,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:859,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:864,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:869,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:875,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:891,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:892,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:900,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:909,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:910,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:926,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:927,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:935,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:944,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:949,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:959,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:971,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:981,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1000,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1009,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1015,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1022,1
    - Dst: IS_ALPHA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1034,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1035,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1058,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1063,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1072,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1087,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1102,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1109,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1120,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1128,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1135,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1139,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1145,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1157,1
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1167,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1169,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1188,1
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1191,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1193,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1219,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1223,1
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1226,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1228,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1244,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1250,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1255,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1260,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1265,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1272,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1288,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1289,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1297,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1306,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1307,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1330,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1331,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1339,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1350,1
    - Dst: TOKEN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1372,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1375,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1379,1
    - Dst: TOKEN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1410,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1511,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1519,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1523,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1544,1
    - Dst: LOWER
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1549,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1571,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1572,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1577,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1609,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1615,1
    - Dst: IS_HEADER_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1619,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1620,1
    - Dst: LOWER
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1624,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1632,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1641,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1642,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1652,1
    - Dst: TOKEN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1665,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1741,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1775,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1787,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1789,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1796,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1800,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1801,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1814,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1818,1
    - Dst: http_parser_settings*::on_headers_complete
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1835,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1844,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1849,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1858,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1864,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1865,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1870,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1871,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1884,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1898,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1899,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1905,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1907,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1908,1
    - Dst: MIN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1921,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1924,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1932,1
    - Dst: CALLBACK_DATA_
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1948,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1957,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1963,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1964,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1969,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1970,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1974,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1987,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2002,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2012,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2022,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2033,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2034,1
    - Dst: MIN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2049,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2052,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2053,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2059,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2071,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2072,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2073,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2075,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2079,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2080,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2086,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2087,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2102,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2108,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2109,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2110,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2111,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2112,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2117,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2118,1
    CyclomaticComplexity: 391
    EdgeCount: 391
    ICount: 1135
    argCount: 4
    argNames:
    - parser
    - settings
    - data
    - len
    argTypes:
    - http_parser*
    - http_parser_settings*
    - char*
    - size_t
    assertStmts:
    - condition: "(parser->content_length != 0\n            && parser->content_length
        != ULLONG_MAX)"
      pos:
        line_end: 2053
        line_start: 2052
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 1986
        line_start: 1986
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (0 && "Shouldn't get here.")
      pos:
        line_end: 1631
        line_start: 1631
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (0 && "unhandled state")
      pos:
        line_end: 2085
        line_start: 2085
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: "(((header_field_mark ? 1 : 0) +\n          (header_value_mark ?
        1 : 0) +\n          (url_mark ? 1 : 0)  +\n          (body_mark ? 1 : 0) +\n
        \         (status_mark ? 1 : 0)) <= 1)"
      pos:
        line_end: 2105
        line_start: 2101
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2021
        line_start: 2021
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2051
        line_start: 2051
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2078
        line_start: 2078
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 1969
        line_start: 1969
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2032
        line_start: 2032
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->content_length == 0)
      pos:
        line_end: 2071
        line_start: 2071
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: "(parser->content_length != 0\n            && parser->content_length
        != ULLONG_MAX)"
      pos:
        line_end: 1924
        line_start: 1923
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2070
        line_start: 2070
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (0 && "Unknown header_state")
      pos:
        line_end: 1510
        line_start: 1510
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->nread == 1)
      pos:
        line_end: 1968
        line_start: 1968
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2122
      start: 690
    functionDepth: 2
    functionLinenumber: 690
    functionLinenumberEnd: 2122
    functionName: brpc::http_parser_execute
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::parse_url_char
    - PARSING_HEADER
    - CALLBACK_NOTIFY
    - CALLBACK_NOTIFY_NOADVANCE
    - assert
    - CALLBACK_DATA_
    - http_parser_settings*::on_headers_complete
    - MARK
    - IS_ALPHA
    - IS_HEADER_CHAR
    - STRICT_CHECK
    - CALLBACK_DATA_NOADVANCE
    - SET_ERRNO
    - MIN
    - IS_NUM
    - NEW_MESSAGE
    - TOKEN
    - HTTP_PARSER_ERRNO
    - CALLBACK_DATA
    - brpc::http_message_needs_eof
    - LOWER
    linkageType: ''
    returnType: size_t
    signature: "size_t http_parser_execute (http_parser *parser,\n                            const
      http_parser_settings *settings,\n                            const char *data,\n
      \                           size_t len)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2152
      start: 2126
    functionDepth: 0
    functionLinenumber: 2126
    functionLinenumberEnd: 2152
    functionName: brpc::http_message_needs_eof
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int http_message_needs_eof (const http_parser *parser)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2170,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2171
      start: 2155
    functionDepth: 1
    functionLinenumber: 2155
    functionLinenumberEnd: 2171
    functionName: brpc::http_should_keep_alive
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::http_message_needs_eof
    linkageType: ''
    returnType: int
    signature: int http_should_keep_alive (const http_parser *parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ELEM_AT
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - enum http_method
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2178
      start: 2174
    functionDepth: 1
    functionLinenumber: 2174
    functionLinenumberEnd: 2178
    functionName: brpc::http_method_str
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - ELEM_AT
    linkageType: ''
    returnType: char
    signature: 'char *

      http_method_str (enum http_method m)'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - parser
    - t
    argTypes:
    - http_parser*
    - enum http_parser_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2190
      start: 2181
    functionDepth: 0
    functionLinenumber: 2181
    functionLinenumberEnd: 2190
    functionName: brpc::http_parser_init
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void http_parser_init (http_parser *parser, enum http_parser_type t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - enum http_errno
    assertStmts:
    - condition: (err < (http_errno)(sizeof(http_strerror_tab)/sizeof(http_strerror_tab[0])))
      pos:
        line_end: 2193
        line_start: 2193
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2196
      start: 2192
    functionDepth: 0
    functionLinenumber: 2192
    functionLinenumberEnd: 2196
    functionName: brpc::http_errno_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: char
    signature: 'char *

      http_errno_name(enum http_errno err)'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - enum http_errno
    assertStmts:
    - condition: (err < (http_errno)(sizeof(http_strerror_tab)/sizeof(http_strerror_tab[0])))
      pos:
        line_end: 2199
        line_start: 2199
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2202
      start: 2198
    functionDepth: 0
    functionLinenumber: 2198
    functionLinenumberEnd: 2202
    functionName: brpc::http_errno_description
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: char
    signature: 'char *

      http_errno_description(enum http_errno err)'
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: IS_USERINFO_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2213,1
    - Dst: IS_HOST_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2223,1
    - Dst: IS_HOST_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2230,1
    - Dst: IS_HEX
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2249,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2257,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 47
    argCount: 2
    argNames:
    - s
    - ch
    argTypes:
    - enum http_host_state
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2267
      start: 2204
    functionDepth: 1
    functionLinenumber: 2204
    functionLinenumberEnd: 2267
    functionName: brpc::http_parse_host_char
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - IS_USERINFO_CHAR
    - IS_HEX
    - IS_NUM
    - IS_HOST_CHAR
    linkageType: ''
    returnType: enum http_host_state
    signature: enum http_host_state http_parse_host_char(enum http_host_state s, const
      char ch)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_parse_host_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2281,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 53
    argCount: 3
    argNames:
    - buf
    - u
    - found_at
    argTypes:
    - char*
    - struct http_parser_url*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2340
      start: 2269
    functionDepth: 2
    functionLinenumber: 2269
    functionLinenumberEnd: 2340
    functionName: brpc::http_parse_host
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::http_parse_host_char
    linkageType: ''
    returnType: int
    signature: int http_parse_host(const char * buf, struct http_parser_url *u, int
      found_at)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2356,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2395,1
    - Dst: brpc::http_parse_host
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2415,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2427,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 60
    argCount: 4
    argNames:
    - buf
    - buflen
    - is_connect
    - u
    argTypes:
    - char*
    - size_t
    - int
    - struct http_parser_url*
    assertStmts:
    - condition: (!"Unexpected state")
      pos:
        line_end: 2394
        line_start: 2394
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2438
      start: 2342
    functionDepth: 3
    functionLinenumber: 2342
    functionLinenumberEnd: 2438
    functionName: brpc::http_parser_parse_url
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::parse_url_char
    - brpc::http_parse_host
    - strtoul
    - assert
    linkageType: ''
    returnType: int
    signature: "int http_parser_parse_url(const char *buf, size_t buflen, int is_connect,\n
      \                     struct http_parser_url *u)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2446,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2447,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2448,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2450,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - parser
    - paused
    argTypes:
    - http_parser*
    - int
    assertStmts:
    - condition: (0 && "Attempting to pause parser in error state")
      pos:
        line_end: 2449
        line_start: 2449
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2452
      start: 2440
    functionDepth: 1
    functionLinenumber: 2440
    functionLinenumberEnd: 2452
    functionName: brpc::http_parser_pause
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - SET_ERRNO
    - assert
    - HTTP_PARSER_ERRNO
    linkageType: ''
    returnType: void
    signature: void http_parser_pause(http_parser *parser, int paused)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - struct http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2457
      start: 2454
    functionDepth: 0
    functionLinenumber: 2454
    functionLinenumberEnd: 2457
    functionName: brpc::http_body_is_final
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int http_body_is_final(const struct http_parser *parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2464
      start: 2459
    functionDepth: 0
    functionLinenumber: 2459
    functionLinenumberEnd: 2464
    functionName: brpc::http_parser_version
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned long
    signature: unsigned long http_parser_version(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - v
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 196
    functionName: T
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 384
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: T(v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - v
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 198
    functionName: T
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 384
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: T(v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 319
    functionName: brpc::is_failed_after_queries
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int is_failed_after_queries(const http_parser* parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    functionName: brpc::is_failed_after_http_version
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int is_failed_after_http_version(const http_parser* parser)
  - BBCount: 63
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 128
    argCount: 1
    argNames:
    - state
    argTypes:
    - unsigned int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 391
    functionName: brpc::http_parser_state_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * http_parser_state_name(unsigned int state)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - state
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 394
    functionName: PARSING_HEADER
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PARSING_HEADER(state)
  - BBCount: 20
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 42
    argCount: 1
    argNames:
    - header_state
    argTypes:
    - unsigned int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 448
    functionName: brpc::http_parser_header_state_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * http_parser_header_state_name(unsigned int header_state)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - type
    argTypes:
    - enum http_parser_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 457
    functionName: brpc::http_parser_type_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * http_parser_type_name(enum http_parser_type type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 477
    functionName: LOWER
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOWER(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 478
    functionName: IS_ALPHA
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_ALPHA(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 479
    functionName: IS_NUM
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_NUM(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 480
    functionName: IS_ALPHANUM
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_ALPHANUM(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 481
    functionName: IS_HEX
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_HEX(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 484
    functionName: IS_MARK
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_MARK(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 487
    functionName: IS_USERINFO_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_USERINFO_CHAR(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 491
    functionDepth: 0
    functionLinenumber: 491
    functionLinenumberEnd: 492
    functionName: TOKEN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TOKEN(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 494
    functionName: IS_HOST_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_HOST_CHAR(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - c
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 499
    functionName: IS_URL_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_URL_CHAR(c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 501
    functionName: brpc::is_url_char
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached:
    - IS_URL_CHAR
    linkageType: ''
    returnType: bool
    signature: bool is_url_char(char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ch
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 511
    functionName: IS_HEADER_CHAR
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: IS_HEADER_CHAR(ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - cond
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 520
    functionName: STRICT_CHECK
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: STRICT_CHECK(cond)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 521
    functionName: NEW_MESSAGE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NEW_MESSAGE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 524
    functionName: NEW_MESSAGE
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NEW_MESSAGE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - s
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 528
    functionDepth: 0
    functionLinenumber: 528
    functionLinenumberEnd: 529
    functionName: HTTP_STRERROR_GEN
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: HTTP_STRERROR_GEN(n, s)
  - BBCount: 39
    BranchProfiles: []
    Callsites:
    - Dst: IS_ALPHA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:573,1
    - Dst: IS_ALPHA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:580,1
    - Dst: IS_USERINFO_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:624,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:631,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:647,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:660,1
    - Dst: IS_URL_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:672,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 101
    argCount: 2
    argNames:
    - s
    - ch
    argTypes:
    - enum state
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 688
    functionName: brpc::parse_url_char
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 2
    functionsReached:
    - IS_URL_CHAR
    - IS_USERINFO_CHAR
    - IS_ALPHA
    linkageType: ''
    returnType: enum state
    signature: enum state parse_url_char(enum state s, const char ch)
  - BBCount: 300
    BranchProfiles: []
    Callsites:
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:707,1
    - Dst: CALLBACK_NOTIFY_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:717,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:727,1
    - Dst: PARSING_HEADER
      Src: /src/brpc/src/brpc/details/http_parser.cpp:759,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:773,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:788,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:802,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:818,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:845,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:849,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:854,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:859,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:864,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:869,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:875,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:891,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:892,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:900,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:909,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:910,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:926,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:927,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:935,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:944,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:949,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:959,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:971,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:981,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1000,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1009,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1015,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1022,1
    - Dst: IS_ALPHA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1034,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1035,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1058,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1063,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1072,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1087,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1102,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1109,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1120,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1128,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1135,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1139,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1145,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1157,1
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1167,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1169,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1188,1
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1191,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1193,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1219,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1223,1
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1226,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1228,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1244,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1250,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1255,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1260,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1265,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1272,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1288,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1289,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1297,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1306,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1307,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1330,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1331,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1339,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1350,1
    - Dst: TOKEN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1372,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1375,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1379,1
    - Dst: TOKEN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1410,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1511,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1519,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1523,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1544,1
    - Dst: LOWER
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1549,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1571,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1572,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1577,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1609,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1615,1
    - Dst: IS_HEADER_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1619,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1620,1
    - Dst: LOWER
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1624,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1632,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1641,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1642,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1652,1
    - Dst: TOKEN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1665,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1741,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1775,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1787,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1789,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1796,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1800,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1801,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1814,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1818,1
    - Dst: http_parser_settings*::on_headers_complete
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1835,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1844,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1849,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1858,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1864,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1865,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1870,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1871,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1884,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1898,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1899,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1905,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1907,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1908,1
    - Dst: MIN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1921,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1924,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1932,1
    - Dst: CALLBACK_DATA_
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1948,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1957,1
    - Dst: NEW_MESSAGE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1963,1
    - Dst: CALLBACK_NOTIFY
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1964,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1969,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1970,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1974,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:1987,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2002,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2012,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2022,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2033,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2034,1
    - Dst: MIN
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2049,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2052,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2053,1
    - Dst: MARK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2059,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2071,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2072,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2073,1
    - Dst: CALLBACK_DATA
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2075,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2079,1
    - Dst: STRICT_CHECK
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2080,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2086,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2087,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2102,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2108,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2109,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2110,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2111,1
    - Dst: CALLBACK_DATA_NOADVANCE
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2112,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2117,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2118,1
    CyclomaticComplexity: 391
    EdgeCount: 391
    ICount: 1135
    argCount: 4
    argNames:
    - parser
    - settings
    - data
    - len
    argTypes:
    - http_parser*
    - http_parser_settings*
    - char*
    - size_t
    assertStmts:
    - condition: "(parser->content_length != 0\n            && parser->content_length
        != ULLONG_MAX)"
      pos:
        line_end: 2053
        line_start: 2052
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 1986
        line_start: 1986
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (0 && "Shouldn't get here.")
      pos:
        line_end: 1631
        line_start: 1631
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (0 && "unhandled state")
      pos:
        line_end: 2085
        line_start: 2085
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: "(((header_field_mark ? 1 : 0) +\n          (header_value_mark ?
        1 : 0) +\n          (url_mark ? 1 : 0)  +\n          (body_mark ? 1 : 0) +\n
        \         (status_mark ? 1 : 0)) <= 1)"
      pos:
        line_end: 2105
        line_start: 2101
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2021
        line_start: 2021
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2051
        line_start: 2051
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2078
        line_start: 2078
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 1969
        line_start: 1969
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2032
        line_start: 2032
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->content_length == 0)
      pos:
        line_end: 2071
        line_start: 2071
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: "(parser->content_length != 0\n            && parser->content_length
        != ULLONG_MAX)"
      pos:
        line_end: 1924
        line_start: 1923
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2070
        line_start: 2070
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (0 && "Unknown header_state")
      pos:
        line_end: 1510
        line_start: 1510
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    - condition: (parser->nread == 1)
      pos:
        line_end: 1968
        line_start: 1968
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2122
      start: 690
    functionDepth: 2
    functionLinenumber: 690
    functionLinenumberEnd: 2122
    functionName: brpc::http_parser_execute
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::parse_url_char
    - PARSING_HEADER
    - CALLBACK_NOTIFY
    - CALLBACK_NOTIFY_NOADVANCE
    - assert
    - CALLBACK_DATA_
    - http_parser_settings*::on_headers_complete
    - MARK
    - IS_ALPHA
    - IS_HEADER_CHAR
    - STRICT_CHECK
    - CALLBACK_DATA_NOADVANCE
    - SET_ERRNO
    - MIN
    - IS_NUM
    - NEW_MESSAGE
    - TOKEN
    - HTTP_PARSER_ERRNO
    - CALLBACK_DATA
    - brpc::http_message_needs_eof
    - LOWER
    linkageType: ''
    returnType: size_t
    signature: "size_t http_parser_execute (http_parser *parser,\n                            const
      http_parser_settings *settings,\n                            const char *data,\n
      \                           size_t len)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2152
      start: 2126
    functionDepth: 0
    functionLinenumber: 2126
    functionLinenumberEnd: 2152
    functionName: brpc::http_message_needs_eof
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int http_message_needs_eof (const http_parser *parser)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2170,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2171
      start: 2155
    functionDepth: 1
    functionLinenumber: 2155
    functionLinenumberEnd: 2171
    functionName: brpc::http_should_keep_alive
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::http_message_needs_eof
    linkageType: ''
    returnType: int
    signature: int http_should_keep_alive (const http_parser *parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ELEM_AT
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - enum http_method
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2178
      start: 2174
    functionDepth: 1
    functionLinenumber: 2174
    functionLinenumberEnd: 2178
    functionName: brpc::http_method_str
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - ELEM_AT
    linkageType: ''
    returnType: char
    signature: 'char *

      http_method_str (enum http_method m)'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - parser
    - t
    argTypes:
    - http_parser*
    - enum http_parser_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2190
      start: 2181
    functionDepth: 0
    functionLinenumber: 2181
    functionLinenumberEnd: 2190
    functionName: brpc::http_parser_init
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void http_parser_init (http_parser *parser, enum http_parser_type t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - enum http_errno
    assertStmts:
    - condition: (err < (http_errno)(sizeof(http_strerror_tab)/sizeof(http_strerror_tab[0])))
      pos:
        line_end: 2193
        line_start: 2193
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2196
      start: 2192
    functionDepth: 0
    functionLinenumber: 2192
    functionLinenumberEnd: 2196
    functionName: brpc::http_errno_name
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: char
    signature: 'char *

      http_errno_name(enum http_errno err)'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - enum http_errno
    assertStmts:
    - condition: (err < (http_errno)(sizeof(http_strerror_tab)/sizeof(http_strerror_tab[0])))
      pos:
        line_end: 2199
        line_start: 2199
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2202
      start: 2198
    functionDepth: 0
    functionLinenumber: 2198
    functionLinenumberEnd: 2202
    functionName: brpc::http_errno_description
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: char
    signature: 'char *

      http_errno_description(enum http_errno err)'
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: IS_USERINFO_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2213,1
    - Dst: IS_HOST_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2223,1
    - Dst: IS_HOST_CHAR
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2230,1
    - Dst: IS_HEX
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2249,1
    - Dst: IS_NUM
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2257,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 47
    argCount: 2
    argNames:
    - s
    - ch
    argTypes:
    - enum http_host_state
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2267
      start: 2204
    functionDepth: 1
    functionLinenumber: 2204
    functionLinenumberEnd: 2267
    functionName: brpc::http_parse_host_char
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached:
    - IS_USERINFO_CHAR
    - IS_HEX
    - IS_NUM
    - IS_HOST_CHAR
    linkageType: ''
    returnType: enum http_host_state
    signature: enum http_host_state http_parse_host_char(enum http_host_state s, const
      char ch)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_parse_host_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2281,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 53
    argCount: 3
    argNames:
    - buf
    - u
    - found_at
    argTypes:
    - char*
    - struct http_parser_url*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2340
      start: 2269
    functionDepth: 2
    functionLinenumber: 2269
    functionLinenumberEnd: 2340
    functionName: brpc::http_parse_host
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 1
    functionsReached:
    - brpc::http_parse_host_char
    linkageType: ''
    returnType: int
    signature: int http_parse_host(const char * buf, struct http_parser_url *u, int
      found_at)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: brpc::parse_url_char
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2356,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2395,1
    - Dst: brpc::http_parse_host
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2415,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2427,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 60
    argCount: 4
    argNames:
    - buf
    - buflen
    - is_connect
    - u
    argTypes:
    - char*
    - size_t
    - int
    - struct http_parser_url*
    assertStmts:
    - condition: (!"Unexpected state")
      pos:
        line_end: 2394
        line_start: 2394
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2438
      start: 2342
    functionDepth: 3
    functionLinenumber: 2342
    functionLinenumberEnd: 2438
    functionName: brpc::http_parser_parse_url
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::parse_url_char
    - brpc::http_parse_host
    - strtoul
    - assert
    linkageType: ''
    returnType: int
    signature: "int http_parser_parse_url(const char *buf, size_t buflen, int is_connect,\n
      \                     struct http_parser_url *u)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2446,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2447,1
    - Dst: SET_ERRNO
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2448,1
    - Dst: assert
      Src: /src/brpc/src/brpc/details/http_parser.cpp:2450,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - parser
    - paused
    argTypes:
    - http_parser*
    - int
    assertStmts:
    - condition: (0 && "Attempting to pause parser in error state")
      pos:
        line_end: 2449
        line_start: 2449
        source_file: /src/brpc/src/brpc/details/http_parser.cpp
    constantsTouched: []
    func_position:
      end: 2452
      start: 2440
    functionDepth: 1
    functionLinenumber: 2440
    functionLinenumberEnd: 2452
    functionName: brpc::http_parser_pause
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached:
    - SET_ERRNO
    - assert
    - HTTP_PARSER_ERRNO
    linkageType: ''
    returnType: void
    signature: void http_parser_pause(http_parser *parser, int paused)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - struct http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2457
      start: 2454
    functionDepth: 0
    functionLinenumber: 2454
    functionLinenumberEnd: 2457
    functionName: brpc::http_body_is_final
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int http_body_is_final(const struct http_parser *parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2464
      start: 2459
    functionDepth: 0
    functionLinenumber: 2459
    functionLinenumberEnd: 2464
    functionName: brpc::http_parser_version
    functionSourceFile: /src/brpc/src/brpc/details/http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned long
    signature: unsigned long http_parser_version(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MethodStatus::MaxConcurrency
      Src: /src/brpc/src/brpc/details/method_status.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::MethodStatus::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 3
    functionsReached:
    - brpc::MethodStatus::MaxConcurrency
    linkageType: ''
    returnType: int
    signature: int MaxConcurrency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - status
    - c
    - received_us
    argTypes:
    - MethodStatus*
    - Controller*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 87
    functionName: brpc::ConcurrencyRemover::ConcurrencyRemover
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrencyRemover(MethodStatus* status, Controller* c, int64_t
      received_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/details/method_status.h:98,1
    - Dst: brpc::MethodStatus::OnRequested
      Src: /src/brpc/src/brpc/details/method_status.h:99,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - rejected_cc
    - cntl
    argTypes:
    - int*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 106
    functionName: brpc::MethodStatus::OnRequested
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 1
    functionsReached:
    - brpc::MethodStatus::OnRequested
    - fetch_add
    linkageType: ''
    returnType: bool
    signature: bool MethodStatus::OnRequested(int* rejected_cc, Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/details/method_status.h:109,1
    - Dst: brpc::MethodStatus::OnResponded
      Src: /src/brpc/src/brpc/details/method_status.h:116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 118
    functionName: brpc::MethodStatus::OnResponded
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 1
    functionsReached:
    - fetch_sub
    - brpc::MethodStatus::OnResponded
    linkageType: ''
    returnType: void
    signature: void MethodStatus::OnResponded(int error_code, int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MethodStatus::MaxConcurrency
      Src: /src/brpc/src/brpc/details/method_status.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::MethodStatus::MaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 4
    functionsReached:
    - brpc::MethodStatus::MaxConcurrency
    linkageType: ''
    returnType: int
    signature: int MaxConcurrency() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - status
    - c
    - received_us
    argTypes:
    - MethodStatus*
    - Controller*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 87
    functionName: brpc::ConcurrencyRemover::ConcurrencyRemover
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrencyRemover(MethodStatus* status, Controller* c, int64_t
      received_us)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/details/method_status.h:98,1
    - Dst: brpc::MethodStatus::OnRequested
      Src: /src/brpc/src/brpc/details/method_status.h:99,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - rejected_cc
    - cntl
    argTypes:
    - int*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 106
    functionName: brpc::MethodStatus::OnRequested
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 2
    functionsReached:
    - brpc::MethodStatus::OnRequested
    - fetch_add
    linkageType: ''
    returnType: bool
    signature: bool MethodStatus::OnRequested(int* rejected_cc, Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/details/method_status.h:109,1
    - Dst: brpc::MethodStatus::OnResponded
      Src: /src/brpc/src/brpc/details/method_status.h:116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - error_code
    - latency
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 118
    functionName: brpc::MethodStatus::OnResponded
    functionSourceFile: /src/brpc/src/brpc/details/method_status.h
    functionUses: 2
    functionsReached:
    - fetch_sub
    - brpc::MethodStatus::OnResponded
    linkageType: ''
    returnType: void
    signature: void MethodStatus::OnResponded(int error_code, int64_t latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MallocExtension
      Src: /src/brpc/src/brpc/details/tcmalloc_extension.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 313
    functionName: MallocExtension
    functionSourceFile: /src/brpc/src/brpc/details/tcmalloc_extension.h
    functionUses: 1
    functionsReached:
    - MallocExtension
    linkageType: ''
    returnType: class PERFTOOLS_DLL_DECL
    signature: class PERFTOOLS_DLL_DECL MallocExtension
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: ~NamingServiceWatcher()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingServiceWatcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::GetNamingServiceThreadOptions
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetNamingServiceThreadOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - ServerNodeWithId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    functionName: operator<(const ServerNodeWithId& rhs) const
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ServerNodeWithId& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::AddWatcher
      Src: /src/brpc/src/brpc/details/naming_service_thread.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - NamingServiceWatcher*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: brpc::NamingServiceThread::AddWatcher
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 1
    functionsReached:
    - brpc::NamingServiceThread::AddWatcher
    linkageType: ''
    returnType: int
    signature: int AddWatcher(NamingServiceWatcher* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: ~NamingServiceWatcher()
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NamingServiceWatcher()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: brpc::GetNamingServiceThreadOptions
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void GetNamingServiceThreadOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - ServerNodeWithId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    functionName: operator<(const ServerNodeWithId& rhs) const
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const ServerNodeWithId& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NamingServiceThread::AddWatcher
      Src: /src/brpc/src/brpc/details/naming_service_thread.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - w
    argTypes:
    - NamingServiceWatcher*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: brpc::NamingServiceThread::AddWatcher
    functionSourceFile: /src/brpc/src/brpc/details/naming_service_thread.h
    functionUses: 2
    functionsReached:
    - brpc::NamingServiceThread::AddWatcher
    linkageType: ''
    returnType: int
    signature: int AddWatcher(NamingServiceWatcher* w)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LoadBalancerWithNaming()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
    functionSourceFile: /src/brpc/src/brpc/details/load_balancer_with_naming.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LoadBalancerWithNaming()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:30,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:31,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:32,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:33,1
    - Dst: GenerateReport
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:33,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:34,1
    - Dst: grpc::health::v1::HealthCheckResponse*::set_status
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:36,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - grpc::health::v1::HealthCheckRequest*
    - grpc::health::v1::HealthCheckResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 38
    functionName: brpc::GrpcHealthCheckService::Check
    functionSourceFile: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp
    functionUses: 0
    functionsReached:
    - ClosureGuard::release
    - Server*::options
    - static_cast<Controller*>
    - GenerateReport
    - grpc::health::v1::HealthCheckResponse*::set_status
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void GrpcHealthCheckService::Check(::google::protobuf::RpcController*
      cntl_base,\n                                  const grpc::health::v1::HealthCheckRequest*
      request,\n                                  grpc::health::v1::HealthCheckResponse*
      response,\n                                  ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:30,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:31,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:32,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:33,1
    - Dst: GenerateReport
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:33,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:34,1
    - Dst: grpc::health::v1::HealthCheckResponse*::set_status
      Src: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp:36,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - grpc::health::v1::HealthCheckRequest*
    - grpc::health::v1::HealthCheckResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 38
    functionName: brpc::GrpcHealthCheckService::Check
    functionSourceFile: /src/brpc/src/brpc/builtin/grpc_health_check_service.cpp
    functionUses: 0
    functionsReached:
    - ClosureGuard::release
    - Server*::options
    - static_cast<Controller*>
    - GenerateReport
    - grpc::health::v1::HealthCheckResponse*::set_status
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void GrpcHealthCheckService::Check(::google::protobuf::RpcController*
      cntl_base,\n                                  const grpc::health::v1::HealthCheckRequest*
      request,\n                                  grpc::health::v1::HealthCheckResponse*
      response,\n                                  ::google::protobuf::Closure* done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:37,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:38,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:39,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:40,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:42,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:50,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:50,1
    - Dst: bthread::print_task
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:52,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:55,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:58,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:62,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:63,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:66,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:66,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 32
    functionDepth: 2
    functionLinenumber: 32
    functionLinenumberEnd: 67
    functionName: brpc::BthreadsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/bthreads_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - strtoull
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - c_str
    - bthread::print_task
    - bthread::stack_trace
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void BthreadsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                     const ::brpc::BthreadsRequest*,\n
      \                                    ::brpc::BthreadsResponse*,\n                                     ::google::protobuf::Closure*
      done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:37,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:38,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:39,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:40,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:42,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:50,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:50,1
    - Dst: bthread::print_task
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:52,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:55,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:58,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:62,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:63,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:66,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:66,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 32
    functionDepth: 2
    functionLinenumber: 32
    functionLinenumberEnd: 67
    functionName: brpc::BthreadsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/bthreads_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - strtoull
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - c_str
    - bthread::print_task
    - bthread::stack_trace
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void BthreadsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                     const ::brpc::BthreadsRequest*,\n
      \                                    ::brpc::BthreadsResponse*,\n                                     ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:56,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:57,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::InitFavIcon
    functionSourceFile: /src/brpc/src/brpc/builtin/get_favicon_service.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBuf::IOBuf
    - arraysize
    linkageType: ''
    returnType: void
    signature: void InitFavIcon()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: brpc::GetFavIcon
    functionSourceFile: /src/brpc/src/brpc/builtin/get_favicon_service.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetFavIcon()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:71,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:72,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:73,1
    - Dst: GetFavIcon
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:73,1
    - Dst: ::google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 77
    functionName: brpc::GetFaviconService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/get_favicon_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response_attachment
    - GetFavIcon
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: "void GetFaviconService::default_method(\n    ::google::protobuf::RpcController*
      controller,\n    const GetFaviconRequest* /*request*/,\n    GetFaviconResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:56,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:57,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: brpc::InitFavIcon
    functionSourceFile: /src/brpc/src/brpc/builtin/get_favicon_service.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBuf::IOBuf
    - arraysize
    linkageType: ''
    returnType: void
    signature: void InitFavIcon()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: brpc::GetFavIcon
    functionSourceFile: /src/brpc/src/brpc/builtin/get_favicon_service.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & GetFavIcon()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:71,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:72,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:73,1
    - Dst: GetFavIcon
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:73,1
    - Dst: ::google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/builtin/get_favicon_service.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 77
    functionName: brpc::GetFaviconService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/get_favicon_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response_attachment
    - GetFavIcon
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    linkageType: ''
    returnType: void
    signature: "void GetFaviconService::default_method(\n    ::google::protobuf::RpcController*
      controller,\n    const GetFaviconRequest* /*request*/,\n    GetFaviconResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:33,1
    - Dst: version
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:34,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:35,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:37,1
    - Dst: version
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 39
    functionName: brpc::VersionService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/version_service.cpp
    functionUses: 1
    functionsReached:
    - version
    - Controller*::response_attachment
    - Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void VersionService::default_method(::google::protobuf::RpcController*
      controller,\n                                    const ::brpc::VersionRequest*,\n
      \                                   ::brpc::VersionResponse*,\n                                    ::google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:33,1
    - Dst: version
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:34,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:35,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:37,1
    - Dst: version
      Src: /src/brpc/src/brpc/builtin/version_service.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 39
    functionName: brpc::VersionService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/version_service.cpp
    functionUses: 1
    functionsReached:
    - version
    - Controller*::response_attachment
    - Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void VersionService::default_method(::google::protobuf::RpcController*
      controller,\n                                    const ::brpc::VersionRequest*,\n
      \                                   ::brpc::VersionResponse*,\n                                    ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ListServices
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:35,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:36,1
    - Dst: ::brpc::ListResponse*::add_service
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:37,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - response
    - done
    argTypes:
    - ::brpc::ListResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::ListService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/list_service.cpp
    functionUses: 1
    functionsReached:
    - ListServices
    - ::brpc::ListResponse*::add_service
    - std::vector::size
    - GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void ListService::default_method(::google::protobuf::RpcController*,
      \n                                 const ::brpc::ListRequest*,\n                                 ::brpc::ListResponse*
      response,\n                                 ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ListServices
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:35,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:36,1
    - Dst: ::brpc::ListResponse*::add_service
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:37,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/builtin/list_service.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - response
    - done
    argTypes:
    - ::brpc::ListResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 40
    functionName: brpc::ListService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/list_service.cpp
    functionUses: 1
    functionsReached:
    - ListServices
    - ::brpc::ListResponse*::add_service
    - std::vector::size
    - GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void ListService::default_method(::google::protobuf::RpcController*,
      \n                                 const ::brpc::ListRequest*,\n                                 ::brpc::ListResponse*
      response,\n                                 ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::VersionService::VersionService
    functionSourceFile: /src/brpc/src/brpc/builtin/version_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VersionService(Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::VersionService::VersionService
    functionSourceFile: /src/brpc/src/brpc/builtin/version_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VersionService(Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:31,1
    - Dst: brpc::ProtobufsService::Init
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: brpc::ProtobufsService::ProtobufsService
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - brpc::ProtobufsService::Init
    linkageType: ''
    returnType: void
    signature: void ProtobufsService::ProtobufsService(Server* server)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:37,1
    - Dst: Server::ServiceMap::size
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:37,1
    - Dst: Server::ServiceMap::begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:39,1
    - Dst: Server::ServiceMap::end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:39,1
    - Dst: Server::ServiceMap::iterator::second::is_user_service
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:40,1
    - Dst: Server::ServiceMap::iterator::second::service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:44,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:45,1
    - Dst: google::protobuf::ServiceDescriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:45,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:46,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:49,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:49,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:50,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:50,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:53,1
    - Dst: std::vector::back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:54,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:55,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:56,1
    - Dst: google::protobuf::Descriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:56,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:57,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:58,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:60,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:61,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:63,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 69
    functionName: brpc::ProtobufsService::Init
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - Server::ServiceMap::iterator::second::service::GetDescriptor
    - Server::ServiceMap::iterator::second::is_user_service
    - std::vector::empty
    - std::vector::pop_back
    - std::vector::back
    - find
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::Descriptor*::DebugString
    - Server::ServiceMap::size
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::ServiceDescriptor*::full_name
    - Server::ServiceMap::end
    - google::protobuf::Descriptor*::field_count
    - std::vector::reserve
    - google::protobuf::Descriptor*::field
    - std::vector::push_back
    - end
    - google::protobuf::ServiceDescriptor*::DebugString
    - Server::ServiceMap::begin
    - google::protobuf::MethodDescriptor*::output_type
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::input_type
    - google::protobuf::Descriptor*::full_name
    linkageType: ''
    returnType: int
    signature: int ProtobufsService::Init()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:76,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:77,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:78,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:79,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:80,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:80,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:81,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:87,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:87,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:102,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:103,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:104,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:105,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:107,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:112,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:112,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 113
    functionName: brpc::ProtobufsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - find
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - c_str
    - begin
    - UseHTML
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void ProtobufsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                   const ProtobufsRequest*,\n                                   ProtobufsResponse*,\n
      \                                  ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:31,1
    - Dst: brpc::ProtobufsService::Init
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: brpc::ProtobufsService::ProtobufsService
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - brpc::ProtobufsService::Init
    linkageType: ''
    returnType: void
    signature: void ProtobufsService::ProtobufsService(Server* server)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:37,1
    - Dst: Server::ServiceMap::size
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:37,1
    - Dst: Server::ServiceMap::begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:39,1
    - Dst: Server::ServiceMap::end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:39,1
    - Dst: Server::ServiceMap::iterator::second::is_user_service
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:40,1
    - Dst: Server::ServiceMap::iterator::second::service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:44,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:45,1
    - Dst: google::protobuf::ServiceDescriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:45,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:46,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:49,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:49,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:50,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:50,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:53,1
    - Dst: std::vector::back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:54,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:55,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:56,1
    - Dst: google::protobuf::Descriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:56,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:57,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:58,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:60,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:61,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:63,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 69
    functionName: brpc::ProtobufsService::Init
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - Server::ServiceMap::iterator::second::service::GetDescriptor
    - Server::ServiceMap::iterator::second::is_user_service
    - std::vector::empty
    - std::vector::pop_back
    - std::vector::back
    - find
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::Descriptor*::DebugString
    - Server::ServiceMap::size
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::ServiceDescriptor*::full_name
    - Server::ServiceMap::end
    - google::protobuf::Descriptor*::field_count
    - std::vector::reserve
    - google::protobuf::Descriptor*::field
    - std::vector::push_back
    - end
    - google::protobuf::ServiceDescriptor*::DebugString
    - Server::ServiceMap::begin
    - google::protobuf::MethodDescriptor*::output_type
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::input_type
    - google::protobuf::Descriptor*::full_name
    linkageType: ''
    returnType: int
    signature: int ProtobufsService::Init()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:76,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:77,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:78,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:79,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:80,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:80,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:81,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:87,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:87,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:102,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:103,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:104,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:105,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:107,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:112,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:112,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 113
    functionName: brpc::ProtobufsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - end
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - find
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - c_str
    - begin
    - UseHTML
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void ProtobufsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                   const ProtobufsRequest*,\n                                   ProtobufsResponse*,\n
      \                                  ::google::protobuf::Closure* done)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:38,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:42,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:43,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:44,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:44,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:45,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:46,1
    - Dst: opendir
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:50,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:50,1
    - Dst: open
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:52,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:52,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:54,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:54,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:57,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:58,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:60,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:63,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:66,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:66,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:74,1
    - Dst: swap
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:75,1
    - Dst: lseek
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:78,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:79,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:81,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:83,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:83,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:85,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:89,1
    - Dst: readdir
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:93,1
    - Dst: readdir_r
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:96,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:98,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:100,1
    - Dst: closedir
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:100,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:102,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:102,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:102,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:103,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:109,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:110,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:112,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:112,1
    - Dst: AppendFileName
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:115,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:117,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:118,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:118,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:118,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:124,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:124,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 60
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 129
    functionName: brpc::DirService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/dir_service.cpp
    functionUses: 1
    functionsReached:
    - append
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - open
    - CHECK_EQ
    - closedir
    - std::vector::begin
    - AppendFileName
    - Controller*::SetFailed
    - swap
    - opendir
    - std::string::c_str
    - std::string::append
    - butil::IOPortal::IOPortal
    - readdir
    - size
    - std::string::push_back
    - lseek
    - std::ostringstream::str
    - Controller*::http_request
    - std::sort
    - static_cast<Controller*>
    - std::vector::size
    - std::vector::reserve
    - butil::IOPortal::append_from_file_descriptor
    - std::vector::push_back
    - std::string::reserve
    - std::vector::end
    - readdir_r
    - butil::make_close_on_exec
    - Controller*::response_attachment
    - c_str
    - empty
    - UseHTML
    - butil::make_non_blocking
    - Path
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void DirService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                const ::brpc::DirRequest*,\n                                ::brpc::DirResponse*,\n
      \                               ::google::protobuf::Closure* done)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:38,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:42,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:43,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:44,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:44,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:45,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:46,1
    - Dst: opendir
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:50,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:50,1
    - Dst: open
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:52,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:52,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:54,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:54,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:57,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:58,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:60,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:63,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:66,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:66,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:74,1
    - Dst: swap
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:75,1
    - Dst: lseek
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:78,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:79,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:79,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:81,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:83,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:83,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:85,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:89,1
    - Dst: readdir
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:93,1
    - Dst: readdir_r
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:96,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:98,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:100,1
    - Dst: closedir
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:100,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:102,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:102,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:102,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:103,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:109,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:110,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:112,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:112,1
    - Dst: AppendFileName
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:115,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:117,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:118,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:118,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:118,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:124,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/dir_service.cpp:124,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 60
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 129
    functionName: brpc::DirService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/dir_service.cpp
    functionUses: 1
    functionsReached:
    - append
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - open
    - CHECK_EQ
    - closedir
    - std::vector::begin
    - AppendFileName
    - Controller*::SetFailed
    - swap
    - opendir
    - std::string::c_str
    - std::string::append
    - butil::IOPortal::IOPortal
    - readdir
    - size
    - std::string::push_back
    - lseek
    - std::ostringstream::str
    - Controller*::http_request
    - std::sort
    - static_cast<Controller*>
    - std::vector::size
    - std::vector::reserve
    - butil::IOPortal::append_from_file_descriptor
    - std::vector::push_back
    - std::string::reserve
    - std::vector::end
    - readdir_r
    - butil::make_close_on_exec
    - Controller*::response_attachment
    - c_str
    - empty
    - UseHTML
    - butil::make_non_blocking
    - Path
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void DirService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                const ::brpc::DirRequest*,\n                                ::brpc::DirResponse*,\n
      \                               ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:31,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:32,1
    - Dst: brpc::flot_min_js
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:32,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:33,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:34,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 4
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::InitFlotMinBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::GzipCompress
    - brpc::flot_min_js
    - CHECK
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitFlotMinBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: brpc::flot_min_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & flot_min_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: brpc::flot_min_js_iobuf_gzip
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & flot_min_js_iobuf_gzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: brpc::flot_min_js
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * flot_min_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:31,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:32,1
    - Dst: brpc::flot_min_js
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:32,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:33,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:34,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 4
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::InitFlotMinBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::policy::GzipCompress
    - brpc::flot_min_js
    - CHECK
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitFlotMinBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: brpc::flot_min_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & flot_min_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/flot_min_js.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: brpc::flot_min_js_iobuf_gzip
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & flot_min_js_iobuf_gzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: brpc::flot_min_js
    functionSourceFile: /src/brpc/src/brpc/builtin/flot_min_js.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * flot_min_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::IndexService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/index_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void IndexService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:49,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:50,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:51,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:51,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:52,1
    - Dst: Server*::FindServiceByFullName
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:54,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:55,1
    - Dst: dynamic_cast<StatusService*>
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:56,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:58,1
    - Dst: StatusService*::default_method
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:61,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:61,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:63,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:69,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:75,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:80,1
    - Dst: logo
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:84,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:96,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:97,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:98,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:99,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:100,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:106,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:107,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:109,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:113,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:115,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:118,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:120,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:121,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:121,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:123,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:125,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:127,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:127,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:137,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:139,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:140,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:141,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:143,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:144,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:148,1
    - Dst: Server*::listen_address
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:148,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:151,1
    - Dst: Server*::listen_address
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:151,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:156,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:158,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:159,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:160,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:161,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:162,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:163,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:164,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:165,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:167,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:169,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:173,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 55
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 43
    functionDepth: 2
    functionLinenumber: 43
    functionLinenumberEnd: 174
    functionName: brpc::IndexService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/index_service.cpp
    functionUses: 1
    functionsReached:
    - butil::is_endpoint_extended
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - IsHeapProfilerEnabled
    - TabsHead
    - StatusService*::default_method
    - Controller*::SetFailed
    - Controller*::server
    - PrintRealDateTime
    - logo
    - butil::gettimeofday_us
    - std::ostringstream::str
    - ClosureGuard::release
    - Controller*::http_request
    - Server*::FindServiceByFullName
    - Server*::listen_address
    - Controller*::response_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - dynamic_cast<StatusService*>
    - butil::my_ip
    - UseHTML
    - Path
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void IndexService::default_method(::google::protobuf::RpcController*
      controller,\n                                  const IndexRequest*,\n                                  IndexResponse*,\n
      \                                 ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: brpc::IndexService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/index_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void IndexService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:49,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:50,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:51,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:51,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:52,1
    - Dst: Server*::FindServiceByFullName
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:54,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:55,1
    - Dst: dynamic_cast<StatusService*>
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:56,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:58,1
    - Dst: StatusService*::default_method
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:61,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:61,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:63,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:69,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:75,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:80,1
    - Dst: logo
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:84,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:96,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:97,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:98,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:99,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:100,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:106,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:107,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:109,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:113,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:115,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:118,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:120,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:121,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:121,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:123,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:125,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:127,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:127,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:137,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:139,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:140,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:141,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:143,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:144,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:148,1
    - Dst: Server*::listen_address
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:148,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:151,1
    - Dst: Server*::listen_address
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:151,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:156,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:158,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:159,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:160,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:161,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:162,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:163,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:164,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:165,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:167,1
    - Dst: Path
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:169,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:173,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/index_service.cpp:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 55
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 43
    functionDepth: 2
    functionLinenumber: 43
    functionLinenumberEnd: 174
    functionName: brpc::IndexService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/index_service.cpp
    functionUses: 1
    functionsReached:
    - butil::is_endpoint_extended
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - IsHeapProfilerEnabled
    - TabsHead
    - StatusService*::default_method
    - Controller*::SetFailed
    - Controller*::server
    - PrintRealDateTime
    - logo
    - butil::gettimeofday_us
    - std::ostringstream::str
    - ClosureGuard::release
    - Controller*::http_request
    - Server*::FindServiceByFullName
    - Server*::listen_address
    - Controller*::response_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - dynamic_cast<StatusService*>
    - butil::my_ip
    - UseHTML
    - Path
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void IndexService::default_method(::google::protobuf::RpcController*
      controller,\n                                  const IndexRequest*,\n                                  IndexResponse*,\n
      \                                 ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:34,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:35,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:36,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:37,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:39,1
    - Dst: butil::describe_resources<Socket>
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:41,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:44,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:44,1
    - Dst: Socket::DebugSocket
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:46,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:48,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:49,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:52,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:52,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 29
    functionDepth: 3
    functionLinenumber: 29
    functionLinenumberEnd: 53
    functionName: brpc::SocketsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/sockets_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - strtoull
    - Socket::DebugSocket
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - c_str
    - butil::describe_resources<Socket>
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void SocketsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                     const ::brpc::SocketsRequest*,\n
      \                                    ::brpc::SocketsResponse*,\n                                     ::google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:34,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:35,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:36,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:37,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:39,1
    - Dst: butil::describe_resources<Socket>
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:41,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:44,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:44,1
    - Dst: Socket::DebugSocket
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:46,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:48,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:49,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:52,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/sockets_service.cpp:52,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 29
    functionDepth: 3
    functionLinenumber: 29
    functionLinenumberEnd: 53
    functionName: brpc::SocketsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/sockets_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - strtoull
    - Socket::DebugSocket
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - c_str
    - butil::describe_resources<Socket>
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void SocketsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                     const ::brpc::SocketsRequest*,\n
      \                                    ::brpc::SocketsResponse*,\n                                     ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/builtin/tabbed.h:32,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/builtin/tabbed.h:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::valid
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached:
    - brpc::empty
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: brpc::TabInfoList::TabInfoList
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TabInfoList()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/builtin/tabbed.h:40,1
    - Dst: TabInfo
      Src: /src/brpc/src/brpc/builtin/tabbed.h:40,1
    - Dst: brpc::TabInfoList::size
      Src: /src/brpc/src/brpc/builtin/tabbed.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: brpc::TabInfoList::add
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached:
    - brpc::TabInfoList::size
    - push_back
    - TabInfo
    linkageType: ''
    returnType: TabInfo
    signature: TabInfo * add()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TabInfoList::size
      Src: /src/brpc/src/brpc/builtin/tabbed.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::TabInfoList::size
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 2
    functionsReached:
    - brpc::TabInfoList::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: '& operator[](size_t i) const'
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TabInfo
    signature: TabInfo & operator[](size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TabInfoList::resize
      Src: /src/brpc/src/brpc/builtin/tabbed.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - newsize
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::TabInfoList::resize
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 1
    functionsReached:
    - brpc::TabInfoList::resize
    linkageType: ''
    returnType: void
    signature: void resize(size_t newsize)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: ~Tabbed()
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Tabbed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/builtin/tabbed.h:32,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/builtin/tabbed.h:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: brpc::valid
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached:
    - brpc::empty
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: brpc::TabInfoList::TabInfoList
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TabInfoList()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/brpc/builtin/tabbed.h:40,1
    - Dst: TabInfo
      Src: /src/brpc/src/brpc/builtin/tabbed.h:40,1
    - Dst: brpc::TabInfoList::size
      Src: /src/brpc/src/brpc/builtin/tabbed.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 2
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: brpc::TabInfoList::add
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached:
    - brpc::TabInfoList::size
    - push_back
    - TabInfo
    linkageType: ''
    returnType: TabInfo
    signature: TabInfo * add()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TabInfoList::size
      Src: /src/brpc/src/brpc/builtin/tabbed.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: brpc::TabInfoList::size
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 4
    functionsReached:
    - brpc::TabInfoList::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: '& operator[](size_t i) const'
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: TabInfo
    signature: TabInfo & operator[](size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TabInfoList::resize
      Src: /src/brpc/src/brpc/builtin/tabbed.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - newsize
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: brpc::TabInfoList::resize
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 2
    functionsReached:
    - brpc::TabInfoList::resize
    linkageType: ''
    returnType: void
    signature: void resize(size_t newsize)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: ~Tabbed()
    functionSourceFile: /src/brpc/src/brpc/builtin/tabbed.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Tabbed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:35,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:36,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:37,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:39,1
    - Dst: getpid
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:39,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:40,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:41,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:42,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:43,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:45,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:48,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:49,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:50,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:50,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 51
    functionName: brpc::ThreadsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/threads_service.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    - butil::IOBufBuilder::move_to
    - append
    - std::string::c_str
    - Controller*::http_response
    - butil::Timer::stop
    - butil::Timer::start
    - getpid
    - Controller*::response_attachment
    - static_cast<Controller*>
    - butil::Timer::m_elapsed
    - butil::read_command_output
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: "void ThreadsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                    const ::brpc::ThreadsRequest*,\n
      \                                   ::brpc::ThreadsResponse*,\n                                    ::google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:35,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:36,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:37,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:39,1
    - Dst: getpid
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:39,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:40,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:41,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:42,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:43,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:45,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:48,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:49,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:50,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:50,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/threads_service.cpp:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 51
    functionName: brpc::ThreadsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/threads_service.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    - butil::IOBufBuilder::move_to
    - append
    - std::string::c_str
    - Controller*::http_response
    - butil::Timer::stop
    - butil::Timer::start
    - getpid
    - Controller*::response_attachment
    - static_cast<Controller*>
    - butil::Timer::m_elapsed
    - butil::read_command_output
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - butil::Timer::Timer
    linkageType: ''
    returnType: void
    signature: "void ThreadsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                    const ::brpc::ThreadsRequest*,\n
      \                                   ::brpc::ThreadsResponse*,\n                                    ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - os
    - ' server_prefix'
    argTypes:
    - butil::IOBufBuilder*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: brpc::PrometheusMetricsDumper::PrometheusMetricsDumper
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PrometheusMetricsDumper(butil::IOBufBuilder* os,\n                                     const
      std::string& server_prefix)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::PrometheusMetricsDumper::IsComplete
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool IsComplete() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find_first_of
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:88,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:89,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:90,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 2
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: brpc::GetMetricsName
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 2
    functionsReached:
    - find_first_of
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::size
    - data
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece GetMetricsName(const std::string& name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:95,1
    - Dst: brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:99,1
    - Dst: GetMetricsName
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:105,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 111
    functionName: brpc::PrometheusMetricsDumper::dump
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
    - GetMetricsName
    linkageType: ''
    returnType: bool
    signature: "bool PrometheusMetricsDumper::dump(const std::string& name,\n                                   const
      butil::StringPiece& desc)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 120
    functionName: brpc::PrometheusMetricsDumper::dump_mvar
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool PrometheusMetricsDumper::dump_mvar(const std::string& name, const
      butil::StringPiece& desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' name'
    - ' type'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 126
    functionName: brpc::PrometheusMetricsDumper::dump_comment
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PrometheusMetricsDumper::dump_comment(const std::string& name,
      const std::string& type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:132,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:133,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:134,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:137,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:137,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:138,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:141,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:144,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:145,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:151,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:156,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:157,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:158,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:159,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:162,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:163,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:164,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:165,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:165,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 169
    functionName: brpc::PrometheusMetricsDumper::ProcessLatencyRecorderSuffix
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - butil::string_printf
    - strtoll
    - std::string::data
    - arraysize
    - butil::StringPiece::as_string
    - butil::StringPiece::remove_suffix
    - CHECK
    - as_string
    - size
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: PrometheusMetricsDumper::SummaryItems
    signature: "PrometheusMetricsDumper::SummaryItems *\nPrometheusMetricsDumper::ProcessLatencyRecorderSuffix(const
      butil::StringPiece& name,\n                                                      const
      butil::StringPiece& desc)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:174,1
    - Dst: brpc::PrometheusMetricsDumper::ProcessLatencyRecorderSuffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:177,1
    - Dst: SummaryItems*::IsComplete
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:181,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 171
    functionDepth: 2
    functionLinenumber: 171
    functionLinenumberEnd: 209
    functionName: brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 1
    functionsReached:
    - starts_with
    - brpc::PrometheusMetricsDumper::ProcessLatencyRecorderSuffix
    - SummaryItems*::IsComplete
    linkageType: ''
    returnType: bool
    signature: "bool PrometheusMetricsDumper::DumpLatencyRecorderSuffix(\n    const
      butil::StringPiece& name,\n    const butil::StringPiece& desc)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:216,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:217,1
    - Dst: DumpPrometheusMetricsToIOBuf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:218,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:219,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 222
    functionName: brpc::PrometheusMetricsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::response_attachment
    - static_cast<Controller*>
    - DumpPrometheusMetricsToIOBuf
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PrometheusMetricsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                              const ::brpc::MetricsRequest*,\n
      \                                             ::brpc::MetricsResponse*,\n                                              ::google::protobuf::Closure*
      done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:225,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:227,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:231,1
    - Dst: bvar::MVariableBase::dump_exposed
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:235,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:239,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:239,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - output
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 224
    functionDepth: 3
    functionLinenumber: 224
    functionLinenumberEnd: 242
    functionName: brpc::DumpPrometheusMetricsToIOBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - butil::IOBufBuilder::buf
    - bvar::Variable::dump_exposed
    - butil::IOBuf*::append
    - butil::IOBuf::Movable
    - bvar::MVariableBase::dump_exposed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: int DumpPrometheusMetricsToIOBuf(butil::IOBuf* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - os
    - ' server_prefix'
    argTypes:
    - butil::IOBufBuilder*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: brpc::PrometheusMetricsDumper::PrometheusMetricsDumper
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PrometheusMetricsDumper(butil::IOBufBuilder* os,\n                                     const
      std::string& server_prefix)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: brpc::PrometheusMetricsDumper::IsComplete
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool IsComplete() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: find_first_of
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:88,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:89,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:90,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 2
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: brpc::GetMetricsName
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 2
    functionsReached:
    - find_first_of
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::size
    - data
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece GetMetricsName(const std::string& name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:95,1
    - Dst: brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:99,1
    - Dst: GetMetricsName
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:105,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 93
    functionDepth: 3
    functionLinenumber: 93
    functionLinenumberEnd: 111
    functionName: brpc::PrometheusMetricsDumper::dump
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
    - GetMetricsName
    linkageType: ''
    returnType: bool
    signature: "bool PrometheusMetricsDumper::dump(const std::string& name,\n                                   const
      butil::StringPiece& desc)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 120
    functionName: brpc::PrometheusMetricsDumper::dump_mvar
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool PrometheusMetricsDumper::dump_mvar(const std::string& name, const
      butil::StringPiece& desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' name'
    - ' type'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 126
    functionName: brpc::PrometheusMetricsDumper::dump_comment
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PrometheusMetricsDumper::dump_comment(const std::string& name,
      const std::string& type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:132,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:133,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:134,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:137,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:137,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:138,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:141,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:144,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:144,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:145,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:151,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:156,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:157,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:158,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:159,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:162,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:163,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:164,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:165,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:165,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 169
    functionName: brpc::PrometheusMetricsDumper::ProcessLatencyRecorderSuffix
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 1
    functionsReached:
    - butil::string_printf
    - strtoll
    - std::string::data
    - arraysize
    - butil::StringPiece::as_string
    - butil::StringPiece::remove_suffix
    - CHECK
    - as_string
    - size
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: PrometheusMetricsDumper::SummaryItems
    signature: "PrometheusMetricsDumper::SummaryItems *\nPrometheusMetricsDumper::ProcessLatencyRecorderSuffix(const
      butil::StringPiece& name,\n                                                      const
      butil::StringPiece& desc)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:174,1
    - Dst: brpc::PrometheusMetricsDumper::ProcessLatencyRecorderSuffix
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:177,1
    - Dst: SummaryItems*::IsComplete
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:181,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 171
    functionDepth: 2
    functionLinenumber: 171
    functionLinenumberEnd: 209
    functionName: brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 2
    functionsReached:
    - starts_with
    - brpc::PrometheusMetricsDumper::ProcessLatencyRecorderSuffix
    - SummaryItems*::IsComplete
    linkageType: ''
    returnType: bool
    signature: "bool PrometheusMetricsDumper::DumpLatencyRecorderSuffix(\n    const
      butil::StringPiece& name,\n    const butil::StringPiece& desc)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:216,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:217,1
    - Dst: DumpPrometheusMetricsToIOBuf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:218,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:218,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:219,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 222
    functionName: brpc::PrometheusMetricsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::response_attachment
    - static_cast<Controller*>
    - DumpPrometheusMetricsToIOBuf
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PrometheusMetricsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                              const ::brpc::MetricsRequest*,\n
      \                                             ::brpc::MetricsResponse*,\n                                              ::google::protobuf::Closure*
      done)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:225,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:227,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:231,1
    - Dst: bvar::MVariableBase::dump_exposed
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:235,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:239,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:239,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - output
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 224
    functionDepth: 3
    functionLinenumber: 224
    functionLinenumberEnd: 242
    functionName: brpc::DumpPrometheusMetricsToIOBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/prometheus_metrics_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - butil::IOBufBuilder::buf
    - bvar::Variable::dump_exposed
    - butil::IOBuf*::append
    - butil::IOBuf::Movable
    - bvar::MVariableBase::dump_exposed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: int
    signature: int DumpPrometheusMetricsToIOBuf(butil::IOBuf* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:35,1
    - Dst: brpc::Time2GMT
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:36,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:37,1
    - Dst: brpc::Time2GMT
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:38,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - header
    - seconds
    argTypes:
    - HttpHeader*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 40
    functionName: brpc::SetExpires
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - time
    - brpc::Time2GMT
    - HttpHeader*::SetHeader
    linkageType: ''
    returnType: void
    signature: void SetExpires(HttpHeader* header, time_t seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:49,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:50,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:50,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:51,1
    - Dst: sorttable_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 52
    functionName: brpc::GetJsService::sorttable
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response_attachment
    - SetExpires
    - Controller*::http_response
    - sorttable_js_iobuf
    linkageType: ''
    returnType: void
    signature: "void GetJsService::sorttable(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:61,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:62,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:62,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:65,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:67,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:70,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:72,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:73,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:74,1
    - Dst: jquery_min_js_iobuf_gzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:74,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:76,1
    - Dst: jquery_min_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:76,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 78
    functionName: brpc::GetJsService::jquery_min
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 40
    functionsReached:
    - Controller*::http_response
    - jquery_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::response_attachment
    - SetExpires
    - SupportGzip
    - jquery_min_js_iobuf
    linkageType: ''
    returnType: void
    signature: "void GetJsService::jquery_min(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:87,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:88,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:88,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:91,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:93,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:96,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:98,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:99,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:100,1
    - Dst: flot_min_js_iobuf_gzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:100,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:102,1
    - Dst: flot_min_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:102,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 104
    functionName: brpc::GetJsService::flot_min
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::http_request
    - flot_min_js_iobuf
    - flot_min_js_iobuf_gzip
    - Controller*::response_attachment
    - SetExpires
    - SupportGzip
    linkageType: ''
    returnType: void
    signature: "void GetJsService::flot_min(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:113,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:114,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:114,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:117,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:119,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:122,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:124,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:125,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:126,1
    - Dst: viz_min_js_iobuf_gzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:126,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:128,1
    - Dst: viz_min_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:128,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 130
    functionName: brpc::GetJsService::viz_min
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - viz_min_js_iobuf_gzip
    - viz_min_js_iobuf
    - SetExpires
    - SupportGzip
    linkageType: ''
    returnType: void
    signature: "void GetJsService::viz_min(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:35,1
    - Dst: brpc::Time2GMT
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:36,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:37,1
    - Dst: brpc::Time2GMT
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:38,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - header
    - seconds
    argTypes:
    - HttpHeader*
    - time_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 40
    functionName: brpc::SetExpires
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - time
    - brpc::Time2GMT
    - HttpHeader*::SetHeader
    linkageType: ''
    returnType: void
    signature: void SetExpires(HttpHeader* header, time_t seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:49,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:50,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:50,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:51,1
    - Dst: sorttable_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 52
    functionName: brpc::GetJsService::sorttable
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response_attachment
    - SetExpires
    - Controller*::http_response
    - sorttable_js_iobuf
    linkageType: ''
    returnType: void
    signature: "void GetJsService::sorttable(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:61,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:62,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:62,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:65,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:67,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:70,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:72,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:73,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:74,1
    - Dst: jquery_min_js_iobuf_gzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:74,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:76,1
    - Dst: jquery_min_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:76,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 78
    functionName: brpc::GetJsService::jquery_min
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 40
    functionsReached:
    - Controller*::http_response
    - jquery_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::response_attachment
    - SetExpires
    - SupportGzip
    - jquery_min_js_iobuf
    linkageType: ''
    returnType: void
    signature: "void GetJsService::jquery_min(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:87,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:88,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:88,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:91,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:93,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:96,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:98,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:99,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:100,1
    - Dst: flot_min_js_iobuf_gzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:100,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:102,1
    - Dst: flot_min_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:102,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 104
    functionName: brpc::GetJsService::flot_min
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::http_request
    - flot_min_js_iobuf
    - flot_min_js_iobuf_gzip
    - Controller*::response_attachment
    - SetExpires
    - SupportGzip
    linkageType: ''
    returnType: void
    signature: "void GetJsService::flot_min(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:113,1
    - Dst: SetExpires
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:114,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:114,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:117,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:119,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:122,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:124,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:125,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:126,1
    - Dst: viz_min_js_iobuf_gzip
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:126,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:128,1
    - Dst: viz_min_js_iobuf
      Src: /src/brpc/src/brpc/builtin/get_js_service.cpp:128,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - controller
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 130
    functionName: brpc::GetJsService::viz_min
    functionSourceFile: /src/brpc/src/brpc/builtin/get_js_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - viz_min_js_iobuf_gzip
    - viz_min_js_iobuf
    - SetExpires
    - SupportGzip
    linkageType: ''
    returnType: void
    signature: "void GetJsService::viz_min(\n    ::google::protobuf::RpcController*
      controller,\n    const GetJsRequest* /*request*/,\n    GetJsResponse* /*response*/,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TabsHead
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - expand_all
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 255
    functionName: brpc::PutVarsHeading
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::TabsHead
    linkageType: ''
    returnType: void
    signature: void PutVarsHeading(std::ostream& os, bool expand_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' os'
    - use_html
    argTypes:
    - butil::IOBufBuilder
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 264
    functionName: brpc::VarsDumper::VarsDumper
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VarsDumper(butil::IOBufBuilder& os, bool use_html)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::describe_series_exposed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:271,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 266
    functionDepth: 2
    functionLinenumber: 266
    functionLinenumberEnd: 295
    functionName: brpc::VarsDumper::dump
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached:
    - bvar::Variable::describe_series_exposed
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VarsDumper::move_to
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 299
    functionName: brpc::VarsDumper::move_to
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 1
    functionsReached:
    - brpc::VarsDumper::move_to
    linkageType: ''
    returnType: void
    signature: void move_to(butil::IOBuf& buf)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:313,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:314,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:315,1
    - Dst: bvar::Variable::describe_series_exposed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:317,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:318,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:320,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:321,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:321,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:323,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:324,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:326,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:327,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:331,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:331,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:333,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:336,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:339,1
    - Dst: PutVarsHeading
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:343,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:343,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:405,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:411,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:415,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:416,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:418,1
    - Dst: bvar::DumpOptions::white_wildcards::empty
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:421,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:422,1
    - Dst: bvar::DumpOptions::white_wildcards::c_str
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:423,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:428,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:428,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:429,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 308
    functionDepth: 3
    functionLinenumber: 308
    functionLinenumberEnd: 430
    functionName: brpc::VarsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - UseHTML
    - bvar::Variable::dump_exposed
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - PutVarsHeading
    - bvar::DumpOptions::DumpOptions
    - bvar::DumpOptions::white_wildcards::c_str
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - bvar::DumpOptions::white_wildcards::empty
    - bvar::Variable::describe_series_exposed
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void VarsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const ::brpc::VarsRequest*,\n                                 ::brpc::VarsResponse*,\n
      \                                ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:433,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 436
    functionName: brpc::VarsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void VarsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TabsHead
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - expand_all
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 255
    functionName: brpc::PutVarsHeading
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::TabsHead
    linkageType: ''
    returnType: void
    signature: void PutVarsHeading(std::ostream& os, bool expand_all)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' os'
    - use_html
    argTypes:
    - butil::IOBufBuilder
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 264
    functionName: brpc::VarsDumper::VarsDumper
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VarsDumper(butil::IOBufBuilder& os, bool use_html)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::describe_series_exposed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:271,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 2
    argNames:
    - ' name'
    - ' desc'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 266
    functionDepth: 2
    functionLinenumber: 266
    functionLinenumberEnd: 295
    functionName: brpc::VarsDumper::dump
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached:
    - bvar::Variable::describe_series_exposed
    linkageType: ''
    returnType: bool
    signature: bool dump(const std::string& name, const butil::StringPiece& desc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::VarsDumper::move_to
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 299
    functionName: brpc::VarsDumper::move_to
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::VarsDumper::move_to
    linkageType: ''
    returnType: void
    signature: void move_to(butil::IOBuf& buf)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:313,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:314,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:315,1
    - Dst: bvar::Variable::describe_series_exposed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:317,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:318,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:320,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:321,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:321,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:323,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:324,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:326,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:327,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:331,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:331,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:333,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:336,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:339,1
    - Dst: PutVarsHeading
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:343,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:343,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:405,1
    - Dst: bvar::DumpOptions::DumpOptions
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:411,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:415,1
    - Dst: bvar::Variable::dump_exposed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:416,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:418,1
    - Dst: bvar::DumpOptions::white_wildcards::empty
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:421,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:422,1
    - Dst: bvar::DumpOptions::white_wildcards::c_str
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:423,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:428,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:428,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:429,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 308
    functionDepth: 3
    functionLinenumber: 308
    functionLinenumberEnd: 430
    functionName: brpc::VarsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - UseHTML
    - bvar::Variable::dump_exposed
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - PutVarsHeading
    - bvar::DumpOptions::DumpOptions
    - bvar::DumpOptions::white_wildcards::c_str
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - bvar::DumpOptions::white_wildcards::empty
    - bvar::Variable::describe_series_exposed
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void VarsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const ::brpc::VarsRequest*,\n                                 ::brpc::VarsResponse*,\n
      \                                ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/vars_service.cpp:433,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 436
    functionName: brpc::VarsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/vars_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void VarsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - realtime2
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::PrintedAsDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintedAsDateTime(int64_t realtime2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - uri2
    - html_addr2
    argTypes:
    - char*
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 76
    functionName: brpc::Path
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Path(const char* uri2, const butil::EndPoint* html_addr2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - uri2
    - html_addr2
    - text2
    argTypes:
    - char*
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: brpc::Path
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Path(const char* uri2, const butil::EndPoint* html_addr2, const
      char* text2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' obj2'
    - nspace2
    argTypes:
    - T
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: brpc::MinWidth
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MinWidth(const T& obj2, size_t nspace2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MinWidth
      Src: /src/brpc/src/brpc/builtin/common.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' obj'
    - nspace
    argTypes:
    - T
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::min_width
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached:
    - brpc::MinWidth
    linkageType: ''
    returnType: MinWidth<T>
    signature: MinWidth<T> min_width(const T& obj, size_t nspace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tellp
      Src: /src/brpc/src/brpc/builtin/common.h:139,1
    - Dst: tellp
      Src: /src/brpc/src/brpc/builtin/common.h:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' fw'
    argTypes:
    - std::ostream
    - MinWidth<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 145
    functionName: '& operator<<(std::ostream& os, const MinWidth<T>& fw)'
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached:
    - tellp
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MinWidth<T>& fw)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - realtime2
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: brpc::PrintedAsDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintedAsDateTime(int64_t realtime2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - uri2
    - html_addr2
    argTypes:
    - char*
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 76
    functionName: brpc::Path
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Path(const char* uri2, const butil::EndPoint* html_addr2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - uri2
    - html_addr2
    - text2
    argTypes:
    - char*
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: brpc::Path
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Path(const char* uri2, const butil::EndPoint* html_addr2, const
      char* text2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' obj2'
    - nspace2
    argTypes:
    - T
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: brpc::MinWidth
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MinWidth(const T& obj2, size_t nspace2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MinWidth
      Src: /src/brpc/src/brpc/builtin/common.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' obj'
    - nspace
    argTypes:
    - T
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: brpc::min_width
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached:
    - brpc::MinWidth
    linkageType: ''
    returnType: MinWidth<T>
    signature: MinWidth<T> min_width(const T& obj, size_t nspace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tellp
      Src: /src/brpc/src/brpc/builtin/common.h:139,1
    - Dst: tellp
      Src: /src/brpc/src/brpc/builtin/common.h:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' fw'
    argTypes:
    - std::ostream
    - MinWidth<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 145
    functionName: '& operator<<(std::ostream& os, const MinWidth<T>& fw)'
    functionSourceFile: /src/brpc/src/brpc/builtin/common.h
    functionUses: 0
    functionsReached:
    - tellp
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MinWidth<T>& fw)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MallocExtension*::GetNumericProperty
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - malloc_ext
    - prop_name
    - ' os'
    argTypes:
    - MallocExtension*
    - char*
    - butil::IOBufBuilder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 38
    functionName: brpc::get_tcmalloc_num_prop
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 0
    functionsReached:
    - MallocExtension*::GetNumericProperty
    linkageType: ''
    returnType: void
    signature: "void get_tcmalloc_num_prop(MallocExtension* malloc_ext,\n                                         const
      char* prop_name,\n                                         butil::IOBufBuilder&
      os)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:41,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:42,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:44,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:45,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:46,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:47,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:48,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:49,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:50,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:51,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:52,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:55,1
    - Dst: MallocExtension*::GetStats
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:56,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:56,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:57,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - ' out'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 60
    functionName: brpc::get_tcmalloc_memory_info
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - MallocExtension*::GetStats
    - brpc::get_tcmalloc_num_prop
    - char::char
    - std::unique_ptr::get
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: void
    signature: void get_tcmalloc_memory_info(butil::IOBuf& out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:63,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:64,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:66,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:67,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:68,1
    - Dst: brpc::StatsPrint
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 69
    functionName: brpc::get_jemalloc_memory_info
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - std::string*::empty
    - brpc::StatsPrint
    - GetQuery
    linkageType: ''
    returnType: void
    signature: void get_jemalloc_memory_info(Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:76,1
    - Dst: auto::http_response
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:77,1
    - Dst: auto::response_attachment
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:78,1
    - Dst: IsTCMallocEnabled
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:80,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:81,1
    - Dst: get_tcmalloc_memory_info
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:82,1
    - Dst: HasJemalloc
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:83,1
    - Dst: get_jemalloc_memory_info
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:85,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:87,1
    - Dst: auto::http_response
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 71
    functionDepth: 3
    functionLinenumber: 71
    functionLinenumberEnd: 91
    functionName: brpc::MemoryService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 1
    functionsReached:
    - append
    - auto::response_attachment
    - IsTCMallocEnabled
    - get_jemalloc_memory_info
    - auto::http_response
    - get_tcmalloc_memory_info
    - static_cast<Controller*>
    - HasJemalloc
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void MemoryService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                    const ::brpc::MemoryRequest*,\n
      \                                   ::brpc::MemoryResponse*,\n                                    ::google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MallocExtension*::GetNumericProperty
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - malloc_ext
    - prop_name
    - ' os'
    argTypes:
    - MallocExtension*
    - char*
    - butil::IOBufBuilder
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 38
    functionName: brpc::get_tcmalloc_num_prop
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 1
    functionsReached:
    - MallocExtension*::GetNumericProperty
    linkageType: ''
    returnType: void
    signature: "void get_tcmalloc_num_prop(MallocExtension* malloc_ext,\n                                         const
      char* prop_name,\n                                         butil::IOBufBuilder&
      os)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:41,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:42,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:44,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:45,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:46,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:47,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:48,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:49,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:50,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:51,1
    - Dst: brpc::get_tcmalloc_num_prop
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:52,1
    - Dst: char::char
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:55,1
    - Dst: MallocExtension*::GetStats
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:56,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:56,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:57,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - ' out'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 60
    functionName: brpc::get_tcmalloc_memory_info
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - MallocExtension*::GetStats
    - brpc::get_tcmalloc_num_prop
    - char::char
    - std::unique_ptr::get
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::Extension<T>::instance
    linkageType: ''
    returnType: void
    signature: void get_tcmalloc_memory_info(butil::IOBuf& out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:63,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:64,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:66,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:67,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:68,1
    - Dst: brpc::StatsPrint
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 69
    functionName: brpc::get_jemalloc_memory_info
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - std::string*::empty
    - brpc::StatsPrint
    - GetQuery
    linkageType: ''
    returnType: void
    signature: void get_jemalloc_memory_info(Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:76,1
    - Dst: auto::http_response
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:77,1
    - Dst: auto::response_attachment
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:78,1
    - Dst: IsTCMallocEnabled
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:80,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:81,1
    - Dst: get_tcmalloc_memory_info
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:82,1
    - Dst: HasJemalloc
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:83,1
    - Dst: get_jemalloc_memory_info
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:85,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:87,1
    - Dst: auto::http_response
      Src: /src/brpc/src/brpc/builtin/memory_service.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 71
    functionDepth: 3
    functionLinenumber: 71
    functionLinenumberEnd: 91
    functionName: brpc::MemoryService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/memory_service.cpp
    functionUses: 1
    functionsReached:
    - append
    - auto::response_attachment
    - IsTCMallocEnabled
    - get_jemalloc_memory_info
    - auto::http_response
    - get_tcmalloc_memory_info
    - static_cast<Controller*>
    - HasJemalloc
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void MemoryService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                    const ::brpc::MemoryRequest*,\n
      \                                   ::brpc::MemoryResponse*,\n                                    ::google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:39,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:40,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:41,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:41,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:43,1
    - Dst: BadMethodRequest*::service_name
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:47,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:48,1
    - Dst: BadMethodRequest*::service_name
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:49,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:52,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:54,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:55,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:56,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:57,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:64,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:64,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 3
    argNames:
    - cntl_base
    - request
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - BadMethodRequest*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 65
    functionName: brpc::BadMethodService::no_method
    functionSourceFile: /src/brpc/src/brpc/builtin/bad_method_service.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - Controller*::http_response
    - Controller*::http_request
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::ServiceProperty*::service::GetDescriptor
    - static_cast<Controller*>
    - ServerPrivateAccessor
    - UseHTML
    - BadMethodRequest*::service_name
    - Controller*::SetFailed
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void BadMethodService::no_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const BadMethodRequest* request,\n
      \                                BadMethodResponse*,\n                                 ::google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:39,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:40,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:41,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:41,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:43,1
    - Dst: BadMethodRequest*::service_name
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:47,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:48,1
    - Dst: BadMethodRequest*::service_name
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:49,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:52,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:54,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:55,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:56,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:57,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:64,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/bad_method_service.cpp:64,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 3
    argNames:
    - cntl_base
    - request
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - BadMethodRequest*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 65
    functionName: brpc::BadMethodService::no_method
    functionSourceFile: /src/brpc/src/brpc/builtin/bad_method_service.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - Controller*::http_response
    - Controller*::http_request
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::ServiceProperty*::service::GetDescriptor
    - static_cast<Controller*>
    - ServerPrivateAccessor
    - UseHTML
    - BadMethodRequest*::service_name
    - Controller*::SetFailed
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void BadMethodService::no_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const BadMethodRequest* request,\n
      \                                BadMethodResponse*,\n                                 ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:28,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:29,1
    - Dst: brpc::sorttable_js
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: brpc::InitSortTableBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/sorttable_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBuf::IOBuf
    - brpc::sorttable_js
    linkageType: ''
    returnType: void
    signature: void InitSortTableBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::sorttable_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/sorttable_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & sorttable_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 527
    functionName: brpc::sorttable_js
    functionSourceFile: /src/brpc/src/brpc/builtin/sorttable_js.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * sorttable_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:28,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:29,1
    - Dst: brpc::sorttable_js
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: brpc::InitSortTableBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/sorttable_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBuf::IOBuf
    - brpc::sorttable_js
    linkageType: ''
    returnType: void
    signature: void InitSortTableBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/sorttable_js.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::sorttable_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/sorttable_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & sorttable_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 527
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 527
    functionName: brpc::sorttable_js
    functionSourceFile: /src/brpc/src/brpc/builtin/sorttable_js.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * sorttable_js()
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:48,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:49,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:50,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:50,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:54,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:56,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:61,1
    - Dst: PutVarsHeading
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:62,1
    - Dst: Server*::PrintTabsBody
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:64,1
    - Dst: Server*::version
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:67,1
    - Dst: Server*::_nerror_bvar::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:75,1
    - Dst: Server*::_nerror_bvar::get_value
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:77,1
    - Dst: Server*::_nerror_bvar::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:79,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:90,1
    - Dst: Server*::GetStat
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:94,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:98,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:105,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:119,1
    - Dst: Server*::Concurrency
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:122,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:125,1
    - Dst: Server::ServiceMap::begin
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:138,1
    - Dst: Server::ServiceMap::end
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:138,1
    - Dst: is_user_service
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:140,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:143,1
    - Dst: dynamic_cast<Tabbed*>
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:144,1
    - Dst: service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:150,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:151,1
    - Dst: dynamic_cast<Describable*>
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:156,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:158,1
    - Dst: Describable*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:159,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:160,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:162,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:163,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:169,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:171,1
    - Dst: Server*::_method_map::seek
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:173,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:173,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:175,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:176,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:177,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:179,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:180,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:188,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:188,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:189,1
    - Dst: Server::MethodProperty*::status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:198,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:203,1
    - Dst: BaiduMasterService*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:209,1
    - Dst: BaiduMasterService*::_status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:211,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:214,1
    - Dst: NsheadService*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:220,1
    - Dst: NsheadService*::_status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:222,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:226,1
    - Dst: ThriftService*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:232,1
    - Dst: ThriftService*::_status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:234,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:245,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:255,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:262,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:262,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:263,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 145
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 264
    functionName: brpc::StatusService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/status_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - NsheadService*::_status::Describe
    - Controller*::http_response
    - Describable*::Describe
    - Server*::ServerPrefix
    - Server::MethodProperty*::status::Describe
    - Server*::_nerror_bvar::name
    - Controller*::set_response_compress_type
    - Controller*::server
    - dynamic_cast<Describable*>
    - dynamic_cast<Tabbed*>
    - BaiduMasterService*::_status::Describe
    - BaiduMasterService*::Describe
    - ThriftService*::_status::Describe
    - is_user_service
    - google::protobuf::ServiceDescriptor*::method
    - service::GetDescriptor
    - Describe
    - Server*::Concurrency
    - NsheadService*::Describe
    - google::protobuf::ServiceDescriptor*::full_name
    - std::ostringstream::str
    - Server::ServiceMap::end
    - Controller*::http_request
    - Server*::version
    - Server*::_nerror_bvar::get_value
    - Server*::options
    - static_cast<Controller*>
    - PutVarsHeading
    - CHECK
    - Server*::GetStat
    - google::protobuf::MethodDescriptor*::name
    - ThriftService*::Describe
    - Server*::_method_map::seek
    - Server::ServiceMap::begin
    - google::protobuf::MethodDescriptor*::output_type
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::input_type
    - Controller*::response_attachment
    - UseHTML
    - Server*::PrintTabsBody
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void StatusService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                   const ::brpc::StatusRequest*,\n
      \                                  ::brpc::StatusResponse*,\n                                   ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 270
    functionName: brpc::StatusService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/status_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void StatusService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:48,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:49,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:50,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:50,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:54,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:56,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:61,1
    - Dst: PutVarsHeading
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:62,1
    - Dst: Server*::PrintTabsBody
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:64,1
    - Dst: Server*::version
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:67,1
    - Dst: Server*::_nerror_bvar::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:75,1
    - Dst: Server*::_nerror_bvar::get_value
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:77,1
    - Dst: Server*::_nerror_bvar::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:79,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:90,1
    - Dst: Server*::GetStat
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:94,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:98,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:105,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:119,1
    - Dst: Server*::Concurrency
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:122,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:125,1
    - Dst: Server::ServiceMap::begin
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:138,1
    - Dst: Server::ServiceMap::end
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:138,1
    - Dst: is_user_service
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:140,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:143,1
    - Dst: dynamic_cast<Tabbed*>
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:144,1
    - Dst: service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:150,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:151,1
    - Dst: dynamic_cast<Describable*>
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:156,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:158,1
    - Dst: Describable*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:159,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:160,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:162,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:163,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:169,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:171,1
    - Dst: Server*::_method_map::seek
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:173,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:173,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:175,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:176,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:177,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:179,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:180,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:188,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:188,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:189,1
    - Dst: Server::MethodProperty*::status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:198,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:203,1
    - Dst: BaiduMasterService*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:209,1
    - Dst: BaiduMasterService*::_status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:211,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:214,1
    - Dst: NsheadService*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:220,1
    - Dst: NsheadService*::_status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:222,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:226,1
    - Dst: ThriftService*::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:232,1
    - Dst: ThriftService*::_status::Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:234,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:245,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:255,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:262,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:262,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:263,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 145
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 264
    functionName: brpc::StatusService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/status_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - NsheadService*::_status::Describe
    - Controller*::http_response
    - Describable*::Describe
    - Server*::ServerPrefix
    - Server::MethodProperty*::status::Describe
    - Server*::_nerror_bvar::name
    - Controller*::set_response_compress_type
    - Controller*::server
    - dynamic_cast<Describable*>
    - dynamic_cast<Tabbed*>
    - BaiduMasterService*::_status::Describe
    - BaiduMasterService*::Describe
    - ThriftService*::_status::Describe
    - is_user_service
    - google::protobuf::ServiceDescriptor*::method
    - service::GetDescriptor
    - Describe
    - Server*::Concurrency
    - NsheadService*::Describe
    - google::protobuf::ServiceDescriptor*::full_name
    - std::ostringstream::str
    - Server::ServiceMap::end
    - Controller*::http_request
    - Server*::version
    - Server*::_nerror_bvar::get_value
    - Server*::options
    - static_cast<Controller*>
    - PutVarsHeading
    - CHECK
    - Server*::GetStat
    - google::protobuf::MethodDescriptor*::name
    - ThriftService*::Describe
    - Server*::_method_map::seek
    - Server::ServiceMap::begin
    - google::protobuf::MethodDescriptor*::output_type
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::input_type
    - Controller*::response_attachment
    - UseHTML
    - Server*::PrintTabsBody
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void StatusService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                   const ::brpc::StatusRequest*,\n
      \                                  ::brpc::StatusResponse*,\n                                   ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/status_service.cpp:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 270
    functionName: brpc::StatusService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/status_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void StatusService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 5508
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 5508
    functionName: brpc::pprof_perl
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_perl.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * pprof_perl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 5508
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 5508
    functionName: brpc::pprof_perl
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_perl.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * pprof_perl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:33,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:34,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:35,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:36,1
    - Dst: GenerateReport
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:36,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:37,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:39,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: brpc::HealthService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/health_service.cpp
    functionUses: 1
    functionsReached:
    - ClosureGuard::release
    - Controller*::http_response
    - Server*::options
    - static_cast<Controller*>
    - Controller*::response_attachment
    - GenerateReport
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void HealthService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                   const ::brpc::HealthRequest*,\n
      \                                  ::brpc::HealthResponse*,\n                                   ::google::protobuf::Closure*
      done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:33,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:34,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:35,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:36,1
    - Dst: GenerateReport
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:36,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:37,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:39,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/health_service.cpp:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: brpc::HealthService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/health_service.cpp
    functionUses: 1
    functionsReached:
    - ClosureGuard::release
    - Controller*::http_response
    - Server*::options
    - static_cast<Controller*>
    - Controller*::response_attachment
    - GenerateReport
    - Controller*::server
    linkageType: ''
    returnType: void
    signature: "void HealthService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                   const ::brpc::HealthRequest*,\n
      \                                  ::brpc::HealthResponse*,\n                                   ::google::protobuf::Closure*
      done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:60,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:63,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:63,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:64,1
    - Dst: std::string*::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:64,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:67,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:67,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 72
    functionName: brpc::ReadSeconds
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - Controller*::http_request
    - strtol
    - Controller*::SetFailed
    - std::string*::length
    linkageType: ''
    returnType: int
    signature: int ReadSeconds(Controller* cntl)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:76,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:76,1
    - Dst: brpc::GetProgramChecksum
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:77,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:85,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:86,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:87,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:92,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - type
    - buf
    - buf_len
    argTypes:
    - ProfilingType
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 94
    functionName: brpc::MakeProfName
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 2
    functionsReached:
    - strftime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - localtime
    - c_str
    - time
    linkageType: ''
    returnType: int
    signature: int MakeProfName(ProfilingType type, char* buf, size_t buf_len)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:102,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:103,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:105,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:107,1
    - Dst: ReadSeconds
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:110,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:113,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:120,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:121,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:126,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:126,1
    - Dst: MakeProfName
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:130,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:131,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:131,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:135,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:136,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:137,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:137,1
    - Dst: ProfilerStart
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:141,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:144,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:145,1
    - Dst: ProfilerStop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:147,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:151,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:154,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:155,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:156,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 157
    functionName: brpc::PProfService::profile
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - ReadSeconds
    - Controller*::http_response
    - bthread_usleep
    - Controller*::SetFailed
    - butil::IOPortal::IOPortal
    - PLOG
    - LOG
    - Controller*::remote_side
    - std::ostringstream::str
    - Controller*::auth_context
    - static_cast<Controller*>
    - butil::FilePath
    - berror
    - ProfilerStart
    - ProfilerStop
    - butil::IOPortal::append_from_file_descriptor
    - butil::CreateDirectoryAndGetError
    - Controller*::Failed
    - MakeProfName
    - butil::FilePath::value
    - Controller*::response_attachment
    linkageType: ''
    returnType: void
    signature: "void PProfService::profile(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:165,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:166,1
    - Dst: ReadSeconds
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:167,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:169,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:170,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:177,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:178,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:183,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:183,1
    - Dst: MakeProfName
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:187,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:188,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:188,1
    - Dst: ContentionProfilerStart
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:191,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:192,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:195,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:196,1
    - Dst: ContentionProfilerStop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:198,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:202,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:205,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:206,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:207,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 159
    functionDepth: 2
    functionLinenumber: 159
    functionLinenumberEnd: 208
    functionName: brpc::PProfService::contention
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - ReadSeconds
    - std::ostringstream::str
    - Controller*::Failed
    - Controller*::http_response
    - MakeProfName
    - bthread_usleep
    - ContentionProfilerStop
    - Controller*::auth_context
    - Controller*::response_attachment
    - static_cast<Controller*>
    - ContentionProfilerStart
    - butil::IOPortal::IOPortal
    - berror
    - LOG
    - PLOG
    - Controller*::SetFailed
    - butil::IOPortal::append_from_file_descriptor
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PProfService::contention(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:216,1
    - Dst: HasJemalloc
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:218,1
    - Dst: JeControlProfile
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:219,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:223,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:224,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:229,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:236,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:237,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:242,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:242,1
    - Dst: MallocExtension*::GetHeapSample
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:245,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:246,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:247,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 248
    functionName: brpc::PProfService::heap
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - has_TCMALLOC_SAMPLE_PARAMETER
    - std::ostringstream::str
    - MallocExtension*::GetHeapSample
    - Controller*::http_response
    - JeControlProfile
    - Controller*::auth_context
    - Controller*::response_attachment
    - static_cast<Controller*>
    - HasJemalloc
    - LOG
    - Controller*::SetFailed
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PProfService::heap(\n    ::google::protobuf::RpcController* controller_base,\n
      \   const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:256,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:257,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:259,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:261,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:266,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:267,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:268,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:272,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:272,1
    - Dst: MallocExtension*::GetHeapGrowthStacks
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:275,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:276,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 278
    functionName: brpc::PProfService::growth
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - Controller*::http_response
    - MallocExtension*::GetHeapGrowthStacks
    - Controller*::auth_context
    - Controller*::response_attachment
    - static_cast<Controller*>
    - berror
    - LOG
    - Controller*::SetFailed
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PProfService::growth(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:291,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:295,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:295,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - ' name'
    - ' ext'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 290
    functionDepth: 2
    functionLinenumber: 290
    functionLinenumberEnd: 297
    functionName: brpc::HasExt
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - find
    - brpc::size
    linkageType: ''
    returnType: bool
    signature: bool HasExt(const std::string& name, const std::string& ext)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:302,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:303,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:305,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:307,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:309,1
    - Dst: std::getline
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:313,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:314,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:319,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:319,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:333,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:342,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:343,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:344,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:345,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:346,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:347,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:348,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:352,1
    - Dst: isalpha
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:369,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:369,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:385,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:386,1
    - Dst: SymbolMap::iterator::second::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:387,1
    - Dst: SymbolMap::iterator::second::assign
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:388,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:391,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:394,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:394,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:395,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:397,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:398,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 69
    argCount: 2
    argNames:
    - ' addr_map'
    - ' lib_info'
    argTypes:
    - std::map<uintptr_t, std::string>
    - LibInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 400
    functionName: brpc::ExtractSymbolsFromBinary
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - isalpha
    - butil::StringSplitter::length
    - std::string::c_str
    - std::string
    - butil::Timer::start
    - find
    - isdigit
    - strtoull
    - std::string::append
    - butil::Timer::m_elapsed
    - butil::read_command_output
    - LOG
    - butil::Timer::Timer
    - SymbolMap::iterator::second::size
    - SymbolMap::iterator::second::assign
    - end
    - butil::Timer::stop
    - std::getline
    - butil::StringSplitter::field
    - strncmp
    linkageType: ''
    returnType: int
    signature: "int ExtractSymbolsFromBinary(\n    std::map<uintptr_t, std::string>&
      addr_map,\n    const LibInfo& lib_info)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:403,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:404,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:405,1
    - Dst: getline
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:412,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:412,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:418,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:418,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:423,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:429,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:429,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:436,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:436,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:447,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:448,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:451,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:452,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:452,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:453,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:453,1
    - Dst: brpc::ExtractSymbolsFromBinary
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:461,1
    - Dst: free
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:463,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:467,1
    - Dst: getprogname
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:472,1
    - Dst: brpc::ExtractSymbolsFromBinary
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:474,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:476,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:477,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:481,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:481,1
    - Dst: SymbolMap::iterator::second::empty
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:482,1
    - Dst: erase
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:484,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:494,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:495,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:496,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:498,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:499,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 70
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 402
    functionDepth: 3
    functionLinenumber: 402
    functionLinenumberEnd: 500
    functionName: brpc::LoadSymbols
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - brpc::HasExt
    - butil::ScopedFILE::get
    - butil::Timer::start
    - strtoull
    - butil::Timer::m_elapsed
    - RPC_VLOG_IF
    - getprogname
    - SymbolMap::iterator::second::empty
    - butil::Timer::Timer
    - free
    - erase
    - begin
    - brpc::ExtractSymbolsFromBinary
    - fopen
    - end
    - butil::Timer::stop
    - butil::StringSplitter::field
    - getline
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void LoadSymbols()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:504,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:505,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:506,1
    - Dst: lower_bound
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:507,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:508,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:509,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:512,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:513,1
    - Dst: SymbolMap::const_iterator::second::empty
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:517,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:518,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:519,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:521,1
    - Dst: butil::IOBuf*::push_back
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:522,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - out
    - ' addr_list'
    argTypes:
    - butil::IOBuf*
    - std::vector<uintptr_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 502
    functionDepth: 2
    functionLinenumber: 502
    functionLinenumberEnd: 525
    functionName: brpc::FindSymbols
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - end
    - lower_bound
    - SymbolMap::const_iterator::second::empty
    - butil::IOBuf*::push_back
    - butil::IOBuf*::append
    - snprintf
    - brpc::size
    - begin
    linkageType: ''
    returnType: void
    signature: void FindSymbols(butil::IOBuf* out, std::vector<uintptr_t>& addr_list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:533,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:534,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:537,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:539,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:541,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:541,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:542,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:545,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:547,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:552,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:556,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:556,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:557,1
    - Dst: FindSymbols
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:559,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:559,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 527
    functionDepth: 1
    functionLinenumber: 527
    functionLinenumberEnd: 561
    functionName: brpc::PProfService::symbol
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    - Controller*::request_attachment
    - std::vector::push_back
    - std::string::c_str
    - Controller*::http_response
    - Controller*::http_request
    - FindSymbols
    - strtoull
    - snprintf
    - butil::StringSplitter::field
    - Controller*::response_attachment
    - static_cast<Controller*>
    - size
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: "void PProfService::symbol(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:568,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:569,1
    - Dst: butil::ReadCommandLine
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:571,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:573,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:576,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 563
    functionDepth: 1
    functionLinenumber: 563
    functionLinenumberEnd: 577
    functionName: brpc::PProfService::cmdline
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - Controller*::response_attachment
    - static_cast<Controller*>
    - butil::ReadCommandLine
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PProfService::cmdline(::google::protobuf::RpcController* controller_base,\n
      \                          const ::brpc::ProfileRequest* /*request*/,\n                           ::brpc::ProfileResponse*
      /*response*/,\n                           ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:60,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:63,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:63,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:64,1
    - Dst: std::string*::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:64,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:67,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:67,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 72
    functionName: brpc::ReadSeconds
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - Controller*::http_request
    - strtol
    - Controller*::SetFailed
    - std::string*::length
    linkageType: ''
    returnType: int
    signature: int ReadSeconds(Controller* cntl)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:76,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:76,1
    - Dst: brpc::GetProgramChecksum
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:77,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:85,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:86,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:87,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:92,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - type
    - buf
    - buf_len
    argTypes:
    - ProfilingType
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 94
    functionName: brpc::MakeProfName
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 2
    functionsReached:
    - strftime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - localtime
    - c_str
    - time
    linkageType: ''
    returnType: int
    signature: int MakeProfName(ProfilingType type, char* buf, size_t buf_len)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:102,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:103,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:105,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:107,1
    - Dst: ReadSeconds
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:110,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:113,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:120,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:121,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:126,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:126,1
    - Dst: MakeProfName
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:130,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:131,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:131,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:135,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:136,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:137,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:137,1
    - Dst: ProfilerStart
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:140,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:141,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:144,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:145,1
    - Dst: ProfilerStop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:147,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:151,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:154,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:155,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:156,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 157
    functionName: brpc::PProfService::profile
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - ReadSeconds
    - Controller*::http_response
    - bthread_usleep
    - Controller*::SetFailed
    - butil::IOPortal::IOPortal
    - PLOG
    - LOG
    - Controller*::remote_side
    - std::ostringstream::str
    - Controller*::auth_context
    - static_cast<Controller*>
    - butil::FilePath
    - berror
    - ProfilerStart
    - ProfilerStop
    - butil::IOPortal::append_from_file_descriptor
    - butil::CreateDirectoryAndGetError
    - Controller*::Failed
    - MakeProfName
    - butil::FilePath::value
    - Controller*::response_attachment
    linkageType: ''
    returnType: void
    signature: "void PProfService::profile(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:165,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:166,1
    - Dst: ReadSeconds
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:167,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:169,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:170,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:177,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:178,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:183,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:183,1
    - Dst: MakeProfName
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:187,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:188,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:188,1
    - Dst: ContentionProfilerStart
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:191,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:192,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:195,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:196,1
    - Dst: ContentionProfilerStop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:198,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:202,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:205,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:206,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:207,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 159
    functionDepth: 2
    functionLinenumber: 159
    functionLinenumberEnd: 208
    functionName: brpc::PProfService::contention
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - ReadSeconds
    - std::ostringstream::str
    - Controller*::Failed
    - Controller*::http_response
    - MakeProfName
    - bthread_usleep
    - ContentionProfilerStop
    - Controller*::auth_context
    - Controller*::response_attachment
    - static_cast<Controller*>
    - ContentionProfilerStart
    - butil::IOPortal::IOPortal
    - berror
    - LOG
    - PLOG
    - Controller*::SetFailed
    - butil::IOPortal::append_from_file_descriptor
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PProfService::contention(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:216,1
    - Dst: HasJemalloc
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:218,1
    - Dst: JeControlProfile
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:219,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:223,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:224,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:229,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:236,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:237,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:242,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:242,1
    - Dst: MallocExtension*::GetHeapSample
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:245,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:246,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:247,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 248
    functionName: brpc::PProfService::heap
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - has_TCMALLOC_SAMPLE_PARAMETER
    - std::ostringstream::str
    - MallocExtension*::GetHeapSample
    - Controller*::http_response
    - JeControlProfile
    - Controller*::auth_context
    - Controller*::response_attachment
    - static_cast<Controller*>
    - HasJemalloc
    - LOG
    - Controller*::SetFailed
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PProfService::heap(\n    ::google::protobuf::RpcController* controller_base,\n
      \   const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:256,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:257,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:259,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:261,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:266,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:267,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:268,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:272,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:272,1
    - Dst: MallocExtension*::GetHeapGrowthStacks
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:275,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:276,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 278
    functionName: brpc::PProfService::growth
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - Controller*::http_response
    - MallocExtension*::GetHeapGrowthStacks
    - Controller*::auth_context
    - Controller*::response_attachment
    - static_cast<Controller*>
    - berror
    - LOG
    - Controller*::SetFailed
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    linkageType: ''
    returnType: void
    signature: "void PProfService::growth(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:291,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:295,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:295,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:296,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - ' name'
    - ' ext'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 290
    functionDepth: 2
    functionLinenumber: 290
    functionLinenumberEnd: 297
    functionName: brpc::HasExt
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - find
    - brpc::size
    linkageType: ''
    returnType: bool
    signature: bool HasExt(const std::string& name, const std::string& ext)
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:302,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:303,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:305,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:307,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:309,1
    - Dst: std::getline
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:313,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:314,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:319,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:319,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:333,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:342,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:343,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:344,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:345,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:346,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:347,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:348,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:352,1
    - Dst: isalpha
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:369,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:369,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:385,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:386,1
    - Dst: SymbolMap::iterator::second::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:387,1
    - Dst: SymbolMap::iterator::second::assign
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:388,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:391,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:394,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:394,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:395,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:397,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:398,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 69
    argCount: 2
    argNames:
    - ' addr_map'
    - ' lib_info'
    argTypes:
    - std::map<uintptr_t, std::string>
    - LibInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 400
    functionName: brpc::ExtractSymbolsFromBinary
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - isalpha
    - butil::StringSplitter::length
    - std::string::c_str
    - std::string
    - butil::Timer::start
    - find
    - isdigit
    - strtoull
    - std::string::append
    - butil::Timer::m_elapsed
    - butil::read_command_output
    - LOG
    - butil::Timer::Timer
    - SymbolMap::iterator::second::size
    - SymbolMap::iterator::second::assign
    - end
    - butil::Timer::stop
    - std::getline
    - butil::StringSplitter::field
    - strncmp
    linkageType: ''
    returnType: int
    signature: "int ExtractSymbolsFromBinary(\n    std::map<uintptr_t, std::string>&
      addr_map,\n    const LibInfo& lib_info)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:403,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:404,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:405,1
    - Dst: getline
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:412,1
    - Dst: butil::ScopedFILE::get
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:412,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:418,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:418,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:423,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:429,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:429,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:436,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:436,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:447,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:448,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:451,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:452,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:452,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:453,1
    - Dst: brpc::HasExt
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:453,1
    - Dst: brpc::ExtractSymbolsFromBinary
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:461,1
    - Dst: free
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:463,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:467,1
    - Dst: getprogname
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:472,1
    - Dst: brpc::ExtractSymbolsFromBinary
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:474,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:476,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:477,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:481,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:481,1
    - Dst: SymbolMap::iterator::second::empty
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:482,1
    - Dst: erase
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:484,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:494,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:495,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:496,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:498,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:499,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 70
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 402
    functionDepth: 3
    functionLinenumber: 402
    functionLinenumberEnd: 500
    functionName: brpc::LoadSymbols
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - brpc::HasExt
    - butil::ScopedFILE::get
    - butil::Timer::start
    - strtoull
    - butil::Timer::m_elapsed
    - RPC_VLOG_IF
    - getprogname
    - SymbolMap::iterator::second::empty
    - butil::Timer::Timer
    - free
    - erase
    - begin
    - brpc::ExtractSymbolsFromBinary
    - fopen
    - end
    - butil::Timer::stop
    - butil::StringSplitter::field
    - getline
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void LoadSymbols()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:504,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:505,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:506,1
    - Dst: lower_bound
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:507,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:508,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:509,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:512,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:513,1
    - Dst: SymbolMap::const_iterator::second::empty
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:517,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:518,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:519,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:521,1
    - Dst: butil::IOBuf*::push_back
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:522,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - out
    - ' addr_list'
    argTypes:
    - butil::IOBuf*
    - std::vector<uintptr_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 502
    functionDepth: 2
    functionLinenumber: 502
    functionLinenumberEnd: 525
    functionName: brpc::FindSymbols
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 0
    functionsReached:
    - end
    - lower_bound
    - SymbolMap::const_iterator::second::empty
    - butil::IOBuf*::push_back
    - butil::IOBuf*::append
    - snprintf
    - brpc::size
    - begin
    linkageType: ''
    returnType: void
    signature: void FindSymbols(butil::IOBuf* out, std::vector<uintptr_t>& addr_list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:533,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:534,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:537,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:539,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:541,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:541,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:542,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:545,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:547,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:552,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:556,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:556,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:557,1
    - Dst: FindSymbols
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:559,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:559,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 527
    functionDepth: 1
    functionLinenumber: 527
    functionLinenumberEnd: 561
    functionName: brpc::PProfService::symbol
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - pthread_once
    - Controller*::request_attachment
    - std::vector::push_back
    - std::string::c_str
    - Controller*::http_response
    - Controller*::http_request
    - FindSymbols
    - strtoull
    - snprintf
    - butil::StringSplitter::field
    - Controller*::response_attachment
    - static_cast<Controller*>
    - size
    - std::vector::reserve
    linkageType: ''
    returnType: void
    signature: "void PProfService::symbol(\n    ::google::protobuf::RpcController*
      controller_base,\n    const ::brpc::ProfileRequest* /*request*/,\n    ::brpc::ProfileResponse*
      /*response*/,\n    ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:568,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:569,1
    - Dst: butil::ReadCommandLine
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:571,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:573,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/pprof_service.cpp:576,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - controller_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 563
    functionDepth: 1
    functionLinenumber: 563
    functionLinenumberEnd: 577
    functionName: brpc::PProfService::cmdline
    functionSourceFile: /src/brpc/src/brpc/builtin/pprof_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - Controller*::response_attachment
    - static_cast<Controller*>
    - butil::ReadCommandLine
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: "void PProfService::cmdline(::google::protobuf::RpcController* controller_base,\n
      \                          const ::brpc::ProfileRequest* /*request*/,\n                           ::brpc::ProfileResponse*
      /*response*/,\n                           ::google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - type
    argTypes:
    - DisplayType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 64
    functionName: brpc::DisplayTypeToString
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * DisplayTypeToString(DisplayType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::call_once
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:69,1
    - Dst: butil::CaseIgnoredFlatMap<DisplayType>::CaseIgnoredFlatMap<DisplayType>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:70,1
    - Dst: butil::CaseIgnoredFlatMap*::seek
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - ' val'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 82
    functionName: brpc::StringToDisplayType
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - std::call_once
    - butil::CaseIgnoredFlatMap*::seek
    - butil::CaseIgnoredFlatMap<DisplayType>::CaseIgnoredFlatMap<DisplayType>
    linkageType: ''
    returnType: DisplayType
    signature: DisplayType StringToDisplayType(const std::string& val)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 1
    argNames:
    - type
    argTypes:
    - DisplayType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 96
    functionName: brpc::DisplayTypeToPProfArgument
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string DisplayTypeToPProfArgument(DisplayType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:100,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:100,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:100,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' filename'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: brpc::GeneratePerlScriptPath
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - std::string::push_back
    - brpc::size
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string GeneratePerlScriptPath(const std::string& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::ProfilingClient
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProfilingClient()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: brpc::ProfilingResult
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProfilingResult()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:171,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:173,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:173,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:177,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:179,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:179,1
    - Dst: fwrite
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:183,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:183,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:184,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:184,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:187,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:187,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - filepath_in
    - ' content'
    argTypes:
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 2
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: brpc::WriteSmallFile
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    - butil::FilePath::value
    - data
    - brpc::size
    - CHECK_EQ
    - fclose
    - fwrite
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool WriteSmallFile(const char* filepath_in,\n                           const
      butil::StringPiece& content)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:195,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:196,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:197,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:197,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:201,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:203,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:203,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:209,1
    - Dst: fwrite
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:211,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:211,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:212,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:216,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - filepath_in
    - ' content'
    argTypes:
    - char*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 218
    functionName: brpc::WriteSmallFile
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    - butil::FilePath::value
    - fclose
    - fwrite
    - butil::IOBufAsZeroCopyInputStream::Next
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool WriteSmallFile(const char* filepath_in,\n                           const
      butil::IOBuf& content)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:223,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:226,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:226,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:227,1
    - Dst: std::string*::length
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:227,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:233,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 235
    functionName: brpc::ReadSeconds
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - Controller*::http_request
    - std::min
    - strtol
    - std::string*::length
    linkageType: ''
    returnType: int
    signature: int ReadSeconds(const Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::find_last_of
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:241,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:247,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - full_base_name
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 248
    functionName: brpc::GetBaseName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - std::string*::find_last_of
    linkageType: ''
    returnType: char
    signature: char * GetBaseName(const std::string* full_base_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::find_last_of
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:252,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - full_base_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 259
    functionName: brpc::GetBaseName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::data
    - butil::StringPiece::find_last_of
    linkageType: ''
    returnType: char
    signature: char * GetBaseName(const char* full_base_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:266,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:271,1
    - Dst: isalpha
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:284,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:284,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 265
    functionDepth: 2
    functionLinenumber: 265
    functionLinenumberEnd: 290
    functionName: brpc::ValidProfilePath
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - starts_with
    - isalpha
    - brpc::size
    - isdigit
    linkageType: ''
    returnType: bool
    signature: bool ValidProfilePath(const butil::StringPiece& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:298,1
    - Dst: brpc::DisplayTypeToString
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:300,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:303,1
    - Dst: brpc::DisplayTypeToString
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:304,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 6
    argNames:
    - cache_name
    - len
    - prof_name
    - base_name
    - display_type
    - show_ccount
    argTypes:
    - char*
    - size_t
    - char*
    - char*
    - DisplayType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 308
    functionName: brpc::MakeCacheName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::DisplayTypeToString
    - snprintf
    linkageType: ''
    returnType: int
    signature: "int MakeCacheName(char* cache_name, size_t len,\n                         const
      char* prof_name,\n                         const char* base_name,\n                         DisplayType
      display_type,\n                         bool show_ccount)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:311,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:311,1
    - Dst: brpc::GetProgramChecksum
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:312,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:320,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:321,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:322,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:327,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:327,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - type
    - buf
    - buf_len
    argTypes:
    - ProfilingType
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 310
    functionDepth: 1
    functionLinenumber: 310
    functionLinenumberEnd: 329
    functionName: brpc::MakeProfName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - strftime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - localtime
    - c_str
    - time
    linkageType: ''
    returnType: int
    signature: int MakeProfName(ProfilingType type, char* buf, size_t buf_len)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ProfilingWaiter>*::clear
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:333,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:335,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:340,1
    - Dst: ProfilingResult::ProfilingResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:345,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:349,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:350,1
    - Dst: waiters::swap
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:355,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - type
    - cur_cntl
    - waiters
    argTypes:
    - ProfilingType
    - Controller*
    - std::vector<ProfilingWaiter>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 358
    functionName: brpc::ConsumeWaiters
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - ProfilingResult::ProfilingResult
    - std::vector<ProfilingWaiter>*::clear
    - Controller*::http_response
    - waiters::swap
    - arraysize
    - BAIDU_SCOPED_LOCK
    - Controller*::response_attachment
    - LOG
    linkageType: ''
    returnType: void
    signature: "void ConsumeWaiters(ProfilingType type, const Controller* cur_cntl,\n
      \                          std::vector<ProfilingWaiter>* waiters)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:367,1
    - Dst: brpc::ConsumeWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:368,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:369,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:372,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:373,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:374,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:374,1
    - Dst: ::google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - type
    - cur_cntl
    - view
    argTypes:
    - ProfilingType
    - Controller*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 377
    functionName: brpc::NotifyWaiters
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    - brpc::ConsumeWaiters
    - Controller*::response_attachment
    - CHECK
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void NotifyWaiters(ProfilingType type, const Controller* cur_cntl,\n
      \                         const std::string* view)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:382,1
    - Dst: strdup
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 392
    functionName: brpc::check_GOOGLE_PPROF_BINARY_PATH
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - getenv
    - strdup
    linkageType: ''
    returnType: bool
    signature: bool check_GOOGLE_PPROF_BINARY_PATH()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::check_GOOGLE_PPROF_BINARY_PATH
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 397
    functionName: brpc::has_GOOGLE_PPROF_BINARY_PATH
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::check_GOOGLE_PPROF_BINARY_PATH
    linkageType: ''
    returnType: bool
    signature: bool has_GOOGLE_PPROF_BINARY_PATH()
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:406,1
    - Dst: Controller*::IsCanceled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:407,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:412,1
    - Dst: brpc::UseHTML
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:413,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:413,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:414,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:415,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:416,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:419,1
    - Dst: brpc::StringToDisplayType
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:422,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:424,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:424,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:428,1
    - Dst: brpc::ValidProfilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:435,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:436,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:438,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:438,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:439,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:443,1
    - Dst: brpc::MakeCacheName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:446,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:447,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:450,1
    - Dst: fread
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:455,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:457,1
    - Dst: feof
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:460,1
    - Dst: ferror
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:464,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:471,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:471,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:474,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:476,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:478,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:480,1
    - Dst: brpc::GeneratePerlScriptPath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:488,1
    - Dst: brpc::DisplayTypeToPProfArgument
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:492,1
    - Dst: brpc::GetProgramPath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:498,1
    - Dst: brpc::DisplayTypeToPProfArgument
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:509,1
    - Dst: brpc::GetProgramPath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:514,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:517,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:520,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:520,1
    - Dst: brpc::pprof_perl
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:520,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:523,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:524,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:532,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:534,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:534,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:537,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:541,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:545,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:547,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:548,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:554,1
    - Dst: brpc::MakeCacheName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:557,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:558,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:562,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:563,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:564,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:565,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:566,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:568,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:569,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:570,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:571,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:571,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:573,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:574,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:574,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:576,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:577,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:578,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:581,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:582,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:582,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:584,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:585,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:585,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:587,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:588,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:589,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:592,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:593,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:594,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:594,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:594,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:599,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:601,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:603,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:605,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 134
    argCount: 5
    argNames:
    - cntl
    - done
    - prof_name
    - ' result_prefix'
    - type
    argTypes:
    - Controller*
    - google::protobuf::Closure*
    - char*
    - butil::IOBuf
    - ProfilingType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 400
    functionDepth: 3
    functionLinenumber: 400
    functionLinenumberEnd: 607
    functionName: brpc::DisplayResult
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - butil::IOBuf::append
    - getenv
    - butil::IOBuf::IOBuf
    - brpc::pprof_perl
    - Controller*::SetFailed
    - std::string*::c_str
    - std::string::c_str
    - brpc::DisplayTypeToPProfArgument
    - butil::DeleteFile
    - PLOG_IF
    - butil::PathExists
    - brpc::MakeCacheName
    - butil::read_command_output
    - LOG
    - brpc::UseHTML
    - butil::IOBuf::cut_until
    - std::ostringstream::str
    - ferror
    - Controller*::http_request
    - fread
    - CHECK
    - butil::FilePath
    - berror
    - brpc::ValidProfilePath
    - brpc::StringToDisplayType
    - brpc::WriteSmallFile
    - brpc::GeneratePerlScriptPath
    - butil::IOBuf::swap
    - fopen
    - feof
    - brpc::GetBaseName
    - brpc::GetProgramPath
    - Controller*::IsCanceled
    - Controller*::response_attachment
    - butil::FilePath::value
    - fclose
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void DisplayResult(Controller* cntl,\n                          google::protobuf::Closure*
      done,\n                          const char* prof_name,\n                          const
      butil::IOBuf& result_prefix,\n                          ProfilingType type)"
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:613,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:614,1
    - Dst: brpc::UseHTML
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:615,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:615,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:616,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:618,1
    - Dst: brpc::TabsHead
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:623,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:630,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:630,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:633,1
    - Dst: brpc::ValidProfilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:635,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:636,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:638,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:638,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:639,1
    - Dst: brpc::DisplayResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: brpc::ReadSeconds
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:646,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:650,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:650,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:651,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:658,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:659,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:660,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:664,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:666,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:666,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:668,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:668,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:672,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:675,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:675,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:676,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:680,1
    - Dst: std::vector<ProfilingWaiter>::vector<ProfilingWaiter>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:683,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:685,1
    - Dst: waiters::push_back
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:686,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:687,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:692,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:694,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:699,1
    - Dst: ProfilingClient::ProfilingClient
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:700,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:701,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:715,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:718,1
    - Dst: brpc::MakeProfName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:721,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:722,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:724,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:725,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:726,1
    - Dst: brpc::has_GOOGLE_PPROF_BINARY_PATH
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:730,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:733,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:734,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:735,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:742,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:743,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:744,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:747,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:748,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:749,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:751,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:752,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:754,1
    - Dst: ProfilerStart
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:756,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:759,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:760,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:761,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:763,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:764,1
    - Dst: ProfilerStop
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:766,1
    - Dst: ContentionProfilerStart
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:768,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:771,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:772,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:773,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:775,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:776,1
    - Dst: ContentionProfilerStop
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:778,1
    - Dst: butil::IsIOBufProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:780,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:783,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:784,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:785,1
    - Dst: butil::IOBufProfilerFlush
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:787,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:789,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:790,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:796,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:797,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:798,1
    - Dst: MallocExtension*::GetHeapSample
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:801,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:802,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:805,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:806,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:808,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:811,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:815,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:816,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:817,1
    - Dst: MallocExtension*::GetHeapGrowthStacks
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:820,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:821,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:824,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:825,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:827,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:832,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:833,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:835,1
    - Dst: brpc::ConsumeWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:841,1
    - Dst: brpc::DisplayResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:842,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:842,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:842,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:844,1
    - Dst: brpc::DisplayResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:845,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:845,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 167
    argCount: 3
    argNames:
    - type
    - cntl_base
    - done
    argTypes:
    - ProfilingType
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 609
    functionDepth: 4
    functionLinenumber: 609
    functionLinenumberEnd: 847
    functionName: brpc::DoProfiling
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - strtoll
    - Controller*::http_response
    - brpc::ProfilingType2String
    - bthread_usleep
    - MallocExtension*::GetHeapGrowthStacks
    - waiters::push_back
    - brpc::ConsumeWaiters
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - ProfilingClient::ProfilingClient
    - Controller*::SetFailed
    - brpc::ReadSeconds
    - Controller*::server
    - std::string*::c_str
    - brpc::Extension<T>::instance
    - butil::cpuwide_time_us
    - brpc::TabsHead
    - butil::IsIOBufProfilerEnabled
    - butil::PathExists
    - PLOG
    - LOG
    - LOG_IF
    - Controller*::remote_side
    - brpc::UseHTML
    - butil::IOBufProfilerFlush
    - std::ostringstream::str
    - ClosureGuard::release
    - MallocExtension*::GetHeapSample
    - Controller*::http_request
    - Controller*::auth_context
    - BAIDU_SCOPED_LOCK
    - static_cast<Controller*>
    - std::vector<ProfilingWaiter>::vector<ProfilingWaiter>
    - CHECK
    - butil::FilePath
    - berror
    - brpc::ValidProfilePath
    - brpc::MakeProfName
    - ProfilerStart
    - ProfilerStop
    - brpc::WriteSmallFile
    - std::vector::size
    - has_TCMALLOC_SAMPLE_PARAMETER
    - brpc::DisplayResult
    - butil::IOBufBuilder::buf
    - butil::CreateDirectoryAndGetError
    - ContentionProfilerStop
    - Controller*::response_attachment
    - butil::FilePath::value
    - ContentionProfilerStart
    - brpc::NotifyWaiters
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void DoProfiling(ProfilingType type,\n                        ::google::protobuf::RpcController*
      cntl_base,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:853,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:854,1
    - Dst: brpc::UseHTML
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:855,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:855,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:856,1
    - Dst: butil::IsIOBufProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:864,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:869,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:870,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:875,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:877,1
    - Dst: brpc::has_GOOGLE_PPROF_BINARY_PATH
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:880,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:891,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:891,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:892,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:897,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:897,1
    - Dst: brpc::ReadSeconds
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:900,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:901,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:902,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:903,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:904,1
    - Dst: brpc::StringToDisplayType
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:907,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:909,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:909,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:912,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:914,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:925,1
    - Dst: waiters::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:928,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:932,1
    - Dst: brpc::TabsHead
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:936,1
    - Dst: brpc::DisplayTypeToString
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1017,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1043,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1045,1
    - Dst: butil::FilePath::Append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1048,1
    - Dst: brpc::GetProgramChecksum
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1048,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1050,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1051,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1052,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1057,1
    - Dst: butil::FilePath::empty
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1057,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1058,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1060,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1061,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1063,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1063,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1065,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1066,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1066,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::greater<std::string>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1072,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1073,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1074,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1075,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1076,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1076,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1076,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1078,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1078,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1081,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1081,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1081,1
    - Dst: std::vector::resize
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1083,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1086,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1091,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1096,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1116,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1121,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1133,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1133,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1134,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1141,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1141,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1142,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1150,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1150,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1151,1
    - Dst: ceil
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1158,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1158,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1167,1
    - Dst: brpc::logo
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1173,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1181,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1189,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1197,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1205,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1213,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1220,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1229,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1237,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1245,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1253,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1260,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1264,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1268,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1272,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1276,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1280,1
    CyclomaticComplexity: 54
    EdgeCount: 54
    ICount: 214
    argCount: 3
    argNames:
    - type
    - cntl_base
    - done
    argTypes:
    - ProfilingType
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1285
      start: 849
    functionDepth: 5
    functionLinenumber: 849
    functionLinenumberEnd: 1285
    functionName: brpc::StartProfiling
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - IsHeapProfilerEnabled
    - brpc::ProfilingType2String
    - butil::FileEnumerator::Next
    - brpc::StartProfiling
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - std::vector::begin
    - std::vector::empty
    - getenv
    - Controller*::SetFailed
    - brpc::ReadSeconds
    - Controller*::server
    - std::string*::c_str
    - TRACEPRINTF
    - std::greater<std::string>
    - butil::cpuwide_time_us
    - brpc::TabsHead
    - butil::DeleteFile
    - butil::FilePath::empty
    - butil::IsIOBufProfilerEnabled
    - std::string::append
    - std::vector::resize
    - brpc::UseHTML
    - waiters::size
    - ClosureGuard::release
    - Controller*::http_request
    - std::sort
    - BAIDU_SCOPED_LOCK
    - brpc::logo
    - static_cast<Controller*>
    - CHECK
    - brpc::size
    - butil::FilePath
    - brpc::DoProfiling
    - brpc::StringToDisplayType
    - std::vector::reserve
    - std::vector::size
    - has_TCMALLOC_SAMPLE_PARAMETER
    - std::vector::push_back
    - butil::FilePath::Append
    - std::string::reserve
    - std::vector::end
    - brpc::GetBaseName
    - brpc::DisplayTypeToString
    - brpc::GetProgramChecksum
    - Controller*::response_attachment
    - butil::FilePath::value
    - ceil
    - butil::IOBufBuilder::IOBufBuilder
    - add
    linkageType: ''
    returnType: void
    signature: "void StartProfiling(ProfilingType type,\n                           ::google::protobuf::RpcController*
      cntl_base,\n                           ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1190
    functionName: brpc::HotspotsService::cpu
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::cpu(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1198
    functionName: brpc::HotspotsService::heap
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::heap(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1206
      start: 1200
    functionDepth: 0
    functionLinenumber: 1200
    functionLinenumberEnd: 1206
    functionName: brpc::HotspotsService::growth
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::growth(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1214
      start: 1208
    functionDepth: 0
    functionLinenumber: 1208
    functionLinenumberEnd: 1214
    functionName: brpc::HotspotsService::contention
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::contention(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::brpc::HotspotsRequest*
    - ::brpc::HotspotsResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1221
      start: 1216
    functionDepth: 0
    functionLinenumber: 1216
    functionLinenumberEnd: 1221
    functionName: brpc::HotspotsService::iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::iobuf(::google::protobuf::RpcController* cntl_base,\n
      \   const ::brpc::HotspotsRequest* request,\n    ::brpc::HotspotsResponse* response,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1230
      start: 1224
    functionDepth: 0
    functionLinenumber: 1224
    functionLinenumberEnd: 1230
    functionName: brpc::HotspotsService::cpu_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::cpu_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1238
      start: 1232
    functionDepth: 0
    functionLinenumber: 1232
    functionLinenumberEnd: 1238
    functionName: brpc::HotspotsService::heap_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::heap_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1246
      start: 1240
    functionDepth: 0
    functionLinenumber: 1240
    functionLinenumberEnd: 1246
    functionName: brpc::HotspotsService::growth_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::growth_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1254
      start: 1248
    functionDepth: 0
    functionLinenumber: 1248
    functionLinenumberEnd: 1254
    functionName: brpc::HotspotsService::contention_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::contention_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::brpc::HotspotsRequest*
    - ::brpc::HotspotsResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1261
      start: 1256
    functionDepth: 0
    functionLinenumber: 1256
    functionLinenumberEnd: 1261
    functionName: brpc::HotspotsService::iobuf_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::iobuf_non_responsive(::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest* request,\n    ::brpc::HotspotsResponse*
      response,\n    ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1264,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1268,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1272,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1276,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1263
    functionDepth: 1
    functionLinenumber: 1263
    functionLinenumberEnd: 1283
    functionName: brpc::HotspotsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void HotspotsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - type
    argTypes:
    - DisplayType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 64
    functionName: brpc::DisplayTypeToString
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * DisplayTypeToString(DisplayType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::call_once
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:69,1
    - Dst: butil::CaseIgnoredFlatMap<DisplayType>::CaseIgnoredFlatMap<DisplayType>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:70,1
    - Dst: butil::CaseIgnoredFlatMap*::seek
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - ' val'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 82
    functionName: brpc::StringToDisplayType
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - std::call_once
    - butil::CaseIgnoredFlatMap*::seek
    - butil::CaseIgnoredFlatMap<DisplayType>::CaseIgnoredFlatMap<DisplayType>
    linkageType: ''
    returnType: DisplayType
    signature: DisplayType StringToDisplayType(const std::string& val)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 1
    argNames:
    - type
    argTypes:
    - DisplayType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 96
    functionName: brpc::DisplayTypeToPProfArgument
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string DisplayTypeToPProfArgument(DisplayType type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:100,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:100,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:100,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' filename'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: brpc::GeneratePerlScriptPath
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - std::string::push_back
    - brpc::size
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string GeneratePerlScriptPath(const std::string& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    functionName: brpc::ProfilingClient
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProfilingClient()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    functionName: brpc::ProfilingResult
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ProfilingResult()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:171,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:173,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:173,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:177,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:177,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:179,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:179,1
    - Dst: fwrite
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:183,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:183,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:184,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:184,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:187,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:187,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - filepath_in
    - ' content'
    argTypes:
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 2
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: brpc::WriteSmallFile
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    - butil::FilePath::value
    - data
    - brpc::size
    - CHECK_EQ
    - fclose
    - fwrite
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool WriteSmallFile(const char* filepath_in,\n                           const
      butil::StringPiece& content)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:195,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:196,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:197,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:197,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:201,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:203,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:203,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:209,1
    - Dst: fwrite
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:211,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:211,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:212,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:216,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - filepath_in
    - ' content'
    argTypes:
    - char*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 218
    functionName: brpc::WriteSmallFile
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    - butil::FilePath::value
    - fclose
    - fwrite
    - butil::IOBufAsZeroCopyInputStream::Next
    - LOG
    linkageType: ''
    returnType: bool
    signature: "bool WriteSmallFile(const char* filepath_in,\n                           const
      butil::IOBuf& content)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:223,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:226,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:226,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:227,1
    - Dst: std::string*::length
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:227,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:233,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 235
    functionName: brpc::ReadSeconds
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - std::string*::c_str
    - Controller*::http_request
    - std::min
    - strtol
    - std::string*::length
    linkageType: ''
    returnType: int
    signature: int ReadSeconds(const Controller* cntl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::find_last_of
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:241,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:247,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - full_base_name
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 248
    functionName: brpc::GetBaseName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - std::string*::c_str
    - std::string*::find_last_of
    linkageType: ''
    returnType: char
    signature: char * GetBaseName(const std::string* full_base_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::find_last_of
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:252,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:258,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - full_base_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 259
    functionName: brpc::GetBaseName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::data
    - butil::StringPiece::find_last_of
    linkageType: ''
    returnType: char
    signature: char * GetBaseName(const char* full_base_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:266,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:271,1
    - Dst: isalpha
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:284,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:284,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 265
    functionDepth: 2
    functionLinenumber: 265
    functionLinenumberEnd: 290
    functionName: brpc::ValidProfilePath
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - starts_with
    - isalpha
    - brpc::size
    - isdigit
    linkageType: ''
    returnType: bool
    signature: bool ValidProfilePath(const butil::StringPiece& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:298,1
    - Dst: brpc::DisplayTypeToString
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:300,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:303,1
    - Dst: brpc::DisplayTypeToString
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:304,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 6
    argNames:
    - cache_name
    - len
    - prof_name
    - base_name
    - display_type
    - show_ccount
    argTypes:
    - char*
    - size_t
    - char*
    - char*
    - DisplayType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 308
    functionName: brpc::MakeCacheName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - brpc::DisplayTypeToString
    - snprintf
    linkageType: ''
    returnType: int
    signature: "int MakeCacheName(char* cache_name, size_t len,\n                         const
      char* prof_name,\n                         const char* base_name,\n                         DisplayType
      display_type,\n                         bool show_ccount)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:311,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:311,1
    - Dst: brpc::GetProgramChecksum
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:312,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:320,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:321,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:322,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:327,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:327,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - type
    - buf
    - buf_len
    argTypes:
    - ProfilingType
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 310
    functionDepth: 1
    functionLinenumber: 310
    functionLinenumberEnd: 329
    functionName: brpc::MakeProfName
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 3
    functionsReached:
    - strftime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - localtime
    - c_str
    - time
    linkageType: ''
    returnType: int
    signature: int MakeProfName(ProfilingType type, char* buf, size_t buf_len)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ProfilingWaiter>*::clear
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:333,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:335,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:340,1
    - Dst: ProfilingResult::ProfilingResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:345,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:349,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:350,1
    - Dst: waiters::swap
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:355,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - type
    - cur_cntl
    - waiters
    argTypes:
    - ProfilingType
    - Controller*
    - std::vector<ProfilingWaiter>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 358
    functionName: brpc::ConsumeWaiters
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - ProfilingResult::ProfilingResult
    - std::vector<ProfilingWaiter>*::clear
    - Controller*::http_response
    - waiters::swap
    - arraysize
    - BAIDU_SCOPED_LOCK
    - Controller*::response_attachment
    - LOG
    linkageType: ''
    returnType: void
    signature: "void ConsumeWaiters(ProfilingType type, const Controller* cur_cntl,\n
      \                          std::vector<ProfilingWaiter>* waiters)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:367,1
    - Dst: brpc::ConsumeWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:368,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:369,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:372,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:373,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:374,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:374,1
    - Dst: ::google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - type
    - cur_cntl
    - view
    argTypes:
    - ProfilingType
    - Controller*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 377
    functionName: brpc::NotifyWaiters
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    - brpc::ConsumeWaiters
    - Controller*::response_attachment
    - CHECK
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void NotifyWaiters(ProfilingType type, const Controller* cur_cntl,\n
      \                         const std::string* view)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:382,1
    - Dst: strdup
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 392
    functionName: brpc::check_GOOGLE_PPROF_BINARY_PATH
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - getenv
    - strdup
    linkageType: ''
    returnType: bool
    signature: bool check_GOOGLE_PPROF_BINARY_PATH()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::check_GOOGLE_PPROF_BINARY_PATH
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 397
    functionName: brpc::has_GOOGLE_PPROF_BINARY_PATH
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::check_GOOGLE_PPROF_BINARY_PATH
    linkageType: ''
    returnType: bool
    signature: bool has_GOOGLE_PPROF_BINARY_PATH()
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:406,1
    - Dst: Controller*::IsCanceled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:407,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:412,1
    - Dst: brpc::UseHTML
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:413,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:413,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:414,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:415,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:416,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:419,1
    - Dst: brpc::StringToDisplayType
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:422,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:424,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:424,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:428,1
    - Dst: brpc::ValidProfilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:435,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:436,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:438,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:438,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:439,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:443,1
    - Dst: brpc::MakeCacheName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:446,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:447,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:450,1
    - Dst: fread
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:455,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:457,1
    - Dst: feof
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:460,1
    - Dst: ferror
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:464,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:471,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:471,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:474,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:476,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:478,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:480,1
    - Dst: brpc::GeneratePerlScriptPath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:488,1
    - Dst: brpc::DisplayTypeToPProfArgument
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:492,1
    - Dst: brpc::GetProgramPath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:498,1
    - Dst: brpc::DisplayTypeToPProfArgument
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:509,1
    - Dst: brpc::GetProgramPath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:514,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:517,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:520,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:520,1
    - Dst: brpc::pprof_perl
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:520,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:523,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:524,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:532,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:534,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:534,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:537,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:541,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:545,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:547,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:548,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:554,1
    - Dst: brpc::MakeCacheName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:557,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:558,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:562,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:563,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:564,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:565,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:566,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:568,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:569,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:570,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:571,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:571,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:573,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:574,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:574,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:576,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:577,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:578,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:581,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:582,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:582,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:584,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:585,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:585,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:587,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:588,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:589,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:592,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:593,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:594,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:594,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:594,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:599,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:601,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:603,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:605,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 134
    argCount: 5
    argNames:
    - cntl
    - done
    - prof_name
    - ' result_prefix'
    - type
    argTypes:
    - Controller*
    - google::protobuf::Closure*
    - char*
    - butil::IOBuf
    - ProfilingType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 400
    functionDepth: 3
    functionLinenumber: 400
    functionLinenumberEnd: 607
    functionName: brpc::DisplayResult
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - append
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - butil::IOBuf::append
    - getenv
    - butil::IOBuf::IOBuf
    - brpc::pprof_perl
    - Controller*::SetFailed
    - std::string*::c_str
    - std::string::c_str
    - brpc::DisplayTypeToPProfArgument
    - butil::DeleteFile
    - PLOG_IF
    - butil::PathExists
    - brpc::MakeCacheName
    - butil::read_command_output
    - LOG
    - brpc::UseHTML
    - butil::IOBuf::cut_until
    - std::ostringstream::str
    - ferror
    - Controller*::http_request
    - fread
    - CHECK
    - butil::FilePath
    - berror
    - brpc::ValidProfilePath
    - brpc::StringToDisplayType
    - brpc::WriteSmallFile
    - brpc::GeneratePerlScriptPath
    - butil::IOBuf::swap
    - fopen
    - feof
    - brpc::GetBaseName
    - brpc::GetProgramPath
    - Controller*::IsCanceled
    - Controller*::response_attachment
    - butil::FilePath::value
    - fclose
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void DisplayResult(Controller* cntl,\n                          google::protobuf::Closure*
      done,\n                          const char* prof_name,\n                          const
      butil::IOBuf& result_prefix,\n                          ProfilingType type)"
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:613,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:614,1
    - Dst: brpc::UseHTML
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:615,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:615,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:616,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:618,1
    - Dst: brpc::TabsHead
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:623,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:630,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:630,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:633,1
    - Dst: brpc::ValidProfilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:635,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:636,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:638,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:638,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:639,1
    - Dst: brpc::DisplayResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:642,1
    - Dst: brpc::ReadSeconds
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:646,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:650,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:650,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:651,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:658,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:659,1
    - Dst: Controller*::auth_context
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:660,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:664,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:666,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:666,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:668,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:668,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:672,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:675,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:675,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:676,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:680,1
    - Dst: std::vector<ProfilingWaiter>::vector<ProfilingWaiter>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:683,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:685,1
    - Dst: waiters::push_back
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:686,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:687,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:692,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:694,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:699,1
    - Dst: ProfilingClient::ProfilingClient
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:700,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:701,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:715,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:718,1
    - Dst: brpc::MakeProfName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:721,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:722,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:724,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:725,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:726,1
    - Dst: brpc::has_GOOGLE_PPROF_BINARY_PATH
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:730,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:733,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:734,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:735,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:742,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:743,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:744,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:747,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:748,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:749,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:751,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:752,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:754,1
    - Dst: ProfilerStart
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:756,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:759,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:760,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:761,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:763,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:764,1
    - Dst: ProfilerStop
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:766,1
    - Dst: ContentionProfilerStart
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:768,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:771,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:772,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:773,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:775,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:776,1
    - Dst: ContentionProfilerStop
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:778,1
    - Dst: butil::IsIOBufProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:780,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:783,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:784,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:785,1
    - Dst: butil::IOBufProfilerFlush
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:787,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:789,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:790,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:796,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:797,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:798,1
    - Dst: MallocExtension*::GetHeapSample
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:801,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:802,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:805,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:806,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:808,1
    - Dst: brpc::Extension<T>::instance
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:811,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:815,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:816,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:817,1
    - Dst: MallocExtension*::GetHeapGrowthStacks
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:820,1
    - Dst: brpc::WriteSmallFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:821,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:824,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:825,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:827,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:832,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:833,1
    - Dst: brpc::NotifyWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:835,1
    - Dst: brpc::ConsumeWaiters
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:841,1
    - Dst: brpc::DisplayResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:842,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:842,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:842,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:844,1
    - Dst: brpc::DisplayResult
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:845,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:845,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 167
    argCount: 3
    argNames:
    - type
    - cntl_base
    - done
    argTypes:
    - ProfilingType
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 609
    functionDepth: 4
    functionLinenumber: 609
    functionLinenumberEnd: 847
    functionName: brpc::DoProfiling
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - strtoll
    - Controller*::http_response
    - brpc::ProfilingType2String
    - bthread_usleep
    - MallocExtension*::GetHeapGrowthStacks
    - waiters::push_back
    - brpc::ConsumeWaiters
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - ProfilingClient::ProfilingClient
    - Controller*::SetFailed
    - brpc::ReadSeconds
    - Controller*::server
    - std::string*::c_str
    - brpc::Extension<T>::instance
    - butil::cpuwide_time_us
    - brpc::TabsHead
    - butil::IsIOBufProfilerEnabled
    - butil::PathExists
    - PLOG
    - LOG
    - LOG_IF
    - Controller*::remote_side
    - brpc::UseHTML
    - butil::IOBufProfilerFlush
    - std::ostringstream::str
    - ClosureGuard::release
    - MallocExtension*::GetHeapSample
    - Controller*::http_request
    - Controller*::auth_context
    - BAIDU_SCOPED_LOCK
    - static_cast<Controller*>
    - std::vector<ProfilingWaiter>::vector<ProfilingWaiter>
    - CHECK
    - butil::FilePath
    - berror
    - brpc::ValidProfilePath
    - brpc::MakeProfName
    - ProfilerStart
    - ProfilerStop
    - brpc::WriteSmallFile
    - std::vector::size
    - has_TCMALLOC_SAMPLE_PARAMETER
    - brpc::DisplayResult
    - butil::IOBufBuilder::buf
    - butil::CreateDirectoryAndGetError
    - ContentionProfilerStop
    - Controller*::response_attachment
    - butil::FilePath::value
    - ContentionProfilerStart
    - brpc::NotifyWaiters
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void DoProfiling(ProfilingType type,\n                        ::google::protobuf::RpcController*
      cntl_base,\n                        ::google::protobuf::Closure* done)"
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:853,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:854,1
    - Dst: brpc::UseHTML
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:855,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:855,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:856,1
    - Dst: butil::IsIOBufProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:864,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:869,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:870,1
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:875,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:877,1
    - Dst: brpc::has_GOOGLE_PPROF_BINARY_PATH
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:880,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:891,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:891,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:892,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:897,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:897,1
    - Dst: brpc::ReadSeconds
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:900,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:901,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:902,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:903,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:904,1
    - Dst: brpc::StringToDisplayType
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:907,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:909,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:909,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:912,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:914,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:925,1
    - Dst: waiters::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:928,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:932,1
    - Dst: brpc::TabsHead
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:936,1
    - Dst: brpc::DisplayTypeToString
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1017,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1043,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1045,1
    - Dst: butil::FilePath::Append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1048,1
    - Dst: brpc::GetProgramChecksum
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1048,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1050,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1051,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1052,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1057,1
    - Dst: butil::FilePath::empty
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1057,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1058,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1060,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1061,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1063,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1063,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1065,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1066,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1066,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::greater<std::string>
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1067,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1072,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1073,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1074,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1075,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1076,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1076,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1076,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1078,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1078,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1081,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1081,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1081,1
    - Dst: std::vector::resize
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1083,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1086,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1091,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1096,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1116,1
    - Dst: brpc::GetBaseName
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1121,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1133,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1133,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1134,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1141,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1141,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1142,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1150,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1150,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1151,1
    - Dst: ceil
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1158,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1158,1
    - Dst: brpc::ProfilingType2String
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1167,1
    - Dst: brpc::logo
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1173,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1181,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1189,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1197,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1205,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1213,1
    - Dst: brpc::StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1220,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1229,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1237,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1245,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1253,1
    - Dst: brpc::DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1260,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1264,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1268,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1272,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1276,1
    - Dst: add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1280,1
    CyclomaticComplexity: 54
    EdgeCount: 54
    ICount: 214
    argCount: 3
    argNames:
    - type
    - cntl_base
    - done
    argTypes:
    - ProfilingType
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1285
      start: 849
    functionDepth: 5
    functionLinenumber: 849
    functionLinenumberEnd: 1285
    functionName: brpc::StartProfiling
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - IsHeapProfilerEnabled
    - brpc::ProfilingType2String
    - butil::FileEnumerator::Next
    - brpc::StartProfiling
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - std::vector::begin
    - std::vector::empty
    - getenv
    - Controller*::SetFailed
    - brpc::ReadSeconds
    - Controller*::server
    - std::string*::c_str
    - TRACEPRINTF
    - std::greater<std::string>
    - butil::cpuwide_time_us
    - brpc::TabsHead
    - butil::DeleteFile
    - butil::FilePath::empty
    - butil::IsIOBufProfilerEnabled
    - std::string::append
    - std::vector::resize
    - brpc::UseHTML
    - waiters::size
    - ClosureGuard::release
    - Controller*::http_request
    - std::sort
    - BAIDU_SCOPED_LOCK
    - brpc::logo
    - static_cast<Controller*>
    - CHECK
    - brpc::size
    - butil::FilePath
    - brpc::DoProfiling
    - brpc::StringToDisplayType
    - std::vector::reserve
    - std::vector::size
    - has_TCMALLOC_SAMPLE_PARAMETER
    - std::vector::push_back
    - butil::FilePath::Append
    - std::string::reserve
    - std::vector::end
    - brpc::GetBaseName
    - brpc::DisplayTypeToString
    - brpc::GetProgramChecksum
    - Controller*::response_attachment
    - butil::FilePath::value
    - ceil
    - butil::IOBufBuilder::IOBufBuilder
    - add
    linkageType: ''
    returnType: void
    signature: "void StartProfiling(ProfilingType type,\n                           ::google::protobuf::RpcController*
      cntl_base,\n                           ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1190
    functionName: brpc::HotspotsService::cpu
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::cpu(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1198
    functionName: brpc::HotspotsService::heap
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::heap(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1206
      start: 1200
    functionDepth: 0
    functionLinenumber: 1200
    functionLinenumberEnd: 1206
    functionName: brpc::HotspotsService::growth
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::growth(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1214
      start: 1208
    functionDepth: 0
    functionLinenumber: 1208
    functionLinenumberEnd: 1214
    functionName: brpc::HotspotsService::contention
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::contention(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::brpc::HotspotsRequest*
    - ::brpc::HotspotsResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1221
      start: 1216
    functionDepth: 0
    functionLinenumber: 1216
    functionLinenumberEnd: 1221
    functionName: brpc::HotspotsService::iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - StartProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::iobuf(::google::protobuf::RpcController* cntl_base,\n
      \   const ::brpc::HotspotsRequest* request,\n    ::brpc::HotspotsResponse* response,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1230
      start: 1224
    functionDepth: 0
    functionLinenumber: 1224
    functionLinenumberEnd: 1230
    functionName: brpc::HotspotsService::cpu_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::cpu_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1238
      start: 1232
    functionDepth: 0
    functionLinenumber: 1232
    functionLinenumberEnd: 1238
    functionName: brpc::HotspotsService::heap_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::heap_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1246
      start: 1240
    functionDepth: 0
    functionLinenumber: 1240
    functionLinenumberEnd: 1246
    functionName: brpc::HotspotsService::growth_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::growth_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1254
      start: 1248
    functionDepth: 0
    functionLinenumber: 1248
    functionLinenumberEnd: 1254
    functionName: brpc::HotspotsService::contention_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::contention_non_responsive(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest*,\n    ::brpc::HotspotsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoProfiling
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - cntl_base
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::brpc::HotspotsRequest*
    - ::brpc::HotspotsResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1261
      start: 1256
    functionDepth: 0
    functionLinenumber: 1256
    functionLinenumberEnd: 1261
    functionName: brpc::HotspotsService::iobuf_non_responsive
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - DoProfiling
    linkageType: ''
    returnType: void
    signature: "void HotspotsService::iobuf_non_responsive(::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::HotspotsRequest* request,\n    ::brpc::HotspotsResponse*
      response,\n    ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1264,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1268,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1272,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1276,1
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/hotspots_service.cpp:1280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1263
    functionDepth: 1
    functionLinenumber: 1263
    functionLinenumberEnd: 1283
    functionName: brpc::HotspotsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/hotspots_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void HotspotsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: uri
      Src: /src/brpc/src/brpc/builtin/common.cpp:37,1
    - Dst: atoi
      Src: /src/brpc/src/brpc/builtin/common.cpp:39,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:39,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/builtin/common.cpp:43,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/builtin/common.cpp:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' header'
    argTypes:
    - HttpHeader
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 48
    functionName: brpc::UseHTML
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 6
    functionsReached:
    - std::string*::c_str
    - atoi
    - std::string*::find
    - uri
    - GetHeader
    linkageType: ''
    returnType: bool
    signature: bool UseHTML(const HttpHeader& header)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - wild
    - str
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 84
    functionName: brpc::url_wildcmp
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool url_wildcmp(const char* wild, const char* str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/common.cpp:88,1
    - Dst: brpc::url_wildcmp
      Src: /src/brpc/src/brpc/builtin/common.cpp:89,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:89,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:89,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - ' wildcards'
    argTypes:
    - std::string
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 2
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: brpc::MatchAnyWildcard
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - brpc::url_wildcmp
    - brpc::size
    - c_str
    linkageType: ''
    returnType: bool
    signature: "bool MatchAnyWildcard(const std::string& name,\n                      const
      std::vector<std::string>& wildcards)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/common.cpp:100,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/common.cpp:100,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:101,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/common.cpp:102,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - tm
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 104
    functionName: brpc::PrintRealDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - std::setw
    - fill
    - localtime_r
    linkageType: ''
    returnType: void
    signature: void PrintRealDateTime(std::ostream& os, int64_t tm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/common.cpp:111,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/common.cpp:111,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:115,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/common.cpp:116,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' os'
    - tm
    - ignore_microseconds
    argTypes:
    - std::ostream
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 119
    functionName: brpc::PrintRealDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - std::setw
    - fill
    - localtime_r
    linkageType: ''
    returnType: void
    signature: "void PrintRealDateTime(std::ostream& os, int64_t tm,\n                       bool
      ignore_microseconds)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/common.cpp:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' d'
    argTypes:
    - std::ostream
    - PrintedAsDateTime
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 124
    functionName: '& operator<<(std::ostream& os, const PrintedAsDateTime& d)'
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - PrintRealDateTime
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const PrintedAsDateTime&
      d)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' link'
    argTypes:
    - std::ostream
    - Path
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 143
    functionName: '& operator<<(std::ostream& os, const Path& link)'
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Path& link)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/common.cpp:148,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:149,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/common.cpp:152,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/common.cpp:154,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:155,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:157,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/common.cpp:160,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:161,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:163,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/common.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:168,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:170,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:172,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:175,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/builtin/common.cpp:175,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:176,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:177,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/builtin/common.cpp:178,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/builtin/common.cpp:181,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:181,1
    - Dst: std::string*::find_last_of
      Src: /src/brpc/src/brpc/builtin/common.cpp:183,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/builtin/common.cpp:186,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/common.cpp:189,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/builtin/common.cpp:189,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/common.cpp:190,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/builtin/common.cpp:190,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/builtin/common.cpp:198,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/common.cpp:199,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/common.cpp:203,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:205,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:208,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:210,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 67
    argCount: 2
    argNames:
    - dir
    - ' filename'
    argTypes:
    - std::string*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 217
    functionName: brpc::AppendFileName
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 1
    functionsReached:
    - std::string*::c_str
    - std::string*::size
    - std::string*::clear
    - strcmp
    - butil::back_char
    - std::string*::resize
    - std::string*::find_last_of
    - std::string*::push_back
    - brpc::size
    - std::string*::data
    - std::string*::append
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: void AppendFileName(std::string* dir, const std::string& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 243
    functionName: brpc::gridtable_style
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * gridtable_style()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 293
    functionName: brpc::TabsHead
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * TabsHead()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 303
    functionName: brpc::logo
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * logo()
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - t
    argTypes:
    - ProfilingType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 314
    functionName: brpc::ProfilingType2String
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ProfilingType2String(ProfilingType t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/common.cpp:319,1
    - Dst: butil::MurmurHash3_x64_128_Init
      Src: /src/brpc/src/brpc/builtin/common.cpp:325,1
    - Dst: read
      Src: /src/brpc/src/brpc/builtin/common.cpp:326,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/builtin/common.cpp:327,1
    - Dst: butil::MurmurHash3_x64_128_Final
      Src: /src/brpc/src/brpc/builtin/common.cpp:329,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - file_path
    - checksum
    argTypes:
    - char*
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 331
    functionName: brpc::FileChecksum
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - read
    - butil::MurmurHash3_x64_128_Update
    - PLOG
    - butil::MurmurHash3_x64_128_Final
    - butil::MurmurHash3_x64_128_Init
    linkageType: ''
    returnType: int
    signature: int FileChecksum(const char* file_path, unsigned char* checksum)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadCommandLine
      Src: /src/brpc/src/brpc/builtin/common.cpp:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 342
    functionName: brpc::CreateProgramName
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - butil::ReadCommandLine
    linkageType: ''
    returnType: void
    signature: void CreateProgramName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/common.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 347
    functionName: brpc::GetProgramName
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char * GetProgramName()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetProcessAbsolutePath
      Src: /src/brpc/src/brpc/builtin/common.cpp:353,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 358
    functionName: brpc::CreateProgramPath
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - butil::GetProcessAbsolutePath
    linkageType: ''
    returnType: void
    signature: void CreateProgramPath()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/common.cpp:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 363
    functionName: brpc::GetProgramPath
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 2
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char * GetProgramPath()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FileChecksum
      Src: /src/brpc/src/brpc/builtin/common.cpp:371,1
    - Dst: brpc::GetProgramPath
      Src: /src/brpc/src/brpc/builtin/common.cpp:371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 369
    functionDepth: 2
    functionLinenumber: 369
    functionLinenumberEnd: 378
    functionName: brpc::ComputeProgramCHECKSUM
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetProgramPath
    - brpc::FileChecksum
    linkageType: ''
    returnType: void
    signature: void ComputeProgramCHECKSUM()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/common.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 382
    functionName: brpc::GetProgramChecksum
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 6
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char * GetProgramChecksum()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/common.cpp:386,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/builtin/common.cpp:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 391
    functionName: brpc::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - Controller*::http_request
    linkageType: ''
    returnType: bool
    signature: bool SupportGzip(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gmtime_r
      Src: /src/brpc/src/brpc/builtin/common.cpp:395,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/common.cpp:396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - t
    - buf
    - size
    argTypes:
    - time_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 397
    functionName: brpc::Time2GMT
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 2
    functionsReached:
    - strftime
    - gmtime_r
    linkageType: ''
    returnType: void
    signature: void Time2GMT(time_t t, char* buf, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: uri
      Src: /src/brpc/src/brpc/builtin/common.cpp:37,1
    - Dst: atoi
      Src: /src/brpc/src/brpc/builtin/common.cpp:39,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:39,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/builtin/common.cpp:43,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/builtin/common.cpp:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' header'
    argTypes:
    - HttpHeader
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 48
    functionName: brpc::UseHTML
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 6
    functionsReached:
    - std::string*::c_str
    - atoi
    - std::string*::find
    - uri
    - GetHeader
    linkageType: ''
    returnType: bool
    signature: bool UseHTML(const HttpHeader& header)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - wild
    - str
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 84
    functionName: brpc::url_wildcmp
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool url_wildcmp(const char* wild, const char* str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/common.cpp:88,1
    - Dst: brpc::url_wildcmp
      Src: /src/brpc/src/brpc/builtin/common.cpp:89,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:89,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:89,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' name'
    - ' wildcards'
    argTypes:
    - std::string
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 2
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: brpc::MatchAnyWildcard
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - brpc::url_wildcmp
    - brpc::size
    - c_str
    linkageType: ''
    returnType: bool
    signature: "bool MatchAnyWildcard(const std::string& name,\n                      const
      std::vector<std::string>& wildcards)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/common.cpp:100,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/common.cpp:100,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:101,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/common.cpp:102,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - tm
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 104
    functionName: brpc::PrintRealDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - std::setw
    - fill
    - localtime_r
    linkageType: ''
    returnType: void
    signature: void PrintRealDateTime(std::ostream& os, int64_t tm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/common.cpp:111,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/common.cpp:111,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:115,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/common.cpp:116,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/common.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - ' os'
    - tm
    - ignore_microseconds
    argTypes:
    - std::ostream
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 119
    functionName: brpc::PrintRealDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - std::setw
    - fill
    - localtime_r
    linkageType: ''
    returnType: void
    signature: "void PrintRealDateTime(std::ostream& os, int64_t tm,\n                       bool
      ignore_microseconds)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/common.cpp:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' d'
    argTypes:
    - std::ostream
    - PrintedAsDateTime
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 124
    functionName: '& operator<<(std::ostream& os, const PrintedAsDateTime& d)'
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - PrintRealDateTime
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const PrintedAsDateTime&
      d)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' link'
    argTypes:
    - std::ostream
    - Path
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 143
    functionName: '& operator<<(std::ostream& os, const Path& link)'
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Path& link)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/common.cpp:148,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:149,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/common.cpp:152,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/common.cpp:154,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:155,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:157,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/common.cpp:160,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:161,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:163,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/common.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:168,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:170,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:172,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:175,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/builtin/common.cpp:175,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:176,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:177,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/builtin/common.cpp:178,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/builtin/common.cpp:181,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/common.cpp:181,1
    - Dst: std::string*::find_last_of
      Src: /src/brpc/src/brpc/builtin/common.cpp:183,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/builtin/common.cpp:186,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/common.cpp:189,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/builtin/common.cpp:189,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/common.cpp:190,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/builtin/common.cpp:190,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/builtin/common.cpp:198,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/common.cpp:199,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/common.cpp:203,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/builtin/common.cpp:205,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:208,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/builtin/common.cpp:210,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 67
    argCount: 2
    argNames:
    - dir
    - ' filename'
    argTypes:
    - std::string*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 217
    functionName: brpc::AppendFileName
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 1
    functionsReached:
    - std::string*::c_str
    - std::string*::size
    - std::string*::clear
    - strcmp
    - butil::back_char
    - std::string*::resize
    - std::string*::find_last_of
    - std::string*::push_back
    - brpc::size
    - std::string*::data
    - std::string*::append
    - std::string*::empty
    linkageType: ''
    returnType: void
    signature: void AppendFileName(std::string* dir, const std::string& filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 243
    functionName: brpc::gridtable_style
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * gridtable_style()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 293
    functionName: brpc::TabsHead
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * TabsHead()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 303
    functionName: brpc::logo
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * logo()
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - t
    argTypes:
    - ProfilingType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 314
    functionName: brpc::ProfilingType2String
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ProfilingType2String(ProfilingType t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PLOG
      Src: /src/brpc/src/brpc/builtin/common.cpp:319,1
    - Dst: butil::MurmurHash3_x64_128_Init
      Src: /src/brpc/src/brpc/builtin/common.cpp:325,1
    - Dst: read
      Src: /src/brpc/src/brpc/builtin/common.cpp:326,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/builtin/common.cpp:327,1
    - Dst: butil::MurmurHash3_x64_128_Final
      Src: /src/brpc/src/brpc/builtin/common.cpp:329,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - file_path
    - checksum
    argTypes:
    - char*
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 316
    functionDepth: 1
    functionLinenumber: 316
    functionLinenumberEnd: 331
    functionName: brpc::FileChecksum
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 1
    functionsReached:
    - read
    - butil::MurmurHash3_x64_128_Update
    - PLOG
    - butil::MurmurHash3_x64_128_Final
    - butil::MurmurHash3_x64_128_Init
    linkageType: ''
    returnType: int
    signature: int FileChecksum(const char* file_path, unsigned char* checksum)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadCommandLine
      Src: /src/brpc/src/brpc/builtin/common.cpp:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 342
    functionName: brpc::CreateProgramName
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - butil::ReadCommandLine
    linkageType: ''
    returnType: void
    signature: void CreateProgramName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/common.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 347
    functionName: brpc::GetProgramName
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char * GetProgramName()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetProcessAbsolutePath
      Src: /src/brpc/src/brpc/builtin/common.cpp:353,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 358
    functionName: brpc::CreateProgramPath
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - butil::GetProcessAbsolutePath
    linkageType: ''
    returnType: void
    signature: void CreateProgramPath()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/common.cpp:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 363
    functionName: brpc::GetProgramPath
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 3
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char * GetProgramPath()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::FileChecksum
      Src: /src/brpc/src/brpc/builtin/common.cpp:371,1
    - Dst: brpc::GetProgramPath
      Src: /src/brpc/src/brpc/builtin/common.cpp:371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 369
    functionDepth: 2
    functionLinenumber: 369
    functionLinenumberEnd: 378
    functionName: brpc::ComputeProgramCHECKSUM
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetProgramPath
    - brpc::FileChecksum
    linkageType: ''
    returnType: void
    signature: void ComputeProgramCHECKSUM()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/common.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 382
    functionName: brpc::GetProgramChecksum
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 6
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: char
    signature: char * GetProgramChecksum()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/common.cpp:386,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/builtin/common.cpp:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 391
    functionName: brpc::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - Controller*::http_request
    linkageType: ''
    returnType: bool
    signature: bool SupportGzip(Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gmtime_r
      Src: /src/brpc/src/brpc/builtin/common.cpp:395,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/common.cpp:396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - t
    - buf
    - size
    argTypes:
    - time_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 397
    functionName: brpc::Time2GMT
    functionSourceFile: /src/brpc/src/brpc/builtin/common.cpp
    functionUses: 2
    functionsReached:
    - strftime
    - gmtime_r
    linkageType: ''
    returnType: void
    signature: void Time2GMT(time_t t, char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:31,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:32,1
    - Dst: brpc::jquery_min_js
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:32,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:33,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:34,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 4
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::InitJQueryMinBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::jquery_min_js
    - brpc::policy::GzipCompress
    - CHECK
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitJQueryMinBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: brpc::jquery_min_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & jquery_min_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: brpc::jquery_min_js_iobuf_gzip
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & jquery_min_js_iobuf_gzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::jquery_min_js
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * jquery_min_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:31,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:32,1
    - Dst: brpc::jquery_min_js
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:32,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:33,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:34,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 4
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: brpc::InitJQueryMinBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - brpc::jquery_min_js
    - brpc::policy::GzipCompress
    - CHECK
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitJQueryMinBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: brpc::jquery_min_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & jquery_min_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/jquery_min_js.cpp:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 43
    functionName: brpc::jquery_min_js_iobuf_gzip
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & jquery_min_js_iobuf_gzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::jquery_min_js
    functionSourceFile: /src/brpc/src/brpc/builtin/jquery_min_js.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * jquery_min_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:30,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:31,1
    - Dst: brpc::viz_min_js
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: brpc::InitVizMinBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBuf::IOBuf
    - brpc::viz_min_js
    linkageType: ''
    returnType: void
    signature: void InitVizMinBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: brpc::viz_min_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & viz_min_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:43,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:44,1
    - Dst: brpc::viz_min_js
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:44,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:45,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:46,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 4
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: brpc::InitVizMinBufGzip
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GzipCompress
    - brpc::viz_min_js
    - CHECK
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitVizMinBufGzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: brpc::viz_min_js_iobuf_gzip
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & viz_min_js_iobuf_gzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 59
    functionName: brpc::viz_min_js
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * viz_min_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:30,1
    - Dst: append
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:31,1
    - Dst: brpc::viz_min_js
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 32
    functionName: brpc::InitVizMinBuf
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - append
    - butil::IOBuf::IOBuf
    - brpc::viz_min_js
    linkageType: ''
    returnType: void
    signature: void InitVizMinBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: brpc::viz_min_js_iobuf
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & viz_min_js_iobuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:43,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:44,1
    - Dst: brpc::viz_min_js
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:44,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:45,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:46,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 4
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: brpc::InitVizMinBufGzip
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GzipCompress
    - brpc::viz_min_js
    - CHECK
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void InitVizMinBufGzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/builtin/viz_min_js.cpp:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    functionName: brpc::viz_min_js_iobuf_gzip
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & viz_min_js_iobuf_gzip()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 59
    functionName: brpc::viz_min_js
    functionSourceFile: /src/brpc/src/brpc/builtin/viz_min_js.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * viz_min_js()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::Hex
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Hex(uint64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setf
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:53,1
    - Dst: flags
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' h'
    argTypes:
    - std::ostream
    - Hex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: '& operator<<(std::ostream& os, const Hex& h)'
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - setf
    - flags
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Hex& h)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:64,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:65,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:65,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:66,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:68,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:71,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:76,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:79,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:81,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:84,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 86
    functionName: brpc::RpczService::enable
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - UseHTML
    linkageType: ''
    returnType: void
    signature: "void RpczService::enable(::google::protobuf::RpcController* cntl_base,\n
      \                        const ::brpc::RpczRequest*,\n                         ::brpc::RpczResponse*,\n
      \                        ::google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:93,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:94,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:94,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:95,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:97,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:100,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:105,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:108,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:110,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 115
    functionName: brpc::RpczService::disable
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - UseHTML
    linkageType: ''
    returnType: void
    signature: "void RpczService::disable(::google::protobuf::RpcController* cntl_base,\n
      \                         const ::brpc::RpczRequest*,\n                          ::brpc::RpczResponse*,\n
      \                         ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:122,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:123,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 126
    functionName: brpc::RpczService::hex_log_id
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::response_attachment
    - static_cast<Controller*>
    - Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void RpczService::hex_log_id(::google::protobuf::RpcController* cntl_base,\n
      \                            const ::brpc::RpczRequest*,\n                             ::brpc::RpczResponse*,\n
      \                            ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:133,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:134,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 137
    functionName: brpc::RpczService::dec_log_id
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::response_attachment
    - static_cast<Controller*>
    - Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void RpczService::dec_log_id(::google::protobuf::RpcController* cntl_base,\n
      \                            const ::brpc::RpczRequest*,\n                             ::brpc::RpczResponse*,\n
      \                            ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:144,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:145,1
    - Dst: has_span_db
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:147,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:148,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:154,1
    - Dst: DescribeSpanDB
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:155,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:156,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:156,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 157
    functionName: brpc::RpczService::stats
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - DescribeSpanDB
    - Controller*::http_response
    - has_span_db
    - Controller*::response_attachment
    - static_cast<Controller*>
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void RpczService::stats(::google::protobuf::RpcController* cntl_base,\n
      \                       const ::brpc::RpczRequest*,\n                        ::brpc::RpczResponse*,\n
      \                       ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:163,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:163,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:164,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:165,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - tm
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 167
    functionName: brpc::PrintRealTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - strftime
    - std::setw
    - fill
    - localtime_r
    linkageType: ''
    returnType: void
    signature: void PrintRealTime(std::ostream& os, int64_t tm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:174,1
    - Dst: std::setprecision
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:174,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:178,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' os'
    - cur_time
    - last_time
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 184
    functionName: brpc::PrintElapse
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - std::setw
    - std::setprecision
    linkageType: ''
    returnType: void
    signature: "void PrintElapse(std::ostream& os, int64_t cur_time,\n                        int64_t*
      last_time)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PopAnnotation
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:194,1
    - Dst: brpc::PrintRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:195,1
    - Dst: brpc::PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:196,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:197,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:198,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:198,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 5
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extractors
    - num_extr
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 186
    functionDepth: 3
    functionLinenumber: 186
    functionLinenumberEnd: 203
    functionName: brpc::PrintAnnotations
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::WebEscape
    - butil::back_char
    - std::string::empty
    - brpc::PrintRealTime
    - PopAnnotation
    - brpc::PrintElapse
    linkageType: ''
    returnType: void
    signature: "void PrintAnnotations(\n    std::ostream& os, int64_t cur_time, int64_t*
      last_time,\n    SpanInfoExtractor** extractors, int num_extr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:212,1
    - Dst: brpc::PrintRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:213,1
    - Dst: brpc::PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 5
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extr
    - num_extr
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 205
    functionDepth: 4
    functionLinenumber: 205
    functionLinenumberEnd: 216
    functionName: brpc::PrintAnnotationsAndRealTimeSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::PrintElapse
    - brpc::PrintRealTime
    - brpc::PrintAnnotations
    linkageType: ''
    returnType: bool
    signature: "bool PrintAnnotationsAndRealTimeSpan(\n    std::ostream& os, int64_t
      cur_time, int64_t* last_time,\n    SpanInfoExtractor** extr, int num_extr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:219,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:220,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 221
    functionName: brpc::GetStartRealTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - start_send_real_us
    - received_real_us
    - type
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetStartRealTime(const RpczSpan& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:225,1
    - Dst: brpc::GetStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - RpczSpan
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 226
    functionName: operator()(const RpczSpan& s1, const RpczSpan& s2) const
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetStartRealTime
    linkageType: ''
    returnType: bool
    signature: bool operator()(const RpczSpan& s1, const RpczSpan& s2) const
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:235,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:243,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:243,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:243,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:245,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:245,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:250,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:252,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:252,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:255,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:255,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:257,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:259,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:264,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:264,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:267,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:267,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:275,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:279,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:281,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:281,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:291,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:291,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:296,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:297,1
    - Dst: async
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:299,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:302,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:302,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 232
    functionDepth: 5
    functionLinenumber: 232
    functionLinenumberEnd: 304
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - async
    - brpc::FindProtocol
    - base_cid
    - brpc::PrintAnnotations
    - brpc::WebEscape
    - log_id
    - trace_id
    - start_callback_real_us
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - start_parse_real_us
    - full_method_name
    - request_size
    - remote_ip
    - start_send_real_us
    - protocol
    - CHECK
    - ending_cid
    - butil::int2ip
    - received_real_us
    - info
    - remote_port
    - brpc::Hex
    - span_id
    - butil::my_ip
    - butil::BaseIteratorRangeToNumberTraits::max
    - response_size
    linkageType: ''
    returnType: void
    signature: "void PrintClientSpan(\n    std::ostream& os, const RpczSpan& span,\n
      \   int64_t* last_time, SpanInfoExtractor* server_extr, bool use_html)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:308,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - start_send_real_us
    - brpc::PrintClientSpan
    linkageType: ''
    returnType: void
    signature: "void PrintClientSpan(std::ostream& os,const RpczSpan& span,\n                            bool
      use_html)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:314,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:321,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 312
    functionDepth: 4
    functionLinenumber: 312
    functionLinenumberEnd: 322
    functionName: brpc::PrintBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - info
    - brpc::PrintAnnotations
    linkageType: ''
    returnType: void
    signature: "void PrintBthreadSpan(std::ostream& os, const RpczSpan& span, int64_t*
      last_time,\n                             SpanInfoExtractor* server_extr, bool
      use_html)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:326,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:328,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:330,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:330,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:330,1
    - Dst: brpc::PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:331,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:332,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:332,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:334,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:337,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:337,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:339,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:343,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:343,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:344,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:344,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:345,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:346,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:346,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:349,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:350,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:356,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:357,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:358,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:360,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:360,1
    - Dst: client_spans_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:363,1
    - Dst: client_spans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:365,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:366,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:367,1
    - Dst: brpc::PrintBthreadSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:369,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:373,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:374,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:375,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:377,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:377,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:383,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:384,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:385,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:386,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:389,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:389,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:390,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 324
    functionDepth: 6
    functionLinenumber: 324
    functionLinenumberEnd: 391
    functionName: brpc::PrintServerSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - client_spans_size
    - brpc::FindProtocol
    - brpc::PrintClientSpan
    - brpc::PrintAnnotations
    - ARRAY_SIZE
    - log_id
    - brpc::WebEscape
    - trace_id
    - client_spans
    - start_callback_real_us
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - brpc::PrintBthreadSpan
    - start_parse_real_us
    - parent_span_id
    - request_size
    - full_method_name
    - remote_ip
    - type
    - protocol
    - start_send_real_us
    - butil::int2ip
    - received_real_us
    - info
    - remote_port
    - brpc::PrintRealDateTime
    - brpc::Hex
    - span_id
    - butil::BaseIteratorRangeToNumberTraits::max
    - response_size
    linkageType: ''
    returnType: void
    signature: "void PrintServerSpan(std::ostream& os, const RpczSpan& span,\n                            bool
      use_html)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:396,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:397,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 403
    functionName: brpc::RpczSpanFilter::RpczSpanFilter
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void RpczSpanFilter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - min_latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: brpc::RpczSpanFilter::CheckLatency
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckLatency(int64_t min_latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - min_request_size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 409
    functionName: brpc::RpczSpanFilter::CheckRequest
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckRequest(int64_t min_request_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - min_response_size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: brpc::RpczSpanFilter::CheckResponse
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckResponse(int64_t min_response_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 418
    functionName: brpc::RpczSpanFilter::CheckLogId
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckLogId(uint64_t log_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    functionName: brpc::RpczSpanFilter::CheckErrorCode
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckErrorCode(int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:426,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:427,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:428,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:429,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:430,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - BriefSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 431
    functionName: brpc::RpczSpanFilter::Keep
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - latency_us
    - error_code
    - request_size
    - log_id
    - response_size
    linkageType: ''
    returnType: bool
    signature: bool Keep(const BriefSpan& span)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:446,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:446,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:449,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:450,1
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:453,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:453,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:460,1
    - Dst: timelocal
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:465,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' time_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 466
    functionName: brpc::ParseDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - strtol
    - strptime
    - c_str
    - timelocal
    - localtime_r
    - time
    linkageType: ''
    returnType: int64_t
    signature: int64_t ParseDateTime(const std::string& time_str)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:472,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:475,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:478,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:484,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - str
    - val
    argTypes:
    - std::string*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 488
    functionName: brpc::ParseUint64
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - strtoull
    linkageType: ''
    returnType: bool
    signature: bool ParseUint64(const std::string* str, uint64_t* val)
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:495,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:497,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:497,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:498,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:501,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:505,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:507,1
    - Dst: has_span_db
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:510,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:520,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:520,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:523,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:524,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:527,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:530,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:530,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:538,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: FindSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:548,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: std::deque::begin
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: std::deque::end
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: CompareByStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: std::deque::resize
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:551,1
    - Dst: FindSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:552,1
    - Dst: std::deque::clear
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:553,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:556,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:559,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:559,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:565,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:567,1
    - Dst: PrintServerSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:568,1
    - Dst: PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:577,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:577,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:581,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:584,1
    - Dst: ParseDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:586,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:590,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:590,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:596,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:599,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:599,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:608,1
    - Dst: RpczSpanFilter::CheckLatency
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:614,1
    - Dst: RpczSpanFilter::CheckRequest
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:620,1
    - Dst: RpczSpanFilter::CheckResponse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:623,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:623,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:623,1
    - Dst: ParseUint64
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:626,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:626,1
    - Dst: RpczSpanFilter::CheckLogId
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:628,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:631,1
    - Dst: RpczSpanFilter::CheckErrorCode
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:634,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:634,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:634,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:637,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:637,1
    - Dst: ListSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:639,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:640,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:643,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:643,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:651,1
    - Dst: start_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:653,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:654,1
    - Dst: PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: latency_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:656,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:660,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:660,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:662,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:662,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:670,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:670,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:671,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:671,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:673,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:673,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:679,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:679,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:681,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:684,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:686,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:689,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:689,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:696,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:696,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 137
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 698
    functionName: brpc::RpczService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - strtoll
    - std::max
    - latency_us
    - error_code
    - Controller*::http_response
    - FindSpan
    - strtol
    - RpczSpanFilter::CheckLatency
    - TabsHead
    - Controller*::server
    - std::string*::c_str
    - Hex
    - PrintRealDateTime
    - RpczSpanFilter::CheckRequest
    - PrintClientSpan
    - log_id
    - WebEscape
    - strtoull
    - trace_id
    - RpczSpanFilter::CheckResponse
    - butil::IOBufBuilder::IOBufBuilder
    - butil::gettimeofday_us
    - full_method_name
    - request_size
    - type
    - RpczSpanFilter::CheckErrorCode
    - std::deque::end
    - Controller*::http_request
    - ListSpans
    - std::sort
    - PrintServerSpan
    - static_cast<Controller*>
    - CompareByStartRealTime
    - berror
    - RpczSpanFilter::CheckLogId
    - std::deque::resize
    - std::deque::clear
    - start_real_us
    - std::deque::size
    - FindSpans
    - has_span_db
    - std::min
    - PrintElapse
    - std::deque::empty
    - ParseDateTime
    - span_id
    - Controller*::response_attachment
    - butil::my_ip
    - UseHTML
    - response_size
    - std::deque::begin
    - ParseUint64
    linkageType: ''
    returnType: void
    signature: "void RpczService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const ::brpc::RpczRequest*,\n                                 ::brpc::RpczResponse*,\n
      \                                ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:701,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 700
    functionDepth: 1
    functionLinenumber: 700
    functionLinenumberEnd: 704
    functionName: brpc::RpczService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void RpczService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - val
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: brpc::Hex
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Hex(uint64_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setf
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:53,1
    - Dst: flags
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' h'
    argTypes:
    - std::ostream
    - Hex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 57
    functionName: '& operator<<(std::ostream& os, const Hex& h)'
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - setf
    - flags
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Hex& h)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:64,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:65,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:65,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:66,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:68,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:71,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:76,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:79,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:81,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:84,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 86
    functionName: brpc::RpczService::enable
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - UseHTML
    linkageType: ''
    returnType: void
    signature: "void RpczService::enable(::google::protobuf::RpcController* cntl_base,\n
      \                        const ::brpc::RpczRequest*,\n                         ::brpc::RpczResponse*,\n
      \                        ::google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:93,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:94,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:94,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:95,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:97,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:100,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:105,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:108,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:110,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 115
    functionName: brpc::RpczService::disable
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::http_response
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - UseHTML
    linkageType: ''
    returnType: void
    signature: "void RpczService::disable(::google::protobuf::RpcController* cntl_base,\n
      \                         const ::brpc::RpczRequest*,\n                          ::brpc::RpczResponse*,\n
      \                         ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:122,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:123,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 126
    functionName: brpc::RpczService::hex_log_id
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::response_attachment
    - static_cast<Controller*>
    - Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void RpczService::hex_log_id(::google::protobuf::RpcController* cntl_base,\n
      \                            const ::brpc::RpczRequest*,\n                             ::brpc::RpczResponse*,\n
      \                            ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:133,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:134,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 137
    functionName: brpc::RpczService::dec_log_id
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - Controller*::response_attachment
    - static_cast<Controller*>
    - Controller*::http_response
    linkageType: ''
    returnType: void
    signature: "void RpczService::dec_log_id(::google::protobuf::RpcController* cntl_base,\n
      \                            const ::brpc::RpczRequest*,\n                             ::brpc::RpczResponse*,\n
      \                            ::google::protobuf::Closure* done)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:144,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:145,1
    - Dst: has_span_db
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:147,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:148,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:154,1
    - Dst: DescribeSpanDB
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:155,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:156,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:156,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 157
    functionName: brpc::RpczService::stats
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - DescribeSpanDB
    - Controller*::http_response
    - has_span_db
    - Controller*::response_attachment
    - static_cast<Controller*>
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void RpczService::stats(::google::protobuf::RpcController* cntl_base,\n
      \                       const ::brpc::RpczRequest*,\n                        ::brpc::RpczResponse*,\n
      \                       ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strftime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:163,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:163,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:164,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:165,1
    - Dst: fill
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - tm
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 167
    functionName: brpc::PrintRealTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached:
    - strftime
    - std::setw
    - fill
    - localtime_r
    linkageType: ''
    returnType: void
    signature: void PrintRealTime(std::ostream& os, int64_t tm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:174,1
    - Dst: std::setprecision
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:174,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:178,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ' os'
    - cur_time
    - last_time
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 184
    functionName: brpc::PrintElapse
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached:
    - std::setw
    - std::setprecision
    linkageType: ''
    returnType: void
    signature: "void PrintElapse(std::ostream& os, int64_t cur_time,\n                        int64_t*
      last_time)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PopAnnotation
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:194,1
    - Dst: brpc::PrintRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:195,1
    - Dst: brpc::PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:196,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:197,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:198,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:198,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 5
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extractors
    - num_extr
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 186
    functionDepth: 3
    functionLinenumber: 186
    functionLinenumberEnd: 203
    functionName: brpc::PrintAnnotations
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 4
    functionsReached:
    - brpc::WebEscape
    - butil::back_char
    - std::string::empty
    - brpc::PrintRealTime
    - PopAnnotation
    - brpc::PrintElapse
    linkageType: ''
    returnType: void
    signature: "void PrintAnnotations(\n    std::ostream& os, int64_t cur_time, int64_t*
      last_time,\n    SpanInfoExtractor** extractors, int num_extr)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:212,1
    - Dst: brpc::PrintRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:213,1
    - Dst: brpc::PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 5
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extr
    - num_extr
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 205
    functionDepth: 4
    functionLinenumber: 205
    functionLinenumberEnd: 216
    functionName: brpc::PrintAnnotationsAndRealTimeSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::PrintElapse
    - brpc::PrintRealTime
    - brpc::PrintAnnotations
    linkageType: ''
    returnType: bool
    signature: "bool PrintAnnotationsAndRealTimeSpan(\n    std::ostream& os, int64_t
      cur_time, int64_t* last_time,\n    SpanInfoExtractor** extr, int num_extr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:219,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:220,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 221
    functionName: brpc::GetStartRealTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - start_send_real_us
    - received_real_us
    - type
    linkageType: ''
    returnType: int64_t
    signature: int64_t GetStartRealTime(const RpczSpan& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:225,1
    - Dst: GetStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - RpczSpan
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 226
    functionName: operator()(const RpczSpan& s1, const RpczSpan& s2) const
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - GetStartRealTime
    linkageType: ''
    returnType: bool
    signature: bool operator()(const RpczSpan& s1, const RpczSpan& s2) const
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:235,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:243,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:243,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:243,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:245,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:245,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:250,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:252,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:252,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:255,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:255,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:257,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:259,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:264,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:264,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:267,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:267,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:275,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:279,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:281,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:281,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:291,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:291,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:296,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:297,1
    - Dst: async
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:299,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:302,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:302,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 232
    functionDepth: 5
    functionLinenumber: 232
    functionLinenumberEnd: 304
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached:
    - async
    - brpc::FindProtocol
    - base_cid
    - brpc::PrintAnnotations
    - brpc::WebEscape
    - log_id
    - trace_id
    - start_callback_real_us
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - start_parse_real_us
    - full_method_name
    - request_size
    - remote_ip
    - start_send_real_us
    - protocol
    - CHECK
    - ending_cid
    - butil::int2ip
    - received_real_us
    - info
    - remote_port
    - brpc::Hex
    - span_id
    - butil::my_ip
    - butil::BaseIteratorRangeToNumberTraits::max
    - response_size
    linkageType: ''
    returnType: void
    signature: "void PrintClientSpan(\n    std::ostream& os, const RpczSpan& span,\n
      \   int64_t* last_time, SpanInfoExtractor* server_extr, bool use_html)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:308,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 3
    functionsReached:
    - start_send_real_us
    - brpc::PrintClientSpan
    linkageType: ''
    returnType: void
    signature: "void PrintClientSpan(std::ostream& os,const RpczSpan& span,\n                            bool
      use_html)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:314,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:321,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 312
    functionDepth: 4
    functionLinenumber: 312
    functionLinenumberEnd: 322
    functionName: brpc::PrintBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - info
    - brpc::PrintAnnotations
    linkageType: ''
    returnType: void
    signature: "void PrintBthreadSpan(std::ostream& os, const RpczSpan& span, int64_t*
      last_time,\n                             SpanInfoExtractor* server_extr, bool
      use_html)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:326,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:328,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:330,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:330,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:330,1
    - Dst: brpc::PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:331,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:332,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:332,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:334,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:337,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:337,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:339,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:343,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:343,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:344,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:344,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:345,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:346,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:346,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:349,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:350,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:356,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:357,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:358,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:360,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:360,1
    - Dst: client_spans_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:363,1
    - Dst: client_spans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:365,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:366,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:367,1
    - Dst: brpc::PrintBthreadSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:369,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:373,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:374,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:375,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:377,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:377,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:383,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:384,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:385,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:386,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:389,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:389,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:390,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 324
    functionDepth: 6
    functionLinenumber: 324
    functionLinenumberEnd: 391
    functionName: brpc::PrintServerSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - client_spans_size
    - brpc::FindProtocol
    - brpc::PrintClientSpan
    - brpc::PrintAnnotations
    - ARRAY_SIZE
    - log_id
    - brpc::WebEscape
    - trace_id
    - client_spans
    - start_callback_real_us
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - brpc::PrintBthreadSpan
    - start_parse_real_us
    - parent_span_id
    - request_size
    - full_method_name
    - remote_ip
    - type
    - protocol
    - start_send_real_us
    - butil::int2ip
    - received_real_us
    - info
    - remote_port
    - brpc::PrintRealDateTime
    - brpc::Hex
    - span_id
    - butil::BaseIteratorRangeToNumberTraits::max
    - response_size
    linkageType: ''
    returnType: void
    signature: "void PrintServerSpan(std::ostream& os, const RpczSpan& span,\n                            bool
      use_html)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:396,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:397,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 403
    functionName: brpc::RpczSpanFilter::RpczSpanFilter
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::GetJsService::jquery_min
    linkageType: ''
    returnType: void
    signature: void RpczSpanFilter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - min_latency
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: brpc::RpczSpanFilter::CheckLatency
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckLatency(int64_t min_latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - min_request_size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 409
    functionName: brpc::RpczSpanFilter::CheckRequest
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckRequest(int64_t min_request_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - min_response_size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: brpc::RpczSpanFilter::CheckResponse
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckResponse(int64_t min_response_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 418
    functionName: brpc::RpczSpanFilter::CheckLogId
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckLogId(uint64_t log_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    functionName: brpc::RpczSpanFilter::CheckErrorCode
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckErrorCode(int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: latency_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:426,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:427,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:428,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:429,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:430,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - BriefSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 431
    functionName: brpc::RpczSpanFilter::Keep
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - latency_us
    - error_code
    - request_size
    - log_id
    - response_size
    linkageType: ''
    returnType: bool
    signature: bool Keep(const BriefSpan& span)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:446,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:446,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:449,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:450,1
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:453,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:453,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:460,1
    - Dst: timelocal
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:465,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' time_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 466
    functionName: brpc::ParseDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - strtol
    - strptime
    - c_str
    - timelocal
    - localtime_r
    - time
    linkageType: ''
    returnType: int64_t
    signature: int64_t ParseDateTime(const std::string& time_str)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:472,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:475,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:478,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:484,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - str
    - val
    argTypes:
    - std::string*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 488
    functionName: brpc::ParseUint64
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - std::string*::c_str
    - strtoull
    linkageType: ''
    returnType: bool
    signature: bool ParseUint64(const std::string* str, uint64_t* val)
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:495,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:497,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:497,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:498,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:501,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:505,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:507,1
    - Dst: has_span_db
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:510,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:520,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:520,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:523,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:524,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:527,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:530,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:530,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:538,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: FindSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:548,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: std::deque::begin
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: std::deque::end
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: CompareByStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:549,1
    - Dst: std::deque::resize
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:551,1
    - Dst: FindSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:552,1
    - Dst: std::deque::clear
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:553,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:556,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:559,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:559,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:565,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:567,1
    - Dst: PrintServerSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:568,1
    - Dst: PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:577,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:577,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:581,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:584,1
    - Dst: ParseDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:586,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:590,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:590,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:596,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:599,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:599,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:608,1
    - Dst: RpczSpanFilter::CheckLatency
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:614,1
    - Dst: RpczSpanFilter::CheckRequest
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:620,1
    - Dst: RpczSpanFilter::CheckResponse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:623,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:623,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:623,1
    - Dst: ParseUint64
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:626,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:626,1
    - Dst: RpczSpanFilter::CheckLogId
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:628,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:631,1
    - Dst: RpczSpanFilter::CheckErrorCode
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:634,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:634,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:634,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:637,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:637,1
    - Dst: ListSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:639,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:640,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:643,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:643,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:651,1
    - Dst: start_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:653,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:654,1
    - Dst: PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: latency_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:656,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:660,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:660,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:662,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:662,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:670,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:670,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:671,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:671,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:673,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:673,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:679,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:679,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:681,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:684,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:686,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:689,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:689,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:696,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:696,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 137
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 698
    functionName: brpc::RpczService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - strtoll
    - std::max
    - latency_us
    - error_code
    - Controller*::http_response
    - FindSpan
    - strtol
    - RpczSpanFilter::CheckLatency
    - TabsHead
    - Controller*::server
    - std::string*::c_str
    - Hex
    - PrintRealDateTime
    - RpczSpanFilter::CheckRequest
    - PrintClientSpan
    - log_id
    - WebEscape
    - strtoull
    - trace_id
    - RpczSpanFilter::CheckResponse
    - butil::IOBufBuilder::IOBufBuilder
    - butil::gettimeofday_us
    - full_method_name
    - request_size
    - type
    - RpczSpanFilter::CheckErrorCode
    - std::deque::end
    - Controller*::http_request
    - ListSpans
    - std::sort
    - PrintServerSpan
    - static_cast<Controller*>
    - CompareByStartRealTime
    - berror
    - RpczSpanFilter::CheckLogId
    - std::deque::resize
    - std::deque::clear
    - start_real_us
    - std::deque::size
    - FindSpans
    - has_span_db
    - std::min
    - PrintElapse
    - std::deque::empty
    - ParseDateTime
    - span_id
    - Controller*::response_attachment
    - butil::my_ip
    - UseHTML
    - response_size
    - std::deque::begin
    - ParseUint64
    linkageType: ''
    returnType: void
    signature: "void RpczService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const ::brpc::RpczRequest*,\n                                 ::brpc::RpczResponse*,\n
      \                                ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:701,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 704
      start: 700
    functionDepth: 1
    functionLinenumber: 700
    functionLinenumberEnd: 704
    functionName: brpc::RpczService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void RpczService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:38,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:39,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:40,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:41,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:43,1
    - Dst: bthread::id_pool_status
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:45,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:48,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:48,1
    - Dst: bthread::id_status
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:52,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:53,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:57,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:57,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 58
    functionName: brpc::IdsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/ids_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - strtoull
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - bthread::id_pool_status
    - c_str
    - bthread::id_status
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void IdsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                const ::brpc::IdsRequest*,\n                                ::brpc::IdsResponse*,\n
      \                               ::google::protobuf::Closure* done)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:38,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:39,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:40,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:41,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:43,1
    - Dst: bthread::id_pool_status
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:45,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:48,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:48,1
    - Dst: bthread::id_status
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:50,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:52,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:53,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:57,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/ids_service.cpp:57,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 58
    functionName: brpc::IdsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/ids_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - Controller*::http_request
    - strtoull
    - Controller*::response_attachment
    - static_cast<Controller*>
    - empty
    - bthread::id_pool_status
    - c_str
    - bthread::id_status
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void IdsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                const ::brpc::IdsRequest*,\n                                ::brpc::IdsResponse*,\n
      \                               ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - use_html
    - ' os'
    argTypes:
    - bool
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::VLogPrinter::VLogPrinter
    functionSourceFile: /src/brpc/src/brpc/builtin/vlog_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VLogPrinter(bool use_html, std::ostream& os)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - ' site'
    argTypes:
    - VLogSitePrinter::Site
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 56
    functionName: brpc::VLogPrinter::print
    functionSourceFile: /src/brpc/src/brpc/builtin/vlog_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void print(const VLogSitePrinter::Site& site)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:69,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:70,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:70,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:71,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:73,1
    - Dst: gridtable_style
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:76,1
    - Dst: print_vlog_sites
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:85,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:93,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:93,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 94
    functionName: brpc::VLogService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/vlog_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - print_vlog_sites
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - gridtable_style
    - UseHTML
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void VLogService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const ::brpc::VLogRequest*,\n                                 ::brpc::VLogResponse*,\n
      \                                ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - use_html
    - ' os'
    argTypes:
    - bool
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: brpc::VLogPrinter::VLogPrinter
    functionSourceFile: /src/brpc/src/brpc/builtin/vlog_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VLogPrinter(bool use_html, std::ostream& os)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - ' site'
    argTypes:
    - VLogSitePrinter::Site
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 56
    functionName: brpc::VLogPrinter::print
    functionSourceFile: /src/brpc/src/brpc/builtin/vlog_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void print(const VLogSitePrinter::Site& site)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:69,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:70,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:70,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:71,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:73,1
    - Dst: gridtable_style
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:76,1
    - Dst: print_vlog_sites
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:85,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:93,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/vlog_service.cpp:93,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 94
    functionName: brpc::VLogService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/vlog_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - print_vlog_sites
    - Controller*::http_response
    - Controller*::http_request
    - Controller*::response_attachment
    - static_cast<Controller*>
    - gridtable_style
    - UseHTML
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void VLogService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                 const ::brpc::VLogRequest*,\n                                 ::brpc::VLogResponse*,\n
      \                                ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::ListService::ListService
    functionSourceFile: /src/brpc/src/brpc/builtin/list_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListService(Server* server)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: brpc::ListService::ListService
    functionSourceFile: /src/brpc/src/brpc/builtin/list_service.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ListService(Server* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - s
    - use_html
    argTypes:
    - SSLState
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: brpc::SSLStateToYesNo
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToYesNo(SSLState s, bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' pt_'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::NameOfPoint
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NameOfPoint(const butil::EndPoint& pt_)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2hostname
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:66,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' nop'
    argTypes:
    - std::ostream
    - NameOfPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 71
    functionName: '& operator<<(std::ostream& os, const NameOfPoint& nop)'
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - butil::endpoint2hostname
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const NameOfPoint& nop)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:74,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:75,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:76,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:76,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' str'
    - suffix
    argTypes:
    - std::string
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 77
    functionName: brpc::EndsWith
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - data
    - brpc::size
    - strlen
    linkageType: ''
    returnType: bool
    signature: bool EndsWith(const std::string& str, const char* suffix)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:80,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:86,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:87,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:88,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:89,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:90,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:91,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:92,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:93,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:94,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:97,1
    - Dst: ::isupper
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:99,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:100,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:101,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:103,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:103,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:105,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 1
    argNames:
    - ' cname'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 79
    functionDepth: 2
    functionLinenumber: 79
    functionLinenumberEnd: 109
    functionName: brpc::BriefName
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - ::isupper
    - tolower
    - rfind
    - std::string::reserve
    - std::string::empty
    - brpc::size
    - brpc::EndsWith
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string BriefName(const std::string& cname)
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:114,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:155,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:159,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:160,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:164,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:176,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:177,1
    - Dst: NameOfPoint
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:177,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:177,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:179,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:179,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:180,1
    - Dst: SocketUniquePtr::recent_error_count
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:180,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:181,1
    - Dst: SocketUniquePtr::isolated_times
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:181,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:183,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:184,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:185,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:186,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:187,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:188,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:189,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:190,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:191,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:192,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:193,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:194,1
    - Dst: SocketUniquePtr::PeekAgentSocket
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:198,1
    - Dst: SocketUniquePtr::swap
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:199,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:205,1
    - Dst: SocketUniquePtr::HasSocketPool
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:208,1
    - Dst: SocketUniquePtr::GetPooledSocketStats
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:211,1
    - Dst: SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:215,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:216,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:217,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:221,1
    - Dst: Server*::_am::NameOfProtocol
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:222,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:226,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:227,1
    - Dst: BriefName
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:228,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:228,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:229,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:231,1
    - Dst: SocketUniquePtr::CreatedByConnect
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:233,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:234,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:236,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:239,1
    - Dst: SocketUniquePtr::is_ssl
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:240,1
    - Dst: SocketUniquePtr::GetStat
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:244,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:245,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:246,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:248,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:258,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:266,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:274,1
    - Dst: strcpy
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:277,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:279,1
    - Dst: NameOfPoint
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:279,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:279,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:281,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:282,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:282,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:284,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:286,1
    - Dst: SocketUniquePtr::recent_error_count
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:286,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:287,1
    - Dst: SocketUniquePtr::isolated_times
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:287,1
    - Dst: SSLStateToYesNo
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:289,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:289,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:292,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:294,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:297,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:298,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:299,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:299,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:301,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:303,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:304,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:305,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:306,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:307,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:308,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:309,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:310,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:311,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 128
    argCount: 5
    argNames:
    - ' os'
    - ' conns'
    - use_html
    - server
    - is_channel_conn
    argTypes:
    - std::ostream
    - std::vector<SocketId>
    - bool
    - Server*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 111
    functionDepth: 3
    functionLinenumber: 111
    functionLinenumberEnd: 328
    functionName: brpc::ConnectionsService::PrintConnections
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - get_client_side_messenger
    - getsockopt
    - NameOfPoint
    - SocketUniquePtr::ListPooledSockets
    - SocketUniquePtr::PeekAgentSocket
    - SocketUniquePtr::is_ssl
    - std::vector::empty
    - SocketUniquePtr::local_side
    - brpc::SetTrackMeAddress
    - SSLStateToYesNo
    - SocketUniquePtr::GetPooledSocketStats
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::swap
    - PrintRealDateTime
    - SocketUniquePtr::GetStat
    - SocketUniquePtr::ssl_state
    - std::string::c_str
    - SocketUniquePtr::isolated_times
    - SocketUniquePtr::HasSocketPool
    - strcpy
    - SocketUniquePtr::CreatedByConnect
    - size
    - Server*::_am::NameOfProtocol
    - SocketUniquePtr::recent_error_count
    - SocketUniquePtr::fd
    - BriefName
    - snprintf
    - SocketUniquePtr::user
    - Server*::options
    - SocketUniquePtr::preferred_index
    - strcmp
    - min_width
    - butil::class_name_str
    - std::string::empty
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - empty
    - SocketUniquePtr::remote_side
    linkageType: ''
    returnType: void
    signature: "void ConnectionsService::PrintConnections(\n    std::ostream& os,
      const std::vector<SocketId>& conns,\n    bool use_html, const Server* server,
      bool is_channel_conn) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:336,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:337,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:340,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:341,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:341,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:342,1
    - Dst: gridtable_style
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:347,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:350,1
    - Dst: Server*::PrintTabsBody
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:352,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:356,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:357,1
    - Dst: Acceptor*::ConnectionCount
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:362,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:363,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:364,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:364,1
    - Dst: Acceptor*::ConnectionCount
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:369,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:373,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:374,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:375,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: brpc::ConnectionsService::PrintConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:382,1
    - Dst: SocketMapList
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:392,1
    - Dst: GetChannelConnectionCount
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:394,1
    - Dst: brpc::ConnectionsService::PrintConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:395,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:401,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:401,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:402,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 330
    functionDepth: 4
    functionLinenumber: 330
    functionLinenumberEnd: 403
    functionName: brpc::ConnectionsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - brpc::ConnectionsService::PrintConnections
    - std::vector::begin
    - TabsHead
    - gridtable_style
    - Controller*::set_response_compress_type
    - Controller*::server
    - SocketMapList
    - GetChannelConnectionCount
    - Acceptor*::ConnectionCount
    - Acceptor*::ListConnections
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::http_request
    - static_cast<Controller*>
    - std::vector::end
    - Controller*::response_attachment
    - std::vector::insert
    - butil::BaseIteratorRangeToNumberTraits::max
    - UseHTML
    - Server*::PrintTabsBody
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void ConnectionsService::default_method(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::ConnectionsRequest*,\n    ::brpc::ConnectionsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 409
    functionName: brpc::ConnectionsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void ConnectionsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - s
    - use_html
    argTypes:
    - SSLState
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: brpc::SSLStateToYesNo
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToYesNo(SSLState s, bool use_html)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' pt_'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: brpc::NameOfPoint
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NameOfPoint(const butil::EndPoint& pt_)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2hostname
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:66,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' nop'
    argTypes:
    - std::ostream
    - NameOfPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 71
    functionName: '& operator<<(std::ostream& os, const NameOfPoint& nop)'
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - butil::endpoint2hostname
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const NameOfPoint& nop)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:74,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:75,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:76,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:76,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' str'
    - suffix
    argTypes:
    - std::string
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 77
    functionName: brpc::EndsWith
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 1
    functionsReached:
    - memcmp
    - data
    - brpc::size
    - strlen
    linkageType: ''
    returnType: bool
    signature: bool EndsWith(const std::string& str, const char* suffix)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:80,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:86,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:87,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:88,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:89,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:90,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:91,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:92,1
    - Dst: brpc::EndsWith
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:93,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:94,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:97,1
    - Dst: ::isupper
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:99,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:100,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:101,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:103,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:103,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:105,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 1
    argNames:
    - ' cname'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 79
    functionDepth: 2
    functionLinenumber: 79
    functionLinenumberEnd: 109
    functionName: brpc::BriefName
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - ::isupper
    - tolower
    - rfind
    - std::string::reserve
    - std::string::empty
    - brpc::size
    - brpc::EndsWith
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string BriefName(const std::string& cname)
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:114,1
    - Dst: size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:155,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:159,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:160,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:164,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:176,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:177,1
    - Dst: NameOfPoint
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:177,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:177,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:179,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:179,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:180,1
    - Dst: SocketUniquePtr::recent_error_count
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:180,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:181,1
    - Dst: SocketUniquePtr::isolated_times
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:181,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:183,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:184,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:185,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:186,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:187,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:188,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:189,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:190,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:191,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:192,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:193,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:194,1
    - Dst: SocketUniquePtr::PeekAgentSocket
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:198,1
    - Dst: SocketUniquePtr::swap
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:199,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:205,1
    - Dst: SocketUniquePtr::HasSocketPool
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:208,1
    - Dst: SocketUniquePtr::GetPooledSocketStats
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:211,1
    - Dst: SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:215,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:216,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:217,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:221,1
    - Dst: Server*::_am::NameOfProtocol
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:222,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:226,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:227,1
    - Dst: BriefName
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:228,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:228,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:229,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:231,1
    - Dst: SocketUniquePtr::CreatedByConnect
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:233,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:234,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:236,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:239,1
    - Dst: SocketUniquePtr::is_ssl
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:240,1
    - Dst: SocketUniquePtr::GetStat
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:244,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:245,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:246,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:248,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:258,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:266,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:274,1
    - Dst: strcpy
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:277,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:279,1
    - Dst: NameOfPoint
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:279,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:279,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:281,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:282,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:282,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:284,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:286,1
    - Dst: SocketUniquePtr::recent_error_count
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:286,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:287,1
    - Dst: SocketUniquePtr::isolated_times
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:287,1
    - Dst: SSLStateToYesNo
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:289,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:289,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:292,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:294,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:297,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:298,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:299,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:299,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:301,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:303,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:304,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:305,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:306,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:307,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:308,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:309,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:310,1
    - Dst: min_width
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:311,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 128
    argCount: 5
    argNames:
    - ' os'
    - ' conns'
    - use_html
    - server
    - is_channel_conn
    argTypes:
    - std::ostream
    - std::vector<SocketId>
    - bool
    - Server*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 111
    functionDepth: 3
    functionLinenumber: 111
    functionLinenumberEnd: 328
    functionName: brpc::ConnectionsService::PrintConnections
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 1
    functionsReached:
    - get_client_side_messenger
    - getsockopt
    - NameOfPoint
    - SocketUniquePtr::ListPooledSockets
    - SocketUniquePtr::PeekAgentSocket
    - SocketUniquePtr::is_ssl
    - std::vector::empty
    - SocketUniquePtr::local_side
    - brpc::SetTrackMeAddress
    - SSLStateToYesNo
    - SocketUniquePtr::GetPooledSocketStats
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::swap
    - PrintRealDateTime
    - SocketUniquePtr::GetStat
    - SocketUniquePtr::ssl_state
    - std::string::c_str
    - SocketUniquePtr::isolated_times
    - SocketUniquePtr::HasSocketPool
    - strcpy
    - SocketUniquePtr::CreatedByConnect
    - size
    - Server*::_am::NameOfProtocol
    - SocketUniquePtr::recent_error_count
    - SocketUniquePtr::fd
    - BriefName
    - snprintf
    - SocketUniquePtr::user
    - Server*::options
    - SocketUniquePtr::preferred_index
    - strcmp
    - min_width
    - butil::class_name_str
    - std::string::empty
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - empty
    - SocketUniquePtr::remote_side
    linkageType: ''
    returnType: void
    signature: "void ConnectionsService::PrintConnections(\n    std::ostream& os,
      const std::vector<SocketId>& conns,\n    bool use_html, const Server* server,
      bool is_channel_conn) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:336,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:337,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:340,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:341,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:341,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:342,1
    - Dst: gridtable_style
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:347,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:350,1
    - Dst: Server*::PrintTabsBody
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:352,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:356,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:357,1
    - Dst: Acceptor*::ConnectionCount
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:362,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:363,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:364,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:364,1
    - Dst: Acceptor*::ConnectionCount
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:369,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:373,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:374,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:375,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:379,1
    - Dst: brpc::ConnectionsService::PrintConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:382,1
    - Dst: SocketMapList
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:392,1
    - Dst: GetChannelConnectionCount
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:394,1
    - Dst: brpc::ConnectionsService::PrintConnections
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:395,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:401,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:401,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:402,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 330
    functionDepth: 4
    functionLinenumber: 330
    functionLinenumberEnd: 403
    functionName: brpc::ConnectionsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - brpc::ConnectionsService::PrintConnections
    - std::vector::begin
    - TabsHead
    - gridtable_style
    - Controller*::set_response_compress_type
    - Controller*::server
    - SocketMapList
    - GetChannelConnectionCount
    - Acceptor*::ConnectionCount
    - Acceptor*::ListConnections
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::http_request
    - static_cast<Controller*>
    - std::vector::end
    - Controller*::response_attachment
    - std::vector::insert
    - butil::BaseIteratorRangeToNumberTraits::max
    - UseHTML
    - Server*::PrintTabsBody
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void ConnectionsService::default_method(\n    ::google::protobuf::RpcController*
      cntl_base,\n    const ::brpc::ConnectionsRequest*,\n    ::brpc::ConnectionsResponse*,\n
      \   ::google::protobuf::Closure* done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/connections_service.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 409
    functionName: brpc::ConnectionsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/connections_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void ConnectionsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: find_first_of
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:47,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:49,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:52,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:52,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:52,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:55,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:55,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:57,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:58,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:59,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:60,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 43
    functionDepth: 2
    functionLinenumber: 43
    functionLinenumberEnd: 64
    functionName: brpc::HtmlReplace
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 0
    functionsReached:
    - find_first_of
    - std::string::empty
    - std::string::append
    - brpc::size
    - data
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string HtmlReplace(const std::string& s)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: current_value::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:84,1
    - Dst: brpc::HtmlReplace
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:85,1
    - Dst: brpc::HtmlReplace
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:93,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 3
    argNames:
    - ' os'
    - ' flag'
    - use_html
    argTypes:
    - std::ostream
    - GFLAGS_NAMESPACE::CommandLineFlagInfo
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 66
    functionDepth: 3
    functionLinenumber: 66
    functionLinenumberEnd: 105
    functionName: brpc::PrintFlag
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 0
    functionsReached:
    - current_value::empty
    - brpc::HtmlReplace
    linkageType: ''
    returnType: void
    signature: "void PrintFlag(std::ostream& os, const GFLAGS_NAMESPACE::CommandLineFlagInfo&
      flag,\n                      bool use_html)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:110,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:112,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:113,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:116,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:132,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:132,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - Controller*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 133
    functionName: brpc::FlagsService::set_value_page
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_request
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - Controller*::response_attachment
    - c_str
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void FlagsService::set_value_page(Controller* cntl,\n                                  ::google::protobuf::Closure*
      done)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:140,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:142,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:143,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:145,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:145,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:146,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:151,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:152,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:155,1
    - Dst: brpc::FlagsService::set_value_page
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:156,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:156,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:159,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:159,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:160,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:164,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:168,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:169,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:172,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:172,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:174,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:175,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:176,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:176,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:179,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:184,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:184,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:191,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:192,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:193,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:193,1
    - Dst: std::string::find_first_of
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:194,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:195,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:197,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:203,1
    - Dst: gridtable_style
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:205,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:207,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:209,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:217,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:217,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:219,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:220,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:222,1
    - Dst: std::set<std::string>::iterator::c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:222,1
    - Dst: PrintFlag
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:223,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:231,1
    - Dst: GFLAGS_NAMESPACE::GetAllFlags
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:232,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:234,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:234,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:235,1
    - Dst: std::set::find
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:236,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:236,1
    - Dst: MatchAnyWildcard
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:237,1
    - Dst: PrintFlag
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:240,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:247,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:247,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:248,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 72
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 135
    functionDepth: 2
    functionLinenumber: 135
    functionLinenumberEnd: 249
    functionName: brpc::FlagsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - std::set<std::string>::iterator::c_str
    - std::vector::begin
    - TabsHead
    - std::vector::empty
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - Controller*::server
    - std::string*::c_str
    - std::set::end
    - std::set::find
    - ClosureGuard::release
    - std::set::begin
    - butil::StringMultiSplitter::field
    - Controller*::http_request
    - brpc::FlagsService::set_value_page
    - GFLAGS_NAMESPACE::GetAllFlags
    - static_cast<Controller*>
    - std::vector::reserve
    - PrintFlag
    - std::vector::push_back
    - std::set::insert
    - butil::StringMultiSplitter::length
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::find_first_of
    - std::vector::end
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - Controller*::response_attachment
    - c_str
    - empty
    - MatchAnyWildcard
    - gridtable_style
    - UseHTML
    - std::string*::empty
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void FlagsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                  const ::brpc::FlagsRequest*,\n
      \                                 ::brpc::FlagsResponse*,\n                                  ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 255
    functionName: brpc::FlagsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void FlagsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: find_first_of
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:47,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:49,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:52,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:52,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:52,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:55,1
    - Dst: data
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:55,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:57,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:58,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:59,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:60,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 43
    functionDepth: 2
    functionLinenumber: 43
    functionLinenumberEnd: 64
    functionName: brpc::HtmlReplace
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 1
    functionsReached:
    - find_first_of
    - std::string::empty
    - std::string::append
    - brpc::size
    - data
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string HtmlReplace(const std::string& s)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: current_value::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:84,1
    - Dst: brpc::HtmlReplace
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:85,1
    - Dst: brpc::HtmlReplace
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:93,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 3
    argNames:
    - ' os'
    - ' flag'
    - use_html
    argTypes:
    - std::ostream
    - GFLAGS_NAMESPACE::CommandLineFlagInfo
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 66
    functionDepth: 3
    functionLinenumber: 66
    functionLinenumberEnd: 105
    functionName: brpc::PrintFlag
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 0
    functionsReached:
    - current_value::empty
    - brpc::HtmlReplace
    linkageType: ''
    returnType: void
    signature: "void PrintFlag(std::ostream& os, const GFLAGS_NAMESPACE::CommandLineFlagInfo&
      flag,\n                      bool use_html)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:110,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:112,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:113,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:116,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:132,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:132,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - Controller*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 133
    functionName: brpc::FlagsService::set_value_page
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_request
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - Controller*::response_attachment
    - c_str
    - Controller*::SetFailed
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void FlagsService::set_value_page(Controller* cntl,\n                                  ::google::protobuf::Closure*
      done)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:140,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:142,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:143,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:145,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:145,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:146,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:151,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:152,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:155,1
    - Dst: brpc::FlagsService::set_value_page
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:156,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:156,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:159,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:159,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:160,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:164,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:168,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:169,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:172,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:172,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:173,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:174,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:175,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:176,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:176,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:179,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:184,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:184,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:191,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:192,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:193,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:193,1
    - Dst: std::string::find_first_of
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:194,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:195,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:197,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:203,1
    - Dst: gridtable_style
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:205,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:207,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:209,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:217,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:217,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:219,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:220,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineFlagInfo
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:222,1
    - Dst: std::set<std::string>::iterator::c_str
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:222,1
    - Dst: PrintFlag
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:223,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:231,1
    - Dst: GFLAGS_NAMESPACE::GetAllFlags
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:232,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:234,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:234,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:235,1
    - Dst: std::set::find
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:236,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:236,1
    - Dst: MatchAnyWildcard
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:237,1
    - Dst: PrintFlag
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:240,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:247,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:247,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:248,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 72
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 135
    functionDepth: 2
    functionLinenumber: 135
    functionLinenumberEnd: 249
    functionName: brpc::FlagsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufBuilder::move_to
    - Controller*::http_response
    - std::set<std::string>::iterator::c_str
    - std::vector::begin
    - TabsHead
    - std::vector::empty
    - Controller*::set_response_compress_type
    - Controller*::SetFailed
    - Controller*::server
    - std::string*::c_str
    - std::set::end
    - std::set::find
    - ClosureGuard::release
    - std::set::begin
    - butil::StringMultiSplitter::field
    - Controller*::http_request
    - brpc::FlagsService::set_value_page
    - GFLAGS_NAMESPACE::GetAllFlags
    - static_cast<Controller*>
    - std::vector::reserve
    - PrintFlag
    - std::vector::push_back
    - std::set::insert
    - butil::StringMultiSplitter::length
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::find_first_of
    - std::vector::end
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - Controller*::response_attachment
    - c_str
    - empty
    - MatchAnyWildcard
    - gridtable_style
    - UseHTML
    - std::string*::empty
    - butil::IOBufBuilder::IOBufBuilder
    linkageType: ''
    returnType: void
    signature: "void FlagsService::default_method(::google::protobuf::RpcController*
      cntl_base,\n                                  const ::brpc::FlagsRequest*,\n
      \                                 ::brpc::FlagsResponse*,\n                                  ::google::protobuf::Closure*
      done)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TabInfoList*::add
      Src: /src/brpc/src/brpc/builtin/flags_service.cpp:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 255
    functionName: brpc::FlagsService::GetTabInfo
    functionSourceFile: /src/brpc/src/brpc/builtin/flags_service.cpp
    functionUses: 0
    functionsReached:
    - TabInfoList*::add
    linkageType: ''
    returnType: void
    signature: void FlagsService::GetTabInfo(TabInfoList* info_list) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::rdma::Region
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Region()
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 121
    functionName: brpc::rdma::GetRegion
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Region
    signature: Region * GetRegion(const void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 129
    functionName: brpc::rdma::GetRegionId
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRegionId(const void* buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:134,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:138,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:140,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:148,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:150,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:152,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 172
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - free
    - butil::get_object<IdleNode>
    - g_cb
    - butil::return_object<IdleNode>
    - LOG
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolImpl(void* region_base, size_t region_size,\n
      \                                int block_type)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:192,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:195,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:196,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:200,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 201
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - LOG_EVERY_SECOND
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG
    - posix_memalign
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:206,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:209,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:210,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:214,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:215,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:219,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 228
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPoolImpl
    - butil::fast_rand
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolByUser(void* region_base, size_t region_size,\n
      \                           int block_type)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:280,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:285,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:292,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:295,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:296,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:300,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:304,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:311,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:318,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 69
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 230
    functionDepth: 3
    functionLinenumber: 230
    functionLinenumberEnd: 323
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - GlobalInfo::GlobalInfo
    - butil::Mutex::Mutex
    - resize
    - brpc::rdma::ExtendBlockPool
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:327,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:328,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:333,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:340,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:345,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:346,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:349,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:355,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:362,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:376,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:411,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 71
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 325
    functionDepth: 3
    functionLinenumber: 325
    functionLinenumberEnd: 414
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - LOG_EVERY_SECOND
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPool
    - CHECK
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    - lock
    linkageType: ''
    returnType: void
    signature: void * AllocBlockFrom(int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlockFrom
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:423,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 416
    functionDepth: 4
    functionLinenumber: 416
    functionLinenumberEnd: 427
    functionName: brpc::rdma::AllocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::AllocBlockFrom
    linkageType: ''
    returnType: void
    signature: void * AllocBlock(size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 444
    functionName: brpc::rdma::RecycleAll
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RecycleAll()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:452,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:458,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:460,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:471,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:472,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:478,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:479,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:506,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:515,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:521,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 61
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 524
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - butil::thread_atexit
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetRegion
    - butil::get_object<IdleNode>
    - BAIDU_UNLIKELY
    - lock
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int DeallocBlock(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 528
    functionName: brpc::rdma::GetBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBlockSize(int type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:535,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:536,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 559
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetBlockSize
    - usleep
    linkageType: ''
    returnType: void
    signature: void DumpMemoryPoolInfo(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RecycleAll
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:563,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:569,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:581,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 562
    functionDepth: 2
    functionLinenumber: 562
    functionLinenumberEnd: 586
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RecycleAll
    - free
    - butil::return_object<IdleNode>
    linkageType: ''
    returnType: void
    signature: void DestroyBlockPool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 589
    functionDepth: 1
    functionLinenumber: 589
    functionLinenumberEnd: 595
    functionName: brpc::rdma::GetBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: int
    signature: int GetBlockType(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 608
    functionName: brpc::rdma::GetGlobalLen
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetGlobalLen(int block_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 613
    functionName: brpc::rdma::GetRegionNum
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetRegionNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::rdma::Region
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Region()
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 121
    functionName: brpc::rdma::GetRegion
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: Region
    signature: Region * GetRegion(const void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 129
    functionName: brpc::rdma::GetRegionId
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRegionId(const void* buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:134,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:138,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:140,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:148,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:150,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:152,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 172
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - free
    - butil::get_object<IdleNode>
    - g_cb
    - butil::return_object<IdleNode>
    - LOG
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolImpl(void* region_base, size_t region_size,\n
      \                                int block_type)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:192,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:195,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:196,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:200,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 201
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - LOG_EVERY_SECOND
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG
    - posix_memalign
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:206,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:209,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:210,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:214,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:215,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:219,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 228
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPoolImpl
    - butil::fast_rand
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolByUser(void* region_base, size_t region_size,\n
      \                           int block_type)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:280,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:285,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:292,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:295,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:296,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:300,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:304,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:311,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:318,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 69
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 230
    functionDepth: 3
    functionLinenumber: 230
    functionLinenumberEnd: 323
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - GlobalInfo::GlobalInfo
    - butil::Mutex::Mutex
    - resize
    - brpc::rdma::ExtendBlockPool
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:327,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:328,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:333,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:340,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:345,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:346,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:349,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:355,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:362,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:376,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:411,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 71
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 325
    functionDepth: 3
    functionLinenumber: 325
    functionLinenumberEnd: 414
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - unlock
    - LOG_EVERY_SECOND
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPool
    - CHECK
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    - lock
    linkageType: ''
    returnType: void
    signature: void * AllocBlockFrom(int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlockFrom
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:423,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 416
    functionDepth: 4
    functionLinenumber: 416
    functionLinenumberEnd: 427
    functionName: brpc::rdma::AllocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::AllocBlockFrom
    linkageType: ''
    returnType: void
    signature: void * AllocBlock(size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 444
    functionName: brpc::rdma::RecycleAll
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::GetRegion
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RecycleAll()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:452,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:458,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:460,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:471,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:472,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:478,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:479,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:506,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:515,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:521,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 61
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 524
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - butil::thread_atexit
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetRegion
    - butil::get_object<IdleNode>
    - BAIDU_UNLIKELY
    - lock
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int DeallocBlock(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 528
    functionName: brpc::rdma::GetBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBlockSize(int type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:535,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:536,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 559
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetBlockSize
    - usleep
    linkageType: ''
    returnType: void
    signature: void DumpMemoryPoolInfo(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RecycleAll
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:563,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:569,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:581,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 562
    functionDepth: 2
    functionLinenumber: 562
    functionLinenumberEnd: 586
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RecycleAll
    - free
    - butil::return_object<IdleNode>
    linkageType: ''
    returnType: void
    signature: void DestroyBlockPool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 589
    functionDepth: 1
    functionLinenumber: 589
    functionLinenumberEnd: 595
    functionName: brpc::rdma::GetBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: int
    signature: int GetBlockType(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 608
    functionName: brpc::rdma::GetGlobalLen
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetGlobalLen(int block_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 613
    functionName: brpc::rdma::GetRegionNum
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetRegionNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::rdma::Region
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Region()
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 121
    functionName: brpc::rdma::GetRegion
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: Region
    signature: Region * GetRegion(const void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 129
    functionName: brpc::rdma::GetRegionId
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRegionId(const void* buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:134,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:138,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:140,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:148,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:150,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:152,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 172
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached:
    - free
    - butil::get_object<IdleNode>
    - g_cb
    - butil::return_object<IdleNode>
    - LOG
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolImpl(void* region_base, size_t region_size,\n
      \                                int block_type)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:192,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:195,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:196,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:200,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 201
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached:
    - LOG_EVERY_SECOND
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG
    - posix_memalign
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:206,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:209,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:210,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:214,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:215,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:219,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 228
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPoolImpl
    - butil::fast_rand
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolByUser(void* region_base, size_t region_size,\n
      \                           int block_type)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:280,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:285,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:292,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:295,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:296,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:300,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:304,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:311,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:318,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 69
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 230
    functionDepth: 3
    functionLinenumber: 230
    functionLinenumberEnd: 323
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - GlobalInfo::GlobalInfo
    - butil::Mutex::Mutex
    - resize
    - brpc::rdma::ExtendBlockPool
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:327,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:328,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:333,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:340,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:345,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:346,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:349,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:355,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:362,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:376,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:411,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 71
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 325
    functionDepth: 3
    functionLinenumber: 325
    functionLinenumberEnd: 414
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - unlock
    - LOG_EVERY_SECOND
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPool
    - CHECK
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    - lock
    linkageType: ''
    returnType: void
    signature: void * AllocBlockFrom(int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlockFrom
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:423,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 416
    functionDepth: 4
    functionLinenumber: 416
    functionLinenumberEnd: 427
    functionName: brpc::rdma::AllocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::AllocBlockFrom
    linkageType: ''
    returnType: void
    signature: void * AllocBlock(size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 444
    functionName: brpc::rdma::RecycleAll
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - brpc::rdma::GetRegion
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RecycleAll()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:452,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:458,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:460,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:471,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:472,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:478,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:479,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:506,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:515,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:521,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 61
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 524
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - butil::thread_atexit
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetRegion
    - butil::get_object<IdleNode>
    - BAIDU_UNLIKELY
    - lock
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int DeallocBlock(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 528
    functionName: brpc::rdma::GetBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBlockSize(int type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:535,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:536,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 559
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetBlockSize
    - usleep
    linkageType: ''
    returnType: void
    signature: void DumpMemoryPoolInfo(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RecycleAll
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:563,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:569,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:581,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 562
    functionDepth: 2
    functionLinenumber: 562
    functionLinenumberEnd: 586
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RecycleAll
    - free
    - butil::return_object<IdleNode>
    linkageType: ''
    returnType: void
    signature: void DestroyBlockPool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 589
    functionDepth: 1
    functionLinenumber: 589
    functionLinenumberEnd: 595
    functionName: brpc::rdma::GetBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: int
    signature: int GetBlockType(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 608
    functionName: brpc::rdma::GetGlobalLen
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetGlobalLen(int block_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 613
    functionName: brpc::rdma::GetRegionNum
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetRegionNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::rdma::Region
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Region()
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 121
    functionName: brpc::rdma::GetRegion
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: Region
    signature: Region * GetRegion(const void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 129
    functionName: brpc::rdma::GetRegionId
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetRegionId(const void* buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:134,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:138,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:140,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:148,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:150,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:152,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 33
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 172
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 6
    functionsReached:
    - free
    - butil::get_object<IdleNode>
    - g_cb
    - butil::return_object<IdleNode>
    - LOG
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolImpl(void* region_base, size_t region_size,\n
      \                                int block_type)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:192,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:195,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:196,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:200,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 201
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 6
    functionsReached:
    - LOG_EVERY_SECOND
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG
    - posix_memalign
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:206,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:209,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:210,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:214,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:215,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:219,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 228
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPoolImpl
    - butil::fast_rand
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: "void * ExtendBlockPoolByUser(void* region_base, size_t region_size,\n
      \                           int block_type)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:270,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:280,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:285,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:291,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:292,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:295,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:296,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:300,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:304,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:311,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:318,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 69
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 230
    functionDepth: 3
    functionLinenumber: 230
    functionLinenumberEnd: 323
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - GlobalInfo::GlobalInfo
    - butil::Mutex::Mutex
    - resize
    - brpc::rdma::ExtendBlockPool
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:327,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:328,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:333,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:340,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:345,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:346,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:349,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:355,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:362,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:376,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:411,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 71
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 325
    functionDepth: 3
    functionLinenumber: 325
    functionLinenumberEnd: 414
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 3
    functionsReached:
    - unlock
    - LOG_EVERY_SECOND
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::ExtendBlockPool
    - CHECK
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    - lock
    linkageType: ''
    returnType: void
    signature: void * AllocBlockFrom(int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlockFrom
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:423,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 416
    functionDepth: 4
    functionLinenumber: 416
    functionLinenumberEnd: 427
    functionName: brpc::rdma::AllocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::AllocBlockFrom
    linkageType: ''
    returnType: void
    signature: void * AllocBlock(size_t size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 444
    functionName: brpc::rdma::RecycleAll
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 3
    functionsReached:
    - brpc::rdma::GetRegion
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RecycleAll()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:452,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:458,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:460,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:471,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:472,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:478,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:479,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:506,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:515,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:521,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 61
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 524
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - butil::thread_atexit
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetRegion
    - butil::get_object<IdleNode>
    - BAIDU_UNLIKELY
    - lock
    - PLOG_EVERY_SECOND
    linkageType: ''
    returnType: int
    signature: int DeallocBlock(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 528
    functionName: brpc::rdma::GetBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBlockSize(int type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:535,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:536,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 559
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::rdma::GetBlockSize
    - usleep
    linkageType: ''
    returnType: void
    signature: void DumpMemoryPoolInfo(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RecycleAll
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:563,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:569,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:581,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 562
    functionDepth: 2
    functionLinenumber: 562
    functionLinenumberEnd: 586
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RecycleAll
    - free
    - butil::return_object<IdleNode>
    linkageType: ''
    returnType: void
    signature: void DestroyBlockPool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 589
    functionDepth: 1
    functionLinenumber: 589
    functionLinenumberEnd: 595
    functionName: brpc::rdma::GetBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRegion
    linkageType: ''
    returnType: int
    signature: int GetBlockType(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 608
    functionName: brpc::rdma::GetGlobalLen
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetGlobalLen(int block_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 613
    functionName: brpc::rdma::GetRegionNum
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetRegionNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:122,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:123,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:124,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:126,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:128,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:129,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:130,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:131,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 134
    functionName: brpc::rdma::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet16
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:138,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:139,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:140,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:141,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:143,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:144,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:145,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:146,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 148
    functionName: brpc::rdma::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::NetToHost16
    - butil::NetToHost32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::rdma::RdmaResource::RdmaResource
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaResource::RdmaResource()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:158,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:166,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyCq
    - IbvDestroyQp
    linkageType: ''
    returnType: void
    signature: void RdmaResource::~RdmaResource()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 208
    functionName: brpc::rdma::RdmaEndpoint::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<butil::atomic<int> >
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::RdmaEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - Reset
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::~RdmaEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:216,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:221,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:222,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:223,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 234
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    - clear
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:239,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:247,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:255,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:257,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 236
    functionDepth: 4
    functionLinenumber: 236
    functionLinenumberEnd: 259
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - CHECK
    - brpc::SetTrackMeAddress
    - Socket*::id
    - LOG
    - done
    linkageType: ''
    returnType: void
    signature: "void RdmaConnect::StartConnect(const Socket* socket,\n                               void
      (*done)(int err, void* data),\n                               void* data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::rdma::RdmaConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 265
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:275,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:276,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:280,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:284,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:287,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:288,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:289,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 293
    functionName: brpc::rdma::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetEOF
    - Socket*::SetFailed
    - read
    - Socket*::fd
    - Socket*::MoreReadEvents
    - berror
    - Socket*::description
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:302,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:303,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:311,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:312,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:315,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:328,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:331,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:334,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 295
    functionDepth: 4
    functionLinenumber: 295
    functionLinenumberEnd: 338
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - TryReadOnTcpDuringRdmaEst
    - brpc::InputMessenger::OnNewMessages
    - bthread::butex_wake
    - SocketUniquePtr::release
    - bthread_start_background
    - RdmaEndpoint*::_read_butex::fetch_add
    - Socket*::MoreReadEvents
    - CHECK
    - Socket*::CreatedByConnect
    - LOG
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 350
    functionName: brpc::rdma::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:355,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:359,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:360,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:364,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 354
    functionDepth: 4
    functionLinenumber: 354
    functionLinenumberEnd: 380
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - load
    - read
    - CHECK
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:383,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 404
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - WaitEpollOut
    - write
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:407,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:409,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 414
    functionName: brpc::rdma::RdmaEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - _nevent::fetch_add
    - TryReadOnTcpDuringRdmaEst
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::TryReadOnTcp()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:417,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:419,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:421,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:444,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:445,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:454,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:457,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:468,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:475,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:482,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:485,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:507,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:513,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:515,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:516,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:535,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:546,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:547,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:550,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 94
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 557
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - SocketUniquePtr::_app_connect::get
    - RdmaEndpoint*::_window_size::store
    - GetRdmaLid
    - butil::HostToNet32
    - SocketUniquePtr::description
    - memcpy
    - GetRdmaGid
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:560,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:564,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:581,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:583,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:586,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:590,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:604,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:616,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:621,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:629,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:650,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:656,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:663,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:664,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:665,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:668,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:690,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:691,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:692,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:699,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:700,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:705,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:708,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 103
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 711
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - RdmaEndpoint*::_window_size::store
    - SocketUniquePtr::_read_buf::append
    - GetRdmaLid
    - SocketUniquePtr::description
    - GetRdmaGid
    - memcpy
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - RdmaEndpoint*::TryReadOnTcp
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - butil::NetToHost32
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:714,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:719,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 713
    functionDepth: 1
    functionLinenumber: 713
    functionLinenumberEnd: 720
    functionName: brpc::rdma::RdmaEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - load
    linkageType: ''
    returnType: bool
    signature: bool RdmaEndpoint::IsWritable() const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _ref_num
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:734,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:738,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:739,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:740,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:742,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:747,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:751,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 5
    argNames:
    - sglist
    - sge_index
    - to
    - max_sge
    - max_len
    argTypes:
    - ibv_sge*
    - size_t*
    - butil::IOBuf*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 730
    functionDepth: 1
    functionLinenumber: 730
    functionLinenumberEnd: 773
    functionName: brpc::rdma::RdmaIOBuf::cut_into_sglist_and_iobuf
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - get_first_data_meta
    - GetLKey
    - _ref_num
    - CHECK
    - fetch1
    - cutn
    - BAIDU_UNLIKELY
    - LOG
    - _ref_at
    - GetRegionId
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t cut_into_sglist_and_iobuf(ibv_sge* sglist, size_t* sge_index,\n
      \           butil::IOBuf* to, size_t max_sge, size_t max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:778,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:784,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:785,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:791,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:794,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:806,1
    - Dst: RdmaIOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:814,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:824,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:830,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:840,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:841,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:881,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 81
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 777
    functionDepth: 1
    functionLinenumber: 777
    functionLinenumberEnd: 905
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_post_send
    - berror
    - load
    - butil::HostToNet32
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - memset
    - CHECK
    - BAIDU_UNLIKELY
    - exchange
    - LOG
    - fetch_sub
    - RdmaIOBuf*::size
    - GetRdmaMaxSge
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 912
      start: 907
    functionDepth: 1
    functionLinenumber: 907
    functionLinenumberEnd: 912
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - exchange
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:920,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:922,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 935
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - ibv_post_send
    - butil::HostToNet32
    - memset
    - berror
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:950,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:952,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:953,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:954,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:957,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:962,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:965,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:971,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:975,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:979,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:983,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:987,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:994,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 937
    functionDepth: 2
    functionLinenumber: 937
    functionLinenumberEnd: 999
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _read_buf::append
    - butil::subtle::MemoryBarrier
    - brpc::rdma::RdmaEndpoint::SendAck
    - fetch_add
    - WakeAsEpollOut
    - CHECK
    - clear
    - butil::NetToHost32
    - cutn
    - butil::IOBuf::IOBuf
    - brpc::rdma::RdmaEndpoint::PostRecv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::HandleCompletion(ibv_wc& wc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1003,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1007,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1018
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_post_recv
    - memset
    - berror
    - LOG
    - GetRegionId
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoPostRecv(void* block, size_t block_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1024,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1028,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1030,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1036,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1020
    functionDepth: 2
    functionLinenumber: 1020
    functionLinenumberEnd: 1047
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK
    - clear
    - static_cast<uint32_t>
    - PLOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1058,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1064,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1071,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1073,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1103,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 46
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1114
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1114
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvCreateCq
    - brpc::rdma::GetRdmaPd
    - IbvCreateCompChannel
    - butil::make_close_on_exec
    - PLOG
    - memset
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    - IbvCreateQp
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaMaxSge
    - butil::make_non_blocking
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1117,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1122,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1126,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1133,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1147,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1161,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1162,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1165,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1169,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1172,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1173,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1176,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1116
    functionDepth: 6
    functionLinenumber: 1116
    functionLinenumberEnd: 1182
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - ibv_req_notify_cq
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    - resize
    - BAIDU_SCOPED_LOCK
    - CHECK
    - AllocateQpCq
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1194,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1196,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1206,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1207,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1215,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1223,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1228,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 50
    argCount: 3
    argNames:
    - lid
    - gid
    - qp_num
    argTypes:
    - uint16_t
    - ibv_gid
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1184
    functionDepth: 3
    functionLinenumber: 1184
    functionLinenumberEnd: 1260
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvModifyQp
    - GetRdmaGidIndex
    - GetRdmaPortNum
    - BAIDU_UNLIKELY
    - PLOG
    - LOG
    - brpc::rdma::RdmaEndpoint::PostRecv
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(uint16_t lid, ibv_gid gid, uint32_t qp_num)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1275,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1293,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1294,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1303,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1317,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1320,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1323,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1330,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1338
      start: 1262
    functionDepth: 3
    functionLinenumber: 1262
    functionLinenumberEnd: 1338
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyCq
    - IbvModifyQp
    - BAIDU_SCOPED_LOCK
    - IbvDestroyCompChannel
    - _io_event::RemoveConsumer
    - IbvAckCqEvents
    - IbvDestroyQp
    - berror
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1358,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1362
      start: 1342
    functionDepth: 0
    functionLinenumber: 1342
    functionLinenumberEnd: 1362
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents()
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1374,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1377,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1380,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1391,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1395,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1409,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1420,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1423,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1424,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1425,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1440,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1441,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1460,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1461,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1463,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1464,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 67
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1364
    functionDepth: 3
    functionLinenumber: 1364
    functionLinenumberEnd: 1468
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::MoreReadEvents
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - ibv_req_notify_cq
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::description
    - RdmaEndpoint*::_socket::id
    - PLOG
    - butil::gettimeofday_us
    - SocketUniquePtr::get
    - SocketUniquePtr::user
    - CHECK
    - berror
    - static_cast<RdmaEndpoint*>
    - static_cast<InputMessenger*>
    - ibv_poll_cq
    - Socket*::user
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::Failed
    - SocketUniquePtr::SetFailed
    - RdmaEndpoint*::HandleCompletion
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1488
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string RdmaEndpoint::GetStateStr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::GetStateStr
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1492,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1504
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1504
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1508,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1510,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1512,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1518,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1520,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1530,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1506
    functionDepth: 0
    functionLinenumber: 1506
    functionLinenumberEnd: 1534
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    - GetBlockSize
    - AllocateQpCq
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1538,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1536
    functionDepth: 1
    functionLinenumber: 1536
    functionLinenumberEnd: 1552
    functionName: brpc::rdma::RdmaEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::GlobalRelease()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1585,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1586,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1588,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1590,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1595,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1601,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1604,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1609,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1615,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1622,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1624,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 47
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1556
    functionDepth: 4
    functionLinenumber: 1556
    functionLinenumberEnd: 1629
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollCq
    - std::unordered_set::erase
    - FnArgs::FnArgs
    - SocketUniquePtr::get
    - auto::init_fn
    - auto::callback
    - bthread_yield
    - auto::load
    - std::unordered_set::emplace
    - compare_exchange_strong
    - auto::op_queue::Dequeue
    - bthread_start_background
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void(void)>
      callback,\n                                        std::function<void(void)>
      init_fn,\n                                        std::function<void(void)>
      release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1640,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1631
    functionDepth: 2
    functionLinenumber: 1631
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1646,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1650,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1652
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1656,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1660,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1662
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1662
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:122,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:123,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:124,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:126,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:128,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:129,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:130,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:131,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 134
    functionName: brpc::rdma::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet16
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:138,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:139,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:140,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:141,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:143,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:144,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:145,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:146,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 148
    functionName: brpc::rdma::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::NetToHost16
    - butil::NetToHost32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::rdma::RdmaResource::RdmaResource
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaResource::RdmaResource()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:158,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:166,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyCq
    - IbvDestroyQp
    linkageType: ''
    returnType: void
    signature: void RdmaResource::~RdmaResource()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 208
    functionName: brpc::rdma::RdmaEndpoint::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<butil::atomic<int> >
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::RdmaEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - Reset
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::~RdmaEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:216,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:221,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:222,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:223,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 234
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    - clear
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:239,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:247,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:255,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:257,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 236
    functionDepth: 4
    functionLinenumber: 236
    functionLinenumberEnd: 259
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - CHECK
    - brpc::SetTrackMeAddress
    - Socket*::id
    - LOG
    - done
    linkageType: ''
    returnType: void
    signature: "void RdmaConnect::StartConnect(const Socket* socket,\n                               void
      (*done)(int err, void* data),\n                               void* data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::rdma::RdmaConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 265
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:275,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:276,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:280,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:284,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:287,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:288,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:289,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 293
    functionName: brpc::rdma::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetEOF
    - Socket*::SetFailed
    - read
    - Socket*::fd
    - Socket*::MoreReadEvents
    - berror
    - Socket*::description
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:302,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:303,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:311,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:312,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:315,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:328,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:331,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:334,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 295
    functionDepth: 4
    functionLinenumber: 295
    functionLinenumberEnd: 338
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - TryReadOnTcpDuringRdmaEst
    - brpc::InputMessenger::OnNewMessages
    - bthread::butex_wake
    - SocketUniquePtr::release
    - bthread_start_background
    - RdmaEndpoint*::_read_butex::fetch_add
    - Socket*::MoreReadEvents
    - CHECK
    - Socket*::CreatedByConnect
    - LOG
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 350
    functionName: brpc::rdma::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:355,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:359,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:360,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:364,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 354
    functionDepth: 4
    functionLinenumber: 354
    functionLinenumberEnd: 380
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - load
    - read
    - CHECK
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:383,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 404
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - WaitEpollOut
    - write
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:407,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:409,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 414
    functionName: brpc::rdma::RdmaEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - _nevent::fetch_add
    - TryReadOnTcpDuringRdmaEst
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::TryReadOnTcp()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:417,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:419,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:421,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:444,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:445,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:454,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:457,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:468,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:475,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:482,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:485,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:507,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:513,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:515,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:516,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:535,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:546,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:547,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:550,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 94
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 557
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - SocketUniquePtr::_app_connect::get
    - RdmaEndpoint*::_window_size::store
    - GetRdmaLid
    - butil::HostToNet32
    - SocketUniquePtr::description
    - memcpy
    - GetRdmaGid
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:560,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:564,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:581,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:583,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:586,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:590,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:604,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:616,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:621,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:629,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:650,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:656,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:663,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:664,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:665,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:668,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:690,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:691,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:692,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:699,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:700,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:705,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:708,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 103
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 711
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - RdmaEndpoint*::_window_size::store
    - SocketUniquePtr::_read_buf::append
    - GetRdmaLid
    - SocketUniquePtr::description
    - GetRdmaGid
    - memcpy
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - RdmaEndpoint*::TryReadOnTcp
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - butil::NetToHost32
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:714,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:719,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 713
    functionDepth: 1
    functionLinenumber: 713
    functionLinenumberEnd: 720
    functionName: brpc::rdma::RdmaEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - load
    linkageType: ''
    returnType: bool
    signature: bool RdmaEndpoint::IsWritable() const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _ref_num
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:734,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:738,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:739,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:740,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:742,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:747,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:751,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 5
    argNames:
    - sglist
    - sge_index
    - to
    - max_sge
    - max_len
    argTypes:
    - ibv_sge*
    - size_t*
    - butil::IOBuf*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 730
    functionDepth: 1
    functionLinenumber: 730
    functionLinenumberEnd: 773
    functionName: brpc::rdma::RdmaIOBuf::cut_into_sglist_and_iobuf
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - get_first_data_meta
    - GetLKey
    - _ref_num
    - CHECK
    - fetch1
    - cutn
    - BAIDU_UNLIKELY
    - LOG
    - _ref_at
    - GetRegionId
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t cut_into_sglist_and_iobuf(ibv_sge* sglist, size_t* sge_index,\n
      \           butil::IOBuf* to, size_t max_sge, size_t max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:778,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:784,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:785,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:791,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:794,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:806,1
    - Dst: RdmaIOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:814,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:824,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:830,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:840,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:841,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:881,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 81
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 777
    functionDepth: 1
    functionLinenumber: 777
    functionLinenumberEnd: 905
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_post_send
    - berror
    - load
    - butil::HostToNet32
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - memset
    - CHECK
    - BAIDU_UNLIKELY
    - exchange
    - LOG
    - fetch_sub
    - RdmaIOBuf*::size
    - GetRdmaMaxSge
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 912
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 912
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - exchange
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:920,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:922,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 935
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - ibv_post_send
    - butil::HostToNet32
    - memset
    - berror
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:950,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:952,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:953,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:954,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:957,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:962,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:965,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:971,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:975,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:979,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:983,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:987,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:994,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 937
    functionDepth: 3
    functionLinenumber: 937
    functionLinenumberEnd: 999
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _read_buf::append
    - butil::subtle::MemoryBarrier
    - brpc::rdma::RdmaEndpoint::SendAck
    - fetch_add
    - WakeAsEpollOut
    - CHECK
    - clear
    - butil::NetToHost32
    - cutn
    - butil::IOBuf::IOBuf
    - brpc::rdma::RdmaEndpoint::PostRecv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::HandleCompletion(ibv_wc& wc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1003,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1007,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1018
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - ibv_post_recv
    - memset
    - berror
    - LOG
    - GetRegionId
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoPostRecv(void* block, size_t block_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1024,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1028,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1030,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1036,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1020
    functionDepth: 2
    functionLinenumber: 1020
    functionLinenumberEnd: 1047
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK
    - clear
    - static_cast<uint32_t>
    - PLOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1058,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1064,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1071,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1073,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1103,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 46
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1114
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1114
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvCreateCq
    - brpc::rdma::GetRdmaPd
    - IbvCreateCompChannel
    - butil::make_close_on_exec
    - PLOG
    - memset
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    - IbvCreateQp
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaMaxSge
    - butil::make_non_blocking
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1117,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1122,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1126,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1133,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1147,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1161,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1162,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1165,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1169,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1172,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1173,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1176,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1116
    functionDepth: 6
    functionLinenumber: 1116
    functionLinenumberEnd: 1182
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - ibv_req_notify_cq
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    - resize
    - BAIDU_SCOPED_LOCK
    - CHECK
    - AllocateQpCq
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1194,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1196,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1206,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1207,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1215,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1223,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1228,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 50
    argCount: 3
    argNames:
    - lid
    - gid
    - qp_num
    argTypes:
    - uint16_t
    - ibv_gid
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1184
    functionDepth: 3
    functionLinenumber: 1184
    functionLinenumberEnd: 1260
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvModifyQp
    - GetRdmaGidIndex
    - GetRdmaPortNum
    - BAIDU_UNLIKELY
    - PLOG
    - LOG
    - brpc::rdma::RdmaEndpoint::PostRecv
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(uint16_t lid, ibv_gid gid, uint32_t qp_num)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1275,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1293,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1294,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1303,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1317,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1320,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1323,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1330,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1338
      start: 1262
    functionDepth: 3
    functionLinenumber: 1262
    functionLinenumberEnd: 1338
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyCq
    - IbvModifyQp
    - BAIDU_SCOPED_LOCK
    - IbvDestroyCompChannel
    - _io_event::RemoveConsumer
    - IbvAckCqEvents
    - IbvDestroyQp
    - berror
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1358,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1362
      start: 1342
    functionDepth: 0
    functionLinenumber: 1342
    functionLinenumberEnd: 1362
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents()
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1374,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1377,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1380,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1391,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1395,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1409,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1420,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1423,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1424,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1425,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1440,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1441,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1460,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1461,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1463,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1464,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 67
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1364
    functionDepth: 3
    functionLinenumber: 1364
    functionLinenumberEnd: 1468
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - Socket*::MoreReadEvents
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - ibv_req_notify_cq
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::description
    - RdmaEndpoint*::_socket::id
    - PLOG
    - butil::gettimeofday_us
    - SocketUniquePtr::get
    - SocketUniquePtr::user
    - CHECK
    - berror
    - static_cast<RdmaEndpoint*>
    - static_cast<InputMessenger*>
    - ibv_poll_cq
    - Socket*::user
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::Failed
    - SocketUniquePtr::SetFailed
    - RdmaEndpoint*::HandleCompletion
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1488
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string RdmaEndpoint::GetStateStr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::GetStateStr
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1492,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1504
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1504
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1508,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1510,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1512,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1518,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1520,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1530,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1506
    functionDepth: 0
    functionLinenumber: 1506
    functionLinenumberEnd: 1534
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    - GetBlockSize
    - AllocateQpCq
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1538,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1536
    functionDepth: 3
    functionLinenumber: 1536
    functionLinenumberEnd: 1552
    functionName: brpc::rdma::RdmaEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::GlobalRelease()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1585,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1586,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1588,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1590,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1595,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1601,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1604,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1609,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1615,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1622,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1624,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 47
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1556
    functionDepth: 4
    functionLinenumber: 1556
    functionLinenumberEnd: 1629
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollCq
    - std::unordered_set::erase
    - FnArgs::FnArgs
    - SocketUniquePtr::get
    - auto::init_fn
    - auto::callback
    - bthread_yield
    - auto::load
    - std::unordered_set::emplace
    - compare_exchange_strong
    - auto::op_queue::Dequeue
    - bthread_start_background
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void(void)>
      callback,\n                                        std::function<void(void)>
      init_fn,\n                                        std::function<void(void)>
      release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1640,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1631
    functionDepth: 2
    functionLinenumber: 1631
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1646,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1650,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1652
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1656,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1660,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1662
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1662
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:122,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:123,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:124,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:126,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:128,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:129,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:130,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:131,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 134
    functionName: brpc::rdma::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet16
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:138,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:139,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:140,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:141,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:143,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:144,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:145,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:146,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 148
    functionName: brpc::rdma::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::NetToHost16
    - butil::NetToHost32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::rdma::RdmaResource::RdmaResource
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaResource::RdmaResource()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:158,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:166,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyCq
    - IbvDestroyQp
    linkageType: ''
    returnType: void
    signature: void RdmaResource::~RdmaResource()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 208
    functionName: brpc::rdma::RdmaEndpoint::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<butil::atomic<int> >
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::RdmaEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - Reset
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::~RdmaEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:216,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:221,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:222,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:223,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 234
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    - clear
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:239,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:247,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:255,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:257,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 236
    functionDepth: 4
    functionLinenumber: 236
    functionLinenumberEnd: 259
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - CHECK
    - brpc::SetTrackMeAddress
    - Socket*::id
    - LOG
    - done
    linkageType: ''
    returnType: void
    signature: "void RdmaConnect::StartConnect(const Socket* socket,\n                               void
      (*done)(int err, void* data),\n                               void* data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::rdma::RdmaConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 265
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:275,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:276,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:280,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:284,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:287,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:288,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:289,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 293
    functionName: brpc::rdma::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetEOF
    - Socket*::SetFailed
    - read
    - Socket*::fd
    - Socket*::MoreReadEvents
    - berror
    - Socket*::description
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:302,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:303,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:311,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:312,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:315,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:328,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:331,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:334,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 295
    functionDepth: 4
    functionLinenumber: 295
    functionLinenumberEnd: 338
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - TryReadOnTcpDuringRdmaEst
    - brpc::InputMessenger::OnNewMessages
    - bthread::butex_wake
    - SocketUniquePtr::release
    - bthread_start_background
    - RdmaEndpoint*::_read_butex::fetch_add
    - Socket*::MoreReadEvents
    - CHECK
    - Socket*::CreatedByConnect
    - LOG
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 350
    functionName: brpc::rdma::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:355,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:359,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:360,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:364,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 354
    functionDepth: 4
    functionLinenumber: 354
    functionLinenumberEnd: 380
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - load
    - read
    - CHECK
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:383,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 404
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - WaitEpollOut
    - write
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:407,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:409,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 414
    functionName: brpc::rdma::RdmaEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - _nevent::fetch_add
    - TryReadOnTcpDuringRdmaEst
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::TryReadOnTcp()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:417,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:419,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:421,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:444,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:445,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:454,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:457,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:468,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:475,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:482,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:485,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:507,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:513,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:515,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:516,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:535,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:546,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:547,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:550,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 94
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 557
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - SocketUniquePtr::_app_connect::get
    - RdmaEndpoint*::_window_size::store
    - GetRdmaLid
    - butil::HostToNet32
    - SocketUniquePtr::description
    - memcpy
    - GetRdmaGid
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:560,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:564,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:581,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:583,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:586,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:590,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:604,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:616,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:621,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:629,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:650,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:656,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:663,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:664,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:665,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:668,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:690,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:691,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:692,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:699,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:700,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:705,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:708,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 103
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 711
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - RdmaEndpoint*::_window_size::store
    - SocketUniquePtr::_read_buf::append
    - GetRdmaLid
    - SocketUniquePtr::description
    - GetRdmaGid
    - memcpy
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - RdmaEndpoint*::TryReadOnTcp
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - butil::NetToHost32
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:714,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:719,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 713
    functionDepth: 1
    functionLinenumber: 713
    functionLinenumberEnd: 720
    functionName: brpc::rdma::RdmaEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - load
    linkageType: ''
    returnType: bool
    signature: bool RdmaEndpoint::IsWritable() const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _ref_num
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:734,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:738,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:739,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:740,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:742,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:747,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:751,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 5
    argNames:
    - sglist
    - sge_index
    - to
    - max_sge
    - max_len
    argTypes:
    - ibv_sge*
    - size_t*
    - butil::IOBuf*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 730
    functionDepth: 1
    functionLinenumber: 730
    functionLinenumberEnd: 773
    functionName: brpc::rdma::RdmaIOBuf::cut_into_sglist_and_iobuf
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - get_first_data_meta
    - GetLKey
    - _ref_num
    - CHECK
    - fetch1
    - cutn
    - BAIDU_UNLIKELY
    - LOG
    - _ref_at
    - GetRegionId
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t cut_into_sglist_and_iobuf(ibv_sge* sglist, size_t* sge_index,\n
      \           butil::IOBuf* to, size_t max_sge, size_t max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:778,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:784,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:785,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:791,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:794,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:806,1
    - Dst: RdmaIOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:814,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:824,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:830,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:840,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:841,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:881,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 81
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 777
    functionDepth: 1
    functionLinenumber: 777
    functionLinenumberEnd: 905
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_post_send
    - berror
    - load
    - butil::HostToNet32
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - memset
    - CHECK
    - BAIDU_UNLIKELY
    - exchange
    - LOG
    - fetch_sub
    - RdmaIOBuf*::size
    - GetRdmaMaxSge
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 912
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 912
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - exchange
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:920,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:922,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 935
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - ibv_post_send
    - butil::HostToNet32
    - memset
    - berror
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:950,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:952,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:953,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:954,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:957,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:962,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:965,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:971,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:975,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:979,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:983,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:987,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:994,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 937
    functionDepth: 3
    functionLinenumber: 937
    functionLinenumberEnd: 999
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _read_buf::append
    - butil::subtle::MemoryBarrier
    - brpc::rdma::RdmaEndpoint::SendAck
    - fetch_add
    - WakeAsEpollOut
    - CHECK
    - clear
    - butil::NetToHost32
    - cutn
    - butil::IOBuf::IOBuf
    - brpc::rdma::RdmaEndpoint::PostRecv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::HandleCompletion(ibv_wc& wc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1003,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1007,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1018
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - ibv_post_recv
    - memset
    - berror
    - LOG
    - GetRegionId
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoPostRecv(void* block, size_t block_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1024,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1028,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1030,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1036,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1020
    functionDepth: 2
    functionLinenumber: 1020
    functionLinenumberEnd: 1047
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 5
    functionsReached:
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK
    - clear
    - static_cast<uint32_t>
    - PLOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1058,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1064,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1071,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1073,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1103,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 46
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1114
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1114
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvCreateCq
    - brpc::rdma::GetRdmaPd
    - IbvCreateCompChannel
    - butil::make_close_on_exec
    - PLOG
    - memset
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    - IbvCreateQp
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaMaxSge
    - butil::make_non_blocking
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1117,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1122,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1126,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1133,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1147,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1161,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1162,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1165,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1169,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1172,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1173,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1176,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1116
    functionDepth: 6
    functionLinenumber: 1116
    functionLinenumberEnd: 1182
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - ibv_req_notify_cq
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    - resize
    - BAIDU_SCOPED_LOCK
    - CHECK
    - AllocateQpCq
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1194,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1196,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1206,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1207,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1215,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1223,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1228,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 50
    argCount: 3
    argNames:
    - lid
    - gid
    - qp_num
    argTypes:
    - uint16_t
    - ibv_gid
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1184
    functionDepth: 3
    functionLinenumber: 1184
    functionLinenumberEnd: 1260
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvModifyQp
    - GetRdmaGidIndex
    - GetRdmaPortNum
    - BAIDU_UNLIKELY
    - PLOG
    - LOG
    - brpc::rdma::RdmaEndpoint::PostRecv
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(uint16_t lid, ibv_gid gid, uint32_t qp_num)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1275,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1293,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1294,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1303,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1317,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1320,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1323,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1330,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1338
      start: 1262
    functionDepth: 3
    functionLinenumber: 1262
    functionLinenumberEnd: 1338
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyCq
    - IbvModifyQp
    - BAIDU_SCOPED_LOCK
    - IbvDestroyCompChannel
    - _io_event::RemoveConsumer
    - IbvAckCqEvents
    - IbvDestroyQp
    - berror
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1358,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1362
      start: 1342
    functionDepth: 0
    functionLinenumber: 1342
    functionLinenumberEnd: 1362
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents()
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1374,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1377,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1380,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1391,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1395,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1409,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1420,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1423,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1424,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1425,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1440,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1441,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1460,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1461,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1463,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1464,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 67
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1364
    functionDepth: 3
    functionLinenumber: 1364
    functionLinenumberEnd: 1468
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - Socket*::MoreReadEvents
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - ibv_req_notify_cq
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::description
    - RdmaEndpoint*::_socket::id
    - PLOG
    - butil::gettimeofday_us
    - SocketUniquePtr::get
    - SocketUniquePtr::user
    - CHECK
    - berror
    - static_cast<RdmaEndpoint*>
    - static_cast<InputMessenger*>
    - ibv_poll_cq
    - Socket*::user
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::Failed
    - SocketUniquePtr::SetFailed
    - RdmaEndpoint*::HandleCompletion
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1488
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string RdmaEndpoint::GetStateStr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::GetStateStr
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1492,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1504
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1504
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1508,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1510,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1512,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1518,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1520,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1530,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1506
    functionDepth: 0
    functionLinenumber: 1506
    functionLinenumberEnd: 1534
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    - GetBlockSize
    - AllocateQpCq
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1538,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1536
    functionDepth: 3
    functionLinenumber: 1536
    functionLinenumberEnd: 1552
    functionName: brpc::rdma::RdmaEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::GlobalRelease()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1585,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1586,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1588,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1590,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1595,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1601,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1604,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1609,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1615,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1622,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1624,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 47
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1556
    functionDepth: 4
    functionLinenumber: 1556
    functionLinenumberEnd: 1629
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollCq
    - std::unordered_set::erase
    - FnArgs::FnArgs
    - SocketUniquePtr::get
    - auto::init_fn
    - auto::callback
    - bthread_yield
    - auto::load
    - std::unordered_set::emplace
    - compare_exchange_strong
    - auto::op_queue::Dequeue
    - bthread_start_background
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void(void)>
      callback,\n                                        std::function<void(void)>
      init_fn,\n                                        std::function<void(void)>
      release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1640,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1631
    functionDepth: 2
    functionLinenumber: 1631
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1646,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1650,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1652
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1656,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1660,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1662
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1662
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:122,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:123,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:124,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:126,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:128,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:129,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:130,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:131,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 134
    functionName: brpc::rdma::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet16
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:138,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:139,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:140,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:141,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:143,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:144,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:145,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:146,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 148
    functionName: brpc::rdma::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::NetToHost16
    - butil::NetToHost32
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: brpc::rdma::RdmaResource::RdmaResource
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaResource::RdmaResource()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:158,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:166,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyCq
    - IbvDestroyQp
    linkageType: ''
    returnType: void
    signature: void RdmaResource::~RdmaResource()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 208
    functionName: brpc::rdma::RdmaEndpoint::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_create_checked<butil::atomic<int> >
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::RdmaEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    - Reset
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::~RdmaEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:216,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:221,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:222,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:223,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 215
    functionDepth: 4
    functionLinenumber: 215
    functionLinenumberEnd: 234
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    - clear
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:239,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:241,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:247,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:255,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:257,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 236
    functionDepth: 4
    functionLinenumber: 236
    functionLinenumberEnd: 259
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - CHECK
    - brpc::SetTrackMeAddress
    - Socket*::id
    - LOG
    - done
    linkageType: ''
    returnType: void
    signature: "void RdmaConnect::StartConnect(const Socket* socket,\n                               void
      (*done)(int err, void* data),\n                               void* data)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: brpc::rdma::RdmaConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 265
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:271,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:275,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:276,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:277,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:280,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:284,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:287,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:288,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:289,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 293
    functionName: brpc::rdma::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetEOF
    - Socket*::SetFailed
    - read
    - Socket*::fd
    - Socket*::MoreReadEvents
    - berror
    - Socket*::description
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:302,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:303,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:311,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:312,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:315,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:328,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:331,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:334,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 37
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 295
    functionDepth: 4
    functionLinenumber: 295
    functionLinenumberEnd: 338
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - TryReadOnTcpDuringRdmaEst
    - brpc::InputMessenger::OnNewMessages
    - bthread::butex_wake
    - SocketUniquePtr::release
    - bthread_start_background
    - RdmaEndpoint*::_read_butex::fetch_add
    - Socket*::MoreReadEvents
    - CHECK
    - Socket*::CreatedByConnect
    - LOG
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 350
    functionName: brpc::rdma::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:355,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:359,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:360,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:364,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 354
    functionDepth: 4
    functionLinenumber: 354
    functionLinenumberEnd: 380
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - load
    - read
    - CHECK
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:383,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:388,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:391,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 404
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - WaitEpollOut
    - write
    - butil::milliseconds_from_now
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:407,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:409,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 414
    functionName: brpc::rdma::RdmaEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - _nevent::fetch_add
    - TryReadOnTcpDuringRdmaEst
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::TryReadOnTcp()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:417,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:419,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:421,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:429,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:444,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:445,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:454,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:456,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:457,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:468,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:469,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:474,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:475,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:482,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:484,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:485,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:486,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:507,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:513,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:515,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:516,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:520,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:535,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:537,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:539,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:546,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:547,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:550,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 94
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 557
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - SocketUniquePtr::_app_connect::get
    - RdmaEndpoint*::_window_size::store
    - GetRdmaLid
    - butil::HostToNet32
    - SocketUniquePtr::description
    - memcpy
    - GetRdmaGid
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:560,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:564,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:581,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:583,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:586,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:590,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:604,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:605,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:616,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:621,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: RdmaEndpoint*::_window_size::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:629,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: GetRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: GetRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:650,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:656,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:663,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:664,1
    - Dst: RdmaEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:665,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:667,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:668,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:669,1
    - Dst: RdmaEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:678,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:680,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:690,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:691,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:692,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:693,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:699,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:700,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:705,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,1
    - Dst: RdmaEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:708,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 103
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 711
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 711
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcmp
    - HelloMessage::Deserialize
    - HelloMessage::Serialize
    - RdmaEndpoint*::_window_size::store
    - SocketUniquePtr::_read_buf::append
    - GetRdmaLid
    - SocketUniquePtr::description
    - GetRdmaGid
    - memcpy
    - PLOG
    - LOG
    - LOG_IF
    - BAIDU_LIKELY
    - RdmaEndpoint*::TryReadOnTcp
    - berror
    - static_cast<RdmaEndpoint*>
    - HelloNegotiationValid
    - std::min
    - RdmaEndpoint*::WriteToFd
    - RdmaEndpoint*::AllocateResources
    - RdmaEndpoint*::ReadFromFd
    - butil::NetToHost32
    - RdmaEndpoint*::BringUpQp
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:714,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:719,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 713
    functionDepth: 1
    functionLinenumber: 713
    functionLinenumberEnd: 720
    functionName: brpc::rdma::RdmaEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - load
    linkageType: ''
    returnType: bool
    signature: bool RdmaEndpoint::IsWritable() const
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _ref_num
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:734,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:738,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:739,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:740,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:742,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:747,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:748,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:751,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 5
    argNames:
    - sglist
    - sge_index
    - to
    - max_sge
    - max_len
    argTypes:
    - ibv_sge*
    - size_t*
    - butil::IOBuf*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 730
    functionDepth: 1
    functionLinenumber: 730
    functionLinenumberEnd: 773
    functionName: brpc::rdma::RdmaIOBuf::cut_into_sglist_and_iobuf
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - get_first_data_meta
    - GetLKey
    - _ref_num
    - CHECK
    - fetch1
    - cutn
    - BAIDU_UNLIKELY
    - LOG
    - _ref_at
    - GetRegionId
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t cut_into_sglist_and_iobuf(ibv_sge* sglist, size_t* sge_index,\n
      \           butil::IOBuf* to, size_t max_sge, size_t max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:778,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:784,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:785,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:791,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:794,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:806,1
    - Dst: RdmaIOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:814,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:824,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:830,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:840,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:841,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:881,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:885,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 81
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 777
    functionDepth: 1
    functionLinenumber: 777
    functionLinenumberEnd: 905
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_post_send
    - berror
    - load
    - butil::HostToNet32
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - memset
    - CHECK
    - BAIDU_UNLIKELY
    - exchange
    - LOG
    - fetch_sub
    - RdmaIOBuf*::size
    - GetRdmaMaxSge
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 912
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 912
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - exchange
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:920,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:922,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:927,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:931,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 914
    functionDepth: 1
    functionLinenumber: 914
    functionLinenumberEnd: 935
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - ibv_post_send
    - butil::HostToNet32
    - memset
    - berror
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:950,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:952,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:953,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:954,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:957,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:962,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:965,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:971,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:975,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:979,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:983,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:987,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:994,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 937
    functionDepth: 3
    functionLinenumber: 937
    functionLinenumberEnd: 999
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - _read_buf::append
    - butil::subtle::MemoryBarrier
    - brpc::rdma::RdmaEndpoint::SendAck
    - fetch_add
    - WakeAsEpollOut
    - CHECK
    - clear
    - butil::NetToHost32
    - cutn
    - butil::IOBuf::IOBuf
    - brpc::rdma::RdmaEndpoint::PostRecv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaEndpoint::HandleCompletion(ibv_wc& wc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1003,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1007,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1012,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1018
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - ibv_post_recv
    - memset
    - berror
    - LOG
    - GetRegionId
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoPostRecv(void* block, size_t block_size)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1024,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1028,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1030,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1036,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1020
    functionDepth: 2
    functionLinenumber: 1020
    functionLinenumberEnd: 1047
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 7
    functionsReached:
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK
    - clear
    - static_cast<uint32_t>
    - PLOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1056,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1058,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1064,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1070,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1071,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1073,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1078,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1103,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 46
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1114
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1114
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvCreateCq
    - brpc::rdma::GetRdmaPd
    - IbvCreateCompChannel
    - butil::make_close_on_exec
    - PLOG
    - memset
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    - IbvCreateQp
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaMaxSge
    - butil::make_non_blocking
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1117,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1122,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1126,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1133,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1147,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1154,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1161,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1162,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1165,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1169,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1172,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1173,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1176,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1116
    functionDepth: 6
    functionLinenumber: 1116
    functionLinenumberEnd: 1182
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - ibv_req_notify_cq
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    - resize
    - BAIDU_SCOPED_LOCK
    - CHECK
    - AllocateQpCq
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1194,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1196,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1202,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1206,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1207,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1215,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1223,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1228,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1237,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1255,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 50
    argCount: 3
    argNames:
    - lid
    - gid
    - qp_num
    argTypes:
    - uint16_t
    - ibv_gid
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1260
      start: 1184
    functionDepth: 3
    functionLinenumber: 1184
    functionLinenumberEnd: 1260
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvModifyQp
    - GetRdmaGidIndex
    - GetRdmaPortNum
    - BAIDU_UNLIKELY
    - PLOG
    - LOG
    - brpc::rdma::RdmaEndpoint::PostRecv
    - berror
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(uint16_t lid, ibv_gid gid, uint32_t qp_num)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1275,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1288,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1293,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1294,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1303,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1307,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1317,1
    - Dst: _io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1320,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1323,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1330,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1338
      start: 1262
    functionDepth: 3
    functionLinenumber: 1262
    functionLinenumberEnd: 1338
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyCq
    - IbvModifyQp
    - BAIDU_SCOPED_LOCK
    - IbvDestroyCompChannel
    - _io_event::RemoveConsumer
    - IbvAckCqEvents
    - IbvDestroyQp
    - berror
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1358,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1362
      start: 1342
    functionDepth: 0
    functionLinenumber: 1342
    functionLinenumberEnd: 1362
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents()
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1365,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1371,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1374,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1377,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1379,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1380,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1381,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1391,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1394,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1395,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1396,1
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1409,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1412,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1414,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1420,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1423,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1424,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1425,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1440,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1441,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1443,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1452,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1460,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1461,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1462,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1463,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1464,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 67
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1364
    functionDepth: 3
    functionLinenumber: 1364
    functionLinenumberEnd: 1468
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - Socket*::MoreReadEvents
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - ibv_req_notify_cq
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::description
    - RdmaEndpoint*::_socket::id
    - PLOG
    - butil::gettimeofday_us
    - SocketUniquePtr::get
    - SocketUniquePtr::user
    - CHECK
    - berror
    - static_cast<RdmaEndpoint*>
    - static_cast<InputMessenger*>
    - ibv_poll_cq
    - Socket*::user
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::Failed
    - SocketUniquePtr::SetFailed
    - RdmaEndpoint*::HandleCompletion
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1488
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string RdmaEndpoint::GetStateStr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::GetStateStr
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1492,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1504
      start: 1490
    functionDepth: 1
    functionLinenumber: 1490
    functionLinenumberEnd: 1504
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os) const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1508,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1510,1
    - Dst: GetBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1512,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1518,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1520,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1530,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1506
    functionDepth: 0
    functionLinenumber: 1506
    functionLinenumberEnd: 1534
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    - GetBlockSize
    - AllocateQpCq
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1538,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1536
    functionDepth: 3
    functionLinenumber: 1536
    functionLinenumberEnd: 1552
    functionName: brpc::rdma::RdmaEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::GlobalRelease()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1585,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1586,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1588,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1590,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1595,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1601,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1604,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1609,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1615,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1622,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1624,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 47
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1556
    functionDepth: 4
    functionLinenumber: 1556
    functionLinenumberEnd: 1629
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollCq
    - std::unordered_set::erase
    - FnArgs::FnArgs
    - SocketUniquePtr::get
    - auto::init_fn
    - auto::callback
    - bthread_yield
    - auto::load
    - std::unordered_set::emplace
    - compare_exchange_strong
    - auto::op_queue::Dequeue
    - bthread_start_background
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - LOG
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void(void)>
      callback,\n                                        std::function<void(void)>
      init_fn,\n                                        std::function<void(void)>
      release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1640,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1631
    functionDepth: 2
    functionLinenumber: 1631
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1646,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1650,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1652
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1656,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1660,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1662
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1662
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - op_queue::Enqueue
    - fmix32
    - bthread_self_tag
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rc
    argTypes:
    - RdmaConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::rdma::RdmaConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(RdmaConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:74,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:260,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:262,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:267,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 295
    functionName: brpc::rdma::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 1
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - butil::atomic::atomic
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::rdma::RdmaEndpoint
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT RdmaEndpoint
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 287
    functionName: brpc::rdma::Poller
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Poller
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PollerGroup
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PollerGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rc
    argTypes:
    - RdmaConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::rdma::RdmaConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(RdmaConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:74,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:260,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:262,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:267,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 295
    functionName: brpc::rdma::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 2
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - butil::atomic::atomic
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::rdma::RdmaEndpoint
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT RdmaEndpoint
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 287
    functionName: brpc::rdma::Poller
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Poller
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PollerGroup
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PollerGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rc
    argTypes:
    - RdmaConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::rdma::RdmaConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(RdmaConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:74,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:260,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:262,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:267,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 295
    functionName: brpc::rdma::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 3
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - butil::atomic::atomic
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::rdma::RdmaEndpoint
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT RdmaEndpoint
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 287
    functionName: brpc::rdma::Poller
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Poller
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PollerGroup
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PollerGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rc
    argTypes:
    - RdmaConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: brpc::rdma::RdmaConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(RdmaConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:74,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:260,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:262,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:267,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 295
    functionName: brpc::rdma::RdmaEndpoint
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 4
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    - butil::atomic::atomic
    - DISALLOW_COPY_AND_ASSIGN
    - brpc::rdma::RdmaEndpoint
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT RdmaEndpoint
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 287
    functionName: brpc::rdma::Poller
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached:
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Poller
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT PollerGroup
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 290
    functionName: brpc::rdma::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PollerGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:126,1
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:127,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:132,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:135,1
    - Dst: begin
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:136,1
    - Dst: end
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:137,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:138,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:140,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:148,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:149,1
    - Dst: IbvDeallocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:156,1
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:161,1
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:166,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 169
    functionName: brpc::rdma::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    - end
    - IbvDeallocPd
    - usleep
    - BAIDU_SCOPED_LOCK
    - store
    - IbvDeregMr
    - clear
    - begin
    - size
    - IbvCloseDevice
    - brpc::rdma::RdmaEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExtendBlockPoolByUser
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 171
    functionDepth: 3
    functionLinenumber: 171
    functionLinenumberEnd: 174
    functionName: brpc::rdma::UserExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPoolByUser
    linkageType: ''
    returnType: void
    signature: "void * UserExtendBlockPool(void* region_base, size_t region_size,\n
      \                         int block_type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:179,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:181,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 186
    functionName: brpc::rdma::RdmaRegisterMemory
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - IbvRegMr
    - PLOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RdmaRegisterMemory(void* buf, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 188
    functionDepth: 5
    functionLinenumber: 188
    functionLinenumberEnd: 199
    functionName: brpc::rdma::BlockAllocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::rdma::AllocBlock
    linkageType: ''
    returnType: void
    signature: void * BlockAllocate(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::DeallocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:206,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 207
    functionName: brpc::rdma::BlockDeallocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::DeallocBlock
    linkageType: ''
    returnType: void
    signature: void BlockDeallocate(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: brpc::rdma::FindRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - IbvQueryPort
    linkageType: ''
    returnType: void
    signature: void FindRdmaLid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:223,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 247
    functionName: brpc::rdma::FindRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvQueryGid
    linkageType: ''
    returnType: bool
    signature: bool FindRdmaGid(ibv_context* context)
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: IbvEventTypeStr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:263,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:276,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:277,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:284,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:290,1
    - Dst: brpc::rdma::FindRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:294,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:295,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:304,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:311,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:315,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:316,1
    - Dst: brpc::rdma::GlobalDisableRdma
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:322,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:323,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:328,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:331,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 69
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 249
    functionDepth: 3
    functionLinenumber: 249
    functionLinenumberEnd: 335
    functionName: brpc::rdma::OnRdmaAsyncEvent
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::FindRdmaGid
    - IbvAckAsyncEvent
    - brpc::rdma::GlobalDisableRdma
    - IbvGetAsyncEvent
    - brpc::rdma::FindRdmaLid
    - Socket*::MoreReadEvents
    - IbvEventTypeStr
    - SocketUniquePtr::description
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnRdmaAsyncEvent(Socket* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - handle
    - ','
    - func
    - ','
    - symbol
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 343
    functionName: LoadSymbol
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LoadSymbol(handle, func, symbol)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:350,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:351,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:359,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:363,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:364,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:365,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:366,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:367,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:368,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:369,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:370,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:371,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:372,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:373,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:374,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:375,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:376,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:377,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:378,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:379,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:380,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:381,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:382,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:383,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:384,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:385,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:386,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:387,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 391
    functionName: brpc::rdma::ReadRdmaDynamicLib
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - dlopen
    - dlerror
    - LOG
    - LoadSymbol
    linkageType: ''
    returnType: int
    signature: int ReadRdmaDynamicLib()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:394,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 393
    functionDepth: 3
    functionLinenumber: 393
    functionLinenumberEnd: 396
    functionName: brpc::rdma::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - exit
    - brpc::rdma::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvOpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvContextDeleter
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvGetDeviceName
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:415,1
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:426,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:434,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:441,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:446,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 2
    argNames:
    - num_total
    - num_available_devices
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 407
    functionDepth: 1
    functionLinenumber: 407
    functionLinenumberEnd: 452
    functionName: brpc::rdma::OpenDevice
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvContextDeleter
    - IbvQueryPort
    - IbvGetDeviceName
    - IbvOpenDevice
    - std::unique_ptr::release
    - empty
    - LOG
    - PLOG
    - std::unique_ptr::get
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * OpenDevice(int num_total, int* num_available_devices)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:455,1
    - Dst: brpc::rdma::ReadRdmaDynamicLib
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:460,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:461,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:462,1
    - Dst: IbvForkInit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:468,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:469,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:470,1
    - Dst: IbvGetDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:476,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:477,1
    - Dst: brpc::rdma::OpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:483,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:486,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:487,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:489,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:490,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:497,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:498,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:499,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:502,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:504,1
    - Dst: IbvAllocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:507,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:509,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:510,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:513,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:515,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:516,1
    - Dst: butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:519,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:521,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:522,1
    - Dst: init
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:525,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:526,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:527,1
    - Dst: std::vector<ibv_mr*>::vector<ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:530,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:532,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:533,1
    - Dst: IbvQueryDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:537,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:538,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:539,1
    - Dst: brpc::rdma::InitBlockPool
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:550,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:551,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:552,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:556,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:558,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:561,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:565,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:566,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:567,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:568,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:571,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:572,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:573,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:580,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 94
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 454
    functionDepth: 6
    functionLinenumber: 454
    functionLinenumberEnd: 581
    functionName: brpc::rdma::GlobalRdmaInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvGetDeviceList
    - init
    - brpc::rdma::ExitWithError
    - brpc::rdma::ReadRdmaDynamicLib
    - IbvCreateCompChannel
    - butil::Mutex::Mutex
    - std::vector<ibv_mr*>::vector<ibv_mr*>
    - brpc::rdma::OpenDevice
    - store
    - brpc::rdma::RdmaEndpoint::GlobalInitialize
    - butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - IbvQueryDevice
    - atexit
    - Socket::Create
    - IbvAllocPd
    - IbvForkInit
    - brpc::rdma::FindRdmaGid
    - brpc::rdma::InitBlockPool
    - butil::make_close_on_exec
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:588,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:589,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 585
    functionDepth: 1
    functionLinenumber: 585
    functionLinenumberEnd: 591
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:594,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:596,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:600,1
    - Dst: insert
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:601,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:602,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:603,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:608,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 612
    functionName: brpc::rdma::RegisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - IbvRegMr
    - IbvDeregMr
    - insert
    - size
    - PLOG
    - LOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RegisterMemoryForRdma(void* buf, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:617,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:618,1
    - Dst: erase
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:621,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:625,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:626,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:629,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 631
    functionName: brpc::rdma::DeregisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - erase
    - IbvDeregMr
    - seek
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeregisterMemoryForRdma(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 635
    functionName: brpc::rdma::GetRdmaMaxSge
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaMaxSge()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 647
    functionName: brpc::rdma::GetRdmaCompVector
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaCompVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 651
    functionName: brpc::rdma::GetRdmaContext
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * GetRdmaContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 655
    functionName: brpc::rdma::GetRdmaPd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_pd
    signature: ibv_pd * GetRdmaPd()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:658,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 664
    functionName: brpc::rdma::GetLKey
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetLKey(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 668
    functionName: brpc::rdma::GetRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: ibv_gid
    signature: ibv_gid GetRdmaGid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 672
    functionName: brpc::rdma::GetRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t GetRdmaLid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 676
    functionName: brpc::rdma::GetRdmaGidIndex
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaGidIndex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 680
    functionName: brpc::rdma::GetRdmaPortNum
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaPortNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 684
    functionName: brpc::rdma::IsRdmaAvailable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsRdmaAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 690
    functionName: brpc::rdma::GlobalDisableRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalDisableRdma()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:693,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 699
    functionName: brpc::rdma::SupportedByRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByRdma(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 701
    functionDepth: 5
    functionLinenumber: 701
    functionLinenumberEnd: 710
    functionName: brpc::rdma::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeInitialize
    linkageType: ''
    returnType: bool
    signature: "bool InitPollingModeWithTag(bthread_tag_t tag,\n                            std::function<void(void)>
      callback,\n                            std::function<void(void)> init_fn,\n
      \                           std::function<void(void)> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 712
    functionDepth: 3
    functionLinenumber: 712
    functionLinenumberEnd: 714
    functionName: brpc::rdma::ReleasePollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void ReleasePollingModeWithTag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:126,1
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:127,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:132,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:135,1
    - Dst: begin
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:136,1
    - Dst: end
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:137,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:138,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:140,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:148,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:149,1
    - Dst: IbvDeallocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:156,1
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:161,1
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:166,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 169
    functionName: brpc::rdma::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - IbvFreeDeviceList
    - end
    - IbvDeallocPd
    - usleep
    - BAIDU_SCOPED_LOCK
    - store
    - IbvDeregMr
    - clear
    - begin
    - size
    - IbvCloseDevice
    - brpc::rdma::RdmaEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExtendBlockPoolByUser
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 171
    functionDepth: 3
    functionLinenumber: 171
    functionLinenumberEnd: 174
    functionName: brpc::rdma::UserExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPoolByUser
    linkageType: ''
    returnType: void
    signature: "void * UserExtendBlockPool(void* region_base, size_t region_size,\n
      \                         int block_type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:179,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:181,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 186
    functionName: brpc::rdma::RdmaRegisterMemory
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - IbvRegMr
    - PLOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RdmaRegisterMemory(void* buf, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 188
    functionDepth: 5
    functionLinenumber: 188
    functionLinenumberEnd: 199
    functionName: brpc::rdma::BlockAllocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::rdma::AllocBlock
    linkageType: ''
    returnType: void
    signature: void * BlockAllocate(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::DeallocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:206,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 207
    functionName: brpc::rdma::BlockDeallocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::DeallocBlock
    linkageType: ''
    returnType: void
    signature: void BlockDeallocate(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: brpc::rdma::FindRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - IbvQueryPort
    linkageType: ''
    returnType: void
    signature: void FindRdmaLid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:223,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 247
    functionName: brpc::rdma::FindRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - IbvQueryGid
    linkageType: ''
    returnType: bool
    signature: bool FindRdmaGid(ibv_context* context)
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: IbvEventTypeStr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:263,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:276,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:277,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:284,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:290,1
    - Dst: brpc::rdma::FindRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:294,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:295,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:304,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:311,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:315,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:316,1
    - Dst: brpc::rdma::GlobalDisableRdma
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:322,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:323,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:328,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:331,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 69
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 249
    functionDepth: 3
    functionLinenumber: 249
    functionLinenumberEnd: 335
    functionName: brpc::rdma::OnRdmaAsyncEvent
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::FindRdmaGid
    - IbvAckAsyncEvent
    - brpc::rdma::GlobalDisableRdma
    - IbvGetAsyncEvent
    - brpc::rdma::FindRdmaLid
    - Socket*::MoreReadEvents
    - IbvEventTypeStr
    - SocketUniquePtr::description
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnRdmaAsyncEvent(Socket* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - handle
    - ','
    - func
    - ','
    - symbol
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 343
    functionName: LoadSymbol
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LoadSymbol(handle, func, symbol)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:350,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:351,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:359,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:363,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:364,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:365,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:366,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:367,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:368,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:369,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:370,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:371,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:372,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:373,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:374,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:375,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:376,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:377,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:378,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:379,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:380,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:381,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:382,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:383,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:384,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:385,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:386,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:387,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 391
    functionName: brpc::rdma::ReadRdmaDynamicLib
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - dlopen
    - dlerror
    - LOG
    - LoadSymbol
    linkageType: ''
    returnType: int
    signature: int ReadRdmaDynamicLib()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:394,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 393
    functionDepth: 3
    functionLinenumber: 393
    functionLinenumberEnd: 396
    functionName: brpc::rdma::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - exit
    - brpc::rdma::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvOpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvContextDeleter
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvGetDeviceName
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:415,1
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:426,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:434,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:441,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:446,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 2
    argNames:
    - num_total
    - num_available_devices
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 407
    functionDepth: 1
    functionLinenumber: 407
    functionLinenumberEnd: 452
    functionName: brpc::rdma::OpenDevice
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - IbvContextDeleter
    - IbvQueryPort
    - IbvGetDeviceName
    - IbvOpenDevice
    - std::unique_ptr::release
    - empty
    - LOG
    - PLOG
    - std::unique_ptr::get
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * OpenDevice(int num_total, int* num_available_devices)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:455,1
    - Dst: brpc::rdma::ReadRdmaDynamicLib
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:460,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:461,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:462,1
    - Dst: IbvForkInit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:468,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:469,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:470,1
    - Dst: IbvGetDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:476,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:477,1
    - Dst: brpc::rdma::OpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:483,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:486,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:487,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:489,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:490,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:497,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:498,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:499,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:502,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:504,1
    - Dst: IbvAllocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:507,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:509,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:510,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:513,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:515,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:516,1
    - Dst: butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:519,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:521,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:522,1
    - Dst: init
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:525,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:526,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:527,1
    - Dst: std::vector<ibv_mr*>::vector<ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:530,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:532,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:533,1
    - Dst: IbvQueryDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:537,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:538,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:539,1
    - Dst: brpc::rdma::InitBlockPool
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:550,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:551,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:552,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:556,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:558,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:561,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:565,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:566,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:567,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:568,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:571,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:572,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:573,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:580,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 94
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 454
    functionDepth: 6
    functionLinenumber: 454
    functionLinenumberEnd: 581
    functionName: brpc::rdma::GlobalRdmaInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvGetDeviceList
    - init
    - brpc::rdma::ExitWithError
    - brpc::rdma::ReadRdmaDynamicLib
    - IbvCreateCompChannel
    - butil::Mutex::Mutex
    - std::vector<ibv_mr*>::vector<ibv_mr*>
    - brpc::rdma::OpenDevice
    - store
    - brpc::rdma::RdmaEndpoint::GlobalInitialize
    - butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - IbvQueryDevice
    - atexit
    - Socket::Create
    - IbvAllocPd
    - IbvForkInit
    - brpc::rdma::FindRdmaGid
    - brpc::rdma::InitBlockPool
    - butil::make_close_on_exec
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:588,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:589,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 585
    functionDepth: 1
    functionLinenumber: 585
    functionLinenumberEnd: 591
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:594,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:596,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:600,1
    - Dst: insert
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:601,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:602,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:603,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:608,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 612
    functionName: brpc::rdma::RegisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - IbvRegMr
    - IbvDeregMr
    - insert
    - size
    - PLOG
    - LOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RegisterMemoryForRdma(void* buf, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:617,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:618,1
    - Dst: erase
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:621,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:625,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:626,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:629,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 631
    functionName: brpc::rdma::DeregisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - erase
    - IbvDeregMr
    - seek
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeregisterMemoryForRdma(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 635
    functionName: brpc::rdma::GetRdmaMaxSge
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaMaxSge()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 647
    functionName: brpc::rdma::GetRdmaCompVector
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaCompVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 651
    functionName: brpc::rdma::GetRdmaContext
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * GetRdmaContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 655
    functionName: brpc::rdma::GetRdmaPd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_pd
    signature: ibv_pd * GetRdmaPd()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:658,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 664
    functionName: brpc::rdma::GetLKey
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetLKey(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 668
    functionName: brpc::rdma::GetRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: ibv_gid
    signature: ibv_gid GetRdmaGid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 672
    functionName: brpc::rdma::GetRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t GetRdmaLid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 676
    functionName: brpc::rdma::GetRdmaGidIndex
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaGidIndex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 680
    functionName: brpc::rdma::GetRdmaPortNum
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaPortNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 684
    functionName: brpc::rdma::IsRdmaAvailable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsRdmaAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 690
    functionName: brpc::rdma::GlobalDisableRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalDisableRdma()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:693,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 699
    functionName: brpc::rdma::SupportedByRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByRdma(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 701
    functionDepth: 5
    functionLinenumber: 701
    functionLinenumberEnd: 710
    functionName: brpc::rdma::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeInitialize
    linkageType: ''
    returnType: bool
    signature: "bool InitPollingModeWithTag(bthread_tag_t tag,\n                            std::function<void(void)>
      callback,\n                            std::function<void(void)> init_fn,\n
      \                           std::function<void(void)> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 712
    functionDepth: 3
    functionLinenumber: 712
    functionLinenumberEnd: 714
    functionName: brpc::rdma::ReleasePollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void ReleasePollingModeWithTag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:126,1
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:127,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:132,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:135,1
    - Dst: begin
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:136,1
    - Dst: end
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:137,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:138,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:140,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:148,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:149,1
    - Dst: IbvDeallocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:156,1
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:161,1
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:166,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 169
    functionName: brpc::rdma::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - IbvFreeDeviceList
    - end
    - IbvDeallocPd
    - usleep
    - BAIDU_SCOPED_LOCK
    - store
    - IbvDeregMr
    - clear
    - begin
    - size
    - IbvCloseDevice
    - brpc::rdma::RdmaEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExtendBlockPoolByUser
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 171
    functionDepth: 3
    functionLinenumber: 171
    functionLinenumberEnd: 174
    functionName: brpc::rdma::UserExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPoolByUser
    linkageType: ''
    returnType: void
    signature: "void * UserExtendBlockPool(void* region_base, size_t region_size,\n
      \                         int block_type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:179,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:181,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 186
    functionName: brpc::rdma::RdmaRegisterMemory
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - IbvRegMr
    - PLOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RdmaRegisterMemory(void* buf, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 188
    functionDepth: 5
    functionLinenumber: 188
    functionLinenumberEnd: 199
    functionName: brpc::rdma::BlockAllocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::rdma::AllocBlock
    linkageType: ''
    returnType: void
    signature: void * BlockAllocate(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::DeallocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:206,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 207
    functionName: brpc::rdma::BlockDeallocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::DeallocBlock
    linkageType: ''
    returnType: void
    signature: void BlockDeallocate(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: brpc::rdma::FindRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - IbvQueryPort
    linkageType: ''
    returnType: void
    signature: void FindRdmaLid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:223,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 247
    functionName: brpc::rdma::FindRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - IbvQueryGid
    linkageType: ''
    returnType: bool
    signature: bool FindRdmaGid(ibv_context* context)
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: IbvEventTypeStr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:263,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:276,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:277,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:284,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:290,1
    - Dst: brpc::rdma::FindRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:294,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:295,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:304,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:311,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:315,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:316,1
    - Dst: brpc::rdma::GlobalDisableRdma
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:322,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:323,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:328,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:331,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 69
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 249
    functionDepth: 3
    functionLinenumber: 249
    functionLinenumberEnd: 335
    functionName: brpc::rdma::OnRdmaAsyncEvent
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::FindRdmaGid
    - IbvAckAsyncEvent
    - brpc::rdma::GlobalDisableRdma
    - IbvGetAsyncEvent
    - brpc::rdma::FindRdmaLid
    - Socket*::MoreReadEvents
    - IbvEventTypeStr
    - SocketUniquePtr::description
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnRdmaAsyncEvent(Socket* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - handle
    - ','
    - func
    - ','
    - symbol
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 343
    functionName: LoadSymbol
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LoadSymbol(handle, func, symbol)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:350,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:351,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:359,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:363,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:364,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:365,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:366,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:367,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:368,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:369,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:370,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:371,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:372,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:373,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:374,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:375,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:376,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:377,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:378,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:379,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:380,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:381,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:382,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:383,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:384,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:385,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:386,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:387,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 391
    functionName: brpc::rdma::ReadRdmaDynamicLib
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - dlopen
    - dlerror
    - LOG
    - LoadSymbol
    linkageType: ''
    returnType: int
    signature: int ReadRdmaDynamicLib()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:394,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 393
    functionDepth: 3
    functionLinenumber: 393
    functionLinenumberEnd: 396
    functionName: brpc::rdma::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - brpc::rdma::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvOpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvContextDeleter
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvGetDeviceName
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:415,1
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:426,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:434,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:441,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:446,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 2
    argNames:
    - num_total
    - num_available_devices
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 407
    functionDepth: 1
    functionLinenumber: 407
    functionLinenumberEnd: 452
    functionName: brpc::rdma::OpenDevice
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - IbvContextDeleter
    - IbvQueryPort
    - IbvGetDeviceName
    - IbvOpenDevice
    - std::unique_ptr::release
    - empty
    - LOG
    - PLOG
    - std::unique_ptr::get
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * OpenDevice(int num_total, int* num_available_devices)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:455,1
    - Dst: brpc::rdma::ReadRdmaDynamicLib
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:460,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:461,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:462,1
    - Dst: IbvForkInit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:468,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:469,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:470,1
    - Dst: IbvGetDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:476,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:477,1
    - Dst: brpc::rdma::OpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:483,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:486,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:487,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:489,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:490,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:497,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:498,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:499,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:502,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:504,1
    - Dst: IbvAllocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:507,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:509,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:510,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:513,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:515,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:516,1
    - Dst: butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:519,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:521,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:522,1
    - Dst: init
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:525,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:526,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:527,1
    - Dst: std::vector<ibv_mr*>::vector<ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:530,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:532,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:533,1
    - Dst: IbvQueryDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:537,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:538,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:539,1
    - Dst: brpc::rdma::InitBlockPool
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:550,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:551,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:552,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:556,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:558,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:561,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:565,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:566,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:567,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:568,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:571,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:572,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:573,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:580,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 94
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 454
    functionDepth: 6
    functionLinenumber: 454
    functionLinenumberEnd: 581
    functionName: brpc::rdma::GlobalRdmaInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvGetDeviceList
    - init
    - brpc::rdma::ExitWithError
    - brpc::rdma::ReadRdmaDynamicLib
    - IbvCreateCompChannel
    - butil::Mutex::Mutex
    - std::vector<ibv_mr*>::vector<ibv_mr*>
    - brpc::rdma::OpenDevice
    - store
    - brpc::rdma::RdmaEndpoint::GlobalInitialize
    - butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - IbvQueryDevice
    - atexit
    - Socket::Create
    - IbvAllocPd
    - IbvForkInit
    - brpc::rdma::FindRdmaGid
    - brpc::rdma::InitBlockPool
    - butil::make_close_on_exec
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:588,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:589,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 585
    functionDepth: 1
    functionLinenumber: 585
    functionLinenumberEnd: 591
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:594,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:596,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:600,1
    - Dst: insert
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:601,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:602,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:603,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:608,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 612
    functionName: brpc::rdma::RegisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - IbvRegMr
    - IbvDeregMr
    - insert
    - size
    - PLOG
    - LOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RegisterMemoryForRdma(void* buf, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:617,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:618,1
    - Dst: erase
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:621,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:625,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:626,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:629,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 631
    functionName: brpc::rdma::DeregisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - erase
    - IbvDeregMr
    - seek
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeregisterMemoryForRdma(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 635
    functionName: brpc::rdma::GetRdmaMaxSge
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaMaxSge()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 647
    functionName: brpc::rdma::GetRdmaCompVector
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaCompVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 651
    functionName: brpc::rdma::GetRdmaContext
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * GetRdmaContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 655
    functionName: brpc::rdma::GetRdmaPd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_pd
    signature: ibv_pd * GetRdmaPd()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:658,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 664
    functionName: brpc::rdma::GetLKey
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetLKey(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 668
    functionName: brpc::rdma::GetRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: ibv_gid
    signature: ibv_gid GetRdmaGid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 672
    functionName: brpc::rdma::GetRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t GetRdmaLid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 676
    functionName: brpc::rdma::GetRdmaGidIndex
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaGidIndex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 680
    functionName: brpc::rdma::GetRdmaPortNum
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaPortNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 684
    functionName: brpc::rdma::IsRdmaAvailable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsRdmaAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 690
    functionName: brpc::rdma::GlobalDisableRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached:
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalDisableRdma()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:693,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 699
    functionName: brpc::rdma::SupportedByRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByRdma(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 701
    functionDepth: 5
    functionLinenumber: 701
    functionLinenumberEnd: 710
    functionName: brpc::rdma::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeInitialize
    linkageType: ''
    returnType: bool
    signature: "bool InitPollingModeWithTag(bthread_tag_t tag,\n                            std::function<void(void)>
      callback,\n                            std::function<void(void)> init_fn,\n
      \                           std::function<void(void)> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 712
    functionDepth: 3
    functionLinenumber: 712
    functionLinenumberEnd: 714
    functionName: brpc::rdma::ReleasePollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void ReleasePollingModeWithTag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - device_list
    argTypes:
    - ibv_device**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    functionName: operator()(ibv_device** device_list)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvFreeDeviceList
    linkageType: ''
    returnType: void
    signature: void operator()(ibv_device** device_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator() (ibv_context* context)
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvCloseDevice
    linkageType: ''
    returnType: void
    signature: void operator() (ibv_context* context)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:126,1
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:127,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:132,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:135,1
    - Dst: begin
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:136,1
    - Dst: end
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:137,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:138,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:140,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:148,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:149,1
    - Dst: IbvDeallocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:156,1
    - Dst: IbvCloseDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:161,1
    - Dst: IbvFreeDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:166,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 169
    functionName: brpc::rdma::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached:
    - IbvFreeDeviceList
    - end
    - IbvDeallocPd
    - usleep
    - BAIDU_SCOPED_LOCK
    - store
    - IbvDeregMr
    - clear
    - begin
    - size
    - IbvCloseDevice
    - brpc::rdma::RdmaEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExtendBlockPoolByUser
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 171
    functionDepth: 3
    functionLinenumber: 171
    functionLinenumberEnd: 174
    functionName: brpc::rdma::UserExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPoolByUser
    linkageType: ''
    returnType: void
    signature: "void * UserExtendBlockPool(void* region_base, size_t region_size,\n
      \                         int block_type)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:179,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:181,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 186
    functionName: brpc::rdma::RdmaRegisterMemory
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - IbvRegMr
    - PLOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RdmaRegisterMemory(void* buf, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::AllocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 188
    functionDepth: 5
    functionLinenumber: 188
    functionLinenumberEnd: 199
    functionName: brpc::rdma::BlockAllocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::rdma::AllocBlock
    linkageType: ''
    returnType: void
    signature: void * BlockAllocate(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::DeallocBlock
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:206,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 207
    functionName: brpc::rdma::BlockDeallocate
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::DeallocBlock
    linkageType: ''
    returnType: void
    signature: void BlockDeallocate(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:215,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: brpc::rdma::FindRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - IbvQueryPort
    linkageType: ''
    returnType: void
    signature: void FindRdmaLid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvQueryGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:223,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - context
    argTypes:
    - ibv_context*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 247
    functionName: brpc::rdma::FindRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 6
    functionsReached:
    - IbvQueryGid
    linkageType: ''
    returnType: bool
    signature: bool FindRdmaGid(ibv_context* context)
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: IbvEventTypeStr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:256,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:263,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:265,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:276,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:277,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:284,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:290,1
    - Dst: brpc::rdma::FindRdmaLid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:294,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:295,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:304,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:311,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:315,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:316,1
    - Dst: brpc::rdma::GlobalDisableRdma
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:322,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:323,1
    - Dst: IbvAckAsyncEvent
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:328,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:331,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 69
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 249
    functionDepth: 3
    functionLinenumber: 249
    functionLinenumberEnd: 335
    functionName: brpc::rdma::OnRdmaAsyncEvent
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::FindRdmaGid
    - IbvAckAsyncEvent
    - brpc::rdma::GlobalDisableRdma
    - IbvGetAsyncEvent
    - brpc::rdma::FindRdmaLid
    - Socket*::MoreReadEvents
    - IbvEventTypeStr
    - SocketUniquePtr::description
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnRdmaAsyncEvent(Socket* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - handle
    - ','
    - func
    - ','
    - symbol
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 343
    functionName: LoadSymbol
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LoadSymbol(handle, func, symbol)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:350,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:351,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:356,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:359,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:363,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:364,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:365,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:366,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:367,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:368,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:369,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:370,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:371,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:372,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:373,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:374,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:375,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:376,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:377,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:378,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:379,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:380,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:381,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:382,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:383,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:384,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:385,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:386,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:387,1
    - Dst: LoadSymbol
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 391
    functionName: brpc::rdma::ReadRdmaDynamicLib
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached:
    - dlopen
    - dlerror
    - LOG
    - LoadSymbol
    linkageType: ''
    returnType: int
    signature: int ReadRdmaDynamicLib()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GlobalRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:394,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 393
    functionDepth: 3
    functionLinenumber: 393
    functionLinenumberEnd: 396
    functionName: brpc::rdma::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached:
    - exit
    - brpc::rdma::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvOpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvContextDeleter
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:412,1
    - Dst: IbvGetDeviceName
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:415,1
    - Dst: IbvQueryPort
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:419,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:426,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:434,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:441,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:446,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 2
    argNames:
    - num_total
    - num_available_devices
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 407
    functionDepth: 1
    functionLinenumber: 407
    functionLinenumberEnd: 452
    functionName: brpc::rdma::OpenDevice
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 3
    functionsReached:
    - IbvContextDeleter
    - IbvQueryPort
    - IbvGetDeviceName
    - IbvOpenDevice
    - std::unique_ptr::release
    - empty
    - LOG
    - PLOG
    - std::unique_ptr::get
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * OpenDevice(int num_total, int* num_available_devices)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:455,1
    - Dst: brpc::rdma::ReadRdmaDynamicLib
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:460,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:461,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:462,1
    - Dst: IbvForkInit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:468,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:469,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:470,1
    - Dst: IbvGetDeviceList
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:476,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:477,1
    - Dst: brpc::rdma::OpenDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:483,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:486,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:487,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:489,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:490,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:497,1
    - Dst: brpc::rdma::FindRdmaGid
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:498,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:499,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:502,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:504,1
    - Dst: IbvAllocPd
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:507,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:509,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:510,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:513,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:515,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:516,1
    - Dst: butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:519,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:521,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:522,1
    - Dst: init
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:525,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:526,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:527,1
    - Dst: std::vector<ibv_mr*>::vector<ibv_mr*>
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:530,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:532,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:533,1
    - Dst: IbvQueryDevice
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:537,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:538,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:539,1
    - Dst: brpc::rdma::InitBlockPool
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:550,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:551,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:552,1
    - Dst: brpc::rdma::RdmaEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:555,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:556,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:558,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:561,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:565,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:566,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:567,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:568,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:571,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:572,1
    - Dst: brpc::rdma::ExitWithError
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:573,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:580,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 94
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 454
    functionDepth: 6
    functionLinenumber: 454
    functionLinenumberEnd: 581
    functionName: brpc::rdma::GlobalRdmaInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - IbvGetDeviceList
    - init
    - brpc::rdma::ExitWithError
    - brpc::rdma::ReadRdmaDynamicLib
    - IbvCreateCompChannel
    - butil::Mutex::Mutex
    - std::vector<ibv_mr*>::vector<ibv_mr*>
    - brpc::rdma::OpenDevice
    - store
    - brpc::rdma::RdmaEndpoint::GlobalInitialize
    - butil::FlatMap<void*, ibv_mr*>::FlatMap<void*, ibv_mr*>
    - BAIDU_UNLIKELY
    - size
    - PLOG
    - LOG
    - IbvQueryDevice
    - atexit
    - Socket::Create
    - IbvAllocPd
    - IbvForkInit
    - brpc::rdma::FindRdmaGid
    - brpc::rdma::InitBlockPool
    - butil::make_close_on_exec
    - butil::make_non_blocking
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:586,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:588,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:589,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 585
    functionDepth: 1
    functionLinenumber: 585
    functionLinenumberEnd: 591
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IbvRegMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:594,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:596,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:600,1
    - Dst: insert
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:601,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:602,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:603,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:608,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 612
    functionName: brpc::rdma::RegisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - IbvRegMr
    - IbvDeregMr
    - insert
    - size
    - PLOG
    - LOG
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t RegisterMemoryForRdma(void* buf, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:617,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:618,1
    - Dst: erase
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:621,1
    - Dst: IbvDeregMr
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:625,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:626,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:629,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 631
    functionName: brpc::rdma::DeregisterMemoryForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - erase
    - IbvDeregMr
    - seek
    - PLOG
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeregisterMemoryForRdma(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 635
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 635
    functionName: brpc::rdma::GetRdmaMaxSge
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaMaxSge()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 647
    functionName: brpc::rdma::GetRdmaCompVector
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetRdmaCompVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 651
    functionName: brpc::rdma::GetRdmaContext
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_context
    signature: ibv_context * GetRdmaContext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 655
    functionName: brpc::rdma::GetRdmaPd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: ibv_pd
    signature: ibv_pd * GetRdmaPd()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:658,1
    - Dst: seek
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:659,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 664
    functionName: brpc::rdma::GetLKey
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - seek
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetLKey(void* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 668
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 668
    functionName: brpc::rdma::GetRdmaGid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: ibv_gid
    signature: ibv_gid GetRdmaGid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 672
    functionName: brpc::rdma::GetRdmaLid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t GetRdmaLid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 676
    functionName: brpc::rdma::GetRdmaGidIndex
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaGidIndex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 680
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 680
    functionName: brpc::rdma::GetRdmaPortNum
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t GetRdmaPortNum()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:683,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 684
    functionName: brpc::rdma::IsRdmaAvailable
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsRdmaAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 690
    functionName: brpc::rdma::GlobalDisableRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - exchange
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalDisableRdma()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:693,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 699
    functionName: brpc::rdma::SupportedByRdma
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByRdma(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void(void)>
    - std::function<void(void)>
    - std::function<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 701
    functionDepth: 5
    functionLinenumber: 701
    functionLinenumberEnd: 710
    functionName: brpc::rdma::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeInitialize
    linkageType: ''
    returnType: bool
    signature: "bool InitPollingModeWithTag(bthread_tag_t tag,\n                            std::function<void(void)>
      callback,\n                            std::function<void(void)> init_fn,\n
      \                           std::function<void(void)> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 712
    functionDepth: 3
    functionLinenumber: 712
    functionLinenumberEnd: 714
    functionName: brpc::rdma::ReleasePollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::RdmaEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void ReleasePollingModeWithTag(bthread_tag_t tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:727,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:729,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:727,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:729,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:727,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:729,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:727,1
    - Dst: exit
      Src: /src/brpc/src/brpc/rdma/rdma_helper.cpp:729,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: brpc::rdma::GlobalRdmaInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_helper.cpp
    functionUses: 4
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalRdmaInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtExitManager
      Src: /src/brpc/src/butil/at_exit.h:34,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/at_exit.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 65
    functionName: butil::AtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.h
    functionUses: 1
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - butil::AtExitManager
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT AtExitManager
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: butil::ShadowingAtExitManager::ShadowingAtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ShadowingAtExitManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtExitManager
      Src: /src/brpc/src/butil/at_exit.h:34,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/at_exit.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 65
    functionName: butil::AtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.h
    functionUses: 2
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - butil::AtExitManager
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT AtExitManager
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: butil::ShadowingAtExitManager::ShadowingAtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ShadowingAtExitManager()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/butil/comlog_sink.h:150,1
    - Dst: com_openlog_r
      Src: /src/brpc/src/butil/comlog_sink.h:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 153
    functionName: logging::ComlogInitializer::ComlogInitializer
    functionSourceFile: /src/brpc/src/butil/comlog_sink.h
    functionUses: 6
    functionsReached:
    - com_logstatus
    - com_openlog_r
    linkageType: ''
    returnType: void
    signature: void ComlogInitializer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/butil/comlog_sink.h:155,1
    - Dst: com_closelog_r
      Src: /src/brpc/src/butil/comlog_sink.h:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: ~ComlogInitializer()
    functionSourceFile: /src/brpc/src/butil/comlog_sink.h
    functionUses: 0
    functionsReached:
    - com_logstatus
    - com_closelog_r
    linkageType: ''
    returnType: void
    signature: void ~ComlogInitializer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/butil/comlog_sink.h:150,1
    - Dst: com_openlog_r
      Src: /src/brpc/src/butil/comlog_sink.h:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 153
    functionName: logging::ComlogInitializer::ComlogInitializer
    functionSourceFile: /src/brpc/src/butil/comlog_sink.h
    functionUses: 6
    functionsReached:
    - com_logstatus
    - com_openlog_r
    linkageType: ''
    returnType: void
    signature: void ComlogInitializer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: com_logstatus
      Src: /src/brpc/src/butil/comlog_sink.h:155,1
    - Dst: com_closelog_r
      Src: /src/brpc/src/butil/comlog_sink.h:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: ~ComlogInitializer()
    functionSourceFile: /src/brpc/src/butil/comlog_sink.h
    functionUses: 0
    functionsReached:
    - com_logstatus
    - com_closelog_r
    linkageType: ''
    returnType: void
    signature: void ~ComlogInitializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/thread_local.cpp:37,1
    - Dst: back
      Src: /src/brpc/src/butil/thread_local.cpp:38,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/thread_local.cpp:39,1
    - Dst: Pair::first
      Src: /src/brpc/src/butil/thread_local.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 43
    functionName: ~ThreadExitHelper()
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - Pair::first
    - empty
    linkageType: ''
    returnType: void
    signature: void ~ThreadExitHelper()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/thread_local.cpp:47,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_local.cpp:48,1
    - Dst: emplace_back
      Src: /src/brpc/src/butil/thread_local.cpp:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: butil::detail::ThreadExitHelper::add
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - reserve
    - emplace_back
    linkageType: ''
    returnType: int
    signature: int add(Fn fn, void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: std::make_pair
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:61,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:63,1
    - Dst: erase
      Src: /src/brpc/src/butil/thread_local.cpp:65,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: butil::detail::ThreadExitHelper::remove
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - erase
    - std::make_pair
    - begin
    linkageType: ''
    returnType: void
    signature: void remove(Fn fn, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadExitHelper*>
      Src: /src/brpc/src/butil/thread_local.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: butil::detail::delete_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ThreadExitHelper*>
    linkageType: ''
    returnType: void
    signature: void delete_thread_exit_helper(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:82,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 87
    functionName: butil::detail::helper_exit_global
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void helper_exit_global()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/thread_local.cpp:90,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/thread_local.cpp:91,1
    - Dst: abort
      Src: /src/brpc/src/butil/thread_local.cpp:92,1
    - Dst: atexit
      Src: /src/brpc/src/butil/thread_local.cpp:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 97
    functionName: butil::detail::make_thread_atexit_key
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - abort
    - pthread_key_create
    - fprintf
    - atexit
    linkageType: ''
    returnType: void
    signature: void make_thread_atexit_key()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:100,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:103,1
    - Dst: detail::ThreadExitHelper::ThreadExitHelper
      Src: /src/brpc/src/butil/thread_local.cpp:105,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::detail::get_or_new_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_once
    - pthread_setspecific
    - detail::ThreadExitHelper::ThreadExitHelper
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_or_new_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:114,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::detail::get_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_once
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fn
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::detail::call_single_arg_fn
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void call_single_arg_fn(void* fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::empty
      Src: /src/brpc/src/butil/thread_local.cpp:37,1
    - Dst: back
      Src: /src/brpc/src/butil/thread_local.cpp:38,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/thread_local.cpp:39,1
    - Dst: Pair::first
      Src: /src/brpc/src/butil/thread_local.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 43
    functionName: ~ThreadExitHelper()
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - Pair::first
    - butil::empty
    linkageType: ''
    returnType: void
    signature: void ~ThreadExitHelper()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/thread_local.cpp:47,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_local.cpp:48,1
    - Dst: emplace_back
      Src: /src/brpc/src/butil/thread_local.cpp:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: butil::detail::ThreadExitHelper::add
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - reserve
    - emplace_back
    linkageType: ''
    returnType: int
    signature: int add(Fn fn, void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: std::make_pair
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:61,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:63,1
    - Dst: erase
      Src: /src/brpc/src/butil/thread_local.cpp:65,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: butil::detail::ThreadExitHelper::remove
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - erase
    - std::make_pair
    - begin
    linkageType: ''
    returnType: void
    signature: void remove(Fn fn, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadExitHelper*>
      Src: /src/brpc/src/butil/thread_local.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: butil::detail::delete_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ThreadExitHelper*>
    linkageType: ''
    returnType: void
    signature: void delete_thread_exit_helper(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:82,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 87
    functionName: butil::detail::helper_exit_global
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void helper_exit_global()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/thread_local.cpp:90,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/thread_local.cpp:91,1
    - Dst: abort
      Src: /src/brpc/src/butil/thread_local.cpp:92,1
    - Dst: atexit
      Src: /src/brpc/src/butil/thread_local.cpp:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 97
    functionName: butil::detail::make_thread_atexit_key
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - abort
    - pthread_key_create
    - fprintf
    - atexit
    linkageType: ''
    returnType: void
    signature: void make_thread_atexit_key()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:100,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:103,1
    - Dst: detail::ThreadExitHelper::ThreadExitHelper
      Src: /src/brpc/src/butil/thread_local.cpp:105,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::detail::get_or_new_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_once
    - pthread_setspecific
    - detail::ThreadExitHelper::ThreadExitHelper
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_or_new_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:114,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::detail::get_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_once
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fn
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::detail::call_single_arg_fn
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void call_single_arg_fn(void* fn)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::get_or_new_thread_exit_helper
      Src: /src/brpc/src/butil/thread_local.cpp:129,1
    - Dst: detail::ThreadExitHelper*::add
      Src: /src/brpc/src/butil/thread_local.cpp:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 135
    functionName: butil::thread_atexit
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 19
    functionsReached:
    - butil::detail::get_or_new_thread_exit_helper
    - detail::ThreadExitHelper*::add
    linkageType: ''
    returnType: int
    signature: int thread_atexit(void (*fn)(void*), void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_local.cpp:142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 143
    functionName: butil::thread_atexit
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 20
    functionsReached:
    - butil::thread_atexit
    linkageType: ''
    returnType: int
    signature: int thread_atexit(void (*fn)())
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::get_thread_exit_helper
      Src: /src/brpc/src/butil/thread_local.cpp:147,1
    - Dst: detail::ThreadExitHelper*::remove
      Src: /src/brpc/src/butil/thread_local.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 152
    functionName: butil::thread_atexit_cancel
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 2
    functionsReached:
    - detail::ThreadExitHelper*::remove
    - butil::detail::get_thread_exit_helper
    linkageType: ''
    returnType: void
    signature: void thread_atexit_cancel(void (*fn)(void*), void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/thread_local.cpp:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: butil::thread_atexit_cancel
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 3
    functionsReached:
    - butil::thread_atexit_cancel
    linkageType: ''
    returnType: void
    signature: void thread_atexit_cancel(void (*fn)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/thread_local.cpp:37,1
    - Dst: back
      Src: /src/brpc/src/butil/thread_local.cpp:38,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/thread_local.cpp:39,1
    - Dst: Pair::first
      Src: /src/brpc/src/butil/thread_local.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 43
    functionName: ~ThreadExitHelper()
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - Pair::first
    - empty
    linkageType: ''
    returnType: void
    signature: void ~ThreadExitHelper()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/thread_local.cpp:47,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_local.cpp:48,1
    - Dst: emplace_back
      Src: /src/brpc/src/butil/thread_local.cpp:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: butil::detail::ThreadExitHelper::add
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - reserve
    - emplace_back
    linkageType: ''
    returnType: int
    signature: int add(Fn fn, void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: std::make_pair
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:61,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:63,1
    - Dst: erase
      Src: /src/brpc/src/butil/thread_local.cpp:65,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: butil::detail::ThreadExitHelper::remove
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - erase
    - std::make_pair
    - begin
    linkageType: ''
    returnType: void
    signature: void remove(Fn fn, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadExitHelper*>
      Src: /src/brpc/src/butil/thread_local.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: butil::detail::delete_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ThreadExitHelper*>
    linkageType: ''
    returnType: void
    signature: void delete_thread_exit_helper(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:82,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 87
    functionName: butil::detail::helper_exit_global
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void helper_exit_global()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/thread_local.cpp:90,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/thread_local.cpp:91,1
    - Dst: abort
      Src: /src/brpc/src/butil/thread_local.cpp:92,1
    - Dst: atexit
      Src: /src/brpc/src/butil/thread_local.cpp:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 97
    functionName: butil::detail::make_thread_atexit_key
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - abort
    - pthread_key_create
    - fprintf
    - atexit
    linkageType: ''
    returnType: void
    signature: void make_thread_atexit_key()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:100,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:103,1
    - Dst: detail::ThreadExitHelper::ThreadExitHelper
      Src: /src/brpc/src/butil/thread_local.cpp:105,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::detail::get_or_new_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 1
    functionsReached:
    - pthread_getspecific
    - pthread_once
    - pthread_setspecific
    - detail::ThreadExitHelper::ThreadExitHelper
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_or_new_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:114,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::detail::get_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 1
    functionsReached:
    - pthread_getspecific
    - pthread_once
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fn
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::detail::call_single_arg_fn
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void call_single_arg_fn(void* fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/thread_local.cpp:37,1
    - Dst: back
      Src: /src/brpc/src/butil/thread_local.cpp:38,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/thread_local.cpp:39,1
    - Dst: Pair::first
      Src: /src/brpc/src/butil/thread_local.cpp:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 43
    functionName: ~ThreadExitHelper()
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - Pair::first
    - empty
    linkageType: ''
    returnType: void
    signature: void ~ThreadExitHelper()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/thread_local.cpp:47,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_local.cpp:48,1
    - Dst: emplace_back
      Src: /src/brpc/src/butil/thread_local.cpp:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: butil::detail::ThreadExitHelper::add
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - capacity
    - reserve
    - emplace_back
    linkageType: ''
    returnType: int
    signature: int add(Fn fn, void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: std::make_pair
      Src: /src/brpc/src/butil/thread_local.cpp:60,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:61,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_local.cpp:63,1
    - Dst: erase
      Src: /src/brpc/src/butil/thread_local.cpp:65,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - fn
    - arg
    argTypes:
    - Fn
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: butil::detail::ThreadExitHelper::remove
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - erase
    - std::make_pair
    - begin
    linkageType: ''
    returnType: void
    signature: void remove(Fn fn, void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ThreadExitHelper*>
      Src: /src/brpc/src/butil/thread_local.cpp:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: butil::detail::delete_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ThreadExitHelper*>
    linkageType: ''
    returnType: void
    signature: void delete_thread_exit_helper(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:82,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 87
    functionName: butil::detail::helper_exit_global
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void helper_exit_global()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/thread_local.cpp:90,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/thread_local.cpp:91,1
    - Dst: abort
      Src: /src/brpc/src/butil/thread_local.cpp:92,1
    - Dst: atexit
      Src: /src/brpc/src/butil/thread_local.cpp:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 97
    functionName: butil::detail::make_thread_atexit_key
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached:
    - abort
    - pthread_key_create
    - fprintf
    - atexit
    linkageType: ''
    returnType: void
    signature: void make_thread_atexit_key()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:100,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:103,1
    - Dst: detail::ThreadExitHelper::ThreadExitHelper
      Src: /src/brpc/src/butil/thread_local.cpp:105,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/thread_local.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 111
    functionName: butil::detail::get_or_new_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 1
    functionsReached:
    - pthread_getspecific
    - pthread_once
    - pthread_setspecific
    - detail::ThreadExitHelper::ThreadExitHelper
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_or_new_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/thread_local.cpp:114,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/thread_local.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::detail::get_thread_exit_helper
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 1
    functionsReached:
    - pthread_getspecific
    - pthread_once
    linkageType: ''
    returnType: detail::ThreadExitHelper
    signature: detail::ThreadExitHelper * get_thread_exit_helper()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fn
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::detail::call_single_arg_fn
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void call_single_arg_fn(void* fn)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::get_or_new_thread_exit_helper
      Src: /src/brpc/src/butil/thread_local.cpp:129,1
    - Dst: detail::ThreadExitHelper*::add
      Src: /src/brpc/src/butil/thread_local.cpp:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 135
    functionName: butil::thread_atexit
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 20
    functionsReached:
    - butil::detail::get_or_new_thread_exit_helper
    - detail::ThreadExitHelper*::add
    linkageType: ''
    returnType: int
    signature: int thread_atexit(void (*fn)(void*), void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_local.cpp:142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 143
    functionName: butil::thread_atexit
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 21
    functionsReached:
    - butil::thread_atexit
    linkageType: ''
    returnType: int
    signature: int thread_atexit(void (*fn)())
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::get_thread_exit_helper
      Src: /src/brpc/src/butil/thread_local.cpp:147,1
    - Dst: detail::ThreadExitHelper*::remove
      Src: /src/brpc/src/butil/thread_local.cpp:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 152
    functionName: butil::thread_atexit_cancel
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 3
    functionsReached:
    - detail::ThreadExitHelper*::remove
    - butil::detail::get_thread_exit_helper
    linkageType: ''
    returnType: void
    signature: void thread_atexit_cancel(void (*fn)(void*), void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/thread_local.cpp:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: butil::thread_atexit_cancel
    functionSourceFile: /src/brpc/src/butil/thread_local.cpp
    functionUses: 4
    functionsReached:
    - butil::thread_atexit_cancel
    linkageType: ''
    returnType: void
    signature: void thread_atexit_cancel(void (*fn)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf_inl.h:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - size_hint
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: butil::IOBuf::cut_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::pcut_into_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::cut_into_file_descriptor(int fd, size_t size_hint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::pcut_multiple_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf_inl.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - fd
    - pieces
    - count
    argTypes:
    - int
    - IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: butil::IOBuf::cut_multiple_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::pcut_multiple_into_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::cut_multiple_into_file_descriptor(\n    int fd, IOBuf*
      const* pieces, size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::append_user_data_with_meta
      Src: /src/brpc/src/butil/iobuf_inl.h:41,1
    - Dst: std::move
      Src: /src/brpc/src/butil/iobuf_inl.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - data
    - size
    - deleter
    argTypes:
    - void*
    - size_t
    - std::function<void(void*)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: butil::IOBuf::append_user_data
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 7
    functionsReached:
    - std::move
    - butil::IOBuf::append_user_data_with_meta
    linkageType: ''
    returnType: int
    signature: int IOBuf::append_user_data(void* data, size_t size, std::function<void(void*)>
      deleter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/src/butil/iobuf_inl.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - max_count
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: butil::IOPortal::append_from_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 47
    functionsReached:
    - butil::IOPortal::pappend_from_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOPortal::append_from_file_descriptor(int fd, size_t max_count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOPortal::return_cached_blocks_impl
      Src: /src/brpc/src/butil/iobuf_inl.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: butil::IOPortal::return_cached_blocks
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOPortal::return_cached_blocks_impl
    linkageType: ''
    returnType: void
    signature: void IOPortal::return_cached_blocks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ref'
    argTypes:
    - IOBuf::BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: butil::reset_block_ref
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset_block_ref(IOBuf::BlockRef& ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:62,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: butil::IOBuf::IOBuf
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 482
    functionsReached:
    - reset_block_ref
    linkageType: ''
    returnType: void
    signature: void IOBuf::IOBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:67,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:68,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Movable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 69
    functionName: butil::IOBuf::IOBuf
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 482
    functionsReached:
    - value
    - IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void IOBuf::IOBuf(const Movable& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_inl.h:72,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:73,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:74,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf_inl.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Movable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: IOBuf::operator=(const Movable& rhs)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - value
    - IOBuf::IOBuf
    - clear
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const Movable& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_inl.h:78,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_inl.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: IOBuf::operator=(const char* s)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - append
    - clear
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const char* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_inl.h:83,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_inl.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: IOBuf::operator=(const std::string& s)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - append
    - clear
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: butil::IOBuf::swap
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBuf::swap(IOBuf& other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_cut_by_char
      Src: /src/brpc/src/butil/iobuf_inl.h:96,1
    - Dst: butil::IOBuf::_cut_by_delim
      Src: /src/brpc/src/butil/iobuf_inl.h:98,1
    - Dst: strlen
      Src: /src/brpc/src/butil/iobuf_inl.h:98,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - delim
    argTypes:
    - IOBuf*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 102
    functionName: butil::IOBuf::cut_until
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_cut_by_char
    - strlen
    - butil::IOBuf::_cut_by_delim
    linkageType: ''
    returnType: int
    signature: int IOBuf::cut_until(IOBuf* out, char const* delim)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:105,1
    - Dst: butil::IOBuf::_cut_by_char
      Src: /src/brpc/src/butil/iobuf_inl.h:106,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:107,1
    - Dst: butil::IOBuf::_cut_by_delim
      Src: /src/brpc/src/butil/iobuf_inl.h:108,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf_inl.h:108,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - ' delim'
    argTypes:
    - IOBuf*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 112
    functionName: butil::IOBuf::cut_until
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_cut_by_char
    - butil::IOBuf::length
    - data
    - butil::IOBuf::_cut_by_delim
    linkageType: ''
    returnType: int
    signature: int IOBuf::cut_until(IOBuf* out, const std::string& delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/butil/iobuf_inl.h:115,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf_inl.h:115,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 184
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::length
    - data
    linkageType: ''
    returnType: int
    signature: int IOBuf::append(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf_inl.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 122
    functionName: butil::IOBuf::to_string
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 23
    functionsReached:
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: std::string
    signature: std::string IOBuf::to_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: butil::IOBuf::empty
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 40
    functionsReached:
    - butil::IOBuf::_small
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: butil::IOBuf::length
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 51
    functionsReached:
    - butil::IOBuf::_small
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: butil::IOBuf::_small
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::_small() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: butil::IOBuf::_ref_num
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_small
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::_ref_num() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: '& IOBuf::_front_ref()'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_front_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: '& IOBuf::_front_ref() const'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_front_ref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:151,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: '& IOBuf::_back_ref()'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_back_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:155,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: '& IOBuf::_back_ref() const'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_back_ref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:159,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: '& IOBuf::_ref_at(size_t i)'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_ref_at(size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:163,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: '& IOBuf::_ref_at(size_t i) const'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_ref_at(size_t i) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:167,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 172
    functionName: butil::IOBuf::_pref_at
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - butil::IOBuf::_small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * IOBuf::_pref_at(size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - IOBuf::BlockRef
    - IOBuf::BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 177
    functionName: operator==(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - IOBuf::BlockRef
    - IOBuf::BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: operator!=(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:184,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_smallview
      Src: /src/brpc/src/butil/iobuf_inl.h:185,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_bigview
      Src: /src/brpc/src/butil/iobuf_inl.h:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 189
    functionName: butil::IOBuf::_push_back_ref
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_push_or_move_back_ref_to_smallview
    - butil::IOBuf::_small
    - butil::IOBuf::_push_or_move_back_ref_to_bigview
    linkageType: ''
    returnType: void
    signature: void IOBuf::_push_back_ref(const BlockRef& r)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:192,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_smallview
      Src: /src/brpc/src/butil/iobuf_inl.h:193,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_bigview
      Src: /src/brpc/src/butil/iobuf_inl.h:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 197
    functionName: butil::IOBuf::_move_back_ref
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBuf::_push_or_move_back_ref_to_smallview
    - butil::IOBuf::_small
    - butil::IOBuf::_push_or_move_back_ref_to_bigview
    linkageType: ''
    returnType: void
    signature: void IOBuf::_move_back_ref(const BlockRef& r)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/iobuf_inl.h:202,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:202,1
    - Dst: size
      Src: /src/brpc/src/butil/iobuf_inl.h:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: butil::IOBufCutter::remaining_bytes
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - _front_ref
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::remaining_bytes() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 217
    functionName: butil::IOBufCutter::cut1
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufCutter::load_next_ref
    linkageType: ''
    returnType: bool
    signature: bool IOBufCutter::cut1(void* c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 226
    functionName: butil::IOBufCutter::fetch1
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufCutter::load_next_ref
    linkageType: ''
    returnType: void
    signature: void * IOBufCutter::fetch1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:231,1
    - Dst: butil::IOBufCutter::slower_copy_to
      Src: /src/brpc/src/butil/iobuf_inl.h:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 235
    functionName: butil::IOBufCutter::copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::IOBufCutter::slower_copy_to
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::copy_to(void* out, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:246,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 250
    functionName: butil::IOBufCutter::pop_front
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufCutter::load_next_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::pop_front(size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::remaining_bytes
      Src: /src/brpc/src/butil/iobuf_inl.h:256,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf_inl.h:260,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf_inl.h:261,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf_inl.h:261,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf_inl.h:262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: butil::IOBufCutter::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 1
    functionsReached:
    - std::string*::resize
    - std::string*::size
    - butil::IOBufCutter::remaining_bytes
    - butil::IOBufCutter::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::cutn(std::string* out, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:270,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:275,1
    - Dst: butil::IOBufAppender::add_block
      Src: /src/brpc/src/butil/iobuf_inl.h:279,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - src
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 283
    functionName: butil::IOBufAppender::append
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached:
    - memcpy
    - butil::IOBufAppender::add_block
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::append(const void* src, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/butil/iobuf_inl.h:286,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf_inl.h:286,1
    - Dst: size
      Src: /src/brpc/src/butil/iobuf_inl.h:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 287
    functionName: butil::IOBufAppender::append
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 5
    functionsReached:
    - size
    - butil::IOBufAppender::append
    - data
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::append(const StringPiece& str)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/butil/iobuf_inl.h:305,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - d
    argTypes:
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 306
    functionName: butil::IOBufAppender::append_decimal
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::append
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::append_decimal(long d)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::add_block
      Src: /src/brpc/src/butil/iobuf_inl.h:310,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 318
    functionName: butil::IOBufAppender::push_back
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached:
    - butil::IOBufAppender::add_block
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::push_back(char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/butil/iobuf_inl.h:322,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 329
    functionName: butil::IOBufAppender::add_block
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - Next
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::add_block()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf_inl.h:334,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 338
    functionName: butil::IOBufAppender::shrink
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    linkageType: ''
    returnType: void
    signature: void IOBufAppender::shrink()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/src/butil/iobuf_inl.h:342,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 344
    functionName: butil::IOBufBytesIterator::IOBufBytesIterator
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - length
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::IOBufBytesIterator(const butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 352
    functionName: butil::IOBufBytesIterator::IOBufBytesIterator
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::IOBufBytesIterator(const IOBufBytesIterator&
      it)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' it'
    - bytes_left
    argTypes:
    - IOBufBytesIterator
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 365
    functionName: butil::IOBufBytesIterator::IOBufBytesIterator
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void IOBufBytesIterator::IOBufBytesIterator(\n    const IOBufBytesIterator&
      it, size_t bytes_left)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: backing_block
      Src: /src/brpc/src/butil/iobuf_inl.h:371,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/iobuf_inl.h:372,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/iobuf_inl.h:373,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_inl.h:373,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/iobuf_inl.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 374
    functionName: butil::IOBufBytesIterator::try_next_block
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 1
    functionsReached:
    - std::min
    - butil::StringPiece::data
    - butil::StringPiece::size
    - backing_block
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::try_next_block()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 376
    functionDepth: 0
    functionLinenumber: 376
    functionLinenumberEnd: 382
    functionName: IOBufBytesIterator::operator++()
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - try_next_block
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::operator++()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_inl.h:388,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:389,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:394,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - buf
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 384
    functionDepth: 1
    functionLinenumber: 384
    functionLinenumberEnd: 398
    functionName: butil::IOBufBytesIterator::copy_and_forward
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - memcpy
    - std::min
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::copy_and_forward(void* buf, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf_inl.h:402,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf_inl.h:404,1
    - Dst: butil::IOBufBytesIterator::copy_and_forward
      Src: /src/brpc/src/butil/iobuf_inl.h:406,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/iobuf_inl.h:406,1
    - Dst: std::string*::data
      Src: /src/brpc/src/butil/iobuf_inl.h:406,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf_inl.h:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - s
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 400
    functionDepth: 1
    functionLinenumber: 400
    functionLinenumberEnd: 411
    functionName: butil::IOBufBytesIterator::copy_and_forward
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 3
    functionsReached:
    - std::string*::size
    - std::string*::resize
    - butil::IOBufBytesIterator::copy_and_forward
    - std::string*::data
    - const_cast<char*>
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::copy_and_forward(std::string* s, size_t
      n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_inl.h:417,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:422,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 426
    functionName: butil::IOBufBytesIterator::forward
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::forward(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf_inl.h:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - size_hint
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: butil::IOBuf::cut_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::pcut_into_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::cut_into_file_descriptor(int fd, size_t size_hint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::pcut_multiple_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf_inl.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - fd
    - pieces
    - count
    argTypes:
    - int
    - IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 38
    functionName: butil::IOBuf::cut_multiple_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::pcut_multiple_into_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::cut_multiple_into_file_descriptor(\n    int fd, IOBuf*
      const* pieces, size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::append_user_data_with_meta
      Src: /src/brpc/src/butil/iobuf_inl.h:41,1
    - Dst: std::move
      Src: /src/brpc/src/butil/iobuf_inl.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - data
    - size
    - deleter
    argTypes:
    - void*
    - size_t
    - std::function<void(void*)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: butil::IOBuf::append_user_data
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 7
    functionsReached:
    - std::move
    - butil::IOBuf::append_user_data_with_meta
    linkageType: ''
    returnType: int
    signature: int IOBuf::append_user_data(void* data, size_t size, std::function<void(void*)>
      deleter)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/src/butil/iobuf_inl.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - max_count
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: butil::IOPortal::append_from_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 47
    functionsReached:
    - butil::IOPortal::pappend_from_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOPortal::append_from_file_descriptor(int fd, size_t max_count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOPortal::return_cached_blocks_impl
      Src: /src/brpc/src/butil/iobuf_inl.h:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: butil::IOPortal::return_cached_blocks
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOPortal::return_cached_blocks_impl
    linkageType: ''
    returnType: void
    signature: void IOPortal::return_cached_blocks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ref'
    argTypes:
    - IOBuf::BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: butil::reset_block_ref
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset_block_ref(IOBuf::BlockRef& ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:62,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: butil::IOBuf::IOBuf
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 482
    functionsReached:
    - reset_block_ref
    linkageType: ''
    returnType: void
    signature: void IOBuf::IOBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:67,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:68,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf_inl.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Movable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 69
    functionName: butil::IOBuf::IOBuf
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 482
    functionsReached:
    - value
    - IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void IOBuf::IOBuf(const Movable& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_inl.h:72,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:73,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf_inl.h:74,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf_inl.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Movable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: IOBuf::operator=(const Movable& rhs)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - value
    - IOBuf::IOBuf
    - clear
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const Movable& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_inl.h:78,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_inl.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: IOBuf::operator=(const char* s)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - append
    - clear
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const char* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_inl.h:83,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_inl.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: IOBuf::operator=(const std::string& s)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - append
    - clear
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: butil::IOBuf::swap
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBuf::swap(IOBuf& other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_cut_by_char
      Src: /src/brpc/src/butil/iobuf_inl.h:96,1
    - Dst: butil::IOBuf::_cut_by_delim
      Src: /src/brpc/src/butil/iobuf_inl.h:98,1
    - Dst: strlen
      Src: /src/brpc/src/butil/iobuf_inl.h:98,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - delim
    argTypes:
    - IOBuf*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 102
    functionName: butil::IOBuf::cut_until
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_cut_by_char
    - strlen
    - butil::IOBuf::_cut_by_delim
    linkageType: ''
    returnType: int
    signature: int IOBuf::cut_until(IOBuf* out, char const* delim)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:105,1
    - Dst: butil::IOBuf::_cut_by_char
      Src: /src/brpc/src/butil/iobuf_inl.h:106,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:107,1
    - Dst: butil::IOBuf::_cut_by_delim
      Src: /src/brpc/src/butil/iobuf_inl.h:108,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf_inl.h:108,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - ' delim'
    argTypes:
    - IOBuf*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 104
    functionDepth: 2
    functionLinenumber: 104
    functionLinenumberEnd: 112
    functionName: butil::IOBuf::cut_until
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_cut_by_char
    - butil::IOBuf::length
    - data
    - butil::IOBuf::_cut_by_delim
    linkageType: ''
    returnType: int
    signature: int IOBuf::cut_until(IOBuf* out, const std::string& delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/butil/iobuf_inl.h:115,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf_inl.h:115,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf_inl.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 185
    functionsReached:
    - butil::IOBuf::append
    - butil::IOBuf::length
    - data
    linkageType: ''
    returnType: int
    signature: int IOBuf::append(const std::string& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf_inl.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 122
    functionName: butil::IOBuf::to_string
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 23
    functionsReached:
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: std::string
    signature: std::string IOBuf::to_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: butil::IOBuf::empty
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 40
    functionsReached:
    - butil::IOBuf::_small
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: butil::IOBuf::length
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 53
    functionsReached:
    - butil::IOBuf::_small
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: butil::IOBuf::_small
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::_small() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 137
    functionDepth: 1
    functionLinenumber: 137
    functionLinenumberEnd: 140
    functionName: butil::IOBuf::_ref_num
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_small
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::_ref_num() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: '& IOBuf::_front_ref()'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_front_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: '& IOBuf::_front_ref() const'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_front_ref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:151,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: '& IOBuf::_back_ref()'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_back_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:155,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: '& IOBuf::_back_ref() const'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_back_ref() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:159,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: '& IOBuf::_ref_at(size_t i)'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_ref_at(size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf_inl.h:163,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 164
    functionName: '& IOBuf::_ref_at(size_t i) const'
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - _small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef & IOBuf::_ref_at(size_t i) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:167,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf_inl.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 172
    functionName: butil::IOBuf::_pref_at
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - ref_at
    - butil::IOBuf::_small
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * IOBuf::_pref_at(size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - IOBuf::BlockRef
    - IOBuf::BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 177
    functionName: operator==(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - IOBuf::BlockRef
    - IOBuf::BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: operator!=(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const IOBuf::BlockRef& r1, const IOBuf::BlockRef& r2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:184,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_smallview
      Src: /src/brpc/src/butil/iobuf_inl.h:185,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_bigview
      Src: /src/brpc/src/butil/iobuf_inl.h:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 189
    functionName: butil::IOBuf::_push_back_ref
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_push_or_move_back_ref_to_smallview
    - butil::IOBuf::_small
    - butil::IOBuf::_push_or_move_back_ref_to_bigview
    linkageType: ''
    returnType: void
    signature: void IOBuf::_push_back_ref(const BlockRef& r)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf_inl.h:192,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_smallview
      Src: /src/brpc/src/butil/iobuf_inl.h:193,1
    - Dst: butil::IOBuf::_push_or_move_back_ref_to_bigview
      Src: /src/brpc/src/butil/iobuf_inl.h:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 197
    functionName: butil::IOBuf::_move_back_ref
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBuf::_push_or_move_back_ref_to_smallview
    - butil::IOBuf::_small
    - butil::IOBuf::_push_or_move_back_ref_to_bigview
    linkageType: ''
    returnType: void
    signature: void IOBuf::_move_back_ref(const BlockRef& r)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/iobuf_inl.h:202,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:202,1
    - Dst: size
      Src: /src/brpc/src/butil/iobuf_inl.h:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: butil::IOBufCutter::remaining_bytes
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 1
    functionsReached:
    - _front_ref
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::remaining_bytes() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 217
    functionName: butil::IOBufCutter::cut1
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufCutter::load_next_ref
    linkageType: ''
    returnType: bool
    signature: bool IOBufCutter::cut1(void* c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 226
    functionName: butil::IOBufCutter::fetch1
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufCutter::load_next_ref
    linkageType: ''
    returnType: void
    signature: void * IOBufCutter::fetch1()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:231,1
    - Dst: butil::IOBufCutter::slower_copy_to
      Src: /src/brpc/src/butil/iobuf_inl.h:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 235
    functionName: butil::IOBufCutter::copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::IOBufCutter::slower_copy_to
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::copy_to(void* out, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf_inl.h:246,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 250
    functionName: butil::IOBufCutter::pop_front
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufCutter::load_next_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::pop_front(size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::remaining_bytes
      Src: /src/brpc/src/butil/iobuf_inl.h:256,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf_inl.h:260,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf_inl.h:261,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf_inl.h:261,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf_inl.h:262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: butil::IOBufCutter::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 2
    functionsReached:
    - std::string*::resize
    - std::string*::size
    - butil::IOBufCutter::remaining_bytes
    - butil::IOBufCutter::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::cutn(std::string* out, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:270,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:275,1
    - Dst: butil::IOBufAppender::add_block
      Src: /src/brpc/src/butil/iobuf_inl.h:279,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - src
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 283
    functionName: butil::IOBufAppender::append
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 6
    functionsReached:
    - memcpy
    - butil::IOBufAppender::add_block
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::append(const void* src, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/butil/iobuf_inl.h:286,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf_inl.h:286,1
    - Dst: size
      Src: /src/brpc/src/butil/iobuf_inl.h:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 287
    functionName: butil::IOBufAppender::append
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 7
    functionsReached:
    - size
    - butil::IOBufAppender::append
    - data
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::append(const StringPiece& str)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/butil/iobuf_inl.h:305,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - d
    argTypes:
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 306
    functionName: butil::IOBufAppender::append_decimal
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::append
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::append_decimal(long d)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::add_block
      Src: /src/brpc/src/butil/iobuf_inl.h:310,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 318
    functionName: butil::IOBufAppender::push_back
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached:
    - butil::IOBufAppender::add_block
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::push_back(char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/butil/iobuf_inl.h:322,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 329
    functionName: butil::IOBufAppender::add_block
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached:
    - Next
    linkageType: ''
    returnType: int
    signature: int IOBufAppender::add_block()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf_inl.h:334,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 338
    functionName: butil::IOBufAppender::shrink
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - BackUp
    linkageType: ''
    returnType: void
    signature: void IOBufAppender::shrink()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/src/butil/iobuf_inl.h:342,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 344
    functionName: butil::IOBufBytesIterator::IOBufBytesIterator
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - length
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::IOBufBytesIterator(const butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 352
    functionName: butil::IOBufBytesIterator::IOBufBytesIterator
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::IOBufBytesIterator(const IOBufBytesIterator&
      it)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' it'
    - bytes_left
    argTypes:
    - IOBufBytesIterator
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 365
    functionName: butil::IOBufBytesIterator::IOBufBytesIterator
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void IOBufBytesIterator::IOBufBytesIterator(\n    const IOBufBytesIterator&
      it, size_t bytes_left)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: backing_block
      Src: /src/brpc/src/butil/iobuf_inl.h:371,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/iobuf_inl.h:372,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/iobuf_inl.h:373,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_inl.h:373,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/iobuf_inl.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 374
    functionName: butil::IOBufBytesIterator::try_next_block
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached:
    - std::min
    - butil::StringPiece::data
    - butil::StringPiece::size
    - backing_block
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::try_next_block()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 376
    functionDepth: 0
    functionLinenumber: 376
    functionLinenumberEnd: 382
    functionName: IOBufBytesIterator::operator++()
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - try_next_block
    linkageType: ''
    returnType: void
    signature: void IOBufBytesIterator::operator++()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_inl.h:388,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf_inl.h:389,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:394,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - buf
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 384
    functionDepth: 1
    functionLinenumber: 384
    functionLinenumberEnd: 398
    functionName: butil::IOBufBytesIterator::copy_and_forward
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 3
    functionsReached:
    - memcpy
    - std::min
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::copy_and_forward(void* buf, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf_inl.h:402,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf_inl.h:404,1
    - Dst: butil::IOBufBytesIterator::copy_and_forward
      Src: /src/brpc/src/butil/iobuf_inl.h:406,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/iobuf_inl.h:406,1
    - Dst: std::string*::data
      Src: /src/brpc/src/butil/iobuf_inl.h:406,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf_inl.h:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - s
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 400
    functionDepth: 1
    functionLinenumber: 400
    functionLinenumberEnd: 411
    functionName: butil::IOBufBytesIterator::copy_and_forward
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 4
    functionsReached:
    - std::string*::size
    - std::string*::resize
    - butil::IOBufBytesIterator::copy_and_forward
    - std::string*::data
    - const_cast<char*>
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::copy_and_forward(std::string* s, size_t
      n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_inl.h:417,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf_inl.h:422,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 426
    functionName: butil::IOBufBytesIterator::forward
    functionSourceFile: /src/brpc/src/butil/iobuf_inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::forward(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - type
    - ','
    - rvalue_type
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 217
    functionName: MOVE_ONLY_TYPE_FOR_CPP_03
    functionSourceFile: /src/brpc/src/butil/move.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MOVE_ONLY_TYPE_FOR_CPP_03(type, rvalue_type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_in_64
      Src: /src/brpc/src/butil/fast_rand.h:60,1
    - Dst: butil::fast_rand_in_u64
      Src: /src/brpc/src/butil/fast_rand.h:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 64
    functionName: butil::fast_rand_in
    functionSourceFile: /src/brpc/src/butil/fast_rand.h
    functionUses: 9
    functionsReached:
    - butil::fast_rand_in_64
    - butil::fast_rand_in_u64
    linkageType: ''
    returnType: T
    signature: T fast_rand_in(T min, T max)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_in_64
      Src: /src/brpc/src/butil/fast_rand.h:60,1
    - Dst: butil::fast_rand_in_u64
      Src: /src/brpc/src/butil/fast_rand.h:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 64
    functionName: butil::fast_rand_in
    functionSourceFile: /src/brpc/src/butil/fast_rand.h
    functionUses: 9
    functionsReached:
    - butil::fast_rand_in_64
    - butil::fast_rand_in_u64
    linkageType: ''
    returnType: T
    signature: T fast_rand_in(T min, T max)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ip
    argTypes:
    - ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ip2int
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: in_addr_t
    signature: in_addr_t ip2int(ip_t ip)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ip_value
    argTypes:
    - in_addr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: butil::int2ip
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: ip_t
    signature: ip_t int2ip(in_addr_t ip_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::c_str
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * c_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: butil::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 69
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EndPoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ntohs
      Src: /src/brpc/src/butil/endpoint.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - sockaddr_in
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 91
    functionName: butil::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 69
    functionsReached:
    - ntohs
    linkageType: ''
    returnType: void
    signature: void EndPoint(const sockaddr_in& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: butil::c_str
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * c_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ip
    argTypes:
    - ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ip2int
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: in_addr_t
    signature: in_addr_t ip2int(ip_t ip)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ip_value
    argTypes:
    - in_addr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: butil::int2ip
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: ip_t
    signature: ip_t int2ip(in_addr_t ip_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::c_str
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * c_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: butil::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 69
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EndPoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ntohs
      Src: /src/brpc/src/butil/endpoint.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - sockaddr_in
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 91
    functionName: butil::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 69
    functionsReached:
    - ntohs
    linkageType: ''
    returnType: void
    signature: void EndPoint(const sockaddr_in& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: butil::c_str
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * c_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:168,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - butil::ip_t
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: operator<(butil::ip_t lhs, butil::ip_t rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - butil::ip2int
    linkageType: ''
    returnType: bool
    signature: bool operator<(butil::ip_t lhs, butil::ip_t rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - butil::ip_t
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 172
    functionName: operator>(butil::ip_t lhs, butil::ip_t rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(butil::ip_t lhs, butil::ip_t rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - butil::ip_t
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: operator>=(butil::ip_t lhs, butil::ip_t rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(butil::ip_t lhs, butil::ip_t rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - butil::ip_t
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: operator<=(butil::ip_t lhs, butil::ip_t rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(butil::ip_t lhs, butil::ip_t rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:180,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - butil::ip_t
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: operator==(butil::ip_t lhs, butil::ip_t rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - butil::ip2int
    linkageType: ''
    returnType: bool
    signature: bool operator==(butil::ip_t lhs, butil::ip_t rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - butil::ip_t
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    functionName: operator!=(butil::ip_t lhs, butil::ip_t rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(butil::ip_t lhs, butil::ip_t rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/endpoint.h:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ip_str'
    argTypes:
    - std::ostream
    - butil::IPStr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: '& operator<<(std::ostream& os, const butil::IPStr& ip_str)'
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - c_str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const butil::IPStr& ip_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ip2str
      Src: /src/brpc/src/butil/endpoint.h:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ip
    argTypes:
    - std::ostream
    - butil::ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: '& operator<<(std::ostream& os, butil::ip_t ip)'
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - butil::ip2str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, butil::ip_t ip)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 197
    functionName: operator<(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 200
    functionName: operator>(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: operator<=(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: operator>=(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 209
    functionName: operator==(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: operator!=(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: endpoint2str
      Src: /src/brpc/src/butil/endpoint.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ep'
    argTypes:
    - std::ostream
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: '& operator<<(std::ostream& os, const EndPoint& ep)'
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - endpoint2str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const EndPoint& ep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/endpoint.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ep_str'
    argTypes:
    - std::ostream
    - EndPointStr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: '& operator<<(std::ostream& os, const EndPointStr& ep_str)'
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - c_str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const EndPointStr& ep_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 197
    functionName: operator<(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 200
    functionName: operator>(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: operator<=(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: operator>=(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 209
    functionName: operator==(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - EndPoint
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: operator!=(EndPoint p1, EndPoint p2)
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(EndPoint p1, EndPoint p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: endpoint2str
      Src: /src/brpc/src/butil/endpoint.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ep'
    argTypes:
    - std::ostream
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: '& operator<<(std::ostream& os, const EndPoint& ep)'
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - endpoint2str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const EndPoint& ep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/endpoint.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' ep_str'
    argTypes:
    - std::ostream
    - EndPointStr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 219
    functionName: '& operator<<(std::ostream& os, const EndPointStr& ep_str)'
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - c_str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const EndPointStr& ep_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HashPair
      Src: /src/brpc/src/butil/endpoint.h:232,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ep'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 233
    functionName: BUTIL_HASH_NAMESPACE::hash_value
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 2
    functionsReached:
    - butil::HashPair
    - butil::ip2int
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t hash_value(const butil::EndPoint& ep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HashPair
      Src: /src/brpc/src/butil/endpoint.h:239,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ep'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 240
    functionName: operator()(const butil::EndPoint& ep) const
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - butil::HashPair
    - butil::ip2int
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const butil::EndPoint& ep) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HashPair
      Src: /src/brpc/src/butil/endpoint.h:232,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ep'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 233
    functionName: BUTIL_HASH_NAMESPACE::hash_value
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 2
    functionsReached:
    - butil::HashPair
    - butil::ip2int
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t hash_value(const butil::EndPoint& ep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HashPair
      Src: /src/brpc/src/butil/endpoint.h:239,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/butil/endpoint.h:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ep'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 240
    functionName: operator()(const butil::EndPoint& ep) const
    functionSourceFile: /src/brpc/src/butil/endpoint.h
    functionUses: 0
    functionsReached:
    - butil::HashPair
    - butil::ip2int
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const butil::EndPoint& ep) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/butil/base64url.cc:22,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:24,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/base64url.cc:24,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/base64url.cc:24,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:25,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/base64url.cc:25,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/base64url.cc:25,1
    - Dst: std::string*::find_last_not_of
      Src: /src/brpc/src/butil/base64url.cc:34,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/base64url.cc:36,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - ' input'
    - policy
    - output
    argTypes:
    - StringPiece
    - Base64UrlEncodePolicy
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 40
    functionName: butil::Base64UrlEncode
    functionSourceFile: /src/brpc/src/butil/base64url.cc
    functionUses: 4
    functionsReached:
    - std::string*::begin
    - std::string*::resize
    - std::string*::find_last_not_of
    - butil::Base64Encode
    - std::replace
    - std::string*::end
    linkageType: ''
    returnType: void
    signature: "void Base64UrlEncode(const StringPiece& input,\n                     Base64UrlEncodePolicy
      policy,\n                     std::string* output)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: find_first_of
      Src: /src/brpc/src/butil/base64url.cc:47,1
    - Dst: size
      Src: /src/brpc/src/butil/base64url.cc:50,1
    - Dst: find_first_of
      Src: /src/brpc/src/butil/base64url.cc:52,1
    - Dst: find_first_of
      Src: /src/brpc/src/butil/base64url.cc:65,1
    - Dst: size
      Src: /src/brpc/src/butil/base64url.cc:76,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/butil/base64url.cc:80,1
    - Dst: AppendToString
      Src: /src/brpc/src/butil/base64url.cc:81,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:84,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/base64url.cc:84,1
    - Dst: std::string::end
      Src: /src/brpc/src/butil/base64url.cc:84,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:85,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/base64url.cc:85,1
    - Dst: std::string::end
      Src: /src/brpc/src/butil/base64url.cc:85,1
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64url.cc:88,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/butil/base64url.cc:90,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/butil/base64url.cc:93,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 26
    argCount: 3
    argNames:
    - ' input'
    - policy
    - output
    argTypes:
    - StringPiece
    - Base64UrlDecodePolicy
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 94
    functionName: butil::Base64UrlDecode
    functionSourceFile: /src/brpc/src/butil/base64url.cc
    functionUses: 10
    functionsReached:
    - find_first_of
    - std::string::end
    - std::string::reserve
    - AppendToString
    - butil::Base64Decode
    - std::string::resize
    - size
    - std::replace
    - std::string::begin
    linkageType: ''
    returnType: bool
    signature: "bool Base64UrlDecode(const StringPiece& input,\n                     Base64UrlDecodePolicy
      policy,\n                     std::string* output)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/butil/base64url.cc:22,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:24,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/base64url.cc:24,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/base64url.cc:24,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:25,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/base64url.cc:25,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/base64url.cc:25,1
    - Dst: std::string*::find_last_not_of
      Src: /src/brpc/src/butil/base64url.cc:34,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/base64url.cc:36,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - ' input'
    - policy
    - output
    argTypes:
    - StringPiece
    - Base64UrlEncodePolicy
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 40
    functionName: butil::Base64UrlEncode
    functionSourceFile: /src/brpc/src/butil/base64url.cc
    functionUses: 4
    functionsReached:
    - std::string*::begin
    - std::string*::resize
    - std::string*::find_last_not_of
    - butil::Base64Encode
    - std::replace
    - std::string*::end
    linkageType: ''
    returnType: void
    signature: "void Base64UrlEncode(const StringPiece& input,\n                     Base64UrlEncodePolicy
      policy,\n                     std::string* output)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: find_first_of
      Src: /src/brpc/src/butil/base64url.cc:47,1
    - Dst: size
      Src: /src/brpc/src/butil/base64url.cc:50,1
    - Dst: find_first_of
      Src: /src/brpc/src/butil/base64url.cc:52,1
    - Dst: find_first_of
      Src: /src/brpc/src/butil/base64url.cc:65,1
    - Dst: size
      Src: /src/brpc/src/butil/base64url.cc:76,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/butil/base64url.cc:80,1
    - Dst: AppendToString
      Src: /src/brpc/src/butil/base64url.cc:81,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:84,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/base64url.cc:84,1
    - Dst: std::string::end
      Src: /src/brpc/src/butil/base64url.cc:84,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/base64url.cc:85,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/base64url.cc:85,1
    - Dst: std::string::end
      Src: /src/brpc/src/butil/base64url.cc:85,1
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64url.cc:88,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/butil/base64url.cc:90,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/butil/base64url.cc:93,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 26
    argCount: 3
    argNames:
    - ' input'
    - policy
    - output
    argTypes:
    - StringPiece
    - Base64UrlDecodePolicy
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 94
    functionName: butil::Base64UrlDecode
    functionSourceFile: /src/brpc/src/butil/base64url.cc
    functionUses: 10
    functionsReached:
    - find_first_of
    - std::string::end
    - std::string::reserve
    - AppendToString
    - butil::Base64Decode
    - std::string::resize
    - size
    - std::replace
    - std::string::begin
    linkageType: ''
    returnType: bool
    signature: "bool Base64UrlDecode(const StringPiece& input,\n                     Base64UrlDecodePolicy
      policy,\n                     std::string* output)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~IReader()
    functionSourceFile: /src/brpc/src/butil/reader_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IReader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~IWriter()
    functionSourceFile: /src/brpc/src/butil/reader_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IWriter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: ~IReader()
    functionSourceFile: /src/brpc/src/butil/reader_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IReader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~IWriter()
    functionSourceFile: /src/brpc/src/butil/reader_writer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IWriter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 65
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 87
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:91,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:92,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 95
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:106,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:114,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 129
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 65
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 87
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:91,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:92,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 95
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:106,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:114,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 129
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 65
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 87
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:91,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:92,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 95
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:106,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:114,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 129
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 65
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 87
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:91,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:92,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 95
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:106,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:114,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 28
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 129
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mips_gcc.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mips_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::swap
      Src: /src/brpc/src/butil/stl_util.h:26,1
    - Dst: T*::reserve
      Src: /src/brpc/src/butil/stl_util.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 30
    functionName: butil::STLClearObject
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - T*::reserve
    - T::swap
    linkageType: ''
    returnType: void
    signature: void STLClearObject(T* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 48
    functionName: butil::STLDeleteContainerPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void STLDeleteContainerPointers(ForwardIterator begin, ForwardIterator
      end)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: butil::STLDeleteContainerPairPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void STLDeleteContainerPairPointers(ForwardIterator begin,\n                                    ForwardIterator
      end)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 79
    functionName: butil::STLDeleteContainerPairFirstPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void STLDeleteContainerPairFirstPointers(ForwardIterator begin,\n
      \                                        ForwardIterator end)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: butil::STLDeleteContainerPairSecondPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void STLDeleteContainerPairSecondPointers(ForwardIterator begin,\n
      \                                         ForwardIterator end)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<T>*::empty
      Src: /src/brpc/src/butil/stl_util.h:100,1
    - Dst: std::vector<T>*::begin
      Src: /src/brpc/src/butil/stl_util.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - std::vector<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: butil::vector_as_array
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - std::vector<T>*::empty
    - std::vector<T>*::begin
    linkageType: ''
    returnType: T
    signature: T * vector_as_array(std::vector<T>* v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<T>*::empty
      Src: /src/brpc/src/butil/stl_util.h:105,1
    - Dst: std::vector<T>*::begin
      Src: /src/brpc/src/butil/stl_util.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - std::vector<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: butil::vector_as_array
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - std::vector<T>*::empty
    - std::vector<T>*::begin
    linkageType: ''
    returnType: T
    signature: T * vector_as_array(const std::vector<T>* v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/butil/stl_util.h:122,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/stl_util.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: butil::string_as_array
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - std::string*::empty
    - std::string*::begin
    linkageType: ''
    returnType: char
    signature: char * string_as_array(std::string* str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::STLDeleteContainerPointers
      Src: /src/brpc/src/butil/stl_util.h:142,1
    - Dst: T*::begin
      Src: /src/brpc/src/butil/stl_util.h:142,1
    - Dst: T*::end
      Src: /src/brpc/src/butil/stl_util.h:142,1
    - Dst: T*::clear
      Src: /src/brpc/src/butil/stl_util.h:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 144
    functionName: butil::STLDeleteElements
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - T*::begin
    - T*::end
    - butil::STLDeleteContainerPointers
    - T*::clear
    linkageType: ''
    returnType: void
    signature: void STLDeleteElements(T* container)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: T*::begin
      Src: /src/brpc/src/butil/stl_util.h:153,1
    - Dst: T*::end
      Src: /src/brpc/src/butil/stl_util.h:153,1
    - Dst: T*::clear
      Src: /src/brpc/src/butil/stl_util.h:155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: butil::STLDeleteValues
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - T*::begin
    - T*::end
    - T*::clear
    linkageType: ''
    returnType: void
    signature: void STLDeleteValues(T* container)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: butil::STLElementDeleter::STLElementDeleter
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void STLElementDeleter(T* container)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::STLDeleteElements
      Src: /src/brpc/src/butil/stl_util.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 176
    functionName: ~STLElementDeleter()
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - butil::STLDeleteElements
    linkageType: ''
    returnType: void
    signature: void ~STLElementDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 187
    functionName: butil::STLValueDeleter::STLValueDeleter
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void STLValueDeleter(T* container)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::STLDeleteValues
      Src: /src/brpc/src/butil/stl_util.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 188
    functionDepth: 2
    functionLinenumber: 188
    functionLinenumberEnd: 188
    functionName: ~STLValueDeleter()
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - butil::STLDeleteValues
    linkageType: ''
    returnType: void
    signature: void ~STLValueDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/stl_util.h:198,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' collection'
    - ' key'
    argTypes:
    - Collection
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 199
    functionName: butil::ContainsKey
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - end
    - butil::find
    linkageType: ''
    returnType: bool
    signature: bool ContainsKey(const Collection& collection, const Key& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::adjacent_find
      Src: /src/brpc/src/butil/stl_util.h:206,1
    - Dst: rbegin
      Src: /src/brpc/src/butil/stl_util.h:206,1
    - Dst: rend
      Src: /src/brpc/src/butil/stl_util.h:206,1
    - Dst: std::less<typename Container::value_type>
      Src: /src/brpc/src/butil/stl_util.h:207,1
    - Dst: rend
      Src: /src/brpc/src/butil/stl_util.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' cont'
    argTypes:
    - Container
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 209
    functionName: butil::STLIsSorted
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - rend
    - std::adjacent_find
    - rbegin
    - std::less<typename Container::value_type>
    linkageType: ''
    returnType: bool
    signature: bool STLIsSorted(const Container& cont)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:214,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:214,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:215,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:215,1
    - Dst: std::set_difference
      Src: /src/brpc/src/butil/stl_util.h:217,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:217,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:217,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:218,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:218,1
    - Dst: std::inserter
      Src: /src/brpc/src/butil/stl_util.h:219,1
    - Dst: ResultType::end
      Src: /src/brpc/src/butil/stl_util.h:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 221
    functionName: butil::STLSetDifference
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - std::set_difference
    - ResultType::end
    - DCHECK
    - std::inserter
    - begin
    - butil::STLIsSorted
    linkageType: ''
    returnType: ResultType
    signature: ResultType STLSetDifference(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:226,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:226,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:227,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:227,1
    - Dst: std::set_union
      Src: /src/brpc/src/butil/stl_util.h:229,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:229,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:229,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:230,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:230,1
    - Dst: std::inserter
      Src: /src/brpc/src/butil/stl_util.h:231,1
    - Dst: ResultType::end
      Src: /src/brpc/src/butil/stl_util.h:231,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 233
    functionName: butil::STLSetUnion
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - ResultType::end
    - DCHECK
    - std::inserter
    - begin
    - butil::STLIsSorted
    - std::set_union
    linkageType: ''
    returnType: ResultType
    signature: ResultType STLSetUnion(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:239,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:239,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:240,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:240,1
    - Dst: std::set_intersection
      Src: /src/brpc/src/butil/stl_util.h:242,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:242,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:242,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:243,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:243,1
    - Dst: std::inserter
      Src: /src/brpc/src/butil/stl_util.h:244,1
    - Dst: ResultType::end
      Src: /src/brpc/src/butil/stl_util.h:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 246
    functionName: butil::STLSetIntersection
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - ResultType::end
    - DCHECK
    - std::inserter
    - begin
    - butil::STLIsSorted
    - std::set_intersection
    linkageType: ''
    returnType: ResultType
    signature: ResultType STLSetIntersection(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:252,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:252,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:253,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:253,1
    - Dst: std::includes
      Src: /src/brpc/src/butil/stl_util.h:254,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:254,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:254,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:255,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 256
    functionName: butil::STLIncludes
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - DCHECK
    - std::includes
    - begin
    - butil::STLIsSorted
    linkageType: ''
    returnType: bool
    signature: bool STLIncludes(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::swap
      Src: /src/brpc/src/butil/stl_util.h:26,1
    - Dst: T*::reserve
      Src: /src/brpc/src/butil/stl_util.h:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 30
    functionName: butil::STLClearObject
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - T*::reserve
    - T::swap
    linkageType: ''
    returnType: void
    signature: void STLClearObject(T* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 48
    functionName: butil::STLDeleteContainerPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void STLDeleteContainerPointers(ForwardIterator begin, ForwardIterator
      end)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: butil::STLDeleteContainerPairPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void STLDeleteContainerPairPointers(ForwardIterator begin,\n                                    ForwardIterator
      end)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 79
    functionName: butil::STLDeleteContainerPairFirstPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void STLDeleteContainerPairFirstPointers(ForwardIterator begin,\n
      \                                        ForwardIterator end)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - ForwardIterator
    - ForwardIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: butil::STLDeleteContainerPairSecondPointers
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void STLDeleteContainerPairSecondPointers(ForwardIterator begin,\n
      \                                         ForwardIterator end)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<T>*::empty
      Src: /src/brpc/src/butil/stl_util.h:100,1
    - Dst: std::vector<T>*::begin
      Src: /src/brpc/src/butil/stl_util.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - std::vector<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: butil::vector_as_array
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - std::vector<T>*::empty
    - std::vector<T>*::begin
    linkageType: ''
    returnType: T
    signature: T * vector_as_array(std::vector<T>* v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<T>*::empty
      Src: /src/brpc/src/butil/stl_util.h:105,1
    - Dst: std::vector<T>*::begin
      Src: /src/brpc/src/butil/stl_util.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - std::vector<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: butil::vector_as_array
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - std::vector<T>*::empty
    - std::vector<T>*::begin
    linkageType: ''
    returnType: T
    signature: T * vector_as_array(const std::vector<T>* v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::empty
      Src: /src/brpc/src/butil/stl_util.h:122,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/stl_util.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: butil::string_as_array
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - std::string*::empty
    - std::string*::begin
    linkageType: ''
    returnType: char
    signature: char * string_as_array(std::string* str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::STLDeleteContainerPointers
      Src: /src/brpc/src/butil/stl_util.h:142,1
    - Dst: T*::begin
      Src: /src/brpc/src/butil/stl_util.h:142,1
    - Dst: T*::end
      Src: /src/brpc/src/butil/stl_util.h:142,1
    - Dst: T*::clear
      Src: /src/brpc/src/butil/stl_util.h:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 144
    functionName: butil::STLDeleteElements
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 1
    functionsReached:
    - T*::begin
    - T*::end
    - butil::STLDeleteContainerPointers
    - T*::clear
    linkageType: ''
    returnType: void
    signature: void STLDeleteElements(T* container)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: T*::begin
      Src: /src/brpc/src/butil/stl_util.h:153,1
    - Dst: T*::end
      Src: /src/brpc/src/butil/stl_util.h:153,1
    - Dst: T*::clear
      Src: /src/brpc/src/butil/stl_util.h:155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: butil::STLDeleteValues
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 1
    functionsReached:
    - T*::begin
    - T*::end
    - T*::clear
    linkageType: ''
    returnType: void
    signature: void STLDeleteValues(T* container)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: butil::STLElementDeleter::STLElementDeleter
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void STLElementDeleter(T* container)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STLDeleteElements
      Src: /src/brpc/src/butil/stl_util.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    functionName: ~STLElementDeleter()
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - STLDeleteElements
    linkageType: ''
    returnType: void
    signature: void ~STLElementDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - container
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 187
    functionName: butil::STLValueDeleter::STLValueDeleter
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void STLValueDeleter(T* container)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STLDeleteValues
      Src: /src/brpc/src/butil/stl_util.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 188
    functionName: ~STLValueDeleter()
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - STLDeleteValues
    linkageType: ''
    returnType: void
    signature: void ~STLValueDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/stl_util.h:198,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' collection'
    - ' key'
    argTypes:
    - Collection
    - Key
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 199
    functionName: butil::ContainsKey
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 0
    functionsReached:
    - end
    - butil::find
    linkageType: ''
    returnType: bool
    signature: bool ContainsKey(const Collection& collection, const Key& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::adjacent_find
      Src: /src/brpc/src/butil/stl_util.h:206,1
    - Dst: rbegin
      Src: /src/brpc/src/butil/stl_util.h:206,1
    - Dst: rend
      Src: /src/brpc/src/butil/stl_util.h:206,1
    - Dst: std::less<typename Container::value_type>
      Src: /src/brpc/src/butil/stl_util.h:207,1
    - Dst: rend
      Src: /src/brpc/src/butil/stl_util.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' cont'
    argTypes:
    - Container
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 209
    functionName: butil::STLIsSorted
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 8
    functionsReached:
    - rend
    - std::adjacent_find
    - rbegin
    - std::less<typename Container::value_type>
    linkageType: ''
    returnType: bool
    signature: bool STLIsSorted(const Container& cont)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:214,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:214,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:215,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:215,1
    - Dst: std::set_difference
      Src: /src/brpc/src/butil/stl_util.h:217,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:217,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:217,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:218,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:218,1
    - Dst: std::inserter
      Src: /src/brpc/src/butil/stl_util.h:219,1
    - Dst: ResultType::end
      Src: /src/brpc/src/butil/stl_util.h:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 221
    functionName: butil::STLSetDifference
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - std::set_difference
    - ResultType::end
    - DCHECK
    - std::inserter
    - begin
    - butil::STLIsSorted
    linkageType: ''
    returnType: ResultType
    signature: ResultType STLSetDifference(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:226,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:226,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:227,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:227,1
    - Dst: std::set_union
      Src: /src/brpc/src/butil/stl_util.h:229,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:229,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:229,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:230,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:230,1
    - Dst: std::inserter
      Src: /src/brpc/src/butil/stl_util.h:231,1
    - Dst: ResultType::end
      Src: /src/brpc/src/butil/stl_util.h:231,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 233
    functionName: butil::STLSetUnion
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - ResultType::end
    - DCHECK
    - std::inserter
    - begin
    - butil::STLIsSorted
    - std::set_union
    linkageType: ''
    returnType: ResultType
    signature: ResultType STLSetUnion(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:239,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:239,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:240,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:240,1
    - Dst: std::set_intersection
      Src: /src/brpc/src/butil/stl_util.h:242,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:242,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:242,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:243,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:243,1
    - Dst: std::inserter
      Src: /src/brpc/src/butil/stl_util.h:244,1
    - Dst: ResultType::end
      Src: /src/brpc/src/butil/stl_util.h:244,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 246
    functionName: butil::STLSetIntersection
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - ResultType::end
    - DCHECK
    - std::inserter
    - begin
    - butil::STLIsSorted
    - std::set_intersection
    linkageType: ''
    returnType: ResultType
    signature: ResultType STLSetIntersection(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:252,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:252,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/stl_util.h:253,1
    - Dst: butil::STLIsSorted
      Src: /src/brpc/src/butil/stl_util.h:253,1
    - Dst: std::includes
      Src: /src/brpc/src/butil/stl_util.h:254,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:254,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:254,1
    - Dst: begin
      Src: /src/brpc/src/butil/stl_util.h:255,1
    - Dst: end
      Src: /src/brpc/src/butil/stl_util.h:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' a1'
    - ' a2'
    argTypes:
    - Arg1
    - Arg2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 256
    functionName: butil::STLIncludes
    functionSourceFile: /src/brpc/src/butil/stl_util.h
    functionUses: 4
    functionsReached:
    - end
    - DCHECK
    - std::includes
    - begin
    - butil::STLIsSorted
    linkageType: ''
    returnType: bool
    signature: bool STLIncludes(const Arg1& a1, const Arg2& a2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Version
      Src: /src/brpc/src/butil/version.h:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 64
    functionName: butil::Version
    functionSourceFile: /src/brpc/src/butil/version.h
    functionUses: 1
    functionsReached:
    - butil::Version
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Version
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: butil::components
    functionSourceFile: /src/brpc/src/butil/version.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<uint16_t>
    signature: std::vector<uint16_t> & components() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Version
      Src: /src/brpc/src/butil/version.h:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 64
    functionName: butil::Version
    functionSourceFile: /src/brpc/src/butil/version.h
    functionUses: 2
    functionsReached:
    - butil::Version
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Version
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: butil::components
    functionSourceFile: /src/brpc/src/butil/version.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<uint16_t>
    signature: std::vector<uint16_t> & components() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - observer
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 19
    functionName: ScopedObserver::ScopedObserver
    functionSourceFile: /src/brpc/src/butil/scoped_observer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedObserver(Observer* observer)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RemoveAll
      Src: /src/brpc/src/butil/scoped_observer.h:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 23
    functionName: ~ScopedObserver()
    functionSourceFile: /src/brpc/src/butil/scoped_observer.h
    functionUses: 0
    functionsReached:
    - RemoveAll
    linkageType: ''
    returnType: void
    signature: void ~ScopedObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_back
      Src: /src/brpc/src/butil/scoped_observer.h:27,1
    - Dst: Source*::AddObserver
      Src: /src/brpc/src/butil/scoped_observer.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - source
    argTypes:
    - Source*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: ScopedObserver::Add
    functionSourceFile: /src/brpc/src/butil/scoped_observer.h
    functionUses: 0
    functionsReached:
    - push_back
    - Source*::AddObserver
    linkageType: ''
    returnType: void
    signature: void Add(Source* source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/butil/scoped_observer.h:33,1
    - Dst: std::find
      Src: /src/brpc/src/butil/scoped_observer.h:33,1
    - Dst: begin
      Src: /src/brpc/src/butil/scoped_observer.h:33,1
    - Dst: end
      Src: /src/brpc/src/butil/scoped_observer.h:33,1
    - Dst: Source*::RemoveObserver
      Src: /src/brpc/src/butil/scoped_observer.h:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - source
    argTypes:
    - Source*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: ScopedObserver::Remove
    functionSourceFile: /src/brpc/src/butil/scoped_observer.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - Source*::RemoveObserver
    - erase
    - begin
    linkageType: ''
    returnType: void
    signature: void Remove(Source* source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/scoped_observer.h:38,1
    - Dst: RemoveObserver
      Src: /src/brpc/src/butil/scoped_observer.h:39,1
    - Dst: clear
      Src: /src/brpc/src/butil/scoped_observer.h:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: ScopedObserver::RemoveAll
    functionSourceFile: /src/brpc/src/butil/scoped_observer.h
    functionUses: 0
    functionsReached:
    - size
    - RemoveObserver
    - clear
    linkageType: ''
    returnType: void
    signature: void RemoveAll()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/scoped_observer.h:44,1
    - Dst: begin
      Src: /src/brpc/src/butil/scoped_observer.h:44,1
    - Dst: end
      Src: /src/brpc/src/butil/scoped_observer.h:44,1
    - Dst: end
      Src: /src/brpc/src/butil/scoped_observer.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - source
    argTypes:
    - Source*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: ScopedObserver::IsObserving
    functionSourceFile: /src/brpc/src/butil/scoped_observer.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - begin
    linkageType: ''
    returnType: bool
    signature: bool IsObserving(Source* source) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mach_timebase_info
      Src: /src/brpc/src/butil/time.cpp:45,1
    - Dst: exit
      Src: /src/brpc/src/butil/time.cpp:46,1
    - Dst: gettimeofday
      Src: /src/brpc/src/butil/time.cpp:49,1
    - Dst: exit
      Src: /src/brpc/src/butil/time.cpp:50,1
    - Dst: mach_absolute_time
      Src: /src/brpc/src/butil/time.cpp:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 55
    functionName: InitClock
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 0
    functionsReached:
    - gettimeofday
    - mach_timebase_info
    - exit
    - mach_absolute_time
    linkageType: ''
    returnType: void
    signature: void InitClock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/time.cpp:58,1
    - Dst: exit
      Src: /src/brpc/src/butil/time.cpp:59,1
    - Dst: mach_absolute_time
      Src: /src/brpc/src/butil/time.cpp:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - id
    - time
    argTypes:
    - clockid_t
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 69
    functionName: clock_gettime
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 12
    functionsReached:
    - pthread_once
    - exit
    - mach_absolute_time
    linkageType: ''
    returnType: int
    signature: int clock_gettime(clockid_t id, timespec* time)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 82
    functionName: butil::monotonic_time_ns
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 5
    functionsReached:
    - clock_gettime
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_ns()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/time.cpp:95,1
    - Dst: read
      Src: /src/brpc/src/butil/time.cpp:102,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:137,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:138,1
    - Dst: close
      Src: /src/brpc/src/butil/time.cpp:141,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 1
    argNames:
    - invariant_tsc
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 143
    functionName: butil::detail::read_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 0
    functionsReached:
    - static_cast<char*>
    - open
    - read
    - memmem
    - close
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_cpu_frequency(bool* invariant_tsc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::read_cpu_frequency
      Src: /src/brpc/src/butil/time.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: butil::detail::read_invariant_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 0
    functionsReached:
    - butil::detail::read_cpu_frequency
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_invariant_cpu_frequency()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/time.cpp:95,1
    - Dst: read
      Src: /src/brpc/src/butil/time.cpp:102,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:137,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:138,1
    - Dst: close
      Src: /src/brpc/src/butil/time.cpp:141,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 1
    argNames:
    - invariant_tsc
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 143
    functionName: butil::detail::read_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 1
    functionsReached:
    - static_cast<char*>
    - open
    - read
    - memmem
    - close
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_cpu_frequency(bool* invariant_tsc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::read_cpu_frequency
      Src: /src/brpc/src/butil/time.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: butil::detail::read_invariant_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 0
    functionsReached:
    - butil::detail::read_cpu_frequency
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_invariant_cpu_frequency()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 82
    functionName: butil::monotonic_time_ns
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 5
    functionsReached:
    - clock_gettime
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_ns()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/time.cpp:95,1
    - Dst: read
      Src: /src/brpc/src/butil/time.cpp:102,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:137,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:138,1
    - Dst: close
      Src: /src/brpc/src/butil/time.cpp:141,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 1
    argNames:
    - invariant_tsc
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 143
    functionName: butil::detail::read_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 2
    functionsReached:
    - static_cast<char*>
    - open
    - read
    - memmem
    - close
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_cpu_frequency(bool* invariant_tsc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::read_cpu_frequency
      Src: /src/brpc/src/butil/time.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: butil::detail::read_invariant_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 0
    functionsReached:
    - butil::detail::read_cpu_frequency
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_invariant_cpu_frequency()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/time.cpp:95,1
    - Dst: read
      Src: /src/brpc/src/butil/time.cpp:102,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:104,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:134,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:137,1
    - Dst: memmem
      Src: /src/brpc/src/butil/time.cpp:138,1
    - Dst: close
      Src: /src/brpc/src/butil/time.cpp:141,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 31
    argCount: 1
    argNames:
    - invariant_tsc
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 143
    functionName: butil::detail::read_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 3
    functionsReached:
    - static_cast<char*>
    - open
    - read
    - memmem
    - close
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_cpu_frequency(bool* invariant_tsc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::detail::read_cpu_frequency
      Src: /src/brpc/src/butil/time.cpp:148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: butil::detail::read_invariant_cpu_frequency
    functionSourceFile: /src/brpc/src/butil/time.cpp
    functionUses: 0
    functionsReached:
    - butil::detail::read_cpu_frequency
    linkageType: ''
    returnType: int64_t
    signature: int64_t read_invariant_cpu_frequency()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - fd
    - ','
    - buf
    - ','
    - count
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: write
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 67
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: write(fd, buf, count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:202,1
    - Dst: getpid
      Src: /src/brpc/src/butil/logging.cc:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: logging::CurrentProcessId
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - getpid
    - GetCurrentProcessId
    linkageType: ''
    returnType: int32_t
    signature: int32_t CurrentProcessId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: unlink
      Src: /src/brpc/src/butil/logging.cc:214,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' log_name'
    argTypes:
    - PathString
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: logging::DeleteFilePath
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - c_str
    - DeleteFile
    - unlink
    linkageType: ''
    returnType: void
    signature: void DeleteFilePath(const PathString& log_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/logging.cc:220,1
    - Dst: read
      Src: /src/brpc/src/butil/logging.cc:225,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/logging.cc:232,1
    - Dst: std::string
      Src: /src/brpc/src/butil/logging.cc:232,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 233
    functionName: logging::GetProcessName
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath
    - open
    - std::string
    - read
    linkageType: ''
    returnType: PathString
    signature: PathString GetProcessName()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleFileName
      Src: /src/brpc/src/butil/logging.cc:240,1
    - Dst: PathString::rfind
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::size
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::erase
      Src: /src/brpc/src/butil/logging.cc:246,1
    - Dst: logging::GetProcessName
      Src: /src/brpc/src/butil/logging.cc:250,1
    - Dst: PathString
      Src: /src/brpc/src/butil/logging.cc:253,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: logging::GetDefaultLogFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - PathString::rfind
    - PathString
    - PathString::size
    - logging::GetProcessName
    - PathString::erase
    - GetModuleFileName
    linkageType: ''
    returnType: PathString
    signature: PathString GetDefaultLogFile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::LockLogging
      Src: /src/brpc/src/butil/logging.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: logging::LoggingLock::LoggingLock
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::LoggingLock::LockLogging
    linkageType: ''
    returnType: void
    signature: void LoggingLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnlockLogging
      Src: /src/brpc/src/butil/logging.cc:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: ~LoggingLock()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - UnlockLogging
    linkageType: ''
    returnType: void
    signature: void ~LoggingLock()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:284,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::begin
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::end
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::append
      Src: /src/brpc/src/butil/logging.cc:288,1
    - Dst: ::CreateMutex
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: GetLastError
      Src: /src/brpc/src/butil/logging.cc:294,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:295,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/butil/logging.cc:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - lock_log
    - new_log_file
    argTypes:
    - LogLockingState
    - LogChar*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 306
    functionName: logging::LoggingLock::Init
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - ::CreateMutex
    - GetLastError
    - butil::debug::BreakDebugger
    - butil::Mutex::Mutex
    - std::wstring::end
    - std::wstring::append
    - GetDefaultLogFile
    - std::wstring::c_str
    - std::wstring::begin
    - std::replace
    linkageType: ''
    returnType: void
    signature: void Init(LogLockingState lock_log, const LogChar* new_log_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::WaitForSingleObject
      Src: /src/brpc/src/butil/logging.cc:312,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/logging.cc:319,1
    - Dst: lock
      Src: /src/brpc/src/butil/logging.cc:323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 309
    functionDepth: 5
    functionLinenumber: 309
    functionLinenumberEnd: 325
    functionName: logging::LoggingLock::LockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - pthread_mutex_lock
    - lock
    - ::WaitForSingleObject
    linkageType: ''
    returnType: void
    signature: void LockLogging()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReleaseMutex
      Src: /src/brpc/src/butil/logging.cc:330,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/logging.cc:332,1
    - Dst: unlock
      Src: /src/brpc/src/butil/logging.cc:335,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 327
    functionDepth: 5
    functionLinenumber: 327
    functionLinenumberEnd: 337
    functionName: logging::LoggingLock::UnlockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - ReleaseMutex
    - unlock
    linkageType: ''
    returnType: void
    signature: void UnlockLogging()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: logging::GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: PathString::PathString
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:389,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:397,1
    - Dst: fopen
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: berror
      Src: /src/brpc/src/butil/logging.cc:401,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 408
    functionName: logging::InitializeLogFileHandle
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateFile
    - fopen
    - logging::GetDefaultLogFile
    - PathString::PathString
    - fprintf
    - c_str
    - berror
    - SetFilePointer
    linkageType: ''
    returnType: bool
    signature: bool InitializeLogFileHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:412,1
    - Dst: fclose
      Src: /src/brpc/src/butil/logging.cc:414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log
    argTypes:
    - FileHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 416
    functionName: logging::CloseFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CloseHandle
    - fclose
    linkageType: ''
    returnType: void
    signature: void CloseFile(FileHandle log)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::CloseFile
      Src: /src/brpc/src/butil/logging.cc:422,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 424
    functionName: logging::CloseLogFileUnlocked
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::CloseFile
    linkageType: ''
    returnType: void
    signature: void CloseLogFileUnlocked()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::Init
      Src: /src/brpc/src/butil/logging.cc:434,1
    - Dst: logging::InitializeLogFileHandle
      Src: /src/brpc/src/butil/logging.cc:436,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:438,1
    - Dst: WriteFile
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<DWORD>
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: fwrite
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: fflush
      Src: /src/brpc/src/butil/logging.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' log'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 426
    functionDepth: 2
    functionLinenumber: 426
    functionLinenumberEnd: 447
    functionName: logging::Log2File
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - logging::InitializeLogFileHandle
    - logging::LoggingLock::Init
    - fwrite
    - fflush
    - data
    - static_cast<DWORD>
    - size
    - WriteFile
    - SetFilePointer
    linkageType: ''
    returnType: void
    signature: void Log2File(const std::string& log)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:202,1
    - Dst: getpid
      Src: /src/brpc/src/butil/logging.cc:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: logging::CurrentProcessId
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - getpid
    - GetCurrentProcessId
    linkageType: ''
    returnType: int32_t
    signature: int32_t CurrentProcessId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: unlink
      Src: /src/brpc/src/butil/logging.cc:214,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' log_name'
    argTypes:
    - PathString
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: logging::DeleteFilePath
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - c_str
    - DeleteFile
    - unlink
    linkageType: ''
    returnType: void
    signature: void DeleteFilePath(const PathString& log_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/logging.cc:220,1
    - Dst: read
      Src: /src/brpc/src/butil/logging.cc:225,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/logging.cc:232,1
    - Dst: std::string
      Src: /src/brpc/src/butil/logging.cc:232,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 233
    functionName: logging::GetProcessName
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - butil::FilePath
    - open
    - std::string
    - read
    linkageType: ''
    returnType: PathString
    signature: PathString GetProcessName()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleFileName
      Src: /src/brpc/src/butil/logging.cc:240,1
    - Dst: PathString::rfind
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::size
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::erase
      Src: /src/brpc/src/butil/logging.cc:246,1
    - Dst: logging::GetProcessName
      Src: /src/brpc/src/butil/logging.cc:250,1
    - Dst: PathString
      Src: /src/brpc/src/butil/logging.cc:253,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: logging::GetDefaultLogFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - PathString::rfind
    - PathString
    - PathString::size
    - logging::GetProcessName
    - PathString::erase
    - GetModuleFileName
    linkageType: ''
    returnType: PathString
    signature: PathString GetDefaultLogFile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::LockLogging
      Src: /src/brpc/src/butil/logging.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 6
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: logging::LoggingLock::LoggingLock
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::LoggingLock::LockLogging
    linkageType: ''
    returnType: void
    signature: void LoggingLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnlockLogging
      Src: /src/brpc/src/butil/logging.cc:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: ~LoggingLock()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - UnlockLogging
    linkageType: ''
    returnType: void
    signature: void ~LoggingLock()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:284,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::begin
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::end
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::append
      Src: /src/brpc/src/butil/logging.cc:288,1
    - Dst: ::CreateMutex
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: GetLastError
      Src: /src/brpc/src/butil/logging.cc:294,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:295,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/butil/logging.cc:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - lock_log
    - new_log_file
    argTypes:
    - LogLockingState
    - LogChar*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 306
    functionName: logging::LoggingLock::Init
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - ::CreateMutex
    - GetLastError
    - butil::debug::BreakDebugger
    - butil::Mutex::Mutex
    - std::wstring::end
    - std::wstring::append
    - GetDefaultLogFile
    - std::wstring::c_str
    - std::wstring::begin
    - std::replace
    linkageType: ''
    returnType: void
    signature: void Init(LogLockingState lock_log, const LogChar* new_log_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::WaitForSingleObject
      Src: /src/brpc/src/butil/logging.cc:312,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/logging.cc:319,1
    - Dst: lock
      Src: /src/brpc/src/butil/logging.cc:323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 309
    functionDepth: 5
    functionLinenumber: 309
    functionLinenumberEnd: 325
    functionName: logging::LoggingLock::LockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - pthread_mutex_lock
    - lock
    - ::WaitForSingleObject
    linkageType: ''
    returnType: void
    signature: void LockLogging()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReleaseMutex
      Src: /src/brpc/src/butil/logging.cc:330,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/logging.cc:332,1
    - Dst: unlock
      Src: /src/brpc/src/butil/logging.cc:335,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 327
    functionDepth: 5
    functionLinenumber: 327
    functionLinenumberEnd: 337
    functionName: logging::LoggingLock::UnlockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - ReleaseMutex
    - unlock
    linkageType: ''
    returnType: void
    signature: void UnlockLogging()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: logging::GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: PathString::PathString
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:389,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:397,1
    - Dst: fopen
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: berror
      Src: /src/brpc/src/butil/logging.cc:401,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 408
    functionName: logging::InitializeLogFileHandle
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - CreateFile
    - fopen
    - logging::GetDefaultLogFile
    - PathString::PathString
    - fprintf
    - c_str
    - berror
    - SetFilePointer
    linkageType: ''
    returnType: bool
    signature: bool InitializeLogFileHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:412,1
    - Dst: fclose
      Src: /src/brpc/src/butil/logging.cc:414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log
    argTypes:
    - FileHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 416
    functionName: logging::CloseFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - CloseHandle
    - fclose
    linkageType: ''
    returnType: void
    signature: void CloseFile(FileHandle log)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::CloseFile
      Src: /src/brpc/src/butil/logging.cc:422,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 424
    functionName: logging::CloseLogFileUnlocked
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::CloseFile
    linkageType: ''
    returnType: void
    signature: void CloseLogFileUnlocked()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::Init
      Src: /src/brpc/src/butil/logging.cc:434,1
    - Dst: logging::InitializeLogFileHandle
      Src: /src/brpc/src/butil/logging.cc:436,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:438,1
    - Dst: WriteFile
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<DWORD>
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: fwrite
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: fflush
      Src: /src/brpc/src/butil/logging.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' log'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 426
    functionDepth: 2
    functionLinenumber: 426
    functionLinenumberEnd: 447
    functionName: logging::Log2File
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - logging::InitializeLogFileHandle
    - logging::LoggingLock::Init
    - fwrite
    - fflush
    - data
    - static_cast<DWORD>
    - size
    - WriteFile
    - SetFilePointer
    linkageType: ''
    returnType: void
    signature: void Log2File(const std::string& log)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/src/butil/logging.cc:462,1
    - Dst: time
      Src: /src/brpc/src/butil/logging.cc:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 467
    functionName: logging::GetTimestamp
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - time
    - gettimeofday
    linkageType: ''
    returnType: TimeVal
    signature: TimeVal GetTimestamp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:472,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:473,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 469
    functionDepth: 0
    functionLinenumber: 469
    functionLinenumberEnd: 486
    functionName: logging::LogInfo
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::clear
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT LogInfo
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 470
    functionName: ~LogInfo()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LogInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:472,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:473,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 475
    functionName: logging::clear
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::clear
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 493
    functionName: logging::LogRequest
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT LogRequest
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::AsyncLogger::GetInstance
      Src: /src/brpc/src/butil/logging.cc:514,1
    - Dst: repeated_sleep
      Src: /src/brpc/src/butil/logging.cc:516,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 513
    functionDepth: 2
    functionLinenumber: 513
    functionLinenumberEnd: 518
    functionName: logging::AsyncLogger::AtExit
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::AsyncLogger::GetInstance
    - repeated_sleep
    linkageType: ''
    returnType: void
    signature: void AtExit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/logging.cc:540,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 542
    functionName: logging::AsyncLogger::GetInstance
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: AsyncLogger
    signature: AsyncLogger * AsyncLogger::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Start
      Src: /src/brpc/src/butil/logging.cc:550,1
    - Dst: atexit
      Src: /src/brpc/src/butil/logging.cc:553,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: logging::AsyncLogger::AsyncLogger
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - Start
    - atexit
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::AsyncLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StopAndJoin
      Src: /src/brpc/src/butil/logging.cc:557,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 558
    functionName: AsyncLogger::~AsyncLogger()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - StopAndJoin
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::~AsyncLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLog
      Src: /src/brpc/src/butil/logging.cc:568,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:568,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:568,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/logging.cc:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 5
    argNames:
    - severity
    - file
    - line
    - func
    - content
    argTypes:
    - int
    - butil::StringPiece
    - int
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 571
    functionName: logging::LogInfoToLogStr
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - butil::StringPiece::data
    - logging::PrintLog
    linkageType: ''
    returnType: std::string
    signature: "std::string LogInfoToLogStr(int severity, butil::StringPiece file,\n
      \                           int line, butil::StringPiece func,\n                            butil::StringPiece
      content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogInfoToLogStr
      Src: /src/brpc/src/butil/logging.cc:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 573
    functionDepth: 2
    functionLinenumber: 573
    functionLinenumberEnd: 576
    functionName: logging::LogInfo2LogStr
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::LogInfoToLogStr
    linkageType: ''
    returnType: std::string
    signature: std::string LogInfo2LogStr(const LogInfo& log_info)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: content::empty
      Src: /src/brpc/src/butil/logging.cc:579,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/logging.cc:584,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:586,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:588,1
    - Dst: butil::get_object<LogRequest>
      Src: /src/brpc/src/butil/logging.cc:592,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:595,1
    - Dst: logging::AsyncLogger::LogImpl
      Src: /src/brpc/src/butil/logging.cc:599,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 600
    functionName: logging::AsyncLogger::Log
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::AsyncLogger::DoLog
    - content::empty
    - load
    - fetch_add
    - logging::AsyncLogger::LogImpl
    - butil::get_object<LogRequest>
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::Log(const LogInfo& log_info)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: content::empty
      Src: /src/brpc/src/butil/logging.cc:603,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/logging.cc:608,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:610,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:612,1
    - Dst: butil::get_object<LogRequest>
      Src: /src/brpc/src/butil/logging.cc:616,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:619,1
    - Dst: std::move
      Src: /src/brpc/src/butil/logging.cc:622,1
    - Dst: logging::AsyncLogger::LogImpl
      Src: /src/brpc/src/butil/logging.cc:623,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 624
    functionName: logging::AsyncLogger::Log
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::move
    - logging::AsyncLogger::DoLog
    - content::empty
    - load
    - fetch_add
    - logging::AsyncLogger::LogImpl
    - butil::get_object<LogRequest>
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::Log(LogInfo&& log_info)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/butil/logging.cc:630,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:646,1
    - Dst: logging::AsyncLogger::IsLogComplete
      Src: /src/brpc/src/butil/logging.cc:648,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:649,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:654,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:655,1
    - Dst: logging::AsyncLogger::LogTask
      Src: /src/brpc/src/butil/logging.cc:657,1
    - Dst: Signal
      Src: /src/brpc/src/butil/logging.cc:661,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - log_req
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 626
    functionDepth: 1
    functionLinenumber: 626
    functionLinenumberEnd: 663
    functionName: logging::AsyncLogger::LogImpl
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::AsyncLogger::DoLog
    - logging::AsyncLogger::LogTask
    - butil::return_object
    - load
    - Signal
    - BAIDU_SCOPED_LOCK
    - logging::AsyncLogger::IsLogComplete
    - exchange
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::LogImpl(LogRequest* log_req)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/butil/logging.cc:666,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:667,1
    - Dst: Signal
      Src: /src/brpc/src/butil/logging.cc:668,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/logging.cc:670,1
    - Dst: Join
      Src: /src/brpc/src/butil/logging.cc:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 673
      start: 665
    functionDepth: 1
    functionLinenumber: 665
    functionLinenumberEnd: 673
    functionName: logging::AsyncLogger::StopAndJoin
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - Join
    - Signal
    - HasBeenJoined
    - BAIDU_SCOPED_LOCK
    - exchange
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::StopAndJoin()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:677,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:678,1
    - Dst: Wait
      Src: /src/brpc/src/butil/logging.cc:680,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:682,1
    - Dst: logging::AsyncLogger::LogTask
      Src: /src/brpc/src/butil/logging.cc:687,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 675
    functionDepth: 1
    functionLinenumber: 675
    functionLinenumberEnd: 690
    functionName: logging::AsyncLogger::Run
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - Wait
    - load
    - logging::AsyncLogger::LogTask
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LogRequest*::log_info::content::empty
      Src: /src/brpc/src/butil/logging.cc:695,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:698,1
    - Dst: LogRequest*::log_info::content::empty
      Src: /src/brpc/src/butil/logging.cc:705,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:706,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:709,1
    - Dst: LogRequest*::log_info::content::empty
      Src: /src/brpc/src/butil/logging.cc:711,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:712,1
    - Dst: logging::AsyncLogger::IsLogComplete
      Src: /src/brpc/src/butil/logging.cc:716,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:717,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - req
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 692
    functionDepth: 1
    functionLinenumber: 692
    functionLinenumberEnd: 721
    functionName: logging::AsyncLogger::LogTask
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::AsyncLogger::IsLogComplete
    - butil::return_object
    - logging::AsyncLogger::DoLog
    - LogRequest*::log_info::content::empty
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::LogTask(LogRequest* req)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:725,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/butil/logging.cc:729,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:735,1
    - Dst: sched_yield
      Src: /src/brpc/src/butil/logging.cc:746,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:753,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - old_head
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 760
    functionName: logging::AsyncLogger::IsLogComplete
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - sched_yield
    - fprintf
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool AsyncLogger::IsLogComplete(LogRequest* old_head)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:763,1
    - Dst: LogRequest*::log_info::clear
      Src: /src/brpc/src/butil/logging.cc:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 762
    functionDepth: 1
    functionLinenumber: 762
    functionLinenumberEnd: 765
    functionName: logging::AsyncLogger::DoLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 5
    functionsReached:
    - logging::AsyncLogger::DoLog
    - LogRequest*::log_info::clear
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::DoLog(LogRequest* req)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Log2File
      Src: /src/brpc/src/butil/logging.cc:769,1
    - Dst: LogInfo2LogStr
      Src: /src/brpc/src/butil/logging.cc:769,1
    - Dst: Log2File
      Src: /src/brpc/src/butil/logging.cc:771,1
    - Dst: fetch_sub
      Src: /src/brpc/src/butil/logging.cc:773,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 767
    functionDepth: 0
    functionLinenumber: 767
    functionLinenumberEnd: 774
    functionName: logging::AsyncLogger::DoLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 5
    functionsReached:
    - fetch_sub
    - LogInfo2LogStr
    - Log2File
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::DoLog(const LogInfo& log_info)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 780
    functionName: logging::LoggingSettings::LoggingSettings
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LoggingSettings::LoggingSettings()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/logging.cc:785,1
    - Dst: logging::LoggingLock::Init
      Src: /src/brpc/src/butil/logging.cc:794,1
    - Dst: logging::CloseLogFileUnlocked
      Src: /src/brpc/src/butil/logging.cc:799,1
    - Dst: PathString::PathString
      Src: /src/brpc/src/butil/logging.cc:802,1
    - Dst: logging::GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:806,1
    - Dst: logging::DeleteFilePath
      Src: /src/brpc/src/butil/logging.cc:809,1
    - Dst: logging::InitializeLogFileHandle
      Src: /src/brpc/src/butil/logging.cc:811,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - ' settings'
    argTypes:
    - LoggingSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 782
    functionDepth: 2
    functionLinenumber: 782
    functionLinenumberEnd: 812
    functionName: logging::BaseInitLoggingImpl
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::InitializeLogFileHandle
    - logging::GetDefaultLogFile
    - logging::LoggingLock::Init
    - logging::CloseLogFileUnlocked
    - PathString::PathString
    - CHECK_EQ
    - logging::DeleteFilePath
    linkageType: ''
    returnType: bool
    signature: bool BaseInitLoggingImpl(const LoggingSettings& settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/logging.cc:815,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 814
    functionDepth: 0
    functionLinenumber: 814
    functionLinenumberEnd: 816
    functionName: logging::SetMinLogLevel
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 6
    functionsReached:
    - std::min
    linkageType: ''
    returnType: void
    signature: void SetMinLogLevel(int level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 818
    functionDepth: 0
    functionLinenumber: 818
    functionLinenumberEnd: 820
    functionName: logging::GetMinLogLevel
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetMinLogLevel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - enable_dialogs
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: logging::SetShowErrorDialogs
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetShowErrorDialogs(bool enable_dialogs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - handler
    argTypes:
    - LogAssertHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 828
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 828
    functionName: logging::SetLogAssertHandler
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetLogAssertHandler(LogAssertHandler handler)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' os'
    - severity
    argTypes:
    - std::ostream
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 842
      start: 833
    functionDepth: 0
    functionLinenumber: 833
    functionLinenumberEnd: 842
    functionName: logging::PrintLogSeverity
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintLogSeverity(std::ostream& os, int severity)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLogSeverity
      Src: /src/brpc/src/butil/logging.cc:847,1
    - Dst: localtime_s
      Src: /src/brpc/src/butil/logging.cc:851,1
    - Dst: localtime_r
      Src: /src/brpc/src/butil/logging.cc:853,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:855,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:857,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:859,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:860,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:861,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:862,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:863,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:865,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:868,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:868,1
    - Dst: logging::CurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:868,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:870,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:870,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/logging.cc:871,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:871,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:873,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:873,1
    - Dst: bthread_self
      Src: /src/brpc/src/butil/logging.cc:873,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/logging.cc:877,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/logging.cc:878,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/butil/logging.cc:883,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:888,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 6
    argNames:
    - ' os'
    - severity
    - file
    - line
    - func
    - tv
    argTypes:
    - std::ostream
    - int
    - butil::StringPiece
    - int
    - butil::StringPiece
    - TimeVal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 844
    functionDepth: 1
    functionLinenumber: 844
    functionLinenumberEnd: 889
    functionName: logging::PrintLogPrefix
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::setw
    - logging::CurrentProcessId
    - butil::PlatformThread::CurrentId
    - logging::PrintLogSeverity
    - localtime_s
    - butil::StringPiece::remove_suffix
    - bthread_self
    - fill
    - localtime_r
    - std::setfill
    - butil::StringPiece::empty
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: void
    signature: "void PrintLogPrefix(std::ostream& os, int severity,\n                    butil::StringPiece
      file, int line,\n                    butil::StringPiece func, TimeVal tv)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLogPrefix
      Src: /src/brpc/src/butil/logging.cc:893,1
    - Dst: logging::GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:893,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' os'
    - severity
    - file
    - line
    argTypes:
    - std::ostream
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 894
      start: 891
    functionDepth: 1
    functionLinenumber: 891
    functionLinenumberEnd: 894
    functionName: logging::PrintLogPrefix
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::GetTimestamp
    - logging::PrintLogPrefix
    linkageType: ''
    returnType: void
    signature: "void PrintLogPrefix(std::ostream& os, int severity,\n                    const
      char* file, int line)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: localtime_s
      Src: /src/brpc/src/butil/logging.cc:914,1
    - Dst: localtime_r
      Src: /src/brpc/src/butil/logging.cc:916,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:918,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:920,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:922,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:923,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:924,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:925,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:926,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:928,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:931,1
    - Dst: logging::CurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:934,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/logging.cc:936,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/logging.cc:939,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/logging.cc:940,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/butil/logging.cc:945,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 6
    argNames:
    - ' os'
    - severity
    - file
    - func
    - line
    - tv
    argTypes:
    - std::ostream
    - int
    - butil::StringPiece
    - butil::StringPiece
    - int
    - TimeVal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 896
    functionDepth: 1
    functionLinenumber: 896
    functionLinenumberEnd: 949
    functionName: logging::PrintLogPrefixAsJSON
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::setw
    - butil::PlatformThread::CurrentId
    - localtime_s
    - butil::StringPiece::remove_suffix
    - fill
    - localtime_r
    - logging::CurrentProcessId
    - butil::StringPiece::empty
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: void
    signature: "void PrintLogPrefixAsJSON(std::ostream& os, int severity,\n                                 butil::StringPiece
      file,\n                                 butil::StringPiece func,\n                                 int
      line, TimeVal tv)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:952,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:952,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 951
    functionDepth: 0
    functionLinenumber: 951
    functionLinenumberEnd: 965
    functionName: logging::EscapeJson
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - begin
    linkageType: ''
    returnType: void
    signature: void EscapeJson(std::ostream& os, const butil::StringPiece& s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::EscapeJson
      Src: /src/brpc/src/butil/logging.cc:969,1
    - Dst: write
      Src: /src/brpc/src/butil/logging.cc:971,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:971,1
    - Dst: length
      Src: /src/brpc/src/butil/logging.cc:971,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 973
      start: 967
    functionDepth: 1
    functionLinenumber: 967
    functionLinenumberEnd: 973
    functionName: logging::OutputLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::EscapeJson
    - length
    - write
    - data
    linkageType: ''
    returnType: void
    signature: void OutputLog(std::ostream& os, const butil::StringPiece& s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLogPrefix
      Src: /src/brpc/src/butil/logging.cc:978,1
    - Dst: logging::GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:978,1
    - Dst: logging::OutputLog
      Src: /src/brpc/src/butil/logging.cc:979,1
    - Dst: logging::PrintLogPrefixAsJSON
      Src: /src/brpc/src/butil/logging.cc:982,1
    - Dst: logging::GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:982,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:984,1
    - Dst: logging::OutputLog
      Src: /src/brpc/src/butil/logging.cc:991,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:994,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:994,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 6
    argNames:
    - ' os'
    - severity
    - file
    - line
    - func
    - ' content'
    argTypes:
    - std::ostream
    - int
    - char*
    - int
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 975
    functionDepth: 2
    functionLinenumber: 975
    functionLinenumberEnd: 1000
    functionName: logging::PrintLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::GetTimestamp
    - logging::PrintLogPrefixAsJSON
    - size
    - empty
    - logging::OutputLog
    - logging::PrintLogPrefix
    linkageType: ''
    returnType: void
    signature: "void PrintLog(std::ostream& os, int severity, const char* file, int
      line,\n              const char* func, const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLog
      Src: /src/brpc/src/butil/logging.cc:1005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' os'
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - std::ostream
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1006
    functionName: logging::PrintLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::PrintLog
    linkageType: ''
    returnType: void
    signature: "void PrintLog(std::ostream& os,\n              int severity, const
      char* file, int line,\n              const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 1011
    functionDepth: 0
    functionLinenumber: 1011
    functionLinenumberEnd: 1011
    functionName: logging::DoublyBufferedLogSink::DoublyBufferedLogSink
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DoublyBufferedLogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/logging.cc:1019,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1021
      start: 1018
    functionDepth: 1
    functionLinenumber: 1018
    functionLinenumberEnd: 1021
    functionName: logging::DoublyBufferedLogSink::GetInstance
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: DoublyBufferedLogSink
    signature: DoublyBufferedLogSink * DoublyBufferedLogSink::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - LogSink*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1031
      start: 1027
    functionDepth: 0
    functionLinenumber: 1027
    functionLinenumberEnd: 1031
    functionName: operator()(LogSink*& ptr)
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(LogSink*& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/logging.cc:1036,1
    - Dst: logging::DoublyBufferedLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1036,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sink
    argTypes:
    - LogSink*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1034
    functionDepth: 1
    functionLinenumber: 1034
    functionLinenumberEnd: 1038
    functionName: logging::SetLogSink
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 19
    functionsReached:
    - logging::DoublyBufferedLogSink::GetInstance
    - CHECK
    linkageType: ''
    returnType: LogSink
    signature: LogSink * SetLogSink(LogSink* sink)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1062,1
    - Dst: GetModuleFileNameW
      Src: /src/brpc/src/butil/logging.cc:1076,1
    - Dst: wcsrchr
      Src: /src/brpc/src/butil/logging.cc:1077,1
    - Dst: wcscat_s
      Src: /src/brpc/src/butil/logging.cc:1080,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/src/butil/logging.cc:1082,1
    - Dst: std::wstring::empty
      Src: /src/brpc/src/butil/logging.cc:1083,1
    - Dst: memset
      Src: /src/brpc/src/butil/logging.cc:1087,1
    - Dst: CreateProcessW
      Src: /src/brpc/src/butil/logging.cc:1091,1
    - Dst: WaitForSingleObject
      Src: /src/brpc/src/butil/logging.cc:1093,1
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:1094,1
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:1095,1
    - Dst: MessageBoxW
      Src: /src/brpc/src/butil/logging.cc:1098,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1061
    functionDepth: 1
    functionLinenumber: 1061
    functionLinenumberEnd: 1105
    functionName: logging::DisplayDebugMessageInDialog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - wcsrchr
    - std::wstring::empty
    - butil::UTF8ToWide
    - CloseHandle
    - CreateProcessW
    - memset
    - WaitForSingleObject
    - empty
    - wcscat_s
    - GetModuleFileNameW
    - MessageBoxW
    linkageType: ''
    returnType: void
    signature: void DisplayDebugMessageInDialog(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::StringSink::OnLogMessage
      Src: /src/brpc/src/butil/logging.cc:1111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1109
    functionDepth: 1
    functionLinenumber: 1109
    functionLinenumberEnd: 1112
    functionName: logging::StringSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::StringSink::OnLogMessage
    linkageType: ''
    returnType: bool
    signature: "bool StringSink::OnLogMessage(int severity, const char* file, int
      line,\n                              const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintLog
      Src: /src/brpc/src/butil/logging.cc:1118,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/logging.cc:1119,1
    - Dst: append
      Src: /src/brpc/src/butil/logging.cc:1122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 5
    argNames:
    - severity
    - file
    - line
    - func
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1125
      start: 1114
    functionDepth: 1
    functionLinenumber: 1114
    functionLinenumberEnd: 1125
    functionName: logging::StringSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - append
    - PrintLog
    - std::ostringstream::str
    linkageType: ''
    returnType: bool
    signature: "bool StringSink::OnLogMessage(int severity, const char* file,\n                              int
      line, const char* func,\n                              const butil::StringPiece&
      content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/logging.cc:1128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1129
      start: 1127
    functionDepth: 0
    functionLinenumber: 1127
    functionLinenumberEnd: 1129
    functionName: CharArrayStreamBuf::~CharArrayStreamBuf()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::~CharArrayStreamBuf()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/logging.cc:1132,1
    - Dst: std::max
      Src: /src/brpc/src/butil/logging.cc:1135,1
    - Dst: malloc
      Src: /src/brpc/src/butil/logging.cc:1136,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/logging.cc:1137,1
    - Dst: setp
      Src: /src/brpc/src/butil/logging.cc:1138,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/logging.cc:1139,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/logging.cc:1141,1
    - Dst: free
      Src: /src/brpc/src/butil/logging.cc:1142,1
    - Dst: setp
      Src: /src/brpc/src/butil/logging.cc:1146,1
    - Dst: pbump
      Src: /src/brpc/src/butil/logging.cc:1147,1
    - Dst: sputc
      Src: /src/brpc/src/butil/logging.cc:1149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1150
      start: 1131
    functionDepth: 1
    functionLinenumber: 1131
    functionLinenumberEnd: 1150
    functionName: logging::CharArrayStreamBuf::overflow
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::max
    - free
    - sputc
    - pbump
    - malloc
    - memcpy
    - BAIDU_UNLIKELY
    - setp
    - brpc::http_message_needs_eof
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::overflow(int ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1155
      start: 1152
    functionDepth: 0
    functionLinenumber: 1152
    functionLinenumberEnd: 1155
    functionName: logging::CharArrayStreamBuf::sync
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::sync()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setp
      Src: /src/brpc/src/butil/logging.cc:1158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1159
      start: 1157
    functionDepth: 0
    functionLinenumber: 1157
    functionLinenumberEnd: 1159
    functionName: logging::CharArrayStreamBuf::reset
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - setp
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - LogChar*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1161
    functionDepth: 0
    functionLinenumber: 1161
    functionLinenumberEnd: 1167
    functionName: "& LogStream::SetPosition(const LogChar* file, int line,\n                                  LogSeverity
      severity)"
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: "LogStream & LogStream::SetPosition(const LogChar* file, int line,\n
      \                                 LogSeverity severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - LogChar*
    - int
    - LogChar*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1177
      start: 1169
    functionDepth: 0
    functionLinenumber: 1169
    functionLinenumberEnd: 1177
    functionName: "& LogStream::SetPosition(const LogChar* file, int line,\n                                  const
      LogChar* func,\n                                  LogSeverity severity)"
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: "LogStream & LogStream::SetPosition(const LogChar* file, int line,\n
      \                                 const LogChar* func,\n                                  LogSeverity
      severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1183
    functionName: logging::is_bthread_linked
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_bthread_linked()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1193
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1193
    functionName: logging::destroy_tls_streams
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void destroy_tls_streams(void* data)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: logging::is_bthread_linked
      Src: /src/brpc/src/butil/logging.cc:1195,1
    - Dst: bthread_key_create
      Src: /src/brpc/src/butil/logging.cc:1196,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:1198,1
    - Dst: exit
      Src: /src/brpc/src/butil/logging.cc:1199,1
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/logging.cc:1202,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:1204,1
    - Dst: exit
      Src: /src/brpc/src/butil/logging.cc:1205,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1194
    functionDepth: 3
    functionLinenumber: 1194
    functionLinenumberEnd: 1208
    functionName: logging::create_stream_key_or_die
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::is_bthread_linked
    - exit
    - fprintf
    - pthread_key_create
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void create_stream_key_or_die()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/logging.cc:1210,1
    - Dst: logging::is_bthread_linked
      Src: /src/brpc/src/butil/logging.cc:1211,1
    - Dst: bthread_getspecific
      Src: /src/brpc/src/butil/logging.cc:1212,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/logging.cc:1214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1209
    functionDepth: 3
    functionLinenumber: 1209
    functionLinenumberEnd: 1216
    functionName: logging::get_tls_stream_array
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - bthread_getspecific
    - pthread_getspecific
    - pthread_once
    - logging::is_bthread_linked
    linkageType: ''
    returnType: LogStream
    signature: LogStream ** get_tls_stream_array()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: logging::get_tls_stream_array
      Src: /src/brpc/src/butil/logging.cc:1219,1
    - Dst: LogStream::LogStream
      Src: /src/brpc/src/butil/logging.cc:1221,1
    - Dst: memset
      Src: /src/brpc/src/butil/logging.cc:1222,1
    - Dst: logging::is_bthread_linked
      Src: /src/brpc/src/butil/logging.cc:1223,1
    - Dst: bthread_setspecific
      Src: /src/brpc/src/butil/logging.cc:1224,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/logging.cc:1226,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1230
      start: 1218
    functionDepth: 4
    functionLinenumber: 1218
    functionLinenumberEnd: 1230
    functionName: logging::get_or_new_tls_stream_array
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::get_tls_stream_array
    - bthread_setspecific
    - LogStream::LogStream
    - logging::is_bthread_linked
    - memset
    - pthread_setspecific
    linkageType: ''
    returnType: LogStream
    signature: LogStream ** get_or_new_tls_stream_array()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/logging.cc:1238,1
    - Dst: logging::get_or_new_tls_stream_array
      Src: /src/brpc/src/butil/logging.cc:1241,1
    - Dst: LogStream::LogStream
      Src: /src/brpc/src/butil/logging.cc:1244,1
    - Dst: LogStream*::empty
      Src: /src/brpc/src/butil/logging.cc:1247,1
    - Dst: LogStream*::SetPosition
      Src: /src/brpc/src/butil/logging.cc:1248,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - LogChar*
    - int
    - LogChar*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1251
      start: 1232
    functionDepth: 5
    functionLinenumber: 1232
    functionLinenumberEnd: 1251
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::get_or_new_tls_stream_array
    - LogStream*::empty
    - DCHECK_LT
    - LogStream::LogStream
    - LogStream*::SetPosition
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file,\n                                  int
      line,\n                                  const LogChar* func,\n                                  LogSeverity
      severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - LogChar*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1257
      start: 1253
    functionDepth: 1
    functionLinenumber: 1253
    functionLinenumberEnd: 1257
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::CreateLogStream
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file,\n                                  int
      line,\n                                  LogSeverity severity)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LogStream*::Flush
      Src: /src/brpc/src/butil/logging.cc:1261,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - stream
    argTypes:
    - LogStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1259
    functionDepth: 0
    functionLinenumber: 1259
    functionLinenumberEnd: 1263
    functionName: logging::DestroyLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - LogStream*::Flush
    linkageType: ''
    returnType: void
    signature: void DestroyLogStream(LogStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - LogChar*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1267
    functionDepth: 1
    functionLinenumber: 1267
    functionLinenumberEnd: 1270
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::CreateLogStream
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file, int line,\n                                  LogSeverity
      severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogStream::LogStream
      Src: /src/brpc/src/butil/logging.cc:1276,1
    - Dst: LogStream*::SetPosition
      Src: /src/brpc/src/butil/logging.cc:1277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - LogChar*
    - int
    - LogChar*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1273
    functionDepth: 0
    functionLinenumber: 1273
    functionLinenumberEnd: 1279
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - LogStream::LogStream
    - LogStream*::SetPosition
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file, int line,\n                                  const
      LogChar* func,\n                                  LogSeverity severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - LogStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1281
    functionDepth: 0
    functionLinenumber: 1281
    functionLinenumberEnd: 1283
    functionName: logging::DestroyLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyLogStream(LogStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/logging.cc:1290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1292
      start: 1289
    functionDepth: 1
    functionLinenumber: 1289
    functionLinenumberEnd: 1292
    functionName: logging::DefaultLogSink::GetInstance
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: DefaultLogSink
    signature: DefaultLogSink * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::DefaultLogSink::OnLogMessage
      Src: /src/brpc/src/butil/logging.cc:1296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1297
      start: 1294
    functionDepth: 1
    functionLinenumber: 1294
    functionLinenumberEnd: 1297
    functionName: logging::DefaultLogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::DefaultLogSink::OnLogMessage
    linkageType: ''
    returnType: bool
    signature: "bool OnLogMessage(int severity, const char* file, int line,\n                      const
      butil::StringPiece& content) override"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LogInfoToLogStr
      Src: /src/brpc/src/butil/logging.cc:1305,1
    - Dst: fwrite
      Src: /src/brpc/src/butil/logging.cc:1309,1
    - Dst: std::string::data
      Src: /src/brpc/src/butil/logging.cc:1309,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/logging.cc:1309,1
    - Dst: fflush
      Src: /src/brpc/src/butil/logging.cc:1310,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/logging.cc:1316,1
    - Dst: LogInfoToLogStr
      Src: /src/brpc/src/butil/logging.cc:1317,1
    - Dst: Log2File
      Src: /src/brpc/src/butil/logging.cc:1319,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/logging.cc:1322,1
    - Dst: GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:1324,1
    - Dst: as_string
      Src: /src/brpc/src/butil/logging.cc:1328,1
    - Dst: std::move
      Src: /src/brpc/src/butil/logging.cc:1331,1
    - Dst: logging::AsyncLogger::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1334,1
    - Dst: std::move
      Src: /src/brpc/src/butil/logging.cc:1334,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 5
    argNames:
    - severity
    - file
    - line
    - func
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1338
      start: 1299
    functionDepth: 1
    functionLinenumber: 1299
    functionLinenumberEnd: 1338
    functionName: logging::DefaultLogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - std::move
    - LogInfoToLogStr
    - std::string::data
    - Log2File
    - GetTimestamp
    - std::string::empty
    - fflush
    - fwrite
    - as_string
    - logging::AsyncLogger::GetInstance
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: "bool OnLogMessage(int severity, const char* file,\n                      int
      line, const char* func,\n                      const butil::StringPiece& content)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1340
      start: 1340
    functionDepth: 0
    functionLinenumber: 1340
    functionLinenumberEnd: 1340
    functionName: logging::DefaultLogSink::DefaultLogSink
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultLogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1341
      start: 1341
    functionDepth: 0
    functionLinenumber: 1341
    functionLinenumberEnd: 1341
    functionName: ~DefaultLogSink() override
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DefaultLogSink() override
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogStream::empty
      Src: /src/brpc/src/butil/logging.cc:1346,1
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/src/butil/logging.cc:1354,1
    - Dst: butil::debug::StackTrace::Addresses
      Src: /src/brpc/src/butil/logging.cc:1356,1
    - Dst: butil::debug::StackTrace::OutputToStream
      Src: /src/brpc/src/butil/logging.cc:1366,1
    - Dst: butil::debug::StackTrace::OutputToStream
      Src: /src/brpc/src/butil/logging.cc:1368,1
    - Dst: pbump
      Src: /src/brpc/src/butil/logging.cc:1375,1
    - Dst: logging::DoublyBufferedLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1385,1
    - Dst: OnLogMessage
      Src: /src/brpc/src/butil/logging.cc:1387,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1388,1
    - Dst: logging::ComlogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1393,1
    - Dst: logging::DefaultLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1395,1
    - Dst: logging::ComlogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1401,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1402,1
    - Dst: logging::DefaultLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1408,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1409,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1416,1
    - Dst: butil::StringPiece::copy
      Src: /src/brpc/src/butil/logging.cc:1418,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/logging.cc:1418,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/logging.cc:1419,1
    - Dst: log_assert_handler
      Src: /src/brpc/src/butil/logging.cc:1423,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/butil/logging.cc:1423,1
    - Dst: DisplayDebugMessageInDialog
      Src: /src/brpc/src/butil/logging.cc:1431,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/butil/logging.cc:1431,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:1434,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1437
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1437
    functionName: logging::LogStream::FlushWithoutReset
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::DoublyBufferedLogSink::GetInstance
    - butil::debug::BreakDebugger
    - log_assert_handler
    - butil::debug::Alias
    - arraysize
    - butil::StringPiece::as_string
    - pbump
    - logging::ComlogSink::GetInstance
    - logging::LogStream::content
    - butil::debug::StackTrace::StackTrace
    - logging::LogStream::empty
    - OnLogMessage
    - butil::StringPiece::copy
    - logging::DefaultLogSink::GetInstance
    - DisplayDebugMessageInDialog
    - butil::debug::StackTrace::OutputToStream
    - butil::debug::StackTrace::Addresses
    linkageType: ''
    returnType: void
    signature: void LogStream::FlushWithoutReset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - char*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1440
      start: 1439
    functionDepth: 0
    functionLinenumber: 1439
    functionLinenumberEnd: 1440
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogMessage::LogMessage(const char* file, int line, LogSeverity
      severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1445
      start: 1442
    functionDepth: 0
    functionLinenumber: 1442
    functionLinenumberEnd: 1445
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateLogStream
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line,\n                       const
      char* func, LogSeverity severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - file
    - line
    - result
    argTypes:
    - char*
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1448
      start: 1447
    functionDepth: 0
    functionLinenumber: 1447
    functionLinenumberEnd: 1448
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogMessage::LogMessage(const char* file, int line, std::string*
      result)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - file
    - line
    - func
    - result
    argTypes:
    - char*
    - int
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1450
    functionDepth: 0
    functionLinenumber: 1450
    functionLinenumberEnd: 1455
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateLogStream
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line,\n                       const
      char* func, std::string* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - file
    - line
    - severity
    - result
    argTypes:
    - char*
    - int
    - LogSeverity
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1459
      start: 1457
    functionDepth: 0
    functionLinenumber: 1457
    functionLinenumberEnd: 1459
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line, LogSeverity
      severity,\n                       std::string* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 5
    argNames:
    - file
    - line
    - func
    - severity
    - result
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1466
      start: 1461
    functionDepth: 0
    functionLinenumber: 1461
    functionLinenumberEnd: 1466
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateLogStream
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line, const char*
      func,\n                       LogSeverity severity, std::string* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DestroyLogStream
      Src: /src/brpc/src/butil/logging.cc:1469,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1470
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1470
    functionName: LogMessage::~LogMessage()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - DestroyLogStream
    linkageType: ''
    returnType: void
    signature: void LogMessage::~LogMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::GetLastError
      Src: /src/brpc/src/butil/logging.cc:1481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1487
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1487
    functionName: logging::GetLastSystemErrorCode
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - ::GetLastError
    linkageType: ''
    returnType: SystemErrorCode
    signature: SystemErrorCode GetLastSystemErrorCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::SetLastError
      Src: /src/brpc/src/butil/logging.cc:1491,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1489
    functionDepth: 0
    functionLinenumber: 1489
    functionLinenumberEnd: 1497
    functionName: logging::SetLastSystemErrorCode
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - ::SetLastError
    linkageType: ''
    returnType: void
    signature: void SetLastSystemErrorCode(SystemErrorCode err)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FormatMessageA
      Src: /src/brpc/src/butil/logging.cc:1504,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/logging.cc:1505,1
    - Dst: butil::CollapseWhitespaceASCII
      Src: /src/brpc/src/butil/logging.cc:1508,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/logging.cc:1509,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/logging.cc:1511,1
    - Dst: GetLastError
      Src: /src/brpc/src/butil/logging.cc:1512,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1513
      start: 1500
    functionDepth: 1
    functionLinenumber: 1500
    functionLinenumberEnd: 1513
    functionName: std::string SystemErrorCodeToString(SystemErrorCode error_code)
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - GetLastError
    - butil::CollapseWhitespaceASCII
    - arraysize
    - FormatMessageA
    - butil::StringPrintf
    linkageType: ''
    returnType: BUTIL_EXPORT
    signature: BUTIL_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: berror
      Src: /src/brpc/src/butil/logging.cc:1516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1517
      start: 1515
    functionDepth: 1
    functionLinenumber: 1515
    functionLinenumberEnd: 1517
    functionName: std::string SystemErrorCodeToString(SystemErrorCode error_code)
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - berror
    linkageType: ''
    returnType: BUTIL_EXPORT
    signature: BUTIL_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - file
    - line
    - severity
    - err
    argTypes:
    - char*
    - int
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1529
      start: 1524
    functionDepth: 0
    functionLinenumber: 1524
    functionLinenumberEnd: 1529
    functionName: logging::Win32ErrorLogMessage::Win32ErrorLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file,\n
      \                                          int line,\n                                           LogSeverity
      severity,\n                                           SystemErrorCode err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - file
    - line
    - func
    - severity
    - err
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1538
      start: 1531
    functionDepth: 0
    functionLinenumber: 1531
    functionLinenumberEnd: 1538
    functionName: logging::Win32ErrorLogMessage::Win32ErrorLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file,\n
      \                                          int line,\n                                           const
      char* func,\n                                           LogSeverity severity,\n
      \                                          SystemErrorCode err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stream
      Src: /src/brpc/src/butil/logging.cc:1541,1
    - Dst: SystemErrorCodeToString
      Src: /src/brpc/src/butil/logging.cc:1541,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/logging.cc:1545,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1546
      start: 1540
    functionDepth: 1
    functionLinenumber: 1540
    functionLinenumberEnd: 1546
    functionName: Win32ErrorLogMessage::~Win32ErrorLogMessage()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - SystemErrorCodeToString
    - stream
    linkageType: ''
    returnType: void
    signature: void Win32ErrorLogMessage::~Win32ErrorLogMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - file
    - line
    - severity
    - err
    argTypes:
    - char*
    - int
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1548
    functionDepth: 0
    functionLinenumber: 1548
    functionLinenumberEnd: 1552
    functionName: logging::ErrnoLogMessage::ErrnoLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ErrnoLogMessage::ErrnoLogMessage(const char* file,\n                                 int
      line,\n                                 LogSeverity severity,\n                                 SystemErrorCode
      err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - file
    - line
    - func
    - severity
    - err
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1560
      start: 1554
    functionDepth: 0
    functionLinenumber: 1554
    functionLinenumberEnd: 1560
    functionName: logging::ErrnoLogMessage::ErrnoLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ErrnoLogMessage::ErrnoLogMessage(const char* file,\n                                 int
      line,\n                                 const char* func,\n                                 LogSeverity
      severity,\n                                 SystemErrorCode err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stream
      Src: /src/brpc/src/butil/logging.cc:1563,1
    - Dst: SystemErrorCodeToString
      Src: /src/brpc/src/butil/logging.cc:1563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1564
      start: 1562
    functionDepth: 0
    functionLinenumber: 1562
    functionLinenumberEnd: 1564
    functionName: ErrnoLogMessage::~ErrnoLogMessage()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - SystemErrorCodeToString
    - stream
    linkageType: ''
    returnType: void
    signature: void ErrnoLogMessage::~ErrnoLogMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CloseLogFileUnlocked
      Src: /src/brpc/src/butil/logging.cc:1569,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1570
      start: 1567
    functionDepth: 2
    functionLinenumber: 1567
    functionLinenumberEnd: 1570
    functionName: logging::CloseLogFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::CloseLogFileUnlocked
    linkageType: ''
    returnType: void
    signature: void CloseLogFile()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/butil/logging.cc:1575,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/logging.cc:1578,1
    - Dst: write
      Src: /src/brpc/src/butil/logging.cc:1579,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/logging.cc:1590,1
    - Dst: write
      Src: /src/brpc/src/butil/logging.cc:1590,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:1600,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 20
    argCount: 2
    argNames:
    - level
    - message
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1601
      start: 1572
    functionDepth: 1
    functionLinenumber: 1572
    functionLinenumberEnd: 1601
    functionName: logging::RawLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - HANDLE_EINTR
    - write
    - butil::debug::BreakDebugger
    - strlen
    linkageType: ''
    returnType: void
    signature: void RawLog(int level, const char* message)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::wstring
      Src: /src/brpc/src/butil/logging.cc:1610,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1611
      start: 1607
    functionDepth: 0
    functionLinenumber: 1607
    functionLinenumberEnd: 1611
    functionName: logging::GetLogFileFullPath
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::wstring
    linkageType: ''
    returnType: std::wstring
    signature: std::wstring GetLogFileFullPath()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::find_last_of
      Src: /src/brpc/src/butil/logging.cc:1636,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/logging.cc:1639,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1639,1
    - Dst: assign
      Src: /src/brpc/src/butil/logging.cc:1640,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:1640,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1640,1
    - Dst: butil::StringPiece::find_last_of
      Src: /src/brpc/src/butil/logging.cc:1641,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/butil/logging.cc:1643,1
    - Dst: assign
      Src: /src/brpc/src/butil/logging.cc:1646,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:1646,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1646,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/butil/logging.cc:1647,1
    - Dst: assign
      Src: /src/brpc/src/butil/logging.cc:1650,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:1650,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1650,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/logging.cc:1651,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1651,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1651,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1652,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1653,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/logging.cc:1654,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1654,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1654,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - filename
    - required_v
    - line_no
    argTypes:
    - char*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1657
      start: 1632
    functionDepth: 1
    functionLinenumber: 1632
    functionLinenumberEnd: 1657
    functionName: logging::VLogSite
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::find_last_of
    - assign
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::data
    - std::transform
    - empty
    - begin
    - butil::StringPiece::size
    linkageType: ''
    returnType: void
    signature: void VLogSite(const char* filename, int required_v, int line_no)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/logging.cc:1661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1661
      start: 1661
    functionDepth: 0
    functionLinenumber: 1661
    functionLinenumberEnd: 1661
    functionName: logging::next
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: VLogSite
    signature: VLogSite * next()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/logging.cc:1663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1663
      start: 1662
    functionDepth: 0
    functionLinenumber: 1662
    functionLinenumberEnd: 1663
    functionName: logging::next
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: VLogSite
    signature: VLogSite * next() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/logging.cc:1665,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - next
    argTypes:
    - VLogSite*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1664
    functionDepth: 0
    functionLinenumber: 1664
    functionLinenumberEnd: 1665
    functionName: logging::set_next
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Store
    linkageType: ''
    returnType: void
    signature: void set_next(VLogSite* next)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1667
      start: 1667
    functionDepth: 0
    functionLinenumber: 1667
    functionLinenumberEnd: 1667
    functionName: logging::v
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int v() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1668
      start: 1668
    functionDepth: 0
    functionLinenumber: 1668
    functionLinenumberEnd: 1668
    functionName: '& v()'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int & v()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1670
      start: 1670
    functionDepth: 0
    functionLinenumber: 1670
    functionLinenumberEnd: 1670
    functionName: logging::required_v
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int required_v() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1671
      start: 1671
    functionDepth: 0
    functionLinenumber: 1671
    functionLinenumberEnd: 1671
    functionName: logging::line_no
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int line_no() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1673
      start: 1673
    functionDepth: 0
    functionLinenumber: 1673
    functionLinenumberEnd: 1673
    functionName: '& module() const'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & module() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1674
    functionName: '& full_module() const'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & full_module() const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - wild
    - str
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1729
      start: 1697
    functionDepth: 0
    functionLinenumber: 1697
    functionLinenumberEnd: 1729
    functionName: logging::wildcmp
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool wildcmp(const char* wild, const char* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1732
      start: 1732
    functionDepth: 0
    functionLinenumber: 1732
    functionLinenumberEnd: 1732
    functionName: logging::VModuleList
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VModuleList()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:1735,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:1736,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/logging.cc:1739,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/logging.cc:1741,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1741,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/logging.cc:1742,1
    - Dst: strtol
      Src: /src/brpc/src/butil/logging.cc:1743,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1743,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1746,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1747,1
    - Dst: isspace
      Src: /src/brpc/src/butil/logging.cc:1748,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1748,1
    - Dst: isspace
      Src: /src/brpc/src/butil/logging.cc:1750,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1750,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::end
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::find_first_of
      Src: /src/brpc/src/butil/logging.cc:1757,1
    - Dst: emplace_back
      Src: /src/brpc/src/butil/logging.cc:1760,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1764,1
    - Dst: std::reverse
      Src: /src/brpc/src/butil/logging.cc:1765,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1765,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1765,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 27
    argCount: 1
    argNames:
    - vmodules
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1768
      start: 1734
    functionDepth: 1
    functionLinenumber: 1734
    functionLinenumberEnd: 1768
    functionName: logging::init
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - std::string::end
    - butil::StringSplitter::length
    - std::string::find_first_of
    - logging::clear
    - isspace
    - strtol
    - butil::StringSplitter::field
    - emplace_back
    - std::transform
    - empty
    - begin
    - butil::BaseIteratorRangeToNumberTraits::max
    - std::string::begin
    - std::reverse
    linkageType: ''
    returnType: int
    signature: int init(const char* vmodules)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1772,1
    - Dst: find
      Src: /src/brpc/src/butil/logging.cc:1774,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1775,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1779,1
    - Dst: find
      Src: /src/brpc/src/butil/logging.cc:1780,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1781,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:1788,1
    - Dst: logging::wildcmp
      Src: /src/brpc/src/butil/logging.cc:1789,1
    - Dst: first::c_str
      Src: /src/brpc/src/butil/logging.cc:1789,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:1789,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1793,1
    - Dst: logging::wildcmp
      Src: /src/brpc/src/butil/logging.cc:1794,1
    - Dst: first::c_str
      Src: /src/brpc/src/butil/logging.cc:1794,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:1794,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 3
    argNames:
    - ' module'
    - ' full_module'
    - v
    argTypes:
    - std::string
    - std::string
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1800
      start: 1770
    functionDepth: 1
    functionLinenumber: 1770
    functionLinenumberEnd: 1800
    functionName: logging::find_verbose_level
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - find
    - logging::wildcmp
    - first::c_str
    - empty
    - c_str
    - size
    linkageType: ''
    returnType: bool
    signature: "bool find_verbose_level(const std::string& module,\n                            const
      std::string& full_module, int* v) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1805,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1805,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:1809,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1812
      start: 1802
    functionDepth: 0
    functionLinenumber: 1802
    functionLinenumberEnd: 1812
    functionName: logging::print
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - size
    - begin
    linkageType: ''
    returnType: void
    signature: void print(std::ostream& os) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1834,1
    - Dst: VLogSite*::set_next
      Src: /src/brpc/src/butil/logging.cc:1843,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - site
    - expected_module_list
    - expected_default_v
    argTypes:
    - VLogSite*
    - VModuleList**
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1846
      start: 1831
    functionDepth: 1
    functionLinenumber: 1831
    functionLinenumberEnd: 1846
    functionName: logging::vlog_site_list_add
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - VLogSite*::set_next
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int vlog_site_list_add(VLogSite* site,\n                              VModuleList**
      expected_module_list,\n                              int* expected_default_v)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VLogSite::VLogSite
      Src: /src/brpc/src/butil/logging.cc:1850,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1857,1
    - Dst: VModuleList*::find_verbose_level
      Src: /src/brpc/src/butil/logging.cc:1859,1
    - Dst: VLogSite*::module
      Src: /src/brpc/src/butil/logging.cc:1860,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1860,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1860,1
    - Dst: logging::vlog_site_list_add
      Src: /src/brpc/src/butil/logging.cc:1862,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1863,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1864,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - v
    - filename
    - line_no
    - required_v
    argTypes:
    - int**
    - char*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1865
      start: 1848
    functionDepth: 2
    functionLinenumber: 1848
    functionLinenumberEnd: 1865
    functionName: logging::add_vlog_site
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - VLogSite*::module
    - VModuleList*::find_verbose_level
    - logging::vlog_site_list_add
    - VLogSite*::full_module
    - VLogSite::VLogSite
    - VLogSite*::v
    linkageType: ''
    returnType: bool
    signature: "bool add_vlog_site(const int** v, const char* filename, int line_no,\n
      \                  int required_v)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1870,1
    - Dst: VLogSite*::next
      Src: /src/brpc/src/butil/logging.cc:1874,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1875,1
    - Dst: VLogSite*::required_v
      Src: /src/brpc/src/butil/logging.cc:1876,1
    - Dst: VLogSite*::line_no
      Src: /src/brpc/src/butil/logging.cc:1877,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1878,1
    - Dst: VLogSitePrinter*::print
      Src: /src/brpc/src/butil/logging.cc:1879,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - printer
    argTypes:
    - VLogSitePrinter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1881
      start: 1867
    functionDepth: 1
    functionLinenumber: 1867
    functionLinenumberEnd: 1881
    functionName: logging::print_vlog_sites
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - VLogSite*::line_no
    - VLogSite*::next
    - VLogSitePrinter*::print
    - VLogSite*::full_module
    - BAIDU_SCOPED_LOCK
    - VLogSite*::required_v
    - VLogSite*::v
    linkageType: ''
    returnType: void
    signature: void print_vlog_sites(VLogSitePrinter* printer)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1886,1
    - Dst: VModuleList::VModuleList
      Src: /src/brpc/src/butil/logging.cc:1888,1
    - Dst: LOG
      Src: /src/brpc/src/butil/logging.cc:1890,1
    - Dst: VModuleList*::init
      Src: /src/brpc/src/butil/logging.cc:1893,1
    - Dst: LOG
      Src: /src/brpc/src/butil/logging.cc:1895,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1903,1
    - Dst: VLogSite*::next
      Src: /src/brpc/src/butil/logging.cc:1908,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1909,1
    - Dst: VModuleList*::find_verbose_level
      Src: /src/brpc/src/butil/logging.cc:1910,1
    - Dst: VLogSite*::module
      Src: /src/brpc/src/butil/logging.cc:1911,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1911,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1911,1
    - Dst: std::deque<std::pair<VModuleList*, int64_t> >::pair<VModuleList*, int64_t>
        >
      Src: /src/brpc/src/butil/logging.cc:1919,1
    - Dst: push_back
      Src: /src/brpc/src/butil/logging.cc:1921,1
    - Dst: std::make_pair
      Src: /src/brpc/src/butil/logging.cc:1922,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/logging.cc:1923,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1924,1
    - Dst: front
      Src: /src/brpc/src/butil/logging.cc:1925,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/logging.cc:1925,1
    - Dst: front
      Src: /src/brpc/src/butil/logging.cc:1926,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/logging.cc:1927,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 1
    argNames:
    - vmodule
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1931
      start: 1884
    functionDepth: 1
    functionLinenumber: 1884
    functionLinenumberEnd: 1931
    functionName: logging::on_reset_vmodule
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - front
    - VModuleList::VModuleList
    - butil::gettimeofday_us
    - VLogSite*::module
    - VLogSite*::next
    - std::deque<std::pair<VModuleList*, int64_t> >::pair<VModuleList*, int64_t> >
    - VModuleList*::find_verbose_level
    - VLogSite*::full_module
    - BAIDU_SCOPED_LOCK
    - push_back
    - VModuleList*::init
    - VLogSite*::v
    - empty
    - pop_front
    - std::make_pair
    - LOG
    linkageType: ''
    returnType: int
    signature: int on_reset_vmodule(const char* vmodule)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::on_reset_vmodule
      Src: /src/brpc/src/butil/logging.cc:1934,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:1934,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' vmodule'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1935
      start: 1933
    functionDepth: 2
    functionLinenumber: 1933
    functionLinenumberEnd: 1935
    functionName: logging::validate_vmodule
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - c_str
    - logging::on_reset_vmodule
    linkageType: ''
    returnType: bool
    signature: bool validate_vmodule(const char*, const std::string& vmodule)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1946,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1948,1
    - Dst: VLogSite*::next
      Src: /src/brpc/src/butil/logging.cc:1952,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1953,1
    - Dst: VModuleList*::find_verbose_level
      Src: /src/brpc/src/butil/logging.cc:1955,1
    - Dst: VLogSite*::module
      Src: /src/brpc/src/butil/logging.cc:1956,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1956,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1956,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - default_v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1960
      start: 1941
    functionDepth: 1
    functionLinenumber: 1941
    functionLinenumberEnd: 1960
    functionName: logging::on_reset_verbose
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - VLogSite*::module
    - VLogSite*::next
    - VModuleList*::find_verbose_level
    - VLogSite*::full_module
    - BAIDU_SCOPED_LOCK
    - VLogSite*::v
    linkageType: ''
    returnType: void
    signature: void on_reset_verbose(int default_v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::on_reset_verbose
      Src: /src/brpc/src/butil/logging.cc:1963,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1965
      start: 1962
    functionDepth: 2
    functionLinenumber: 1962
    functionLinenumberEnd: 1965
    functionName: logging::validate_v
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::on_reset_verbose
    linkageType: ''
    returnType: bool
    signature: bool validate_v(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:202,1
    - Dst: getpid
      Src: /src/brpc/src/butil/logging.cc:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: logging::CurrentProcessId
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - getpid
    - GetCurrentProcessId
    linkageType: ''
    returnType: int32_t
    signature: int32_t CurrentProcessId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: unlink
      Src: /src/brpc/src/butil/logging.cc:214,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' log_name'
    argTypes:
    - PathString
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: logging::DeleteFilePath
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - c_str
    - DeleteFile
    - unlink
    linkageType: ''
    returnType: void
    signature: void DeleteFilePath(const PathString& log_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/logging.cc:220,1
    - Dst: read
      Src: /src/brpc/src/butil/logging.cc:225,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/logging.cc:232,1
    - Dst: std::string
      Src: /src/brpc/src/butil/logging.cc:232,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 233
    functionName: logging::GetProcessName
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - butil::FilePath
    - open
    - std::string
    - read
    linkageType: ''
    returnType: PathString
    signature: PathString GetProcessName()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleFileName
      Src: /src/brpc/src/butil/logging.cc:240,1
    - Dst: PathString::rfind
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::size
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::erase
      Src: /src/brpc/src/butil/logging.cc:246,1
    - Dst: logging::GetProcessName
      Src: /src/brpc/src/butil/logging.cc:250,1
    - Dst: PathString
      Src: /src/brpc/src/butil/logging.cc:253,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: logging::GetDefaultLogFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - PathString::rfind
    - PathString
    - PathString::size
    - logging::GetProcessName
    - PathString::erase
    - GetModuleFileName
    linkageType: ''
    returnType: PathString
    signature: PathString GetDefaultLogFile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::LockLogging
      Src: /src/brpc/src/butil/logging.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 6
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: logging::LoggingLock::LoggingLock
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::LoggingLock::LockLogging
    linkageType: ''
    returnType: void
    signature: void LoggingLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnlockLogging
      Src: /src/brpc/src/butil/logging.cc:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: ~LoggingLock()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - UnlockLogging
    linkageType: ''
    returnType: void
    signature: void ~LoggingLock()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:284,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::begin
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::end
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::append
      Src: /src/brpc/src/butil/logging.cc:288,1
    - Dst: ::CreateMutex
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: GetLastError
      Src: /src/brpc/src/butil/logging.cc:294,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:295,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/butil/logging.cc:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - lock_log
    - new_log_file
    argTypes:
    - LogLockingState
    - LogChar*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 306
    functionName: logging::LoggingLock::Init
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - ::CreateMutex
    - GetLastError
    - butil::debug::BreakDebugger
    - butil::Mutex::Mutex
    - std::wstring::end
    - std::wstring::append
    - GetDefaultLogFile
    - std::wstring::c_str
    - std::wstring::begin
    - std::replace
    linkageType: ''
    returnType: void
    signature: void Init(LogLockingState lock_log, const LogChar* new_log_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::WaitForSingleObject
      Src: /src/brpc/src/butil/logging.cc:312,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/logging.cc:319,1
    - Dst: lock
      Src: /src/brpc/src/butil/logging.cc:323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 309
    functionDepth: 5
    functionLinenumber: 309
    functionLinenumberEnd: 325
    functionName: logging::LoggingLock::LockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - pthread_mutex_lock
    - lock
    - ::WaitForSingleObject
    linkageType: ''
    returnType: void
    signature: void LockLogging()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReleaseMutex
      Src: /src/brpc/src/butil/logging.cc:330,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/logging.cc:332,1
    - Dst: unlock
      Src: /src/brpc/src/butil/logging.cc:335,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 327
    functionDepth: 5
    functionLinenumber: 327
    functionLinenumberEnd: 337
    functionName: logging::LoggingLock::UnlockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - ReleaseMutex
    - unlock
    linkageType: ''
    returnType: void
    signature: void UnlockLogging()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: logging::GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: PathString::PathString
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:389,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:397,1
    - Dst: fopen
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: berror
      Src: /src/brpc/src/butil/logging.cc:401,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 408
    functionName: logging::InitializeLogFileHandle
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - CreateFile
    - fopen
    - logging::GetDefaultLogFile
    - PathString::PathString
    - fprintf
    - c_str
    - berror
    - SetFilePointer
    linkageType: ''
    returnType: bool
    signature: bool InitializeLogFileHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:412,1
    - Dst: fclose
      Src: /src/brpc/src/butil/logging.cc:414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log
    argTypes:
    - FileHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 416
    functionName: logging::CloseFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - CloseHandle
    - fclose
    linkageType: ''
    returnType: void
    signature: void CloseFile(FileHandle log)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::CloseFile
      Src: /src/brpc/src/butil/logging.cc:422,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 424
    functionName: logging::CloseLogFileUnlocked
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::CloseFile
    linkageType: ''
    returnType: void
    signature: void CloseLogFileUnlocked()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::Init
      Src: /src/brpc/src/butil/logging.cc:434,1
    - Dst: logging::InitializeLogFileHandle
      Src: /src/brpc/src/butil/logging.cc:436,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:438,1
    - Dst: WriteFile
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<DWORD>
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: fwrite
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: fflush
      Src: /src/brpc/src/butil/logging.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' log'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 426
    functionDepth: 2
    functionLinenumber: 426
    functionLinenumberEnd: 447
    functionName: logging::Log2File
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - logging::InitializeLogFileHandle
    - logging::LoggingLock::Init
    - fwrite
    - fflush
    - data
    - static_cast<DWORD>
    - size
    - WriteFile
    - SetFilePointer
    linkageType: ''
    returnType: void
    signature: void Log2File(const std::string& log)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:202,1
    - Dst: getpid
      Src: /src/brpc/src/butil/logging.cc:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: logging::CurrentProcessId
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - getpid
    - GetCurrentProcessId
    linkageType: ''
    returnType: int32_t
    signature: int32_t CurrentProcessId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:210,1
    - Dst: unlink
      Src: /src/brpc/src/butil/logging.cc:214,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' log_name'
    argTypes:
    - PathString
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 216
    functionName: logging::DeleteFilePath
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - c_str
    - DeleteFile
    - unlink
    linkageType: ''
    returnType: void
    signature: void DeleteFilePath(const PathString& log_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/logging.cc:220,1
    - Dst: read
      Src: /src/brpc/src/butil/logging.cc:225,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/logging.cc:232,1
    - Dst: std::string
      Src: /src/brpc/src/butil/logging.cc:232,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 233
    functionName: logging::GetProcessName
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - butil::FilePath
    - open
    - std::string
    - read
    linkageType: ''
    returnType: PathString
    signature: PathString GetProcessName()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleFileName
      Src: /src/brpc/src/butil/logging.cc:240,1
    - Dst: PathString::rfind
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::size
      Src: /src/brpc/src/butil/logging.cc:244,1
    - Dst: PathString::erase
      Src: /src/brpc/src/butil/logging.cc:246,1
    - Dst: logging::GetProcessName
      Src: /src/brpc/src/butil/logging.cc:250,1
    - Dst: PathString
      Src: /src/brpc/src/butil/logging.cc:253,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: logging::GetDefaultLogFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - PathString::rfind
    - PathString
    - PathString::size
    - logging::GetProcessName
    - PathString::erase
    - GetModuleFileName
    linkageType: ''
    returnType: PathString
    signature: PathString GetDefaultLogFile()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::LockLogging
      Src: /src/brpc/src/butil/logging.cc:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 6
    functionLinenumber: 265
    functionLinenumberEnd: 267
    functionName: logging::LoggingLock::LoggingLock
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::LoggingLock::LockLogging
    linkageType: ''
    returnType: void
    signature: void LoggingLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnlockLogging
      Src: /src/brpc/src/butil/logging.cc:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: ~LoggingLock()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - UnlockLogging
    linkageType: ''
    returnType: void
    signature: void ~LoggingLock()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:284,1
    - Dst: std::replace
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::begin
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::end
      Src: /src/brpc/src/butil/logging.cc:286,1
    - Dst: std::wstring::append
      Src: /src/brpc/src/butil/logging.cc:288,1
    - Dst: ::CreateMutex
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: std::wstring::c_str
      Src: /src/brpc/src/butil/logging.cc:289,1
    - Dst: GetLastError
      Src: /src/brpc/src/butil/logging.cc:294,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:295,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/butil/logging.cc:303,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - lock_log
    - new_log_file
    argTypes:
    - LogLockingState
    - LogChar*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 306
    functionName: logging::LoggingLock::Init
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - ::CreateMutex
    - GetLastError
    - butil::debug::BreakDebugger
    - butil::Mutex::Mutex
    - std::wstring::end
    - std::wstring::append
    - GetDefaultLogFile
    - std::wstring::c_str
    - std::wstring::begin
    - std::replace
    linkageType: ''
    returnType: void
    signature: void Init(LogLockingState lock_log, const LogChar* new_log_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::WaitForSingleObject
      Src: /src/brpc/src/butil/logging.cc:312,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/logging.cc:319,1
    - Dst: lock
      Src: /src/brpc/src/butil/logging.cc:323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 309
    functionDepth: 5
    functionLinenumber: 309
    functionLinenumberEnd: 325
    functionName: logging::LoggingLock::LockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - pthread_mutex_lock
    - lock
    - ::WaitForSingleObject
    linkageType: ''
    returnType: void
    signature: void LockLogging()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReleaseMutex
      Src: /src/brpc/src/butil/logging.cc:330,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/logging.cc:332,1
    - Dst: unlock
      Src: /src/brpc/src/butil/logging.cc:335,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 327
    functionDepth: 5
    functionLinenumber: 327
    functionLinenumberEnd: 337
    functionName: logging::LoggingLock::UnlockLogging
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - ReleaseMutex
    - unlock
    linkageType: ''
    returnType: void
    signature: void UnlockLogging()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: logging::GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: PathString::PathString
      Src: /src/brpc/src/butil/logging.cc:379,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:384,1
    - Dst: CreateFile
      Src: /src/brpc/src/butil/logging.cc:389,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:397,1
    - Dst: fopen
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:399,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:401,1
    - Dst: berror
      Src: /src/brpc/src/butil/logging.cc:401,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 408
    functionName: logging::InitializeLogFileHandle
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - CreateFile
    - fopen
    - logging::GetDefaultLogFile
    - PathString::PathString
    - fprintf
    - c_str
    - berror
    - SetFilePointer
    linkageType: ''
    returnType: bool
    signature: bool InitializeLogFileHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:412,1
    - Dst: fclose
      Src: /src/brpc/src/butil/logging.cc:414,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log
    argTypes:
    - FileHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 416
    functionName: logging::CloseFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - CloseHandle
    - fclose
    linkageType: ''
    returnType: void
    signature: void CloseFile(FileHandle log)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::CloseFile
      Src: /src/brpc/src/butil/logging.cc:422,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 424
    functionName: logging::CloseLogFileUnlocked
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::CloseFile
    linkageType: ''
    returnType: void
    signature: void CloseLogFileUnlocked()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingLock::Init
      Src: /src/brpc/src/butil/logging.cc:434,1
    - Dst: logging::InitializeLogFileHandle
      Src: /src/brpc/src/butil/logging.cc:436,1
    - Dst: SetFilePointer
      Src: /src/brpc/src/butil/logging.cc:438,1
    - Dst: WriteFile
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:440,1
    - Dst: static_cast<DWORD>
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:441,1
    - Dst: fwrite
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:443,1
    - Dst: fflush
      Src: /src/brpc/src/butil/logging.cc:444,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' log'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 426
    functionDepth: 2
    functionLinenumber: 426
    functionLinenumberEnd: 447
    functionName: logging::Log2File
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - static_cast<const void*>
    - logging::InitializeLogFileHandle
    - logging::LoggingLock::Init
    - fwrite
    - fflush
    - data
    - static_cast<DWORD>
    - size
    - WriteFile
    - SetFilePointer
    linkageType: ''
    returnType: void
    signature: void Log2File(const std::string& log)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/src/butil/logging.cc:462,1
    - Dst: time
      Src: /src/brpc/src/butil/logging.cc:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 467
    functionName: logging::GetTimestamp
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - time
    - gettimeofday
    linkageType: ''
    returnType: TimeVal
    signature: TimeVal GetTimestamp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:472,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:473,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 469
    functionDepth: 0
    functionLinenumber: 469
    functionLinenumberEnd: 486
    functionName: logging::LogInfo
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::clear
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT LogInfo
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 470
    functionName: ~LogInfo()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LogInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:472,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:473,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 475
    functionName: logging::clear
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 5
    functionsReached:
    - logging::clear
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 493
    functionName: logging::LogRequest
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT LogRequest
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::AsyncLogger::GetInstance
      Src: /src/brpc/src/butil/logging.cc:514,1
    - Dst: repeated_sleep
      Src: /src/brpc/src/butil/logging.cc:516,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 513
    functionDepth: 2
    functionLinenumber: 513
    functionLinenumberEnd: 518
    functionName: logging::AsyncLogger::AtExit
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::AsyncLogger::GetInstance
    - repeated_sleep
    linkageType: ''
    returnType: void
    signature: void AtExit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/logging.cc:540,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 542
    functionName: logging::AsyncLogger::GetInstance
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: AsyncLogger
    signature: AsyncLogger * AsyncLogger::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Start
      Src: /src/brpc/src/butil/logging.cc:550,1
    - Dst: atexit
      Src: /src/brpc/src/butil/logging.cc:553,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 554
    functionName: logging::AsyncLogger::AsyncLogger
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - Start
    - atexit
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::AsyncLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StopAndJoin
      Src: /src/brpc/src/butil/logging.cc:557,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 558
    functionName: AsyncLogger::~AsyncLogger()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - StopAndJoin
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::~AsyncLogger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLog
      Src: /src/brpc/src/butil/logging.cc:568,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:568,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:568,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/logging.cc:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 5
    argNames:
    - severity
    - file
    - line
    - func
    - content
    argTypes:
    - int
    - butil::StringPiece
    - int
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 560
    functionDepth: 3
    functionLinenumber: 560
    functionLinenumberEnd: 571
    functionName: logging::LogInfoToLogStr
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - butil::StringPiece::data
    - logging::PrintLog
    linkageType: ''
    returnType: std::string
    signature: "std::string LogInfoToLogStr(int severity, butil::StringPiece file,\n
      \                           int line, butil::StringPiece func,\n                            butil::StringPiece
      content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogInfoToLogStr
      Src: /src/brpc/src/butil/logging.cc:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 573
    functionDepth: 2
    functionLinenumber: 573
    functionLinenumberEnd: 576
    functionName: logging::LogInfo2LogStr
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::LogInfoToLogStr
    linkageType: ''
    returnType: std::string
    signature: std::string LogInfo2LogStr(const LogInfo& log_info)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: content::empty
      Src: /src/brpc/src/butil/logging.cc:579,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/logging.cc:584,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:586,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:588,1
    - Dst: butil::get_object<LogRequest>
      Src: /src/brpc/src/butil/logging.cc:592,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:595,1
    - Dst: logging::AsyncLogger::LogImpl
      Src: /src/brpc/src/butil/logging.cc:599,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 578
    functionDepth: 2
    functionLinenumber: 578
    functionLinenumberEnd: 600
    functionName: logging::AsyncLogger::Log
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::AsyncLogger::DoLog
    - content::empty
    - load
    - fetch_add
    - logging::AsyncLogger::LogImpl
    - butil::get_object<LogRequest>
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::Log(const LogInfo& log_info)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: content::empty
      Src: /src/brpc/src/butil/logging.cc:603,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/logging.cc:608,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:610,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:612,1
    - Dst: butil::get_object<LogRequest>
      Src: /src/brpc/src/butil/logging.cc:616,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:619,1
    - Dst: std::move
      Src: /src/brpc/src/butil/logging.cc:622,1
    - Dst: logging::AsyncLogger::LogImpl
      Src: /src/brpc/src/butil/logging.cc:623,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 602
    functionDepth: 2
    functionLinenumber: 602
    functionLinenumberEnd: 624
    functionName: logging::AsyncLogger::Log
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::move
    - logging::AsyncLogger::DoLog
    - content::empty
    - load
    - fetch_add
    - logging::AsyncLogger::LogImpl
    - butil::get_object<LogRequest>
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::Log(LogInfo&& log_info)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/butil/logging.cc:630,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:646,1
    - Dst: logging::AsyncLogger::IsLogComplete
      Src: /src/brpc/src/butil/logging.cc:648,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:649,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:654,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:655,1
    - Dst: logging::AsyncLogger::LogTask
      Src: /src/brpc/src/butil/logging.cc:657,1
    - Dst: Signal
      Src: /src/brpc/src/butil/logging.cc:661,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - log_req
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 626
    functionDepth: 2
    functionLinenumber: 626
    functionLinenumberEnd: 663
    functionName: logging::AsyncLogger::LogImpl
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - logging::AsyncLogger::DoLog
    - logging::AsyncLogger::LogTask
    - butil::return_object
    - load
    - Signal
    - BAIDU_SCOPED_LOCK
    - logging::AsyncLogger::IsLogComplete
    - exchange
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::LogImpl(LogRequest* log_req)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/butil/logging.cc:666,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:667,1
    - Dst: Signal
      Src: /src/brpc/src/butil/logging.cc:668,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/logging.cc:670,1
    - Dst: Join
      Src: /src/brpc/src/butil/logging.cc:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 673
      start: 665
    functionDepth: 1
    functionLinenumber: 665
    functionLinenumberEnd: 673
    functionName: logging::AsyncLogger::StopAndJoin
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - Join
    - Signal
    - HasBeenJoined
    - BAIDU_SCOPED_LOCK
    - exchange
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::StopAndJoin()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:677,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:678,1
    - Dst: Wait
      Src: /src/brpc/src/butil/logging.cc:680,1
    - Dst: load
      Src: /src/brpc/src/butil/logging.cc:682,1
    - Dst: logging::AsyncLogger::LogTask
      Src: /src/brpc/src/butil/logging.cc:687,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 675
    functionDepth: 2
    functionLinenumber: 675
    functionLinenumberEnd: 690
    functionName: logging::AsyncLogger::Run
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - Wait
    - load
    - logging::AsyncLogger::LogTask
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LogRequest*::log_info::content::empty
      Src: /src/brpc/src/butil/logging.cc:695,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:698,1
    - Dst: LogRequest*::log_info::content::empty
      Src: /src/brpc/src/butil/logging.cc:705,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:706,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:709,1
    - Dst: LogRequest*::log_info::content::empty
      Src: /src/brpc/src/butil/logging.cc:711,1
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:712,1
    - Dst: logging::AsyncLogger::IsLogComplete
      Src: /src/brpc/src/butil/logging.cc:716,1
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/logging.cc:717,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - req
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 692
    functionDepth: 2
    functionLinenumber: 692
    functionLinenumberEnd: 721
    functionName: logging::AsyncLogger::LogTask
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - logging::AsyncLogger::IsLogComplete
    - butil::return_object
    - logging::AsyncLogger::DoLog
    - LogRequest*::log_info::content::empty
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::LogTask(LogRequest* req)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:725,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/butil/logging.cc:729,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:735,1
    - Dst: sched_yield
      Src: /src/brpc/src/butil/logging.cc:746,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:753,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - old_head
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 760
    functionName: logging::AsyncLogger::IsLogComplete
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - sched_yield
    - fprintf
    - compare_exchange_strong
    linkageType: ''
    returnType: bool
    signature: bool AsyncLogger::IsLogComplete(LogRequest* old_head)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::AsyncLogger::DoLog
      Src: /src/brpc/src/butil/logging.cc:763,1
    - Dst: LogRequest*::log_info::clear
      Src: /src/brpc/src/butil/logging.cc:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req
    argTypes:
    - LogRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 762
    functionDepth: 1
    functionLinenumber: 762
    functionLinenumberEnd: 765
    functionName: logging::AsyncLogger::DoLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 10
    functionsReached:
    - logging::AsyncLogger::DoLog
    - LogRequest*::log_info::clear
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::DoLog(LogRequest* req)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Log2File
      Src: /src/brpc/src/butil/logging.cc:769,1
    - Dst: LogInfo2LogStr
      Src: /src/brpc/src/butil/logging.cc:769,1
    - Dst: Log2File
      Src: /src/brpc/src/butil/logging.cc:771,1
    - Dst: fetch_sub
      Src: /src/brpc/src/butil/logging.cc:773,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' log_info'
    argTypes:
    - LogInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 767
    functionDepth: 0
    functionLinenumber: 767
    functionLinenumberEnd: 774
    functionName: logging::AsyncLogger::DoLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 10
    functionsReached:
    - fetch_sub
    - LogInfo2LogStr
    - Log2File
    linkageType: ''
    returnType: void
    signature: void AsyncLogger::DoLog(const LogInfo& log_info)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 780
    functionName: logging::LoggingSettings::LoggingSettings
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LoggingSettings::LoggingSettings()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/logging.cc:785,1
    - Dst: logging::LoggingLock::Init
      Src: /src/brpc/src/butil/logging.cc:794,1
    - Dst: logging::CloseLogFileUnlocked
      Src: /src/brpc/src/butil/logging.cc:799,1
    - Dst: PathString::PathString
      Src: /src/brpc/src/butil/logging.cc:802,1
    - Dst: logging::GetDefaultLogFile
      Src: /src/brpc/src/butil/logging.cc:806,1
    - Dst: logging::DeleteFilePath
      Src: /src/brpc/src/butil/logging.cc:809,1
    - Dst: logging::InitializeLogFileHandle
      Src: /src/brpc/src/butil/logging.cc:811,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - ' settings'
    argTypes:
    - LoggingSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 782
    functionDepth: 2
    functionLinenumber: 782
    functionLinenumberEnd: 812
    functionName: logging::BaseInitLoggingImpl
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::InitializeLogFileHandle
    - logging::GetDefaultLogFile
    - logging::LoggingLock::Init
    - logging::CloseLogFileUnlocked
    - PathString::PathString
    - CHECK_EQ
    - logging::DeleteFilePath
    linkageType: ''
    returnType: bool
    signature: bool BaseInitLoggingImpl(const LoggingSettings& settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/logging.cc:815,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 814
    functionDepth: 0
    functionLinenumber: 814
    functionLinenumberEnd: 816
    functionName: logging::SetMinLogLevel
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 6
    functionsReached:
    - std::min
    linkageType: ''
    returnType: void
    signature: void SetMinLogLevel(int level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 818
    functionDepth: 0
    functionLinenumber: 818
    functionLinenumberEnd: 820
    functionName: logging::GetMinLogLevel
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetMinLogLevel()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - enable_dialogs
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: logging::SetShowErrorDialogs
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetShowErrorDialogs(bool enable_dialogs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - handler
    argTypes:
    - LogAssertHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 828
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 828
    functionName: logging::SetLogAssertHandler
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetLogAssertHandler(LogAssertHandler handler)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' os'
    - severity
    argTypes:
    - std::ostream
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 842
      start: 833
    functionDepth: 0
    functionLinenumber: 833
    functionLinenumberEnd: 842
    functionName: logging::PrintLogSeverity
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintLogSeverity(std::ostream& os, int severity)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLogSeverity
      Src: /src/brpc/src/butil/logging.cc:847,1
    - Dst: localtime_s
      Src: /src/brpc/src/butil/logging.cc:851,1
    - Dst: localtime_r
      Src: /src/brpc/src/butil/logging.cc:853,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:855,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:857,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:859,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:860,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:861,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:862,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:863,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:865,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:868,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:868,1
    - Dst: logging::CurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:868,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:870,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:870,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/logging.cc:871,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:871,1
    - Dst: std::setfill
      Src: /src/brpc/src/butil/logging.cc:873,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:873,1
    - Dst: bthread_self
      Src: /src/brpc/src/butil/logging.cc:873,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/logging.cc:877,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/logging.cc:878,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/butil/logging.cc:883,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:888,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 6
    argNames:
    - ' os'
    - severity
    - file
    - line
    - func
    - tv
    argTypes:
    - std::ostream
    - int
    - butil::StringPiece
    - int
    - butil::StringPiece
    - TimeVal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 844
    functionDepth: 1
    functionLinenumber: 844
    functionLinenumberEnd: 889
    functionName: logging::PrintLogPrefix
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - std::setw
    - logging::CurrentProcessId
    - butil::PlatformThread::CurrentId
    - logging::PrintLogSeverity
    - localtime_s
    - butil::StringPiece::remove_suffix
    - bthread_self
    - fill
    - localtime_r
    - std::setfill
    - butil::StringPiece::empty
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: void
    signature: "void PrintLogPrefix(std::ostream& os, int severity,\n                    butil::StringPiece
      file, int line,\n                    butil::StringPiece func, TimeVal tv)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLogPrefix
      Src: /src/brpc/src/butil/logging.cc:893,1
    - Dst: logging::GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:893,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' os'
    - severity
    - file
    - line
    argTypes:
    - std::ostream
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 894
      start: 891
    functionDepth: 1
    functionLinenumber: 891
    functionLinenumberEnd: 894
    functionName: logging::PrintLogPrefix
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - logging::GetTimestamp
    - logging::PrintLogPrefix
    linkageType: ''
    returnType: void
    signature: "void PrintLogPrefix(std::ostream& os, int severity,\n                    const
      char* file, int line)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: localtime_s
      Src: /src/brpc/src/butil/logging.cc:914,1
    - Dst: localtime_r
      Src: /src/brpc/src/butil/logging.cc:916,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:918,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:920,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:922,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:923,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:924,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:925,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:926,1
    - Dst: std::setw
      Src: /src/brpc/src/butil/logging.cc:928,1
    - Dst: fill
      Src: /src/brpc/src/butil/logging.cc:931,1
    - Dst: logging::CurrentProcessId
      Src: /src/brpc/src/butil/logging.cc:934,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/logging.cc:936,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/logging.cc:939,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/logging.cc:940,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/butil/logging.cc:945,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 6
    argNames:
    - ' os'
    - severity
    - file
    - func
    - line
    - tv
    argTypes:
    - std::ostream
    - int
    - butil::StringPiece
    - butil::StringPiece
    - int
    - TimeVal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 896
    functionDepth: 1
    functionLinenumber: 896
    functionLinenumberEnd: 949
    functionName: logging::PrintLogPrefixAsJSON
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - std::setw
    - butil::PlatformThread::CurrentId
    - localtime_s
    - butil::StringPiece::remove_suffix
    - fill
    - localtime_r
    - logging::CurrentProcessId
    - butil::StringPiece::empty
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: void
    signature: "void PrintLogPrefixAsJSON(std::ostream& os, int severity,\n                                 butil::StringPiece
      file,\n                                 butil::StringPiece func,\n                                 int
      line, TimeVal tv)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:952,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:952,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 965
      start: 951
    functionDepth: 0
    functionLinenumber: 951
    functionLinenumberEnd: 965
    functionName: logging::EscapeJson
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - end
    - begin
    linkageType: ''
    returnType: void
    signature: void EscapeJson(std::ostream& os, const butil::StringPiece& s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::EscapeJson
      Src: /src/brpc/src/butil/logging.cc:969,1
    - Dst: write
      Src: /src/brpc/src/butil/logging.cc:971,1
    - Dst: data
      Src: /src/brpc/src/butil/logging.cc:971,1
    - Dst: length
      Src: /src/brpc/src/butil/logging.cc:971,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 973
      start: 967
    functionDepth: 1
    functionLinenumber: 967
    functionLinenumberEnd: 973
    functionName: logging::OutputLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::EscapeJson
    - length
    - write
    - data
    linkageType: ''
    returnType: void
    signature: void OutputLog(std::ostream& os, const butil::StringPiece& s)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLogPrefix
      Src: /src/brpc/src/butil/logging.cc:978,1
    - Dst: logging::GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:978,1
    - Dst: logging::OutputLog
      Src: /src/brpc/src/butil/logging.cc:979,1
    - Dst: logging::PrintLogPrefixAsJSON
      Src: /src/brpc/src/butil/logging.cc:982,1
    - Dst: logging::GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:982,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:984,1
    - Dst: logging::OutputLog
      Src: /src/brpc/src/butil/logging.cc:991,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:994,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:994,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 6
    argNames:
    - ' os'
    - severity
    - file
    - line
    - func
    - ' content'
    argTypes:
    - std::ostream
    - int
    - char*
    - int
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 975
    functionDepth: 2
    functionLinenumber: 975
    functionLinenumberEnd: 1000
    functionName: logging::PrintLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - logging::GetTimestamp
    - logging::PrintLogPrefixAsJSON
    - size
    - empty
    - logging::OutputLog
    - logging::PrintLogPrefix
    linkageType: ''
    returnType: void
    signature: "void PrintLog(std::ostream& os, int severity, const char* file, int
      line,\n              const char* func, const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::PrintLog
      Src: /src/brpc/src/butil/logging.cc:1005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' os'
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - std::ostream
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1006
    functionName: logging::PrintLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - logging::PrintLog
    linkageType: ''
    returnType: void
    signature: "void PrintLog(std::ostream& os,\n              int severity, const
      char* file, int line,\n              const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 1011
    functionDepth: 0
    functionLinenumber: 1011
    functionLinenumberEnd: 1011
    functionName: logging::DoublyBufferedLogSink::DoublyBufferedLogSink
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DoublyBufferedLogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/logging.cc:1019,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1021
      start: 1018
    functionDepth: 1
    functionLinenumber: 1018
    functionLinenumberEnd: 1021
    functionName: logging::DoublyBufferedLogSink::GetInstance
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: DoublyBufferedLogSink
    signature: DoublyBufferedLogSink * DoublyBufferedLogSink::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - LogSink*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1031
      start: 1027
    functionDepth: 0
    functionLinenumber: 1027
    functionLinenumberEnd: 1031
    functionName: operator()(LogSink*& ptr)
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(LogSink*& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/logging.cc:1036,1
    - Dst: logging::DoublyBufferedLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1036,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sink
    argTypes:
    - LogSink*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1034
    functionDepth: 1
    functionLinenumber: 1034
    functionLinenumberEnd: 1038
    functionName: logging::SetLogSink
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 19
    functionsReached:
    - logging::DoublyBufferedLogSink::GetInstance
    - CHECK
    linkageType: ''
    returnType: LogSink
    signature: LogSink * SetLogSink(LogSink* sink)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1062,1
    - Dst: GetModuleFileNameW
      Src: /src/brpc/src/butil/logging.cc:1076,1
    - Dst: wcsrchr
      Src: /src/brpc/src/butil/logging.cc:1077,1
    - Dst: wcscat_s
      Src: /src/brpc/src/butil/logging.cc:1080,1
    - Dst: butil::UTF8ToWide
      Src: /src/brpc/src/butil/logging.cc:1082,1
    - Dst: std::wstring::empty
      Src: /src/brpc/src/butil/logging.cc:1083,1
    - Dst: memset
      Src: /src/brpc/src/butil/logging.cc:1087,1
    - Dst: CreateProcessW
      Src: /src/brpc/src/butil/logging.cc:1091,1
    - Dst: WaitForSingleObject
      Src: /src/brpc/src/butil/logging.cc:1093,1
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:1094,1
    - Dst: CloseHandle
      Src: /src/brpc/src/butil/logging.cc:1095,1
    - Dst: MessageBoxW
      Src: /src/brpc/src/butil/logging.cc:1098,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1061
    functionDepth: 1
    functionLinenumber: 1061
    functionLinenumberEnd: 1105
    functionName: logging::DisplayDebugMessageInDialog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - wcsrchr
    - std::wstring::empty
    - butil::UTF8ToWide
    - CloseHandle
    - CreateProcessW
    - memset
    - WaitForSingleObject
    - empty
    - wcscat_s
    - GetModuleFileNameW
    - MessageBoxW
    linkageType: ''
    returnType: void
    signature: void DisplayDebugMessageInDialog(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::StringSink::OnLogMessage
      Src: /src/brpc/src/butil/logging.cc:1111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1109
    functionDepth: 1
    functionLinenumber: 1109
    functionLinenumberEnd: 1112
    functionName: logging::StringSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::StringSink::OnLogMessage
    linkageType: ''
    returnType: bool
    signature: "bool StringSink::OnLogMessage(int severity, const char* file, int
      line,\n                              const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintLog
      Src: /src/brpc/src/butil/logging.cc:1118,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/logging.cc:1119,1
    - Dst: append
      Src: /src/brpc/src/butil/logging.cc:1122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 5
    argNames:
    - severity
    - file
    - line
    - func
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1125
      start: 1114
    functionDepth: 1
    functionLinenumber: 1114
    functionLinenumberEnd: 1125
    functionName: logging::StringSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - append
    - PrintLog
    - std::ostringstream::str
    linkageType: ''
    returnType: bool
    signature: "bool StringSink::OnLogMessage(int severity, const char* file,\n                              int
      line, const char* func,\n                              const butil::StringPiece&
      content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/logging.cc:1128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1129
      start: 1127
    functionDepth: 0
    functionLinenumber: 1127
    functionLinenumberEnd: 1129
    functionName: CharArrayStreamBuf::~CharArrayStreamBuf()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::~CharArrayStreamBuf()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/logging.cc:1132,1
    - Dst: std::max
      Src: /src/brpc/src/butil/logging.cc:1135,1
    - Dst: malloc
      Src: /src/brpc/src/butil/logging.cc:1136,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/logging.cc:1137,1
    - Dst: setp
      Src: /src/brpc/src/butil/logging.cc:1138,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/logging.cc:1139,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/logging.cc:1141,1
    - Dst: free
      Src: /src/brpc/src/butil/logging.cc:1142,1
    - Dst: setp
      Src: /src/brpc/src/butil/logging.cc:1146,1
    - Dst: pbump
      Src: /src/brpc/src/butil/logging.cc:1147,1
    - Dst: sputc
      Src: /src/brpc/src/butil/logging.cc:1149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1150
      start: 1131
    functionDepth: 1
    functionLinenumber: 1131
    functionLinenumberEnd: 1150
    functionName: logging::CharArrayStreamBuf::overflow
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::max
    - free
    - sputc
    - pbump
    - malloc
    - memcpy
    - BAIDU_UNLIKELY
    - setp
    - brpc::http_message_needs_eof
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::overflow(int ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1155
      start: 1152
    functionDepth: 0
    functionLinenumber: 1152
    functionLinenumberEnd: 1155
    functionName: logging::CharArrayStreamBuf::sync
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int CharArrayStreamBuf::sync()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setp
      Src: /src/brpc/src/butil/logging.cc:1158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1159
      start: 1157
    functionDepth: 0
    functionLinenumber: 1157
    functionLinenumberEnd: 1159
    functionName: logging::CharArrayStreamBuf::reset
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - setp
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf::reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - LogChar*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1161
    functionDepth: 0
    functionLinenumber: 1161
    functionLinenumberEnd: 1167
    functionName: "& LogStream::SetPosition(const LogChar* file, int line,\n                                  LogSeverity
      severity)"
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: "LogStream & LogStream::SetPosition(const LogChar* file, int line,\n
      \                                 LogSeverity severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - LogChar*
    - int
    - LogChar*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1177
      start: 1169
    functionDepth: 0
    functionLinenumber: 1169
    functionLinenumberEnd: 1177
    functionName: "& LogStream::SetPosition(const LogChar* file, int line,\n                                  const
      LogChar* func,\n                                  LogSeverity severity)"
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: "LogStream & LogStream::SetPosition(const LogChar* file, int line,\n
      \                                 const LogChar* func,\n                                  LogSeverity
      severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1183
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1183
    functionName: logging::is_bthread_linked
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_bthread_linked()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1193
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1193
    functionName: logging::destroy_tls_streams
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void destroy_tls_streams(void* data)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: logging::is_bthread_linked
      Src: /src/brpc/src/butil/logging.cc:1195,1
    - Dst: bthread_key_create
      Src: /src/brpc/src/butil/logging.cc:1196,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:1198,1
    - Dst: exit
      Src: /src/brpc/src/butil/logging.cc:1199,1
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/logging.cc:1202,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/logging.cc:1204,1
    - Dst: exit
      Src: /src/brpc/src/butil/logging.cc:1205,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1194
    functionDepth: 3
    functionLinenumber: 1194
    functionLinenumberEnd: 1208
    functionName: logging::create_stream_key_or_die
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::is_bthread_linked
    - exit
    - fprintf
    - pthread_key_create
    - bthread_key_create
    linkageType: ''
    returnType: void
    signature: void create_stream_key_or_die()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/logging.cc:1210,1
    - Dst: logging::is_bthread_linked
      Src: /src/brpc/src/butil/logging.cc:1211,1
    - Dst: bthread_getspecific
      Src: /src/brpc/src/butil/logging.cc:1212,1
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/logging.cc:1214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1209
    functionDepth: 3
    functionLinenumber: 1209
    functionLinenumberEnd: 1216
    functionName: logging::get_tls_stream_array
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - bthread_getspecific
    - pthread_getspecific
    - pthread_once
    - logging::is_bthread_linked
    linkageType: ''
    returnType: LogStream
    signature: LogStream ** get_tls_stream_array()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: logging::get_tls_stream_array
      Src: /src/brpc/src/butil/logging.cc:1219,1
    - Dst: LogStream::LogStream
      Src: /src/brpc/src/butil/logging.cc:1221,1
    - Dst: memset
      Src: /src/brpc/src/butil/logging.cc:1222,1
    - Dst: logging::is_bthread_linked
      Src: /src/brpc/src/butil/logging.cc:1223,1
    - Dst: bthread_setspecific
      Src: /src/brpc/src/butil/logging.cc:1224,1
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/logging.cc:1226,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1230
      start: 1218
    functionDepth: 4
    functionLinenumber: 1218
    functionLinenumberEnd: 1230
    functionName: logging::get_or_new_tls_stream_array
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - logging::get_tls_stream_array
    - bthread_setspecific
    - LogStream::LogStream
    - logging::is_bthread_linked
    - memset
    - pthread_setspecific
    linkageType: ''
    returnType: LogStream
    signature: LogStream ** get_or_new_tls_stream_array()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/logging.cc:1238,1
    - Dst: logging::get_or_new_tls_stream_array
      Src: /src/brpc/src/butil/logging.cc:1241,1
    - Dst: LogStream::LogStream
      Src: /src/brpc/src/butil/logging.cc:1244,1
    - Dst: LogStream*::empty
      Src: /src/brpc/src/butil/logging.cc:1247,1
    - Dst: LogStream*::SetPosition
      Src: /src/brpc/src/butil/logging.cc:1248,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - LogChar*
    - int
    - LogChar*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1251
      start: 1232
    functionDepth: 5
    functionLinenumber: 1232
    functionLinenumberEnd: 1251
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::get_or_new_tls_stream_array
    - LogStream*::empty
    - DCHECK_LT
    - LogStream::LogStream
    - LogStream*::SetPosition
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file,\n                                  int
      line,\n                                  const LogChar* func,\n                                  LogSeverity
      severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - LogChar*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1257
      start: 1253
    functionDepth: 1
    functionLinenumber: 1253
    functionLinenumberEnd: 1257
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 3
    functionsReached:
    - logging::CreateLogStream
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file,\n                                  int
      line,\n                                  LogSeverity severity)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LogStream*::Flush
      Src: /src/brpc/src/butil/logging.cc:1261,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - stream
    argTypes:
    - LogStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1259
    functionDepth: 0
    functionLinenumber: 1259
    functionLinenumberEnd: 1263
    functionName: logging::DestroyLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - LogStream*::Flush
    linkageType: ''
    returnType: void
    signature: void DestroyLogStream(LogStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - LogChar*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1270
      start: 1267
    functionDepth: 1
    functionLinenumber: 1267
    functionLinenumberEnd: 1270
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - logging::CreateLogStream
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file, int line,\n                                  LogSeverity
      severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LogStream::LogStream
      Src: /src/brpc/src/butil/logging.cc:1276,1
    - Dst: LogStream*::SetPosition
      Src: /src/brpc/src/butil/logging.cc:1277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - LogChar*
    - int
    - LogChar*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1273
    functionDepth: 0
    functionLinenumber: 1273
    functionLinenumberEnd: 1279
    functionName: logging::CreateLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 4
    functionsReached:
    - LogStream::LogStream
    - LogStream*::SetPosition
    linkageType: ''
    returnType: LogStream
    signature: "LogStream * CreateLogStream(const LogChar* file, int line,\n                                  const
      LogChar* func,\n                                  LogSeverity severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - LogStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1281
    functionDepth: 0
    functionLinenumber: 1281
    functionLinenumberEnd: 1283
    functionName: logging::DestroyLogStream
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyLogStream(LogStream* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/logging.cc:1290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1292
      start: 1289
    functionDepth: 1
    functionLinenumber: 1289
    functionLinenumberEnd: 1292
    functionName: logging::DefaultLogSink::GetInstance
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: DefaultLogSink
    signature: DefaultLogSink * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::DefaultLogSink::OnLogMessage
      Src: /src/brpc/src/butil/logging.cc:1296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1297
      start: 1294
    functionDepth: 1
    functionLinenumber: 1294
    functionLinenumberEnd: 1297
    functionName: logging::DefaultLogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - logging::DefaultLogSink::OnLogMessage
    linkageType: ''
    returnType: bool
    signature: "bool OnLogMessage(int severity, const char* file, int line,\n                      const
      butil::StringPiece& content) override"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LogInfoToLogStr
      Src: /src/brpc/src/butil/logging.cc:1305,1
    - Dst: fwrite
      Src: /src/brpc/src/butil/logging.cc:1309,1
    - Dst: std::string::data
      Src: /src/brpc/src/butil/logging.cc:1309,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/logging.cc:1309,1
    - Dst: fflush
      Src: /src/brpc/src/butil/logging.cc:1310,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/logging.cc:1316,1
    - Dst: LogInfoToLogStr
      Src: /src/brpc/src/butil/logging.cc:1317,1
    - Dst: Log2File
      Src: /src/brpc/src/butil/logging.cc:1319,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/logging.cc:1322,1
    - Dst: GetTimestamp
      Src: /src/brpc/src/butil/logging.cc:1324,1
    - Dst: as_string
      Src: /src/brpc/src/butil/logging.cc:1328,1
    - Dst: std::move
      Src: /src/brpc/src/butil/logging.cc:1331,1
    - Dst: logging::AsyncLogger::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1334,1
    - Dst: std::move
      Src: /src/brpc/src/butil/logging.cc:1334,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 5
    argNames:
    - severity
    - file
    - line
    - func
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - char*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1338
      start: 1299
    functionDepth: 1
    functionLinenumber: 1299
    functionLinenumberEnd: 1338
    functionName: logging::DefaultLogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 2
    functionsReached:
    - std::move
    - LogInfoToLogStr
    - std::string::data
    - Log2File
    - GetTimestamp
    - std::string::empty
    - fflush
    - fwrite
    - as_string
    - logging::AsyncLogger::GetInstance
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: "bool OnLogMessage(int severity, const char* file,\n                      int
      line, const char* func,\n                      const butil::StringPiece& content)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1340
      start: 1340
    functionDepth: 0
    functionLinenumber: 1340
    functionLinenumberEnd: 1340
    functionName: logging::DefaultLogSink::DefaultLogSink
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultLogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1341
      start: 1341
    functionDepth: 0
    functionLinenumber: 1341
    functionLinenumberEnd: 1341
    functionName: ~DefaultLogSink() override
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DefaultLogSink() override
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogStream::empty
      Src: /src/brpc/src/butil/logging.cc:1346,1
    - Dst: butil::debug::StackTrace::StackTrace
      Src: /src/brpc/src/butil/logging.cc:1354,1
    - Dst: butil::debug::StackTrace::Addresses
      Src: /src/brpc/src/butil/logging.cc:1356,1
    - Dst: butil::debug::StackTrace::OutputToStream
      Src: /src/brpc/src/butil/logging.cc:1366,1
    - Dst: butil::debug::StackTrace::OutputToStream
      Src: /src/brpc/src/butil/logging.cc:1368,1
    - Dst: pbump
      Src: /src/brpc/src/butil/logging.cc:1375,1
    - Dst: logging::DoublyBufferedLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1385,1
    - Dst: OnLogMessage
      Src: /src/brpc/src/butil/logging.cc:1387,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1388,1
    - Dst: logging::ComlogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1393,1
    - Dst: logging::DefaultLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1395,1
    - Dst: logging::ComlogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1401,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1402,1
    - Dst: logging::DefaultLogSink::GetInstance
      Src: /src/brpc/src/butil/logging.cc:1408,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1409,1
    - Dst: logging::LogStream::content
      Src: /src/brpc/src/butil/logging.cc:1416,1
    - Dst: butil::StringPiece::copy
      Src: /src/brpc/src/butil/logging.cc:1418,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/logging.cc:1418,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/logging.cc:1419,1
    - Dst: log_assert_handler
      Src: /src/brpc/src/butil/logging.cc:1423,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/butil/logging.cc:1423,1
    - Dst: DisplayDebugMessageInDialog
      Src: /src/brpc/src/butil/logging.cc:1431,1
    - Dst: butil::StringPiece::as_string
      Src: /src/brpc/src/butil/logging.cc:1431,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:1434,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1437
      start: 1345
    functionDepth: 1
    functionLinenumber: 1345
    functionLinenumberEnd: 1437
    functionName: logging::LogStream::FlushWithoutReset
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::DoublyBufferedLogSink::GetInstance
    - butil::debug::BreakDebugger
    - log_assert_handler
    - butil::debug::Alias
    - arraysize
    - butil::StringPiece::as_string
    - pbump
    - logging::ComlogSink::GetInstance
    - logging::LogStream::content
    - butil::debug::StackTrace::StackTrace
    - logging::LogStream::empty
    - OnLogMessage
    - butil::StringPiece::copy
    - logging::DefaultLogSink::GetInstance
    - DisplayDebugMessageInDialog
    - butil::debug::StackTrace::OutputToStream
    - butil::debug::StackTrace::Addresses
    linkageType: ''
    returnType: void
    signature: void LogStream::FlushWithoutReset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - file
    - line
    - severity
    argTypes:
    - char*
    - int
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1440
      start: 1439
    functionDepth: 0
    functionLinenumber: 1439
    functionLinenumberEnd: 1440
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogMessage::LogMessage(const char* file, int line, LogSeverity
      severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - file
    - line
    - func
    - severity
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1445
      start: 1442
    functionDepth: 0
    functionLinenumber: 1442
    functionLinenumberEnd: 1445
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateLogStream
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line,\n                       const
      char* func, LogSeverity severity)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - file
    - line
    - result
    argTypes:
    - char*
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1448
      start: 1447
    functionDepth: 0
    functionLinenumber: 1447
    functionLinenumberEnd: 1448
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogMessage::LogMessage(const char* file, int line, std::string*
      result)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 4
    argNames:
    - file
    - line
    - func
    - result
    argTypes:
    - char*
    - int
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1450
    functionDepth: 0
    functionLinenumber: 1450
    functionLinenumberEnd: 1455
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateLogStream
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line,\n                       const
      char* func, std::string* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - file
    - line
    - severity
    - result
    argTypes:
    - char*
    - int
    - LogSeverity
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1459
      start: 1457
    functionDepth: 0
    functionLinenumber: 1457
    functionLinenumberEnd: 1459
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line, LogSeverity
      severity,\n                       std::string* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateLogStream
      Src: /src/brpc/src/butil/logging.cc:1463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 5
    argNames:
    - file
    - line
    - func
    - severity
    - result
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1466
      start: 1461
    functionDepth: 0
    functionLinenumber: 1461
    functionLinenumberEnd: 1466
    functionName: logging::LogMessage::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - CreateLogStream
    linkageType: ''
    returnType: void
    signature: "void LogMessage::LogMessage(const char* file, int line, const char*
      func,\n                       LogSeverity severity, std::string* result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DestroyLogStream
      Src: /src/brpc/src/butil/logging.cc:1469,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1470
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1470
    functionName: LogMessage::~LogMessage()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - DestroyLogStream
    linkageType: ''
    returnType: void
    signature: void LogMessage::~LogMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::GetLastError
      Src: /src/brpc/src/butil/logging.cc:1481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1487
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1487
    functionName: logging::GetLastSystemErrorCode
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - ::GetLastError
    linkageType: ''
    returnType: SystemErrorCode
    signature: SystemErrorCode GetLastSystemErrorCode()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::SetLastError
      Src: /src/brpc/src/butil/logging.cc:1491,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1489
    functionDepth: 0
    functionLinenumber: 1489
    functionLinenumberEnd: 1497
    functionName: logging::SetLastSystemErrorCode
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - ::SetLastError
    linkageType: ''
    returnType: void
    signature: void SetLastSystemErrorCode(SystemErrorCode err)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FormatMessageA
      Src: /src/brpc/src/butil/logging.cc:1504,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/logging.cc:1505,1
    - Dst: butil::CollapseWhitespaceASCII
      Src: /src/brpc/src/butil/logging.cc:1508,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/logging.cc:1509,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/logging.cc:1511,1
    - Dst: GetLastError
      Src: /src/brpc/src/butil/logging.cc:1512,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1513
      start: 1500
    functionDepth: 1
    functionLinenumber: 1500
    functionLinenumberEnd: 1513
    functionName: std::string SystemErrorCodeToString(SystemErrorCode error_code)
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - GetLastError
    - butil::CollapseWhitespaceASCII
    - arraysize
    - FormatMessageA
    - butil::StringPrintf
    linkageType: ''
    returnType: BUTIL_EXPORT
    signature: BUTIL_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: berror
      Src: /src/brpc/src/butil/logging.cc:1516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1517
      start: 1515
    functionDepth: 1
    functionLinenumber: 1515
    functionLinenumberEnd: 1517
    functionName: std::string SystemErrorCodeToString(SystemErrorCode error_code)
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - berror
    linkageType: ''
    returnType: BUTIL_EXPORT
    signature: BUTIL_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - file
    - line
    - severity
    - err
    argTypes:
    - char*
    - int
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1529
      start: 1524
    functionDepth: 0
    functionLinenumber: 1524
    functionLinenumberEnd: 1529
    functionName: logging::Win32ErrorLogMessage::Win32ErrorLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file,\n
      \                                          int line,\n                                           LogSeverity
      severity,\n                                           SystemErrorCode err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - file
    - line
    - func
    - severity
    - err
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1538
      start: 1531
    functionDepth: 0
    functionLinenumber: 1531
    functionLinenumberEnd: 1538
    functionName: logging::Win32ErrorLogMessage::Win32ErrorLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file,\n
      \                                          int line,\n                                           const
      char* func,\n                                           LogSeverity severity,\n
      \                                          SystemErrorCode err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stream
      Src: /src/brpc/src/butil/logging.cc:1541,1
    - Dst: SystemErrorCodeToString
      Src: /src/brpc/src/butil/logging.cc:1541,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/logging.cc:1545,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1546
      start: 1540
    functionDepth: 1
    functionLinenumber: 1540
    functionLinenumberEnd: 1546
    functionName: Win32ErrorLogMessage::~Win32ErrorLogMessage()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - SystemErrorCodeToString
    - stream
    linkageType: ''
    returnType: void
    signature: void Win32ErrorLogMessage::~Win32ErrorLogMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - file
    - line
    - severity
    - err
    argTypes:
    - char*
    - int
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1552
      start: 1548
    functionDepth: 0
    functionLinenumber: 1548
    functionLinenumberEnd: 1552
    functionName: logging::ErrnoLogMessage::ErrnoLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ErrnoLogMessage::ErrnoLogMessage(const char* file,\n                                 int
      line,\n                                 LogSeverity severity,\n                                 SystemErrorCode
      err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 5
    argNames:
    - file
    - line
    - func
    - severity
    - err
    argTypes:
    - char*
    - int
    - char*
    - LogSeverity
    - SystemErrorCode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1560
      start: 1554
    functionDepth: 0
    functionLinenumber: 1554
    functionLinenumberEnd: 1560
    functionName: logging::ErrnoLogMessage::ErrnoLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ErrnoLogMessage::ErrnoLogMessage(const char* file,\n                                 int
      line,\n                                 const char* func,\n                                 LogSeverity
      severity,\n                                 SystemErrorCode err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stream
      Src: /src/brpc/src/butil/logging.cc:1563,1
    - Dst: SystemErrorCodeToString
      Src: /src/brpc/src/butil/logging.cc:1563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1564
      start: 1562
    functionDepth: 0
    functionLinenumber: 1562
    functionLinenumberEnd: 1564
    functionName: ErrnoLogMessage::~ErrnoLogMessage()
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - SystemErrorCodeToString
    - stream
    linkageType: ''
    returnType: void
    signature: void ErrnoLogMessage::~ErrnoLogMessage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::CloseLogFileUnlocked
      Src: /src/brpc/src/butil/logging.cc:1569,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1570
      start: 1567
    functionDepth: 2
    functionLinenumber: 1567
    functionLinenumberEnd: 1570
    functionName: logging::CloseLogFile
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::CloseLogFileUnlocked
    linkageType: ''
    returnType: void
    signature: void CloseLogFile()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/butil/logging.cc:1575,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/logging.cc:1578,1
    - Dst: write
      Src: /src/brpc/src/butil/logging.cc:1579,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/logging.cc:1590,1
    - Dst: write
      Src: /src/brpc/src/butil/logging.cc:1590,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/logging.cc:1600,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 20
    argCount: 2
    argNames:
    - level
    - message
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1601
      start: 1572
    functionDepth: 1
    functionLinenumber: 1572
    functionLinenumberEnd: 1601
    functionName: logging::RawLog
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - HANDLE_EINTR
    - write
    - butil::debug::BreakDebugger
    - strlen
    linkageType: ''
    returnType: void
    signature: void RawLog(int level, const char* message)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::wstring
      Src: /src/brpc/src/butil/logging.cc:1610,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1611
      start: 1607
    functionDepth: 0
    functionLinenumber: 1607
    functionLinenumberEnd: 1611
    functionName: logging::GetLogFileFullPath
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::wstring
    linkageType: ''
    returnType: std::wstring
    signature: std::wstring GetLogFileFullPath()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::find_last_of
      Src: /src/brpc/src/butil/logging.cc:1636,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/logging.cc:1639,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1639,1
    - Dst: assign
      Src: /src/brpc/src/butil/logging.cc:1640,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:1640,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1640,1
    - Dst: butil::StringPiece::find_last_of
      Src: /src/brpc/src/butil/logging.cc:1641,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/butil/logging.cc:1643,1
    - Dst: assign
      Src: /src/brpc/src/butil/logging.cc:1646,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:1646,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1646,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/butil/logging.cc:1647,1
    - Dst: assign
      Src: /src/brpc/src/butil/logging.cc:1650,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/logging.cc:1650,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/logging.cc:1650,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/logging.cc:1651,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1651,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1651,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1652,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1653,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/logging.cc:1654,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1654,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1654,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - filename
    - required_v
    - line_no
    argTypes:
    - char*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1657
      start: 1632
    functionDepth: 1
    functionLinenumber: 1632
    functionLinenumberEnd: 1657
    functionName: logging::VLogSite
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::find_last_of
    - assign
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::data
    - std::transform
    - empty
    - begin
    - butil::StringPiece::size
    linkageType: ''
    returnType: void
    signature: void VLogSite(const char* filename, int required_v, int line_no)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/logging.cc:1661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1661
      start: 1661
    functionDepth: 0
    functionLinenumber: 1661
    functionLinenumberEnd: 1661
    functionName: logging::next
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: VLogSite
    signature: VLogSite * next()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/logging.cc:1663,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1663
      start: 1662
    functionDepth: 0
    functionLinenumber: 1662
    functionLinenumberEnd: 1663
    functionName: logging::next
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: VLogSite
    signature: VLogSite * next() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/logging.cc:1665,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - next
    argTypes:
    - VLogSite*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1664
    functionDepth: 0
    functionLinenumber: 1664
    functionLinenumberEnd: 1665
    functionName: logging::set_next
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Store
    linkageType: ''
    returnType: void
    signature: void set_next(VLogSite* next)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1667
      start: 1667
    functionDepth: 0
    functionLinenumber: 1667
    functionLinenumberEnd: 1667
    functionName: logging::v
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int v() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1668
      start: 1668
    functionDepth: 0
    functionLinenumber: 1668
    functionLinenumberEnd: 1668
    functionName: '& v()'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int & v()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1670
      start: 1670
    functionDepth: 0
    functionLinenumber: 1670
    functionLinenumberEnd: 1670
    functionName: logging::required_v
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int required_v() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1671
      start: 1671
    functionDepth: 0
    functionLinenumber: 1671
    functionLinenumberEnd: 1671
    functionName: logging::line_no
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int line_no() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1673
      start: 1673
    functionDepth: 0
    functionLinenumber: 1673
    functionLinenumberEnd: 1673
    functionName: '& module() const'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & module() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1674
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1674
    functionName: '& full_module() const'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & full_module() const
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - wild
    - str
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1729
      start: 1697
    functionDepth: 0
    functionLinenumber: 1697
    functionLinenumberEnd: 1729
    functionName: logging::wildcmp
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool wildcmp(const char* wild, const char* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1732
      start: 1732
    functionDepth: 0
    functionLinenumber: 1732
    functionLinenumberEnd: 1732
    functionName: logging::VModuleList
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void VModuleList()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:1735,1
    - Dst: logging::clear
      Src: /src/brpc/src/butil/logging.cc:1736,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/logging.cc:1739,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/logging.cc:1741,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1741,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/logging.cc:1742,1
    - Dst: strtol
      Src: /src/brpc/src/butil/logging.cc:1743,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1743,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1746,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1747,1
    - Dst: isspace
      Src: /src/brpc/src/butil/logging.cc:1748,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1748,1
    - Dst: isspace
      Src: /src/brpc/src/butil/logging.cc:1750,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/logging.cc:1750,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::end
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::begin
      Src: /src/brpc/src/butil/logging.cc:1756,1
    - Dst: std::string::find_first_of
      Src: /src/brpc/src/butil/logging.cc:1757,1
    - Dst: emplace_back
      Src: /src/brpc/src/butil/logging.cc:1760,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1764,1
    - Dst: std::reverse
      Src: /src/brpc/src/butil/logging.cc:1765,1
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1765,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1765,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 27
    argCount: 1
    argNames:
    - vmodules
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1768
      start: 1734
    functionDepth: 1
    functionLinenumber: 1734
    functionLinenumberEnd: 1768
    functionName: logging::init
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - std::string::end
    - butil::StringSplitter::length
    - std::string::find_first_of
    - logging::clear
    - isspace
    - strtol
    - butil::StringSplitter::field
    - emplace_back
    - std::transform
    - empty
    - begin
    - butil::BaseIteratorRangeToNumberTraits::max
    - std::string::begin
    - std::reverse
    linkageType: ''
    returnType: int
    signature: int init(const char* vmodules)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1772,1
    - Dst: find
      Src: /src/brpc/src/butil/logging.cc:1774,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1775,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1779,1
    - Dst: find
      Src: /src/brpc/src/butil/logging.cc:1780,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1781,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:1788,1
    - Dst: logging::wildcmp
      Src: /src/brpc/src/butil/logging.cc:1789,1
    - Dst: first::c_str
      Src: /src/brpc/src/butil/logging.cc:1789,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:1789,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1793,1
    - Dst: logging::wildcmp
      Src: /src/brpc/src/butil/logging.cc:1794,1
    - Dst: first::c_str
      Src: /src/brpc/src/butil/logging.cc:1794,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:1794,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 3
    argNames:
    - ' module'
    - ' full_module'
    - v
    argTypes:
    - std::string
    - std::string
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1800
      start: 1770
    functionDepth: 1
    functionLinenumber: 1770
    functionLinenumberEnd: 1800
    functionName: logging::find_verbose_level
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - find
    - logging::wildcmp
    - first::c_str
    - empty
    - c_str
    - size
    linkageType: ''
    returnType: bool
    signature: "bool find_verbose_level(const std::string& module,\n                            const
      std::string& full_module, int* v) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/logging.cc:1805,1
    - Dst: end
      Src: /src/brpc/src/butil/logging.cc:1805,1
    - Dst: size
      Src: /src/brpc/src/butil/logging.cc:1809,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1812
      start: 1802
    functionDepth: 0
    functionLinenumber: 1802
    functionLinenumberEnd: 1812
    functionName: logging::print
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - end
    - size
    - begin
    linkageType: ''
    returnType: void
    signature: void print(std::ostream& os) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1834,1
    - Dst: VLogSite*::set_next
      Src: /src/brpc/src/butil/logging.cc:1843,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 3
    argNames:
    - site
    - expected_module_list
    - expected_default_v
    argTypes:
    - VLogSite*
    - VModuleList**
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1846
      start: 1831
    functionDepth: 1
    functionLinenumber: 1831
    functionLinenumberEnd: 1846
    functionName: logging::vlog_site_list_add
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - VLogSite*::set_next
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: int
    signature: "int vlog_site_list_add(VLogSite* site,\n                              VModuleList**
      expected_module_list,\n                              int* expected_default_v)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VLogSite::VLogSite
      Src: /src/brpc/src/butil/logging.cc:1850,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1857,1
    - Dst: VModuleList*::find_verbose_level
      Src: /src/brpc/src/butil/logging.cc:1859,1
    - Dst: VLogSite*::module
      Src: /src/brpc/src/butil/logging.cc:1860,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1860,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1860,1
    - Dst: logging::vlog_site_list_add
      Src: /src/brpc/src/butil/logging.cc:1862,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1863,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1864,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - v
    - filename
    - line_no
    - required_v
    argTypes:
    - int**
    - char*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1865
      start: 1848
    functionDepth: 2
    functionLinenumber: 1848
    functionLinenumberEnd: 1865
    functionName: logging::add_vlog_site
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - VLogSite*::module
    - VModuleList*::find_verbose_level
    - logging::vlog_site_list_add
    - VLogSite*::full_module
    - VLogSite::VLogSite
    - VLogSite*::v
    linkageType: ''
    returnType: bool
    signature: "bool add_vlog_site(const int** v, const char* filename, int line_no,\n
      \                  int required_v)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1870,1
    - Dst: VLogSite*::next
      Src: /src/brpc/src/butil/logging.cc:1874,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1875,1
    - Dst: VLogSite*::required_v
      Src: /src/brpc/src/butil/logging.cc:1876,1
    - Dst: VLogSite*::line_no
      Src: /src/brpc/src/butil/logging.cc:1877,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1878,1
    - Dst: VLogSitePrinter*::print
      Src: /src/brpc/src/butil/logging.cc:1879,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - printer
    argTypes:
    - VLogSitePrinter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1881
      start: 1867
    functionDepth: 1
    functionLinenumber: 1867
    functionLinenumberEnd: 1881
    functionName: logging::print_vlog_sites
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - VLogSite*::line_no
    - VLogSite*::next
    - VLogSitePrinter*::print
    - VLogSite*::full_module
    - BAIDU_SCOPED_LOCK
    - VLogSite*::required_v
    - VLogSite*::v
    linkageType: ''
    returnType: void
    signature: void print_vlog_sites(VLogSitePrinter* printer)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1886,1
    - Dst: VModuleList::VModuleList
      Src: /src/brpc/src/butil/logging.cc:1888,1
    - Dst: LOG
      Src: /src/brpc/src/butil/logging.cc:1890,1
    - Dst: VModuleList*::init
      Src: /src/brpc/src/butil/logging.cc:1893,1
    - Dst: LOG
      Src: /src/brpc/src/butil/logging.cc:1895,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1903,1
    - Dst: VLogSite*::next
      Src: /src/brpc/src/butil/logging.cc:1908,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1909,1
    - Dst: VModuleList*::find_verbose_level
      Src: /src/brpc/src/butil/logging.cc:1910,1
    - Dst: VLogSite*::module
      Src: /src/brpc/src/butil/logging.cc:1911,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1911,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1911,1
    - Dst: std::deque<std::pair<VModuleList*, int64_t> >::pair<VModuleList*, int64_t>
        >
      Src: /src/brpc/src/butil/logging.cc:1919,1
    - Dst: push_back
      Src: /src/brpc/src/butil/logging.cc:1921,1
    - Dst: std::make_pair
      Src: /src/brpc/src/butil/logging.cc:1922,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/logging.cc:1923,1
    - Dst: empty
      Src: /src/brpc/src/butil/logging.cc:1924,1
    - Dst: front
      Src: /src/brpc/src/butil/logging.cc:1925,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/logging.cc:1925,1
    - Dst: front
      Src: /src/brpc/src/butil/logging.cc:1926,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/logging.cc:1927,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 1
    argNames:
    - vmodule
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1931
      start: 1884
    functionDepth: 1
    functionLinenumber: 1884
    functionLinenumberEnd: 1931
    functionName: logging::on_reset_vmodule
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - front
    - VModuleList::VModuleList
    - butil::gettimeofday_us
    - VLogSite*::module
    - VLogSite*::next
    - std::deque<std::pair<VModuleList*, int64_t> >::pair<VModuleList*, int64_t> >
    - VModuleList*::find_verbose_level
    - VLogSite*::full_module
    - BAIDU_SCOPED_LOCK
    - push_back
    - VModuleList*::init
    - VLogSite*::v
    - empty
    - pop_front
    - std::make_pair
    - LOG
    linkageType: ''
    returnType: int
    signature: int on_reset_vmodule(const char* vmodule)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::on_reset_vmodule
      Src: /src/brpc/src/butil/logging.cc:1934,1
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.cc:1934,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' vmodule'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1935
      start: 1933
    functionDepth: 2
    functionLinenumber: 1933
    functionLinenumberEnd: 1935
    functionName: logging::validate_vmodule
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - c_str
    - logging::on_reset_vmodule
    linkageType: ''
    returnType: bool
    signature: bool validate_vmodule(const char*, const std::string& vmodule)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1946,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/logging.cc:1948,1
    - Dst: VLogSite*::next
      Src: /src/brpc/src/butil/logging.cc:1952,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1953,1
    - Dst: VModuleList*::find_verbose_level
      Src: /src/brpc/src/butil/logging.cc:1955,1
    - Dst: VLogSite*::module
      Src: /src/brpc/src/butil/logging.cc:1956,1
    - Dst: VLogSite*::full_module
      Src: /src/brpc/src/butil/logging.cc:1956,1
    - Dst: VLogSite*::v
      Src: /src/brpc/src/butil/logging.cc:1956,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - default_v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1960
      start: 1941
    functionDepth: 1
    functionLinenumber: 1941
    functionLinenumberEnd: 1960
    functionName: logging::on_reset_verbose
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 1
    functionsReached:
    - VLogSite*::module
    - VLogSite*::next
    - VModuleList*::find_verbose_level
    - VLogSite*::full_module
    - BAIDU_SCOPED_LOCK
    - VLogSite*::v
    linkageType: ''
    returnType: void
    signature: void on_reset_verbose(int default_v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::on_reset_verbose
      Src: /src/brpc/src/butil/logging.cc:1963,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1965
      start: 1962
    functionDepth: 2
    functionLinenumber: 1962
    functionLinenumberEnd: 1965
    functionName: logging::validate_v
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - logging::on_reset_verbose
    linkageType: ''
    returnType: bool
    signature: bool validate_v(const char*, int32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::WideToUTF8
      Src: /src/brpc/src/butil/logging.cc:1971,1
    - Dst: std::wstring
      Src: /src/brpc/src/butil/logging.cc:1971,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' out'
    - wstr
    argTypes:
    - std::ostream
    - wchar_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1972
      start: 1970
    functionDepth: 1
    functionLinenumber: 1970
    functionLinenumberEnd: 1972
    functionName: '& operator<<(std::ostream& out, const wchar_t* wstr)'
    functionSourceFile: /src/brpc/src/butil/logging.cc
    functionUses: 0
    functionsReached:
    - std::wstring
    - butil::WideToUTF8
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& out, const wchar_t* wstr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: DCHECK_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_IS_ON()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    functionName: DCHECK_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_IS_ON()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: DPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 49
    functionName: DPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 50
    functionName: DPCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPCHECK(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 51
    functionName: DVPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 53
    functionName: DPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: DPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: DPCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPCHECK(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: DVPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    functionName: LOG_BACKTRACE_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: LOG_BACKTRACE_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 68
    functionName: LOG_BACKTRACE_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 72
    functionName: LOG_BACKTRACE_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: LOG_AT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT(severity, file, line)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingSettings
      Src: /src/brpc/src/butil/logging.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 277
    functionName: logging::LoggingSettings
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 1
    functionsReached:
    - logging::LoggingSettings
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT LoggingSettings
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::BaseInitLoggingImpl
      Src: /src/brpc/src/butil/logging.h:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' settings'
    argTypes:
    - LoggingSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 295
    functionDepth: 3
    functionLinenumber: 295
    functionLinenumberEnd: 297
    functionName: logging::InitLogging
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached:
    - logging::BaseInitLoggingImpl
    linkageType: ''
    returnType: bool
    signature: bool InitLogging(const LoggingSettings& settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 322
    functionName: logging::LogSink::LogSink
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    functionName: ~LogSink()
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogSink::OnLogMessage
      Src: /src/brpc/src/butil/logging.h:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' log_content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 332
    functionName: logging::LogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 1
    functionsReached:
    - logging::LogSink::OnLogMessage
    linkageType: ''
    returnType: bool
    signature: "bool OnLogMessage(int severity, const char* file,\n                              int
      line, const char* /*func*/,\n                              const butil::StringPiece&
      log_content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - ClassName
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 400
    functionName: BAIDU_COMPACT_LOG_EX
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_COMPACT_LOG_EX(severity, ClassName, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 403
    functionName: BAIDU_COMPACK_LOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_COMPACK_LOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 421
    functionName: LOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IS_ON(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - filepath
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 432
    functionName: BAIDU_VLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_VLOG_IS_ON(verbose_level, filepath)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - filepath
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 442
    functionName: BAIDU_VLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_VLOG_IS_ON(verbose_level, filepath)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 445
    functionName: VLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IS_ON(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 464
    functionName: ~VLogSitePrinter()
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~VLogSitePrinter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - stream
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 473
    functionName: BAIDU_LAZY_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LAZY_STREAM(stream, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 482
    functionDepth: 0
    functionLinenumber: 482
    functionLinenumberEnd: 483
    functionName: LOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_STREAM(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 486
    functionName: LOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2039
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 488
    functionName: LOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 214
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 491
    functionName: LOG_BACKTRACE_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 496
    functionName: LOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 498
    functionName: SYSLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 498
    functionDepth: 0
    functionLinenumber: 498
    functionLinenumberEnd: 499
    functionName: SYSLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 500
    functionName: SYSLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 500
    functionDepth: 0
    functionLinenumber: 500
    functionLinenumberEnd: 501
    functionName: SYSLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 501
    functionDepth: 0
    functionLinenumber: 501
    functionLinenumberEnd: 502
    functionName: SYSLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 503
    functionName: SYSLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 504
    functionName: SYSLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 505
    functionName: SYSLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 506
      start: 505
    functionDepth: 0
    functionLinenumber: 505
    functionLinenumberEnd: 506
    functionName: SYSLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 507
    functionName: SYSLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 510
    functionName: SYSLOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 13
    argNames:
    - (
    - _1
    - ','
    - _2
    - ','
    - _3
    - ','
    - _4
    - ','
    - NAME
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 514
    functionName: LOG_AT_SELECTOR
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_SELECTOR(_1, _2, _3, _4, NAME, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 515
    functionDepth: 0
    functionLinenumber: 515
    functionLinenumberEnd: 517
    functionName: LOG_AT_STREAM1
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_STREAM1(severity, file, line)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - ','
    - func
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 519
    functionName: LOG_AT_STREAM2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_STREAM2(severity, file, line, func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 520
    functionName: LOG_AT_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_STREAM(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 523
    functionName: LOG_AT1
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT1(severity, file, line)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - ','
    - func
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 525
    functionName: LOG_AT2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT2(severity, file, line, func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 526
    functionName: LOG_AT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 531
    functionName: VLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_STREAM(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 534
    functionName: VLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 534
    functionDepth: 0
    functionLinenumber: 534
    functionLinenumberEnd: 537
    functionName: VLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 540
    functionName: VLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_EVERY_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 540
    functionDepth: 0
    functionLinenumber: 540
    functionLinenumberEnd: 542
    functionName: VLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_EVERY_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 545
    functionName: VLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_FIRST_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 547
    functionName: VLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_FIRST_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 548
    functionDepth: 0
    functionLinenumber: 548
    functionLinenumberEnd: 549
    functionName: VLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_ONCE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 550
    functionName: VLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_ONCE(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 553
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 553
    functionName: VLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_EVERY_SECOND(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 553
    functionDepth: 0
    functionLinenumber: 553
    functionLinenumberEnd: 555
    functionName: VLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_EVERY_SECOND(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 560
    functionName: VPLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG_STREAM(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 564
    functionName: VPLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG_STREAM(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: VPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 572
    functionName: VPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 577
    functionName: PLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_STREAM(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 578
    functionDepth: 0
    functionLinenumber: 578
    functionLinenumberEnd: 581
    functionName: PLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_STREAM(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 585
    functionName: PLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 221
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 587
    functionName: PLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 48
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 609
    functionName: CHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 602
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 611
    functionName: PCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - name
    - ','
    - op
    - ','
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 613
    functionName: BAIDU_CHECK_OP
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CHECK_OP(name, op, val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 619
    functionName: CHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 602
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 623
    functionName: PCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - name
    - ','
    - op
    - ','
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 634
    functionName: BAIDU_CHECK_OP
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CHECK_OP(name, op, val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/logging.h:645,1
    - Dst: std::string::string
      Src: /src/brpc/src/butil/logging.h:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' v1'
    - ' v2'
    - names
    argTypes:
    - t1
    - t2
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 647
    functionName: logging::MakeCheckOpString
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - std::string::string
    linkageType: ''
    returnType: std::string
    signature: std::string * MakeCheckOpString(const t1& v1, const t2& v2, const char*
      names)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - name
    - ','
    - op
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 673
    functionDepth: 0
    functionLinenumber: 673
    functionLinenumberEnd: 684
    functionName: BAIDU_DEFINE_CHECK_OP_IMPL
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_DEFINE_CHECK_OP_IMPL(name, op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 715
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 715
    functionName: DLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 716
    functionName: DLOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 716
    functionDepth: 0
    functionLinenumber: 716
    functionLinenumberEnd: 718
    functionName: DPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 718
    functionDepth: 0
    functionLinenumber: 718
    functionLinenumberEnd: 720
    functionName: DVLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 722
      start: 720
    functionDepth: 0
    functionLinenumber: 720
    functionLinenumberEnd: 722
    functionName: DVPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 724
    functionName: DLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IS_ON(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 724
    functionDepth: 0
    functionLinenumber: 724
    functionLinenumberEnd: 725
    functionName: DLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 725
    functionDepth: 0
    functionLinenumber: 725
    functionLinenumberEnd: 726
    functionName: DLOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 727
    functionName: DPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 728
      start: 727
    functionDepth: 0
    functionLinenumber: 727
    functionLinenumberEnd: 728
    functionName: DVLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 728
    functionDepth: 0
    functionLinenumber: 728
    functionLinenumberEnd: 729
    functionName: DVPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 733
    functionName: DLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 735
      start: 733
    functionDepth: 0
    functionLinenumber: 733
    functionLinenumberEnd: 735
    functionName: DLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 737
    functionName: DLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 737
    functionDepth: 0
    functionLinenumber: 737
    functionLinenumberEnd: 739
    functionName: DLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 741
    functionName: DLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 741
    functionDepth: 0
    functionLinenumber: 741
    functionLinenumberEnd: 742
    functionName: DLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 743
      start: 742
    functionDepth: 0
    functionLinenumber: 742
    functionLinenumberEnd: 743
    functionName: DLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 743
    functionDepth: 0
    functionLinenumber: 743
    functionLinenumberEnd: 745
    functionName: DLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 747
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 747
    functionName: DLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 750
    functionName: DPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 752
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 752
    functionName: DPLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 752
    functionDepth: 0
    functionLinenumber: 752
    functionLinenumberEnd: 754
    functionName: DPLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 756
    functionName: DPLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 758
    functionName: DPLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 759
    functionName: DPLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 760
    functionName: DPLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 762
      start: 760
    functionDepth: 0
    functionLinenumber: 760
    functionLinenumberEnd: 762
    functionName: DPLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 764
    functionName: DPLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 765
    functionDepth: 0
    functionLinenumber: 765
    functionLinenumberEnd: 766
    functionName: DVLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 768
      start: 766
    functionDepth: 0
    functionLinenumber: 766
    functionLinenumberEnd: 768
    functionName: DVLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_EVERY_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 770
    functionName: DVLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_EVERY_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 770
    functionDepth: 0
    functionLinenumber: 770
    functionLinenumberEnd: 772
    functionName: DVLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_FIRST_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 774
    functionName: DVLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_FIRST_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 775
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 775
    functionName: DVLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_ONCE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 776
    functionName: DVLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_ONCE(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 778
    functionName: DVLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_EVERY_SECOND(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 780
    functionName: DVLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_EVERY_SECOND(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 781
    functionDepth: 0
    functionLinenumber: 781
    functionLinenumberEnd: 782
    functionName: DVPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 784
      start: 782
    functionDepth: 0
    functionLinenumber: 782
    functionLinenumberEnd: 784
    functionName: DVPLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_EVERY_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 786
    functionName: DVPLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_EVERY_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 786
    functionDepth: 0
    functionLinenumber: 786
    functionLinenumberEnd: 788
    functionName: DVPLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_FIRST_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 790
    functionName: DVPLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_FIRST_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 791
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 791
    functionName: DVPLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_ONCE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 792
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 792
    functionName: DVPLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_ONCE(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 794
    functionName: DVPLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_EVERY_SECOND(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 794
    functionDepth: 0
    functionLinenumber: 794
    functionLinenumberEnd: 796
    functionName: DVPLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_EVERY_SECOND(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 803
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 803
    functionName: VLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 807
      start: 804
    functionDepth: 0
    functionLinenumber: 804
    functionLinenumberEnd: 807
    functionName: VLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 808
    functionDepth: 0
    functionLinenumber: 808
    functionLinenumberEnd: 810
    functionName: DVLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 813
    functionName: DVLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 814
    functionDepth: 0
    functionLinenumber: 814
    functionLinenumberEnd: 817
    functionName: VPLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 818
    functionDepth: 0
    functionLinenumber: 818
    functionLinenumberEnd: 821
    functionName: VPLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: DVPLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 827
    functionName: DVPLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 845
    functionDepth: 0
    functionLinenumber: 845
    functionLinenumberEnd: 848
    functionName: DCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 62
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 849
    functionDepth: 0
    functionLinenumber: 849
    functionLinenumberEnd: 852
    functionName: DPCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - name
    - ','
    - op
    - ','
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 864
    functionName: BAIDU_DCHECK_OP
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_DCHECK_OP(name, op, val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 885
      start: 884
    functionDepth: 0
    functionLinenumber: 884
    functionLinenumberEnd: 885
    functionName: DCHECK_EQ
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_EQ(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 886
    functionName: DCHECK_NE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_NE(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 887
      start: 886
    functionDepth: 0
    functionLinenumber: 886
    functionLinenumberEnd: 887
    functionName: DCHECK_LE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_LE(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 887
    functionDepth: 0
    functionLinenumber: 887
    functionLinenumberEnd: 888
    functionName: DCHECK_LT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_LT(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 889
    functionName: DCHECK_GE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_GE(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 890
      start: 889
    functionDepth: 0
    functionLinenumber: 889
    functionLinenumberEnd: 890
    functionName: DCHECK_GT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_GT(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 908
      start: 908
    functionDepth: 0
    functionLinenumber: 908
    functionLinenumberEnd: 908
    functionName: logging::CharArrayStreamBuf::CharArrayStreamBuf
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 928
    functionName: logging::LogStream::LogStream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flush
      Src: /src/brpc/src/butil/logging.h:932,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 933
      start: 930
    functionDepth: 0
    functionLinenumber: 930
    functionLinenumberEnd: 933
    functionName: ~LogStream()
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - Flush
    linkageType: ''
    returnType: void
    signature: void ~LogStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: m
      Src: /src/brpc/src/butil/logging.h:936,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' (*m)(LogStream)'
    argTypes:
    - LogStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 935
    functionDepth: 0
    functionLinenumber: 935
    functionLinenumberEnd: 937
    functionName: '& operator<<(LogStream& (*m)(LogStream&))'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - m
    linkageType: ''
    returnType: LogStream
    signature: LogStream & operator<<(LogStream& (*m)(LogStream&))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: m
      Src: /src/brpc/src/butil/logging.h:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' (*m)(std::ostream)'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 942
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 942
    functionName: '& operator<<(std::ostream& (*m)(std::ostream&))'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - m
    linkageType: ''
    returnType: LogStream
    signature: LogStream & operator<<(std::ostream& (*m)(std::ostream&))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 947
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 947
    functionName: '& operator<<(T const& t)'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & operator<<(T const& t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 959
    functionName: '& DontFlushOnce()'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & DontFlushOnce()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: '& SetCheck()'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & SetCheck()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 966
    functionDepth: 0
    functionLinenumber: 966
    functionLinenumberEnd: 969
    functionName: '& SetBacktrace()'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & SetBacktrace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:971,1
    - Dst: pptr
      Src: /src/brpc/src/butil/logging.h:971,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 971
    functionDepth: 0
    functionLinenumber: 971
    functionLinenumberEnd: 971
    functionName: logging::LogStream::empty
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - pbase
    - pptr
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/logging.h:974,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:974,1
    - Dst: pptr
      Src: /src/brpc/src/butil/logging.h:974,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:974,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 974
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 974
    functionName: logging::LogStream::content
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - pbase
    - pptr
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece content() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/butil/logging.h:977,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:977,1
    - Dst: pptr
      Src: /src/brpc/src/butil/logging.h:977,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:977,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 976
    functionDepth: 0
    functionLinenumber: 976
    functionLinenumberEnd: 977
    functionName: logging::LogStream::content_str
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - pbase
    - std::string
    - pptr
    linkageType: ''
    returnType: std::string
    signature: std::string content_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 979
    functionDepth: 0
    functionLinenumber: 979
    functionLinenumberEnd: 979
    functionName: logging::LogStream::file
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogChar
    signature: LogChar * file() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 980
    functionDepth: 0
    functionLinenumber: 980
    functionLinenumberEnd: 980
    functionName: logging::LogStream::line
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int line() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 981
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 981
    functionName: logging::LogStream::func
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogChar
    signature: LogChar * func() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 982
    functionDepth: 0
    functionLinenumber: 982
    functionLinenumberEnd: 982
    functionName: logging::LogStream::severity
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogSeverity
    signature: LogSeverity severity() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetLastSystemErrorCode
      Src: /src/brpc/src/butil/logging.h:995,1
    - Dst: logging::LogStream::FlushWithoutReset
      Src: /src/brpc/src/butil/logging.h:996,1
    - Dst: reset
      Src: /src/brpc/src/butil/logging.h:997,1
    - Dst: clear
      Src: /src/brpc/src/butil/logging.h:998,1
    - Dst: SetLastSystemErrorCode
      Src: /src/brpc/src/butil/logging.h:999,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1003
      start: 990
    functionDepth: 2
    functionLinenumber: 990
    functionLinenumberEnd: 1003
    functionName: logging::LogStream::Flush
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - reset
    - SetLastSystemErrorCode
    - logging::LogStream::FlushWithoutReset
    - clear
    - GetLastSystemErrorCode
    linkageType: ''
    returnType: void
    signature: void Flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogMessage
      Src: /src/brpc/src/butil/logging.h:1026,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/logging.h:1047,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1051
      start: 1023
    functionDepth: 1
    functionLinenumber: 1023
    functionLinenumberEnd: 1051
    functionName: logging::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 1
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - logging::LogMessage
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT LogMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1044
    functionDepth: 0
    functionLinenumber: 1044
    functionLinenumberEnd: 1044
    functionName: logging::stream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogMessage
      Src: /src/brpc/src/butil/logging.h:1056,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - log_level
    - msg
    argTypes:
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1055
    functionDepth: 2
    functionLinenumber: 1055
    functionLinenumberEnd: 1058
    functionName: logging::LogAtLevel
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - logging::LogMessage
    linkageType: ''
    returnType: void
    signature: void LogAtLevel(int const log_level, const butil::StringPiece &msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1065
    functionDepth: 0
    functionLinenumber: 1065
    functionLinenumberEnd: 1065
    functionName: logging::LogMessageVoidify::LogMessageVoidify
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogMessageVoidify()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1068
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1068
    functionName: operator&(std::ostream&)
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator&(std::ostream&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::Win32ErrorLogMessage
      Src: /src/brpc/src/butil/logging.h:1075,1
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1089,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/logging.h:1095,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1096
      start: 1073
    functionDepth: 1
    functionLinenumber: 1073
    functionLinenumberEnd: 1096
    functionName: logging::Win32ErrorLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 1
    functionsReached:
    - logging::Win32ErrorLogMessage
    - DISALLOW_COPY_AND_ASSIGN
    - logging::stream
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Win32ErrorLogMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1089,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1089
    functionDepth: 1
    functionLinenumber: 1089
    functionLinenumberEnd: 1089
    functionName: logging::stream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - logging::stream
    linkageType: ''
    returnType: LogStream
    signature: LogStream & stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::ErrnoLogMessage
      Src: /src/brpc/src/butil/logging.h:1101,1
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1115,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/logging.h:1121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1122
      start: 1099
    functionDepth: 1
    functionLinenumber: 1099
    functionLinenumberEnd: 1122
    functionName: logging::ErrnoLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 1
    functionsReached:
    - logging::ErrnoLogMessage
    - DISALLOW_COPY_AND_ASSIGN
    - logging::stream
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ErrnoLogMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1115
      start: 1115
    functionDepth: 1
    functionLinenumber: 1115
    functionLinenumberEnd: 1115
    functionName: logging::stream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached:
    - logging::stream
    linkageType: ''
    returnType: LogStream
    signature: LogStream & stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - level
    - ','
    - message
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1136
      start: 1134
    functionDepth: 0
    functionLinenumber: 1134
    functionLinenumberEnd: 1136
    functionName: RAW_LOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RAW_LOG(level, message)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - condition
    - ','
    - message
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1142
      start: 1137
    functionDepth: 0
    functionLinenumber: 1137
    functionLinenumberEnd: 1142
    functionName: RAW_CHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RAW_CHECK(condition, message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DontFlushOnce
      Src: /src/brpc/src/butil/logging.h:1149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ls'
    argTypes:
    - LogStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1148
    functionDepth: 0
    functionLinenumber: 1148
    functionLinenumberEnd: 1151
    functionName: logging::noflush
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - DontFlushOnce
    linkageType: ''
    returnType: LogStream
    signature: LogStream & noflush(LogStream& ls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LoggingSettings
      Src: /src/brpc/src/butil/logging.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 277
    functionName: logging::LoggingSettings
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - logging::LoggingSettings
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT LoggingSettings
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::BaseInitLoggingImpl
      Src: /src/brpc/src/butil/logging.h:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' settings'
    argTypes:
    - LoggingSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 295
    functionDepth: 3
    functionLinenumber: 295
    functionLinenumberEnd: 297
    functionName: logging::InitLogging
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached:
    - logging::BaseInitLoggingImpl
    linkageType: ''
    returnType: bool
    signature: bool InitLogging(const LoggingSettings& settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 322
    functionName: logging::LogSink::LogSink
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    functionName: ~LogSink()
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LogSink()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogSink::OnLogMessage
      Src: /src/brpc/src/butil/logging.h:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' log_content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 332
    functionName: logging::LogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - logging::LogSink::OnLogMessage
    linkageType: ''
    returnType: bool
    signature: "bool OnLogMessage(int severity, const char* file,\n                              int
      line, const char* /*func*/,\n                              const butil::StringPiece&
      log_content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - ClassName
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 400
    functionName: BAIDU_COMPACT_LOG_EX
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_COMPACT_LOG_EX(severity, ClassName, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 403
    functionName: BAIDU_COMPACK_LOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_COMPACK_LOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 421
    functionName: LOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IS_ON(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - filepath
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 432
    functionName: BAIDU_VLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_VLOG_IS_ON(verbose_level, filepath)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - filepath
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 442
    functionName: BAIDU_VLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_VLOG_IS_ON(verbose_level, filepath)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 445
    functionName: VLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IS_ON(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 464
    functionName: ~VLogSitePrinter()
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~VLogSitePrinter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - stream
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 473
    functionName: BAIDU_LAZY_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LAZY_STREAM(stream, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 482
    functionDepth: 0
    functionLinenumber: 482
    functionLinenumberEnd: 483
    functionName: LOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_STREAM(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 486
    functionName: LOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2039
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 488
    functionName: LOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 214
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 491
    functionName: LOG_BACKTRACE_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 496
    functionName: LOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 498
    functionName: SYSLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 498
    functionDepth: 0
    functionLinenumber: 498
    functionLinenumberEnd: 499
    functionName: SYSLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 500
    functionName: SYSLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 500
    functionDepth: 0
    functionLinenumber: 500
    functionLinenumberEnd: 501
    functionName: SYSLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 501
    functionDepth: 0
    functionLinenumber: 501
    functionLinenumberEnd: 502
    functionName: SYSLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 503
    functionName: SYSLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 504
    functionName: SYSLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 505
    functionName: SYSLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 506
      start: 505
    functionDepth: 0
    functionLinenumber: 505
    functionLinenumberEnd: 506
    functionName: SYSLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 507
    functionName: SYSLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 510
    functionName: SYSLOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SYSLOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 13
    argNames:
    - (
    - _1
    - ','
    - _2
    - ','
    - _3
    - ','
    - _4
    - ','
    - NAME
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 514
    functionName: LOG_AT_SELECTOR
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_SELECTOR(_1, _2, _3, _4, NAME, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 515
    functionDepth: 0
    functionLinenumber: 515
    functionLinenumberEnd: 517
    functionName: LOG_AT_STREAM1
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_STREAM1(severity, file, line)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - ','
    - func
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 519
    functionName: LOG_AT_STREAM2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_STREAM2(severity, file, line, func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 520
    functionName: LOG_AT_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT_STREAM(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 523
    functionName: LOG_AT1
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT1(severity, file, line)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - severity
    - ','
    - file
    - ','
    - line
    - ','
    - func
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 525
    functionName: LOG_AT2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT2(severity, file, line, func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 526
    functionName: LOG_AT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_AT(...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 531
    functionName: VLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_STREAM(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 534
    functionName: VLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 534
    functionDepth: 0
    functionLinenumber: 534
    functionLinenumberEnd: 537
    functionName: VLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 540
    functionName: VLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_EVERY_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 542
      start: 540
    functionDepth: 0
    functionLinenumber: 540
    functionLinenumberEnd: 542
    functionName: VLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_EVERY_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 545
    functionName: VLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_FIRST_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 547
    functionName: VLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_FIRST_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 548
    functionDepth: 0
    functionLinenumber: 548
    functionLinenumberEnd: 549
    functionName: VLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_ONCE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 550
    functionName: VLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_ONCE(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 553
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 553
    functionName: VLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_EVERY_SECOND(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 553
    functionDepth: 0
    functionLinenumber: 553
    functionLinenumberEnd: 555
    functionName: VLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG_IF_EVERY_SECOND(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 560
    functionName: VPLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG_STREAM(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 564
    functionName: VPLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG_STREAM(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: VPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 572
    functionName: VPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 577
    functionName: PLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_STREAM(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 578
    functionDepth: 0
    functionLinenumber: 578
    functionLinenumberEnd: 581
    functionName: PLOG_STREAM
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_STREAM(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 585
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 585
    functionName: PLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 221
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 587
    functionName: PLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 48
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 609
    functionName: CHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 602
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 611
    functionName: PCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - name
    - ','
    - op
    - ','
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 613
    functionName: BAIDU_CHECK_OP
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CHECK_OP(name, op, val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 619
    functionName: CHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 602
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 620
    functionDepth: 0
    functionLinenumber: 620
    functionLinenumberEnd: 623
    functionName: PCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - name
    - ','
    - op
    - ','
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 634
    functionName: BAIDU_CHECK_OP
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CHECK_OP(name, op, val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/logging.h:645,1
    - Dst: std::string::string
      Src: /src/brpc/src/butil/logging.h:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' v1'
    - ' v2'
    - names
    argTypes:
    - t1
    - t2
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 647
    functionName: logging::MakeCheckOpString
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - std::string::string
    linkageType: ''
    returnType: std::string
    signature: std::string * MakeCheckOpString(const t1& v1, const t2& v2, const char*
      names)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - name
    - ','
    - op
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 673
    functionDepth: 0
    functionLinenumber: 673
    functionLinenumberEnd: 684
    functionName: BAIDU_DEFINE_CHECK_OP_IMPL
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_DEFINE_CHECK_OP_IMPL(name, op)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 715
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 715
    functionName: DLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 716
    functionName: DLOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 716
    functionDepth: 0
    functionLinenumber: 716
    functionLinenumberEnd: 718
    functionName: DPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 718
    functionDepth: 0
    functionLinenumber: 718
    functionLinenumberEnd: 720
    functionName: DVLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 722
      start: 720
    functionDepth: 0
    functionLinenumber: 720
    functionLinenumberEnd: 722
    functionName: DVPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 724
    functionName: DLOG_IS_ON
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IS_ON(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 724
    functionDepth: 0
    functionLinenumber: 724
    functionLinenumberEnd: 725
    functionName: DLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 725
    functionDepth: 0
    functionLinenumber: 725
    functionLinenumberEnd: 726
    functionName: DLOG_ASSERT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 727
    functionName: DPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 728
      start: 727
    functionDepth: 0
    functionLinenumber: 727
    functionLinenumberEnd: 728
    functionName: DVLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 728
    functionDepth: 0
    functionLinenumber: 728
    functionLinenumberEnd: 729
    functionName: DVPLOG_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 733
    functionName: DLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 735
      start: 733
    functionDepth: 0
    functionLinenumber: 733
    functionLinenumberEnd: 735
    functionName: DLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 737
    functionName: DLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 737
    functionDepth: 0
    functionLinenumber: 737
    functionLinenumberEnd: 739
    functionName: DLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 741
    functionName: DLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 741
    functionDepth: 0
    functionLinenumber: 741
    functionLinenumberEnd: 742
    functionName: DLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 743
      start: 742
    functionDepth: 0
    functionLinenumber: 742
    functionLinenumberEnd: 743
    functionName: DLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 745
      start: 743
    functionDepth: 0
    functionLinenumber: 743
    functionLinenumberEnd: 745
    functionName: DLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 747
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 747
    functionName: DLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 750
    functionName: DPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 752
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 752
    functionName: DPLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 752
    functionDepth: 0
    functionLinenumber: 752
    functionLinenumberEnd: 754
    functionName: DPLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 756
    functionName: DPLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 758
    functionName: DPLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 759
    functionName: DPLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 760
    functionName: DPLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 762
      start: 760
    functionDepth: 0
    functionLinenumber: 760
    functionLinenumberEnd: 762
    functionName: DPLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 764
    functionName: DPLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 766
      start: 765
    functionDepth: 0
    functionLinenumber: 765
    functionLinenumberEnd: 766
    functionName: DVLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 768
      start: 766
    functionDepth: 0
    functionLinenumber: 766
    functionLinenumberEnd: 768
    functionName: DVLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_EVERY_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 770
    functionName: DVLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_EVERY_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 770
    functionDepth: 0
    functionLinenumber: 770
    functionLinenumberEnd: 772
    functionName: DVLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_FIRST_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 774
    functionName: DVLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_FIRST_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 775
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 775
    functionName: DVLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_ONCE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 776
    functionName: DVLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_ONCE(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 778
    functionName: DVLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_EVERY_SECOND(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 780
    functionName: DVLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG_IF_EVERY_SECOND(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 781
    functionDepth: 0
    functionLinenumber: 781
    functionLinenumberEnd: 782
    functionName: DVPLOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 784
      start: 782
    functionDepth: 0
    functionLinenumber: 782
    functionLinenumberEnd: 784
    functionName: DVPLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_EVERY_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 786
    functionName: DVPLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_EVERY_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 786
    functionDepth: 0
    functionLinenumber: 786
    functionLinenumberEnd: 788
    functionName: DVPLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_FIRST_N(verbose_level, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 790
    functionName: DVPLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_FIRST_N(verbose_level, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 791
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 791
    functionName: DVPLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_ONCE(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 792
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 792
    functionName: DVPLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_ONCE(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 794
    functionName: DVPLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_EVERY_SECOND(verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 794
    functionDepth: 0
    functionLinenumber: 794
    functionLinenumberEnd: 796
    functionName: DVPLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG_IF_EVERY_SECOND(verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 803
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 803
    functionName: VLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 807
      start: 804
    functionDepth: 0
    functionLinenumber: 804
    functionLinenumberEnd: 807
    functionName: VLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 808
    functionDepth: 0
    functionLinenumber: 808
    functionLinenumberEnd: 810
    functionName: DVLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 813
    functionName: DVLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 814
    functionDepth: 0
    functionLinenumber: 814
    functionLinenumberEnd: 817
    functionName: VPLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 818
    functionDepth: 0
    functionLinenumber: 818
    functionLinenumberEnd: 821
    functionName: VPLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: VPLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: DVPLOG2
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG2(virtual_path, verbose_level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - virtual_path
    - ','
    - verbose_level
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 827
    functionName: DVPLOG2_IF
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DVPLOG2_IF(virtual_path, verbose_level, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 845
    functionDepth: 0
    functionLinenumber: 845
    functionLinenumberEnd: 848
    functionName: DCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 62
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 849
    functionDepth: 0
    functionLinenumber: 849
    functionLinenumberEnd: 852
    functionName: DPCHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DPCHECK(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - name
    - ','
    - op
    - ','
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 864
    functionName: BAIDU_DCHECK_OP
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_DCHECK_OP(name, op, val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 885
      start: 884
    functionDepth: 0
    functionLinenumber: 884
    functionLinenumberEnd: 885
    functionName: DCHECK_EQ
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_EQ(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 886
    functionName: DCHECK_NE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_NE(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 887
      start: 886
    functionDepth: 0
    functionLinenumber: 886
    functionLinenumberEnd: 887
    functionName: DCHECK_LE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_LE(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 887
    functionDepth: 0
    functionLinenumber: 887
    functionLinenumberEnd: 888
    functionName: DCHECK_LT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_LT(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 889
    functionName: DCHECK_GE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_GE(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - val1
    - ','
    - val2
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 890
      start: 889
    functionDepth: 0
    functionLinenumber: 889
    functionLinenumberEnd: 890
    functionName: DCHECK_GT
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DCHECK_GT(val1, val2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 908
      start: 908
    functionDepth: 0
    functionLinenumber: 908
    functionLinenumberEnd: 908
    functionName: logging::CharArrayStreamBuf::CharArrayStreamBuf
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CharArrayStreamBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 928
    functionName: logging::LogStream::LogStream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flush
      Src: /src/brpc/src/butil/logging.h:932,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 933
      start: 930
    functionDepth: 0
    functionLinenumber: 930
    functionLinenumberEnd: 933
    functionName: ~LogStream()
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - Flush
    linkageType: ''
    returnType: void
    signature: void ~LogStream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: m
      Src: /src/brpc/src/butil/logging.h:936,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' (*m)(LogStream)'
    argTypes:
    - LogStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 935
    functionDepth: 0
    functionLinenumber: 935
    functionLinenumberEnd: 937
    functionName: '& operator<<(LogStream& (*m)(LogStream&))'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - m
    linkageType: ''
    returnType: LogStream
    signature: LogStream & operator<<(LogStream& (*m)(LogStream&))
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: m
      Src: /src/brpc/src/butil/logging.h:940,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' (*m)(std::ostream)'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 942
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 942
    functionName: '& operator<<(std::ostream& (*m)(std::ostream&))'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - m
    linkageType: ''
    returnType: LogStream
    signature: LogStream & operator<<(std::ostream& (*m)(std::ostream&))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 947
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 947
    functionName: '& operator<<(T const& t)'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & operator<<(T const& t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 959
    functionName: '& DontFlushOnce()'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & DontFlushOnce()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: '& SetCheck()'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & SetCheck()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 966
    functionDepth: 0
    functionLinenumber: 966
    functionLinenumberEnd: 969
    functionName: '& SetBacktrace()'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & SetBacktrace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:971,1
    - Dst: pptr
      Src: /src/brpc/src/butil/logging.h:971,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 971
    functionDepth: 0
    functionLinenumber: 971
    functionLinenumberEnd: 971
    functionName: logging::LogStream::empty
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - pbase
    - pptr
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/logging.h:974,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:974,1
    - Dst: pptr
      Src: /src/brpc/src/butil/logging.h:974,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:974,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 974
      start: 973
    functionDepth: 1
    functionLinenumber: 973
    functionLinenumberEnd: 974
    functionName: logging::LogStream::content
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - pbase
    - pptr
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece content() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/butil/logging.h:977,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:977,1
    - Dst: pptr
      Src: /src/brpc/src/butil/logging.h:977,1
    - Dst: pbase
      Src: /src/brpc/src/butil/logging.h:977,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 976
    functionDepth: 0
    functionLinenumber: 976
    functionLinenumberEnd: 977
    functionName: logging::LogStream::content_str
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - pbase
    - std::string
    - pptr
    linkageType: ''
    returnType: std::string
    signature: std::string content_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 979
    functionDepth: 0
    functionLinenumber: 979
    functionLinenumberEnd: 979
    functionName: logging::LogStream::file
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogChar
    signature: LogChar * file() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 980
    functionDepth: 0
    functionLinenumber: 980
    functionLinenumberEnd: 980
    functionName: logging::LogStream::line
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int line() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 981
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 981
    functionName: logging::LogStream::func
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogChar
    signature: LogChar * func() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 982
    functionDepth: 0
    functionLinenumber: 982
    functionLinenumberEnd: 982
    functionName: logging::LogStream::severity
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: LogSeverity
    signature: LogSeverity severity() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetLastSystemErrorCode
      Src: /src/brpc/src/butil/logging.h:995,1
    - Dst: logging::LogStream::FlushWithoutReset
      Src: /src/brpc/src/butil/logging.h:996,1
    - Dst: reset
      Src: /src/brpc/src/butil/logging.h:997,1
    - Dst: clear
      Src: /src/brpc/src/butil/logging.h:998,1
    - Dst: SetLastSystemErrorCode
      Src: /src/brpc/src/butil/logging.h:999,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1003
      start: 990
    functionDepth: 2
    functionLinenumber: 990
    functionLinenumberEnd: 1003
    functionName: logging::LogStream::Flush
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - reset
    - SetLastSystemErrorCode
    - logging::LogStream::FlushWithoutReset
    - clear
    - GetLastSystemErrorCode
    linkageType: ''
    returnType: void
    signature: void Flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogMessage
      Src: /src/brpc/src/butil/logging.h:1026,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/logging.h:1047,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1051
      start: 1023
    functionDepth: 1
    functionLinenumber: 1023
    functionLinenumberEnd: 1051
    functionName: logging::LogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 3
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - logging::LogMessage
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT LogMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1044
    functionDepth: 0
    functionLinenumber: 1044
    functionLinenumberEnd: 1044
    functionName: logging::stream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: LogStream
    signature: LogStream & stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::LogMessage
      Src: /src/brpc/src/butil/logging.h:1056,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - log_level
    - msg
    argTypes:
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1055
    functionDepth: 2
    functionLinenumber: 1055
    functionLinenumberEnd: 1058
    functionName: logging::LogAtLevel
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - logging::LogMessage
    linkageType: ''
    returnType: void
    signature: void LogAtLevel(int const log_level, const butil::StringPiece &msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1065
    functionDepth: 0
    functionLinenumber: 1065
    functionLinenumberEnd: 1065
    functionName: logging::LogMessageVoidify::LogMessageVoidify
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LogMessageVoidify()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1068
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1068
    functionName: operator&(std::ostream&)
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator&(std::ostream&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::Win32ErrorLogMessage
      Src: /src/brpc/src/butil/logging.h:1075,1
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1089,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/logging.h:1095,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1096
      start: 1073
    functionDepth: 1
    functionLinenumber: 1073
    functionLinenumberEnd: 1096
    functionName: logging::Win32ErrorLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - logging::Win32ErrorLogMessage
    - DISALLOW_COPY_AND_ASSIGN
    - logging::stream
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Win32ErrorLogMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1089,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1089
    functionDepth: 1
    functionLinenumber: 1089
    functionLinenumberEnd: 1089
    functionName: logging::stream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 6
    functionsReached:
    - logging::stream
    linkageType: ''
    returnType: LogStream
    signature: LogStream & stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::ErrnoLogMessage
      Src: /src/brpc/src/butil/logging.h:1101,1
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1115,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/logging.h:1121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1122
      start: 1099
    functionDepth: 1
    functionLinenumber: 1099
    functionLinenumberEnd: 1122
    functionName: logging::ErrnoLogMessage
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 2
    functionsReached:
    - logging::ErrnoLogMessage
    - DISALLOW_COPY_AND_ASSIGN
    - logging::stream
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ErrnoLogMessage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: logging::stream
      Src: /src/brpc/src/butil/logging.h:1115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1115
      start: 1115
    functionDepth: 1
    functionLinenumber: 1115
    functionLinenumberEnd: 1115
    functionName: logging::stream
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached:
    - logging::stream
    linkageType: ''
    returnType: LogStream
    signature: LogStream & stream()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - level
    - ','
    - message
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1136
      start: 1134
    functionDepth: 0
    functionLinenumber: 1134
    functionLinenumberEnd: 1136
    functionName: RAW_LOG
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RAW_LOG(level, message)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - condition
    - ','
    - message
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1142
      start: 1137
    functionDepth: 0
    functionLinenumber: 1137
    functionLinenumberEnd: 1142
    functionName: RAW_CHECK
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RAW_CHECK(condition, message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DontFlushOnce
      Src: /src/brpc/src/butil/logging.h:1149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ls'
    argTypes:
    - LogStream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1148
    functionDepth: 0
    functionLinenumber: 1148
    functionLinenumberEnd: 1151
    functionName: logging::noflush
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - DontFlushOnce
    linkageType: ''
    returnType: LogStream
    signature: LogStream & noflush(LogStream& ls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/logging.h:1167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' out'
    - ' wstr'
    argTypes:
    - std::ostream
    - std::wstring
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1168
      start: 1166
    functionDepth: 0
    functionLinenumber: 1166
    functionLinenumberEnd: 1168
    functionName: '& operator<<(std::ostream& out, const std::wstring& wstr)'
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached:
    - c_str
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& out, const std::wstring& wstr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1202
      start: 1201
    functionDepth: 0
    functionLinenumber: 1201
    functionLinenumberEnd: 1202
    functionName: NOTIMPLEMENTED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTIMPLEMENTED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1204
    functionDepth: 0
    functionLinenumber: 1204
    functionLinenumberEnd: 1205
    functionName: NOTIMPLEMENTED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTIMPLEMENTED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1207
      start: 1206
    functionDepth: 0
    functionLinenumber: 1206
    functionLinenumberEnd: 1207
    functionName: NOTIMPLEMENTED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTIMPLEMENTED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1208
    functionDepth: 0
    functionLinenumber: 1208
    functionLinenumberEnd: 1209
    functionName: NOTIMPLEMENTED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTIMPLEMENTED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1211
      start: 1210
    functionDepth: 0
    functionLinenumber: 1210
    functionLinenumberEnd: 1211
    functionName: NOTIMPLEMENTED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTIMPLEMENTED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1218
      start: 1212
    functionDepth: 0
    functionLinenumber: 1212
    functionLinenumberEnd: 1218
    functionName: NOTIMPLEMENTED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTIMPLEMENTED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1223
      start: 1221
    functionDepth: 0
    functionLinenumber: 1221
    functionLinenumberEnd: 1223
    functionName: NOTREACHED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTREACHED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1225
      start: 1224
    functionDepth: 0
    functionLinenumber: 1224
    functionLinenumberEnd: 1225
    functionName: NOTREACHED
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NOTREACHED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - logifmacro
    - ','
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1236
      start: 1228
    functionDepth: 0
    functionLinenumber: 1228
    functionLinenumberEnd: 1236
    functionName: BAIDU_LOG_IF_EVERY_N_IMPL
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LOG_IF_EVERY_N_IMPL(logifmacro, severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - logifmacro
    - ','
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1238
    functionDepth: 0
    functionLinenumber: 1238
    functionLinenumberEnd: 1242
    functionName: BAIDU_LOG_IF_FIRST_N_IMPL
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LOG_IF_FIRST_N_IMPL(logifmacro, severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - logifmacro
    - ','
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1255
      start: 1244
    functionDepth: 0
    functionLinenumber: 1244
    functionLinenumberEnd: 1255
    functionName: BAIDU_LOG_IF_EVERY_SECOND_IMPL
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LOG_IF_EVERY_SECOND_IMPL(logifmacro, severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1262
      start: 1261
    functionDepth: 0
    functionLinenumber: 1261
    functionLinenumberEnd: 1262
    functionName: LOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 28
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1262
    functionDepth: 0
    functionLinenumber: 1262
    functionLinenumberEnd: 1263
    functionName: LOG_BACKTRACE_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1264
      start: 1263
    functionDepth: 0
    functionLinenumber: 1263
    functionLinenumberEnd: 1264
    functionName: LOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1267
      start: 1265
    functionDepth: 0
    functionLinenumber: 1265
    functionLinenumberEnd: 1267
    functionName: LOG_BACKTRACE_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1274
    functionDepth: 0
    functionLinenumber: 1274
    functionLinenumberEnd: 1276
    functionName: LOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1278
      start: 1276
    functionDepth: 0
    functionLinenumber: 1276
    functionLinenumberEnd: 1278
    functionName: LOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1284
    functionDepth: 0
    functionLinenumber: 1284
    functionLinenumberEnd: 1286
    functionName: LOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1287
    functionDepth: 0
    functionLinenumber: 1287
    functionLinenumberEnd: 1289
    functionName: LOG_BACKTRACE_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1292
      start: 1290
    functionDepth: 0
    functionLinenumber: 1290
    functionLinenumberEnd: 1292
    functionName: LOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1295
      start: 1293
    functionDepth: 0
    functionLinenumber: 1293
    functionLinenumberEnd: 1295
    functionName: LOG_BACKTRACE_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_BACKTRACE_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1303
      start: 1301
    functionDepth: 0
    functionLinenumber: 1301
    functionLinenumberEnd: 1303
    functionName: LOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 69
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1303
    functionDepth: 0
    functionLinenumber: 1303
    functionLinenumberEnd: 1305
    functionName: LOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1310
      start: 1308
    functionDepth: 0
    functionLinenumber: 1308
    functionLinenumberEnd: 1310
    functionName: PLOG_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_EVERY_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1310
    functionDepth: 0
    functionLinenumber: 1310
    functionLinenumberEnd: 1312
    functionName: PLOG_IF_EVERY_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_IF_EVERY_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1317
      start: 1315
    functionDepth: 0
    functionLinenumber: 1315
    functionLinenumberEnd: 1317
    functionName: PLOG_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_FIRST_N(severity, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - severity
    - ','
    - condition
    - ','
    - N
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1319
      start: 1317
    functionDepth: 0
    functionLinenumber: 1317
    functionLinenumberEnd: 1319
    functionName: PLOG_IF_FIRST_N
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_IF_FIRST_N(severity, condition, N)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1323
      start: 1322
    functionDepth: 0
    functionLinenumber: 1322
    functionLinenumberEnd: 1323
    functionName: PLOG_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_ONCE(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1324
      start: 1323
    functionDepth: 0
    functionLinenumber: 1323
    functionLinenumberEnd: 1324
    functionName: PLOG_IF_ONCE
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_IF_ONCE(severity, condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - severity
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1327
    functionDepth: 0
    functionLinenumber: 1327
    functionLinenumberEnd: 1329
    functionName: PLOG_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_EVERY_SECOND(severity)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - severity
    - ','
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1331
      start: 1329
    functionDepth: 0
    functionLinenumber: 1329
    functionLinenumberEnd: 1331
    functionName: PLOG_IF_EVERY_SECOND
    functionSourceFile: /src/brpc/src/butil/logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PLOG_IF_EVERY_SECOND(severity, condition)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:29,1
    - Dst: Next
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:34,1
    - Dst: setp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:35,1
    - Dst: sputc
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:37,1
    - Dst: setp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:39,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: butil::ZeroCopyStreamAsStreamBuf::overflow
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - Next
    - setp
    - brpc::http_message_needs_eof
    - sputc
    linkageType: ''
    returnType: int
    signature: int ZeroCopyStreamAsStreamBuf::overflow(int ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::ZeroCopyStreamAsStreamBuf::sync
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ZeroCopyStreamAsStreamBuf::sync()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: shrink
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: ZeroCopyStreamAsStreamBuf::~ZeroCopyStreamAsStreamBuf()
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - shrink
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamAsStreamBuf::~ZeroCopyStreamAsStreamBuf()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pbase
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:54,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:55,1
    - Dst: epptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:55,1
    - Dst: pptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:55,1
    - Dst: setp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: butil::ZeroCopyStreamAsStreamBuf::shrink
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - pbase
    - epptr
    - pptr
    - setp
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamAsStreamBuf::shrink()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ByteCount
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:65,1
    - Dst: epptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:65,1
    - Dst: pptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:65,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - 'off'
    - way
    - which
    argTypes:
    - std::streamoff
    - std::ios_base::seekdir
    - std::ios_base::openmode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 68
    functionName: butil::ZeroCopyStreamAsStreamBuf::seekoff
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - epptr
    - ByteCount
    - pptr
    linkageType: ''
    returnType: std::streampos
    signature: "std::streampos ZeroCopyStreamAsStreamBuf::seekoff(\n    std::streamoff
      off,\n    std::ios_base::seekdir way,\n    std::ios_base::openmode which)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:29,1
    - Dst: Next
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:34,1
    - Dst: setp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:35,1
    - Dst: sputc
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:37,1
    - Dst: setp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:39,1
    - Dst: brpc::http_message_needs_eof
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:40,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ch
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 42
    functionName: butil::ZeroCopyStreamAsStreamBuf::overflow
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - Next
    - setp
    - brpc::http_message_needs_eof
    - sputc
    linkageType: ''
    returnType: int
    signature: int ZeroCopyStreamAsStreamBuf::overflow(int ch)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::ZeroCopyStreamAsStreamBuf::sync
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ZeroCopyStreamAsStreamBuf::sync()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: shrink
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: ZeroCopyStreamAsStreamBuf::~ZeroCopyStreamAsStreamBuf()
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - shrink
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamAsStreamBuf::~ZeroCopyStreamAsStreamBuf()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pbase
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:54,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:55,1
    - Dst: epptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:55,1
    - Dst: pptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:55,1
    - Dst: setp
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: butil::ZeroCopyStreamAsStreamBuf::shrink
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - pbase
    - epptr
    - pptr
    - setp
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamAsStreamBuf::shrink()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ByteCount
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:65,1
    - Dst: epptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:65,1
    - Dst: pptr
      Src: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp:65,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - 'off'
    - way
    - which
    argTypes:
    - std::streamoff
    - std::ios_base::seekdir
    - std::ios_base::openmode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 68
    functionName: butil::ZeroCopyStreamAsStreamBuf::seekoff
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.cpp
    functionUses: 0
    functionsReached:
    - epptr
    - ByteCount
    - pptr
    linkageType: ''
    returnType: std::streampos
    signature: "std::streampos ZeroCopyStreamAsStreamBuf::seekoff(\n    std::streamoff
      off,\n    std::ios_base::seekdir way,\n    std::ios_base::openmode which)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AsWeakPtr
      Src: /src/brpc/src/butil/observer_list.h:83,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/observer_list.h:86,1
    - Dst: observers_::size
      Src: /src/brpc/src/butil/observer_list.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' list'
    argTypes:
    - ObserverListBase<ObserverType>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 89
    functionName: ObserverListBase::Iterator::Iterator
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - observers_::size
    - AsWeakPtr
    linkageType: ''
    returnType: void
    signature: void Iterator(ObserverListBase<ObserverType>& list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/observer_list.h:92,1
    - Dst: Compact
      Src: /src/brpc/src/butil/observer_list.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 94
    functionName: ~Iterator()
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - Compact
    - get
    linkageType: ''
    returnType: void
    signature: void ~Iterator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/observer_list.h:97,1
    - Dst: std::min
      Src: /src/brpc/src/butil/observer_list.h:101,1
    - Dst: size
      Src: /src/brpc/src/butil/observer_list.h:101,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 105
    functionName: ObserverListBase::Iterator::GetNext
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - size
    - std::min
    - get
    linkageType: ''
    returnType: ObserverType
    signature: ObserverType * GetNext()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: ObserverListBase::ObserverListBase
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObserverListBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - NotificationType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 115
    functionName: ObserverListBase::ObserverListBase
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObserverListBase(NotificationType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/observer_list.h:120,1
    - Dst: begin
      Src: /src/brpc/src/butil/observer_list.h:120,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:120,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:121,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/observer_list.h:122,1
    - Dst: push_back
      Src: /src/brpc/src/butil/observer_list.h:125,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - obs
    argTypes:
    - ObserverType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: ObserverListBase::AddObserver
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - push_back
    - NOTREACHED
    - begin
    linkageType: ''
    returnType: void
    signature: void AddObserver(ObserverType* obs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::find
      Src: /src/brpc/src/butil/observer_list.h:131,1
    - Dst: begin
      Src: /src/brpc/src/butil/observer_list.h:131,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:131,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:132,1
    - Dst: erase
      Src: /src/brpc/src/butil/observer_list.h:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - obs
    argTypes:
    - ObserverType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 139
    functionName: ObserverListBase::RemoveObserver
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - end
    - erase
    - std::find
    - begin
    linkageType: ''
    returnType: void
    signature: void RemoveObserver(ObserverType* obs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ObserverListBase::size
      Src: /src/brpc/src/butil/observer_list.h:142,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - observer
    argTypes:
    - ObserverType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 147
    functionName: ObserverListBase::HasObserver
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - ObserverListBase::size
    linkageType: ''
    returnType: bool
    signature: bool HasObserver(ObserverType* observer) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/observer_list.h:151,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:152,1
    - Dst: clear
      Src: /src/brpc/src/butil/observer_list.h:156,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 158
    functionName: ObserverListBase::Clear
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - end
    - clear
    - begin
    linkageType: ''
    returnType: void
    signature: void Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ObserverListBase::size
      Src: /src/brpc/src/butil/observer_list.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 161
    functionName: ObserverListBase::size
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 2
    functionsReached:
    - ObserverListBase::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/butil/observer_list.h:164,1
    - Dst: std::remove
      Src: /src/brpc/src/butil/observer_list.h:165,1
    - Dst: begin
      Src: /src/brpc/src/butil/observer_list.h:165,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:165,1
    - Dst: static_cast<ObserverType*>
      Src: /src/brpc/src/butil/observer_list.h:166,1
    - Dst: end
      Src: /src/brpc/src/butil/observer_list.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 167
    functionName: ObserverListBase::Compact
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - end
    - std::remove
    - static_cast<ObserverType*>
    - erase
    - begin
    linkageType: ''
    returnType: void
    signature: void Compact()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 189
    functionName: ObserverList::ObserverList
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObserverList()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - NotificationType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 191
    functionName: ObserverList::ObserverList
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ObserverList(NotificationType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ObserverListBase::Compact
      Src: /src/brpc/src/butil/observer_list.h:196,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/observer_list.h:197,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/src/butil/observer_list.h:197,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 193
    functionDepth: 2
    functionLinenumber: 193
    functionLinenumberEnd: 199
    functionName: ~ObserverList()
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - bthread_keytable_pool_size
    - ObserverListBase::Compact
    linkageType: ''
    returnType: void
    signature: void ~ObserverList()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/src/butil/observer_list.h:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 2
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: ObserverList::might_have_observers
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 0
    functionsReached:
    - bthread_keytable_pool_size
    linkageType: ''
    returnType: bool
    signature: bool might_have_observers() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ObserverType
    - ','
    - observer_list
    - ','
    - func
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 216
    functionName: FOR_EACH_OBSERVER
    functionSourceFile: /src/brpc/src/butil/observer_list.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FOR_EACH_OBSERVER(ObserverType, observer_list, func)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/bits.h:30,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 32
    functionName: butil::bits::Log2Floor
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 4
    functionsReached:
    - DCHECK_EQ
    linkageType: ''
    returnType: int
    signature: int Log2Floor(uint32_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/src/butil/bits.h:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: butil::bits::Log2Ceiling
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 4
    functionsReached:
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: int
    signature: int Log2Ceiling(uint32_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/bits.h:30,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 32
    functionName: butil::bits::Log2Floor
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 5
    functionsReached:
    - DCHECK_EQ
    linkageType: ''
    returnType: int
    signature: int Log2Floor(uint32_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/src/butil/bits.h:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: butil::bits::Log2Ceiling
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 4
    functionsReached:
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: int
    signature: int Log2Ceiling(uint32_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/bits.h:30,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 32
    functionName: butil::bits::Log2Floor
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 6
    functionsReached:
    - DCHECK_EQ
    linkageType: ''
    returnType: int
    signature: int Log2Floor(uint32_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/src/butil/bits.h:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: butil::bits::Log2Ceiling
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 4
    functionsReached:
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: int
    signature: int Log2Ceiling(uint32_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/bits.h:30,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 32
    functionName: butil::bits::Log2Floor
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 7
    functionsReached:
    - DCHECK_EQ
    linkageType: ''
    returnType: int
    signature: int Log2Floor(uint32_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::bits::Log2Floor
      Src: /src/brpc/src/butil/bits.h:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: butil::bits::Log2Ceiling
    functionSourceFile: /src/brpc/src/butil/bits.h
    functionUses: 4
    functionsReached:
    - butil::bits::Log2Floor
    linkageType: ''
    returnType: int
    signature: int Log2Ceiling(uint32_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' b'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: butil::ToPrintable::ToPrintable
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ToPrintable(const IOBuf& b, size_t max_length = DEFAULT_MAX_LENGTH)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: butil::ToPrintable::ToPrintable
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ToPrintable(const StringPiece& str, size_t max_length = DEFAULT_MAX_LENGTH)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: butil::ToPrintable::ToPrintable
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ToPrintable(const void* data, size_t n, size_t max_length = DEFAULT_MAX_LENGTH)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/butil/binary_printer.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - ToPrintable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: '& operator<<(std::ostream& os, const ToPrintable& p)'
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ToPrintable& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' b'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: butil::ToPrintable::ToPrintable
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ToPrintable(const IOBuf& b, size_t max_length = DEFAULT_MAX_LENGTH)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: butil::ToPrintable::ToPrintable
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ToPrintable(const StringPiece& str, size_t max_length = DEFAULT_MAX_LENGTH)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: butil::ToPrintable::ToPrintable
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ToPrintable(const void* data, size_t n, size_t max_length = DEFAULT_MAX_LENGTH)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/butil/binary_printer.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - ToPrintable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: '& operator<<(std::ostream& os, const ToPrintable& p)'
    functionSourceFile: /src/brpc/src/butil/binary_printer.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const ToPrintable& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_listen_connect
      Src: /src/brpc/src/butil/endpoint.cpp:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - sockfd
    - serv_addr
    - addrlen
    argTypes:
    - int
    - struct sockaddr*
    - socklen_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 52
    functionDepth: 2
    functionLinenumber: 52
    functionLinenumberEnd: 56
    functionName: bthread_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - test_listen_connect
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: "__BEGIN_DECLS bthread_connect(\n    int sockfd, const struct sockaddr
      *serv_addr, socklen_t addrlen)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:73,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:74,1
    - Dst: ExtendedEndPoint*::inc_ref
      Src: /src/brpc/src/butil/endpoint.cpp:76,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ep
    - ip
    - port
    argTypes:
    - EndPoint*
    - ip_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: butil::set_endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - ExtendedEndPoint*::inc_ref
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void set_endpoint(EndPoint* ep, ip_t ip, int port)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:85,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:86,1
    - Dst: ExtendedEndPoint*::dec_ref
      Src: /src/brpc/src/butil/endpoint.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 93
    functionName: butil::EndPoint::reset
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - ExtendedEndPoint*::dec_ref
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void EndPoint::reset(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/endpoint.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ip2
    - port2
    argTypes:
    - ip_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 102
    functionName: butil::EndPoint::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 151
    functionsReached:
    - CHECK
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void EndPoint::EndPoint(ip_t ip2, int port2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: butil::EndPoint::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 151
    functionsReached:
    - set_endpoint
    linkageType: ''
    returnType: void
    signature: void EndPoint::EndPoint(const EndPoint& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/endpoint.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: EndPoint::~EndPoint()
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void EndPoint::~EndPoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/endpoint.cpp:113,1
    - Dst: set_endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: EndPoint::operator=(const EndPoint& rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - set_endpoint
    - reset
    linkageType: ''
    returnType: void
    signature: void EndPoint::operator=(const EndPoint& rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:120,1
    - Dst: inet_pton
      Src: /src/brpc/src/butil/endpoint.cpp:121,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - ip_str
    - ip
    argTypes:
    - char*
    - ip_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 127
    functionName: butil::str2ip
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 16
    functionsReached:
    - isspace
    - inet_pton
    linkageType: ''
    returnType: int
    signature: int str2ip(const char* ip_str, ip_t* ip)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: inet_ntop
      Src: /src/brpc/src/butil/endpoint.cpp:131,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/butil/endpoint.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ip
    argTypes:
    - ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 135
    functionName: butil::ip2str
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 16
    functionsReached:
    - inet_ntop
    - butil::ip2str
    linkageType: ''
    returnType: IPStr
    signature: IPStr ip2str(ip_t ip)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:143,1
    - Dst: getnameinfo
      Src: /src/brpc/src/butil/endpoint.cpp:147,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/endpoint.cpp:153,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/endpoint.cpp:154,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - ip
    - host
    - host_len
    argTypes:
    - ip_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 157
    functionName: butil::ip2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::size
    - bzero
    - getnameinfo
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: int
    signature: int ip2hostname(ip_t ip, char* host, size_t host_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ip2hostname
      Src: /src/brpc/src/butil/endpoint.cpp:161,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/endpoint.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ip
    - host
    argTypes:
    - ip_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 166
    functionName: butil::ip2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 1
    functionsReached:
    - std::string*::assign
    - butil::ip2hostname
    linkageType: ''
    returnType: int
    signature: int ip2hostname(ip_t ip, std::string* host)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:170,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:171,1
    - Dst: ExtendedEndPoint*::to
      Src: /src/brpc/src/butil/endpoint.cpp:173,1
    - Dst: inet_ntop
      Src: /src/brpc/src/butil/endpoint.cpp:179,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/butil/endpoint.cpp:180,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/butil/endpoint.cpp:180,1
    - Dst: strlen
      Src: /src/brpc/src/butil/endpoint.cpp:182,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/endpoint.cpp:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - ' point'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 186
    functionName: butil::endpoint2str
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 60
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    - butil::snprintf
    - butil::EndPoint
    - inet_ntop
    - butil::endpoint2str
    - ExtendedEndPoint*::to
    - strlen
    linkageType: ''
    returnType: EndPointStr
    signature: EndPointStr endpoint2str(const EndPoint& point)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gethostname
      Src: /src/brpc/src/butil/endpoint.cpp:191,1
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:197,1
    - Dst: gethostbyname
      Src: /src/brpc/src/butil/endpoint.cpp:204,1
    - Dst: char::char
      Src: /src/brpc/src/butil/endpoint.cpp:210,1
    - Dst: gethostbyname_r
      Src: /src/brpc/src/butil/endpoint.cpp:218,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/butil/endpoint.cpp:220,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/butil/endpoint.cpp:228,1
    - Dst: char::char
      Src: /src/brpc/src/butil/endpoint.cpp:228,1
    - Dst: bcopy
      Src: /src/brpc/src/butil/endpoint.cpp:235,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - hostname
    - ip
    argTypes:
    - char*
    - ip_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 237
    functionName: butil::hostname2ip
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 2
    functionsReached:
    - bcopy
    - isspace
    - gethostbyname_r
    - gethostbyname
    - std::unique_ptr::reset
    - char::char
    - std::unique_ptr::get
    - gethostname
    linkageType: ''
    returnType: int
    signature: int hostname2ip(const char* hostname, ip_t* ip)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gethostname
      Src: /src/brpc/src/butil/endpoint.cpp:246,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/butil/endpoint.cpp:248,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/butil/endpoint.cpp:251,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 244
    functionDepth: 2
    functionLinenumber: 244
    functionLinenumberEnd: 252
    functionName: butil::MyAddressInfo
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::ip2str
    - gethostname
    - butil::hostname2ip
    linkageType: ''
    returnType: void
    signature: void MyAddressInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton
      Src: /src/brpc/src/butil/endpoint.cpp:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 257
    functionName: butil::my_ip
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 68
    functionsReached:
    - butil::get_leaky_singleton
    linkageType: ''
    returnType: ip_t
    signature: ip_t my_ip()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton
      Src: /src/brpc/src/butil/endpoint.cpp:260,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/endpoint.cpp:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 1
    functionLinenumber: 259
    functionLinenumberEnd: 261
    functionName: butil::my_ip_cstr
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 8
    functionsReached:
    - butil::c_str
    - butil::get_leaky_singleton
    linkageType: ''
    returnType: char
    signature: char * my_ip_cstr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton
      Src: /src/brpc/src/butil/endpoint.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 265
    functionName: butil::my_hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton
    linkageType: ''
    returnType: char
    signature: char * my_hostname()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:268,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/butil/endpoint.cpp:282,1
    - Dst: strtol
      Src: /src/brpc/src/butil/endpoint.cpp:287,1
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:291,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 30
    argCount: 2
    argNames:
    - str
    - point
    argTypes:
    - char*
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 300
    functionName: butil::str2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 42
    functionsReached:
    - butil::details::ExtendedEndPoint::create
    - isspace
    - strtol
    - butil::str2ip
    linkageType: ''
    returnType: int
    signature: int str2endpoint(const char* str, EndPoint* point)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:303,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/butil/endpoint.cpp:307,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - ip_str
    - port
    - point
    argTypes:
    - char*
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 315
    functionName: butil::str2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 42
    functionsReached:
    - butil::details::ExtendedEndPoint::create
    - butil::str2ip
    linkageType: ''
    returnType: int
    signature: int str2endpoint(const char* ip_str, int port, EndPoint* point)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/butil/endpoint.cpp:334,1
    - Dst: strtol
      Src: /src/brpc/src/butil/endpoint.cpp:341,1
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:345,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 29
    argCount: 2
    argNames:
    - str
    - point
    argTypes:
    - char*
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 317
    functionDepth: 2
    functionLinenumber: 317
    functionLinenumberEnd: 354
    functionName: butil::hostname2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 9
    functionsReached:
    - isspace
    - strtol
    - butil::hostname2ip
    linkageType: ''
    returnType: int
    signature: int hostname2endpoint(const char* str, EndPoint* point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/butil/endpoint.cpp:357,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 3
    argNames:
    - name_str
    - port
    - point
    argTypes:
    - char*
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 356
    functionDepth: 2
    functionLinenumber: 356
    functionLinenumberEnd: 365
    functionName: butil::hostname2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 9
    functionsReached:
    - butil::hostname2ip
    linkageType: ''
    returnType: int
    signature: int hostname2endpoint(const char* name_str, int port, EndPoint* point)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:368,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:369,1
    - Dst: ExtendedEndPoint*::to_hostname
      Src: /src/brpc/src/butil/endpoint.cpp:371,1
    - Dst: butil::ip2hostname
      Src: /src/brpc/src/butil/endpoint.cpp:376,1
    - Dst: strlen
      Src: /src/brpc/src/butil/endpoint.cpp:377,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/endpoint.cpp:379,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - ' point'
    - host
    - host_len
    argTypes:
    - EndPoint
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 384
    functionName: butil::endpoint2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 2
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    - butil::snprintf
    - butil::ip2hostname
    - ExtendedEndPoint*::to_hostname
    - strlen
    linkageType: ''
    returnType: int
    signature: int endpoint2hostname(const EndPoint& point, char* host, size_t host_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2hostname
      Src: /src/brpc/src/butil/endpoint.cpp:388,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/endpoint.cpp:389,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' point'
    - host
    argTypes:
    - EndPoint
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 393
    functionName: butil::endpoint2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - butil::endpoint2hostname
    - std::string*::assign
    linkageType: ''
    returnType: int
    signature: int endpoint2hostname(const EndPoint& point, std::string* host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/endpoint.cpp:403,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - epoll_events
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 405
    functionName: butil::epoll_to_poll_events
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    linkageType: ''
    returnType: short
    signature: short epoll_to_poll_events(uint32_t epoll_events)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - kqueue_events
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 417
    functionName: butil::kqueue_to_poll_events
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: short
    signature: short kqueue_to_poll_events(int kqueue_events)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::epoll_to_poll_events
      Src: /src/brpc/src/butil/endpoint.cpp:423,1
    - Dst: butil::kqueue_to_poll_events
      Src: /src/brpc/src/butil/endpoint.cpp:425,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/butil/endpoint.cpp:434,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/endpoint.cpp:439,1
    - Dst: poll
      Src: /src/brpc/src/butil/endpoint.cpp:446,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 34
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 420
    functionDepth: 1
    functionLinenumber: 420
    functionLinenumberEnd: 464
    functionName: butil::pthread_fd_wait
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    - butil::kqueue_to_poll_events
    - poll
    - butil::timespec_to_microseconds
    - butil::epoll_to_poll_events
    linkageType: ''
    returnType: int
    signature: "int pthread_fd_wait(int fd, unsigned events,\n                    const
      timespec* abstime)"
  - BBCount: 35
    BranchProfiles: []
    Callsites:
    - Dst: butil::is_blocking
      Src: /src/brpc/src/butil/endpoint.cpp:468,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/butil/endpoint.cpp:470,1
    - Dst: if
      Src: /src/brpc/src/butil/endpoint.cpp:474,1
    - Dst: butil::make_blocking
      Src: /src/brpc/src/butil/endpoint.cpp:475,1
    - Dst: test_listen_connect
      Src: /src/brpc/src/butil/endpoint.cpp:479,1
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/butil/endpoint.cpp:484,1
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/butil/endpoint.cpp:486,1
    - Dst: butil::is_connected
      Src: /src/brpc/src/butil/endpoint.cpp:491,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/src/butil/endpoint.cpp:498,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:504,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:507,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/butil/endpoint.cpp:514,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:519,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:522,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/butil/endpoint.cpp:530,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/endpoint.cpp:533,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:536,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:542,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:545,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:558,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:571,1
    - Dst: ::unlink
      Src: /src/brpc/src/butil/endpoint.cpp:577,1
    - Dst: ::bind
      Src: /src/brpc/src/butil/endpoint.cpp:580,1
    - Dst: listen
      Src: /src/brpc/src/butil/endpoint.cpp:583,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:589,1
    - Dst: getsockname
      Src: /src/brpc/src/butil/endpoint.cpp:595,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:600,1
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:607,1
    - Dst: getpeername
      Src: /src/brpc/src/butil/endpoint.cpp:609,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:614,1
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:620,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:621,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:622,1
    - Dst: ExtendedEndPoint*::to
      Src: /src/brpc/src/butil/endpoint.cpp:626,1
    - Dst: static_cast<socklen_t>
      Src: /src/brpc/src/butil/endpoint.cpp:631,1
    - Dst: htons
      Src: /src/brpc/src/butil/endpoint.cpp:638,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/butil/endpoint.cpp:647,1
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:650,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:657,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:658,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/src/butil/endpoint.cpp:660,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:668,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 134
    argCount: 4
    argNames:
    - sockfd
    - serv_addr
    - addrlen
    - abstime
    argTypes:
    - int
    - struct sockaddr*
    - socklen_t
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 466
    functionDepth: 9
    functionLinenumber: 466
    functionLinenumberEnd: 671
    functionName: butil::pthread_timed_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 5
    functionsReached:
    - butil::tcp_connect
    - butil::endpoint2sockaddr
    - listen
    - test_listen_connect
    - if
    - bthread_timed_connect
    - static_cast<socklen_t>
    - butil::details::ExtendedEndPoint::is_extended
    - ExtendedEndPoint*::family
    - fd_guard::release
    - LOG
    - butil::is_blocking
    - butil::sockaddr2endpoint
    - butil::pthread_timed_connect
    - butil::details::ExtendedEndPoint::address
    - butil::EndPoint
    - butil::is_connected
    - ::bind
    - butil::details::ExtendedEndPoint::create
    - getsockname
    - CHECK
    - bzero
    - butil::get_local_side
    - setsockopt
    - ExtendedEndPoint*::to
    - getpeername
    - ::unlink
    - socket
    - butil::make_blocking
    - htons
    - butil::pthread_fd_wait
    - butil::make_non_blocking
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: "int pthread_timed_connect(int sockfd, const struct sockaddr* serv_addr,\n
      \                         socklen_t addrlen, const timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::tcp_connect
      Src: /src/brpc/src/butil/endpoint.cpp:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - server
    - self_port
    argTypes:
    - EndPoint
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 499
    functionName: butil::tcp_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 12
    functionsReached:
    - butil::tcp_connect
    linkageType: ''
    returnType: int
    signature: int tcp_connect(EndPoint server, int* self_port)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:504,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:507,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/butil/endpoint.cpp:514,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:519,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:522,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/butil/endpoint.cpp:530,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/endpoint.cpp:533,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:536,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 3
    argNames:
    - ' server'
    - self_port
    - connect_timeout_ms
    argTypes:
    - EndPoint
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 501
    functionDepth: 10
    functionLinenumber: 501
    functionLinenumberEnd: 537
    functionName: butil::tcp_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 12
    functionsReached:
    - butil::pthread_timed_connect
    - socket
    - butil::endpoint2sockaddr
    - CHECK
    - butil::get_local_side
    - fd_guard::release
    - bthread_timed_connect
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int tcp_connect(const EndPoint& server, int* self_port, int connect_timeout_ms)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:542,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:545,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:558,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:571,1
    - Dst: ::unlink
      Src: /src/brpc/src/butil/endpoint.cpp:577,1
    - Dst: ::bind
      Src: /src/brpc/src/butil/endpoint.cpp:580,1
    - Dst: listen
      Src: /src/brpc/src/butil/endpoint.cpp:583,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:589,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 31
    argCount: 1
    argNames:
    - point
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 590
    functionName: butil::tcp_listen
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - ::unlink
    - socket
    - ::bind
    - butil::endpoint2sockaddr
    - listen
    - setsockopt
    - fd_guard::release
    - LOG
    linkageType: ''
    returnType: int
    signature: int tcp_listen(EndPoint point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getsockname
      Src: /src/brpc/src/butil/endpoint.cpp:595,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:600,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - out
    argTypes:
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 603
    functionName: butil::get_local_side
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 6
    functionsReached:
    - butil::sockaddr2endpoint
    - getsockname
    linkageType: ''
    returnType: int
    signature: int get_local_side(int fd, EndPoint *out)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:607,1
    - Dst: getpeername
      Src: /src/brpc/src/butil/endpoint.cpp:609,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:614,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - fd
    - out
    argTypes:
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 617
    functionName: butil::get_remote_side
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - butil::sockaddr2endpoint
    - bzero
    - getpeername
    linkageType: ''
    returnType: int
    signature: int get_remote_side(int fd, EndPoint *out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:620,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:621,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:622,1
    - Dst: ExtendedEndPoint*::to
      Src: /src/brpc/src/butil/endpoint.cpp:626,1
    - Dst: static_cast<socklen_t>
      Src: /src/brpc/src/butil/endpoint.cpp:631,1
    - Dst: htons
      Src: /src/brpc/src/butil/endpoint.cpp:638,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - ' point'
    - ss
    - size
    argTypes:
    - EndPoint
    - struct sockaddr_storage*
    - socklen_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 619
    functionDepth: 1
    functionLinenumber: 619
    functionLinenumberEnd: 643
    functionName: butil::endpoint2sockaddr
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 10
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - static_cast<socklen_t>
    - butil::details::ExtendedEndPoint::is_extended
    - htons
    - bzero
    - ExtendedEndPoint*::to
    linkageType: ''
    returnType: int
    signature: int endpoint2sockaddr(const EndPoint& point, struct sockaddr_storage*
      ss, socklen_t* size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint
      Src: /src/brpc/src/butil/endpoint.cpp:647,1
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:650,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - ss
    - size
    - point
    argTypes:
    - struct sockaddr_storage*
    - socklen_t
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 654
    functionName: butil::sockaddr2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 13
    functionsReached:
    - butil::details::ExtendedEndPoint::create
    - butil::EndPoint
    linkageType: ''
    returnType: int
    signature: int sockaddr2endpoint(struct sockaddr_storage* ss, socklen_t size,
      EndPoint* point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:657,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:658,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/src/butil/endpoint.cpp:660,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' point'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 656
    functionDepth: 1
    functionLinenumber: 656
    functionLinenumberEnd: 665
    functionName: butil::get_endpoint_type
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 8
    functionsReached:
    - ExtendedEndPoint*::family
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: sa_family_t
    signature: sa_family_t get_endpoint_type(const EndPoint& point)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:668,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' point'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 669
      start: 667
    functionDepth: 1
    functionLinenumber: 667
    functionLinenumberEnd: 669
    functionName: butil::is_endpoint_extended
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: bool
    signature: bool is_endpoint_extended(const EndPoint& point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:73,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:74,1
    - Dst: ExtendedEndPoint*::inc_ref
      Src: /src/brpc/src/butil/endpoint.cpp:76,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 3
    argNames:
    - ep
    - ip
    - port
    argTypes:
    - EndPoint*
    - ip_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: butil::set_endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - ExtendedEndPoint*::inc_ref
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void set_endpoint(EndPoint* ep, ip_t ip, int port)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:85,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:86,1
    - Dst: ExtendedEndPoint*::dec_ref
      Src: /src/brpc/src/butil/endpoint.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 93
    functionName: butil::EndPoint::reset
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - ExtendedEndPoint*::dec_ref
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void EndPoint::reset(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:97,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/endpoint.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ip2
    - port2
    argTypes:
    - ip_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 102
    functionName: butil::EndPoint::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 151
    functionsReached:
    - CHECK
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void EndPoint::EndPoint(ip_t ip2, int port2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 106
    functionName: butil::EndPoint::EndPoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 151
    functionsReached:
    - set_endpoint
    linkageType: ''
    returnType: void
    signature: void EndPoint::EndPoint(const EndPoint& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/endpoint.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: EndPoint::~EndPoint()
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void EndPoint::~EndPoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/endpoint.cpp:113,1
    - Dst: set_endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: EndPoint::operator=(const EndPoint& rhs)
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - set_endpoint
    - reset
    linkageType: ''
    returnType: void
    signature: void EndPoint::operator=(const EndPoint& rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:120,1
    - Dst: inet_pton
      Src: /src/brpc/src/butil/endpoint.cpp:121,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - ip_str
    - ip
    argTypes:
    - char*
    - ip_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 127
    functionName: butil::str2ip
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 18
    functionsReached:
    - isspace
    - inet_pton
    linkageType: ''
    returnType: int
    signature: int str2ip(const char* ip_str, ip_t* ip)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: inet_ntop
      Src: /src/brpc/src/butil/endpoint.cpp:131,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/butil/endpoint.cpp:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ip
    argTypes:
    - ip_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 135
    functionName: butil::ip2str
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 18
    functionsReached:
    - inet_ntop
    - butil::ip2str
    linkageType: ''
    returnType: IPStr
    signature: IPStr ip2str(ip_t ip)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:143,1
    - Dst: getnameinfo
      Src: /src/brpc/src/butil/endpoint.cpp:147,1
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/endpoint.cpp:153,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/endpoint.cpp:154,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - ip
    - host
    - host_len
    argTypes:
    - ip_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 157
    functionName: butil::ip2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::size
    - bzero
    - getnameinfo
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: int
    signature: int ip2hostname(ip_t ip, char* host, size_t host_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ip2hostname
      Src: /src/brpc/src/butil/endpoint.cpp:161,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/endpoint.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ip
    - host
    argTypes:
    - ip_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 166
    functionName: butil::ip2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - std::string*::assign
    - butil::ip2hostname
    linkageType: ''
    returnType: int
    signature: int ip2hostname(ip_t ip, std::string* host)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:170,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:171,1
    - Dst: ExtendedEndPoint*::to
      Src: /src/brpc/src/butil/endpoint.cpp:173,1
    - Dst: inet_ntop
      Src: /src/brpc/src/butil/endpoint.cpp:179,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/butil/endpoint.cpp:180,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/butil/endpoint.cpp:180,1
    - Dst: strlen
      Src: /src/brpc/src/butil/endpoint.cpp:182,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/endpoint.cpp:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - ' point'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 186
    functionName: butil::endpoint2str
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 61
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    - butil::snprintf
    - butil::EndPoint
    - inet_ntop
    - butil::endpoint2str
    - ExtendedEndPoint*::to
    - strlen
    linkageType: ''
    returnType: EndPointStr
    signature: EndPointStr endpoint2str(const EndPoint& point)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gethostname
      Src: /src/brpc/src/butil/endpoint.cpp:191,1
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:197,1
    - Dst: gethostbyname
      Src: /src/brpc/src/butil/endpoint.cpp:204,1
    - Dst: char::char
      Src: /src/brpc/src/butil/endpoint.cpp:210,1
    - Dst: gethostbyname_r
      Src: /src/brpc/src/butil/endpoint.cpp:218,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/butil/endpoint.cpp:220,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/butil/endpoint.cpp:228,1
    - Dst: char::char
      Src: /src/brpc/src/butil/endpoint.cpp:228,1
    - Dst: bcopy
      Src: /src/brpc/src/butil/endpoint.cpp:235,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - hostname
    - ip
    argTypes:
    - char*
    - ip_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 188
    functionDepth: 1
    functionLinenumber: 188
    functionLinenumberEnd: 237
    functionName: butil::hostname2ip
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 5
    functionsReached:
    - bcopy
    - isspace
    - gethostbyname_r
    - gethostbyname
    - std::unique_ptr::reset
    - char::char
    - std::unique_ptr::get
    - gethostname
    linkageType: ''
    returnType: int
    signature: int hostname2ip(const char* hostname, ip_t* ip)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gethostname
      Src: /src/brpc/src/butil/endpoint.cpp:246,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/butil/endpoint.cpp:248,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/butil/endpoint.cpp:251,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 244
    functionDepth: 2
    functionLinenumber: 244
    functionLinenumberEnd: 252
    functionName: butil::MyAddressInfo
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::ip2str
    - gethostname
    - butil::hostname2ip
    linkageType: ''
    returnType: void
    signature: void MyAddressInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton
      Src: /src/brpc/src/butil/endpoint.cpp:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 257
    functionName: butil::my_ip
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 68
    functionsReached:
    - butil::get_leaky_singleton
    linkageType: ''
    returnType: ip_t
    signature: ip_t my_ip()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton
      Src: /src/brpc/src/butil/endpoint.cpp:260,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/endpoint.cpp:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 1
    functionLinenumber: 259
    functionLinenumberEnd: 261
    functionName: butil::my_ip_cstr
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 8
    functionsReached:
    - butil::c_str
    - butil::get_leaky_singleton
    linkageType: ''
    returnType: char
    signature: char * my_ip_cstr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_leaky_singleton
      Src: /src/brpc/src/butil/endpoint.cpp:264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 265
    functionName: butil::my_hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - butil::get_leaky_singleton
    linkageType: ''
    returnType: char
    signature: char * my_hostname()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:268,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/butil/endpoint.cpp:282,1
    - Dst: strtol
      Src: /src/brpc/src/butil/endpoint.cpp:287,1
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:291,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 30
    argCount: 2
    argNames:
    - str
    - point
    argTypes:
    - char*
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 300
    functionName: butil::str2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 42
    functionsReached:
    - butil::details::ExtendedEndPoint::create
    - isspace
    - strtol
    - butil::str2ip
    linkageType: ''
    returnType: int
    signature: int str2endpoint(const char* str, EndPoint* point)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:303,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/butil/endpoint.cpp:307,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - ip_str
    - port
    - point
    argTypes:
    - char*
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 315
    functionName: butil::str2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 42
    functionsReached:
    - butil::details::ExtendedEndPoint::create
    - butil::str2ip
    linkageType: ''
    returnType: int
    signature: int str2endpoint(const char* ip_str, int port, EndPoint* point)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/butil/endpoint.cpp:334,1
    - Dst: strtol
      Src: /src/brpc/src/butil/endpoint.cpp:341,1
    - Dst: isspace
      Src: /src/brpc/src/butil/endpoint.cpp:345,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 29
    argCount: 2
    argNames:
    - str
    - point
    argTypes:
    - char*
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 317
    functionDepth: 2
    functionLinenumber: 317
    functionLinenumberEnd: 354
    functionName: butil::hostname2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 9
    functionsReached:
    - isspace
    - strtol
    - butil::hostname2ip
    linkageType: ''
    returnType: int
    signature: int hostname2endpoint(const char* str, EndPoint* point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/butil/endpoint.cpp:357,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 3
    argNames:
    - name_str
    - port
    - point
    argTypes:
    - char*
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 356
    functionDepth: 2
    functionLinenumber: 356
    functionLinenumberEnd: 365
    functionName: butil::hostname2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 9
    functionsReached:
    - butil::hostname2ip
    linkageType: ''
    returnType: int
    signature: int hostname2endpoint(const char* name_str, int port, EndPoint* point)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:368,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:369,1
    - Dst: ExtendedEndPoint*::to_hostname
      Src: /src/brpc/src/butil/endpoint.cpp:371,1
    - Dst: butil::ip2hostname
      Src: /src/brpc/src/butil/endpoint.cpp:376,1
    - Dst: strlen
      Src: /src/brpc/src/butil/endpoint.cpp:377,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/endpoint.cpp:379,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - ' point'
    - host
    - host_len
    argTypes:
    - EndPoint
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 384
    functionName: butil::endpoint2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    - butil::snprintf
    - butil::ip2hostname
    - ExtendedEndPoint*::to_hostname
    - strlen
    linkageType: ''
    returnType: int
    signature: int endpoint2hostname(const EndPoint& point, char* host, size_t host_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2hostname
      Src: /src/brpc/src/butil/endpoint.cpp:388,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/endpoint.cpp:389,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' point'
    - host
    argTypes:
    - EndPoint
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 393
    functionName: butil::endpoint2hostname
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - butil::endpoint2hostname
    - std::string*::assign
    linkageType: ''
    returnType: int
    signature: int endpoint2hostname(const EndPoint& point, std::string* host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/endpoint.cpp:403,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - epoll_events
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 405
    functionName: butil::epoll_to_poll_events
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 1
    functionsReached:
    - CHECK_EQ
    linkageType: ''
    returnType: short
    signature: short epoll_to_poll_events(uint32_t epoll_events)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - kqueue_events
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 417
    functionName: butil::kqueue_to_poll_events
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: short
    signature: short kqueue_to_poll_events(int kqueue_events)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::epoll_to_poll_events
      Src: /src/brpc/src/butil/endpoint.cpp:423,1
    - Dst: butil::kqueue_to_poll_events
      Src: /src/brpc/src/butil/endpoint.cpp:425,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/butil/endpoint.cpp:434,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/endpoint.cpp:439,1
    - Dst: poll
      Src: /src/brpc/src/butil/endpoint.cpp:446,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 34
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 420
    functionDepth: 1
    functionLinenumber: 420
    functionLinenumberEnd: 464
    functionName: butil::pthread_fd_wait
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - butil::gettimeofday_us
    - butil::kqueue_to_poll_events
    - poll
    - butil::timespec_to_microseconds
    - butil::epoll_to_poll_events
    linkageType: ''
    returnType: int
    signature: "int pthread_fd_wait(int fd, unsigned events,\n                    const
      timespec* abstime)"
  - BBCount: 35
    BranchProfiles: []
    Callsites:
    - Dst: butil::is_blocking
      Src: /src/brpc/src/butil/endpoint.cpp:468,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/butil/endpoint.cpp:470,1
    - Dst: if
      Src: /src/brpc/src/butil/endpoint.cpp:474,1
    - Dst: butil::make_blocking
      Src: /src/brpc/src/butil/endpoint.cpp:475,1
    - Dst: test_listen_connect
      Src: /src/brpc/src/butil/endpoint.cpp:479,1
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/butil/endpoint.cpp:484,1
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/butil/endpoint.cpp:486,1
    - Dst: butil::is_connected
      Src: /src/brpc/src/butil/endpoint.cpp:491,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/src/butil/endpoint.cpp:498,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:504,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:507,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/butil/endpoint.cpp:514,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:519,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:522,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/butil/endpoint.cpp:530,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/endpoint.cpp:533,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:536,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:542,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:545,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:558,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:571,1
    - Dst: ::unlink
      Src: /src/brpc/src/butil/endpoint.cpp:577,1
    - Dst: ::bind
      Src: /src/brpc/src/butil/endpoint.cpp:580,1
    - Dst: listen
      Src: /src/brpc/src/butil/endpoint.cpp:583,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:589,1
    - Dst: getsockname
      Src: /src/brpc/src/butil/endpoint.cpp:595,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:600,1
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:607,1
    - Dst: getpeername
      Src: /src/brpc/src/butil/endpoint.cpp:609,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:614,1
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:620,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:621,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:622,1
    - Dst: ExtendedEndPoint*::to
      Src: /src/brpc/src/butil/endpoint.cpp:626,1
    - Dst: static_cast<socklen_t>
      Src: /src/brpc/src/butil/endpoint.cpp:631,1
    - Dst: htons
      Src: /src/brpc/src/butil/endpoint.cpp:638,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/butil/endpoint.cpp:647,1
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:650,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:657,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:658,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/src/butil/endpoint.cpp:660,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:668,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 134
    argCount: 4
    argNames:
    - sockfd
    - serv_addr
    - addrlen
    - abstime
    argTypes:
    - int
    - struct sockaddr*
    - socklen_t
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 466
    functionDepth: 9
    functionLinenumber: 466
    functionLinenumberEnd: 671
    functionName: butil::pthread_timed_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 7
    functionsReached:
    - butil::tcp_connect
    - butil::endpoint2sockaddr
    - listen
    - test_listen_connect
    - if
    - bthread_timed_connect
    - static_cast<socklen_t>
    - butil::details::ExtendedEndPoint::is_extended
    - ExtendedEndPoint*::family
    - fd_guard::release
    - LOG
    - butil::is_blocking
    - butil::sockaddr2endpoint
    - butil::pthread_timed_connect
    - butil::details::ExtendedEndPoint::address
    - butil::EndPoint
    - butil::is_connected
    - ::bind
    - butil::details::ExtendedEndPoint::create
    - getsockname
    - CHECK
    - bzero
    - butil::get_local_side
    - setsockopt
    - ExtendedEndPoint*::to
    - getpeername
    - ::unlink
    - socket
    - butil::make_blocking
    - htons
    - butil::pthread_fd_wait
    - butil::make_non_blocking
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: "int pthread_timed_connect(int sockfd, const struct sockaddr* serv_addr,\n
      \                         socklen_t addrlen, const timespec* abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::tcp_connect
      Src: /src/brpc/src/butil/endpoint.cpp:498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - server
    - self_port
    argTypes:
    - EndPoint
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 499
    functionName: butil::tcp_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 14
    functionsReached:
    - butil::tcp_connect
    linkageType: ''
    returnType: int
    signature: int tcp_connect(EndPoint server, int* self_port)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:504,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:507,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/butil/endpoint.cpp:514,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:519,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/src/butil/endpoint.cpp:522,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/butil/endpoint.cpp:530,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/endpoint.cpp:533,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:536,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 3
    argNames:
    - ' server'
    - self_port
    - connect_timeout_ms
    argTypes:
    - EndPoint
    - int*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 501
    functionDepth: 10
    functionLinenumber: 501
    functionLinenumberEnd: 537
    functionName: butil::tcp_connect
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 14
    functionsReached:
    - butil::pthread_timed_connect
    - socket
    - butil::endpoint2sockaddr
    - CHECK
    - butil::get_local_side
    - fd_guard::release
    - bthread_timed_connect
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int tcp_connect(const EndPoint& server, int* self_port, int connect_timeout_ms)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/butil/endpoint.cpp:542,1
    - Dst: socket
      Src: /src/brpc/src/butil/endpoint.cpp:545,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:558,1
    - Dst: setsockopt
      Src: /src/brpc/src/butil/endpoint.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/butil/endpoint.cpp:571,1
    - Dst: ::unlink
      Src: /src/brpc/src/butil/endpoint.cpp:577,1
    - Dst: ::bind
      Src: /src/brpc/src/butil/endpoint.cpp:580,1
    - Dst: listen
      Src: /src/brpc/src/butil/endpoint.cpp:583,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/endpoint.cpp:589,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 31
    argCount: 1
    argNames:
    - point
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 539
    functionDepth: 2
    functionLinenumber: 539
    functionLinenumberEnd: 590
    functionName: butil::tcp_listen
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - ::unlink
    - socket
    - ::bind
    - butil::endpoint2sockaddr
    - listen
    - setsockopt
    - fd_guard::release
    - LOG
    linkageType: ''
    returnType: int
    signature: int tcp_listen(EndPoint point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getsockname
      Src: /src/brpc/src/butil/endpoint.cpp:595,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:600,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - out
    argTypes:
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 603
    functionName: butil::get_local_side
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 8
    functionsReached:
    - butil::sockaddr2endpoint
    - getsockname
    linkageType: ''
    returnType: int
    signature: int get_local_side(int fd, EndPoint *out)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:607,1
    - Dst: getpeername
      Src: /src/brpc/src/butil/endpoint.cpp:609,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/butil/endpoint.cpp:614,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - fd
    - out
    argTypes:
    - int
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 605
    functionDepth: 2
    functionLinenumber: 605
    functionLinenumberEnd: 617
    functionName: butil::get_remote_side
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 3
    functionsReached:
    - butil::sockaddr2endpoint
    - bzero
    - getpeername
    linkageType: ''
    returnType: int
    signature: int get_remote_side(int fd, EndPoint *out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/butil/endpoint.cpp:620,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:621,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:622,1
    - Dst: ExtendedEndPoint*::to
      Src: /src/brpc/src/butil/endpoint.cpp:626,1
    - Dst: static_cast<socklen_t>
      Src: /src/brpc/src/butil/endpoint.cpp:631,1
    - Dst: htons
      Src: /src/brpc/src/butil/endpoint.cpp:638,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - ' point'
    - ss
    - size
    argTypes:
    - EndPoint
    - struct sockaddr_storage*
    - socklen_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 619
    functionDepth: 1
    functionLinenumber: 619
    functionLinenumberEnd: 643
    functionName: butil::endpoint2sockaddr
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 13
    functionsReached:
    - butil::details::ExtendedEndPoint::address
    - static_cast<socklen_t>
    - butil::details::ExtendedEndPoint::is_extended
    - htons
    - bzero
    - ExtendedEndPoint*::to
    linkageType: ''
    returnType: int
    signature: int endpoint2sockaddr(const EndPoint& point, struct sockaddr_storage*
      ss, socklen_t* size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint
      Src: /src/brpc/src/butil/endpoint.cpp:647,1
    - Dst: butil::details::ExtendedEndPoint::create
      Src: /src/brpc/src/butil/endpoint.cpp:650,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - ss
    - size
    - point
    argTypes:
    - struct sockaddr_storage*
    - socklen_t
    - EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 654
    functionName: butil::sockaddr2endpoint
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 16
    functionsReached:
    - butil::details::ExtendedEndPoint::create
    - butil::EndPoint
    linkageType: ''
    returnType: int
    signature: int sockaddr2endpoint(struct sockaddr_storage* ss, socklen_t size,
      EndPoint* point)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:657,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/src/butil/endpoint.cpp:658,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/src/butil/endpoint.cpp:660,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' point'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 656
    functionDepth: 1
    functionLinenumber: 656
    functionLinenumberEnd: 665
    functionName: butil::get_endpoint_type
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 8
    functionsReached:
    - ExtendedEndPoint*::family
    - butil::details::ExtendedEndPoint::address
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: sa_family_t
    signature: sa_family_t get_endpoint_type(const EndPoint& point)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/src/butil/endpoint.cpp:668,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' point'
    argTypes:
    - EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 669
      start: 667
    functionDepth: 1
    functionLinenumber: 667
    functionLinenumberEnd: 669
    functionName: butil::is_endpoint_extended
    functionSourceFile: /src/brpc/src/butil/endpoint.cpp
    functionUses: 4
    functionsReached:
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: bool
    signature: bool is_endpoint_extended(const EndPoint& point)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/hash.h:23,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/hash.h:23,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/hash.h:24,1
    - Dst: butil::SuperFastHash
      Src: /src/brpc/src/butil/hash.h:27,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/hash.h:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 28
    functionName: butil::Hash
    functionSourceFile: /src/brpc/src/butil/hash.h
    functionUses: 5
    functionsReached:
    - butil::SuperFastHash
    - static_cast<size_t>
    - NOTREACHED
    - static_cast<int>
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Hash(const char* data, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Hash
      Src: /src/brpc/src/butil/hash.h:33,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/hash.h:33,1
    - Dst: size
      Src: /src/brpc/src/butil/hash.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::Hash
    functionSourceFile: /src/brpc/src/butil/hash.h
    functionUses: 6
    functionsReached:
    - size
    - butil::Hash
    - butil::data
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Hash(const std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/hash.h:23,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/hash.h:23,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/hash.h:24,1
    - Dst: butil::SuperFastHash
      Src: /src/brpc/src/butil/hash.h:27,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/hash.h:27,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 28
    functionName: butil::Hash
    functionSourceFile: /src/brpc/src/butil/hash.h
    functionUses: 6
    functionsReached:
    - butil::SuperFastHash
    - static_cast<size_t>
    - NOTREACHED
    - static_cast<int>
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Hash(const char* data, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Hash
      Src: /src/brpc/src/butil/hash.h:33,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/hash.h:33,1
    - Dst: size
      Src: /src/brpc/src/butil/hash.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::Hash
    functionSourceFile: /src/brpc/src/butil/hash.h
    functionUses: 7
    functionsReached:
    - size
    - butil::Hash
    - butil::data
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Hash(const std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/lazy_instance.cc:24,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/lazy_instance.cc:34,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/lazy_instance.cc:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 39
    functionName: butil::internal::NeedsLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::PlatformThread::YieldCurrentThread
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: bool
    signature: bool NeedsLazyInstance(subtle::AtomicWord* state)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/lazy_instance.cc:46,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/lazy_instance.cc:51,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/src/butil/lazy_instance.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - state
    - new_instance
    - lazy_instance
    argTypes:
    - subtle::AtomicWord*
    - subtle::AtomicWord
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 56
    functionName: butil::internal::CompleteLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::RegisterCallback
    - butil::subtle::Release_Store
    - ANNOTATE_HAPPENS_BEFORE
    linkageType: ''
    returnType: void
    signature: "void CompleteLazyInstance(subtle::AtomicWord* state,\n                          subtle::AtomicWord
      new_instance,\n                          void* lazy_instance,\n                          void
      (*dtor)(void*))"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/lazy_instance.cc:24,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/lazy_instance.cc:34,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/lazy_instance.cc:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 39
    functionName: butil::internal::NeedsLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::PlatformThread::YieldCurrentThread
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: bool
    signature: bool NeedsLazyInstance(subtle::AtomicWord* state)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/lazy_instance.cc:46,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/lazy_instance.cc:51,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/src/butil/lazy_instance.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - state
    - new_instance
    - lazy_instance
    argTypes:
    - subtle::AtomicWord*
    - subtle::AtomicWord
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 56
    functionName: butil::internal::CompleteLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::RegisterCallback
    - butil::subtle::Release_Store
    - ANNOTATE_HAPPENS_BEFORE
    linkageType: ''
    returnType: void
    signature: "void CompleteLazyInstance(subtle::AtomicWord* state,\n                          subtle::AtomicWord
      new_instance,\n                          void* lazy_instance,\n                          void
      (*dtor)(void*))"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/lazy_instance.cc:24,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/lazy_instance.cc:34,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/lazy_instance.cc:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 39
    functionName: butil::internal::NeedsLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::PlatformThread::YieldCurrentThread
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: bool
    signature: bool NeedsLazyInstance(subtle::AtomicWord* state)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/lazy_instance.cc:46,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/lazy_instance.cc:51,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/src/butil/lazy_instance.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - state
    - new_instance
    - lazy_instance
    argTypes:
    - subtle::AtomicWord*
    - subtle::AtomicWord
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 56
    functionName: butil::internal::CompleteLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::RegisterCallback
    - butil::subtle::Release_Store
    - ANNOTATE_HAPPENS_BEFORE
    linkageType: ''
    returnType: void
    signature: "void CompleteLazyInstance(subtle::AtomicWord* state,\n                          subtle::AtomicWord
      new_instance,\n                          void* lazy_instance,\n                          void
      (*dtor)(void*))"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/lazy_instance.cc:24,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/lazy_instance.cc:34,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/lazy_instance.cc:35,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 39
    functionName: butil::internal::NeedsLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::PlatformThread::YieldCurrentThread
    - butil::subtle::Acquire_Load
    linkageType: ''
    returnType: bool
    signature: bool NeedsLazyInstance(subtle::AtomicWord* state)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/lazy_instance.cc:46,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/lazy_instance.cc:51,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/src/butil/lazy_instance.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - state
    - new_instance
    - lazy_instance
    argTypes:
    - subtle::AtomicWord*
    - subtle::AtomicWord
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 56
    functionName: butil::internal::CompleteLazyInstance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.cc
    functionUses: 0
    functionsReached:
    - butil::AtExitManager::RegisterCallback
    - butil::subtle::Release_Store
    - ANNOTATE_HAPPENS_BEFORE
    linkageType: ''
    returnType: void
    signature: "void CompleteLazyInstance(subtle::AtomicWord* state,\n                          subtle::AtomicWord
      new_instance,\n                          void* lazy_instance,\n                          void
      (*dtor)(void*))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/rand_util.cc:19,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/rand_util.cc:21,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/rand_util.cc:22,1
    - Dst: butil::RandGenerator
      Src: /src/brpc/src/butil/rand_util.cc:22,1
    - Dst: DCHECK_GE
      Src: /src/brpc/src/butil/rand_util.cc:23,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/rand_util.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 26
    functionName: butil::RandInt
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - DCHECK_LE
    - DCHECK_GE
    - butil::RandGenerator
    - static_cast<int>
    - static_cast<uint64_t>
    linkageType: ''
    returnType: int
    signature: int RandInt(int min, int max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BitsToOpenEndedUnitInterval
      Src: /src/brpc/src/butil/rand_util.cc:29,1
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/rand_util.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::RandDouble
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - butil::BitsToOpenEndedUnitInterval
    - butil::RandUint64
    linkageType: ''
    returnType: double
    signature: double RandDouble()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/rand_util.cc:38,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/src/butil/rand_util.cc:40,1
    - Dst: ldexp
      Src: /src/brpc/src/butil/rand_util.cc:41,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/rand_util.cc:41,1
    - Dst: DCHECK_GE
      Src: /src/brpc/src/butil/rand_util.cc:42,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/rand_util.cc:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - bits
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 45
    functionName: butil::BitsToOpenEndedUnitInterval
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - DCHECK_GE
    - COMPILE_ASSERT
    - DCHECK_LT
    - static_cast<double>
    - GG_UINT64_C
    - ldexp
    linkageType: ''
    returnType: double
    signature: double BitsToOpenEndedUnitInterval(uint64_t bits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/rand_util.cc:48,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/rand_util.cc:54,1
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/rand_util.cc:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - range
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 62
    functionName: butil::RandGenerator
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 3
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::RandUint64
    - DCHECK_GT
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t RandGenerator(uint64_t range)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/rand_util.cc:65,1
    - Dst: butil::RandBytes
      Src: /src/brpc/src/butil/rand_util.cc:67,1
    - Dst: WriteInto
      Src: /src/brpc/src/butil/rand_util.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::RandBytesAsString
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - butil::RandBytes
    - WriteInto
    - DCHECK_GT
    linkageType: ''
    returnType: std::string
    signature: std::string RandBytesAsString(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/rand_util.cc:19,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/rand_util.cc:21,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/rand_util.cc:22,1
    - Dst: butil::RandGenerator
      Src: /src/brpc/src/butil/rand_util.cc:22,1
    - Dst: DCHECK_GE
      Src: /src/brpc/src/butil/rand_util.cc:23,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/rand_util.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 18
    functionDepth: 2
    functionLinenumber: 18
    functionLinenumberEnd: 26
    functionName: butil::RandInt
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - DCHECK_LE
    - DCHECK_GE
    - butil::RandGenerator
    - static_cast<int>
    - static_cast<uint64_t>
    linkageType: ''
    returnType: int
    signature: int RandInt(int min, int max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BitsToOpenEndedUnitInterval
      Src: /src/brpc/src/butil/rand_util.cc:29,1
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/rand_util.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 2
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::RandDouble
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - butil::BitsToOpenEndedUnitInterval
    - butil::RandUint64
    linkageType: ''
    returnType: double
    signature: double RandDouble()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/rand_util.cc:38,1
    - Dst: GG_UINT64_C
      Src: /src/brpc/src/butil/rand_util.cc:40,1
    - Dst: ldexp
      Src: /src/brpc/src/butil/rand_util.cc:41,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/rand_util.cc:41,1
    - Dst: DCHECK_GE
      Src: /src/brpc/src/butil/rand_util.cc:42,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/rand_util.cc:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - bits
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 45
    functionName: butil::BitsToOpenEndedUnitInterval
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 2
    functionsReached:
    - DCHECK_GE
    - COMPILE_ASSERT
    - DCHECK_LT
    - static_cast<double>
    - GG_UINT64_C
    - ldexp
    linkageType: ''
    returnType: double
    signature: double BitsToOpenEndedUnitInterval(uint64_t bits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/rand_util.cc:48,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/rand_util.cc:54,1
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/rand_util.cc:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - range
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 62
    functionName: butil::RandGenerator
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 4
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::RandUint64
    - DCHECK_GT
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t RandGenerator(uint64_t range)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/rand_util.cc:65,1
    - Dst: butil::RandBytes
      Src: /src/brpc/src/butil/rand_util.cc:67,1
    - Dst: WriteInto
      Src: /src/brpc/src/butil/rand_util.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::RandBytesAsString
    functionSourceFile: /src/brpc/src/butil/rand_util.cc
    functionUses: 1
    functionsReached:
    - butil::RandBytes
    - WriteInto
    - DCHECK_GT
    linkageType: ''
    returnType: std::string
    signature: std::string RandBytesAsString(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:297,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 305
    functionName: butil::crc32c::DecodeFixed32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - memcpy
    - static_cast<uint32_t>
    - static_cast<unsigned char>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t DecodeFixed32(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:311,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:314,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 318
    functionName: butil::crc32c::DecodeFixed64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::crc32c::DecodeFixed32
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t DecodeFixed64(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 323
    functionName: butil::crc32c::LE_LOAD32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::DecodeFixed32
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LE_LOAD32(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed64
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 327
    functionDepth: 2
    functionLinenumber: 327
    functionLinenumberEnd: 329
    functionName: butil::crc32c::LE_LOAD64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::DecodeFixed64
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t LE_LOAD64(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 333
    functionDepth: 2
    functionLinenumber: 333
    functionLinenumberEnd: 347
    functionName: butil::crc32c::Slow_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::LE_LOAD32
    - static_cast<uint32_t>
    linkageType: ''
    returnType: void
    signature: void Slow_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_crc32_u64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: butil::crc32c::LE_LOAD64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 349
    functionDepth: 3
    functionLinenumber: 349
    functionLinenumberEnd: 363
    functionName: butil::crc32c::Fast_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - _mm_crc32_u64
    - butil::crc32c::LE_LOAD32
    - static_cast<unsigned int>
    - _mm_crc32_u32
    - butil::crc32c::LE_LOAD64
    - butil::crc32c::Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void Fast_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Fast_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 367
    functionDepth: 4
    functionLinenumber: 367
    functionLinenumberEnd: 369
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::Fast_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 374
    functionDepth: 3
    functionLinenumber: 374
    functionLinenumberEnd: 376
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const uint8_t *>
      Src: /src/brpc/src/butil/crc32c.cc:383,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/crc32c.cc:398,1
    - Dst: reinterpret_cast<const uint8_t*>
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: ALIGN
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:408,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:409,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:413,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:421,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 380
    functionDepth: 1
    functionLinenumber: 380
    functionLinenumberEnd: 422
    functionName: butil::crc32c::ExtendImpl
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uintptr_t>
    - reinterpret_cast<const uint8_t *>
    - static_cast<uint32_t>
    - reinterpret_cast<const uint8_t*>
    - CRC32
    - ALIGN
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - m
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 389
    functionName: ALIGN
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGN(n, m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 434
    functionName: butil::crc32c::isSSE42
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool isSSE42()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 441
    functionName: butil::crc32c::Choose_Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: Function
    signature: Function Choose_Extend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 443
    functionDepth: 1
    functionLinenumber: 443
    functionLinenumberEnd: 449
    functionName: butil::crc32c::IsFastCrc32Supported
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: bool
    signature: bool IsFastCrc32Supported()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Choose_Extend
      Src: /src/brpc/src/butil/crc32c.cc:452,1
    - Dst: ChosenExtend
      Src: /src/brpc/src/butil/crc32c.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 2
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::crc32c::Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 12
    functionsReached:
    - ChosenExtend
    - butil::crc32c::Choose_Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Extend(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:297,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 305
    functionName: butil::crc32c::DecodeFixed32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached:
    - memcpy
    - static_cast<uint32_t>
    - static_cast<unsigned char>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t DecodeFixed32(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:311,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:314,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 318
    functionName: butil::crc32c::DecodeFixed64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached:
    - memcpy
    - butil::crc32c::DecodeFixed32
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t DecodeFixed64(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 323
    functionName: butil::crc32c::LE_LOAD32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached:
    - butil::crc32c::DecodeFixed32
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LE_LOAD32(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed64
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 327
    functionDepth: 2
    functionLinenumber: 327
    functionLinenumberEnd: 329
    functionName: butil::crc32c::LE_LOAD64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached:
    - butil::crc32c::DecodeFixed64
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t LE_LOAD64(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 333
    functionDepth: 2
    functionLinenumber: 333
    functionLinenumberEnd: 347
    functionName: butil::crc32c::Slow_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached:
    - butil::crc32c::LE_LOAD32
    - static_cast<uint32_t>
    linkageType: ''
    returnType: void
    signature: void Slow_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_crc32_u64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: butil::crc32c::LE_LOAD64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 349
    functionDepth: 3
    functionLinenumber: 349
    functionLinenumberEnd: 363
    functionName: butil::crc32c::Fast_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached:
    - _mm_crc32_u64
    - butil::crc32c::LE_LOAD32
    - static_cast<unsigned int>
    - _mm_crc32_u32
    - butil::crc32c::LE_LOAD64
    - butil::crc32c::Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void Fast_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Fast_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 369
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - Fast_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 376
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const uint8_t *>
      Src: /src/brpc/src/butil/crc32c.cc:383,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/crc32c.cc:398,1
    - Dst: reinterpret_cast<const uint8_t*>
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: ALIGN
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:408,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:409,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:413,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:421,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 380
    functionDepth: 1
    functionLinenumber: 380
    functionLinenumberEnd: 422
    functionName: butil::crc32c::ExtendImpl
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uintptr_t>
    - reinterpret_cast<const uint8_t *>
    - static_cast<uint32_t>
    - reinterpret_cast<const uint8_t*>
    - CRC32
    - ALIGN
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - m
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 389
    functionName: ALIGN
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGN(n, m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 434
    functionName: butil::crc32c::isSSE42
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool isSSE42()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 441
    functionName: butil::crc32c::Choose_Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: Function
    signature: Function Choose_Extend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 443
    functionDepth: 1
    functionLinenumber: 443
    functionLinenumberEnd: 449
    functionName: butil::crc32c::IsFastCrc32Supported
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: bool
    signature: bool IsFastCrc32Supported()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Choose_Extend
      Src: /src/brpc/src/butil/crc32c.cc:452,1
    - Dst: ChosenExtend
      Src: /src/brpc/src/butil/crc32c.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 2
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::crc32c::Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 12
    functionsReached:
    - ChosenExtend
    - butil::crc32c::Choose_Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Extend(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:297,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 305
    functionName: butil::crc32c::DecodeFixed32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - memcpy
    - static_cast<uint32_t>
    - static_cast<unsigned char>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t DecodeFixed32(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:311,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:314,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 318
    functionName: butil::crc32c::DecodeFixed64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached:
    - memcpy
    - butil::crc32c::DecodeFixed32
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t DecodeFixed64(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 323
    functionName: butil::crc32c::LE_LOAD32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - butil::crc32c::DecodeFixed32
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LE_LOAD32(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed64
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 327
    functionDepth: 2
    functionLinenumber: 327
    functionLinenumberEnd: 329
    functionName: butil::crc32c::LE_LOAD64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached:
    - butil::crc32c::DecodeFixed64
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t LE_LOAD64(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 333
    functionDepth: 2
    functionLinenumber: 333
    functionLinenumberEnd: 347
    functionName: butil::crc32c::Slow_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 3
    functionsReached:
    - butil::crc32c::LE_LOAD32
    - static_cast<uint32_t>
    linkageType: ''
    returnType: void
    signature: void Slow_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_crc32_u64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: butil::crc32c::LE_LOAD64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 349
    functionDepth: 3
    functionLinenumber: 349
    functionLinenumberEnd: 363
    functionName: butil::crc32c::Fast_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached:
    - _mm_crc32_u64
    - butil::crc32c::LE_LOAD32
    - static_cast<unsigned int>
    - _mm_crc32_u32
    - butil::crc32c::LE_LOAD64
    - butil::crc32c::Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void Fast_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Fast_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 369
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - Fast_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 376
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const uint8_t *>
      Src: /src/brpc/src/butil/crc32c.cc:383,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/crc32c.cc:398,1
    - Dst: reinterpret_cast<const uint8_t*>
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: ALIGN
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:408,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:409,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:413,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:421,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 380
    functionDepth: 1
    functionLinenumber: 380
    functionLinenumberEnd: 422
    functionName: butil::crc32c::ExtendImpl
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uintptr_t>
    - reinterpret_cast<const uint8_t *>
    - static_cast<uint32_t>
    - reinterpret_cast<const uint8_t*>
    - CRC32
    - ALIGN
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - m
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 389
    functionName: ALIGN
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGN(n, m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 434
    functionName: butil::crc32c::isSSE42
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool isSSE42()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 441
    functionName: butil::crc32c::Choose_Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 2
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: Function
    signature: Function Choose_Extend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 443
    functionDepth: 1
    functionLinenumber: 443
    functionLinenumberEnd: 449
    functionName: butil::crc32c::IsFastCrc32Supported
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: bool
    signature: bool IsFastCrc32Supported()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Choose_Extend
      Src: /src/brpc/src/butil/crc32c.cc:452,1
    - Dst: ChosenExtend
      Src: /src/brpc/src/butil/crc32c.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 2
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::crc32c::Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 12
    functionsReached:
    - ChosenExtend
    - butil::crc32c::Choose_Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Extend(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:297,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:300,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:301,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:302,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/butil/crc32c.cc:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 305
    functionName: butil::crc32c::DecodeFixed32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 6
    functionsReached:
    - memcpy
    - static_cast<uint32_t>
    - static_cast<unsigned char>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t DecodeFixed32(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/crc32c.cc:311,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:314,1
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 318
    functionName: butil::crc32c::DecodeFixed64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 3
    functionsReached:
    - memcpy
    - butil::crc32c::DecodeFixed32
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t DecodeFixed64(const char* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed32
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 323
    functionName: butil::crc32c::LE_LOAD32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 6
    functionsReached:
    - butil::crc32c::DecodeFixed32
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t LE_LOAD32(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::DecodeFixed64
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/crc32c.cc:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 327
    functionDepth: 2
    functionLinenumber: 327
    functionLinenumberEnd: 329
    functionName: butil::crc32c::LE_LOAD64
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 3
    functionsReached:
    - butil::crc32c::DecodeFixed64
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t LE_LOAD64(const uint8_t *p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:334,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 333
    functionDepth: 2
    functionLinenumber: 333
    functionLinenumberEnd: 347
    functionName: butil::crc32c::Slow_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - butil::crc32c::LE_LOAD32
    - static_cast<uint32_t>
    linkageType: ''
    returnType: void
    signature: void Slow_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _mm_crc32_u64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: butil::crc32c::LE_LOAD64
      Src: /src/brpc/src/butil/crc32c.cc:352,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:355,1
    - Dst: _mm_crc32_u32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::LE_LOAD32
      Src: /src/brpc/src/butil/crc32c.cc:357,1
    - Dst: butil::crc32c::Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 349
    functionDepth: 3
    functionLinenumber: 349
    functionLinenumberEnd: 363
    functionName: butil::crc32c::Fast_CRC32
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 1
    functionsReached:
    - _mm_crc32_u64
    - butil::crc32c::LE_LOAD32
    - static_cast<unsigned int>
    - _mm_crc32_u32
    - butil::crc32c::LE_LOAD64
    - butil::crc32c::Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void Fast_CRC32(uint64_t* l, uint8_t const **p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Fast_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 369
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - Fast_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Slow_CRC32
      Src: /src/brpc/src/butil/crc32c.cc:375,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - l
    - p
    argTypes:
    - uint64_t*
    - uint8_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 376
    functionName: operator()(uint64_t* l, uint8_t const **p) const
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - Slow_CRC32
    linkageType: ''
    returnType: void
    signature: void operator()(uint64_t* l, uint8_t const **p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const uint8_t *>
      Src: /src/brpc/src/butil/crc32c.cc:383,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/crc32c.cc:398,1
    - Dst: reinterpret_cast<const uint8_t*>
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: ALIGN
      Src: /src/brpc/src/butil/crc32c.cc:399,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:408,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:409,1
    - Dst: CRC32
      Src: /src/brpc/src/butil/crc32c.cc:413,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/butil/crc32c.cc:421,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 380
    functionDepth: 1
    functionLinenumber: 380
    functionLinenumberEnd: 422
    functionName: butil::crc32c::ExtendImpl
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uintptr_t>
    - reinterpret_cast<const uint8_t *>
    - static_cast<uint32_t>
    - reinterpret_cast<const uint8_t*>
    - CRC32
    - ALIGN
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - n
    - ','
    - m
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 389
    functionName: ALIGN
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGN(n, m)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 434
    functionName: butil::crc32c::isSSE42
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool isSSE42()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 441
    functionName: butil::crc32c::Choose_Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 3
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: Function
    signature: Function Choose_Extend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::isSSE42
      Src: /src/brpc/src/butil/crc32c.cc:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 443
    functionDepth: 1
    functionLinenumber: 443
    functionLinenumberEnd: 449
    functionName: butil::crc32c::IsFastCrc32Supported
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 4
    functionsReached:
    - butil::crc32c::isSSE42
    linkageType: ''
    returnType: bool
    signature: bool IsFastCrc32Supported()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Choose_Extend
      Src: /src/brpc/src/butil/crc32c.cc:452,1
    - Dst: ChosenExtend
      Src: /src/brpc/src/butil/crc32c.cc:453,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - crc
    - buf
    - size
    argTypes:
    - uint32_t
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 451
    functionDepth: 2
    functionLinenumber: 451
    functionLinenumberEnd: 454
    functionName: butil::crc32c::Extend
    functionSourceFile: /src/brpc/src/butil/crc32c.cc
    functionUses: 12
    functionsReached:
    - ChosenExtend
    - butil::crc32c::Choose_Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Extend(uint32_t crc, const char* buf, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util.cc:39,1
    - Dst: FileEnumerator::GetInfo
      Src: /src/brpc/src/butil/file_util.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' root_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: butil::ComputeDirectorySize
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - FileEnumerator::GetInfo
    - FileEnumerator::Next
    linkageType: ''
    returnType: int64_t
    signature: int64_t ComputeDirectorySize(const FilePath& root_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:45,1
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:45,1
    - Dst: butil::internal::MoveUnsafe
      Src: /src/brpc/src/butil/file_util.cc:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: butil::Move
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 20
    functionsReached:
    - butil::internal::MoveUnsafe
    - ReferencesParent
    linkageType: ''
    returnType: bool
    signature: bool Move(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:51,1
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:51,1
    - Dst: butil::internal::CopyFileUnsafe
      Src: /src/brpc/src/butil/file_util.cc:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: butil::CopyFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 8
    functionsReached:
    - ReferencesParent
    - butil::internal::CopyFileUnsafe
    linkageType: ''
    returnType: bool
    signature: bool CopyFile(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:60,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:62,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:67,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:67,1
    - Dst: std::ifstream::read
      Src: /src/brpc/src/butil/file_util.cc:73,1
    - Dst: std::ifstream::read
      Src: /src/brpc/src/butil/file_util.cc:74,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:76,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:76,1
    - Dst: std::ifstream::gcount
      Src: /src/brpc/src/butil/file_util.cc:77,1
    - Dst: std::ifstream::gcount
      Src: /src/brpc/src/butil/file_util.cc:77,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/file_util.cc:78,1
    - Dst: std::ifstream::gcount
      Src: /src/brpc/src/butil/file_util.cc:78,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:79,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:80,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:83,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:83,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:85,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:86,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 2
    argNames:
    - ' filename1'
    - ' filename2'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 88
    functionName: butil::ContentsEqual
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - memcmp
    - butil::value
    - std::ifstream::gcount
    - std::ifstream::close
    - std::ifstream::read
    - std::ifstream::is_open
    - std::ifstream::eof
    linkageType: ''
    returnType: bool
    signature: bool ContentsEqual(const FilePath& filename1, const FilePath& filename2)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:91,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:92,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:96,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:96,1
    - Dst: getline
      Src: /src/brpc/src/butil/file_util.cc:101,1
    - Dst: getline
      Src: /src/brpc/src/butil/file_util.cc:102,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:105,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:105,1
    - Dst: std::ifstream::bad
      Src: /src/brpc/src/butil/file_util.cc:106,1
    - Dst: std::ifstream::bad
      Src: /src/brpc/src/butil/file_util.cc:106,1
    - Dst: std::string::find_last_not_of
      Src: /src/brpc/src/butil/file_util.cc:111,1
    - Dst: std::string::clear
      Src: /src/brpc/src/butil/file_util.cc:113,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/file_util.cc:114,1
    - Dst: std::string::erase
      Src: /src/brpc/src/butil/file_util.cc:115,1
    - Dst: find_last_not_of
      Src: /src/brpc/src/butil/file_util.cc:117,1
    - Dst: butil::clear
      Src: /src/brpc/src/butil/file_util.cc:119,1
    - Dst: butil::length
      Src: /src/brpc/src/butil/file_util.cc:120,1
    - Dst: erase
      Src: /src/brpc/src/butil/file_util.cc:121,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:125,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:125,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 2
    argNames:
    - ' filename1'
    - ' filename2'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 128
    functionName: butil::TextContentsEqual
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - butil::value
    - find_last_not_of
    - std::ifstream::bad
    - std::string::find_last_not_of
    - std::string::clear
    - butil::clear
    - erase
    - std::string::erase
    - std::string::length
    - getline
    - butil::length
    - std::ifstream::is_open
    - std::ifstream::eof
    linkageType: ''
    returnType: bool
    signature: bool TextContentsEqual(const FilePath& filename1, const FilePath& filename2)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/butil/file_util.cc:134,1
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:135,1
    - Dst: butil::OpenFile
      Src: /src/brpc/src/butil/file_util.cc:137,1
    - Dst: fread
      Src: /src/brpc/src/butil/file_util.cc:149,1
    - Dst: std::string*::append
      Src: /src/brpc/src/butil/file_util.cc:151,1
    - Dst: std::min
      Src: /src/brpc/src/butil/file_util.cc:151,1
    - Dst: ferror
      Src: /src/brpc/src/butil/file_util.cc:160,1
    - Dst: butil::CloseFile
      Src: /src/brpc/src/butil/file_util.cc:161,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 3
    argNames:
    - ' path'
    - contents
    - max_size
    argTypes:
    - FilePath
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 164
    functionName: butil::ReadFileToString
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 6
    functionsReached:
    - std::string*::clear
    - ferror
    - fread
    - std::min
    - butil::OpenFile
    - ReferencesParent
    - std::string*::append
    - butil::CloseFile
    linkageType: ''
    returnType: bool
    signature: "bool ReadFileToString(const FilePath& path,\n                      std::string*
      contents,\n                      size_t max_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/butil/file_util.cc:167,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/file_util.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' path'
    - contents
    argTypes:
    - FilePath
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: butil::ReadFileToString
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 7
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::ReadFileToString
    linkageType: ''
    returnType: bool
    signature: bool ReadFileToString(const FilePath& path, std::string* contents)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util.cc:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' dir_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 176
    functionName: butil::IsDirectoryEmpty
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - FileEnumerator::Next
    linkageType: ''
    returnType: bool
    signature: bool IsDirectoryEmpty(const FilePath& dir_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util.cc:180,1
    - Dst: butil::CreateAndOpenTemporaryFileInDir
      Src: /src/brpc/src/butil/file_util.cc:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - path
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 184
    functionName: butil::CreateAndOpenTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - butil::GetTempDir
    - butil::CreateAndOpenTemporaryFileInDir
    linkageType: ''
    returnType: FILE
    signature: FILE * CreateAndOpenTemporaryFile(FilePath* path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/file_util.cc:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: butil::CreateDirectory
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 120
    functionsReached:
    - butil::CreateDirectoryAndGetError
    linkageType: ''
    returnType: bool
    signature: bool CreateDirectory(const FilePath& full_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/file_util.cc:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_path'
    - create_parent
    argTypes:
    - FilePath
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    functionName: butil::CreateDirectory
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 120
    functionsReached:
    - butil::CreateDirectoryAndGetError
    linkageType: ''
    returnType: bool
    signature: bool CreateDirectory(const FilePath& full_path, bool create_parent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/file_util.cc:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_path'
    - error
    argTypes:
    - FilePath
    - File::Error*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 197
    functionName: butil::CreateDirectoryAndGetError
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 23
    functionsReached:
    - butil::CreateDirectoryAndGetError
    linkageType: ''
    returnType: bool
    signature: "bool CreateDirectoryAndGetError(const FilePath& full_path,\n                                File::Error*
      error)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetFileInfo
      Src: /src/brpc/src/butil/file_util.cc:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' file_path'
    - file_size
    argTypes:
    - FilePath
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 205
    functionName: butil::GetFileSize
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 12
    functionsReached:
    - butil::GetFileInfo
    linkageType: ''
    returnType: bool
    signature: bool GetFileSize(const FilePath& file_path, int64_t* file_size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util.cc:214,1
    - Dst: File::IsValid
      Src: /src/brpc/src/butil/file_util.cc:219,1
    - Dst: File::SetTimes
      Src: /src/brpc/src/butil/file_util.cc:222,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ' path'
    - ' last_accessed'
    - ' last_modified'
    argTypes:
    - FilePath
    - Time
    - Time
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 223
    functionName: butil::TouchFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - butil::DirectoryExists
    - File::SetTimes
    - File::IsValid
    linkageType: ''
    returnType: bool
    signature: "bool TouchFile(const FilePath& path,\n               const Time& last_accessed,\n
      \              const Time& last_modified)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/src/butil/file_util.cc:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 229
    functionName: butil::CloseFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 9
    functionsReached:
    - fclose
    linkageType: ''
    returnType: bool
    signature: bool CloseFile(FILE* file)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ftell
      Src: /src/brpc/src/butil/file_util.cc:234,1
    - Dst: _fileno
      Src: /src/brpc/src/butil/file_util.cc:238,1
    - Dst: _chsize
      Src: /src/brpc/src/butil/file_util.cc:239,1
    - Dst: fileno
      Src: /src/brpc/src/butil/file_util.cc:242,1
    - Dst: ftruncate
      Src: /src/brpc/src/butil/file_util.cc:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 247
    functionName: butil::TruncateFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 0
    functionsReached:
    - _chsize
    - ftruncate
    - fileno
    - _fileno
    - ftell
    linkageType: ''
    returnType: bool
    signature: bool TruncateFile(FILE* file)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util.cc:251,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:252,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:253,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util.cc:253,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:253,1
    - Dst: InsertBeforeExtensionASCII
      Src: /src/brpc/src/butil/file_util.cc:259,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/file_util.cc:259,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:260,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:261,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util.cc:261,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util.cc:261,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - ' path'
    - ' suffix'
    argTypes:
    - FilePath
    - FilePath::StringType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 267
    functionName: butil::GetUniquePathNumber
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 0
    functionsReached:
    - butil::value
    - butil::empty
    - FilePath::value
    - InsertBeforeExtensionASCII
    - butil::PathExists
    - butil::FilePath
    - butil::StringPrintf
    linkageType: ''
    returnType: int
    signature: "int GetUniquePathNumber(const FilePath& path,\n                        const
      FilePath::StringType& suffix)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util.cc:39,1
    - Dst: FileEnumerator::GetInfo
      Src: /src/brpc/src/butil/file_util.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' root_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: butil::ComputeDirectorySize
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - FileEnumerator::GetInfo
    - FileEnumerator::Next
    linkageType: ''
    returnType: int64_t
    signature: int64_t ComputeDirectorySize(const FilePath& root_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:45,1
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:45,1
    - Dst: butil::internal::MoveUnsafe
      Src: /src/brpc/src/butil/file_util.cc:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: butil::Move
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 20
    functionsReached:
    - butil::internal::MoveUnsafe
    - ReferencesParent
    linkageType: ''
    returnType: bool
    signature: bool Move(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:51,1
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:51,1
    - Dst: butil::internal::CopyFileUnsafe
      Src: /src/brpc/src/butil/file_util.cc:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: butil::CopyFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 8
    functionsReached:
    - ReferencesParent
    - butil::internal::CopyFileUnsafe
    linkageType: ''
    returnType: bool
    signature: bool CopyFile(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:60,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:62,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:67,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:67,1
    - Dst: std::ifstream::read
      Src: /src/brpc/src/butil/file_util.cc:73,1
    - Dst: std::ifstream::read
      Src: /src/brpc/src/butil/file_util.cc:74,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:76,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:76,1
    - Dst: std::ifstream::gcount
      Src: /src/brpc/src/butil/file_util.cc:77,1
    - Dst: std::ifstream::gcount
      Src: /src/brpc/src/butil/file_util.cc:77,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/file_util.cc:78,1
    - Dst: std::ifstream::gcount
      Src: /src/brpc/src/butil/file_util.cc:78,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:79,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:80,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:83,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:83,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:85,1
    - Dst: std::ifstream::close
      Src: /src/brpc/src/butil/file_util.cc:86,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 2
    argNames:
    - ' filename1'
    - ' filename2'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 88
    functionName: butil::ContentsEqual
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - memcmp
    - butil::value
    - std::ifstream::gcount
    - std::ifstream::close
    - std::ifstream::read
    - std::ifstream::is_open
    - std::ifstream::eof
    linkageType: ''
    returnType: bool
    signature: bool ContentsEqual(const FilePath& filename1, const FilePath& filename2)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:91,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:92,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:96,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/src/butil/file_util.cc:96,1
    - Dst: getline
      Src: /src/brpc/src/butil/file_util.cc:101,1
    - Dst: getline
      Src: /src/brpc/src/butil/file_util.cc:102,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:105,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:105,1
    - Dst: std::ifstream::bad
      Src: /src/brpc/src/butil/file_util.cc:106,1
    - Dst: std::ifstream::bad
      Src: /src/brpc/src/butil/file_util.cc:106,1
    - Dst: std::string::find_last_not_of
      Src: /src/brpc/src/butil/file_util.cc:111,1
    - Dst: std::string::clear
      Src: /src/brpc/src/butil/file_util.cc:113,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/file_util.cc:114,1
    - Dst: std::string::erase
      Src: /src/brpc/src/butil/file_util.cc:115,1
    - Dst: find_last_not_of
      Src: /src/brpc/src/butil/file_util.cc:117,1
    - Dst: butil::clear
      Src: /src/brpc/src/butil/file_util.cc:119,1
    - Dst: butil::length
      Src: /src/brpc/src/butil/file_util.cc:120,1
    - Dst: erase
      Src: /src/brpc/src/butil/file_util.cc:121,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:125,1
    - Dst: std::ifstream::eof
      Src: /src/brpc/src/butil/file_util.cc:125,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 2
    argNames:
    - ' filename1'
    - ' filename2'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 128
    functionName: butil::TextContentsEqual
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - butil::value
    - find_last_not_of
    - std::ifstream::bad
    - std::string::find_last_not_of
    - std::string::clear
    - butil::clear
    - erase
    - std::string::erase
    - std::string::length
    - getline
    - butil::length
    - std::ifstream::is_open
    - std::ifstream::eof
    linkageType: ''
    returnType: bool
    signature: bool TextContentsEqual(const FilePath& filename1, const FilePath& filename2)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/butil/file_util.cc:134,1
    - Dst: ReferencesParent
      Src: /src/brpc/src/butil/file_util.cc:135,1
    - Dst: butil::OpenFile
      Src: /src/brpc/src/butil/file_util.cc:137,1
    - Dst: fread
      Src: /src/brpc/src/butil/file_util.cc:149,1
    - Dst: std::string*::append
      Src: /src/brpc/src/butil/file_util.cc:151,1
    - Dst: std::min
      Src: /src/brpc/src/butil/file_util.cc:151,1
    - Dst: ferror
      Src: /src/brpc/src/butil/file_util.cc:160,1
    - Dst: butil::CloseFile
      Src: /src/brpc/src/butil/file_util.cc:161,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 3
    argNames:
    - ' path'
    - contents
    - max_size
    argTypes:
    - FilePath
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 164
    functionName: butil::ReadFileToString
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 7
    functionsReached:
    - std::string*::clear
    - ferror
    - fread
    - std::min
    - butil::OpenFile
    - ReferencesParent
    - std::string*::append
    - butil::CloseFile
    linkageType: ''
    returnType: bool
    signature: "bool ReadFileToString(const FilePath& path,\n                      std::string*
      contents,\n                      size_t max_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/butil/file_util.cc:167,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/file_util.cc:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' path'
    - contents
    argTypes:
    - FilePath
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: butil::ReadFileToString
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 8
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::ReadFileToString
    linkageType: ''
    returnType: bool
    signature: bool ReadFileToString(const FilePath& path, std::string* contents)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util.cc:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' dir_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 176
    functionName: butil::IsDirectoryEmpty
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - FileEnumerator::Next
    linkageType: ''
    returnType: bool
    signature: bool IsDirectoryEmpty(const FilePath& dir_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util.cc:180,1
    - Dst: butil::CreateAndOpenTemporaryFileInDir
      Src: /src/brpc/src/butil/file_util.cc:183,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - path
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 184
    functionName: butil::CreateAndOpenTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - butil::GetTempDir
    - butil::CreateAndOpenTemporaryFileInDir
    linkageType: ''
    returnType: FILE
    signature: FILE * CreateAndOpenTemporaryFile(FilePath* path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/file_util.cc:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: butil::CreateDirectory
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 120
    functionsReached:
    - butil::CreateDirectoryAndGetError
    linkageType: ''
    returnType: bool
    signature: bool CreateDirectory(const FilePath& full_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/file_util.cc:191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_path'
    - create_parent
    argTypes:
    - FilePath
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    functionName: butil::CreateDirectory
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 120
    functionsReached:
    - butil::CreateDirectoryAndGetError
    linkageType: ''
    returnType: bool
    signature: bool CreateDirectory(const FilePath& full_path, bool create_parent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/file_util.cc:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' full_path'
    - error
    argTypes:
    - FilePath
    - File::Error*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 197
    functionName: butil::CreateDirectoryAndGetError
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 26
    functionsReached:
    - butil::CreateDirectoryAndGetError
    linkageType: ''
    returnType: bool
    signature: "bool CreateDirectoryAndGetError(const FilePath& full_path,\n                                File::Error*
      error)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetFileInfo
      Src: /src/brpc/src/butil/file_util.cc:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' file_path'
    - file_size
    argTypes:
    - FilePath
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 205
    functionName: butil::GetFileSize
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 12
    functionsReached:
    - butil::GetFileInfo
    linkageType: ''
    returnType: bool
    signature: bool GetFileSize(const FilePath& file_path, int64_t* file_size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util.cc:214,1
    - Dst: File::IsValid
      Src: /src/brpc/src/butil/file_util.cc:219,1
    - Dst: File::SetTimes
      Src: /src/brpc/src/butil/file_util.cc:222,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ' path'
    - ' last_accessed'
    - ' last_modified'
    argTypes:
    - FilePath
    - Time
    - Time
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 223
    functionName: butil::TouchFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 4
    functionsReached:
    - butil::DirectoryExists
    - File::SetTimes
    - File::IsValid
    linkageType: ''
    returnType: bool
    signature: "bool TouchFile(const FilePath& path,\n               const Time& last_accessed,\n
      \              const Time& last_modified)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/src/butil/file_util.cc:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 229
    functionName: butil::CloseFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 10
    functionsReached:
    - fclose
    linkageType: ''
    returnType: bool
    signature: bool CloseFile(FILE* file)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ftell
      Src: /src/brpc/src/butil/file_util.cc:234,1
    - Dst: _fileno
      Src: /src/brpc/src/butil/file_util.cc:238,1
    - Dst: _chsize
      Src: /src/brpc/src/butil/file_util.cc:239,1
    - Dst: fileno
      Src: /src/brpc/src/butil/file_util.cc:242,1
    - Dst: ftruncate
      Src: /src/brpc/src/butil/file_util.cc:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 247
    functionName: butil::TruncateFile
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 0
    functionsReached:
    - _chsize
    - ftruncate
    - fileno
    - _fileno
    - ftell
    linkageType: ''
    returnType: bool
    signature: bool TruncateFile(FILE* file)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util.cc:251,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:252,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:253,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util.cc:253,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util.cc:253,1
    - Dst: InsertBeforeExtensionASCII
      Src: /src/brpc/src/butil/file_util.cc:259,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/file_util.cc:259,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:260,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util.cc:261,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util.cc:261,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util.cc:261,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - ' path'
    - ' suffix'
    argTypes:
    - FilePath
    - FilePath::StringType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 267
    functionName: butil::GetUniquePathNumber
    functionSourceFile: /src/brpc/src/butil/file_util.cc
    functionUses: 0
    functionsReached:
    - butil::value
    - butil::empty
    - FilePath::value
    - InsertBeforeExtensionASCII
    - butil::PathExists
    - butil::FilePath
    - butil::StringPrintf
    linkageType: ''
    returnType: int
    signature: "int GetUniquePathNumber(const FilePath& path,\n                        const
      FilePath::StringType& suffix)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/at_exit.cc:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 29
    functionName: butil::AtExitManager::AtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 1
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AtExitManager::AtExitManager()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/at_exit.cc:33,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/at_exit.cc:36,1
    - Dst: ProcessCallbacksNow
      Src: /src/brpc/src/butil/at_exit.cc:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: AtExitManager::~AtExitManager()
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 0
    functionsReached:
    - ProcessCallbacksNow
    - DCHECK_EQ
    - NOTREACHED
    linkageType: ''
    returnType: void
    signature: void AtExitManager::~AtExitManager()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/at_exit.cc:44,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/at_exit.cc:46,1
    - Dst: stack_::push
      Src: /src/brpc/src/butil/at_exit.cc:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - func
    - param
    argTypes:
    - AtExitCallbackType
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: butil::AtExitManager::RegisterCallback
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 7
    functionsReached:
    - NOTREACHED
    - DCHECK
    - stack_::push
    linkageType: ''
    returnType: void
    signature: void AtExitManager::RegisterCallback(AtExitCallbackType func, void*
      param)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/at_exit.cc:57,1
    - Dst: stack_::empty
      Src: /src/brpc/src/butil/at_exit.cc:63,1
    - Dst: stack_::top
      Src: /src/brpc/src/butil/at_exit.cc:64,1
    - Dst: Callback::func
      Src: /src/brpc/src/butil/at_exit.cc:65,1
    - Dst: stack_::pop
      Src: /src/brpc/src/butil/at_exit.cc:66,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 68
    functionName: butil::AtExitManager::ProcessCallbacksNow
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 3
    functionsReached:
    - stack_::empty
    - NOTREACHED
    - Callback::func
    - stack_::pop
    - stack_::top
    linkageType: ''
    returnType: void
    signature: void AtExitManager::ProcessCallbacksNow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/at_exit.cc:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - shadow
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::AtExitManager::AtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 1
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AtExitManager::AtExitManager(bool shadow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/at_exit.cc:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 29
    functionName: butil::AtExitManager::AtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 1
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AtExitManager::AtExitManager()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/at_exit.cc:33,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/at_exit.cc:36,1
    - Dst: ProcessCallbacksNow
      Src: /src/brpc/src/butil/at_exit.cc:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: AtExitManager::~AtExitManager()
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 0
    functionsReached:
    - ProcessCallbacksNow
    - DCHECK_EQ
    - NOTREACHED
    linkageType: ''
    returnType: void
    signature: void AtExitManager::~AtExitManager()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/at_exit.cc:44,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/at_exit.cc:46,1
    - Dst: stack_::push
      Src: /src/brpc/src/butil/at_exit.cc:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - func
    - param
    argTypes:
    - AtExitCallbackType
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: butil::AtExitManager::RegisterCallback
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 7
    functionsReached:
    - NOTREACHED
    - DCHECK
    - stack_::push
    linkageType: ''
    returnType: void
    signature: void AtExitManager::RegisterCallback(AtExitCallbackType func, void*
      param)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/at_exit.cc:57,1
    - Dst: stack_::empty
      Src: /src/brpc/src/butil/at_exit.cc:63,1
    - Dst: stack_::top
      Src: /src/brpc/src/butil/at_exit.cc:64,1
    - Dst: Callback::func
      Src: /src/brpc/src/butil/at_exit.cc:65,1
    - Dst: stack_::pop
      Src: /src/brpc/src/butil/at_exit.cc:66,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 68
    functionName: butil::AtExitManager::ProcessCallbacksNow
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 3
    functionsReached:
    - stack_::empty
    - NOTREACHED
    - Callback::func
    - stack_::pop
    - stack_::top
    linkageType: ''
    returnType: void
    signature: void AtExitManager::ProcessCallbacksNow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/at_exit.cc:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - shadow
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::AtExitManager::AtExitManager
    functionSourceFile: /src/brpc/src/butil/at_exit.cc
    functionUses: 1
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AtExitManager::AtExitManager(bool shadow)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: butil::CancelableCallback<void(void)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:67,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:67,1
    - Dst: butil::CancelableCallback<void(void)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::CancelableCallback<void(void)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - butil::CancelableCallback<void(void)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void CancelableCallback(const butil::Callback<void(void)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: ~CancelableCallback()
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvalidateWeakPtrs
      Src: /src/brpc/src/butil/cancelable_callback.h:75,1
    - Dst: butil::CancelableCallback<void(void)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:76,1
    - Dst: butil::CancelableCallback<void(void)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: butil::CancelableCallback<void(void)>::Cancel
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - InvalidateWeakPtrs
    - butil::CancelableCallback<void(void)>::Reset
    linkageType: ''
    returnType: void
    signature: void Cancel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: butil::CancelableCallback<void(void)>::IsCancelled
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - is_null
    linkageType: ''
    returnType: bool
    signature: bool IsCancelled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:88,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:88,1
    - Dst: butil::CancelableCallback<void(void)>::Cancel
      Src: /src/brpc/src/butil/cancelable_callback.h:91,1
    - Dst: butil::CancelableCallback<void(void)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 97
    functionName: butil::CancelableCallback<void(void)>::Reset
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 1
    functionsReached:
    - butil::CancelableCallback<void(void)>::Cancel
    - butil::CancelableCallback<void(void)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void Reset(const butil::Callback<void(void)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: '& callback() const'
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Callback<void(void)>
    signature: butil::Callback<void(void)> & callback() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/butil/cancelable_callback.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 107
    functionName: butil::CancelableCallback<void(void)>::Forward
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void Forward()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/src/butil/cancelable_callback.h:112,1
    - Dst: GetWeakPtr
      Src: /src/brpc/src/butil/cancelable_callback.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 114
    functionName: butil::CancelableCallback<void(void)>::InitializeForwarder
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 2
    functionsReached:
    - GetWeakPtr
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void InitializeForwarder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: butil::CancelableCallback<void(A1)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:137,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:137,1
    - Dst: butil::CancelableCallback<void(A1)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: butil::CancelableCallback<void(A1)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - DCHECK
    - is_null
    - butil::CancelableCallback<void(A1)>::InitializeForwarder
    linkageType: ''
    returnType: void
    signature: void CancelableCallback(const butil::Callback<void(A1)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: ~CancelableCallback()
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvalidateWeakPtrs
      Src: /src/brpc/src/butil/cancelable_callback.h:145,1
    - Dst: butil::CancelableCallback<void(A1)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:146,1
    - Dst: butil::CancelableCallback<void(A1)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: butil::CancelableCallback<void(A1)>::Cancel
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - InvalidateWeakPtrs
    - butil::CancelableCallback<void(A1)>::Reset
    linkageType: ''
    returnType: void
    signature: void Cancel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: butil::CancelableCallback<void(A1)>::IsCancelled
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - is_null
    linkageType: ''
    returnType: bool
    signature: bool IsCancelled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:158,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:158,1
    - Dst: butil::CancelableCallback<void(A1)>::Cancel
      Src: /src/brpc/src/butil/cancelable_callback.h:161,1
    - Dst: butil::CancelableCallback<void(A1)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 167
    functionName: butil::CancelableCallback<void(A1)>::Reset
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 1
    functionsReached:
    - butil::CancelableCallback<void(A1)>::InitializeForwarder
    - DCHECK
    - is_null
    - butil::CancelableCallback<void(A1)>::Cancel
    linkageType: ''
    returnType: void
    signature: void Reset(const butil::Callback<void(A1)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 172
    functionName: '& callback() const'
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Callback<void(A1)>
    signature: butil::Callback<void(A1)> & callback() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/butil/cancelable_callback.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - a1
    argTypes:
    - A1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: butil::CancelableCallback<void(A1)>::Forward
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void Forward(A1 a1) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/src/butil/cancelable_callback.h:182,1
    - Dst: GetWeakPtr
      Src: /src/brpc/src/butil/cancelable_callback.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 184
    functionName: butil::CancelableCallback<void(A1)>::InitializeForwarder
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 2
    functionsReached:
    - GetWeakPtr
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void InitializeForwarder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: butil::CancelableCallback<void(A1, A2)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:207,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:207,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1, A2)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 209
    functionName: butil::CancelableCallback<void(A1, A2)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void CancelableCallback(const butil::Callback<void(A1, A2)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 211
    functionName: ~CancelableCallback()
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvalidateWeakPtrs
      Src: /src/brpc/src/butil/cancelable_callback.h:215,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:216,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 218
    functionName: butil::CancelableCallback<void(A1, A2)>::Cancel
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - InvalidateWeakPtrs
    - butil::CancelableCallback<void(A1, A2)>::Reset
    linkageType: ''
    returnType: void
    signature: void Cancel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: butil::CancelableCallback<void(A1, A2)>::IsCancelled
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - is_null
    linkageType: ''
    returnType: bool
    signature: bool IsCancelled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:228,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:228,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::Cancel
      Src: /src/brpc/src/butil/cancelable_callback.h:231,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1, A2)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 237
    functionName: butil::CancelableCallback<void(A1, A2)>::Reset
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 1
    functionsReached:
    - butil::CancelableCallback<void(A1, A2)>::Cancel
    - butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void Reset(const butil::Callback<void(A1, A2)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 242
    functionName: '& callback() const'
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Callback<void(A1, A2)>
    signature: butil::Callback<void(A1, A2)> & callback() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/butil/cancelable_callback.h:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - A1
    - A2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: butil::CancelableCallback<void(A1, A2)>::Forward
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void Forward(A1 a1, A2 a2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/src/butil/cancelable_callback.h:252,1
    - Dst: GetWeakPtr
      Src: /src/brpc/src/butil/cancelable_callback.h:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 2
    functionsReached:
    - GetWeakPtr
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void InitializeForwarder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: butil::CancelableCallback<void(void)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:67,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:67,1
    - Dst: butil::CancelableCallback<void(void)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::CancelableCallback<void(void)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - butil::CancelableCallback<void(void)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void CancelableCallback(const butil::Callback<void(void)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: ~CancelableCallback()
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvalidateWeakPtrs
      Src: /src/brpc/src/butil/cancelable_callback.h:75,1
    - Dst: butil::CancelableCallback<void(void)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:76,1
    - Dst: butil::CancelableCallback<void(void)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: butil::CancelableCallback<void(void)>::Cancel
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 1
    functionsReached:
    - InvalidateWeakPtrs
    - butil::CancelableCallback<void(void)>::Reset
    linkageType: ''
    returnType: void
    signature: void Cancel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: butil::CancelableCallback<void(void)>::IsCancelled
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - is_null
    linkageType: ''
    returnType: bool
    signature: bool IsCancelled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:88,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:88,1
    - Dst: butil::CancelableCallback<void(void)>::Cancel
      Src: /src/brpc/src/butil/cancelable_callback.h:91,1
    - Dst: butil::CancelableCallback<void(void)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(void)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 97
    functionName: butil::CancelableCallback<void(void)>::Reset
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 2
    functionsReached:
    - butil::CancelableCallback<void(void)>::Cancel
    - butil::CancelableCallback<void(void)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void Reset(const butil::Callback<void(void)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: '& callback() const'
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Callback<void(void)>
    signature: butil::Callback<void(void)> & callback() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/butil/cancelable_callback.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 107
    functionName: butil::CancelableCallback<void(void)>::Forward
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void Forward()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/src/butil/cancelable_callback.h:112,1
    - Dst: GetWeakPtr
      Src: /src/brpc/src/butil/cancelable_callback.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 114
    functionName: butil::CancelableCallback<void(void)>::InitializeForwarder
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 4
    functionsReached:
    - GetWeakPtr
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void InitializeForwarder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: butil::CancelableCallback<void(A1)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:137,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:137,1
    - Dst: butil::CancelableCallback<void(A1)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: butil::CancelableCallback<void(A1)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - DCHECK
    - is_null
    - butil::CancelableCallback<void(A1)>::InitializeForwarder
    linkageType: ''
    returnType: void
    signature: void CancelableCallback(const butil::Callback<void(A1)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: ~CancelableCallback()
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvalidateWeakPtrs
      Src: /src/brpc/src/butil/cancelable_callback.h:145,1
    - Dst: butil::CancelableCallback<void(A1)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:146,1
    - Dst: butil::CancelableCallback<void(A1)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: butil::CancelableCallback<void(A1)>::Cancel
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 1
    functionsReached:
    - InvalidateWeakPtrs
    - butil::CancelableCallback<void(A1)>::Reset
    linkageType: ''
    returnType: void
    signature: void Cancel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: butil::CancelableCallback<void(A1)>::IsCancelled
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - is_null
    linkageType: ''
    returnType: bool
    signature: bool IsCancelled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:158,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:158,1
    - Dst: butil::CancelableCallback<void(A1)>::Cancel
      Src: /src/brpc/src/butil/cancelable_callback.h:161,1
    - Dst: butil::CancelableCallback<void(A1)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 167
    functionName: butil::CancelableCallback<void(A1)>::Reset
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 2
    functionsReached:
    - butil::CancelableCallback<void(A1)>::InitializeForwarder
    - DCHECK
    - is_null
    - butil::CancelableCallback<void(A1)>::Cancel
    linkageType: ''
    returnType: void
    signature: void Reset(const butil::Callback<void(A1)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 172
    functionName: '& callback() const'
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Callback<void(A1)>
    signature: butil::Callback<void(A1)> & callback() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/butil/cancelable_callback.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - a1
    argTypes:
    - A1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: butil::CancelableCallback<void(A1)>::Forward
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void Forward(A1 a1) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/src/butil/cancelable_callback.h:182,1
    - Dst: GetWeakPtr
      Src: /src/brpc/src/butil/cancelable_callback.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 184
    functionName: butil::CancelableCallback<void(A1)>::InitializeForwarder
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 4
    functionsReached:
    - GetWeakPtr
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void InitializeForwarder()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: butil::CancelableCallback<void(A1, A2)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:207,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:207,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1, A2)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 209
    functionName: butil::CancelableCallback<void(A1, A2)>::CancelableCallback
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void CancelableCallback(const butil::Callback<void(A1, A2)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 211
    functionName: ~CancelableCallback()
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CancelableCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvalidateWeakPtrs
      Src: /src/brpc/src/butil/cancelable_callback.h:215,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:216,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::Reset
      Src: /src/brpc/src/butil/cancelable_callback.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 218
    functionName: butil::CancelableCallback<void(A1, A2)>::Cancel
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 1
    functionsReached:
    - InvalidateWeakPtrs
    - butil::CancelableCallback<void(A1, A2)>::Reset
    linkageType: ''
    returnType: void
    signature: void Cancel()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: butil::CancelableCallback<void(A1, A2)>::IsCancelled
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - is_null
    linkageType: ''
    returnType: bool
    signature: bool IsCancelled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cancelable_callback.h:228,1
    - Dst: is_null
      Src: /src/brpc/src/butil/cancelable_callback.h:228,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::Cancel
      Src: /src/brpc/src/butil/cancelable_callback.h:231,1
    - Dst: butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
      Src: /src/brpc/src/butil/cancelable_callback.h:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - butil::Callback<void(A1, A2)>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 237
    functionName: butil::CancelableCallback<void(A1, A2)>::Reset
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 2
    functionsReached:
    - butil::CancelableCallback<void(A1, A2)>::Cancel
    - butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
    - DCHECK
    - is_null
    linkageType: ''
    returnType: void
    signature: void Reset(const butil::Callback<void(A1, A2)>& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 242
    functionName: '& callback() const'
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::Callback<void(A1, A2)>
    signature: butil::Callback<void(A1, A2)> & callback() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/butil/cancelable_callback.h:246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - A1
    - A2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: butil::CancelableCallback<void(A1, A2)>::Forward
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void Forward(A1 a1, A2 a2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Bind
      Src: /src/brpc/src/butil/cancelable_callback.h:252,1
    - Dst: GetWeakPtr
      Src: /src/brpc/src/butil/cancelable_callback.h:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 254
    functionName: butil::CancelableCallback<void(A1, A2)>::InitializeForwarder
    functionSourceFile: /src/brpc/src/butil/cancelable_callback.h
    functionUses: 4
    functionsReached:
    - GetWeakPtr
    - butil::Bind
    linkageType: ''
    returnType: void
    signature: void InitializeForwarder()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/thread_local_inl.h:31,1
    - Dst: T::T
      Src: /src/brpc/src/butil/thread_local_inl.h:34,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_local_inl.h:36,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 39
    functionName: butil::detail::ThreadLocalHelper::get
    functionSourceFile: /src/brpc/src/butil/thread_local_inl.h
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - butil::thread_atexit
    - T::T
    linkageType: ''
    returnType: T
    signature: T * get()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/thread_local_inl.h:31,1
    - Dst: T::T
      Src: /src/brpc/src/butil/thread_local_inl.h:34,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_local_inl.h:36,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 39
    functionName: butil::detail::ThreadLocalHelper::get
    functionSourceFile: /src/brpc/src/butil/thread_local_inl.h
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - butil::thread_atexit
    - T::T
    linkageType: ''
    returnType: T
    signature: T * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/thread_local_inl.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: butil::get_thread_local
    functionSourceFile: /src/brpc/src/butil/thread_local_inl.h
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: T
    signature: T * get_thread_local()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/thread_local_inl.h:31,1
    - Dst: T::T
      Src: /src/brpc/src/butil/thread_local_inl.h:34,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_local_inl.h:36,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 39
    functionName: butil::detail::ThreadLocalHelper::get
    functionSourceFile: /src/brpc/src/butil/thread_local_inl.h
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - butil::thread_atexit
    - T::T
    linkageType: ''
    returnType: T
    signature: T * get()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/thread_local_inl.h:31,1
    - Dst: T::T
      Src: /src/brpc/src/butil/thread_local_inl.h:34,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_local_inl.h:36,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 30
    functionDepth: 2
    functionLinenumber: 30
    functionLinenumberEnd: 39
    functionName: butil::detail::ThreadLocalHelper::get
    functionSourceFile: /src/brpc/src/butil/thread_local_inl.h
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - butil::thread_atexit
    - T::T
    linkageType: ''
    returnType: T
    signature: T * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/thread_local_inl.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: butil::get_thread_local
    functionSourceFile: /src/brpc/src/butil/thread_local_inl.h
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: T
    signature: T * get_thread_local()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: ATOMICOPS_COMPILER_BARRIER
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMICOPS_COMPILER_BARRIER()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 49
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 82
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 32
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 118
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 157
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 170
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 179
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 200
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 217
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 227
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 233
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 49
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 82
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 36
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 118
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 157
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 170
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 179
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 200
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 217
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 227
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 233
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 23
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 49
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 82
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 40
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 118
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 25
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 157
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 170
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 179
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 200
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 217
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 227
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 233
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 40
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 49
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 82
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 44
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 118
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 29
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 147
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 157
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 170
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 179
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 200
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 9
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ATOMICOPS_COMPILER_BARRIER
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 212
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 11
    functionsReached:
    - ATOMICOPS_COMPILER_BARRIER
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 217
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 227
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.h:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 233
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - scoped_variable
    - new_value
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: butil::AutoReset::AutoReset
    functionSourceFile: /src/brpc/src/butil/auto_reset.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoReset(T* scoped_variable, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ~AutoReset()
    functionSourceFile: /src/brpc/src/butil/auto_reset.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AutoReset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - scoped_variable
    - new_value
    argTypes:
    - T*
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: butil::AutoReset::AutoReset
    functionSourceFile: /src/brpc/src/butil/auto_reset.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AutoReset(T* scoped_variable, T new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: ~AutoReset()
    functionSourceFile: /src/brpc/src/butil/auto_reset.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AutoReset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - flag
    - ','
    - validate_fn
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 43
    functionName: BUTIL_VALIDATE_GFLAG
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_VALIDATE_GFLAG(flag, validate_fn)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: butil::PassValidate
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, T)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: butil::PositiveInteger
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: butil::NonNegativeInteger
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NonNegativeInteger(const char*, T v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::GFLAGS_NAMESPACE::RegisterFlagValidator
      Src: /src/brpc/src/butil/reloadable_flags.h:67,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/butil/reloadable_flags.h:72,1
    - Dst: write
      Src: /src/brpc/src/butil/reloadable_flags.h:72,1
    - Dst: _exit
      Src: /src/brpc/src/butil/reloadable_flags.h:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - flag
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 74
    functionName: butil::RegisterFlagValidatorOrDieImpl
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 10
    functionsReached:
    - butil::ignore_result
    - _exit
    - write
    - ::GFLAGS_NAMESPACE::RegisterFlagValidator
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDieImpl(\n    const T* flag, bool (*validate_fn)(const
      char*, T val))"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: butil::PassValidate
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PassValidate(const char*, T)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: butil::PositiveInteger
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool PositiveInteger(const char*, T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 60
    functionName: butil::NonNegativeInteger
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NonNegativeInteger(const char*, T v)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::GFLAGS_NAMESPACE::RegisterFlagValidator
      Src: /src/brpc/src/butil/reloadable_flags.h:67,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/butil/reloadable_flags.h:72,1
    - Dst: write
      Src: /src/brpc/src/butil/reloadable_flags.h:72,1
    - Dst: _exit
      Src: /src/brpc/src/butil/reloadable_flags.h:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - flag
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 74
    functionName: butil::RegisterFlagValidatorOrDieImpl
    functionSourceFile: /src/brpc/src/butil/reloadable_flags.h
    functionUses: 10
    functionsReached:
    - butil::ignore_result
    - _exit
    - write
    - ::GFLAGS_NAMESPACE::RegisterFlagValidator
    linkageType: ''
    returnType: bool
    signature: "bool RegisterFlagValidatorOrDieImpl(\n    const T* flag, bool (*validate_fn)(const
      char*, T val))"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/src/butil/version.cc:28,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/butil/version.cc:29,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/version.cc:32,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/version.cc:33,1
    - Dst: butil::StringToInt
      Src: /src/brpc/src/butil/version.cc:35,1
    - Dst: butil::IntToString
      Src: /src/brpc/src/butil/version.cc:46,1
    - Dst: std::vector<uint16_t>*::push_back
      Src: /src/brpc/src/butil/version.cc:49,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/src/butil/version.cc:49,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 2
    argNames:
    - ' version_str'
    - parsed
    argTypes:
    - std::string
    - std::vector<uint16_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 52
    functionName: butil::ParseVersionNumbers
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - std::vector::end
    - std::vector::begin
    - std::vector::empty
    - butil::SplitString
    - std::vector<uint16_t>*::push_back
    - butil::StringToInt
    - static_cast<uint16_t>
    linkageType: ''
    returnType: bool
    signature: "bool ParseVersionNumbers(const std::string& version_str,\n                         std::vector<uint16_t>*
      parsed)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:67,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:72,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ' components1'
    - ' components2'
    argTypes:
    - std::vector<uint16_t>
    - std::vector<uint16_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 78
    functionName: butil::CompareVersionComponents
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - size
    - std::min
    linkageType: ''
    returnType: int
    signature: "int CompareVersionComponents(const std::vector<uint16_t>& components1,\n
      \                            const std::vector<uint16_t>& components2)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/src/butil/version.cc:28,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/butil/version.cc:29,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/version.cc:32,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/version.cc:33,1
    - Dst: butil::StringToInt
      Src: /src/brpc/src/butil/version.cc:35,1
    - Dst: butil::IntToString
      Src: /src/brpc/src/butil/version.cc:46,1
    - Dst: std::vector<uint16_t>*::push_back
      Src: /src/brpc/src/butil/version.cc:49,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/src/butil/version.cc:49,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 2
    argNames:
    - ' version_str'
    - parsed
    argTypes:
    - std::string
    - std::vector<uint16_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 52
    functionName: butil::ParseVersionNumbers
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - std::vector::end
    - std::vector::begin
    - std::vector::empty
    - butil::SplitString
    - std::vector<uint16_t>*::push_back
    - butil::StringToInt
    - static_cast<uint16_t>
    linkageType: ''
    returnType: bool
    signature: "bool ParseVersionNumbers(const std::string& version_str,\n                         std::vector<uint16_t>*
      parsed)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:67,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:72,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ' components1'
    - ' components2'
    argTypes:
    - std::vector<uint16_t>
    - std::vector<uint16_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 78
    functionName: butil::CompareVersionComponents
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - size
    - std::min
    linkageType: ''
    returnType: int
    signature: "int CompareVersionComponents(const std::vector<uint16_t>& components1,\n
      \                            const std::vector<uint16_t>& components2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 83
    functionName: butil::Version::Version
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Version::Version()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 86
    functionName: Version::~Version()
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Version::~Version()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ParseVersionNumbers
      Src: /src/brpc/src/butil/version.cc:90,1
    - Dst: swap
      Src: /src/brpc/src/butil/version.cc:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' version_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 94
    functionName: butil::Version::Version
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - ParseVersionNumbers
    - swap
    linkageType: ''
    returnType: void
    signature: void Version::Version(const std::string& version_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/version.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: butil::Version::IsValid
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool Version::IsValid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EndsWith
      Src: /src/brpc/src/butil/version.cc:103,1
    - Dst: c_str
      Src: /src/brpc/src/butil/version.cc:103,1
    - Dst: substr
      Src: /src/brpc/src/butil/version.cc:104,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:104,1
    - Dst: Version::IsValid
      Src: /src/brpc/src/butil/version.cc:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' wildcard_string'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: butil::Version::IsValidWildcardString
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 2
    functionsReached:
    - Version::IsValid
    - substr
    - c_str
    - size
    - EndsWith
    linkageType: ''
    returnType: bool
    signature: bool Version::IsValidWildcardString(const std::string& wildcard_string)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Version::IsValid
      Src: /src/brpc/src/butil/version.cc:112,1
    - Dst: butil::Version::CompareTo
      Src: /src/brpc/src/butil/version.cc:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' version_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 115
    functionName: butil::Version::IsOlderThan
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::Version::CompareTo
    - Version::IsValid
    linkageType: ''
    returnType: bool
    signature: bool Version::IsOlderThan(const std::string& version_str) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:118,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:118,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:119,1
    - Dst: butil::Version::IsValidWildcardString
      Src: /src/brpc/src/butil/version.cc:119,1
    - Dst: EndsWith
      Src: /src/brpc/src/butil/version.cc:122,1
    - Dst: c_str
      Src: /src/brpc/src/butil/version.cc:122,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:124,1
    - Dst: Version::IsValid
      Src: /src/brpc/src/butil/version.cc:124,1
    - Dst: butil::Version::CompareTo
      Src: /src/brpc/src/butil/version.cc:125,1
    - Dst: ParseVersionNumbers
      Src: /src/brpc/src/butil/version.cc:129,1
    - Dst: substr
      Src: /src/brpc/src/butil/version.cc:130,1
    - Dst: length
      Src: /src/brpc/src/butil/version.cc:130,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:131,1
    - Dst: CompareVersionComponents
      Src: /src/brpc/src/butil/version.cc:132,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/version.cc:145,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/version.cc:145,1
    - Dst: std::min
      Src: /src/brpc/src/butil/version.cc:146,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:146,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/version.cc:146,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' wildcard_string'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 117
    functionDepth: 2
    functionLinenumber: 117
    functionLinenumberEnd: 152
    functionName: butil::Version::CompareToWildcardString
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::Version::CompareTo
    - ParseVersionNumbers
    - std::min
    - DCHECK
    - Version::IsValid
    - substr
    - DCHECK_GT
    - butil::Version::IsValid
    - CompareVersionComponents
    - c_str
    - butil::Version::IsValidWildcardString
    - length
    - size
    - std::vector::size
    - EndsWith
    linkageType: ''
    returnType: int
    signature: int Version::CompareToWildcardString(const std::string& wildcard_string)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:155,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:155,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:156,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:156,1
    - Dst: butil::Version::CompareTo
      Src: /src/brpc/src/butil/version.cc:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' that'
    argTypes:
    - Version
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 2
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: butil::Version::Equals
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::Version::IsValid
    - DCHECK
    - butil::Version::CompareTo
    linkageType: ''
    returnType: bool
    signature: bool Version::Equals(const Version& that) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:161,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:161,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:162,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:162,1
    - Dst: CompareVersionComponents
      Src: /src/brpc/src/butil/version.cc:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Version
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 160
    functionDepth: 2
    functionLinenumber: 160
    functionLinenumberEnd: 164
    functionName: butil::Version::CompareTo
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 3
    functionsReached:
    - butil::Version::IsValid
    - CompareVersionComponents
    - DCHECK
    linkageType: ''
    returnType: int
    signature: int Version::CompareTo(const Version& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:167,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:167,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:169,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/version.cc:171,1
    - Dst: IntToString
      Src: /src/brpc/src/butil/version.cc:171,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/version.cc:172,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/version.cc:174,1
    - Dst: IntToString
      Src: /src/brpc/src/butil/version.cc:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 166
    functionDepth: 2
    functionLinenumber: 166
    functionLinenumberEnd: 176
    functionName: butil::Version::GetString
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - IntToString
    - DCHECK
    - butil::Version::IsValid
    - std::string::append
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string Version::GetString() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/src/butil/version.cc:28,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/butil/version.cc:29,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/version.cc:32,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/version.cc:33,1
    - Dst: butil::StringToInt
      Src: /src/brpc/src/butil/version.cc:35,1
    - Dst: butil::IntToString
      Src: /src/brpc/src/butil/version.cc:46,1
    - Dst: std::vector<uint16_t>*::push_back
      Src: /src/brpc/src/butil/version.cc:49,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/src/butil/version.cc:49,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 2
    argNames:
    - ' version_str'
    - parsed
    argTypes:
    - std::string
    - std::vector<uint16_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 52
    functionName: butil::ParseVersionNumbers
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - std::vector::end
    - std::vector::begin
    - std::vector::empty
    - butil::SplitString
    - std::vector<uint16_t>*::push_back
    - butil::StringToInt
    - static_cast<uint16_t>
    linkageType: ''
    returnType: bool
    signature: "bool ParseVersionNumbers(const std::string& version_str,\n                         std::vector<uint16_t>*
      parsed)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:67,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:72,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ' components1'
    - ' components2'
    argTypes:
    - std::vector<uint16_t>
    - std::vector<uint16_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 78
    functionName: butil::CompareVersionComponents
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - size
    - std::min
    linkageType: ''
    returnType: int
    signature: "int CompareVersionComponents(const std::vector<uint16_t>& components1,\n
      \                            const std::vector<uint16_t>& components2)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::SplitString
      Src: /src/brpc/src/butil/version.cc:28,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/butil/version.cc:29,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/version.cc:32,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/version.cc:33,1
    - Dst: butil::StringToInt
      Src: /src/brpc/src/butil/version.cc:35,1
    - Dst: butil::IntToString
      Src: /src/brpc/src/butil/version.cc:46,1
    - Dst: std::vector<uint16_t>*::push_back
      Src: /src/brpc/src/butil/version.cc:49,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/src/butil/version.cc:49,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 2
    argNames:
    - ' version_str'
    - parsed
    argTypes:
    - std::string
    - std::vector<uint16_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 52
    functionName: butil::ParseVersionNumbers
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - std::vector::end
    - std::vector::begin
    - std::vector::empty
    - butil::SplitString
    - std::vector<uint16_t>*::push_back
    - butil::StringToInt
    - static_cast<uint16_t>
    linkageType: ''
    returnType: bool
    signature: "bool ParseVersionNumbers(const std::string& version_str,\n                         std::vector<uint16_t>*
      parsed)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:59,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:66,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:67,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:71,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:72,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ' components1'
    - ' components2'
    argTypes:
    - std::vector<uint16_t>
    - std::vector<uint16_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 78
    functionName: butil::CompareVersionComponents
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - size
    - std::min
    linkageType: ''
    returnType: int
    signature: "int CompareVersionComponents(const std::vector<uint16_t>& components1,\n
      \                            const std::vector<uint16_t>& components2)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 83
    functionName: butil::Version::Version
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Version::Version()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 86
    functionName: Version::~Version()
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Version::~Version()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ParseVersionNumbers
      Src: /src/brpc/src/butil/version.cc:90,1
    - Dst: swap
      Src: /src/brpc/src/butil/version.cc:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' version_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 94
    functionName: butil::Version::Version
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - ParseVersionNumbers
    - swap
    linkageType: ''
    returnType: void
    signature: void Version::Version(const std::string& version_str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/version.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: butil::Version::IsValid
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 4
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool Version::IsValid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EndsWith
      Src: /src/brpc/src/butil/version.cc:103,1
    - Dst: c_str
      Src: /src/brpc/src/butil/version.cc:103,1
    - Dst: substr
      Src: /src/brpc/src/butil/version.cc:104,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:104,1
    - Dst: Version::IsValid
      Src: /src/brpc/src/butil/version.cc:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' wildcard_string'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: butil::Version::IsValidWildcardString
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 3
    functionsReached:
    - Version::IsValid
    - substr
    - c_str
    - size
    - EndsWith
    linkageType: ''
    returnType: bool
    signature: bool Version::IsValidWildcardString(const std::string& wildcard_string)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Version::IsValid
      Src: /src/brpc/src/butil/version.cc:112,1
    - Dst: butil::Version::CompareTo
      Src: /src/brpc/src/butil/version.cc:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' version_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 110
    functionDepth: 3
    functionLinenumber: 110
    functionLinenumberEnd: 115
    functionName: butil::Version::IsOlderThan
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::Version::CompareTo
    - Version::IsValid
    linkageType: ''
    returnType: bool
    signature: bool Version::IsOlderThan(const std::string& version_str) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:118,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:118,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:119,1
    - Dst: butil::Version::IsValidWildcardString
      Src: /src/brpc/src/butil/version.cc:119,1
    - Dst: EndsWith
      Src: /src/brpc/src/butil/version.cc:122,1
    - Dst: c_str
      Src: /src/brpc/src/butil/version.cc:122,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:124,1
    - Dst: Version::IsValid
      Src: /src/brpc/src/butil/version.cc:124,1
    - Dst: butil::Version::CompareTo
      Src: /src/brpc/src/butil/version.cc:125,1
    - Dst: ParseVersionNumbers
      Src: /src/brpc/src/butil/version.cc:129,1
    - Dst: substr
      Src: /src/brpc/src/butil/version.cc:130,1
    - Dst: length
      Src: /src/brpc/src/butil/version.cc:130,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:131,1
    - Dst: CompareVersionComponents
      Src: /src/brpc/src/butil/version.cc:132,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/version.cc:145,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/version.cc:145,1
    - Dst: std::min
      Src: /src/brpc/src/butil/version.cc:146,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:146,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/version.cc:146,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - ' wildcard_string'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 117
    functionDepth: 3
    functionLinenumber: 117
    functionLinenumberEnd: 152
    functionName: butil::Version::CompareToWildcardString
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::Version::CompareTo
    - ParseVersionNumbers
    - std::min
    - DCHECK
    - Version::IsValid
    - substr
    - DCHECK_GT
    - butil::Version::IsValid
    - CompareVersionComponents
    - c_str
    - butil::Version::IsValidWildcardString
    - length
    - size
    - std::vector::size
    - EndsWith
    linkageType: ''
    returnType: int
    signature: int Version::CompareToWildcardString(const std::string& wildcard_string)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:155,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:155,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:156,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:156,1
    - Dst: butil::Version::CompareTo
      Src: /src/brpc/src/butil/version.cc:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' that'
    argTypes:
    - Version
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 154
    functionDepth: 3
    functionLinenumber: 154
    functionLinenumberEnd: 158
    functionName: butil::Version::Equals
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - butil::Version::IsValid
    - DCHECK
    - butil::Version::CompareTo
    linkageType: ''
    returnType: bool
    signature: bool Version::Equals(const Version& that) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:161,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:161,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:162,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:162,1
    - Dst: CompareVersionComponents
      Src: /src/brpc/src/butil/version.cc:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Version
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 160
    functionDepth: 2
    functionLinenumber: 160
    functionLinenumberEnd: 164
    functionName: butil::Version::CompareTo
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 6
    functionsReached:
    - butil::Version::IsValid
    - CompareVersionComponents
    - DCHECK
    linkageType: ''
    returnType: int
    signature: int Version::CompareTo(const Version& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/version.cc:167,1
    - Dst: butil::Version::IsValid
      Src: /src/brpc/src/butil/version.cc:167,1
    - Dst: size
      Src: /src/brpc/src/butil/version.cc:169,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/version.cc:171,1
    - Dst: IntToString
      Src: /src/brpc/src/butil/version.cc:171,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/version.cc:172,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/version.cc:174,1
    - Dst: IntToString
      Src: /src/brpc/src/butil/version.cc:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 166
    functionDepth: 2
    functionLinenumber: 166
    functionLinenumberEnd: 176
    functionName: butil::Version::GetString
    functionSourceFile: /src/brpc/src/butil/version.cc
    functionUses: 0
    functionsReached:
    - IntToString
    - DCHECK
    - butil::Version::IsValid
    - std::string::append
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string Version::GetString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::is_blocking
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 7
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: bool
    signature: bool is_blocking(int fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:40,1
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: butil::make_non_blocking
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 34
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: int
    signature: int make_non_blocking(int fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:51,1
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 59
    functionName: butil::make_blocking
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 3
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: int
    signature: int make_blocking(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: butil::make_close_on_exec
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 16
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: int
    signature: int make_close_on_exec(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sockfd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: butil::make_no_delay
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 1
    functionsReached:
    - setsockopt
    linkageType: ''
    returnType: int
    signature: int make_no_delay(int sockfd)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: getsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:74,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/fd_utility.cpp:75,1
    - Dst: getsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:86,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/fd_utility.cpp:87,1
    - Dst: getsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:97,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/fd_utility.cpp:98,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - sockfd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 109
    functionName: butil::is_connected
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 7
    functionsReached:
    - getsockopt
    - PLOG
    linkageType: ''
    returnType: int
    signature: int is_connected(int sockfd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::is_blocking
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 7
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: bool
    signature: bool is_blocking(int fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:40,1
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 48
    functionName: butil::make_non_blocking
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 34
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: int
    signature: int make_non_blocking(int fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:51,1
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 59
    functionName: butil::make_blocking
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 3
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: int
    signature: int make_blocking(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/brpc/src/butil/fd_utility.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: butil::make_close_on_exec
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 16
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: int
    signature: int make_close_on_exec(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sockfd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: butil::make_no_delay
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 1
    functionsReached:
    - setsockopt
    linkageType: ''
    returnType: int
    signature: int make_no_delay(int sockfd)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: getsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:74,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/fd_utility.cpp:75,1
    - Dst: getsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:86,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/fd_utility.cpp:87,1
    - Dst: getsockopt
      Src: /src/brpc/src/butil/fd_utility.cpp:97,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/fd_utility.cpp:98,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - sockfd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 109
    functionName: butil::is_connected
    functionSourceFile: /src/brpc/src/butil/fd_utility.cpp
    functionUses: 7
    functionsReached:
    - getsockopt
    - PLOG
    linkageType: ''
    returnType: int
    signature: int is_connected(int sockfd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:20,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:21,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 27
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:34,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - OSAtomicAdd32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - OSAtomicAdd32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSMemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 48
    functionsReached:
    - OSMemoryBarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:58,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:59,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - OSAtomicCompareAndSwap32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:111,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:125,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:137,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:146,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:147,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 1
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicCompareAndSwap64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 161
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 170
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 175
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 185
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:20,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:21,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 27
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:34,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - OSAtomicAdd32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - OSAtomicAdd32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSMemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 56
    functionsReached:
    - OSMemoryBarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:58,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:59,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 2
    functionsReached:
    - OSAtomicCompareAndSwap32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:111,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:125,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:137,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:146,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:147,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicCompareAndSwap64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 161
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 170
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 175
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 185
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:20,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:21,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 27
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:34,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - OSAtomicAdd32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - OSAtomicAdd32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSMemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 64
    functionsReached:
    - OSMemoryBarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:58,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:59,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 4
    functionsReached:
    - OSAtomicCompareAndSwap32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:111,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:125,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:137,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:146,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:147,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 5
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicCompareAndSwap64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 161
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 170
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 175
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 185
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:20,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:21,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 27
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:34,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - OSAtomicAdd32
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - OSAtomicAdd32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSMemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 72
    functionsReached:
    - OSMemoryBarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap32Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:58,1
    - Dst: const_cast<Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:59,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 6
    functionsReached:
    - OSAtomicCompareAndSwap32Barrier
    - const_cast<Atomic32*>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:111,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 31
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:125,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - OSAtomicCompareAndSwap64
    - reinterpret_cast<volatile int64_t*>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 14
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicAdd64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:137,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicAdd64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSAtomicCompareAndSwap64Barrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:146,1
    - Dst: reinterpret_cast<volatile int64_t*>
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:147,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached:
    - reinterpret_cast<volatile int64_t*>
    - OSAtomicCompareAndSwap64Barrier
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 161
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 170
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 175
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 185
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_mac.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_mac.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 17
    functionName: GG_LONGLONG
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_LONGLONG(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 18
    functionName: GG_ULONGLONG
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_ULONGLONG(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 20
    functionName: GG_LONGLONG
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_LONGLONG(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 21
    functionName: GG_ULONGLONG
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_ULONGLONG(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 27
    functionName: GG_INT64_C
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_INT64_C(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: GG_UINT64_C
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_UINT64_C(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - a
    - ','
    - b
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 37
    functionName: GG_VA_COPY
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_VA_COPY(a, b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - a
    - ','
    - b
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: GG_VA_COPY
    functionSourceFile: /src/brpc/src/butil/port.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GG_VA_COPY(a, b)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/errno.cpp:41,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/errno.cpp:44,1
    - Dst: _exit
      Src: /src/brpc/src/butil/errno.cpp:46,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/errno.cpp:50,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/errno.cpp:51,1
    - Dst: strerror_r
      Src: /src/brpc/src/butil/errno.cpp:56,1
    - Dst: strerror_r
      Src: /src/brpc/src/butil/errno.cpp:59,1
    - Dst: strncmp
      Src: /src/brpc/src/butil/errno.cpp:60,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/errno.cpp:63,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 3
    argNames:
    - error_code
    - error_name
    - description
    argTypes:
    - int
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 69
    functionName: butil::DescribeCustomizedErrno
    functionSourceFile: /src/brpc/src/butil/errno.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    - BAIDU_SCOPED_LOCK
    - _exit
    - fprintf
    - strncmp
    - strerror_r
    linkageType: ''
    returnType: int
    signature: "int DescribeCustomizedErrno(\n    int error_code, const char* error_name,
      const char* description)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/errno.cpp:41,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/errno.cpp:44,1
    - Dst: _exit
      Src: /src/brpc/src/butil/errno.cpp:46,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/errno.cpp:50,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/errno.cpp:51,1
    - Dst: strerror_r
      Src: /src/brpc/src/butil/errno.cpp:56,1
    - Dst: strerror_r
      Src: /src/brpc/src/butil/errno.cpp:59,1
    - Dst: strncmp
      Src: /src/brpc/src/butil/errno.cpp:60,1
    - Dst: fprintf
      Src: /src/brpc/src/butil/errno.cpp:63,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 3
    argNames:
    - error_code
    - error_name
    - description
    argTypes:
    - int
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 69
    functionName: butil::DescribeCustomizedErrno
    functionSourceFile: /src/brpc/src/butil/errno.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    - BAIDU_SCOPED_LOCK
    - _exit
    - fprintf
    - strncmp
    - strerror_r
    linkageType: ''
    returnType: int
    signature: "int DescribeCustomizedErrno(\n    int error_code, const char* error_name,
      const char* description)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strerror_r
      Src: /src/brpc/src/butil/errno.cpp:83,1
    - Dst: strerror_r
      Src: /src/brpc/src/butil/errno.cpp:88,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/errno.cpp:94,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 97
    functionName: berror
    functionSourceFile: /src/brpc/src/butil/errno.cpp
    functionUses: 237
    functionsReached:
    - strerror_r
    - snprintf
    linkageType: ''
    returnType: char
    signature: char * berror(int error_code)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: berror
      Src: /src/brpc/src/butil/errno.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: berror
    functionSourceFile: /src/brpc/src/butil/errno.cpp
    functionUses: 238
    functionsReached:
    - berror
    linkageType: ''
    returnType: char
    signature: char * berror()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::ThreadKey::ThreadKey
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKey()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: ~ThreadKey()
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void ~ThreadKey()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKey::Reset
      Src: /src/brpc/src/butil/thread_key.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: butil::ThreadKey::ThreadKey
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 4
    functionsReached:
    - butil::ThreadKey::Reset
    linkageType: ''
    returnType: void
    signature: void ThreadKey(ThreadKey&& other) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::ThreadKey::ThreadKey
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKey(const ThreadKey& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: '& operator=(const ThreadKey& other)'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThreadKey
    signature: ThreadKey & operator=(const ThreadKey& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: butil::ThreadKey::Reset
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: butil::ThreadKeyInfo
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: butil::ThreadKeyTLS
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyTLS()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: butil::ThreadLocal::ThreadLocal
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: butil::ThreadLocal::ThreadLocal
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocal(const ThreadLocal&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: '& operator=(const ThreadLocal&)'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThreadLocal
    signature: ThreadLocal & operator=(const ThreadLocal&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/thread_key.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/thread_key.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/thread_key.h:120,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:123,1
    - Dst: callback
      Src: /src/brpc/src/butil/thread_key.h:125,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 127
    functionName: butil::ThreadLocal::for_each
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    - callback
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void for_each(Callback&& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocal::reset
      Src: /src/brpc/src/butil/thread_key.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: butil::ThreadLocal::reset
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 1
    functionsReached:
    - butil::ThreadLocal::reset
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/thread_key.h:138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 140
    functionName: butil::ThreadLocal::DefaultDtor
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    linkageType: ''
    returnType: void
    signature: void DefaultDtor(void* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: thread_key_create
      Src: /src/brpc/src/butil/thread_key.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - delete_on_thread_exit
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: butil::ThreadLocal<T>::ThreadLocal
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - thread_key_create
    linkageType: ''
    returnType: void
    signature: void ThreadLocal<T>::ThreadLocal(bool delete_on_thread_exit)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: thread_key_delete
      Src: /src/brpc/src/butil/thread_key.h:161,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:163,1
    - Dst: DefaultDtor
      Src: /src/brpc/src/butil/thread_key.h:165,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/thread_key.h:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 160
    functionDepth: 2
    functionLinenumber: 160
    functionLinenumberEnd: 169
    functionName: ThreadLocal<T>::~ThreadLocal()
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - thread_key_delete
    - DefaultDtor
    - pthread_mutex_destroy
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void ThreadLocal<T>::~ThreadLocal()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/thread_key.h:173,1
    - Dst: thread_getspecific
      Src: /src/brpc/src/butil/thread_key.h:173,1
    - Dst: T::T
      Src: /src/brpc/src/butil/thread_key.h:175,1
    - Dst: thread_setspecific
      Src: /src/brpc/src/butil/thread_key.h:179,1
    - Dst: DefaultDtor
      Src: /src/brpc/src/butil/thread_key.h:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:185,1
    - Dst: push_back
      Src: /src/brpc/src/butil/thread_key.h:186,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 190
    functionName: butil::ThreadLocal<T>::get
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - thread_setspecific
    - BAIDU_SCOPED_LOCK
    - push_back
    - static_cast<T*>
    - thread_getspecific
    - T::T
    - DefaultDtor
    linkageType: ''
    returnType: T
    signature: T * ThreadLocal<T>::get()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocal<T>::get
      Src: /src/brpc/src/butil/thread_key.h:194,1
    - Dst: thread_setspecific
      Src: /src/brpc/src/butil/thread_key.h:198,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:202,1
    - Dst: push_back
      Src: /src/brpc/src/butil/thread_key.h:204,1
    - Dst: std::remove
      Src: /src/brpc/src/butil/thread_key.h:208,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_key.h:208,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.h:208,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.h:209,1
    - Dst: erase
      Src: /src/brpc/src/butil/thread_key.h:210,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.h:210,1
    - Dst: DefaultDtor
      Src: /src/brpc/src/butil/thread_key.h:212,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 215
    functionName: butil::ThreadLocal<T>::reset
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - end
    - thread_setspecific
    - std::remove
    - BAIDU_SCOPED_LOCK
    - push_back
    - erase
    - butil::ThreadLocal<T>::get
    - begin
    - DefaultDtor
    linkageType: ''
    returnType: void
    signature: void ThreadLocal<T>::reset(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::ThreadKey::ThreadKey
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKey()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    functionName: ~ThreadKey()
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void ~ThreadKey()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKey::Reset
      Src: /src/brpc/src/butil/thread_key.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: butil::ThreadKey::ThreadKey
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 4
    functionsReached:
    - butil::ThreadKey::Reset
    linkageType: ''
    returnType: void
    signature: void ThreadKey(ThreadKey&& other) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::ThreadKey::ThreadKey
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKey(const ThreadKey& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: '& operator=(const ThreadKey& other)'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThreadKey
    signature: ThreadKey & operator=(const ThreadKey& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: butil::ThreadKey::Reset
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: butil::ThreadKeyInfo
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: butil::ThreadKeyTLS
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadKeyTLS()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: butil::ThreadLocal::ThreadLocal
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: butil::ThreadLocal::ThreadLocal
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocal(const ThreadLocal&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: '& operator=(const ThreadLocal&)'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ThreadLocal
    signature: ThreadLocal & operator=(const ThreadLocal&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/thread_key.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/thread_key.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/thread_key.h:120,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:123,1
    - Dst: callback
      Src: /src/brpc/src/butil/thread_key.h:125,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 127
    functionName: butil::ThreadLocal::for_each
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    - callback
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void for_each(Callback&& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocal::reset
      Src: /src/brpc/src/butil/thread_key.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: butil::ThreadLocal::reset
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 2
    functionsReached:
    - butil::ThreadLocal::reset
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/thread_key.h:138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 140
    functionName: butil::ThreadLocal::DefaultDtor
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    linkageType: ''
    returnType: void
    signature: void DefaultDtor(void* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: thread_key_create
      Src: /src/brpc/src/butil/thread_key.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - delete_on_thread_exit
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: butil::ThreadLocal<T>::ThreadLocal
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - thread_key_create
    linkageType: ''
    returnType: void
    signature: void ThreadLocal<T>::ThreadLocal(bool delete_on_thread_exit)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: thread_key_delete
      Src: /src/brpc/src/butil/thread_key.h:161,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:163,1
    - Dst: DefaultDtor
      Src: /src/brpc/src/butil/thread_key.h:165,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/thread_key.h:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 160
    functionDepth: 2
    functionLinenumber: 160
    functionLinenumberEnd: 169
    functionName: ThreadLocal<T>::~ThreadLocal()
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - thread_key_delete
    - DefaultDtor
    - pthread_mutex_destroy
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void ThreadLocal<T>::~ThreadLocal()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/thread_key.h:173,1
    - Dst: thread_getspecific
      Src: /src/brpc/src/butil/thread_key.h:173,1
    - Dst: T::T
      Src: /src/brpc/src/butil/thread_key.h:175,1
    - Dst: thread_setspecific
      Src: /src/brpc/src/butil/thread_key.h:179,1
    - Dst: DefaultDtor
      Src: /src/brpc/src/butil/thread_key.h:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:185,1
    - Dst: push_back
      Src: /src/brpc/src/butil/thread_key.h:186,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 190
    functionName: butil::ThreadLocal<T>::get
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 1
    functionsReached:
    - thread_setspecific
    - BAIDU_SCOPED_LOCK
    - push_back
    - static_cast<T*>
    - thread_getspecific
    - T::T
    - DefaultDtor
    linkageType: ''
    returnType: T
    signature: T * ThreadLocal<T>::get()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocal<T>::get
      Src: /src/brpc/src/butil/thread_key.h:194,1
    - Dst: thread_setspecific
      Src: /src/brpc/src/butil/thread_key.h:198,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.h:202,1
    - Dst: push_back
      Src: /src/brpc/src/butil/thread_key.h:204,1
    - Dst: std::remove
      Src: /src/brpc/src/butil/thread_key.h:208,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_key.h:208,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.h:208,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.h:209,1
    - Dst: erase
      Src: /src/brpc/src/butil/thread_key.h:210,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.h:210,1
    - Dst: DefaultDtor
      Src: /src/brpc/src/butil/thread_key.h:212,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 193
    functionDepth: 1
    functionLinenumber: 193
    functionLinenumberEnd: 215
    functionName: butil::ThreadLocal<T>::reset
    functionSourceFile: /src/brpc/src/butil/thread_key.h
    functionUses: 0
    functionsReached:
    - end
    - thread_setspecific
    - std::remove
    - BAIDU_SCOPED_LOCK
    - push_back
    - erase
    - butil::ThreadLocal<T>::get
    - begin
    - DefaultDtor
    linkageType: ''
    returnType: void
    signature: void ThreadLocal<T>::reset(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CPU
      Src: /src/brpc/src/butil/cpu.h:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 86
    functionName: butil::CPU
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 1
    functionsReached:
    - butil::CPU
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT CPU
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::vendor_name
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & vendor_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: butil::signature
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int signature() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::stepping
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stepping() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::model
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int model() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::family
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int family() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::type
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: butil::extended_model
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int extended_model() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::extended_family
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int extended_family() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: butil::has_mmx
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_mmx() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::has_sse
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: butil::has_sse2
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: butil::has_sse3
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse3() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::has_ssse3
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_ssse3() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: butil::has_sse41
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse41() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: butil::has_sse42
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse42() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: butil::has_avx
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_avx() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::has_avx_hardware
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_avx_hardware() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: butil::has_aesni
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_aesni() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: butil::has_non_stop_time_stamp_counter
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_non_stop_time_stamp_counter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: butil::cpu_brand
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & cpu_brand() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CPU
      Src: /src/brpc/src/butil/cpu.h:18,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 86
    functionName: butil::CPU
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 2
    functionsReached:
    - butil::CPU
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT CPU
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::vendor_name
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & vendor_name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: butil::signature
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int signature() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::stepping
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int stepping() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::model
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int model() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::family
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int family() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::type
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: butil::extended_model
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int extended_model() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::extended_family
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int extended_family() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: butil::has_mmx
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_mmx() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::has_sse
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: butil::has_sse2
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: butil::has_sse3
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse3() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::has_ssse3
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_ssse3() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: butil::has_sse41
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse41() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: butil::has_sse42
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_sse42() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 48
    functionName: butil::has_avx
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_avx() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::has_avx_hardware
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_avx_hardware() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: butil::has_aesni
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_aesni() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: butil::has_non_stop_time_stamp_counter
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_non_stop_time_stamp_counter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: butil::cpu_brand
    functionSourceFile: /src/brpc/src/butil/cpu.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & cpu_brand() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::ScopedGeneric::Data
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(const T& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' in'
    - ' other'
    argTypes:
    - T
    - Traits
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: butil::ScopedGeneric::Data
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(const T& in, const Traits& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::InvalidValue
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - element_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric(const element_type& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' value'
    - ' traits'
    argTypes:
    - element_type
    - traits_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric(const element_type& value, const traits_type& traits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RValue::object::release
      Src: /src/brpc/src/butil/scoped_generic.h:89,1
    - Dst: RValue::object::get_traits
      Src: /src/brpc/src/butil/scoped_generic.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rvalue
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - RValue::object::release
    - RValue::object::get_traits
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric(RValue rvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FreeIfNecessary
      Src: /src/brpc/src/butil/scoped_generic.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: ~ScopedGeneric()
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - FreeIfNecessary
    linkageType: ''
    returnType: void
    signature: void ~ScopedGeneric()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:99,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/butil/scoped_generic.h:100,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:100,1
    - Dst: butil::ScopedGeneric::FreeIfNecessary
      Src: /src/brpc/src/butil/scoped_generic.h:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 104
    functionName: butil::ScopedGeneric::reset
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT
    - butil::ScopedGeneric::FreeIfNecessary
    - butil::InvalidValue
    linkageType: ''
    returnType: void
    signature: void reset(const element_type& value = traits_type::InvalidValue())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedGeneric::swap
      Src: /src/brpc/src/butil/scoped_generic.h:111,1
    - Dst: static_cast<Traits&>
      Src: /src/brpc/src/butil/scoped_generic.h:111,1
    - Dst: static_cast<Traits&>
      Src: /src/brpc/src/butil/scoped_generic.h:111,1
    - Dst: butil::ScopedGeneric::swap
      Src: /src/brpc/src/butil/scoped_generic.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ScopedGeneric
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: butil::ScopedGeneric::swap
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 1
    functionsReached:
    - static_cast<Traits&>
    - butil::ScopedGeneric::swap
    linkageType: ''
    returnType: void
    signature: void swap(ScopedGeneric& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 122
    functionName: butil::ScopedGeneric::WARN_UNUSED_RESULT
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::InvalidValue
    linkageType: ''
    returnType: element_type
    signature: element_type WARN_UNUSED_RESULT
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: '& get() const'
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: element_type
    signature: element_type & get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: butil::ScopedGeneric::is_valid
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::InvalidValue
    linkageType: ''
    returnType: bool
    signature: bool is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - element_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: operator==(const element_type& value) const
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const element_type& value) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - element_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: operator!=(const element_type& value) const
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const element_type& value) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: '& get_traits()'
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Traits
    signature: Traits & get_traits()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& get_traits() const'
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Traits
    signature: Traits & get_traits() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:142,1
    - Dst: Free
      Src: /src/brpc/src/butil/scoped_generic.h:143,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: butil::ScopedGeneric::FreeIfNecessary
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 1
    functionsReached:
    - Free
    - butil::InvalidValue
    linkageType: ''
    returnType: void
    signature: void FreeIfNecessary()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::swap
      Src: /src/brpc/src/butil/scoped_generic.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - ScopedGeneric<T, Traits>
    - ScopedGeneric<T, Traits>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 163
    functionName: butil::swap
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 1
    functionsReached:
    - butil::swap
    linkageType: ''
    returnType: void
    signature: "void swap(const ScopedGeneric<T, Traits>& a,\n          const ScopedGeneric<T,
      Traits>& b)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/scoped_generic.h:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' value'
    - ' scoped'
    argTypes:
    - T
    - ScopedGeneric<T, Traits>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: operator==(const T& value, const ScopedGeneric<T, Traits>& scoped)
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const T& value, const ScopedGeneric<T, Traits>& scoped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/scoped_generic.h:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' value'
    - ' scoped'
    argTypes:
    - T
    - ScopedGeneric<T, Traits>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 173
    functionName: operator!=(const T& value, const ScopedGeneric<T, Traits>& scoped)
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const T& value, const ScopedGeneric<T, Traits>& scoped)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::ScopedGeneric::Data
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(const T& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' in'
    - ' other'
    argTypes:
    - T
    - Traits
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: butil::ScopedGeneric::Data
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(const T& in, const Traits& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::InvalidValue
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - element_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric(const element_type& value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' value'
    - ' traits'
    argTypes:
    - element_type
    - traits_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric(const element_type& value, const traits_type& traits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RValue::object::release
      Src: /src/brpc/src/butil/scoped_generic.h:89,1
    - Dst: RValue::object::get_traits
      Src: /src/brpc/src/butil/scoped_generic.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rvalue
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::ScopedGeneric::ScopedGeneric
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - RValue::object::release
    - RValue::object::get_traits
    linkageType: ''
    returnType: void
    signature: void ScopedGeneric(RValue rvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FreeIfNecessary
      Src: /src/brpc/src/butil/scoped_generic.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: ~ScopedGeneric()
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - FreeIfNecessary
    linkageType: ''
    returnType: void
    signature: void ~ScopedGeneric()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:99,1
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/butil/scoped_generic.h:100,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:100,1
    - Dst: butil::ScopedGeneric::FreeIfNecessary
      Src: /src/brpc/src/butil/scoped_generic.h:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 104
    functionName: butil::ScopedGeneric::reset
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT
    - butil::ScopedGeneric::FreeIfNecessary
    - butil::InvalidValue
    linkageType: ''
    returnType: void
    signature: void reset(const element_type& value = traits_type::InvalidValue())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedGeneric::swap
      Src: /src/brpc/src/butil/scoped_generic.h:111,1
    - Dst: static_cast<Traits&>
      Src: /src/brpc/src/butil/scoped_generic.h:111,1
    - Dst: static_cast<Traits&>
      Src: /src/brpc/src/butil/scoped_generic.h:111,1
    - Dst: butil::ScopedGeneric::swap
      Src: /src/brpc/src/butil/scoped_generic.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ScopedGeneric
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: butil::ScopedGeneric::swap
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 2
    functionsReached:
    - static_cast<Traits&>
    - butil::ScopedGeneric::swap
    linkageType: ''
    returnType: void
    signature: void swap(ScopedGeneric& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 122
    functionName: butil::ScopedGeneric::WARN_UNUSED_RESULT
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::InvalidValue
    linkageType: ''
    returnType: element_type
    signature: element_type WARN_UNUSED_RESULT
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: '& get() const'
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: element_type
    signature: element_type & get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: butil::ScopedGeneric::is_valid
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - butil::InvalidValue
    linkageType: ''
    returnType: bool
    signature: bool is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - element_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: operator==(const element_type& value) const
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const element_type& value) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - element_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: operator!=(const element_type& value) const
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const element_type& value) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: '& get_traits()'
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Traits
    signature: Traits & get_traits()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: '& get_traits() const'
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Traits
    signature: Traits & get_traits() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:142,1
    - Dst: Free
      Src: /src/brpc/src/butil/scoped_generic.h:143,1
    - Dst: butil::InvalidValue
      Src: /src/brpc/src/butil/scoped_generic.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 146
    functionName: butil::ScopedGeneric::FreeIfNecessary
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 2
    functionsReached:
    - Free
    - butil::InvalidValue
    linkageType: ''
    returnType: void
    signature: void FreeIfNecessary()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::swap
      Src: /src/brpc/src/butil/scoped_generic.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - ScopedGeneric<T, Traits>
    - ScopedGeneric<T, Traits>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 163
    functionName: butil::swap
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 2
    functionsReached:
    - butil::swap
    linkageType: ''
    returnType: void
    signature: "void swap(const ScopedGeneric<T, Traits>& a,\n          const ScopedGeneric<T,
      Traits>& b)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/scoped_generic.h:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' value'
    - ' scoped'
    argTypes:
    - T
    - ScopedGeneric<T, Traits>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: operator==(const T& value, const ScopedGeneric<T, Traits>& scoped)
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const T& value, const ScopedGeneric<T, Traits>& scoped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/scoped_generic.h:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' value'
    - ' scoped'
    argTypes:
    - T
    - ScopedGeneric<T, Traits>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 173
    functionName: operator!=(const T& value, const ScopedGeneric<T, Traits>& scoped)
    functionSourceFile: /src/brpc/src/butil/scoped_generic.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const T& value, const ScopedGeneric<T, Traits>& scoped)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - a
    - ','
    - b
    - ','
    - c
    - ','
    - d
    - ','
    - inp
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 28
    functionName: cpuid
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: cpuid(a, b, c, d, inp)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 11
    argNames:
    - (
    - a
    - ','
    - b
    - ','
    - c
    - ','
    - d
    - ','
    - inp
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 34
    functionName: cpuid
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: cpuid(a, b, c, d, inp)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cpuid
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:55,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:57,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:58,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:59,1
    - Dst: cpuid
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:63,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:77,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 84
    functionName: AtomicOps_Internalx86CPUFeaturesInit
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc
    functionUses: 0
    functionsReached:
    - memcpy
    - strcmp
    - cpuid
    linkageType: ''
    returnType: void
    signature: void AtomicOps_Internalx86CPUFeaturesInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AtomicOps_Internalx86CPUFeaturesInit
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: AtomicOpsx86Initializer::AtomicOpsx86Initializer
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc
    functionUses: 0
    functionsReached:
    - AtomicOps_Internalx86CPUFeaturesInit
    linkageType: ''
    returnType: void
    signature: void AtomicOpsx86Initializer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cpuid
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:55,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:57,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:58,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:59,1
    - Dst: cpuid
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:63,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:77,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 84
    functionName: AtomicOps_Internalx86CPUFeaturesInit
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc
    functionUses: 1
    functionsReached:
    - memcpy
    - strcmp
    - cpuid
    linkageType: ''
    returnType: void
    signature: void AtomicOps_Internalx86CPUFeaturesInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AtomicOps_Internalx86CPUFeaturesInit
      Src: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: AtomicOpsx86Initializer::AtomicOpsx86Initializer
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_gcc.cc
    functionUses: 0
    functionsReached:
    - AtomicOps_Internalx86CPUFeaturesInit
    linkageType: ''
    returnType: void
    signature: void AtomicOpsx86Initializer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - decl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    functionName: BUTIL_DELETE_FUNCTION
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_DELETE_FUNCTION(decl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - decl
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: BUTIL_DELETE_FUNCTION
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_DELETE_FUNCTION(decl)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: DISALLOW_COPY
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_COPY(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: DISALLOW_MOVE
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_MOVE(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: DISALLOW_ASSIGN
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_ASSIGN(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: DISALLOW_MOVE_ASSIGN
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_MOVE_ASSIGN(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 57
    functionName: DISALLOW_COPY_AND_ASSIGN
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_COPY_AND_ASSIGN(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: DISALLOW_MOVE_AND_ASSIGN
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_MOVE_AND_ASSIGN(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: DISALLOW_COPY_AND_MOVE
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_COPY_AND_MOVE(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 75
    functionName: DISALLOW_EVIL_CONSTRUCTORS
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_EVIL_CONSTRUCTORS(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: DISALLOW_IMPLICIT_CONSTRUCTORS
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - a
    - ','
    - b
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 89
    functionName: BAIDU_CONCAT
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CONCAT(a, b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - a
    - ','
    - b
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 90
    functionName: BAIDU_CONCAT_HELPER
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CONCAT_HELPER(a, b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - array
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 123
    functionName: arraysize
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 211
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: arraysize(array)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - array
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 127
    functionName: ARRAY_SIZE
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 143
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ARRAY_SIZE(array)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - a
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: ARRAYSIZE_UNSAFE
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 60
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ARRAYSIZE_UNSAFE(a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - From
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    functionName: butil::implicit_cast
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: To
    signature: To implicit_cast(From const &f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - From
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    functionName: butil::implicit_cast
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: To
    signature: To implicit_cast(From const &f)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expr
    - ','
    - msg
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: BAIDU_CASSERT
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CASSERT(expr, msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expr
    - ','
    - msg
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 236
    functionName: BAIDU_CASSERT
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_CASSERT(expr, msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - expr
    - ','
    - msg
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 242
    functionName: COMPILE_ASSERT
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: COMPILE_ASSERT(expr, msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/macros.h:299,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/macros.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' source'
    argTypes:
    - Source
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: butil::bit_cast
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - memcpy
    - COMPILE_ASSERT
    linkageType: ''
    returnType: Dest
    signature: Dest bit_cast(const Source& source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/macros.h:299,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/macros.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' source'
    argTypes:
    - Source
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: butil::bit_cast
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - memcpy
    - COMPILE_ASSERT
    linkageType: ''
    returnType: Dest
    signature: Dest bit_cast(const Source& source)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 318
    functionName: butil::ignore_result
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ignore_result(const T&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 318
    functionName: butil::ignore_result
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ignore_result(const T&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - type
    - ','
    - name
    - ','
    - arguments
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: CR_DEFINE_STATIC_LOCAL
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CR_DEFINE_STATIC_LOCAL(type, name, arguments)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - type
    - ','
    - name
    - ','
    - arguments
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: CR_DEFINE_STATIC_LOCAL
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: CR_DEFINE_STATIC_LOCAL(type, name, arguments)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - a
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 349
    functionName: BAIDU_SYMBOLSTR
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_SYMBOLSTR(a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - a
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 349
    functionDepth: 0
    functionLinenumber: 349
    functionLinenumberEnd: 350
    functionName: BAIDU_SYMBOLSTR_HELPER
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_SYMBOLSTR_HELPER(a)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ptr
    - ','
    - type
    - ','
    - member
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 372
    functionName: container_of
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: container_of(ptr, type, member)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 384
    functionName: butil::internal::ArrayDeleter
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 385
    functionName: ~ArrayDeleter()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 384
    functionName: butil::internal::ArrayDeleter
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 385
    functionName: ~ArrayDeleter()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 384
    functionName: butil::internal::ArrayDeleter
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 385
    functionName: ~ArrayDeleter()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 384
    functionName: butil::internal::ArrayDeleter
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 385
    functionName: ~ArrayDeleter()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ArrayDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - Tp
    - ','
    - name
    - ','
    - size
    - ','
    - maxsize
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 405
    functionName: DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DEFINE_SMALL_ARRAY(Tp, name, size, maxsize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/macros.h:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - arr
    - size
    argTypes:
    - void*
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: butil::internal::ArrayCtorDtor
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void ArrayCtorDtor(void* arr, unsigned size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~T
      Src: /src/brpc/src/butil/macros.h:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 416
    functionName: ~ArrayCtorDtor()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - ~T
    linkageType: ''
    returnType: void
    signature: void ~ArrayCtorDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/macros.h:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - arr
    - size
    argTypes:
    - void*
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: butil::internal::ArrayCtorDtor
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void ArrayCtorDtor(void* arr, unsigned size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~T
      Src: /src/brpc/src/butil/macros.h:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 416
    functionName: ~ArrayCtorDtor()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - ~T
    linkageType: ''
    returnType: void
    signature: void ~ArrayCtorDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/macros.h:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - arr
    - size
    argTypes:
    - void*
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: butil::internal::ArrayCtorDtor
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void ArrayCtorDtor(void* arr, unsigned size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~T
      Src: /src/brpc/src/butil/macros.h:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 416
    functionName: ~ArrayCtorDtor()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - ~T
    linkageType: ''
    returnType: void
    signature: void ~ArrayCtorDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/macros.h:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - arr
    - size
    argTypes:
    - void*
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: butil::internal::ArrayCtorDtor
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void ArrayCtorDtor(void* arr, unsigned size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ~T
      Src: /src/brpc/src/butil/macros.h:415,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 416
    functionName: ~ArrayCtorDtor()
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached:
    - ~T
    linkageType: ''
    returnType: void
    signature: void ~ArrayCtorDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 9
    argNames:
    - (
    - Tp
    - ','
    - name
    - ','
    - size
    - ','
    - maxsize
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 435
    functionName: DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DEFINE_SMALL_ARRAY(Tp, name, size, maxsize)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - fmt
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 473
    functionName: ASSERT_LOG
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ASSERT_LOG(fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - condition
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 481
    functionName: RELEASE_ASSERT
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RELEASE_ASSERT(condition)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - condition
    - ','
    - fmt
    - ','
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 495
    functionName: RELEASE_ASSERT_VERBOSE
    functionSourceFile: /src/brpc/src/butil/macros.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: RELEASE_ASSERT_VERBOSE(condition, fmt, ...)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/unix_socket.cpp:31,1
    - Dst: socket
      Src: /src/brpc/src/butil/unix_socket.cpp:33,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:35,1
    - Dst: remove
      Src: /src/brpc/src/butil/unix_socket.cpp:39,1
    - Dst: bind
      Src: /src/brpc/src/butil/unix_socket.cpp:41,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:42,1
    - Dst: listen
      Src: /src/brpc/src/butil/unix_socket.cpp:46,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:47,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/unix_socket.cpp:50,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - sockname
    - remove_previous_file
    argTypes:
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 51
    functionName: butil::unix_socket_listen
    functionSourceFile: /src/brpc/src/butil/unix_socket.cpp
    functionUses: 1
    functionsReached:
    - butil::snprintf
    - socket
    - listen
    - bind
    - remove
    - PLOG
    - fd_guard::release
    linkageType: ''
    returnType: int
    signature: int unix_socket_listen(const char* sockname, bool remove_previous_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::unix_socket_listen
      Src: /src/brpc/src/butil/unix_socket.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sockname
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: butil::unix_socket_listen
    functionSourceFile: /src/brpc/src/butil/unix_socket.cpp
    functionUses: 2
    functionsReached:
    - butil::unix_socket_listen
    linkageType: ''
    returnType: int
    signature: int unix_socket_listen(const char* sockname)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/unix_socket.cpp:60,1
    - Dst: socket
      Src: /src/brpc/src/butil/unix_socket.cpp:62,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:64,1
    - Dst: connect
      Src: /src/brpc/src/butil/unix_socket.cpp:67,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:68,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/unix_socket.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - sockname
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 73
    functionName: butil::unix_socket_connect
    functionSourceFile: /src/brpc/src/butil/unix_socket.cpp
    functionUses: 0
    functionsReached:
    - butil::snprintf
    - socket
    - connect
    - fd_guard::release
    - PLOG
    linkageType: ''
    returnType: int
    signature: int unix_socket_connect(const char* sockname)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/unix_socket.cpp:31,1
    - Dst: socket
      Src: /src/brpc/src/butil/unix_socket.cpp:33,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:35,1
    - Dst: remove
      Src: /src/brpc/src/butil/unix_socket.cpp:39,1
    - Dst: bind
      Src: /src/brpc/src/butil/unix_socket.cpp:41,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:42,1
    - Dst: listen
      Src: /src/brpc/src/butil/unix_socket.cpp:46,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:47,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/unix_socket.cpp:50,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - sockname
    - remove_previous_file
    argTypes:
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 51
    functionName: butil::unix_socket_listen
    functionSourceFile: /src/brpc/src/butil/unix_socket.cpp
    functionUses: 2
    functionsReached:
    - butil::snprintf
    - socket
    - listen
    - bind
    - remove
    - PLOG
    - fd_guard::release
    linkageType: ''
    returnType: int
    signature: int unix_socket_listen(const char* sockname, bool remove_previous_file)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::unix_socket_listen
      Src: /src/brpc/src/butil/unix_socket.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sockname
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: butil::unix_socket_listen
    functionSourceFile: /src/brpc/src/butil/unix_socket.cpp
    functionUses: 3
    functionsReached:
    - butil::unix_socket_listen
    linkageType: ''
    returnType: int
    signature: int unix_socket_listen(const char* sockname)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/unix_socket.cpp:60,1
    - Dst: socket
      Src: /src/brpc/src/butil/unix_socket.cpp:62,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:64,1
    - Dst: connect
      Src: /src/brpc/src/butil/unix_socket.cpp:67,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/unix_socket.cpp:68,1
    - Dst: fd_guard::release
      Src: /src/brpc/src/butil/unix_socket.cpp:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - sockname
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 73
    functionName: butil::unix_socket_connect
    functionSourceFile: /src/brpc/src/butil/unix_socket.cpp
    functionUses: 0
    functionsReached:
    - butil::snprintf
    - socket
    - connect
    - fd_guard::release
    - PLOG
    linkageType: ''
    returnType: int
    signature: int unix_socket_connect(const char* sockname)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::Status
      Src: /src/brpc/src/butil/status.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::Status::OK
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 71
    functionsReached:
    - butil::Status::Status
    linkageType: ''
    returnType: Status
    signature: Status OK()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/status.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __format__
      Src: /src/brpc/src/butil/status.h:61,1
    - Dst: va_start
      Src: /src/brpc/src/butil/status.h:64,1
    - Dst: butil::Status::set_errorv
      Src: /src/brpc/src/butil/status.h:65,1
    - Dst: va_end
      Src: /src/brpc/src/butil/status.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - code
    - fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 5
    functionsReached:
    - __format__
    - va_start
    - butil::Status::set_errorv
    - va_end
    linkageType: ''
    returnType: void
    signature: "void Status(int code, const char* fmt, ...) \n        __attribute__
      ((__format__ (__printf__, 3, 4)))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::set_error
      Src: /src/brpc/src/butil/status.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - code
    - ' error_msg'
    argTypes:
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 5
    functionsReached:
    - butil::Status::set_error
    linkageType: ''
    returnType: void
    signature: void Status(int code, const butil::StringPiece& error_msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: butil::Status::ok
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 51
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::Status::error_code
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int error_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: butil::Status::error_cstr
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * error_cstr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/status.h:103,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/status.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 105
    functionName: butil::Status::error_data
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 2
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece error_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/status.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: butil::Status::swap
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(butil::Status& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::copy_state
      Src: /src/brpc/src/butil/status.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 5
    functionsReached:
    - butil::Status::copy_state
    linkageType: ''
    returnType: void
    signature: void Status::Status(const Status& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/status.h:124,1
    - Dst: butil::Status::set_errorv
      Src: /src/brpc/src/butil/status.h:125,1
    - Dst: va_end
      Src: /src/brpc/src/butil/status.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - code
    - msg
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 128
    functionName: butil::Status::set_error
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 5
    functionsReached:
    - va_start
    - butil::Status::set_errorv
    - va_end
    linkageType: ''
    returnType: int
    signature: int Status::set_error(int code, const char* msg, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: butil::Status::reset
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 2
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void Status::reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.h:142,1
    - Dst: set_error
      Src: /src/brpc/src/butil/status.h:145,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/status.h:146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 148
    functionName: Status::operator=(const Status& s)
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - free
    - set_error
    linkageType: ''
    returnType: void
    signature: void Status::operator=(const Status& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: error_data
      Src: /src/brpc/src/butil/status.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' st'
    argTypes:
    - std::ostream
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: '& operator<<(std::ostream& os, const Status& st)'
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - error_data
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Status& st)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::Status
      Src: /src/brpc/src/butil/status.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::Status::OK
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 71
    functionsReached:
    - butil::Status::Status
    linkageType: ''
    returnType: Status
    signature: Status OK()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/status.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: ~Status()
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void ~Status()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __format__
      Src: /src/brpc/src/butil/status.h:61,1
    - Dst: va_start
      Src: /src/brpc/src/butil/status.h:64,1
    - Dst: butil::Status::set_errorv
      Src: /src/brpc/src/butil/status.h:65,1
    - Dst: va_end
      Src: /src/brpc/src/butil/status.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - code
    - fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 6
    functionsReached:
    - __format__
    - va_start
    - butil::Status::set_errorv
    - va_end
    linkageType: ''
    returnType: void
    signature: "void Status(int code, const char* fmt, ...) \n        __attribute__
      ((__format__ (__printf__, 3, 4)))"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::set_error
      Src: /src/brpc/src/butil/status.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - code
    - ' error_msg'
    argTypes:
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 6
    functionsReached:
    - butil::Status::set_error
    linkageType: ''
    returnType: void
    signature: void Status(int code, const butil::StringPiece& error_msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: butil::Status::ok
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 51
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::Status::error_code
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int error_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: butil::Status::error_cstr
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * error_cstr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/status.h:103,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/status.h:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 105
    functionName: butil::Status::error_data
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 2
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece error_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/status.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    functionName: butil::Status::swap
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(butil::Status& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::copy_state
      Src: /src/brpc/src/butil/status.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 120
    functionName: butil::Status::Status
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 6
    functionsReached:
    - butil::Status::copy_state
    linkageType: ''
    returnType: void
    signature: void Status::Status(const Status& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/status.h:124,1
    - Dst: butil::Status::set_errorv
      Src: /src/brpc/src/butil/status.h:125,1
    - Dst: va_end
      Src: /src/brpc/src/butil/status.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - code
    - msg
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 122
    functionDepth: 1
    functionLinenumber: 122
    functionLinenumberEnd: 128
    functionName: butil::Status::set_error
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 6
    functionsReached:
    - va_start
    - butil::Status::set_errorv
    - va_end
    linkageType: ''
    returnType: int
    signature: int Status::set_error(int code, const char* msg, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 133
    functionName: butil::Status::reset
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 2
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void Status::reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.h:142,1
    - Dst: set_error
      Src: /src/brpc/src/butil/status.h:145,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/status.h:146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 148
    functionName: Status::operator=(const Status& s)
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - free
    - set_error
    linkageType: ''
    returnType: void
    signature: void Status::operator=(const Status& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: error_data
      Src: /src/brpc/src/butil/status.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' st'
    argTypes:
    - std::ostream
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: '& operator<<(std::ostream& os, const Status& st)'
    functionSourceFile: /src/brpc/src/butil/status.h
    functionUses: 0
    functionsReached:
    - error_data
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const Status& st)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:20,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 25
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 31
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 34
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 1
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_synchronize
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 80
    functionsReached:
    - __sync_synchronize
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:20,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 25
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 33
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 34
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 2
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_synchronize
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 84
    functionsReached:
    - __sync_synchronize
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:20,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 25
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 35
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 34
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_synchronize
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 88
    functionsReached:
    - __sync_synchronize
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:20,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 25
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 37
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 34
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: __sync_bool_compare_and_swap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 4
    functionsReached:
    - __sync_bool_compare_and_swap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __sync_synchronize
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 92
    functionsReached:
    - __sync_synchronize
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ref_of_lock
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 36
    functionName: BAIDU_SCOPED_LOCK
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 413
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_SCOPED_LOCK(ref_of_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ref_of_lock
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: BAIDU_SCOPED_LOCK
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 413
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_SCOPED_LOCK(ref_of_lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/butil/scoped_lock.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: std::lock_guard::lock_guard
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - lock
    linkageType: ''
    returnType: void
    signature: void lock_guard(Mutex & mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/butil/scoped_lock.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/butil/scoped_lock.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/src/butil/scoped_lock.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::unique_lock::try_lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/butil/scoped_lock.h:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:103,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/butil/scoped_lock.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: std::unique_lock::lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 23
    functionsReached:
    - std::unique_lock::lock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:112,1
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/src/butil/scoped_lock.h:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 117
    functionName: std::unique_lock::try_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 6
    functionsReached:
    - CHECK
    - std::unique_lock::try_lock
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:121,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/butil/scoped_lock.h:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: std::unique_lock::unlock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 89
    functionsReached:
    - std::unique_lock::unlock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:129,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: std::unique_lock::swap
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: std::unique_lock::release
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 140
    functionName: std::unique_lock::mutex
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: std::unique_lock::owns_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:157,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:159,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:159,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - pthread_mutex_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 155
    functionDepth: 5
    functionLinenumber: 155
    functionLinenumberEnd: 165
    functionName: std::lock_guard<pthread_mutex_t>::lock_guard
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - LOG
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void lock_guard(pthread_mutex_t & mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:170,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 167
    functionDepth: 5
    functionLinenumber: 167
    functionLinenumberEnd: 175
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:186,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:188,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:188,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' spin'
    argTypes:
    - pthread_spinlock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 194
    functionName: std::lock_guard<pthread_spinlock_t>::lock_guard
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - LOG
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void lock_guard(pthread_spinlock_t & spin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:199,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 204
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 215
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 216
    functionDepth: 5
    functionLinenumber: 216
    functionLinenumberEnd: 219
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 225
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_trylock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 228
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 230
    functionDepth: 5
    functionLinenumber: 230
    functionLinenumberEnd: 234
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:238,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:242,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:244,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:244,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 236
    functionDepth: 5
    functionLinenumber: 236
    functionLinenumberEnd: 252
    functionName: std::unique_lock<pthread_mutex_t>::lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - CHECK
    - LOG
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:256,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 254
    functionDepth: 4
    functionLinenumber: 254
    functionLinenumberEnd: 261
    functionName: std::unique_lock<pthread_mutex_t>::try_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_trylock
    - CHECK
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:265,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 263
    functionDepth: 5
    functionLinenumber: 263
    functionLinenumberEnd: 270
    functionName: std::unique_lock<pthread_mutex_t>::unlock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:273,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 275
    functionName: std::unique_lock<pthread_mutex_t>::swap
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 282
    functionName: std::unique_lock<pthread_mutex_t>::release
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 284
    functionName: std::unique_lock<pthread_mutex_t>::mutex
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: std::unique_lock<pthread_mutex_t>::owns_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 286
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 297
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 301
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:305,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 307
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 310
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 313
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_trylock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 316
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:320,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:324,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:326,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:326,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:332,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 334
    functionName: std::unique_lock<pthread_spinlock_t>::lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - CHECK
    - LOG
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:338,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:341,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 343
    functionName: std::unique_lock<pthread_spinlock_t>::try_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_trylock
    - CHECK
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:347,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:350,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 352
    functionName: std::unique_lock<pthread_spinlock_t>::unlock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - CHECK
    - pthread_spin_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:355,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 357
    functionName: std::unique_lock<pthread_spinlock_t>::swap
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 364
    functionName: std::unique_lock<pthread_spinlock_t>::release
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: std::unique_lock<pthread_spinlock_t>::mutex
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 367
    functionName: std::unique_lock<pthread_spinlock_t>::owns_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 368
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/butil/scoped_lock.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: std::lock_guard::lock_guard
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - lock
    linkageType: ''
    returnType: void
    signature: void lock_guard(Mutex & mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/butil/scoped_lock.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/butil/scoped_lock.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 2
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/src/butil/scoped_lock.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::unique_lock::try_lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: std::unique_lock::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/butil/scoped_lock.h:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:103,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/butil/scoped_lock.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: std::unique_lock::lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 25
    functionsReached:
    - std::unique_lock::lock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:112,1
    - Dst: std::unique_lock::try_lock
      Src: /src/brpc/src/butil/scoped_lock.h:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 117
    functionName: std::unique_lock::try_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 8
    functionsReached:
    - CHECK
    - std::unique_lock::try_lock
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:121,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/butil/scoped_lock.h:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: std::unique_lock::unlock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 90
    functionsReached:
    - std::unique_lock::unlock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:129,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: std::unique_lock::swap
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: std::unique_lock::release
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 140
    functionName: std::unique_lock::mutex
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: std::unique_lock::owns_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:157,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:159,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:159,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - pthread_mutex_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 155
    functionDepth: 5
    functionLinenumber: 155
    functionLinenumberEnd: 165
    functionName: std::lock_guard<pthread_mutex_t>::lock_guard
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - LOG
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void lock_guard(pthread_mutex_t & mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:170,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 167
    functionDepth: 5
    functionLinenumber: 167
    functionLinenumberEnd: 175
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:186,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:188,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:188,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' spin'
    argTypes:
    - pthread_spinlock_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 194
    functionName: std::lock_guard<pthread_spinlock_t>::lock_guard
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - LOG
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void lock_guard(pthread_spinlock_t & spin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:199,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 204
    functionName: ~lock_guard()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_unlock
    linkageType: ''
    returnType: void
    signature: void ~lock_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 215
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 216
    functionDepth: 5
    functionLinenumber: 216
    functionLinenumberEnd: 219
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 222
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 225
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_trylock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 228
    functionName: std::unique_lock<pthread_mutex_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 230
    functionDepth: 5
    functionLinenumber: 230
    functionLinenumberEnd: 234
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:238,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:242,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:244,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:244,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/scoped_lock.h:250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 236
    functionDepth: 5
    functionLinenumber: 236
    functionLinenumberEnd: 252
    functionName: std::unique_lock<pthread_mutex_t>::lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - CHECK
    - LOG
    - pthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:256,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 254
    functionDepth: 4
    functionLinenumber: 254
    functionLinenumberEnd: 261
    functionName: std::unique_lock<pthread_mutex_t>::try_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_trylock
    - CHECK
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:265,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 263
    functionDepth: 5
    functionLinenumber: 263
    functionLinenumberEnd: 270
    functionName: std::unique_lock<pthread_mutex_t>::unlock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - CHECK
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:273,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 275
    functionName: std::unique_lock<pthread_mutex_t>::swap
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 282
    functionName: std::unique_lock<pthread_mutex_t>::release
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 284
    functionName: std::unique_lock<pthread_mutex_t>::mutex
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: std::unique_lock<pthread_mutex_t>::owns_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 286
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 297
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 301
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:305,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 307
    functionName: ~unique_lock()
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_unlock
    linkageType: ''
    returnType: void
    signature: void ~unique_lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 310
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, defer_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 313
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_trylock
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, try_to_lock_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' mutex'
    argTypes:
    - mutex_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 316
    functionName: std::unique_lock<pthread_spinlock_t>::unique_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_lock(mutex_type& mutex, adopt_lock_t)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:320,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:324,1
    - Dst: LOG
      Src: /src/brpc/src/butil/scoped_lock.h:326,1
    - Dst: berror
      Src: /src/brpc/src/butil/scoped_lock.h:326,1
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/butil/scoped_lock.h:332,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 334
    functionName: std::unique_lock<pthread_spinlock_t>::lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - berror
    - CHECK
    - LOG
    - pthread_spin_lock
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:338,1
    - Dst: pthread_spin_trylock
      Src: /src/brpc/src/butil/scoped_lock.h:341,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 343
    functionName: std::unique_lock<pthread_spinlock_t>::try_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - pthread_spin_trylock
    - CHECK
    linkageType: ''
    returnType: bool
    signature: bool try_lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/scoped_lock.h:347,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/butil/scoped_lock.h:350,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 352
    functionName: std::unique_lock<pthread_spinlock_t>::unlock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - CHECK
    - pthread_spin_unlock
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:355,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/scoped_lock.h:356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - unique_lock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 357
    functionName: std::unique_lock<pthread_spinlock_t>::swap
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_lock& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 364
    functionName: std::unique_lock<pthread_spinlock_t>::release
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: std::unique_lock<pthread_spinlock_t>::mutex
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: mutex_type
    signature: mutex_type * mutex()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 367
    functionName: std::unique_lock<pthread_spinlock_t>::owns_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool owns_lock() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 368
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 0
    functionsReached:
    - owns_lock
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/scoped_lock.h:384,1
    - Dst: std::unique_lock<Mutex1>::owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:384,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/scoped_lock.h:385,1
    - Dst: std::unique_lock<Mutex2>::owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:385,1
    - Dst: std::unique_lock<Mutex1>::mutex
      Src: /src/brpc/src/butil/scoped_lock.h:386,1
    - Dst: std::unique_lock<Mutex2>::mutex
      Src: /src/brpc/src/butil/scoped_lock.h:387,1
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/scoped_lock.h:388,1
    - Dst: std::unique_lock<Mutex1>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:390,1
    - Dst: std::unique_lock<Mutex2>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:391,1
    - Dst: std::unique_lock<Mutex2>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:393,1
    - Dst: std::unique_lock<Mutex1>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - lck1
    - lck2
    argTypes:
    - std::unique_lock<Mutex1>
    - std::unique_lock<Mutex2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 396
    functionName: butil::double_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::unique_lock<Mutex2>::owns_lock
    - std::unique_lock<Mutex2>::mutex
    - DCHECK_NE
    - std::unique_lock<Mutex1>::owns_lock
    - DCHECK
    - std::unique_lock<Mutex1>::mutex
    - std::unique_lock<Mutex1>::lock
    - std::unique_lock<Mutex2>::lock
    linkageType: ''
    returnType: void
    signature: void double_lock(std::unique_lock<Mutex1> &lck1, std::unique_lock<Mutex2>
      &lck2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/scoped_lock.h:384,1
    - Dst: std::unique_lock<Mutex1>::owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:384,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/scoped_lock.h:385,1
    - Dst: std::unique_lock<Mutex2>::owns_lock
      Src: /src/brpc/src/butil/scoped_lock.h:385,1
    - Dst: std::unique_lock<Mutex1>::mutex
      Src: /src/brpc/src/butil/scoped_lock.h:386,1
    - Dst: std::unique_lock<Mutex2>::mutex
      Src: /src/brpc/src/butil/scoped_lock.h:387,1
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/scoped_lock.h:388,1
    - Dst: std::unique_lock<Mutex1>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:390,1
    - Dst: std::unique_lock<Mutex2>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:391,1
    - Dst: std::unique_lock<Mutex2>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:393,1
    - Dst: std::unique_lock<Mutex1>::lock
      Src: /src/brpc/src/butil/scoped_lock.h:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - lck1
    - lck2
    argTypes:
    - std::unique_lock<Mutex1>
    - std::unique_lock<Mutex2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 396
    functionName: butil::double_lock
    functionSourceFile: /src/brpc/src/butil/scoped_lock.h
    functionUses: 4
    functionsReached:
    - std::unique_lock<Mutex2>::owns_lock
    - std::unique_lock<Mutex2>::mutex
    - DCHECK_NE
    - std::unique_lock<Mutex1>::owns_lock
    - DCHECK
    - std::unique_lock<Mutex1>::mutex
    - std::unique_lock<Mutex1>::lock
    - std::unique_lock<Mutex2>::lock
    linkageType: ''
    returnType: void
    signature: void double_lock(std::unique_lock<Mutex1> &lck1, std::unique_lock<Mutex2>
      &lck2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - nbit
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: BIT_ARRAY_LEN
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BIT_ARRAY_LEN(nbit)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/bit_array.h:38,1
    - Dst: BIT_ARRAY_LEN
      Src: /src/brpc/src/butil/bit_array.h:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - nbit
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: butil::bit_array_malloc
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached:
    - BIT_ARRAY_LEN
    - malloc
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t * bit_array_malloc(size_t nbit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/bit_array.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - array
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: butil::bit_array_free
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void bit_array_free(uint64_t* array)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/bit_array.h:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - array
    - nbit
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: butil::bit_array_clear
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 4
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void bit_array_clear(uint64_t* array, size_t nbit)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - array
    - i
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: butil::bit_array_set
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bit_array_set(uint64_t* array, size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - array
    - i
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 65
    functionName: butil::bit_array_unset
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bit_array_unset(uint64_t* array, size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - array
    - i
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 71
    functionName: butil::bit_array_get
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t bit_array_get(const uint64_t* array, size_t i)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/bit_array.h:83,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/src/butil/bit_array.h:83,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/src/butil/bit_array.h:91,1
    - Dst: std::min
      Src: /src/brpc/src/butil/bit_array.h:96,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/src/butil/bit_array.h:96,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 3
    argNames:
    - array
    - begin
    - end
    argTypes:
    - uint64_t*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: butil::bit_array_first1
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached:
    - std::min
    - __builtin_ctzl
    linkageType: ''
    returnType: size_t
    signature: size_t bit_array_first1(const uint64_t* array, size_t begin, size_t
      end)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - nbit
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: BIT_ARRAY_LEN
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BIT_ARRAY_LEN(nbit)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/bit_array.h:38,1
    - Dst: BIT_ARRAY_LEN
      Src: /src/brpc/src/butil/bit_array.h:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - nbit
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: butil::bit_array_malloc
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached:
    - BIT_ARRAY_LEN
    - malloc
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t * bit_array_malloc(size_t nbit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/bit_array.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - array
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: butil::bit_array_free
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void bit_array_free(uint64_t* array)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/bit_array.h:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - array
    - nbit
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: butil::bit_array_clear
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 4
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: void bit_array_clear(uint64_t* array, size_t nbit)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - array
    - i
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: butil::bit_array_set
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bit_array_set(uint64_t* array, size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - array
    - i
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 65
    functionName: butil::bit_array_unset
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void bit_array_unset(uint64_t* array, size_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - array
    - i
    argTypes:
    - uint64_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 71
    functionName: butil::bit_array_get
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t bit_array_get(const uint64_t* array, size_t i)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/bit_array.h:83,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/src/butil/bit_array.h:83,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/src/butil/bit_array.h:91,1
    - Dst: std::min
      Src: /src/brpc/src/butil/bit_array.h:96,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/src/butil/bit_array.h:96,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 3
    argNames:
    - array
    - begin
    - end
    argTypes:
    - uint64_t*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: butil::bit_array_first1
    functionSourceFile: /src/brpc/src/butil/bit_array.h
    functionUses: 0
    functionsReached:
    - std::min
    - __builtin_ctzl
    linkageType: ''
    returnType: size_t
    signature: size_t bit_array_first1(const uint64_t* array, size_t begin, size_t
      end)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SecureHashAlgorithm::Init
      Src: /src/brpc/src/butil/sha1_portable.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::SecureHashAlgorithm::SecureHashAlgorithm
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - butil::SecureHashAlgorithm::Init
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/butil/sha1_portable.cc:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: butil::SecureHashAlgorithm::Digest
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * Digest() const
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - t
    - B
    - C
    - D
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 76
    functionName: butil::f
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t f(uint32_t t, uint32_t B, uint32_t C, uint32_t D)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - n
    - X
    argTypes:
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: butil::S
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t S(uint32_t n, uint32_t X)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 92
    functionName: butil::K
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t K(uint32_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 99
    functionName: butil::swapends
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void swapends(uint32_t* t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 116
    functionName: butil::SecureHashAlgorithm::Init
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Init()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SecureHashAlgorithm::Pad
      Src: /src/brpc/src/butil/sha1_portable.cc:119,1
    - Dst: butil::SecureHashAlgorithm::Process
      Src: /src/brpc/src/butil/sha1_portable.cc:120,1
    - Dst: swapends
      Src: /src/brpc/src/butil/sha1_portable.cc:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 124
    functionName: butil::SecureHashAlgorithm::Final
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - butil::SecureHashAlgorithm::Process
    - butil::SecureHashAlgorithm::Pad
    - swapends
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Final()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const uint8_t*>
      Src: /src/brpc/src/butil/sha1_portable.cc:127,1
    - Dst: butil::SecureHashAlgorithm::Process
      Src: /src/brpc/src/butil/sha1_portable.cc:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - nbytes
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 134
    functionName: butil::SecureHashAlgorithm::Update
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - butil::SecureHashAlgorithm::Process
    - reinterpret_cast<const uint8_t*>
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Update(const void* data, size_t nbytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SecureHashAlgorithm::Process
      Src: /src/brpc/src/butil/sha1_portable.cc:144,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 154
    functionName: butil::SecureHashAlgorithm::Pad
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 1
    functionsReached:
    - butil::SecureHashAlgorithm::Process
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Pad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swapends
      Src: /src/brpc/src/butil/sha1_portable.cc:166,1
    - Dst: S
      Src: /src/brpc/src/butil/sha1_portable.cc:170,1
    - Dst: S
      Src: /src/brpc/src/butil/sha1_portable.cc:181,1
    - Dst: f
      Src: /src/brpc/src/butil/sha1_portable.cc:181,1
    - Dst: K
      Src: /src/brpc/src/butil/sha1_portable.cc:181,1
    - Dst: S
      Src: /src/brpc/src/butil/sha1_portable.cc:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 197
    functionName: butil::SecureHashAlgorithm::Process
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 3
    functionsReached:
    - f
    - K
    - swapends
    - S
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Process()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/butil/sha1_portable.cc:201,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/butil/sha1_portable.cc:201,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/sha1_portable.cc:201,1
    - Dst: butil::length
      Src: /src/brpc/src/butil/sha1_portable.cc:202,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/butil/sha1_portable.cc:202,1
    - Dst: std::string
      Src: /src/brpc/src/butil/sha1_portable.cc:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 204
    functionName: butil::SHA1HashString
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 4
    functionsReached:
    - std::string
    - reinterpret_cast<unsigned char*>
    - butil::SHA1HashBytes
    - reinterpret_cast<const unsigned char*>
    - butil::length
    - butil::c_str
    linkageType: ''
    returnType: std::string
    signature: std::string SHA1HashString(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SecureHashAlgorithm::Update
      Src: /src/brpc/src/butil/sha1_portable.cc:209,1
    - Dst: SecureHashAlgorithm::Final
      Src: /src/brpc/src/butil/sha1_portable.cc:210,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/sha1_portable.cc:212,1
    - Dst: SecureHashAlgorithm::Digest
      Src: /src/brpc/src/butil/sha1_portable.cc:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - data
    - len
    - hash
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 213
    functionName: butil::SHA1HashBytes
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 4
    functionsReached:
    - memcpy
    - SecureHashAlgorithm::Final
    - SecureHashAlgorithm::Update
    - SecureHashAlgorithm::Digest
    linkageType: ''
    returnType: void
    signature: "void SHA1HashBytes(const unsigned char* data, size_t len,\n                   unsigned
      char* hash)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SecureHashAlgorithm::Init
      Src: /src/brpc/src/butil/sha1_portable.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::SecureHashAlgorithm::SecureHashAlgorithm
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - butil::SecureHashAlgorithm::Init
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/butil/sha1_portable.cc:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: butil::SecureHashAlgorithm::Digest
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * Digest() const
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - t
    - B
    - C
    - D
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 76
    functionName: butil::f
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t f(uint32_t t, uint32_t B, uint32_t C, uint32_t D)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - n
    - X
    argTypes:
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: butil::S
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t S(uint32_t n, uint32_t X)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 92
    functionName: butil::K
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t K(uint32_t t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 99
    functionName: butil::swapends
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void swapends(uint32_t* t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 116
    functionName: butil::SecureHashAlgorithm::Init
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Init()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SecureHashAlgorithm::Pad
      Src: /src/brpc/src/butil/sha1_portable.cc:119,1
    - Dst: butil::SecureHashAlgorithm::Process
      Src: /src/brpc/src/butil/sha1_portable.cc:120,1
    - Dst: swapends
      Src: /src/brpc/src/butil/sha1_portable.cc:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 118
    functionDepth: 2
    functionLinenumber: 118
    functionLinenumberEnd: 124
    functionName: butil::SecureHashAlgorithm::Final
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - butil::SecureHashAlgorithm::Process
    - butil::SecureHashAlgorithm::Pad
    - swapends
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Final()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const uint8_t*>
      Src: /src/brpc/src/butil/sha1_portable.cc:127,1
    - Dst: butil::SecureHashAlgorithm::Process
      Src: /src/brpc/src/butil/sha1_portable.cc:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - nbytes
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 134
    functionName: butil::SecureHashAlgorithm::Update
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 0
    functionsReached:
    - butil::SecureHashAlgorithm::Process
    - reinterpret_cast<const uint8_t*>
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Update(const void* data, size_t nbytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SecureHashAlgorithm::Process
      Src: /src/brpc/src/butil/sha1_portable.cc:144,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 136
    functionDepth: 2
    functionLinenumber: 136
    functionLinenumberEnd: 154
    functionName: butil::SecureHashAlgorithm::Pad
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 2
    functionsReached:
    - butil::SecureHashAlgorithm::Process
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Pad()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swapends
      Src: /src/brpc/src/butil/sha1_portable.cc:166,1
    - Dst: S
      Src: /src/brpc/src/butil/sha1_portable.cc:170,1
    - Dst: S
      Src: /src/brpc/src/butil/sha1_portable.cc:181,1
    - Dst: f
      Src: /src/brpc/src/butil/sha1_portable.cc:181,1
    - Dst: K
      Src: /src/brpc/src/butil/sha1_portable.cc:181,1
    - Dst: S
      Src: /src/brpc/src/butil/sha1_portable.cc:184,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 197
    functionName: butil::SecureHashAlgorithm::Process
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 6
    functionsReached:
    - f
    - K
    - swapends
    - S
    linkageType: ''
    returnType: void
    signature: void SecureHashAlgorithm::Process()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/butil/sha1_portable.cc:201,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/butil/sha1_portable.cc:201,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/sha1_portable.cc:201,1
    - Dst: butil::length
      Src: /src/brpc/src/butil/sha1_portable.cc:202,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/butil/sha1_portable.cc:202,1
    - Dst: std::string
      Src: /src/brpc/src/butil/sha1_portable.cc:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 199
    functionDepth: 2
    functionLinenumber: 199
    functionLinenumberEnd: 204
    functionName: butil::SHA1HashString
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 4
    functionsReached:
    - std::string
    - reinterpret_cast<unsigned char*>
    - butil::SHA1HashBytes
    - reinterpret_cast<const unsigned char*>
    - butil::length
    - butil::c_str
    linkageType: ''
    returnType: std::string
    signature: std::string SHA1HashString(const std::string& str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SecureHashAlgorithm::Update
      Src: /src/brpc/src/butil/sha1_portable.cc:209,1
    - Dst: SecureHashAlgorithm::Final
      Src: /src/brpc/src/butil/sha1_portable.cc:210,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/sha1_portable.cc:212,1
    - Dst: SecureHashAlgorithm::Digest
      Src: /src/brpc/src/butil/sha1_portable.cc:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - data
    - len
    - hash
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 213
    functionName: butil::SHA1HashBytes
    functionSourceFile: /src/brpc/src/butil/sha1_portable.cc
    functionUses: 5
    functionsReached:
    - memcpy
    - SecureHashAlgorithm::Final
    - SecureHashAlgorithm::Update
    - SecureHashAlgorithm::Digest
    linkageType: ''
    returnType: void
    signature: "void SHA1HashBytes(const unsigned char* data, size_t len,\n                   unsigned
      char* hash)"
  - BBCount: 32
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:96,1
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:103,1
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:167,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:170,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:190,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:199,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:200,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:204,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/object_pool_inl.h:209,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:213,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:214,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:218,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:226,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:238,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:241,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:248,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:269,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:270,1
    - Dst: LocalPool*::free_empty
      Src: /src/brpc/src/butil/object_pool_inl.h:271,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:278,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:280,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:282,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:288,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:289,1
    - Dst: LocalPool*::return_object
      Src: /src/brpc/src/butil/object_pool_inl.h:290,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/object_pool_inl.h:299,1
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/object_pool_inl.h:305,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:312,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:313,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:316,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:319,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:323,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:331,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:342,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:346,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:347,1
    - Dst: ObjectPool::ObjectPool
      Src: /src/brpc/src/butil/object_pool_inl.h:349,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:350,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:352,1
    - Dst: butil::ObjectPool
      Src: /src/brpc/src/butil/object_pool_inl.h:357,1
    - Dst: reserve
      Src: /src/brpc/src/butil/object_pool_inl.h:358,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/butil/object_pool_inl.h:359,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/object_pool_inl.h:363,1
    - Dst: Block::Block
      Src: /src/brpc/src/butil/object_pool_inl.h:368,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:374,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:377,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:379,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:381,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:386,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/object_pool_inl.h:388,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:399,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:400,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/object_pool_inl.h:406,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:410,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:411,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:419,1
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/object_pool_inl.h:422,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:426,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/object_pool_inl.h:428,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:429,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:438,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:448,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:450,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:458,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/object_pool_inl.h:461,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:463,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:470,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:477,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:478,1
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:485,1
    - Dst: if
      Src: /src/brpc/src/butil/object_pool_inl.h:493,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/object_pool_inl.h:493,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:496,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/object_pool_inl.h:497,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:498,1
    - Dst: back
      Src: /src/brpc/src/butil/object_pool_inl.h:501,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/object_pool_inl.h:502,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:503,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/object_pool_inl.h:505,1
    - Dst: free
      Src: /src/brpc/src/butil/object_pool_inl.h:506,1
    CyclomaticComplexity: 46
    EdgeCount: 46
    ICount: 230
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 88
    functionDepth: 5
    functionLinenumber: 88
    functionLinenumberEnd: 508
    functionName: butil::ObjectPool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached:
    - std::forward<Args>
    - butil::ObjectPool
    - butil::validate
    - pthread_mutex_destroy
    - static_cast<void*>
    - T*::~T
    - pthread_mutex_lock
    - if
    - butil::fetch_sub
    - OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    - BAIDU_OBJECT_POOL_GET
    - LocalPool::LocalPool
    - butil::add_block_group
    - butil::exchange
    - explicit::push_free_chunk
    - OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    - butil::thread_atexit_cancel
    - LocalPool*::get
    - butil::Summer::value
    - LocalPool*::return_object
    - pthread_mutex_init
    - memcpy
    - CTOR_ARGS::CTOR_ARGS
    - BAIDU_LIKELY
    - Block::Block
    - free
    - auto::void_data
    - BlockGroup*::nblock::fetch_sub
    - butil::free_chunk_nitem
    - memset
    - butil::get_or_new_local_pool
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - LocalPool*::free_empty
    - ObjectPool::ObjectPool
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    - explicit::clear_from_destructor_of_local_pool
    - BlockGroup*::nblock::load
    - butil::fetch_add
    - BlockGroup*::nblock::fetch_add
    - back
    - butil::empty
    - pop_back
    - butil::thread_atexit
    - std::min
    - BUTIL_ASAN_POISON_MEMORY_REGION
    - butil::load
    - BlockGroup::BlockGroup
    - explicit::pop_free_chunk
    - butil::add_block
    - reserve
    - pop_free_chunk
    - butil::store
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ObjectPool
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:96,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 97
    functionName: butil::asan_poison_memory_region
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - BUTIL_ASAN_POISON_MEMORY_REGION
    linkageType: ''
    returnType: void
    signature: void asan_poison_memory_region(T* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: butil::asan_unpoison_memory_region
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    linkageType: ''
    returnType: void
    signature: void asan_unpoison_memory_region(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 106
    functionName: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_POISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 107
    functionName: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 109
    functionName: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_POISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 110
    functionName: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 137
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Block
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 151
    functionName: butil::BlockGroup
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void BlockGroup()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:167,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:170,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:190,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:199,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:200,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:204,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/object_pool_inl.h:209,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:213,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:214,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:218,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:226,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:238,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:241,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:248,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 266
    functionName: butil::LocalPool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - explicit::push_free_chunk
    - butil::validate
    - auto::void_data
    - T*::~T
    - butil::free_chunk_nitem
    - explicit::clear_from_destructor_of_local_pool
    - explicit::pop_free_chunk
    - butil::add_block
    - CTOR_ARGS::CTOR_ARGS
    - OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    - BAIDU_OBJECT_POOL_GET
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT LocalPool
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:167,1
    - Dst: butil::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: ~LocalPool()
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - butil::clear_from_destructor_of_local_pool
    - butil::push_free_chunk
    linkageType: ''
    returnType: void
    signature: void ~LocalPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: butil::delete_local_pool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void delete_local_pool(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - CTOR_ARGS
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: BAIDU_OBJECT_POOL_GET
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_OBJECT_POOL_GET(CTOR_ARGS)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 227
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 14
    functionsReached:
    - BAIDU_OBJECT_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 232
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 14
    functionsReached:
    - std::forward<Args>
    - BAIDU_OBJECT_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get(Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:238,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:241,1
    - Dst: butil::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:248,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: butil::return_object
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 38
    functionsReached:
    - butil::free_chunk_nitem
    - OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    - butil::push_free_chunk
    linkageType: ''
    returnType: int
    signature: int return_object(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 259
    functionName: butil::free_empty
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool free_empty() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:269,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:270,1
    - Dst: LocalPool*::free_empty
      Src: /src/brpc/src/butil/object_pool_inl.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 274
    functionName: butil::local_free_empty
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - LocalPool*::free_empty
    - BAIDU_LIKELY
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: bool
    signature: bool local_free_empty()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:278,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:280,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:282,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 285
    functionName: butil::get_object
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - BAIDU_LIKELY
    - OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    - LocalPool*::get
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: T
    signature: T * get_object(Args&&... args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:288,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:289,1
    - Dst: LocalPool*::return_object
      Src: /src/brpc/src/butil/object_pool_inl.h:290,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 293
    functionName: butil::return_object
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 38
    functionsReached:
    - LocalPool*::return_object
    - BAIDU_LIKELY
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: int
    signature: int return_object(T* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/object_pool_inl.h:299,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 295
    functionDepth: 2
    functionLinenumber: 295
    functionLinenumberEnd: 302
    functionName: butil::clear_objects
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - butil::thread_atexit_cancel
    linkageType: ''
    returnType: void
    signature: void clear_objects()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/object_pool_inl.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 304
    functionDepth: 1
    functionLinenumber: 304
    functionLinenumberEnd: 307
    functionName: butil::free_chunk_nitem
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 3
    functionsReached:
    - butil::Summer::value
    linkageType: ''
    returnType: size_t
    signature: size_t free_chunk_nitem()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:312,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:313,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:316,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:319,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:323,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:331,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 310
    functionDepth: 1
    functionLinenumber: 310
    functionLinenumberEnd: 339
    functionName: butil::describe_objects
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - butil::free_chunk_nitem
    - BlockGroup*::nblock::load
    - butil::load
    linkageType: ''
    returnType: ObjectPoolInfo
    signature: ObjectPoolInfo describe_objects() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:342,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:346,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:347,1
    - Dst: ObjectPool::ObjectPool
      Src: /src/brpc/src/butil/object_pool_inl.h:349,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:350,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:352,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 341
    functionDepth: 5
    functionLinenumber: 341
    functionLinenumberEnd: 354
    functionName: butil::singleton
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::load
    - ObjectPool::ObjectPool
    - butil::store
    linkageType: ''
    returnType: ObjectPool
    signature: ObjectPool * singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/object_pool_inl.h:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 362
    functionDepth: 2
    functionLinenumber: 362
    functionLinenumberEnd: 364
    functionName: ~ObjectPool()
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~ObjectPool()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Block::Block
      Src: /src/brpc/src/butil/object_pool_inl.h:368,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:374,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:377,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:379,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:381,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:386,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/object_pool_inl.h:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 393
    functionName: butil::add_block
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 2
    functionsReached:
    - butil::add_block_group
    - Block::Block
    - BlockGroup*::nblock::fetch_sub
    - butil::load
    - butil::store
    - BlockGroup*::nblock::fetch_add
    linkageType: ''
    returnType: Block
    signature: Block * add_block(size_t* index)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:399,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:400,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/object_pool_inl.h:406,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:410,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - old_ngroup
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 415
    functionName: butil::add_block_group
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 2
    functionsReached:
    - butil::store
    - BlockGroup::BlockGroup
    - butil::load
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool add_block_group(size_t old_ngroup)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:419,1
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/object_pool_inl.h:422,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:426,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/object_pool_inl.h:428,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:429,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 417
    functionDepth: 2
    functionLinenumber: 417
    functionLinenumberEnd: 431
    functionName: butil::get_or_new_local_pool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached:
    - BAIDU_LIKELY
    - butil::thread_atexit
    - BAIDU_SCOPED_LOCK
    - butil::fetch_add
    - LocalPool::LocalPool
    linkageType: ''
    returnType: LocalPool
    signature: LocalPool * get_or_new_local_pool()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:438,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:448,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:450,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:458,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/object_pool_inl.h:461,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:463,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:470,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:477,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:478,1
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:485,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 487
    functionName: butil::clear_from_destructor_of_local_pool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached:
    - OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    - std::min
    - T*::~T
    - memset
    - butil::load
    - BAIDU_SCOPED_LOCK
    - butil::fetch_sub
    - butil::exchange
    - BlockGroup*::nblock::load
    - pop_free_chunk
    linkageType: ''
    returnType: void
    signature: void clear_from_destructor_of_local_pool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/object_pool_inl.h:511,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/object_pool_inl.h:517,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:518,1
    - Dst: push_back
      Src: /src/brpc/src/butil/object_pool_inl.h:519,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:520,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - FreeChunk
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 510
    functionDepth: 5
    functionLinenumber: 510
    functionLinenumberEnd: 522
    functionName: butil::push_free_chunk
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 2
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - malloc
    - push_back
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool push_free_chunk(const FreeChunk& c)
  - BBCount: 32
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:96,1
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:103,1
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:167,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:170,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:190,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:199,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:200,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:204,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/object_pool_inl.h:209,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:213,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:214,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:218,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:226,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:238,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:241,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:248,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:269,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:270,1
    - Dst: LocalPool*::free_empty
      Src: /src/brpc/src/butil/object_pool_inl.h:271,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:278,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:280,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:282,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:288,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:289,1
    - Dst: LocalPool*::return_object
      Src: /src/brpc/src/butil/object_pool_inl.h:290,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/object_pool_inl.h:299,1
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/object_pool_inl.h:305,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:312,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:313,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:316,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:319,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:323,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:331,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:342,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:346,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:347,1
    - Dst: ObjectPool::ObjectPool
      Src: /src/brpc/src/butil/object_pool_inl.h:349,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:350,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:352,1
    - Dst: butil::ObjectPool
      Src: /src/brpc/src/butil/object_pool_inl.h:357,1
    - Dst: reserve
      Src: /src/brpc/src/butil/object_pool_inl.h:358,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/butil/object_pool_inl.h:359,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/object_pool_inl.h:363,1
    - Dst: Block::Block
      Src: /src/brpc/src/butil/object_pool_inl.h:368,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:374,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:377,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:379,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:381,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:386,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/object_pool_inl.h:388,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:399,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:400,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/object_pool_inl.h:406,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:410,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:411,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:419,1
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/object_pool_inl.h:422,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:426,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/object_pool_inl.h:428,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:429,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:438,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:448,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:450,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:458,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/object_pool_inl.h:461,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:463,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:470,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:477,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:478,1
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:485,1
    - Dst: if
      Src: /src/brpc/src/butil/object_pool_inl.h:493,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/object_pool_inl.h:493,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:496,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/object_pool_inl.h:497,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:498,1
    - Dst: back
      Src: /src/brpc/src/butil/object_pool_inl.h:501,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/object_pool_inl.h:502,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:503,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/object_pool_inl.h:505,1
    - Dst: free
      Src: /src/brpc/src/butil/object_pool_inl.h:506,1
    CyclomaticComplexity: 46
    EdgeCount: 46
    ICount: 230
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 88
    functionDepth: 5
    functionLinenumber: 88
    functionLinenumberEnd: 508
    functionName: butil::ObjectPool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 2
    functionsReached:
    - std::forward<Args>
    - butil::ObjectPool
    - butil::validate
    - pthread_mutex_destroy
    - static_cast<void*>
    - T*::~T
    - pthread_mutex_lock
    - if
    - butil::fetch_sub
    - OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    - BAIDU_OBJECT_POOL_GET
    - LocalPool::LocalPool
    - butil::add_block_group
    - butil::exchange
    - explicit::push_free_chunk
    - OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    - butil::thread_atexit_cancel
    - LocalPool*::get
    - butil::Summer::value
    - LocalPool*::return_object
    - pthread_mutex_init
    - memcpy
    - CTOR_ARGS::CTOR_ARGS
    - BAIDU_LIKELY
    - Block::Block
    - free
    - auto::void_data
    - BlockGroup*::nblock::fetch_sub
    - butil::free_chunk_nitem
    - memset
    - butil::get_or_new_local_pool
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - LocalPool*::free_empty
    - ObjectPool::ObjectPool
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    - explicit::clear_from_destructor_of_local_pool
    - BlockGroup*::nblock::load
    - butil::fetch_add
    - BlockGroup*::nblock::fetch_add
    - back
    - butil::empty
    - pop_back
    - butil::thread_atexit
    - std::min
    - BUTIL_ASAN_POISON_MEMORY_REGION
    - butil::load
    - BlockGroup::BlockGroup
    - explicit::pop_free_chunk
    - butil::add_block
    - reserve
    - pop_free_chunk
    - butil::store
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ObjectPool
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:96,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 97
    functionName: butil::asan_poison_memory_region
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - BUTIL_ASAN_POISON_MEMORY_REGION
    linkageType: ''
    returnType: void
    signature: void asan_poison_memory_region(T* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: butil::asan_unpoison_memory_region
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    linkageType: ''
    returnType: void
    signature: void asan_unpoison_memory_region(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 106
    functionName: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_POISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 107
    functionName: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 109
    functionName: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_POISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 110
    functionName: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 137
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Block
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/object_pool_inl.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 151
    functionName: butil::BlockGroup
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void BlockGroup()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:167,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:170,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:190,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:198,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:199,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:200,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:204,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/object_pool_inl.h:209,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/object_pool_inl.h:212,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/object_pool_inl.h:213,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:214,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:218,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:226,1
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:238,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:241,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:248,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 266
    functionName: butil::LocalPool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - explicit::push_free_chunk
    - butil::validate
    - auto::void_data
    - T*::~T
    - butil::free_chunk_nitem
    - explicit::clear_from_destructor_of_local_pool
    - explicit::pop_free_chunk
    - butil::add_block
    - CTOR_ARGS::CTOR_ARGS
    - OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    - BAIDU_OBJECT_POOL_GET
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT LocalPool
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:167,1
    - Dst: clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: ~LocalPool()
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - push_free_chunk
    - clear_from_destructor_of_local_pool
    linkageType: ''
    returnType: void
    signature: void ~LocalPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 175
    functionName: butil::delete_local_pool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void delete_local_pool(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - CTOR_ARGS
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: BAIDU_OBJECT_POOL_GET
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_OBJECT_POOL_GET(CTOR_ARGS)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 227
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 14
    functionsReached:
    - BAIDU_OBJECT_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_OBJECT_POOL_GET
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 232
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 14
    functionsReached:
    - std::forward<Args>
    - BAIDU_OBJECT_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get(Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OBJECT_POOL_ASAN_POISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:238,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:241,1
    - Dst: butil::push_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:248,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 255
    functionName: butil::return_object
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 38
    functionsReached:
    - butil::free_chunk_nitem
    - OBJECT_POOL_ASAN_POISON_MEMORY_REGION
    - butil::push_free_chunk
    linkageType: ''
    returnType: int
    signature: int return_object(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 259
    functionName: butil::free_empty
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool free_empty() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:269,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:270,1
    - Dst: LocalPool*::free_empty
      Src: /src/brpc/src/butil/object_pool_inl.h:271,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 274
    functionName: butil::local_free_empty
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - LocalPool*::free_empty
    - BAIDU_LIKELY
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: bool
    signature: bool local_free_empty()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:278,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:280,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool_inl.h:281,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:282,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 285
    functionName: butil::get_object
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - BAIDU_LIKELY
    - OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    - LocalPool*::get
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: T
    signature: T * get_object(Args&&... args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/object_pool_inl.h:288,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:289,1
    - Dst: LocalPool*::return_object
      Src: /src/brpc/src/butil/object_pool_inl.h:290,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 293
    functionName: butil::return_object
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 38
    functionsReached:
    - LocalPool*::return_object
    - BAIDU_LIKELY
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: int
    signature: int return_object(T* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/object_pool_inl.h:299,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 295
    functionDepth: 2
    functionLinenumber: 295
    functionLinenumberEnd: 302
    functionName: butil::clear_objects
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - butil::thread_atexit_cancel
    linkageType: ''
    returnType: void
    signature: void clear_objects()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/object_pool_inl.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 304
    functionDepth: 1
    functionLinenumber: 304
    functionLinenumberEnd: 307
    functionName: butil::free_chunk_nitem
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 7
    functionsReached:
    - butil::Summer::value
    linkageType: ''
    returnType: size_t
    signature: size_t free_chunk_nitem()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:312,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:313,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/object_pool_inl.h:316,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:319,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:323,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:327,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:331,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 310
    functionDepth: 1
    functionLinenumber: 310
    functionLinenumberEnd: 339
    functionName: butil::describe_objects
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - butil::free_chunk_nitem
    - BlockGroup*::nblock::load
    - butil::load
    linkageType: ''
    returnType: ObjectPoolInfo
    signature: ObjectPoolInfo describe_objects() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:342,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:346,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:347,1
    - Dst: ObjectPool::ObjectPool
      Src: /src/brpc/src/butil/object_pool_inl.h:349,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:350,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:352,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 341
    functionDepth: 5
    functionLinenumber: 341
    functionLinenumberEnd: 354
    functionName: butil::singleton
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::load
    - ObjectPool::ObjectPool
    - butil::store
    linkageType: ''
    returnType: ObjectPool
    signature: ObjectPool * singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/object_pool_inl.h:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 362
    functionDepth: 2
    functionLinenumber: 362
    functionLinenumberEnd: 364
    functionName: ~ObjectPool()
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~ObjectPool()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Block::Block
      Src: /src/brpc/src/butil/object_pool_inl.h:368,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:374,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:377,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:379,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:381,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:386,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/object_pool_inl.h:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 393
    functionName: butil::add_block
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached:
    - butil::add_block_group
    - Block::Block
    - BlockGroup*::nblock::fetch_sub
    - butil::load
    - butil::store
    - BlockGroup*::nblock::fetch_add
    linkageType: ''
    returnType: Block
    signature: Block * add_block(size_t* index)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:399,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:400,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/object_pool_inl.h:406,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:410,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/object_pool_inl.h:411,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - old_ngroup
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 415
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 415
    functionName: butil::add_block_group
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 4
    functionsReached:
    - butil::store
    - BlockGroup::BlockGroup
    - butil::load
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool add_block_group(size_t old_ngroup)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/object_pool_inl.h:419,1
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/object_pool_inl.h:422,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:426,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/object_pool_inl.h:428,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/object_pool_inl.h:429,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 417
    functionDepth: 2
    functionLinenumber: 417
    functionLinenumberEnd: 431
    functionName: butil::get_or_new_local_pool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 8
    functionsReached:
    - BAIDU_LIKELY
    - butil::thread_atexit
    - BAIDU_SCOPED_LOCK
    - butil::fetch_add
    - LocalPool::LocalPool
    linkageType: ''
    returnType: LocalPool
    signature: LocalPool * get_or_new_local_pool()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/object_pool_inl.h:438,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/object_pool_inl.h:448,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:450,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/object_pool_inl.h:458,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/object_pool_inl.h:461,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:463,1
    - Dst: std::min
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/object_pool_inl.h:467,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/object_pool_inl.h:470,1
    - Dst: OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
      Src: /src/brpc/src/butil/object_pool_inl.h:477,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/object_pool_inl.h:478,1
    - Dst: memset
      Src: /src/brpc/src/butil/object_pool_inl.h:485,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 487
    functionName: butil::clear_from_destructor_of_local_pool
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 1
    functionsReached:
    - OBJECT_POOL_ASAN_UNPOISON_MEMORY_REGION
    - std::min
    - T*::~T
    - memset
    - butil::load
    - BAIDU_SCOPED_LOCK
    - butil::fetch_sub
    - butil::exchange
    - BlockGroup*::nblock::load
    - pop_free_chunk
    linkageType: ''
    returnType: void
    signature: void clear_from_destructor_of_local_pool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/object_pool_inl.h:511,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/object_pool_inl.h:517,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/object_pool_inl.h:518,1
    - Dst: push_back
      Src: /src/brpc/src/butil/object_pool_inl.h:519,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/object_pool_inl.h:520,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - FreeChunk
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 510
    functionDepth: 5
    functionLinenumber: 510
    functionLinenumberEnd: 522
    functionName: butil::push_free_chunk
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 3
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - malloc
    - push_back
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool push_free_chunk(const FreeChunk& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' info'
    argTypes:
    - std::ostream
    - ObjectPoolInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 590
    functionName: "& operator<<(std::ostream& os,\n                                ObjectPoolInfo
      const& info)"
    functionSourceFile: /src/brpc/src/butil/object_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: "std::ostream & operator<<(std::ostream& os,\n                                ObjectPoolInfo
      const& info)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - message_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 30
    functionName: butil::status_size
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t status_size(size_t message_size)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:34,1
    - Dst: std::max
      Src: /src/brpc/src/butil/status.cpp:43,1
    - Dst: strlen
      Src: /src/brpc/src/butil/status.cpp:43,1
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:44,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:45,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:45,1
    - Dst: va_copy
      Src: /src/brpc/src/butil/status.cpp:54,1
    - Dst: vsnprintf
      Src: /src/brpc/src/butil/status.cpp:55,1
    - Dst: va_end
      Src: /src/brpc/src/butil/status.cpp:56,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:58,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:69,1
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:70,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:71,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:71,1
    - Dst: vsnprintf
      Src: /src/brpc/src/butil/status.cpp:79,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:81,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:84,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 3
    argNames:
    - c
    - fmt
    - args
    argTypes:
    - int
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 88
    functionName: butil::Status::set_errorv
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 4
    functionsReached:
    - std::max
    - reinterpret_cast<State*>
    - free
    - vsnprintf
    - malloc
    - va_copy
    - status_size
    - va_end
    - strlen
    linkageType: ''
    returnType: int
    signature: int Status::set_errorv(int c, const char* fmt, va_list args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:92,1
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:96,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:96,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:98,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:98,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:103,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:107,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/status.cpp:108,1
    - Dst: data
      Src: /src/brpc/src/butil/status.cpp:108,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:108,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:109,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - c
    - ' error_msg'
    argTypes:
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 111
    functionName: butil::Status::set_error
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 6
    functionsReached:
    - reinterpret_cast<State*>
    - free
    - malloc
    - status_size
    - data
    - memcpy
    - size
    linkageType: ''
    returnType: int
    signature: int Status::set_error(int c, const butil::StringPiece& error_msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:114,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:115,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:115,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/status.cpp:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - State*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 127
    functionName: butil::Status::copy_state
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - status_size
    - reinterpret_cast<State*>
    - memcpy
    linkageType: ''
    returnType: Status::State
    signature: Status::State * Status::copy_state(const State* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/butil/status.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 135
    functionName: butil::Status::error_str
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 12
    functionsReached:
    - std::string
    linkageType: ''
    returnType: std::string
    signature: std::string Status::error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - message_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 30
    functionName: butil::status_size
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t status_size(size_t message_size)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:34,1
    - Dst: std::max
      Src: /src/brpc/src/butil/status.cpp:43,1
    - Dst: strlen
      Src: /src/brpc/src/butil/status.cpp:43,1
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:44,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:45,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:45,1
    - Dst: va_copy
      Src: /src/brpc/src/butil/status.cpp:54,1
    - Dst: vsnprintf
      Src: /src/brpc/src/butil/status.cpp:55,1
    - Dst: va_end
      Src: /src/brpc/src/butil/status.cpp:56,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:58,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:69,1
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:70,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:71,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:71,1
    - Dst: vsnprintf
      Src: /src/brpc/src/butil/status.cpp:79,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:81,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:84,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 3
    argNames:
    - c
    - fmt
    - args
    argTypes:
    - int
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 88
    functionName: butil::Status::set_errorv
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 4
    functionsReached:
    - std::max
    - reinterpret_cast<State*>
    - free
    - vsnprintf
    - malloc
    - va_copy
    - status_size
    - va_end
    - strlen
    linkageType: ''
    returnType: int
    signature: int Status::set_errorv(int c, const char* fmt, va_list args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:92,1
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:96,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:96,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:98,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:98,1
    - Dst: free
      Src: /src/brpc/src/butil/status.cpp:103,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:107,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/status.cpp:108,1
    - Dst: data
      Src: /src/brpc/src/butil/status.cpp:108,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:108,1
    - Dst: size
      Src: /src/brpc/src/butil/status.cpp:109,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - c
    - ' error_msg'
    argTypes:
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 111
    functionName: butil::Status::set_error
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 6
    functionsReached:
    - reinterpret_cast<State*>
    - free
    - malloc
    - status_size
    - data
    - memcpy
    - size
    linkageType: ''
    returnType: int
    signature: int Status::set_error(int c, const butil::StringPiece& error_msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: status_size
      Src: /src/brpc/src/butil/status.cpp:114,1
    - Dst: reinterpret_cast<State*>
      Src: /src/brpc/src/butil/status.cpp:115,1
    - Dst: malloc
      Src: /src/brpc/src/butil/status.cpp:115,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/status.cpp:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - State*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 127
    functionName: butil::Status::copy_state
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - status_size
    - reinterpret_cast<State*>
    - memcpy
    linkageType: ''
    returnType: Status::State
    signature: Status::State * Status::copy_state(const State* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/butil/status.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 135
    functionName: butil::Status::error_str
    functionSourceFile: /src/brpc/src/butil/status.cpp
    functionUses: 12
    functionsReached:
    - std::string
    linkageType: ''
    returnType: std::string
    signature: std::string Status::error_str() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - function_name
    - file_name
    - line_number
    - program_counter
    argTypes:
    - char*
    - char*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 28
    functionName: tracked_objects::Location::Location
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Location::Location(const char* function_name,\n                   const
      char* file_name,\n                   int line_number,\n                   const
      void* program_counter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: tracked_objects::Location::Location
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Location::Location()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/butil/location.cc:38,1
    - Dst: butil::IntToString
      Src: /src/brpc/src/butil/location.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 40
    functionName: tracked_objects::Location::ToString
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - std::string
    linkageType: ''
    returnType: std::string
    signature: std::string Location::ToString() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/src/butil/location.cc:44,1
    - Dst: tracked_objects::Location::WriteFunctionName
      Src: /src/brpc/src/butil/location.cc:49,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/butil/location.cc:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - display_filename
    - display_function_name
    - output
    argTypes:
    - bool
    - bool
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 52
    functionName: tracked_objects::Location::Write
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - std::string*::push_back
    - tracked_objects::Location::WriteFunctionName
    linkageType: ''
    returnType: void
    signature: "void Location::Write(bool display_filename, bool display_function_name,\n
      \                    std::string* output) const"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::append
      Src: /src/brpc/src/butil/location.cc:60,1
    - Dst: std::string*::append
      Src: /src/brpc/src/butil/location.cc:64,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/butil/location.cc:68,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - output
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 72
    functionName: tracked_objects::Location::WriteFunctionName
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void Location::WriteFunctionName(std::string* output) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 76
    functionName: tracked_objects::LocationSnapshot::LocationSnapshot
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocationSnapshot::LocationSnapshot()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: file_name
      Src: /src/brpc/src/butil/location.cc:80,1
    - Dst: function_name
      Src: /src/brpc/src/butil/location.cc:81,1
    - Dst: line_number
      Src: /src/brpc/src/butil/location.cc:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' location'
    argTypes:
    - tracked_objects::Location
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 83
    functionName: tracked_objects::LocationSnapshot::LocationSnapshot
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - line_number
    - function_name
    - file_name
    linkageType: ''
    returnType: void
    signature: "void LocationSnapshot::LocationSnapshot(\n    const tracked_objects::Location&
      location)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 86
    functionName: LocationSnapshot::~LocationSnapshot()
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocationSnapshot::~LocationSnapshot()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _ReturnAddress
      Src: /src/brpc/src/butil/location.cc:94,1
    - Dst: __builtin_extract_return_addr
      Src: /src/brpc/src/butil/location.cc:96,1
    - Dst: __builtin_return_address
      Src: /src/brpc/src/butil/location.cc:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 100
    functionName: tracked_objects::GetProgramCounter
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - __builtin_extract_return_addr
    - _ReturnAddress
    - __builtin_return_address
    linkageType: ''
    returnType: BUTIL_EXPORT
    signature: BUTIL_EXPORT * GetProgramCounter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - function_name
    - file_name
    - line_number
    - program_counter
    argTypes:
    - char*
    - char*
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 28
    functionName: tracked_objects::Location::Location
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void Location::Location(const char* function_name,\n                   const
      char* file_name,\n                   int line_number,\n                   const
      void* program_counter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: tracked_objects::Location::Location
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Location::Location()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/src/butil/location.cc:38,1
    - Dst: butil::IntToString
      Src: /src/brpc/src/butil/location.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 40
    functionName: tracked_objects::Location::ToString
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - butil::IntToString
    - std::string
    linkageType: ''
    returnType: std::string
    signature: std::string Location::ToString() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringAppendF
      Src: /src/brpc/src/butil/location.cc:44,1
    - Dst: tracked_objects::Location::WriteFunctionName
      Src: /src/brpc/src/butil/location.cc:49,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/butil/location.cc:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - display_filename
    - display_function_name
    - output
    argTypes:
    - bool
    - bool
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 42
    functionDepth: 2
    functionLinenumber: 42
    functionLinenumberEnd: 52
    functionName: tracked_objects::Location::Write
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - butil::StringAppendF
    - std::string*::push_back
    - tracked_objects::Location::WriteFunctionName
    linkageType: ''
    returnType: void
    signature: "void Location::Write(bool display_filename, bool display_function_name,\n
      \                    std::string* output) const"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::append
      Src: /src/brpc/src/butil/location.cc:60,1
    - Dst: std::string*::append
      Src: /src/brpc/src/butil/location.cc:64,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/butil/location.cc:68,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - output
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 72
    functionName: tracked_objects::Location::WriteFunctionName
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 2
    functionsReached:
    - std::string*::append
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void Location::WriteFunctionName(std::string* output) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 76
    functionName: tracked_objects::LocationSnapshot::LocationSnapshot
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocationSnapshot::LocationSnapshot()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: file_name
      Src: /src/brpc/src/butil/location.cc:80,1
    - Dst: function_name
      Src: /src/brpc/src/butil/location.cc:81,1
    - Dst: line_number
      Src: /src/brpc/src/butil/location.cc:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' location'
    argTypes:
    - tracked_objects::Location
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 83
    functionName: tracked_objects::LocationSnapshot::LocationSnapshot
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - line_number
    - function_name
    - file_name
    linkageType: ''
    returnType: void
    signature: "void LocationSnapshot::LocationSnapshot(\n    const tracked_objects::Location&
      location)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 86
    functionName: LocationSnapshot::~LocationSnapshot()
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void LocationSnapshot::~LocationSnapshot()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _ReturnAddress
      Src: /src/brpc/src/butil/location.cc:94,1
    - Dst: __builtin_extract_return_addr
      Src: /src/brpc/src/butil/location.cc:96,1
    - Dst: __builtin_return_address
      Src: /src/brpc/src/butil/location.cc:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 100
    functionName: tracked_objects::GetProgramCounter
    functionSourceFile: /src/brpc/src/butil/location.cc
    functionUses: 0
    functionsReached:
    - __builtin_extract_return_addr
    - _ReturnAddress
    - __builtin_return_address
    linkageType: ''
    returnType: BUTIL_EXPORT
    signature: BUTIL_EXPORT * GetProgramCounter()
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - v
    argTypes:
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 208
    functionName: std::atomic_thread_fence
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE atomic_thread_fence(memory_order v)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - v
    argTypes:
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 214
    functionName: std::atomic_signal_fence
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE atomic_signal_fence(memory_order v)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - v
    argTypes:
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 208
    functionName: std::atomic_thread_fence
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE atomic_thread_fence(memory_order v)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - v
    argTypes:
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 214
    functionName: std::atomic_signal_fence
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE atomic_signal_fence(memory_order v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::store
      Src: /src/brpc/src/butil/atomicops.h:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 237
    functionName: '& operator=(T v)'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - butil::store
    linkageType: ''
    returnType: atomic
    signature: atomic & operator=(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/butil/atomicops.h:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 237
    functionName: '& operator=(T v)'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: atomic
    signature: atomic & operator=(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 260
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::store
      Src: /src/brpc/src/butil/atomicops.h:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 265
    functionName: '& operator=(T v)'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - butil::store
    linkageType: ''
    returnType: atomic
    signature: atomic & operator=(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 260
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    functionName: butil::atomic::atomic
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void atomic(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/butil/atomicops.h:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 265
    functionName: '& operator=(T v)'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: atomic
    signature: atomic & operator=(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - val
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 285
    functionName: BUTIL_STATIC_ATOMIC_INIT
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_STATIC_ATOMIC_INIT(val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - o
    argTypes:
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 291
    functionName: butil::load
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 16
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T load(memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 292
    functionName: butil::store
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 10
    functionsReached:
    - ref
    linkageType: ''
    returnType: void
    signature: void store(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 293
    functionName: butil::exchange
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 4
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T exchange(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' e'
    - d
    - o
    argTypes:
    - T
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 295
    functionName: butil::compare_exchange_weak
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& e, T d, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' e'
    - d
    - so
    - fo
    argTypes:
    - T
    - T
    - memory_order
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 297
    functionName: butil::compare_exchange_weak
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& e, T d, memory_order so, memory_order
      fo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' e'
    - d
    - o
    argTypes:
    - T
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 299
    functionName: butil::compare_exchange_strong
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_strong(T& e, T d, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' e'
    - d
    - so
    - fo
    argTypes:
    - T
    - T
    - memory_order
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 301
    functionName: butil::compare_exchange_strong
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_strong(T& e, T d, memory_order so, memory_order
      fo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 302
    functionName: butil::fetch_add
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 8
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_add(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 303
    functionName: butil::fetch_sub
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 4
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_sub(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 304
    functionName: butil::fetch_and
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_and(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 305
    functionName: butil::fetch_or
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_or(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 306
    functionName: butil::fetch_xor
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_xor(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::store
      Src: /src/brpc/src/butil/atomicops.h:308,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 310
    functionName: '& operator=(T v)'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - butil::store
    linkageType: ''
    returnType: static_atomic
    signature: static_atomic & operator=(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<atomic<T>*>
      Src: /src/brpc/src/butil/atomicops.h:316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 318
    functionName: '& ref()'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<atomic<T>*>
    linkageType: ''
    returnType: atomic<T>
    signature: atomic<T> & ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - o
    argTypes:
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 291
    functionName: butil::load
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 16
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T load(memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 292
    functionName: butil::store
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 11
    functionsReached:
    - ref
    linkageType: ''
    returnType: void
    signature: void store(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 293
    functionName: butil::exchange
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 4
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T exchange(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' e'
    - d
    - o
    argTypes:
    - T
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 295
    functionName: butil::compare_exchange_weak
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& e, T d, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' e'
    - d
    - so
    - fo
    argTypes:
    - T
    - T
    - memory_order
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 297
    functionName: butil::compare_exchange_weak
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_weak(T& e, T d, memory_order so, memory_order
      fo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' e'
    - d
    - o
    argTypes:
    - T
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 299
    functionName: butil::compare_exchange_strong
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_strong(T& e, T d, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' e'
    - d
    - so
    - fo
    argTypes:
    - T
    - T
    - memory_order
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 301
    functionName: butil::compare_exchange_strong
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: bool
    signature: bool compare_exchange_strong(T& e, T d, memory_order so, memory_order
      fo)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 302
    functionName: butil::fetch_add
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 8
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_add(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 303
    functionName: butil::fetch_sub
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 4
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_sub(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 304
    functionName: butil::fetch_and
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_and(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 305
    functionName: butil::fetch_or
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_or(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref
      Src: /src/brpc/src/butil/atomicops.h:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - v
    - o
    argTypes:
    - T
    - memory_order
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 306
    functionName: butil::fetch_xor
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - ref
    linkageType: ''
    returnType: T
    signature: T fetch_xor(T v, memory_order o)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/butil/atomicops.h:308,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 310
    functionName: '& operator=(T v)'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - store
    linkageType: ''
    returnType: static_atomic
    signature: static_atomic & operator=(T v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<atomic<T>*>
      Src: /src/brpc/src/butil/atomicops.h:316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 318
    functionName: '& ref()'
    functionSourceFile: /src/brpc/src/butil/atomicops.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<atomic<T>*>
    linkageType: ''
    returnType: atomic<T>
    signature: atomic<T> & ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: pthread_spinlock_t
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: __BEGIN_DECLS pthread_spinlock_t
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dispatch_semaphore_create
      Src: /src/brpc/src/butil/compat.h:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - __lock
    - __pshared
    argTypes:
    - pthread_spinlock_t*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: pthread_spin_init
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 6
    functionsReached:
    - dispatch_semaphore_create
    linkageType: ''
    returnType: int
    signature: int pthread_spin_init(pthread_spinlock_t *__lock, int __pshared)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - __lock
    argTypes:
    - pthread_spinlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: pthread_spin_destroy
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int pthread_spin_destroy(pthread_spinlock_t *__lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dispatch_semaphore_wait
      Src: /src/brpc/src/butil/compat.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - __lock
    argTypes:
    - pthread_spinlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: pthread_spin_lock
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 10
    functionsReached:
    - dispatch_semaphore_wait
    linkageType: ''
    returnType: int
    signature: int pthread_spin_lock(pthread_spinlock_t *__lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dispatch_semaphore_wait
      Src: /src/brpc/src/butil/compat.h:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - __lock
    argTypes:
    - pthread_spinlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: pthread_spin_trylock
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 8
    functionsReached:
    - dispatch_semaphore_wait
    linkageType: ''
    returnType: int
    signature: int pthread_spin_trylock(pthread_spinlock_t *__lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dispatch_semaphore_signal
      Src: /src/brpc/src/butil/compat.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - __lock
    argTypes:
    - pthread_spinlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: pthread_spin_unlock
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 10
    functionsReached:
    - dispatch_semaphore_signal
    linkageType: ''
    returnType: int
    signature: int pthread_spin_unlock(pthread_spinlock_t *__lock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_threadid_np
      Src: /src/brpc/src/butil/compat.h:80,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/compat.h:80,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/compat.h:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 87
    functionName: pthread_numeric_id
    functionSourceFile: /src/brpc/src/butil/compat.h
    functionUses: 16
    functionsReached:
    - pthread_threadid_np
    - pthread_self
    linkageType: ''
    returnType: __BEGIN_DECLS
    signature: __BEGIN_DECLS pthread_numeric_id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::Record::MetaCount
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 10
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MetaCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: '& MetaAt(size_t i) const'
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: NamedMeta
    signature: NamedMeta & MetaAt(size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: '& Payload() const'
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & Payload() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: butil::Record::MutablePayload
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * MutablePayload()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::RecordReader::last_error
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int last_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: butil::RecordReader::offset
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::Record::MetaCount
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 10
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MetaCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: '& MetaAt(size_t i) const'
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: NamedMeta
    signature: NamedMeta & MetaAt(size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: '& Payload() const'
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & Payload() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: butil::Record::MutablePayload
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * MutablePayload()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::RecordReader::last_error
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int last_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: butil::RecordReader::offset
    functionSourceFile: /src/brpc/src/butil/recordio.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t offset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __cpu_membarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 56
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 96
    functionsReached:
    - __cpu_membarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 39
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:97,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 100
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:105,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:135,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:136,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 155
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:192,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 41
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 209
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 223
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 5
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:233,1
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 255
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 276
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __cpu_membarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 56
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 104
    functionsReached:
    - __cpu_membarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:97,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 100
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:105,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:135,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:136,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 5
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 155
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:192,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 43
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 209
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 223
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 6
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:233,1
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 255
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 276
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __cpu_membarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 56
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 112
    functionsReached:
    - __cpu_membarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 43
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:97,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 100
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:105,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:135,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:136,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 6
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 155
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:192,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 45
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 209
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 17
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 223
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:233,1
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 255
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 276
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __cpu_membarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 56
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 120
    functionsReached:
    - __cpu_membarrier
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 92
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 45
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:97,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 100
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:105,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 107
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 128
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:135,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:136,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 155
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - old_value
    - new_value
    - ptr
    argTypes:
    - Atomic32
    - Atomic32
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: butil::subtle::LinuxKernelCmpxchg
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int LinuxKernelCmpxchg(Atomic32 old_value,\n                              Atomic32
      new_value,\n                              volatile Atomic32* ptr)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:192,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 47
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 204
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 209
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 18
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 223
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 8
    functionsReached:
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:233,1
    - Dst: butil::subtle::LinuxKernelCmpxchg
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::LinuxKernelCmpxchg
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 255
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 276
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 9
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm_gcc.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 289
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 23
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 29
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:78,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:95,1
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 106
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 127
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:140,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic_thread_fence
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 150
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:157,1
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 168
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 128
    functionsReached:
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 23
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 29
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:78,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:95,1
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 106
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 127
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:140,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic_thread_fence
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 150
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:157,1
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 168
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 128
    functionsReached:
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 23
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 29
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:78,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:95,1
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 106
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 127
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:140,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic_thread_fence
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 150
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:157,1
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 168
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 128
    functionsReached:
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 23
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 29
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_exchange
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_AtomicExchange(volatile Atomic32* ptr,\n                                       Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic32_fetch_add
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 71
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic32_compare_exchange_strong
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:78,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 80
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_store
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic32_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic32_load
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:95,1
    - Dst: __tsan_atomic32_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic32_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 106
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 47
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 111
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: butil::subtle::Acquire_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_exchange
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: butil::subtle::Release_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_exchange
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_AtomicExchange(volatile Atomic64* ptr,\n                                       Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 127
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 18
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_fetch_add
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 8
    functionsReached:
    - __tsan_atomic64_fetch_add
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:140,1
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic_thread_fence
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_store
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 9
    functionsReached:
    - __tsan_atomic64_store
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 150
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 7
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 11
    functionsReached:
    - __tsan_atomic64_load
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:157,1
    - Dst: __tsan_atomic64_load
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 3
    functionsReached:
    - __tsan_atomic64_load
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 168
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 12
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic64_compare_exchange_strong
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 0
    functionsReached:
    - __tsan_atomic64_compare_exchange_strong
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __tsan_atomic_thread_fence
      Src: /src/brpc/src/butil/atomicops_internals_tsan.h:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_tsan.h
    functionUses: 128
    functionsReached:
    - __tsan_atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: butil::ScopedClearErrno::ScopedClearErrno
    functionSourceFile: /src/brpc/src/butil/scoped_clear_errno.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedClearErrno()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: ~ScopedClearErrno()
    functionSourceFile: /src/brpc/src/butil/scoped_clear_errno.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedClearErrno()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 20
    functionName: butil::ScopedClearErrno::ScopedClearErrno
    functionSourceFile: /src/brpc/src/butil/scoped_clear_errno.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedClearErrno()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: ~ScopedClearErrno()
    functionSourceFile: /src/brpc/src/butil/scoped_clear_errno.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedClearErrno()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object
      Src: /src/brpc/src/butil/iobuf_profiler.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::New
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - butil::get_object
    linkageType: ''
    returnType: IOBufSample
    signature: IOBufSample * New()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/iobuf_profiler.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: butil::Destroy
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Destroy(IOBufSample* ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::IOBufSample
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufSample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: ~IOBufSample()
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufSample()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf_profiler.h:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: operator()(const T& c1, const T& c2) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    - memcmp
    linkageType: ''
    returnType: bool
    signature: bool operator()(const T& c1, const T& c2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: operator()(const T& c) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T& c) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.h:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: operator()(IOBufSample* ref) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - AuthSession::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(IOBufSample* ref) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf_profiler.h:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: operator()(const T& c1, const T& c2) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    - memcmp
    linkageType: ''
    returnType: bool
    signature: bool operator()(const T& c1, const T& c2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: operator()(const T& c) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T& c) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.h:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: operator()(IOBufSample* ref) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - AuthSession::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(IOBufSample* ref) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object
      Src: /src/brpc/src/butil/iobuf_profiler.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: butil::New
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - butil::get_object
    linkageType: ''
    returnType: IOBufSample
    signature: IOBufSample * New()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/butil/iobuf_profiler.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 52
    functionName: butil::Destroy
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void Destroy(IOBufSample* ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::IOBufSample
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufSample()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: ~IOBufSample()
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufSample()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf_profiler.h:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: operator()(const T& c1, const T& c2) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    - memcmp
    linkageType: ''
    returnType: bool
    signature: bool operator()(const T& c1, const T& c2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: operator()(const T& c) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T& c) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.h:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: operator()(IOBufSample* ref) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - AuthSession::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(IOBufSample* ref) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:79,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf_profiler.h:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ' c1'
    - ' c2'
    argTypes:
    - T
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: operator()(const T& c1, const T& c2) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    - memcmp
    linkageType: ''
    returnType: bool
    signature: bool operator()(const T& c1, const T& c2) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stack_hash_code
      Src: /src/brpc/src/butil/iobuf_profiler.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: operator()(const T& c) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - stack_hash_code
    linkageType: ''
    returnType: size_t
    signature: size_t operator()(const T& c) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.h:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: operator()(IOBufSample* ref) const
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.h
    functionUses: 0
    functionsReached:
    - AuthSession::Destroy
    linkageType: ''
    returnType: void
    signature: void operator()(IOBufSample* ref) const
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/process_util.cc:40,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:42,1
    - Dst: read
      Src: /src/brpc/src/butil/process_util.cc:45,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:47,1
    - Dst: getpid
      Src: /src/brpc/src/butil/process_util.cc:51,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/process_util.cc:54,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/butil/process_util.cc:55,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:56,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/process_util.cc:59,1
    - Dst: std::min
      Src: /src/brpc/src/butil/process_util.cc:60,1
    - Dst: size
      Src: /src/brpc/src/butil/process_util.cc:60,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/process_util.cc:61,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/process_util.cc:61,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:84,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 37
    argCount: 3
    argNames:
    - buf
    - len
    - with_args
    argTypes:
    - char*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 89
    functionName: butil::ReadCommandLine
    functionSourceFile: /src/brpc/src/butil/process_util.cc
    functionUses: 6
    functionsReached:
    - std::ostringstream::str
    - butil::data
    - butil::snprintf
    - open
    - std::min
    - read
    - getpid
    - memcpy
    - size
    - butil::read_command_output
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadCommandLine(char* buf, size_t len, bool with_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/process_util.cc:93,1
    - Dst: readlink
      Src: /src/brpc/src/butil/process_util.cc:94,1
    - Dst: memset
      Src: /src/brpc/src/butil/process_util.cc:97,1
    - Dst: proc_pidpath
      Src: /src/brpc/src/butil/process_util.cc:98,1
    - Dst: getpid
      Src: /src/brpc/src/butil/process_util.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 101
    functionName: butil::GetProcessAbsolutePath
    functionSourceFile: /src/brpc/src/butil/process_util.cc
    functionUses: 4
    functionsReached:
    - readlink
    - getpid
    - proc_pidpath
    - memset
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t GetProcessAbsolutePath(char *buf, size_t len)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/process_util.cc:40,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:42,1
    - Dst: read
      Src: /src/brpc/src/butil/process_util.cc:45,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:47,1
    - Dst: getpid
      Src: /src/brpc/src/butil/process_util.cc:51,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/process_util.cc:54,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/butil/process_util.cc:55,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:56,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/process_util.cc:59,1
    - Dst: std::min
      Src: /src/brpc/src/butil/process_util.cc:60,1
    - Dst: size
      Src: /src/brpc/src/butil/process_util.cc:60,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/process_util.cc:61,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/process_util.cc:61,1
    - Dst: LOG
      Src: /src/brpc/src/butil/process_util.cc:84,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 37
    argCount: 3
    argNames:
    - buf
    - len
    - with_args
    argTypes:
    - char*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 89
    functionName: butil::ReadCommandLine
    functionSourceFile: /src/brpc/src/butil/process_util.cc
    functionUses: 6
    functionsReached:
    - std::ostringstream::str
    - butil::data
    - butil::snprintf
    - open
    - std::min
    - read
    - getpid
    - memcpy
    - size
    - butil::read_command_output
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadCommandLine(char* buf, size_t len, bool with_args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/process_util.cc:93,1
    - Dst: readlink
      Src: /src/brpc/src/butil/process_util.cc:94,1
    - Dst: memset
      Src: /src/brpc/src/butil/process_util.cc:97,1
    - Dst: proc_pidpath
      Src: /src/brpc/src/butil/process_util.cc:98,1
    - Dst: getpid
      Src: /src/brpc/src/butil/process_util.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 101
    functionName: butil::GetProcessAbsolutePath
    functionSourceFile: /src/brpc/src/butil/process_util.cc
    functionUses: 4
    functionsReached:
    - readlink
    - getpid
    - proc_pidpath
    - memset
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t GetProcessAbsolutePath(char *buf, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: logging::ComlogLayoutOptions
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogLayoutOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - options
    argTypes:
    - ComlogLayoutOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: logging::ComlogLayout::ComlogLayout
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogLayout::ComlogLayout(const ComlogLayoutOptions* options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: ComlogLayout::~ComlogLayout()
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogLayout::~ComlogLayout()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: localtime_s
      Src: /src/brpc/src/butil/comlog_sink.cc:67,1
    - Dst: localtime_r
      Src: /src/brpc/src/butil/comlog_sink.cc:69,1
    - Dst: comspace::getLogName
      Src: /src/brpc/src/butil/comlog_sink.cc:73,1
    - Dst: comspace::getLogName
      Src: /src/brpc/src/butil/comlog_sink.cc:75,1
    - Dst: std::min
      Src: /src/brpc/src/butil/comlog_sink.cc:76,1
    - Dst: strlen
      Src: /src/brpc/src/butil/comlog_sink.cc:76,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/comlog_sink.cc:77,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:86,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:97,1
    - Dst: std::min
      Src: /src/brpc/src/butil/comlog_sink.cc:117,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/comlog_sink.cc:118,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 1
    argNames:
    - evt
    argTypes:
    - comspace::Event*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 128
    functionName: logging::ComlogLayout::format
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - std::min
    - localtime_s
    - snprintf
    - comspace::getLogName
    - localtime_r
    - memcpy
    - strlen
    linkageType: ''
    returnType: int
    signature: int ComlogLayout::format(comspace::Event *evt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/comlog_sink.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: logging::ComlogSink::GetInstance
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 2
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: ComlogSink
    signature: ComlogSink * ComlogSink::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 148
    functionName: logging::ComlogSinkOptions::ComlogSinkOptions
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogSinkOptions::ComlogSinkOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: logging::ComlogSink::ComlogSink
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogSink::ComlogSink()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::ComlogSink::Unload
      Src: /src/brpc/src/butil/comlog_sink.cc:155,1
    - Dst: com_loadlog
      Src: /src/brpc/src/butil/comlog_sink.cc:157,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/butil/comlog_sink.cc:157,1
    - Dst: butil::FilePath::BaseName
      Src: /src/brpc/src/butil/comlog_sink.cc:158,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' conf_path_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 164
    functionName: logging::ComlogSink::SetupFromConfig
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath::BaseName
    - butil::FilePath::DirName
    - logging::ComlogSink::Unload
    - com_loadlog
    - LOG
    linkageType: ''
    returnType: int
    signature: int ComlogSink::SetupFromConfig(const std::string& conf_path_str)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/comlog_sink.cc:168,1
    - Dst: read
      Src: /src/brpc/src/butil/comlog_sink.cc:173,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/comlog_sink.cc:180,1
    - Dst: std::string
      Src: /src/brpc/src/butil/comlog_sink.cc:180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 181
    functionName: logging::GetProcessName
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 4
    functionsReached:
    - butil::FilePath
    - open
    - std::string
    - read
    linkageType: ''
    returnType: std::string
    signature: std::string GetProcessName()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:185,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/butil/comlog_sink.cc:185,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:187,1
    - Dst: COMLOG_SETSYSLOG
      Src: /src/brpc/src/butil/comlog_sink.cc:188,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:191,1
    - Dst: butil::FilePath::BaseName
      Src: /src/brpc/src/butil/comlog_sink.cc:191,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:193,1
    - Dst: COMLOG_ADDMASK
      Src: /src/brpc/src/butil/comlog_sink.cc:195,1
    - Dst: COMLOG_ADDMASK
      Src: /src/brpc/src/butil/comlog_sink.cc:196,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:199,1
    - Dst: butil::FilePath::BaseName
      Src: /src/brpc/src/butil/comlog_sink.cc:199,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:202,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/comlog_sink.cc:203,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:212,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:217,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:221,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:223,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:228,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:232,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:236,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:240,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:242,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:247,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:249,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:254,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:256,1
    - Dst: ComlogLayout::ComlogLayout
      Src: /src/brpc/src/butil/comlog_sink.cc:268,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:270,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 71
    argCount: 4
    argNames:
    - dev
    - type
    - file
    - is_wf
    argTypes:
    - com_device_t*
    - char*
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 276
    functionName: logging::ComlogSink::SetupDevice
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath::BaseName
    - COMLOG_SETSYSLOG
    - COMLOG_ADDMASK
    - butil::FilePath::DirName
    - snprintf
    - ComlogLayout::ComlogLayout
    - static_cast<int>
    - LOG
    linkageType: ''
    returnType: int
    signature: int ComlogSink::SetupDevice(com_device_t* dev, const char* type, const
      char* file, bool is_wf)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: logging::ComlogSink::Unload
      Src: /src/brpc/src/butil/comlog_sink.cc:279,1
    - Dst: comspace::Event::setMaxLogLength
      Src: /src/brpc/src/butil/comlog_sink.cc:284,1
    - Dst: process_name::empty
      Src: /src/brpc/src/butil/comlog_sink.cc:286,1
    - Dst: GetProcessName
      Src: /src/brpc/src/butil/comlog_sink.cc:287,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:292,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:294,1
    - Dst: butil::FilePath::FilePath
      Src: /src/brpc/src/butil/comlog_sink.cc:296,1
    - Dst: log_dir::empty
      Src: /src/brpc/src/butil/comlog_sink.cc:297,1
    - Dst: butil::FilePath::IsAbsolute
      Src: /src/brpc/src/butil/comlog_sink.cc:299,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/butil/comlog_sink.cc:302,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:303,1
    - Dst: butil::FilePath::Append
      Src: /src/brpc/src/butil/comlog_sink.cc:306,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/butil/comlog_sink.cc:309,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:310,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/comlog_sink.cc:315,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:316,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:320,1
    - Dst: butil::FilePath::Append
      Src: /src/brpc/src/butil/comlog_sink.cc:321,1
    - Dst: com_device_t::com_device_t
      Src: /src/brpc/src/butil/comlog_sink.cc:324,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:326,1
    - Dst: logging::ComlogSink::SetupDevice
      Src: /src/brpc/src/butil/comlog_sink.cc:329,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:330,1
    - Dst: logging::ComlogSink::SetupDevice
      Src: /src/brpc/src/butil/comlog_sink.cc:334,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:335,1
    - Dst: com_openlog
      Src: /src/brpc/src/butil/comlog_sink.cc:339,1
    - Dst: process_name::c_str
      Src: /src/brpc/src/butil/comlog_sink.cc:339,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:340,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 58
    argCount: 1
    argNames:
    - options
    argTypes:
    - ComlogSinkOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 345
    functionName: logging::ComlogSink::Setup
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath::IsAbsolute
    - butil::FilePath::Append
    - process_name::empty
    - butil::CreateDirectoryAndGetError
    - logging::ComlogSink::SetupDevice
    - log_dir::empty
    - com_openlog
    - butil::FilePath::FilePath
    - GetProcessName
    - logging::ComlogSink::Unload
    - snprintf
    - comspace::Event::setMaxLogLength
    - com_device_t::com_device_t
    - process_name::c_str
    - LOG
    - butil::GetCurrentDirectory
    linkageType: ''
    returnType: int
    signature: int ComlogSink::Setup(const ComlogSinkOptions* options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: com_closelog
      Src: /src/brpc/src/butil/comlog_sink.cc:349,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 359
    functionName: logging::ComlogSink::Unload
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 2
    functionsReached:
    - com_closelog
    linkageType: ''
    returnType: void
    signature: void ComlogSink::Unload()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Unload
      Src: /src/brpc/src/butil/comlog_sink.cc:362,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 363
    functionName: ComlogSink::~ComlogSink()
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - Unload
    linkageType: ''
    returnType: void
    signature: void ComlogSink::~ComlogSink()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/comlog_sink.cc:379,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/comlog_sink.cc:380,1
    - Dst: com_writelog
      Src: /src/brpc/src/butil/comlog_sink.cc:382,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/comlog_sink.cc:383,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/comlog_sink.cc:383,1
    - Dst: size
      Src: /src/brpc/src/butil/comlog_sink.cc:385,1
    - Dst: data
      Src: /src/brpc/src/butil/comlog_sink.cc:385,1
    - Dst: com_writelog
      Src: /src/brpc/src/butil/comlog_sink.cc:388,1
    - Dst: size
      Src: /src/brpc/src/butil/comlog_sink.cc:389,1
    - Dst: data
      Src: /src/brpc/src/butil/comlog_sink.cc:389,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 390
    functionName: logging::ComlogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - com_writelog
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::data
    - data
    - size
    - butil::StringPiece::size
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: bool
    signature: "bool ComlogSink::OnLogMessage(int severity, const char* file, int
      line,\n                              const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: logging::ComlogLayoutOptions
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogLayoutOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - options
    argTypes:
    - ComlogLayoutOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: logging::ComlogLayout::ComlogLayout
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogLayout::ComlogLayout(const ComlogLayoutOptions* options)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: ComlogLayout::~ComlogLayout()
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogLayout::~ComlogLayout()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: localtime_s
      Src: /src/brpc/src/butil/comlog_sink.cc:67,1
    - Dst: localtime_r
      Src: /src/brpc/src/butil/comlog_sink.cc:69,1
    - Dst: comspace::getLogName
      Src: /src/brpc/src/butil/comlog_sink.cc:73,1
    - Dst: comspace::getLogName
      Src: /src/brpc/src/butil/comlog_sink.cc:75,1
    - Dst: std::min
      Src: /src/brpc/src/butil/comlog_sink.cc:76,1
    - Dst: strlen
      Src: /src/brpc/src/butil/comlog_sink.cc:76,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/comlog_sink.cc:77,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:86,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:97,1
    - Dst: std::min
      Src: /src/brpc/src/butil/comlog_sink.cc:117,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/comlog_sink.cc:118,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 1
    argNames:
    - evt
    argTypes:
    - comspace::Event*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 128
    functionName: logging::ComlogLayout::format
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - std::min
    - localtime_s
    - snprintf
    - comspace::getLogName
    - localtime_r
    - memcpy
    - strlen
    linkageType: ''
    returnType: int
    signature: int ComlogLayout::format(comspace::Event *evt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/comlog_sink.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: logging::ComlogSink::GetInstance
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 2
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: ComlogSink
    signature: ComlogSink * ComlogSink::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 148
    functionName: logging::ComlogSinkOptions::ComlogSinkOptions
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogSinkOptions::ComlogSinkOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: logging::ComlogSink::ComlogSink
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ComlogSink::ComlogSink()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: logging::ComlogSink::Unload
      Src: /src/brpc/src/butil/comlog_sink.cc:155,1
    - Dst: com_loadlog
      Src: /src/brpc/src/butil/comlog_sink.cc:157,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/butil/comlog_sink.cc:157,1
    - Dst: butil::FilePath::BaseName
      Src: /src/brpc/src/butil/comlog_sink.cc:158,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' conf_path_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 164
    functionName: logging::ComlogSink::SetupFromConfig
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath::BaseName
    - butil::FilePath::DirName
    - logging::ComlogSink::Unload
    - com_loadlog
    - LOG
    linkageType: ''
    returnType: int
    signature: int ComlogSink::SetupFromConfig(const std::string& conf_path_str)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/comlog_sink.cc:168,1
    - Dst: read
      Src: /src/brpc/src/butil/comlog_sink.cc:173,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/comlog_sink.cc:180,1
    - Dst: std::string
      Src: /src/brpc/src/butil/comlog_sink.cc:180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 181
    functionName: logging::GetProcessName
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 4
    functionsReached:
    - butil::FilePath
    - open
    - std::string
    - read
    linkageType: ''
    returnType: std::string
    signature: std::string GetProcessName()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:185,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/butil/comlog_sink.cc:185,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:187,1
    - Dst: COMLOG_SETSYSLOG
      Src: /src/brpc/src/butil/comlog_sink.cc:188,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:191,1
    - Dst: butil::FilePath::BaseName
      Src: /src/brpc/src/butil/comlog_sink.cc:191,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:193,1
    - Dst: COMLOG_ADDMASK
      Src: /src/brpc/src/butil/comlog_sink.cc:195,1
    - Dst: COMLOG_ADDMASK
      Src: /src/brpc/src/butil/comlog_sink.cc:196,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:199,1
    - Dst: butil::FilePath::BaseName
      Src: /src/brpc/src/butil/comlog_sink.cc:199,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:202,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/comlog_sink.cc:203,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:212,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:217,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:221,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:223,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:228,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:232,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:236,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:240,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:242,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:247,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:249,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:254,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:256,1
    - Dst: ComlogLayout::ComlogLayout
      Src: /src/brpc/src/butil/comlog_sink.cc:268,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:270,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 71
    argCount: 4
    argNames:
    - dev
    - type
    - file
    - is_wf
    argTypes:
    - com_device_t*
    - char*
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 276
    functionName: logging::ComlogSink::SetupDevice
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 1
    functionsReached:
    - butil::FilePath::BaseName
    - COMLOG_SETSYSLOG
    - COMLOG_ADDMASK
    - butil::FilePath::DirName
    - snprintf
    - ComlogLayout::ComlogLayout
    - static_cast<int>
    - LOG
    linkageType: ''
    returnType: int
    signature: int ComlogSink::SetupDevice(com_device_t* dev, const char* type, const
      char* file, bool is_wf)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: logging::ComlogSink::Unload
      Src: /src/brpc/src/butil/comlog_sink.cc:279,1
    - Dst: comspace::Event::setMaxLogLength
      Src: /src/brpc/src/butil/comlog_sink.cc:284,1
    - Dst: process_name::empty
      Src: /src/brpc/src/butil/comlog_sink.cc:286,1
    - Dst: GetProcessName
      Src: /src/brpc/src/butil/comlog_sink.cc:287,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:292,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:294,1
    - Dst: butil::FilePath::FilePath
      Src: /src/brpc/src/butil/comlog_sink.cc:296,1
    - Dst: log_dir::empty
      Src: /src/brpc/src/butil/comlog_sink.cc:297,1
    - Dst: butil::FilePath::IsAbsolute
      Src: /src/brpc/src/butil/comlog_sink.cc:299,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/butil/comlog_sink.cc:302,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:303,1
    - Dst: butil::FilePath::Append
      Src: /src/brpc/src/butil/comlog_sink.cc:306,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/butil/comlog_sink.cc:309,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:310,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/comlog_sink.cc:315,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:316,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/comlog_sink.cc:320,1
    - Dst: butil::FilePath::Append
      Src: /src/brpc/src/butil/comlog_sink.cc:321,1
    - Dst: com_device_t::com_device_t
      Src: /src/brpc/src/butil/comlog_sink.cc:324,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:326,1
    - Dst: logging::ComlogSink::SetupDevice
      Src: /src/brpc/src/butil/comlog_sink.cc:329,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:330,1
    - Dst: logging::ComlogSink::SetupDevice
      Src: /src/brpc/src/butil/comlog_sink.cc:334,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:335,1
    - Dst: com_openlog
      Src: /src/brpc/src/butil/comlog_sink.cc:339,1
    - Dst: process_name::c_str
      Src: /src/brpc/src/butil/comlog_sink.cc:339,1
    - Dst: LOG
      Src: /src/brpc/src/butil/comlog_sink.cc:340,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 58
    argCount: 1
    argNames:
    - options
    argTypes:
    - ComlogSinkOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 345
    functionName: logging::ComlogSink::Setup
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath::IsAbsolute
    - butil::FilePath::Append
    - process_name::empty
    - butil::CreateDirectoryAndGetError
    - logging::ComlogSink::SetupDevice
    - log_dir::empty
    - com_openlog
    - butil::FilePath::FilePath
    - GetProcessName
    - logging::ComlogSink::Unload
    - snprintf
    - comspace::Event::setMaxLogLength
    - com_device_t::com_device_t
    - process_name::c_str
    - LOG
    - butil::GetCurrentDirectory
    linkageType: ''
    returnType: int
    signature: int ComlogSink::Setup(const ComlogSinkOptions* options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: com_closelog
      Src: /src/brpc/src/butil/comlog_sink.cc:349,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 359
    functionName: logging::ComlogSink::Unload
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 4
    functionsReached:
    - com_closelog
    linkageType: ''
    returnType: void
    signature: void ComlogSink::Unload()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Unload
      Src: /src/brpc/src/butil/comlog_sink.cc:362,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 363
    functionName: ComlogSink::~ComlogSink()
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - Unload
    linkageType: ''
    returnType: void
    signature: void ComlogSink::~ComlogSink()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPiece::ends_with
      Src: /src/brpc/src/butil/comlog_sink.cc:379,1
    - Dst: butil::StringPiece::remove_suffix
      Src: /src/brpc/src/butil/comlog_sink.cc:380,1
    - Dst: com_writelog
      Src: /src/brpc/src/butil/comlog_sink.cc:382,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/comlog_sink.cc:383,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/butil/comlog_sink.cc:383,1
    - Dst: size
      Src: /src/brpc/src/butil/comlog_sink.cc:385,1
    - Dst: data
      Src: /src/brpc/src/butil/comlog_sink.cc:385,1
    - Dst: com_writelog
      Src: /src/brpc/src/butil/comlog_sink.cc:388,1
    - Dst: size
      Src: /src/brpc/src/butil/comlog_sink.cc:389,1
    - Dst: data
      Src: /src/brpc/src/butil/comlog_sink.cc:389,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 4
    argNames:
    - severity
    - file
    - line
    - ' content'
    argTypes:
    - int
    - char*
    - int
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 390
    functionName: logging::ComlogSink::OnLogMessage
    functionSourceFile: /src/brpc/src/butil/comlog_sink.cc
    functionUses: 0
    functionsReached:
    - com_writelog
    - butil::StringPiece::remove_suffix
    - butil::StringPiece::data
    - data
    - size
    - butil::StringPiece::size
    - butil::StringPiece::ends_with
    linkageType: ''
    returnType: bool
    signature: "bool ComlogSink::OnLogMessage(int severity, const char* file, int
      line,\n                              const butil::StringPiece& content)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:64,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::stat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:68,1
    - Dst: lstat
      Src: /src/brpc/src/butil/file_util_posix.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - lstat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:73,1
    - Dst: stat64
      Src: /src/brpc/src/butil/file_util_posix.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - stat64
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:77,1
    - Dst: lstat64
      Src: /src/brpc/src/butil/file_util_posix.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadRestrictions::AssertIOAllowed
    - lstat64
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:84,1
    - Dst: realpath
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' path'
    - real_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 91
    functionName: butil::RealPath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath
    - realpath
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool RealPath(const FilePath& path, FilePath* real_path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:99,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:100,1
    - Dst: S_ISLNK
      Src: /src/brpc/src/butil/file_util_posix.cc:104,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::ContainsKey
      Src: /src/brpc/src/butil/file_util_posix.cc:117,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 3
    argNames:
    - ' path'
    - owner_uid
    - ' group_gids'
    argTypes:
    - FilePath
    - uid_t
    - std::set<gid_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 94
    functionDepth: 2
    functionLinenumber: 94
    functionLinenumberEnd: 130
    functionName: butil::VerifySpecificPathControlledByUser
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::value
    - DLOG
    - S_ISLNK
    - butil::ContainsKey
    - DPLOG
    - butil::CallLstat
    linkageType: ''
    returnType: bool
    signature: "bool VerifySpecificPathControlledByUser(const FilePath& path,\n                                        uid_t
      owner_uid,\n                                        const std::set<gid_t>& group_gids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: butil::mac::BaseBundleID
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:138,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 142
    functionName: butil::TempFileName
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::StringPrintf
    - std::string
    - butil::mac::BaseBundleID
    linkageType: ''
    returnType: std::string
    signature: std::string TempFileName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:148,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: butil::TempFileName
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: FilePath*::value
      Src: /src/brpc/src/butil/file_util_posix.cc:150,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    - Dst: mkstemp
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - directory
    - path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 155
    functionName: butil::CreateAndOpenFdForTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - mkstemp
    - FilePath*::value
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - FilePath::Append
    - butil::TempFileName
    - const_cast<char*>
    - butil::c_str
    linkageType: ''
    returnType: int
    signature: int CreateAndOpenFdForTemporaryFile(FilePath directory, FilePath* path)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: ScopedFD::is_valid
      Src: /src/brpc/src/butil/file_util_posix.cc:168,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:169,1
    - Dst: sysconf
      Src: /src/brpc/src/butil/file_util_posix.cc:170,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/file_util_posix.cc:172,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:173,1
    - Dst: mmap
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: ScopedFD::get
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: mprotect
      Src: /src/brpc/src/butil/file_util_posix.cc:176,1
    - Dst: munmap
      Src: /src/brpc/src/butil/file_util_posix.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 163
    functionDepth: 3
    functionLinenumber: 163
    functionLinenumberEnd: 182
    functionName: butil::DetermineDevShmExecutable
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - CHECK_GE
    - ScopedFD::get
    - mprotect
    - munmap
    - ScopedFD::is_valid
    - static_cast<size_t>
    - sysconf
    - butil::DeleteFile
    - butil::CreateAndOpenFdForTemporaryFile
    - mmap
    - butil::FilePath
    linkageType: ''
    returnType: bool
    signature: bool DetermineDevShmExecutable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:64,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::stat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:68,1
    - Dst: lstat
      Src: /src/brpc/src/butil/file_util_posix.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - lstat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:73,1
    - Dst: stat64
      Src: /src/brpc/src/butil/file_util_posix.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - stat64
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:77,1
    - Dst: lstat64
      Src: /src/brpc/src/butil/file_util_posix.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - butil::ThreadRestrictions::AssertIOAllowed
    - lstat64
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:84,1
    - Dst: realpath
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' path'
    - real_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 91
    functionName: butil::RealPath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath
    - realpath
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool RealPath(const FilePath& path, FilePath* real_path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:99,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:100,1
    - Dst: S_ISLNK
      Src: /src/brpc/src/butil/file_util_posix.cc:104,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::ContainsKey
      Src: /src/brpc/src/butil/file_util_posix.cc:117,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 3
    argNames:
    - ' path'
    - owner_uid
    - ' group_gids'
    argTypes:
    - FilePath
    - uid_t
    - std::set<gid_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 94
    functionDepth: 2
    functionLinenumber: 94
    functionLinenumberEnd: 130
    functionName: butil::VerifySpecificPathControlledByUser
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::value
    - DLOG
    - S_ISLNK
    - butil::ContainsKey
    - DPLOG
    - butil::CallLstat
    linkageType: ''
    returnType: bool
    signature: "bool VerifySpecificPathControlledByUser(const FilePath& path,\n                                        uid_t
      owner_uid,\n                                        const std::set<gid_t>& group_gids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: butil::mac::BaseBundleID
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:138,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 142
    functionName: butil::TempFileName
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - butil::StringPrintf
    - std::string
    - butil::mac::BaseBundleID
    linkageType: ''
    returnType: std::string
    signature: std::string TempFileName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:148,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: butil::TempFileName
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: FilePath*::value
      Src: /src/brpc/src/butil/file_util_posix.cc:150,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    - Dst: mkstemp
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - directory
    - path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 155
    functionName: butil::CreateAndOpenFdForTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - mkstemp
    - FilePath*::value
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - FilePath::Append
    - butil::TempFileName
    - const_cast<char*>
    - butil::c_str
    linkageType: ''
    returnType: int
    signature: int CreateAndOpenFdForTemporaryFile(FilePath directory, FilePath* path)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: ScopedFD::is_valid
      Src: /src/brpc/src/butil/file_util_posix.cc:168,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:169,1
    - Dst: sysconf
      Src: /src/brpc/src/butil/file_util_posix.cc:170,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/file_util_posix.cc:172,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:173,1
    - Dst: mmap
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: ScopedFD::get
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: mprotect
      Src: /src/brpc/src/butil/file_util_posix.cc:176,1
    - Dst: munmap
      Src: /src/brpc/src/butil/file_util_posix.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 163
    functionDepth: 3
    functionLinenumber: 163
    functionLinenumberEnd: 182
    functionName: butil::DetermineDevShmExecutable
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - CHECK_GE
    - ScopedFD::get
    - mprotect
    - munmap
    - ScopedFD::is_valid
    - static_cast<size_t>
    - sysconf
    - butil::DeleteFile
    - butil::CreateAndOpenFdForTemporaryFile
    - mmap
    - butil::FilePath
    linkageType: ''
    returnType: bool
    signature: bool DetermineDevShmExecutable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:188,1
    - Dst: realpath
      Src: /src/brpc/src/butil/file_util_posix.cc:190,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:190,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:191,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 193
    functionName: butil::MakeAbsoluteFilePath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::FilePath
    - realpath
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: FilePath
    signature: FilePath MakeAbsoluteFilePath(const FilePath& input)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:200,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:201,1
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:203,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:209,1
    - Dst: unlink
      Src: /src/brpc/src/butil/file_util_posix.cc:210,1
    - Dst: rmdir
      Src: /src/brpc/src/butil/file_util_posix.cc:212,1
    - Dst: std::stack::push
      Src: /src/brpc/src/butil/file_util_posix.cc:216,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:216,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util_posix.cc:220,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:220,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util_posix.cc:221,1
    - Dst: FileEnumerator::GetInfo
      Src: /src/brpc/src/butil/file_util_posix.cc:222,1
    - Dst: std::stack::push
      Src: /src/brpc/src/butil/file_util_posix.cc:223,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:223,1
    - Dst: unlink
      Src: /src/brpc/src/butil/file_util_posix.cc:225,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:225,1
    - Dst: std::stack::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:228,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:229,1
    - Dst: std::stack::top
      Src: /src/brpc/src/butil/file_util_posix.cc:229,1
    - Dst: std::stack::pop
      Src: /src/brpc/src/butil/file_util_posix.cc:230,1
    - Dst: rmdir
      Src: /src/brpc/src/butil/file_util_posix.cc:231,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:231,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ' path'
    - recursive
    argTypes:
    - FilePath
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 199
    functionDepth: 2
    functionLinenumber: 199
    functionLinenumberEnd: 234
    functionName: butil::DeleteFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 102
    functionsReached:
    - std::stack::push
    - FilePath::empty
    - std::stack::pop
    - butil::value
    - FilePath::value
    - FileEnumerator::Next
    - butil::FilePath
    - rmdir
    - std::stack::empty
    - S_ISDIR
    - std::stack::top
    - butil::ThreadRestrictions::AssertIOAllowed
    - FileEnumerator::GetInfo
    - butil::CallLstat
    - unlink
    linkageType: ''
    returnType: bool
    signature: bool DeleteFile(const FilePath& path, bool recursive)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:239,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:240,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:240,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:240,1
    - Dst: butil::File::OSErrorToFileError
      Src: /src/brpc/src/butil/file_util_posix.cc:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' from_path'
    - ' to_path'
    - error
    argTypes:
    - FilePath
    - FilePath
    - File::Error*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 245
    functionName: butil::ReplaceFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::File::OSErrorToFileError
    - butil::value
    - rename
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: "bool ReplaceFile(const FilePath& from_path,\n                 const
      FilePath& to_path,\n                 File::Error* error)"
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:250,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:254,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:254,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:255,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:255,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:257,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util_posix.cc:263,1
    - Dst: butil::MakeAbsoluteFilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:264,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:265,1
    - Dst: butil::MakeAbsoluteFilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:268,1
    - Dst: FilePath::DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:268,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:269,1
    - Dst: butil::MakeAbsoluteFilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:272,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:273,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:275,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:275,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:276,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:276,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:277,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:290,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:290,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:291,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:292,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:297,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:297,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:298,1
    - Dst: DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:301,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:307,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:307,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:310,1
    - Dst: FilePath::AppendRelativePath
      Src: /src/brpc/src/butil/file_util_posix.cc:315,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:321,1
    - Dst: mkdir
      Src: /src/brpc/src/butil/file_util_posix.cc:322,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:322,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:324,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:325,1
    - Dst: S_ISREG
      Src: /src/brpc/src/butil/file_util_posix.cc:328,1
    - Dst: butil::CopyFile
      Src: /src/brpc/src/butil/file_util_posix.cc:329,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:330,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:331,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:335,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:336,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util_posix.cc:339,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:340,1
    - Dst: FileEnumerator::GetInfo
      Src: /src/brpc/src/butil/file_util_posix.cc:341,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 57
    argCount: 3
    argNames:
    - ' from_path'
    - ' to_path'
    - recursive
    argTypes:
    - FilePath
    - FilePath
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 247
    functionDepth: 2
    functionLinenumber: 247
    functionLinenumberEnd: 345
    functionName: butil::CopyDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 36
    functionsReached:
    - FilePath::empty
    - butil::CopyFile
    - butil::value
    - FilePath::AppendRelativePath
    - FilePath::value
    - DLOG
    - butil::MakeAbsoluteFilePath
    - DirName
    - mkdir
    - FileEnumerator::Next
    - FilePath::DirName
    - DCHECK
    - S_ISREG
    - FileEnumerator::GetInfo
    - S_ISDIR
    - butil::PathExists
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::stat
    linkageType: ''
    returnType: bool
    signature: "bool CopyDirectory(const FilePath& from_path,\n                   const
      FilePath& to_path,\n                   bool recursive)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:348,1
    - Dst: IsContentUri
      Src: /src/brpc/src/butil/file_util_posix.cc:350,1
    - Dst: ContentUriExists
      Src: /src/brpc/src/butil/file_util_posix.cc:351,1
    - Dst: access
      Src: /src/brpc/src/butil/file_util_posix.cc:354,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:354,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 355
    functionName: butil::PathExists
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 189
    functionsReached:
    - butil::value
    - access
    - ContentUriExists
    - IsContentUri
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool PathExists(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:358,1
    - Dst: access
      Src: /src/brpc/src/butil/file_util_posix.cc:359,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:359,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 360
    functionName: butil::PathIsWritable
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::value
    - access
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool PathIsWritable(const FilePath& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:363,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:365,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:365,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 362
    functionDepth: 2
    functionLinenumber: 362
    functionLinenumberEnd: 368
    functionName: butil::DirectoryExists
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 25
    functionsReached:
    - S_ISDIR
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::CallStat
    linkageType: ''
    returnType: bool
    signature: bool DirectoryExists(const FilePath& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:374,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 3
    argNames:
    - fd
    - buffer
    - bytes
    argTypes:
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 380
    functionName: butil::ReadFromFD
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - read
    - HANDLE_EINTR
    linkageType: ''
    returnType: bool
    signature: bool ReadFromFD(int fd, char* buffer, size_t bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:384,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:384,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:385,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:385,1
    - Dst: ::symlink
      Src: /src/brpc/src/butil/file_util_posix.cc:386,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:386,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' target_path'
    - ' symlink_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 388
    functionName: butil::CreateSymbolicLink
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 20
    functionsReached:
    - butil::value
    - ::symlink
    - butil::empty
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: "bool CreateSymbolicLink(const FilePath& target_path,\n                        const
      FilePath& symlink_path)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:391,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:391,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:392,1
    - Dst: ::readlink
      Src: /src/brpc/src/butil/file_util_posix.cc:394,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:394,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/file_util_posix.cc:394,1
    - Dst: FilePath*::clear
      Src: /src/brpc/src/butil/file_util_posix.cc:397,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:401,1
    - Dst: FilePath::StringType
      Src: /src/brpc/src/butil/file_util_posix.cc:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' symlink_path'
    - target_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 390
    functionDepth: 1
    functionLinenumber: 390
    functionLinenumberEnd: 403
    functionName: butil::ReadSymbolicLink
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::value
    - ::readlink
    - butil::empty
    - arraysize
    - DCHECK
    - butil::FilePath
    - FilePath::StringType
    - FilePath*::clear
    linkageType: ''
    returnType: bool
    signature: bool ReadSymbolicLink(const FilePath& symlink_path, FilePath* target_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:406,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:407,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:412,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' path'
    - mode
    argTypes:
    - FilePath
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 405
    functionDepth: 2
    functionLinenumber: 405
    functionLinenumberEnd: 417
    functionName: butil::GetPosixFilePermissions
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 20
    functionsReached:
    - butil::value
    - DCHECK
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::CallStat
    linkageType: ''
    returnType: bool
    signature: bool GetPosixFilePermissions(const FilePath& path, int* mode)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:421,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:422,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:426,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:426,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:433,1
    - Dst: chmod
      Src: /src/brpc/src/butil/file_util_posix.cc:433,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:433,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' path'
    - mode
    argTypes:
    - FilePath
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 419
    functionDepth: 2
    functionLinenumber: 419
    functionLinenumberEnd: 437
    functionName: butil::SetPosixFilePermissions
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 20
    functionsReached:
    - butil::value
    - butil::CallStat
    - chmod
    - DCHECK
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: "bool SetPosixFilePermissions(const FilePath& path,\n                             int
      mode)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/file_util_posix.cc:442,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:444,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:446,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - path
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 449
    functionName: butil::GetTempDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 9
    functionsReached:
    - butil::FilePath
    - getenv
    linkageType: ''
    returnType: bool
    signature: bool GetTempDir(FilePath* path)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SysInfo::IsRunningOnChromeOS
      Src: /src/brpc/src/butil/file_util_posix.cc:455,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:458,1
    - Dst: getenv
      Src: /src/brpc/src/butil/file_util_posix.cc:462,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:464,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:467,1
    - Dst: g_get_home_dir
      Src: /src/brpc/src/butil/file_util_posix.cc:475,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:477,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:481,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:485,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 453
    functionDepth: 2
    functionLinenumber: 453
    functionLinenumberEnd: 486
    functionName: butil::GetHomeDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - g_get_home_dir
    - butil::GetTempDir
    - DLOG
    - SysInfo::IsRunningOnChromeOS
    - butil::FilePath
    - getenv
    linkageType: ''
    returnType: FilePath
    signature: FilePath GetHomeDir()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:490,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:492,1
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:494,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:497,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - path
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 489
    functionDepth: 3
    functionLinenumber: 489
    functionLinenumberEnd: 499
    functionName: butil::CreateTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::CreateAndOpenFdForTemporaryFile
    - close
    - butil::GetTempDir
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool CreateTemporaryFile(FilePath* path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:502,1
    - Dst: fdopen
      Src: /src/brpc/src/butil/file_util_posix.cc:506,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:508,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' dir'
    - path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 501
    functionDepth: 3
    functionLinenumber: 501
    functionLinenumberEnd: 510
    functionName: butil::CreateAndOpenTemporaryFileInDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - butil::CreateAndOpenFdForTemporaryFile
    - close
    - fdopen
    linkageType: ''
    returnType: FILE
    signature: FILE * CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath*
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:513,1
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:514,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:515,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:515,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - ' dir'
    - temp_file
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 512
    functionDepth: 3
    functionLinenumber: 512
    functionLinenumberEnd: 516
    functionName: butil::CreateTemporaryFileInDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::CreateAndOpenFdForTemporaryFile
    - close
    - IGNORE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:521,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:522,1
    - Dst: butil::find
      Src: /src/brpc/src/butil/file_util_posix.cc:522,1
    - Dst: Append
      Src: /src/brpc/src/butil/file_util_posix.cc:525,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:526,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/file_util_posix.cc:529,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/file_util_posix.cc:529,1
    - Dst: mkdtemp
      Src: /src/brpc/src/butil/file_util_posix.cc:530,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:532,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:535,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 3
    argNames:
    - ' base_dir'
    - ' name_tmpl'
    - new_dir
    argTypes:
    - FilePath
    - FilePath::StringType
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 537
    functionName: butil::CreateTemporaryDirInDirImpl
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - FilePath::value
    - Append
    - DCHECK
    - DPLOG
    - butil::find
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::FilePath
    - const_cast<char*>
    - mkdtemp
    linkageType: ''
    returnType: bool
    signature: "bool CreateTemporaryDirInDirImpl(const FilePath& base_dir,\n                                        const
      FilePath::StringType& name_tmpl,\n                                        FilePath*
      new_dir)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FilePath::StringType::append
      Src: /src/brpc/src/butil/file_util_posix.cc:543,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/file_util_posix.cc:543,1
    - Dst: butil::CreateTemporaryDirInDirImpl
      Src: /src/brpc/src/butil/file_util_posix.cc:544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' base_dir'
    - ' prefix'
    - new_dir
    argTypes:
    - FilePath
    - FilePath::StringType
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 539
    functionDepth: 2
    functionLinenumber: 539
    functionLinenumberEnd: 545
    functionName: butil::CreateTemporaryDirInDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - FilePath::StringType::append
    - butil::CreateTemporaryDirInDirImpl
    - FILE_PATH_LITERAL
    linkageType: ''
    returnType: bool
    signature: "bool CreateTemporaryDirInDir(const FilePath& base_dir,\n                             const
      FilePath::StringType& prefix,\n                             FilePath* new_dir)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:550,1
    - Dst: butil::CreateTemporaryDirInDirImpl
      Src: /src/brpc/src/butil/file_util_posix.cc:553,1
    - Dst: butil::TempFileName
      Src: /src/brpc/src/butil/file_util_posix.cc:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' prefix'
    - new_temp_path
    argTypes:
    - FilePath::StringType
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 547
    functionDepth: 2
    functionLinenumber: 547
    functionLinenumberEnd: 554
    functionName: butil::CreateNewTempDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 8
    functionsReached:
    - butil::TempFileName
    - butil::GetTempDir
    - butil::CreateTemporaryDirInDirImpl
    linkageType: ''
    returnType: bool
    signature: "bool CreateNewTempDirectory(const FilePath::StringType& prefix,\n
      \                           FilePath* new_temp_path)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:559,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:561,1
    - Dst: mkdir
      Src: /src/brpc/src/butil/file_util_posix.cc:564,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:564,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:568,1
    - Dst: butil::File::OSErrorToFileError
      Src: /src/brpc/src/butil/file_util_posix.cc:572,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/file_util_posix.cc:580,1
    - Dst: DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:581,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:582,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:582,1
    - Dst: FilePath::DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:582,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/file_util_posix.cc:583,1
    - Dst: std::vector::rbegin
      Src: /src/brpc/src/butil/file_util_posix.cc:588,1
    - Dst: std::vector::rend
      Src: /src/brpc/src/butil/file_util_posix.cc:589,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:590,1
    - Dst: mkdir
      Src: /src/brpc/src/butil/file_util_posix.cc:601,1
    - Dst: std::vector<FilePath>::reverse_iterator::value
      Src: /src/brpc/src/butil/file_util_posix.cc:601,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:608,1
    - Dst: butil::File::OSErrorToFileError
      Src: /src/brpc/src/butil/file_util_posix.cc:610,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 3
    argNames:
    - ' full_path'
    - error
    - create_parents
    argTypes:
    - FilePath
    - File::Error*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 556
    functionDepth: 3
    functionLinenumber: 556
    functionLinenumberEnd: 615
    functionName: butil::CreateDirectoryAndGetError
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 28
    functionsReached:
    - butil::File::OSErrorToFileError
    - std::vector::rbegin
    - std::vector::push_back
    - butil::value
    - mkdir
    - DirName
    - FilePath::value
    - FilePath::DirName
    - butil::ThreadRestrictions::AssertIOAllowed
    - std::vector<FilePath>::reverse_iterator::value
    - std::vector::rend
    - butil::DirectoryExists
    linkageType: ''
    returnType: bool
    signature: "bool CreateDirectoryAndGetError(const FilePath& full_path,\n                                File::Error*
      error,\n                                bool create_parents)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::RealPath
      Src: /src/brpc/src/butil/file_util_posix.cc:619,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:625,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:625,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:626,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - ' path'
    - normalized_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 617
    functionDepth: 2
    functionLinenumber: 617
    functionLinenumberEnd: 631
    functionName: butil::NormalizeFilePath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 12
    functionsReached:
    - butil::RealPath
    - S_ISDIR
    - FilePath::value
    - butil::CallStat
    linkageType: ''
    returnType: bool
    signature: bool NormalizeFilePath(const FilePath& path, FilePath* normalized_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:639,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:639,1
    - Dst: S_ISLNK
      Src: /src/brpc/src/butil/file_util_posix.cc:642,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' file_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 635
    functionDepth: 2
    functionLinenumber: 635
    functionLinenumberEnd: 646
    functionName: butil::IsLink
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - S_ISLNK
    - butil::CallLstat
    - butil::value
    linkageType: ''
    returnType: bool
    signature: bool IsLink(const FilePath& file_path)
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: IsContentUri
      Src: /src/brpc/src/butil/file_util_posix.cc:651,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/src/butil/file_util_posix.cc:652,1
    - Dst: File::IsValid
      Src: /src/brpc/src/butil/file_util_posix.cc:653,1
    - Dst: File::GetInfo
      Src: /src/brpc/src/butil/file_util_posix.cc:655,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:658,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:658,1
    - Dst: File::Info*::FromStat
      Src: /src/brpc/src/butil/file_util_posix.cc:664,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:669,1
    - Dst: fopen
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    - Dst: fdopen
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::GetPlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::TakePlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:682,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:688,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:700,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:705,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:727,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:732,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:741,1
    - Dst: getcwd
      Src: /src/brpc/src/butil/file_util_posix.cc:744,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/file_util_posix.cc:745,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:748,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:754,1
    - Dst: chdir
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    - Dst: IsParent
      Src: /src/brpc/src/butil/file_util_posix.cc:763,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:764,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:772,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:773,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:777,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:782,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:786,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:789,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:790,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:791,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:810,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/file_util_posix.cc:813,1
    - Dst: getgrnam
      Src: /src/brpc/src/butil/file_util_posix.cc:814,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:816,1
    - Dst: std::set::insert
      Src: /src/brpc/src/butil/file_util_posix.cc:821,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:824,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:830,1
    - Dst: pathconf
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    - Dst: butil::DetermineDevShmExecutable
      Src: /src/brpc/src/butil/file_util_posix.cc:840,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:844,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:848,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:857,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/src/butil/file_util_posix.cc:874,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:877,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:884,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:891,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 145
    argCount: 2
    argNames:
    - ' file_path'
    - results
    argTypes:
    - FilePath
    - File::Info*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 648
    functionDepth: 4
    functionLinenumber: 648
    functionLinenumberEnd: 932
    functionName: butil::GetFileInfo
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - IGNORE_EINTR
    - OpenContentUriForRead
    - write
    - File::Info*::FromStat
    - open
    - read
    - arraysize
    - HANDLE_EINTR
    - IsContentUri
    - std::vector::begin
    - pathconf
    - butil::ThreadRestrictions::AssertIOAllowed
    - FilePath::Append
    - butil::value
    - butil::CallStat
    - chdir
    - butil::CopyDirectory
    - butil::DeleteFile
    - S_ISDIR
    - butil::DetermineDevShmExecutable
    - rename
    - butil::VerifySpecificPathControlledByUser
    - File::TakePlatformFile
    - DPLOG
    - creat
    - File::IsValid
    - fdopen
    - GetComponents
    - butil::FilePath
    - getgrnam
    - fopen
    - IsParent
    - std::set::insert
    - butil::GetTempDir
    - butil::VerifyPathControlledByUser
    - DLOG
    - std::vector::end
    - DCHECK
    - File::GetPlatformFile
    - NOTREACHED
    - getcwd
    - close
    - File::GetInfo
    - std::vector::size
    - butil::WriteFileDescriptor
    linkageType: ''
    returnType: bool
    signature: bool GetFileInfo(const FilePath& file_path, File::Info* results)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:669,1
    - Dst: fopen
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' filename'
    - mode
    argTypes:
    - FilePath
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 668
    functionDepth: 1
    functionLinenumber: 668
    functionLinenumberEnd: 675
    functionName: butil::OpenFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - fopen
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: FILE
    signature: FILE * OpenFile(const FilePath& filename, const char* mode)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fdopen
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::GetPlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::TakePlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:682,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - file
    - mode
    argTypes:
    - File
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 679
    functionDepth: 0
    functionLinenumber: 679
    functionLinenumberEnd: 684
    functionName: butil::FileToFILE
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - File::TakePlatformFile
    - fdopen
    - File::GetPlatformFile
    linkageType: ''
    returnType: FILE
    signature: FILE * FileToFILE(File file, const char* mode)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:688,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' filename'
    - data
    - max_size
    argTypes:
    - FilePath
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 697
    functionName: butil::ReadFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 8
    functionsReached:
    - IGNORE_EINTR
    - butil::value
    - open
    - read
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    linkageType: ''
    returnType: int
    signature: int ReadFile(const FilePath& filename, char* data, int max_size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:700,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:705,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' filename'
    - data
    - size
    argTypes:
    - FilePath
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 709
      start: 699
    functionDepth: 1
    functionLinenumber: 699
    functionLinenumberEnd: 709
    functionName: butil::WriteFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 34
    functionsReached:
    - IGNORE_EINTR
    - butil::value
    - HANDLE_EINTR
    - creat
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - butil::WriteFileDescriptor
    linkageType: ''
    returnType: int
    signature: int WriteFile(const FilePath& filename, const char* data, int size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - fd
    - data
    - size
    argTypes:
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 711
    functionDepth: 1
    functionLinenumber: 711
    functionLinenumberEnd: 724
    functionName: butil::WriteFileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - write
    - HANDLE_EINTR
    linkageType: ''
    returnType: int
    signature: int WriteFileDescriptor(const int fd, const char* data, int size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:727,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:732,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' filename'
    - data
    - size
    argTypes:
    - FilePath
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 736
    functionName: butil::AppendToFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - IGNORE_EINTR
    - butil::value
    - open
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - butil::WriteFileDescriptor
    linkageType: ''
    returnType: int
    signature: int AppendToFile(const FilePath& filename, const char* data, int size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:741,1
    - Dst: getcwd
      Src: /src/brpc/src/butil/file_util_posix.cc:744,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/file_util_posix.cc:745,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - dir
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 750
    functionName: butil::GetCurrentDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::FilePath
    - NOTREACHED
    - getcwd
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool GetCurrentDirectory(FilePath* dir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:754,1
    - Dst: chdir
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 757
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 757
    functionName: butil::SetCurrentDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - chdir
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool SetCurrentDirectory(const FilePath& path)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IsParent
      Src: /src/brpc/src/butil/file_util_posix.cc:763,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:764,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:772,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:773,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:777,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:782,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:786,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:789,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:790,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:791,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 4
    argNames:
    - ' base'
    - ' path'
    - owner_uid
    - ' group_gids'
    argTypes:
    - FilePath
    - FilePath
    - uid_t
    - std::set<gid_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 759
    functionDepth: 3
    functionLinenumber: 759
    functionLinenumberEnd: 796
    functionName: butil::VerifyPathControlledByUser
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 21
    functionsReached:
    - IsParent
    - butil::value
    - butil::VerifySpecificPathControlledByUser
    - DLOG
    - std::vector::end
    - DCHECK
    - std::vector::begin
    - GetComponents
    - FilePath::Append
    linkageType: ''
    returnType: bool
    signature: "bool VerifyPathControlledByUser(const FilePath& base,\n                                const
      FilePath& path,\n                                uid_t owner_uid,\n                                const
      std::set<gid_t>& group_gids)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:810,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/file_util_posix.cc:813,1
    - Dst: getgrnam
      Src: /src/brpc/src/butil/file_util_posix.cc:814,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:816,1
    - Dst: std::set::insert
      Src: /src/brpc/src/butil/file_util_posix.cc:821,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:824,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 799
    functionDepth: 4
    functionLinenumber: 799
    functionLinenumberEnd: 826
    functionName: butil::VerifyPathControlledByAdmin
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - std::set::insert
    - butil::VerifyPathControlledByUser
    - arraysize
    - DPLOG
    - butil::ThreadRestrictions::AssertIOAllowed
    - getgrnam
    linkageType: ''
    returnType: bool
    signature: bool VerifyPathControlledByAdmin(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:830,1
    - Dst: pathconf
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 832
      start: 829
    functionDepth: 1
    functionLinenumber: 829
    functionLinenumberEnd: 832
    functionName: butil::GetMaximumPathComponentLength
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::value
    - pathconf
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int GetMaximumPathComponentLength(const FilePath& path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::DetermineDevShmExecutable
      Src: /src/brpc/src/butil/file_util_posix.cc:840,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:844,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:848,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - executable
    - path
    argTypes:
    - bool
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 836
    functionDepth: 4
    functionLinenumber: 836
    functionLinenumberEnd: 849
    functionName: butil::GetShmemTempDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::DetermineDevShmExecutable
    - butil::GetTempDir
    - butil::FilePath
    linkageType: ''
    returnType: bool
    signature: bool GetShmemTempDir(bool executable, FilePath* path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:857,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: CopyDirectory
      Src: /src/brpc/src/butil/file_util_posix.cc:874,1
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:877,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 856
    functionDepth: 1
    functionLinenumber: 856
    functionLinenumberEnd: 879
    functionName: butil::internal::MoveUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - CallStat
    - CopyDirectory
    - S_ISDIR
    - DeleteFile
    - butil::ThreadRestrictions::AssertIOAllowed
    - rename
    linkageType: ''
    returnType: bool
    signature: bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:884,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:891,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 883
    functionDepth: 1
    functionLinenumber: 883
    functionLinenumberEnd: 928
    functionName: butil::internal::CopyFileUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - IGNORE_EINTR
    - open
    - read
    - HANDLE_EINTR
    - creat
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - write
    - std::vector::size
    linkageType: ''
    returnType: bool
    signature: bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:857,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: CopyDirectory
      Src: /src/brpc/src/butil/file_util_posix.cc:874,1
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:877,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 856
    functionDepth: 1
    functionLinenumber: 856
    functionLinenumberEnd: 879
    functionName: butil::internal::MoveUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - CallStat
    - CopyDirectory
    - S_ISDIR
    - DeleteFile
    - butil::ThreadRestrictions::AssertIOAllowed
    - rename
    linkageType: ''
    returnType: bool
    signature: bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:884,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:891,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 883
    functionDepth: 1
    functionLinenumber: 883
    functionLinenumberEnd: 928
    functionName: butil::internal::CopyFileUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - IGNORE_EINTR
    - open
    - read
    - HANDLE_EINTR
    - creat
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - write
    - std::vector::size
    linkageType: ''
    returnType: bool
    signature: bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:64,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - butil::stat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:68,1
    - Dst: lstat
      Src: /src/brpc/src/butil/file_util_posix.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - lstat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:73,1
    - Dst: stat64
      Src: /src/brpc/src/butil/file_util_posix.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - stat64
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:77,1
    - Dst: lstat64
      Src: /src/brpc/src/butil/file_util_posix.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::ThreadRestrictions::AssertIOAllowed
    - lstat64
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:84,1
    - Dst: realpath
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' path'
    - real_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 91
    functionName: butil::RealPath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - butil::FilePath
    - realpath
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool RealPath(const FilePath& path, FilePath* real_path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:99,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:100,1
    - Dst: S_ISLNK
      Src: /src/brpc/src/butil/file_util_posix.cc:104,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::ContainsKey
      Src: /src/brpc/src/butil/file_util_posix.cc:117,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 3
    argNames:
    - ' path'
    - owner_uid
    - ' group_gids'
    argTypes:
    - FilePath
    - uid_t
    - std::set<gid_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 94
    functionDepth: 2
    functionLinenumber: 94
    functionLinenumberEnd: 130
    functionName: butil::VerifySpecificPathControlledByUser
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - butil::value
    - DLOG
    - S_ISLNK
    - butil::ContainsKey
    - DPLOG
    - butil::CallLstat
    linkageType: ''
    returnType: bool
    signature: "bool VerifySpecificPathControlledByUser(const FilePath& path,\n                                        uid_t
      owner_uid,\n                                        const std::set<gid_t>& group_gids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: butil::mac::BaseBundleID
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:138,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 142
    functionName: butil::TempFileName
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 3
    functionsReached:
    - butil::StringPrintf
    - std::string
    - butil::mac::BaseBundleID
    linkageType: ''
    returnType: std::string
    signature: std::string TempFileName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:148,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: butil::TempFileName
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: FilePath*::value
      Src: /src/brpc/src/butil/file_util_posix.cc:150,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    - Dst: mkstemp
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - directory
    - path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 155
    functionName: butil::CreateAndOpenFdForTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - mkstemp
    - FilePath*::value
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - FilePath::Append
    - butil::TempFileName
    - const_cast<char*>
    - butil::c_str
    linkageType: ''
    returnType: int
    signature: int CreateAndOpenFdForTemporaryFile(FilePath directory, FilePath* path)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: ScopedFD::is_valid
      Src: /src/brpc/src/butil/file_util_posix.cc:168,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:169,1
    - Dst: sysconf
      Src: /src/brpc/src/butil/file_util_posix.cc:170,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/file_util_posix.cc:172,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:173,1
    - Dst: mmap
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: ScopedFD::get
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: mprotect
      Src: /src/brpc/src/butil/file_util_posix.cc:176,1
    - Dst: munmap
      Src: /src/brpc/src/butil/file_util_posix.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 163
    functionDepth: 3
    functionLinenumber: 163
    functionLinenumberEnd: 182
    functionName: butil::DetermineDevShmExecutable
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - CHECK_GE
    - ScopedFD::get
    - mprotect
    - munmap
    - ScopedFD::is_valid
    - static_cast<size_t>
    - sysconf
    - butil::DeleteFile
    - butil::CreateAndOpenFdForTemporaryFile
    - mmap
    - butil::FilePath
    linkageType: ''
    returnType: bool
    signature: bool DetermineDevShmExecutable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:64,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 66
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - butil::stat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:68,1
    - Dst: lstat
      Src: /src/brpc/src/butil/file_util_posix.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - lstat
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:73,1
    - Dst: stat64
      Src: /src/brpc/src/butil/file_util_posix.cc:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    functionName: butil::CallStat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - stat64
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int CallStat(const char *path, stat_wrapper_t *sb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:77,1
    - Dst: lstat64
      Src: /src/brpc/src/butil/file_util_posix.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - path
    - sb
    argTypes:
    - char*
    - stat_wrapper_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::CallLstat
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - butil::ThreadRestrictions::AssertIOAllowed
    - lstat64
    linkageType: ''
    returnType: int
    signature: int CallLstat(const char *path, stat_wrapper_t *sb)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:84,1
    - Dst: realpath
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:86,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' path'
    - real_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 91
    functionName: butil::RealPath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - butil::FilePath
    - realpath
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool RealPath(const FilePath& path, FilePath* real_path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:98,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:99,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:100,1
    - Dst: S_ISLNK
      Src: /src/brpc/src/butil/file_util_posix.cc:104,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:105,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:111,1
    - Dst: butil::ContainsKey
      Src: /src/brpc/src/butil/file_util_posix.cc:117,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:118,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:124,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 3
    argNames:
    - ' path'
    - owner_uid
    - ' group_gids'
    argTypes:
    - FilePath
    - uid_t
    - std::set<gid_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 94
    functionDepth: 2
    functionLinenumber: 94
    functionLinenumberEnd: 130
    functionName: butil::VerifySpecificPathControlledByUser
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - butil::value
    - DLOG
    - S_ISLNK
    - butil::ContainsKey
    - DPLOG
    - butil::CallLstat
    linkageType: ''
    returnType: bool
    signature: "bool VerifySpecificPathControlledByUser(const FilePath& path,\n                                        uid_t
      owner_uid,\n                                        const std::set<gid_t>& group_gids)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: butil::mac::BaseBundleID
      Src: /src/brpc/src/butil/file_util_posix.cc:134,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:138,1
    - Dst: std::string
      Src: /src/brpc/src/butil/file_util_posix.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 142
    functionName: butil::TempFileName
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::StringPrintf
    - std::string
    - butil::mac::BaseBundleID
    linkageType: ''
    returnType: std::string
    signature: std::string TempFileName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:148,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: butil::TempFileName
      Src: /src/brpc/src/butil/file_util_posix.cc:149,1
    - Dst: FilePath*::value
      Src: /src/brpc/src/butil/file_util_posix.cc:150,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: butil::c_str
      Src: /src/brpc/src/butil/file_util_posix.cc:152,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    - Dst: mkstemp
      Src: /src/brpc/src/butil/file_util_posix.cc:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - directory
    - path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 147
    functionDepth: 2
    functionLinenumber: 147
    functionLinenumberEnd: 155
    functionName: butil::CreateAndOpenFdForTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - mkstemp
    - FilePath*::value
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - FilePath::Append
    - butil::TempFileName
    - const_cast<char*>
    - butil::c_str
    linkageType: ''
    returnType: int
    signature: int CreateAndOpenFdForTemporaryFile(FilePath directory, FilePath* path)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:167,1
    - Dst: ScopedFD::is_valid
      Src: /src/brpc/src/butil/file_util_posix.cc:168,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:169,1
    - Dst: sysconf
      Src: /src/brpc/src/butil/file_util_posix.cc:170,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/file_util_posix.cc:172,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/butil/file_util_posix.cc:173,1
    - Dst: mmap
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: ScopedFD::get
      Src: /src/brpc/src/butil/file_util_posix.cc:174,1
    - Dst: mprotect
      Src: /src/brpc/src/butil/file_util_posix.cc:176,1
    - Dst: munmap
      Src: /src/brpc/src/butil/file_util_posix.cc:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 163
    functionDepth: 3
    functionLinenumber: 163
    functionLinenumberEnd: 182
    functionName: butil::DetermineDevShmExecutable
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - CHECK_GE
    - ScopedFD::get
    - mprotect
    - munmap
    - ScopedFD::is_valid
    - static_cast<size_t>
    - sysconf
    - butil::DeleteFile
    - butil::CreateAndOpenFdForTemporaryFile
    - mmap
    - butil::FilePath
    linkageType: ''
    returnType: bool
    signature: bool DetermineDevShmExecutable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:188,1
    - Dst: realpath
      Src: /src/brpc/src/butil/file_util_posix.cc:190,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:190,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:191,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 193
    functionName: butil::MakeAbsoluteFilePath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 1
    functionsReached:
    - butil::FilePath
    - realpath
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: FilePath
    signature: FilePath MakeAbsoluteFilePath(const FilePath& input)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:200,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:201,1
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:203,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:209,1
    - Dst: unlink
      Src: /src/brpc/src/butil/file_util_posix.cc:210,1
    - Dst: rmdir
      Src: /src/brpc/src/butil/file_util_posix.cc:212,1
    - Dst: std::stack::push
      Src: /src/brpc/src/butil/file_util_posix.cc:216,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:216,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util_posix.cc:220,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:220,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util_posix.cc:221,1
    - Dst: FileEnumerator::GetInfo
      Src: /src/brpc/src/butil/file_util_posix.cc:222,1
    - Dst: std::stack::push
      Src: /src/brpc/src/butil/file_util_posix.cc:223,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:223,1
    - Dst: unlink
      Src: /src/brpc/src/butil/file_util_posix.cc:225,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:225,1
    - Dst: std::stack::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:228,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:229,1
    - Dst: std::stack::top
      Src: /src/brpc/src/butil/file_util_posix.cc:229,1
    - Dst: std::stack::pop
      Src: /src/brpc/src/butil/file_util_posix.cc:230,1
    - Dst: rmdir
      Src: /src/brpc/src/butil/file_util_posix.cc:231,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:231,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ' path'
    - recursive
    argTypes:
    - FilePath
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 199
    functionDepth: 2
    functionLinenumber: 199
    functionLinenumberEnd: 234
    functionName: butil::DeleteFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 105
    functionsReached:
    - std::stack::push
    - FilePath::empty
    - std::stack::pop
    - butil::value
    - FilePath::value
    - FileEnumerator::Next
    - butil::FilePath
    - rmdir
    - std::stack::empty
    - S_ISDIR
    - std::stack::top
    - butil::ThreadRestrictions::AssertIOAllowed
    - FileEnumerator::GetInfo
    - butil::CallLstat
    - unlink
    linkageType: ''
    returnType: bool
    signature: bool DeleteFile(const FilePath& path, bool recursive)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:239,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:240,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:240,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:240,1
    - Dst: butil::File::OSErrorToFileError
      Src: /src/brpc/src/butil/file_util_posix.cc:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' from_path'
    - ' to_path'
    - error
    argTypes:
    - FilePath
    - FilePath
    - File::Error*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 245
    functionName: butil::ReplaceFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::File::OSErrorToFileError
    - butil::value
    - rename
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: "bool ReplaceFile(const FilePath& from_path,\n                 const
      FilePath& to_path,\n                 File::Error* error)"
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:250,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:254,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:254,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:255,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:255,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:257,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/file_util_posix.cc:263,1
    - Dst: butil::MakeAbsoluteFilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:264,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:265,1
    - Dst: butil::MakeAbsoluteFilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:268,1
    - Dst: FilePath::DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:268,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:269,1
    - Dst: butil::MakeAbsoluteFilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:272,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:273,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:275,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:275,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:276,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:276,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:277,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:290,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:290,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:291,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:292,1
    - Dst: butil::stat
      Src: /src/brpc/src/butil/file_util_posix.cc:297,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:297,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:298,1
    - Dst: DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:301,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:307,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:307,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:310,1
    - Dst: FilePath::AppendRelativePath
      Src: /src/brpc/src/butil/file_util_posix.cc:315,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:321,1
    - Dst: mkdir
      Src: /src/brpc/src/butil/file_util_posix.cc:322,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:322,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:324,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:325,1
    - Dst: S_ISREG
      Src: /src/brpc/src/butil/file_util_posix.cc:328,1
    - Dst: butil::CopyFile
      Src: /src/brpc/src/butil/file_util_posix.cc:329,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:330,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:331,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:335,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:336,1
    - Dst: FileEnumerator::Next
      Src: /src/brpc/src/butil/file_util_posix.cc:339,1
    - Dst: FilePath::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:340,1
    - Dst: FileEnumerator::GetInfo
      Src: /src/brpc/src/butil/file_util_posix.cc:341,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 57
    argCount: 3
    argNames:
    - ' from_path'
    - ' to_path'
    - recursive
    argTypes:
    - FilePath
    - FilePath
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 247
    functionDepth: 2
    functionLinenumber: 247
    functionLinenumberEnd: 345
    functionName: butil::CopyDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 37
    functionsReached:
    - FilePath::empty
    - butil::CopyFile
    - butil::value
    - FilePath::AppendRelativePath
    - FilePath::value
    - DLOG
    - butil::MakeAbsoluteFilePath
    - DirName
    - mkdir
    - FileEnumerator::Next
    - FilePath::DirName
    - DCHECK
    - S_ISREG
    - FileEnumerator::GetInfo
    - S_ISDIR
    - butil::PathExists
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::stat
    linkageType: ''
    returnType: bool
    signature: "bool CopyDirectory(const FilePath& from_path,\n                   const
      FilePath& to_path,\n                   bool recursive)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:348,1
    - Dst: IsContentUri
      Src: /src/brpc/src/butil/file_util_posix.cc:350,1
    - Dst: ContentUriExists
      Src: /src/brpc/src/butil/file_util_posix.cc:351,1
    - Dst: access
      Src: /src/brpc/src/butil/file_util_posix.cc:354,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:354,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 355
    functionName: butil::PathExists
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 190
    functionsReached:
    - butil::value
    - access
    - ContentUriExists
    - IsContentUri
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool PathExists(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:358,1
    - Dst: access
      Src: /src/brpc/src/butil/file_util_posix.cc:359,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:359,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 360
    functionName: butil::PathIsWritable
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::value
    - access
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool PathIsWritable(const FilePath& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:363,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:365,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:365,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 362
    functionDepth: 2
    functionLinenumber: 362
    functionLinenumberEnd: 368
    functionName: butil::DirectoryExists
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 26
    functionsReached:
    - S_ISDIR
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::CallStat
    linkageType: ''
    returnType: bool
    signature: bool DirectoryExists(const FilePath& path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:374,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 3
    argNames:
    - fd
    - buffer
    - bytes
    argTypes:
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 380
    functionName: butil::ReadFromFD
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - read
    - HANDLE_EINTR
    linkageType: ''
    returnType: bool
    signature: bool ReadFromFD(int fd, char* buffer, size_t bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:384,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:384,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:385,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:385,1
    - Dst: ::symlink
      Src: /src/brpc/src/butil/file_util_posix.cc:386,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:386,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:387,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' target_path'
    - ' symlink_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 388
    functionName: butil::CreateSymbolicLink
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 20
    functionsReached:
    - butil::value
    - ::symlink
    - butil::empty
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: "bool CreateSymbolicLink(const FilePath& target_path,\n                        const
      FilePath& symlink_path)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:391,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/file_util_posix.cc:391,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:392,1
    - Dst: ::readlink
      Src: /src/brpc/src/butil/file_util_posix.cc:394,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:394,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/file_util_posix.cc:394,1
    - Dst: FilePath*::clear
      Src: /src/brpc/src/butil/file_util_posix.cc:397,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:401,1
    - Dst: FilePath::StringType
      Src: /src/brpc/src/butil/file_util_posix.cc:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' symlink_path'
    - target_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 390
    functionDepth: 1
    functionLinenumber: 390
    functionLinenumberEnd: 403
    functionName: butil::ReadSymbolicLink
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::value
    - ::readlink
    - butil::empty
    - arraysize
    - DCHECK
    - butil::FilePath
    - FilePath::StringType
    - FilePath*::clear
    linkageType: ''
    returnType: bool
    signature: bool ReadSymbolicLink(const FilePath& symlink_path, FilePath* target_path)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:406,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:407,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:412,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' path'
    - mode
    argTypes:
    - FilePath
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 405
    functionDepth: 2
    functionLinenumber: 405
    functionLinenumberEnd: 417
    functionName: butil::GetPosixFilePermissions
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 20
    functionsReached:
    - butil::value
    - DCHECK
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::CallStat
    linkageType: ''
    returnType: bool
    signature: bool GetPosixFilePermissions(const FilePath& path, int* mode)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:421,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:422,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:426,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:426,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:433,1
    - Dst: chmod
      Src: /src/brpc/src/butil/file_util_posix.cc:433,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:433,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' path'
    - mode
    argTypes:
    - FilePath
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 419
    functionDepth: 2
    functionLinenumber: 419
    functionLinenumberEnd: 437
    functionName: butil::SetPosixFilePermissions
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 20
    functionsReached:
    - butil::value
    - butil::CallStat
    - chmod
    - DCHECK
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: "bool SetPosixFilePermissions(const FilePath& path,\n                             int
      mode)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/file_util_posix.cc:442,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:444,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:446,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - path
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 449
    functionName: butil::GetTempDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 14
    functionsReached:
    - butil::FilePath
    - getenv
    linkageType: ''
    returnType: bool
    signature: bool GetTempDir(FilePath* path)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SysInfo::IsRunningOnChromeOS
      Src: /src/brpc/src/butil/file_util_posix.cc:455,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:458,1
    - Dst: getenv
      Src: /src/brpc/src/butil/file_util_posix.cc:462,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:464,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:467,1
    - Dst: g_get_home_dir
      Src: /src/brpc/src/butil/file_util_posix.cc:475,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:477,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:481,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:485,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 453
    functionDepth: 2
    functionLinenumber: 453
    functionLinenumberEnd: 486
    functionName: butil::GetHomeDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - g_get_home_dir
    - butil::GetTempDir
    - DLOG
    - SysInfo::IsRunningOnChromeOS
    - butil::FilePath
    - getenv
    linkageType: ''
    returnType: FilePath
    signature: FilePath GetHomeDir()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:490,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:492,1
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:494,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:497,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - path
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 489
    functionDepth: 3
    functionLinenumber: 489
    functionLinenumberEnd: 499
    functionName: butil::CreateTemporaryFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::CreateAndOpenFdForTemporaryFile
    - close
    - butil::GetTempDir
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool CreateTemporaryFile(FilePath* path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:502,1
    - Dst: fdopen
      Src: /src/brpc/src/butil/file_util_posix.cc:506,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:508,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' dir'
    - path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 501
    functionDepth: 3
    functionLinenumber: 501
    functionLinenumberEnd: 510
    functionName: butil::CreateAndOpenTemporaryFileInDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - butil::CreateAndOpenFdForTemporaryFile
    - close
    - fdopen
    linkageType: ''
    returnType: FILE
    signature: FILE * CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath*
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:513,1
    - Dst: butil::CreateAndOpenFdForTemporaryFile
      Src: /src/brpc/src/butil/file_util_posix.cc:514,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:515,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:515,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - ' dir'
    - temp_file
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 512
    functionDepth: 3
    functionLinenumber: 512
    functionLinenumberEnd: 516
    functionName: butil::CreateTemporaryFileInDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::CreateAndOpenFdForTemporaryFile
    - close
    - IGNORE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:521,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:522,1
    - Dst: butil::find
      Src: /src/brpc/src/butil/file_util_posix.cc:522,1
    - Dst: Append
      Src: /src/brpc/src/butil/file_util_posix.cc:525,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:526,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/butil/file_util_posix.cc:529,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/file_util_posix.cc:529,1
    - Dst: mkdtemp
      Src: /src/brpc/src/butil/file_util_posix.cc:530,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:532,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:535,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 3
    argNames:
    - ' base_dir'
    - ' name_tmpl'
    - new_dir
    argTypes:
    - FilePath
    - FilePath::StringType
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 537
    functionName: butil::CreateTemporaryDirInDirImpl
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - std::string::c_str
    - FilePath::value
    - Append
    - DCHECK
    - DPLOG
    - butil::find
    - butil::ThreadRestrictions::AssertIOAllowed
    - butil::FilePath
    - const_cast<char*>
    - mkdtemp
    linkageType: ''
    returnType: bool
    signature: "bool CreateTemporaryDirInDirImpl(const FilePath& base_dir,\n                                        const
      FilePath::StringType& name_tmpl,\n                                        FilePath*
      new_dir)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FilePath::StringType::append
      Src: /src/brpc/src/butil/file_util_posix.cc:543,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/file_util_posix.cc:543,1
    - Dst: butil::CreateTemporaryDirInDirImpl
      Src: /src/brpc/src/butil/file_util_posix.cc:544,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' base_dir'
    - ' prefix'
    - new_dir
    argTypes:
    - FilePath
    - FilePath::StringType
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 539
    functionDepth: 2
    functionLinenumber: 539
    functionLinenumberEnd: 545
    functionName: butil::CreateTemporaryDirInDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - FilePath::StringType::append
    - butil::CreateTemporaryDirInDirImpl
    - FILE_PATH_LITERAL
    linkageType: ''
    returnType: bool
    signature: "bool CreateTemporaryDirInDir(const FilePath& base_dir,\n                             const
      FilePath::StringType& prefix,\n                             FilePath* new_dir)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:550,1
    - Dst: butil::CreateTemporaryDirInDirImpl
      Src: /src/brpc/src/butil/file_util_posix.cc:553,1
    - Dst: butil::TempFileName
      Src: /src/brpc/src/butil/file_util_posix.cc:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' prefix'
    - new_temp_path
    argTypes:
    - FilePath::StringType
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 547
    functionDepth: 2
    functionLinenumber: 547
    functionLinenumberEnd: 554
    functionName: butil::CreateNewTempDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 8
    functionsReached:
    - butil::TempFileName
    - butil::GetTempDir
    - butil::CreateTemporaryDirInDirImpl
    linkageType: ''
    returnType: bool
    signature: "bool CreateNewTempDirectory(const FilePath::StringType& prefix,\n
      \                           FilePath* new_temp_path)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:559,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:561,1
    - Dst: mkdir
      Src: /src/brpc/src/butil/file_util_posix.cc:564,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:564,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:568,1
    - Dst: butil::File::OSErrorToFileError
      Src: /src/brpc/src/butil/file_util_posix.cc:572,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/file_util_posix.cc:580,1
    - Dst: DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:581,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:582,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:582,1
    - Dst: FilePath::DirName
      Src: /src/brpc/src/butil/file_util_posix.cc:582,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/file_util_posix.cc:583,1
    - Dst: std::vector::rbegin
      Src: /src/brpc/src/butil/file_util_posix.cc:588,1
    - Dst: std::vector::rend
      Src: /src/brpc/src/butil/file_util_posix.cc:589,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:590,1
    - Dst: mkdir
      Src: /src/brpc/src/butil/file_util_posix.cc:601,1
    - Dst: std::vector<FilePath>::reverse_iterator::value
      Src: /src/brpc/src/butil/file_util_posix.cc:601,1
    - Dst: butil::DirectoryExists
      Src: /src/brpc/src/butil/file_util_posix.cc:608,1
    - Dst: butil::File::OSErrorToFileError
      Src: /src/brpc/src/butil/file_util_posix.cc:610,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 3
    argNames:
    - ' full_path'
    - error
    - create_parents
    argTypes:
    - FilePath
    - File::Error*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 556
    functionDepth: 3
    functionLinenumber: 556
    functionLinenumberEnd: 615
    functionName: butil::CreateDirectoryAndGetError
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 28
    functionsReached:
    - butil::File::OSErrorToFileError
    - std::vector::rbegin
    - std::vector::push_back
    - butil::value
    - mkdir
    - DirName
    - FilePath::value
    - FilePath::DirName
    - butil::ThreadRestrictions::AssertIOAllowed
    - std::vector<FilePath>::reverse_iterator::value
    - std::vector::rend
    - butil::DirectoryExists
    linkageType: ''
    returnType: bool
    signature: "bool CreateDirectoryAndGetError(const FilePath& full_path,\n                                File::Error*
      error,\n                                bool create_parents)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::RealPath
      Src: /src/brpc/src/butil/file_util_posix.cc:619,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:625,1
    - Dst: FilePath::value
      Src: /src/brpc/src/butil/file_util_posix.cc:625,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:626,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - ' path'
    - normalized_path
    argTypes:
    - FilePath
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 617
    functionDepth: 2
    functionLinenumber: 617
    functionLinenumberEnd: 631
    functionName: butil::NormalizeFilePath
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 12
    functionsReached:
    - butil::RealPath
    - S_ISDIR
    - FilePath::value
    - butil::CallStat
    linkageType: ''
    returnType: bool
    signature: bool NormalizeFilePath(const FilePath& path, FilePath* normalized_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::CallLstat
      Src: /src/brpc/src/butil/file_util_posix.cc:639,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:639,1
    - Dst: S_ISLNK
      Src: /src/brpc/src/butil/file_util_posix.cc:642,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' file_path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 635
    functionDepth: 2
    functionLinenumber: 635
    functionLinenumberEnd: 646
    functionName: butil::IsLink
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - S_ISLNK
    - butil::CallLstat
    - butil::value
    linkageType: ''
    returnType: bool
    signature: bool IsLink(const FilePath& file_path)
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: IsContentUri
      Src: /src/brpc/src/butil/file_util_posix.cc:651,1
    - Dst: OpenContentUriForRead
      Src: /src/brpc/src/butil/file_util_posix.cc:652,1
    - Dst: File::IsValid
      Src: /src/brpc/src/butil/file_util_posix.cc:653,1
    - Dst: File::GetInfo
      Src: /src/brpc/src/butil/file_util_posix.cc:655,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:658,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:658,1
    - Dst: File::Info*::FromStat
      Src: /src/brpc/src/butil/file_util_posix.cc:664,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:669,1
    - Dst: fopen
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    - Dst: fdopen
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::GetPlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::TakePlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:682,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:688,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:700,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:705,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:727,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:732,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:741,1
    - Dst: getcwd
      Src: /src/brpc/src/butil/file_util_posix.cc:744,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/file_util_posix.cc:745,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:748,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:754,1
    - Dst: chdir
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    - Dst: IsParent
      Src: /src/brpc/src/butil/file_util_posix.cc:763,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:764,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:772,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:773,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:777,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:782,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:786,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:789,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:790,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:791,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:810,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/file_util_posix.cc:813,1
    - Dst: getgrnam
      Src: /src/brpc/src/butil/file_util_posix.cc:814,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:816,1
    - Dst: std::set::insert
      Src: /src/brpc/src/butil/file_util_posix.cc:821,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:824,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:830,1
    - Dst: pathconf
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    - Dst: butil::DetermineDevShmExecutable
      Src: /src/brpc/src/butil/file_util_posix.cc:840,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:844,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:848,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:857,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: butil::CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: butil::CopyDirectory
      Src: /src/brpc/src/butil/file_util_posix.cc:874,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:877,1
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:884,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:891,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 145
    argCount: 2
    argNames:
    - ' file_path'
    - results
    argTypes:
    - FilePath
    - File::Info*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 648
    functionDepth: 4
    functionLinenumber: 648
    functionLinenumberEnd: 932
    functionName: butil::GetFileInfo
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - IGNORE_EINTR
    - OpenContentUriForRead
    - write
    - File::Info*::FromStat
    - open
    - read
    - arraysize
    - HANDLE_EINTR
    - IsContentUri
    - std::vector::begin
    - pathconf
    - butil::ThreadRestrictions::AssertIOAllowed
    - FilePath::Append
    - butil::value
    - butil::CallStat
    - chdir
    - butil::CopyDirectory
    - butil::DeleteFile
    - S_ISDIR
    - butil::DetermineDevShmExecutable
    - rename
    - butil::VerifySpecificPathControlledByUser
    - File::TakePlatformFile
    - DPLOG
    - creat
    - File::IsValid
    - fdopen
    - GetComponents
    - butil::FilePath
    - getgrnam
    - fopen
    - IsParent
    - std::set::insert
    - butil::GetTempDir
    - butil::VerifyPathControlledByUser
    - DLOG
    - std::vector::end
    - DCHECK
    - File::GetPlatformFile
    - NOTREACHED
    - getcwd
    - close
    - File::GetInfo
    - std::vector::size
    - butil::WriteFileDescriptor
    linkageType: ''
    returnType: bool
    signature: bool GetFileInfo(const FilePath& file_path, File::Info* results)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:669,1
    - Dst: fopen
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:672,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' filename'
    - mode
    argTypes:
    - FilePath
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 668
    functionDepth: 1
    functionLinenumber: 668
    functionLinenumberEnd: 675
    functionName: butil::OpenFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 2
    functionsReached:
    - fopen
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: FILE
    signature: FILE * OpenFile(const FilePath& filename, const char* mode)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fdopen
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::GetPlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:680,1
    - Dst: File::TakePlatformFile
      Src: /src/brpc/src/butil/file_util_posix.cc:682,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - file
    - mode
    argTypes:
    - File
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 679
    functionDepth: 0
    functionLinenumber: 679
    functionLinenumberEnd: 684
    functionName: butil::FileToFILE
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - File::TakePlatformFile
    - fdopen
    - File::GetPlatformFile
    linkageType: ''
    returnType: FILE
    signature: FILE * FileToFILE(File file, const char* mode)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:688,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:689,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:693,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:694,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' filename'
    - data
    - max_size
    argTypes:
    - FilePath
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 697
    functionName: butil::ReadFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 8
    functionsReached:
    - IGNORE_EINTR
    - butil::value
    - open
    - read
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    linkageType: ''
    returnType: int
    signature: int ReadFile(const FilePath& filename, char* data, int max_size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:700,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:701,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:705,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:706,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' filename'
    - data
    - size
    argTypes:
    - FilePath
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 709
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 709
    functionName: butil::WriteFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 34
    functionsReached:
    - IGNORE_EINTR
    - butil::value
    - HANDLE_EINTR
    - creat
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - butil::WriteFileDescriptor
    linkageType: ''
    returnType: int
    signature: int WriteFile(const FilePath& filename, const char* data, int size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:717,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - fd
    - data
    - size
    argTypes:
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 711
    functionDepth: 1
    functionLinenumber: 711
    functionLinenumberEnd: 724
    functionName: butil::WriteFileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 5
    functionsReached:
    - write
    - HANDLE_EINTR
    linkageType: ''
    returnType: int
    signature: int WriteFileDescriptor(const int fd, const char* data, int size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:727,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:728,1
    - Dst: butil::WriteFileDescriptor
      Src: /src/brpc/src/butil/file_util_posix.cc:732,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:733,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 3
    argNames:
    - ' filename'
    - data
    - size
    argTypes:
    - FilePath
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 736
    functionName: butil::AppendToFile
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - IGNORE_EINTR
    - butil::value
    - open
    - HANDLE_EINTR
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - butil::WriteFileDescriptor
    linkageType: ''
    returnType: int
    signature: int AppendToFile(const FilePath& filename, const char* data, int size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:741,1
    - Dst: getcwd
      Src: /src/brpc/src/butil/file_util_posix.cc:744,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/file_util_posix.cc:745,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - dir
    argTypes:
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 750
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 750
    functionName: butil::GetCurrentDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::FilePath
    - NOTREACHED
    - getcwd
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool GetCurrentDirectory(FilePath* dir)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:754,1
    - Dst: chdir
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:755,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 757
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 757
    functionName: butil::SetCurrentDirectory
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - chdir
    - butil::value
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: bool
    signature: bool SetCurrentDirectory(const FilePath& path)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IsParent
      Src: /src/brpc/src/butil/file_util_posix.cc:763,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:764,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:765,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:772,1
    - Dst: GetComponents
      Src: /src/brpc/src/butil/file_util_posix.cc:773,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/butil/file_util_posix.cc:776,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:777,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:781,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/file_util_posix.cc:782,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:786,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/file_util_posix.cc:789,1
    - Dst: FilePath::Append
      Src: /src/brpc/src/butil/file_util_posix.cc:790,1
    - Dst: butil::VerifySpecificPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:791,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 4
    argNames:
    - ' base'
    - ' path'
    - owner_uid
    - ' group_gids'
    argTypes:
    - FilePath
    - FilePath
    - uid_t
    - std::set<gid_t>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 759
    functionDepth: 3
    functionLinenumber: 759
    functionLinenumberEnd: 796
    functionName: butil::VerifyPathControlledByUser
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 23
    functionsReached:
    - IsParent
    - butil::value
    - butil::VerifySpecificPathControlledByUser
    - DLOG
    - std::vector::end
    - DCHECK
    - std::vector::begin
    - GetComponents
    - FilePath::Append
    linkageType: ''
    returnType: bool
    signature: "bool VerifyPathControlledByUser(const FilePath& base,\n                                const
      FilePath& path,\n                                uid_t owner_uid,\n                                const
      std::set<gid_t>& group_gids)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:810,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/file_util_posix.cc:813,1
    - Dst: getgrnam
      Src: /src/brpc/src/butil/file_util_posix.cc:814,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/file_util_posix.cc:816,1
    - Dst: std::set::insert
      Src: /src/brpc/src/butil/file_util_posix.cc:821,1
    - Dst: butil::VerifyPathControlledByUser
      Src: /src/brpc/src/butil/file_util_posix.cc:824,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 799
    functionDepth: 4
    functionLinenumber: 799
    functionLinenumberEnd: 826
    functionName: butil::VerifyPathControlledByAdmin
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - std::set::insert
    - butil::VerifyPathControlledByUser
    - arraysize
    - DPLOG
    - butil::ThreadRestrictions::AssertIOAllowed
    - getgrnam
    linkageType: ''
    returnType: bool
    signature: bool VerifyPathControlledByAdmin(const FilePath& path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:830,1
    - Dst: pathconf
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_posix.cc:831,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 832
      start: 829
    functionDepth: 1
    functionLinenumber: 829
    functionLinenumberEnd: 832
    functionName: butil::GetMaximumPathComponentLength
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 0
    functionsReached:
    - butil::value
    - pathconf
    - butil::ThreadRestrictions::AssertIOAllowed
    linkageType: ''
    returnType: int
    signature: int GetMaximumPathComponentLength(const FilePath& path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::DetermineDevShmExecutable
      Src: /src/brpc/src/butil/file_util_posix.cc:840,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/file_util_posix.cc:844,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/file_util_posix.cc:848,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - executable
    - path
    argTypes:
    - bool
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 836
    functionDepth: 4
    functionLinenumber: 836
    functionLinenumberEnd: 849
    functionName: butil::GetShmemTempDir
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 4
    functionsReached:
    - butil::DetermineDevShmExecutable
    - butil::GetTempDir
    - butil::FilePath
    linkageType: ''
    returnType: bool
    signature: bool GetShmemTempDir(bool executable, FilePath* path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:857,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: CopyDirectory
      Src: /src/brpc/src/butil/file_util_posix.cc:874,1
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:877,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 856
    functionDepth: 1
    functionLinenumber: 856
    functionLinenumberEnd: 879
    functionName: butil::internal::MoveUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - CallStat
    - CopyDirectory
    - S_ISDIR
    - DeleteFile
    - butil::ThreadRestrictions::AssertIOAllowed
    - rename
    linkageType: ''
    returnType: bool
    signature: bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:884,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:891,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 883
    functionDepth: 1
    functionLinenumber: 883
    functionLinenumberEnd: 928
    functionName: butil::internal::CopyFileUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - IGNORE_EINTR
    - open
    - read
    - HANDLE_EINTR
    - creat
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - write
    - std::vector::size
    linkageType: ''
    returnType: bool
    signature: bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:857,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:861,1
    - Dst: CallStat
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:863,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: S_ISDIR
      Src: /src/brpc/src/butil/file_util_posix.cc:864,1
    - Dst: rename
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:871,1
    - Dst: CopyDirectory
      Src: /src/brpc/src/butil/file_util_posix.cc:874,1
    - Dst: DeleteFile
      Src: /src/brpc/src/butil/file_util_posix.cc:877,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 856
    functionDepth: 1
    functionLinenumber: 856
    functionLinenumberEnd: 879
    functionName: butil::internal::MoveUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - CallStat
    - CopyDirectory
    - S_ISDIR
    - DeleteFile
    - butil::ThreadRestrictions::AssertIOAllowed
    - rename
    linkageType: ''
    returnType: bool
    signature: bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/file_util_posix.cc:884,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: open
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:885,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: creat
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: value
      Src: /src/brpc/src/butil/file_util_posix.cc:889,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:891,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: read
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/file_util_posix.cc:900,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: write
      Src: /src/brpc/src/butil/file_util_posix.cc:910,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:922,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    - Dst: close
      Src: /src/brpc/src/butil/file_util_posix.cc:924,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - ' from_path'
    - ' to_path'
    argTypes:
    - FilePath
    - FilePath
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 928
      start: 883
    functionDepth: 1
    functionLinenumber: 883
    functionLinenumberEnd: 928
    functionName: butil::internal::CopyFileUnsafe
    functionSourceFile: /src/brpc/src/butil/file_util_posix.cc
    functionUses: 6
    functionsReached:
    - value
    - IGNORE_EINTR
    - open
    - read
    - HANDLE_EINTR
    - creat
    - butil::ThreadRestrictions::AssertIOAllowed
    - close
    - write
    - std::vector::size
    linkageType: ''
    returnType: bool
    signature: bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tracked_objects::Location
      Src: /src/brpc/src/butil/location.h:22,1
    - Dst: tracked_objects::Location
      Src: /src/brpc/src/butil/location.h:28,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 66
    functionName: tracked_objects::Location
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 1
    functionsReached:
    - tracked_objects::Location
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Location
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Location
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: operator < (const Location& other) const
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator < (const Location& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: tracked_objects::function_name
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * function_name()   const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: tracked_objects::file_name
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * file_name()       const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: tracked_objects::line_number
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int line_number()             const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: tracked_objects::program_counter
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * program_counter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tracked_objects::LocationSnapshot
      Src: /src/brpc/src/butil/location.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: tracked_objects::LocationSnapshot
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 1
    functionsReached:
    - tracked_objects::LocationSnapshot
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT LocationSnapshot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 91
    functionName: FROM_HERE_WITH_EXPLICIT_FUNCTION
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FROM_HERE_WITH_EXPLICIT_FUNCTION(function_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tracked_objects::Location
      Src: /src/brpc/src/butil/location.h:22,1
    - Dst: tracked_objects::Location
      Src: /src/brpc/src/butil/location.h:28,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 66
    functionName: tracked_objects::Location
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 2
    functionsReached:
    - tracked_objects::Location
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Location
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Location
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: operator < (const Location& other) const
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator < (const Location& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: tracked_objects::function_name
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * function_name()   const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: tracked_objects::file_name
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * file_name()       const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: tracked_objects::line_number
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int line_number()             const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: tracked_objects::program_counter
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * program_counter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tracked_objects::LocationSnapshot
      Src: /src/brpc/src/butil/location.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: tracked_objects::LocationSnapshot
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 2
    functionsReached:
    - tracked_objects::LocationSnapshot
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT LocationSnapshot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - function_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 91
    functionName: FROM_HERE_WITH_EXPLICIT_FUNCTION
    functionSourceFile: /src/brpc/src/butil/location.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FROM_HERE_WITH_EXPLICIT_FUNCTION(function_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: butil::Arena::left_space
    functionSourceFile: /src/brpc/src/butil/arena.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t left_space() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' head'
    argTypes:
    - Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: butil::Arena::pop_block
    functionSourceFile: /src/brpc/src/butil/arena.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Block
    signature: Block * pop_block(Block* & head)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::left_space
      Src: /src/brpc/src/butil/arena.h:75,1
    - Dst: butil::Arena::allocate_in_other_blocks
      Src: /src/brpc/src/butil/arena.h:80,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: butil::Arena::allocate
    functionSourceFile: /src/brpc/src/butil/arena.h
    functionUses: 0
    functionsReached:
    - butil::Arena::left_space
    - butil::Arena::allocate_in_other_blocks
    linkageType: ''
    returnType: void
    signature: void * Arena::allocate(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: butil::Arena::left_space
    functionSourceFile: /src/brpc/src/butil/arena.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t left_space() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' head'
    argTypes:
    - Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: butil::Arena::pop_block
    functionSourceFile: /src/brpc/src/butil/arena.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Block
    signature: Block * pop_block(Block* & head)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::left_space
      Src: /src/brpc/src/butil/arena.h:75,1
    - Dst: butil::Arena::allocate_in_other_blocks
      Src: /src/brpc/src/butil/arena.h:80,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: butil::Arena::allocate
    functionSourceFile: /src/brpc/src/butil/arena.h
    functionUses: 0
    functionsReached:
    - butil::Arena::left_space
    - butil::Arena::allocate_in_other_blocks
    linkageType: ''
    returnType: void
    signature: void * Arena::allocate(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::FileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileDescriptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ifd
    - iauto_close
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 24
    functionName: butil::FileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileDescriptor(int ifd, bool iauto_close)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: File::TakePlatformFile
      Src: /src/brpc/src/butil/file_descriptor_posix.h:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - file
    argTypes:
    - File
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: butil::FileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached:
    - File::TakePlatformFile
    linkageType: ''
    returnType: void
    signature: void FileDescriptor(File file)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - FileDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: operator==(const FileDescriptor& other) const
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const FileDescriptor& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - FileDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: operator!=(const FileDescriptor& other) const
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const FileDescriptor& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - FileDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: operator<(const FileDescriptor& other) const
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const FileDescriptor& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 21
    functionName: butil::FileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileDescriptor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ifd
    - iauto_close
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 24
    functionName: butil::FileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void FileDescriptor(int ifd, bool iauto_close)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: File::TakePlatformFile
      Src: /src/brpc/src/butil/file_descriptor_posix.h:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - file
    argTypes:
    - File
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: butil::FileDescriptor
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached:
    - File::TakePlatformFile
    linkageType: ''
    returnType: void
    signature: void FileDescriptor(File file)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - FileDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: operator==(const FileDescriptor& other) const
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const FileDescriptor& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - FileDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: operator!=(const FileDescriptor& other) const
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const FileDescriptor& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - FileDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: operator<(const FileDescriptor& other) const
    functionSourceFile: /src/brpc/src/butil/file_descriptor_posix.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<(const FileDescriptor& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - Appender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::BinaryCharPrinter::BinaryCharPrinter
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BinaryCharPrinter(Appender* a)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flush
      Src: /src/brpc/src/butil/binary_printer.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~BinaryCharPrinter()
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - Flush
    linkageType: ''
    returnType: void
    signature: void ~BinaryCharPrinter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Append
      Src: /src/brpc/src/butil/binary_printer.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: butil::BinaryCharPrinter<Appender>::Flush
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - Append
    linkageType: ''
    returnType: void
    signature: void BinaryCharPrinter<Appender>::Flush()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Append
      Src: /src/brpc/src/butil/binary_printer.cpp:56,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - c
    argTypes:
    - unsigned char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 79
    functionName: butil::BinaryCharPrinter<Appender>::PushChar
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - Append
    linkageType: ''
    returnType: void
    signature: void BinaryCharPrinter<Appender>::PushChar(unsigned char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::OStreamAppender::OStreamAppender
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OStreamAppender(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/src/butil/binary_printer.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::OStreamAppender::Append
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - write
    linkageType: ''
    returnType: void
    signature: void Append(const char* b, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: butil::StringAppender::StringAppender
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringAppender(std::string* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/binary_printer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: butil::StringAppender::Append
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void Append(const char* b, size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: backing_block_num
      Src: /src/brpc/src/butil/binary_printer.cpp:100,1
    - Dst: backing_block
      Src: /src/brpc/src/butil/binary_printer.cpp:103,1
    - Dst: StringPiece::size
      Src: /src/brpc/src/butil/binary_printer.cpp:104,1
    - Dst: BinaryCharPrinter::Flush
      Src: /src/brpc/src/butil/binary_printer.cpp:106,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/binary_printer.cpp:108,1
    - Dst: size
      Src: /src/brpc/src/butil/binary_printer.cpp:109,1
    - Dst: Appender*::Append
      Src: /src/brpc/src/butil/binary_printer.cpp:110,1
    - Dst: BinaryCharPrinter::PushChar
      Src: /src/brpc/src/butil/binary_printer.cpp:114,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - appender
    - ' b'
    - max_length
    argTypes:
    - Appender*
    - IOBuf
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 117
    functionName: butil::PrintIOBuf
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - BinaryCharPrinter::PushChar
    - backing_block
    - butil::snprintf
    - backing_block_num
    - StringPiece::size
    - Appender*::Append
    - BinaryCharPrinter::Flush
    - size
    linkageType: ''
    returnType: void
    signature: void PrintIOBuf(Appender* appender, const IOBuf& b, size_t max_length)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/binary_printer.cpp:122,1
    - Dst: BinaryCharPrinter::Flush
      Src: /src/brpc/src/butil/binary_printer.cpp:124,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/binary_printer.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/butil/binary_printer.cpp:127,1
    - Dst: Appender*::Append
      Src: /src/brpc/src/butil/binary_printer.cpp:128,1
    - Dst: BinaryCharPrinter::PushChar
      Src: /src/brpc/src/butil/binary_printer.cpp:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - appender
    - ' s'
    - max_length
    argTypes:
    - Appender*
    - StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 133
    functionName: butil::PrintString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - BinaryCharPrinter::PushChar
    - butil::snprintf
    - Appender*::Append
    - BinaryCharPrinter::Flush
    - size
    linkageType: ''
    returnType: void
    signature: void PrintString(Appender* appender, const StringPiece& s, size_t max_length)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PrintIOBuf
      Src: /src/brpc/src/butil/binary_printer.cpp:138,1
    - Dst: empty
      Src: /src/brpc/src/butil/binary_printer.cpp:139,1
    - Dst: PrintString
      Src: /src/brpc/src/butil/binary_printer.cpp:140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 142
    functionName: butil::ToPrintable::Print
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - empty
    - PrintString
    - PrintIOBuf
    linkageType: ''
    returnType: void
    signature: void ToPrintable::Print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PrintIOBuf
      Src: /src/brpc/src/butil/binary_printer.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' data'
    - max_length
    argTypes:
    - IOBuf
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: butil::ToPrintableString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 10
    functionsReached:
    - butil::PrintIOBuf
    linkageType: ''
    returnType: std::string
    signature: std::string ToPrintableString(const IOBuf& data, size_t max_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PrintString
      Src: /src/brpc/src/butil/binary_printer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' data'
    - max_length
    argTypes:
    - StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 2
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: butil::ToPrintableString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 10
    functionsReached:
    - butil::PrintString
    linkageType: ''
    returnType: std::string
    signature: std::string ToPrintableString(const StringPiece& data, size_t max_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PrintString
      Src: /src/brpc/src/butil/binary_printer.cpp:161,1
    - Dst: StringPiece
      Src: /src/brpc/src/butil/binary_printer.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - data
    - n
    - max_length
    argTypes:
    - void*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 158
    functionDepth: 2
    functionLinenumber: 158
    functionLinenumberEnd: 163
    functionName: butil::ToPrintableString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 10
    functionsReached:
    - butil::PrintString
    - StringPiece
    linkageType: ''
    returnType: std::string
    signature: std::string ToPrintableString(const void* data, size_t n, size_t max_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - Appender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::BinaryCharPrinter::BinaryCharPrinter
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BinaryCharPrinter(Appender* a)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flush
      Src: /src/brpc/src/butil/binary_printer.cpp:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~BinaryCharPrinter()
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - Flush
    linkageType: ''
    returnType: void
    signature: void ~BinaryCharPrinter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Append
      Src: /src/brpc/src/butil/binary_printer.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: butil::BinaryCharPrinter<Appender>::Flush
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - Append
    linkageType: ''
    returnType: void
    signature: void BinaryCharPrinter<Appender>::Flush()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Append
      Src: /src/brpc/src/butil/binary_printer.cpp:56,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - c
    argTypes:
    - unsigned char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 79
    functionName: butil::BinaryCharPrinter<Appender>::PushChar
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - Append
    linkageType: ''
    returnType: void
    signature: void BinaryCharPrinter<Appender>::PushChar(unsigned char c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::OStreamAppender::OStreamAppender
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OStreamAppender(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/src/butil/binary_printer.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::OStreamAppender::Append
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - write
    linkageType: ''
    returnType: void
    signature: void Append(const char* b, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: butil::StringAppender::StringAppender
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringAppender(std::string* str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/binary_printer.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: butil::StringAppender::Append
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void Append(const char* b, size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: backing_block_num
      Src: /src/brpc/src/butil/binary_printer.cpp:100,1
    - Dst: backing_block
      Src: /src/brpc/src/butil/binary_printer.cpp:103,1
    - Dst: StringPiece::size
      Src: /src/brpc/src/butil/binary_printer.cpp:104,1
    - Dst: BinaryCharPrinter::Flush
      Src: /src/brpc/src/butil/binary_printer.cpp:106,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/binary_printer.cpp:108,1
    - Dst: size
      Src: /src/brpc/src/butil/binary_printer.cpp:109,1
    - Dst: Appender*::Append
      Src: /src/brpc/src/butil/binary_printer.cpp:110,1
    - Dst: BinaryCharPrinter::PushChar
      Src: /src/brpc/src/butil/binary_printer.cpp:114,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - appender
    - ' b'
    - max_length
    argTypes:
    - Appender*
    - IOBuf
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 117
    functionName: butil::PrintIOBuf
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 1
    functionsReached:
    - BinaryCharPrinter::PushChar
    - backing_block
    - butil::snprintf
    - backing_block_num
    - StringPiece::size
    - Appender*::Append
    - BinaryCharPrinter::Flush
    - size
    linkageType: ''
    returnType: void
    signature: void PrintIOBuf(Appender* appender, const IOBuf& b, size_t max_length)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/binary_printer.cpp:122,1
    - Dst: BinaryCharPrinter::Flush
      Src: /src/brpc/src/butil/binary_printer.cpp:124,1
    - Dst: butil::snprintf
      Src: /src/brpc/src/butil/binary_printer.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/butil/binary_printer.cpp:127,1
    - Dst: Appender*::Append
      Src: /src/brpc/src/butil/binary_printer.cpp:128,1
    - Dst: BinaryCharPrinter::PushChar
      Src: /src/brpc/src/butil/binary_printer.cpp:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - appender
    - ' s'
    - max_length
    argTypes:
    - Appender*
    - StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 133
    functionName: butil::PrintString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 2
    functionsReached:
    - BinaryCharPrinter::PushChar
    - butil::snprintf
    - Appender*::Append
    - BinaryCharPrinter::Flush
    - size
    linkageType: ''
    returnType: void
    signature: void PrintString(Appender* appender, const StringPiece& s, size_t max_length)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PrintIOBuf
      Src: /src/brpc/src/butil/binary_printer.cpp:138,1
    - Dst: empty
      Src: /src/brpc/src/butil/binary_printer.cpp:139,1
    - Dst: PrintString
      Src: /src/brpc/src/butil/binary_printer.cpp:140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 142
    functionName: butil::ToPrintable::Print
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 0
    functionsReached:
    - empty
    - PrintString
    - PrintIOBuf
    linkageType: ''
    returnType: void
    signature: void ToPrintable::Print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PrintIOBuf
      Src: /src/brpc/src/butil/binary_printer.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' data'
    - max_length
    argTypes:
    - IOBuf
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: butil::ToPrintableString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 10
    functionsReached:
    - butil::PrintIOBuf
    linkageType: ''
    returnType: std::string
    signature: std::string ToPrintableString(const IOBuf& data, size_t max_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PrintString
      Src: /src/brpc/src/butil/binary_printer.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' data'
    - max_length
    argTypes:
    - StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 2
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: butil::ToPrintableString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 10
    functionsReached:
    - butil::PrintString
    linkageType: ''
    returnType: std::string
    signature: std::string ToPrintableString(const StringPiece& data, size_t max_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PrintString
      Src: /src/brpc/src/butil/binary_printer.cpp:161,1
    - Dst: StringPiece
      Src: /src/brpc/src/butil/binary_printer.cpp:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - data
    - n
    - max_length
    argTypes:
    - void*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 158
    functionDepth: 2
    functionLinenumber: 158
    functionLinenumberEnd: 163
    functionName: butil::ToPrintableString
    functionSourceFile: /src/brpc/src/butil/binary_printer.cpp
    functionUses: 10
    functionsReached:
    - butil::PrintString
    - StringPiece
    linkageType: ''
    returnType: std::string
    signature: std::string ToPrintableString(const void* data, size_t n, size_t max_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: butil::RawPacker::RawPacker
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: ~RawPacker()
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RawPacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/butil/raw_pack.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - host_value
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: '& pack32(uint32_t host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    linkageType: ''
    returnType: RawPacker
    signature: RawPacker & pack32(uint32_t host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/butil/raw_pack.h:59,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/butil/raw_pack.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - host_value
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 63
    functionName: '& pack64(uint64_t host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    linkageType: ''
    returnType: RawPacker
    signature: RawPacker & pack64(uint64_t host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: butil::RawUnpacker::RawUnpacker
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: ~RawUnpacker()
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RawUnpacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/butil/raw_pack.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' host_value'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: '& unpack32(uint32_t & host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    linkageType: ''
    returnType: RawUnpacker
    signature: RawUnpacker & unpack32(uint32_t & host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/butil/raw_pack.h:84,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/butil/raw_pack.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' host_value'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: '& unpack64(uint64_t & host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    linkageType: ''
    returnType: RawUnpacker
    signature: RawUnpacker & unpack64(uint64_t & host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: butil::RawPacker::RawPacker
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RawPacker(void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: ~RawPacker()
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RawPacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/raw_pack.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - host_value
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: '& pack32(uint32_t host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - HostToNet32
    linkageType: ''
    returnType: RawPacker
    signature: RawPacker & pack32(uint32_t host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/raw_pack.h:59,1
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/raw_pack.h:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - host_value
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 63
    functionName: '& pack64(uint64_t host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - HostToNet32
    linkageType: ''
    returnType: RawPacker
    signature: RawPacker & pack64(uint64_t host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: butil::RawUnpacker::RawUnpacker
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RawUnpacker(const void* stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: ~RawUnpacker()
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RawUnpacker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/raw_pack.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' host_value'
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: '& unpack32(uint32_t & host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - NetToHost32
    linkageType: ''
    returnType: RawUnpacker
    signature: RawUnpacker & unpack32(uint32_t & host_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/raw_pack.h:84,1
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/raw_pack.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' host_value'
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: '& unpack64(uint64_t & host_value)'
    functionSourceFile: /src/brpc/src/butil/raw_pack.h
    functionUses: 0
    functionsReached:
    - NetToHost32
    linkageType: ''
    returnType: RawUnpacker
    signature: RawUnpacker & unpack64(uint64_t & host_value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/string_printf.cpp:45,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:46,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: va_copy
      Src: /src/brpc/src/butil/string_printf.cpp:50,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:51,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:53,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:58,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:60,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:62,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 3
    argNames:
    - ' output'
    - format
    - args
    argTypes:
    - std::string
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 69
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 0
    functionsReached:
    - butil::vsnprintf
    - resize
    - va_copy
    - capacity
    - size
    - va_end
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output, const char* format,\n
      \                             va_list args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:73,1
    - Dst: reserve
      Src: /src/brpc/src/butil/string_printf.cpp:74,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' output'
    - hint
    - format
    - args
    argTypes:
    - std::string
    - size_t
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 1
    functionsReached:
    - capacity
    - reserve
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output,  size_t hint,\n                              const
      char* format, va_list args)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/string_printf.cpp:45,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:46,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: va_copy
      Src: /src/brpc/src/butil/string_printf.cpp:50,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:51,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:53,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:58,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:60,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:62,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 3
    argNames:
    - ' output'
    - format
    - args
    argTypes:
    - std::string
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 69
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 1
    functionsReached:
    - butil::vsnprintf
    - resize
    - va_copy
    - capacity
    - size
    - va_end
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output, const char* format,\n
      \                             va_list args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:73,1
    - Dst: reserve
      Src: /src/brpc/src/butil/string_printf.cpp:74,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' output'
    - hint
    - format
    - args
    argTypes:
    - std::string
    - size_t
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 2
    functionsReached:
    - capacity
    - reserve
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output,  size_t hint,\n                              const
      char* format, va_list args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:92,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:93,1
    - Dst: std::max
      Src: /src/brpc/src/butil/string_printf.cpp:93,1
    - Dst: strlen
      Src: /src/brpc/src/butil/string_printf.cpp:93,1
    - Dst: std::string::clear
      Src: /src/brpc/src/butil/string_printf.cpp:95,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - format
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 99
    functionName: butil::string_printf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 111
    functionsReached:
    - std::max
    - std::string::clear
    - butil::string_printf_impl
    - va_start
    - va_end
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string string_printf(const char* format, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:110,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:111,1
    - Dst: std::max
      Src: /src/brpc/src/butil/string_printf.cpp:111,1
    - Dst: strlen
      Src: /src/brpc/src/butil/string_printf.cpp:111,1
    - Dst: std::string::clear
      Src: /src/brpc/src/butil/string_printf.cpp:113,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - hint_size
    - format
    argTypes:
    - size_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 117
    functionName: butil::string_printf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 111
    functionsReached:
    - std::max
    - std::string::clear
    - butil::string_printf_impl
    - va_start
    - va_end
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string string_printf(size_t hint_size, const char* format, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:123,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/butil/string_printf.cpp:124,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - output
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 127
    functionName: butil::string_appendf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 35
    functionsReached:
    - va_start
    - va_end
    - butil::string_vappendf
    linkageType: ''
    returnType: int
    signature: int string_appendf(std::string* output, const char* format, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/string_printf.cpp:130,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:131,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/string_printf.cpp:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - output
    - format
    - args
    argTypes:
    - std::string*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 129
    functionDepth: 2
    functionLinenumber: 129
    functionLinenumberEnd: 136
    functionName: butil::string_vappendf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 13
    functionsReached:
    - std::string*::resize
    - std::string*::size
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: int string_vappendf(std::string* output, const char* format, va_list
      args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:140,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/butil/string_printf.cpp:141,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - output
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    functionName: butil::string_printf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 111
    functionsReached:
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: int
    signature: int string_printf(std::string* output, const char* format, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/butil/string_printf.cpp:147,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:148,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/butil/string_printf.cpp:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - output
    - format
    - args
    argTypes:
    - std::string*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 2
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: butil::string_vprintf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 8
    functionsReached:
    - std::string*::clear
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: int string_vprintf(std::string* output, const char* format, va_list
      args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/string_printf.cpp:45,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:46,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: va_copy
      Src: /src/brpc/src/butil/string_printf.cpp:50,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:51,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:53,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:58,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:60,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:62,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 3
    argNames:
    - ' output'
    - format
    - args
    argTypes:
    - std::string
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 69
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 6
    functionsReached:
    - butil::vsnprintf
    - resize
    - va_copy
    - capacity
    - size
    - va_end
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output, const char* format,\n
      \                             va_list args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:73,1
    - Dst: reserve
      Src: /src/brpc/src/butil/string_printf.cpp:74,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' output'
    - hint
    - format
    - args
    argTypes:
    - std::string
    - size_t
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 7
    functionsReached:
    - capacity
    - reserve
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output,  size_t hint,\n                              const
      char* format, va_list args)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/string_printf.cpp:45,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:46,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:47,1
    - Dst: va_copy
      Src: /src/brpc/src/butil/string_printf.cpp:50,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:51,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:53,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:58,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:60,1
    - Dst: butil::vsnprintf
      Src: /src/brpc/src/butil/string_printf.cpp:62,1
    - Dst: resize
      Src: /src/brpc/src/butil/string_printf.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 3
    argNames:
    - ' output'
    - format
    - args
    argTypes:
    - std::string
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 69
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 7
    functionsReached:
    - butil::vsnprintf
    - resize
    - va_copy
    - capacity
    - size
    - va_end
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output, const char* format,\n
      \                             va_list args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: capacity
      Src: /src/brpc/src/butil/string_printf.cpp:73,1
    - Dst: reserve
      Src: /src/brpc/src/butil/string_printf.cpp:74,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' output'
    - hint
    - format
    - args
    argTypes:
    - std::string
    - size_t
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 77
    functionName: butil::string_printf_impl
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 8
    functionsReached:
    - capacity
    - reserve
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: "int string_printf_impl(std::string& output,  size_t hint,\n                              const
      char* format, va_list args)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:92,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:93,1
    - Dst: std::max
      Src: /src/brpc/src/butil/string_printf.cpp:93,1
    - Dst: strlen
      Src: /src/brpc/src/butil/string_printf.cpp:93,1
    - Dst: std::string::clear
      Src: /src/brpc/src/butil/string_printf.cpp:95,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - format
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 80
    functionDepth: 2
    functionLinenumber: 80
    functionLinenumberEnd: 99
    functionName: butil::string_printf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 111
    functionsReached:
    - std::max
    - std::string::clear
    - butil::string_printf_impl
    - va_start
    - va_end
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string string_printf(const char* format, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:110,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:111,1
    - Dst: std::max
      Src: /src/brpc/src/butil/string_printf.cpp:111,1
    - Dst: strlen
      Src: /src/brpc/src/butil/string_printf.cpp:111,1
    - Dst: std::string::clear
      Src: /src/brpc/src/butil/string_printf.cpp:113,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - hint_size
    - format
    argTypes:
    - size_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 117
    functionName: butil::string_printf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 111
    functionsReached:
    - std::max
    - std::string::clear
    - butil::string_printf_impl
    - va_start
    - va_end
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string string_printf(size_t hint_size, const char* format, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:123,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/butil/string_printf.cpp:124,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - output
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 121
    functionDepth: 3
    functionLinenumber: 121
    functionLinenumberEnd: 127
    functionName: butil::string_appendf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 35
    functionsReached:
    - va_start
    - va_end
    - butil::string_vappendf
    linkageType: ''
    returnType: int
    signature: int string_appendf(std::string* output, const char* format, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/string_printf.cpp:130,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:131,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/string_printf.cpp:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - output
    - format
    - args
    argTypes:
    - std::string*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 129
    functionDepth: 2
    functionLinenumber: 129
    functionLinenumberEnd: 136
    functionName: butil::string_vappendf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 14
    functionsReached:
    - std::string*::resize
    - std::string*::size
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: int string_vappendf(std::string* output, const char* format, va_list
      args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/butil/string_printf.cpp:140,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/butil/string_printf.cpp:141,1
    - Dst: va_end
      Src: /src/brpc/src/butil/string_printf.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - output
    - format
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 3
    functionLinenumber: 138
    functionLinenumberEnd: 144
    functionName: butil::string_printf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 111
    functionsReached:
    - va_start
    - va_end
    - butil::string_vprintf
    linkageType: ''
    returnType: int
    signature: int string_printf(std::string* output, const char* format, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/butil/string_printf.cpp:147,1
    - Dst: butil::string_printf_impl
      Src: /src/brpc/src/butil/string_printf.cpp:148,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/butil/string_printf.cpp:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - output
    - format
    - args
    argTypes:
    - std::string*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 2
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: butil::string_vprintf
    functionSourceFile: /src/brpc/src/butil/string_printf.cpp
    functionUses: 9
    functionsReached:
    - std::string*::clear
    - butil::string_printf_impl
    linkageType: ''
    returnType: int
    signature: int string_vprintf(std::string* output, const char* format, va_list
      args)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: butil::ArenaOptions::ArenaOptions
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaOptions::ArenaOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ArenaOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 36
    functionName: butil::Arena::Arena
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Arena::Arena(const ArenaOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/arena.cpp:41,1
    - Dst: free
      Src: /src/brpc/src/butil/arena.cpp:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: Arena::~Arena()
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void Arena::~Arena()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/arena.cpp:52,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/arena.cpp:53,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/arena.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Arena
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: butil::Arena::swap
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void Arena::swap(Arena& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::swap
      Src: /src/brpc/src/butil/arena.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::Arena::clear
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::swap
    linkageType: ''
    returnType: void
    signature: void Arena::clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/arena.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 73
    functionName: butil::Arena::allocate_new_block
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * Arena::allocate_new_block(size_t n)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::allocate_new_block
      Src: /src/brpc/src/butil/arena.cpp:77,1
    - Dst: std::min
      Src: /src/brpc/src/butil/arena.cpp:83,1
    - Dst: malloc
      Src: /src/brpc/src/butil/arena.cpp:89,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 102
    functionName: butil::Arena::allocate_in_other_blocks
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - std::min
    - butil::Arena::allocate_new_block
    linkageType: ''
    returnType: void
    signature: void * Arena::allocate_in_other_blocks(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: butil::ArenaOptions::ArenaOptions
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ArenaOptions::ArenaOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ArenaOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 36
    functionName: butil::Arena::Arena
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Arena::Arena(const ArenaOptions& options)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/arena.cpp:41,1
    - Dst: free
      Src: /src/brpc/src/butil/arena.cpp:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: Arena::~Arena()
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void Arena::~Arena()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/arena.cpp:52,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/arena.cpp:53,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/arena.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - Arena
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: butil::Arena::swap
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 1
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void Arena::swap(Arena& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::swap
      Src: /src/brpc/src/butil/arena.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::Arena::clear
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::swap
    linkageType: ''
    returnType: void
    signature: void Arena::clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/arena.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 73
    functionName: butil::Arena::allocate_new_block
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 1
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * Arena::allocate_new_block(size_t n)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::allocate_new_block
      Src: /src/brpc/src/butil/arena.cpp:77,1
    - Dst: std::min
      Src: /src/brpc/src/butil/arena.cpp:83,1
    - Dst: malloc
      Src: /src/brpc/src/butil/arena.cpp:89,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 102
    functionName: butil::Arena::allocate_in_other_blocks
    functionSourceFile: /src/brpc/src/butil/arena.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - std::min
    - butil::Arena::allocate_new_block
    linkageType: ''
    returnType: void
    signature: void * Arena::allocate_in_other_blocks(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dup2
      Src: /src/brpc/src/butil/popen.cpp:50,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:51,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:52,1
    - Dst: execl
      Src: /src/brpc/src/butil/popen.cpp:53,1
    - Dst: _exit
      Src: /src/brpc/src/butil/popen.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: butil::launch_child_process
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 0
    functionsReached:
    - close
    - _exit
    - dup2
    - execl
    linkageType: ''
    returnType: int
    signature: int launch_child_process(void* args)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/src/butil/popen.cpp:59,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/popen.cpp:60,1
    - Dst: malloc
      Src: /src/brpc/src/butil/popen.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/butil/popen.cpp:73,1
    - Dst: clone
      Src: /src/brpc/src/butil/popen.cpp:79,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/popen.cpp:82,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:86,1
    - Dst: read
      Src: /src/brpc/src/butil/popen.cpp:90,1
    - Dst: write
      Src: /src/brpc/src/butil/popen.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/butil/popen.cpp:97,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:102,1
    - Dst: waitpid
      Src: /src/brpc/src/butil/popen.cpp:106,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/butil/popen.cpp:112,1
    - Dst: usleep
      Src: /src/brpc/src/butil/popen.cpp:114,1
    - Dst: WIFEXITED
      Src: /src/brpc/src/butil/popen.cpp:122,1
    - Dst: WEXITSTATUS
      Src: /src/brpc/src/butil/popen.cpp:123,1
    - Dst: WIFSIGNALED
      Src: /src/brpc/src/butil/popen.cpp:127,1
    - Dst: WTERMSIG
      Src: /src/brpc/src/butil/popen.cpp:129,1
    - Dst: free
      Src: /src/brpc/src/butil/popen.cpp:138,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:141,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:144,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 76
    argCount: 2
    argNames:
    - ' os'
    - cmd
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 57
    functionDepth: 2
    functionLinenumber: 57
    functionLinenumberEnd: 148
    functionName: butil::read_command_output_through_clone
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 2
    functionsReached:
    - WIFSIGNALED
    - pipe
    - WEXITSTATUS
    - write
    - free
    - bthread_usleep
    - WTERMSIG
    - read
    - malloc
    - clone
    - usleep
    - close
    - PLOG
    - LOG
    - WIFEXITED
    - waitpid
    linkageType: ''
    returnType: int
    signature: int read_command_output_through_clone(std::ostream& os, const char*
      cmd)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: popen
      Src: /src/brpc/src/butil/popen.cpp:159,1
    - Dst: fread
      Src: /src/brpc/src/butil/popen.cpp:165,1
    - Dst: write
      Src: /src/brpc/src/butil/popen.cpp:167,1
    - Dst: feof
      Src: /src/brpc/src/butil/popen.cpp:170,1
    - Dst: ferror
      Src: /src/brpc/src/butil/popen.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/butil/popen.cpp:173,1
    - Dst: pclose
      Src: /src/brpc/src/butil/popen.cpp:180,1
    - Dst: WIFEXITED
      Src: /src/brpc/src/butil/popen.cpp:185,1
    - Dst: WEXITSTATUS
      Src: /src/brpc/src/butil/popen.cpp:186,1
    - Dst: WIFSIGNALED
      Src: /src/brpc/src/butil/popen.cpp:188,1
    - Dst: WTERMSIG
      Src: /src/brpc/src/butil/popen.cpp:190,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 2
    argNames:
    - ' os'
    - cmd
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 194
    functionName: butil::read_command_output_through_popen
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 2
    functionsReached:
    - feof
    - WIFSIGNALED
    - WEXITSTATUS
    - ferror
    - WTERMSIG
    - fread
    - pclose
    - LOG
    - popen
    - write
    - WIFEXITED
    linkageType: ''
    returnType: int
    signature: int read_command_output_through_popen(std::ostream& os, const char*
      cmd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/src/butil/popen.cpp:198,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/src/butil/popen.cpp:201,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/src/butil/popen.cpp:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - cmd
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 196
    functionDepth: 3
    functionLinenumber: 196
    functionLinenumberEnd: 204
    functionName: butil::read_command_output
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 22
    functionsReached:
    - butil::read_command_output_through_clone
    - butil::read_command_output_through_popen
    linkageType: ''
    returnType: int
    signature: int read_command_output(std::ostream& os, const char* cmd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dup2
      Src: /src/brpc/src/butil/popen.cpp:50,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:51,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:52,1
    - Dst: execl
      Src: /src/brpc/src/butil/popen.cpp:53,1
    - Dst: _exit
      Src: /src/brpc/src/butil/popen.cpp:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: butil::launch_child_process
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 0
    functionsReached:
    - close
    - _exit
    - dup2
    - execl
    linkageType: ''
    returnType: int
    signature: int launch_child_process(void* args)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/src/butil/popen.cpp:59,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/popen.cpp:60,1
    - Dst: malloc
      Src: /src/brpc/src/butil/popen.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/butil/popen.cpp:73,1
    - Dst: clone
      Src: /src/brpc/src/butil/popen.cpp:79,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/popen.cpp:82,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:86,1
    - Dst: read
      Src: /src/brpc/src/butil/popen.cpp:90,1
    - Dst: write
      Src: /src/brpc/src/butil/popen.cpp:92,1
    - Dst: LOG
      Src: /src/brpc/src/butil/popen.cpp:97,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:102,1
    - Dst: waitpid
      Src: /src/brpc/src/butil/popen.cpp:106,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/butil/popen.cpp:112,1
    - Dst: usleep
      Src: /src/brpc/src/butil/popen.cpp:114,1
    - Dst: WIFEXITED
      Src: /src/brpc/src/butil/popen.cpp:122,1
    - Dst: WEXITSTATUS
      Src: /src/brpc/src/butil/popen.cpp:123,1
    - Dst: WIFSIGNALED
      Src: /src/brpc/src/butil/popen.cpp:127,1
    - Dst: WTERMSIG
      Src: /src/brpc/src/butil/popen.cpp:129,1
    - Dst: free
      Src: /src/brpc/src/butil/popen.cpp:138,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:141,1
    - Dst: close
      Src: /src/brpc/src/butil/popen.cpp:144,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 76
    argCount: 2
    argNames:
    - ' os'
    - cmd
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 57
    functionDepth: 2
    functionLinenumber: 57
    functionLinenumberEnd: 148
    functionName: butil::read_command_output_through_clone
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 3
    functionsReached:
    - WIFSIGNALED
    - pipe
    - WEXITSTATUS
    - write
    - free
    - bthread_usleep
    - WTERMSIG
    - read
    - malloc
    - clone
    - usleep
    - close
    - PLOG
    - LOG
    - WIFEXITED
    - waitpid
    linkageType: ''
    returnType: int
    signature: int read_command_output_through_clone(std::ostream& os, const char*
      cmd)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: popen
      Src: /src/brpc/src/butil/popen.cpp:159,1
    - Dst: fread
      Src: /src/brpc/src/butil/popen.cpp:165,1
    - Dst: write
      Src: /src/brpc/src/butil/popen.cpp:167,1
    - Dst: feof
      Src: /src/brpc/src/butil/popen.cpp:170,1
    - Dst: ferror
      Src: /src/brpc/src/butil/popen.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/src/butil/popen.cpp:173,1
    - Dst: pclose
      Src: /src/brpc/src/butil/popen.cpp:180,1
    - Dst: WIFEXITED
      Src: /src/brpc/src/butil/popen.cpp:185,1
    - Dst: WEXITSTATUS
      Src: /src/brpc/src/butil/popen.cpp:186,1
    - Dst: WIFSIGNALED
      Src: /src/brpc/src/butil/popen.cpp:188,1
    - Dst: WTERMSIG
      Src: /src/brpc/src/butil/popen.cpp:190,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 2
    argNames:
    - ' os'
    - cmd
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 194
    functionName: butil::read_command_output_through_popen
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 3
    functionsReached:
    - feof
    - WIFSIGNALED
    - WEXITSTATUS
    - ferror
    - WTERMSIG
    - fread
    - pclose
    - LOG
    - popen
    - write
    - WIFEXITED
    linkageType: ''
    returnType: int
    signature: int read_command_output_through_popen(std::ostream& os, const char*
      cmd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/src/butil/popen.cpp:198,1
    - Dst: butil::read_command_output_through_clone
      Src: /src/brpc/src/butil/popen.cpp:201,1
    - Dst: butil::read_command_output_through_popen
      Src: /src/brpc/src/butil/popen.cpp:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - cmd
    argTypes:
    - std::ostream
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 196
    functionDepth: 3
    functionLinenumber: 196
    functionLinenumberEnd: 204
    functionName: butil::read_command_output
    functionSourceFile: /src/brpc/src/butil/popen.cpp
    functionUses: 22
    functionsReached:
    - butil::read_command_output_through_clone
    - butil::read_command_output_through_popen
    linkageType: ''
    returnType: int
    signature: int read_command_output(std::ostream& os, const char* cmd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/rand_util_posix.cc:23,1
    - Dst: DCHECK_GE
      Src: /src/brpc/src/butil/rand_util_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: URandomFd::URandomFd
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_GE
    - open
    linkageType: ''
    returnType: void
    signature: void URandomFd()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/butil/rand_util_posix.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~URandomFd()
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void ~URandomFd()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: URandomFd::fd
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int fd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/rand_util_posix.cc:23,1
    - Dst: DCHECK_GE
      Src: /src/brpc/src/butil/rand_util_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: URandomFd::URandomFd
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_GE
    - open
    linkageType: ''
    returnType: void
    signature: void URandomFd()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/butil/rand_util_posix.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: ~URandomFd()
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: void ~URandomFd()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: URandomFd::fd
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int fd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandBytes
      Src: /src/brpc/src/butil/rand_util_posix.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 46
    functionName: butil::RandUint64
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 7
    functionsReached:
    - butil::RandBytes
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t RandUint64()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/rand_util_posix.cc:49,1
    - Dst: butil::ReadFromFD
      Src: /src/brpc/src/butil/rand_util_posix.cc:51,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/rand_util_posix.cc:51,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/rand_util_posix.cc:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - output
    - output_length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 2
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: butil::RandBytes
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 5
    functionsReached:
    - CHECK
    - static_cast<char*>
    - Pointer
    - butil::ReadFromFD
    linkageType: ''
    returnType: void
    signature: void RandBytes(void* output, size_t output_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/rand_util_posix.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::GetUrandomFD
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached:
    - Pointer
    linkageType: ''
    returnType: int
    signature: int GetUrandomFD(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandBytes
      Src: /src/brpc/src/butil/rand_util_posix.cc:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 42
    functionDepth: 3
    functionLinenumber: 42
    functionLinenumberEnd: 46
    functionName: butil::RandUint64
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 7
    functionsReached:
    - butil::RandBytes
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t RandUint64()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/rand_util_posix.cc:49,1
    - Dst: butil::ReadFromFD
      Src: /src/brpc/src/butil/rand_util_posix.cc:51,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/rand_util_posix.cc:51,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/rand_util_posix.cc:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - output
    - output_length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 48
    functionDepth: 2
    functionLinenumber: 48
    functionLinenumberEnd: 53
    functionName: butil::RandBytes
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 6
    functionsReached:
    - CHECK
    - static_cast<char*>
    - Pointer
    - butil::ReadFromFD
    linkageType: ''
    returnType: void
    signature: void RandBytes(void* output, size_t output_length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/rand_util_posix.cc:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: butil::GetUrandomFD
    functionSourceFile: /src/brpc/src/butil/rand_util_posix.cc
    functionUses: 0
    functionsReached:
    - Pointer
    linkageType: ''
    returnType: int
    signature: int GetUrandomFD(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 12
    functionName: butil::BigEndianReader::BigEndianReader
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BigEndianReader::BigEndianReader(const char* buf, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 19
    functionName: butil::BigEndianReader::Skip
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::Skip(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/big_endian.cc:24,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 27
    functionName: butil::BigEndianReader::ReadBytes
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadBytes(void* out, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/big_endian.cc:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - len
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 35
    functionName: butil::BigEndianReader::ReadPiece
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadPiece(butil::StringPiece* out, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian<T>
      Src: /src/brpc/src/butil/big_endian.cc:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: butil::BigEndianReader::Read
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - ReadBigEndian<T>
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::Read(T* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader::Read
      Src: /src/brpc/src/butil/big_endian.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::BigEndianReader::ReadU8
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianReader::Read
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadU8(uint8_t* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader::Read
      Src: /src/brpc/src/butil/big_endian.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint16_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::BigEndianReader::ReadU16
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianReader::Read
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadU16(uint16_t* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader::Read
      Src: /src/brpc/src/butil/big_endian.cc:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: butil::BigEndianReader::ReadU32
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianReader::Read
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadU32(uint32_t* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: butil::BigEndianWriter::BigEndianWriter
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BigEndianWriter::BigEndianWriter(char* buf, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: butil::BigEndianWriter::Skip
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::Skip(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/big_endian.cc:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 74
    functionName: butil::BigEndianWriter::WriteBytes
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteBytes(const void* buf, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian<T>
      Src: /src/brpc/src/butil/big_endian.cc:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 83
    functionName: butil::BigEndianWriter::Write
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - WriteBigEndian<T>
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::Write(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter::Write
      Src: /src/brpc/src/butil/big_endian.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: butil::BigEndianWriter::WriteU8
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianWriter::Write
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteU8(uint8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter::Write
      Src: /src/brpc/src/butil/big_endian.cc:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: butil::BigEndianWriter::WriteU16
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianWriter::Write
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteU16(uint16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter::Write
      Src: /src/brpc/src/butil/big_endian.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: butil::BigEndianWriter::WriteU32
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianWriter::Write
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteU32(uint32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 12
    functionName: butil::BigEndianReader::BigEndianReader
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BigEndianReader::BigEndianReader(const char* buf, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 19
    functionName: butil::BigEndianReader::Skip
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::Skip(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/big_endian.cc:24,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 27
    functionName: butil::BigEndianReader::ReadBytes
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadBytes(void* out, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/butil/big_endian.cc:32,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - out
    - len
    argTypes:
    - butil::StringPiece*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 35
    functionName: butil::BigEndianReader::ReadPiece
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadPiece(butil::StringPiece* out, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReadBigEndian<T>
      Src: /src/brpc/src/butil/big_endian.cc:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: butil::BigEndianReader::Read
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 3
    functionsReached:
    - ReadBigEndian<T>
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::Read(T* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader::Read
      Src: /src/brpc/src/butil/big_endian.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::BigEndianReader::ReadU8
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianReader::Read
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadU8(uint8_t* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader::Read
      Src: /src/brpc/src/butil/big_endian.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint16_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::BigEndianReader::ReadU16
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianReader::Read
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadU16(uint16_t* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader::Read
      Src: /src/brpc/src/butil/big_endian.cc:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: butil::BigEndianReader::ReadU32
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianReader::Read
    linkageType: ''
    returnType: bool
    signature: bool BigEndianReader::ReadU32(uint32_t* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 59
    functionName: butil::BigEndianWriter::BigEndianWriter
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BigEndianWriter::BigEndianWriter(char* buf, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 66
    functionName: butil::BigEndianWriter::Skip
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::Skip(size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/big_endian.cc:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 74
    functionName: butil::BigEndianWriter::WriteBytes
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteBytes(const void* buf, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: WriteBigEndian<T>
      Src: /src/brpc/src/butil/big_endian.cc:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 83
    functionName: butil::BigEndianWriter::Write
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 3
    functionsReached:
    - WriteBigEndian<T>
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::Write(T value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter::Write
      Src: /src/brpc/src/butil/big_endian.cc:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: butil::BigEndianWriter::WriteU8
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianWriter::Write
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteU8(uint8_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter::Write
      Src: /src/brpc/src/butil/big_endian.cc:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: butil::BigEndianWriter::WriteU16
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianWriter::Write
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteU16(uint16_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter::Write
      Src: /src/brpc/src/butil/big_endian.cc:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: butil::BigEndianWriter::WriteU32
    functionSourceFile: /src/brpc/src/butil/big_endian.cc
    functionUses: 0
    functionsReached:
    - butil::BigEndianWriter::Write
    linkageType: ''
    returnType: bool
    signature: bool BigEndianWriter::WriteU32(uint32_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomic_ref_count.h:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicRefCount*
    - AtomicRefCount
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 25
    functionName: butil::AtomicRefCountIncN
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: void
    signature: "void AtomicRefCountIncN(volatile AtomicRefCount *ptr,\n                               AtomicRefCount
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/atomic_ref_count.h:33,1
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomic_ref_count.h:34,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/atomic_ref_count.h:36,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - decrement
    argTypes:
    - AtomicRefCount*
    - AtomicRefCount
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 39
    functionName: butil::AtomicRefCountDecN
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - ANNOTATE_HAPPENS_AFTER
    - ANNOTATE_HAPPENS_BEFORE
    linkageType: ''
    returnType: bool
    signature: "bool AtomicRefCountDecN(volatile AtomicRefCount *ptr,\n                               AtomicRefCount
      decrement)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtomicRefCountIncN
      Src: /src/brpc/src/butil/atomic_ref_count.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: butil::AtomicRefCountInc
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::AtomicRefCountIncN
    linkageType: ''
    returnType: void
    signature: void AtomicRefCountInc(volatile AtomicRefCount *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtomicRefCountDecN
      Src: /src/brpc/src/butil/atomic_ref_count.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 2
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::AtomicRefCountDec
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::AtomicRefCountDecN
    linkageType: ''
    returnType: bool
    signature: bool AtomicRefCountDec(volatile AtomicRefCount *ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomic_ref_count.h:60,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/atomic_ref_count.h:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::AtomicRefCountIsOne
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    - ANNOTATE_HAPPENS_AFTER
    linkageType: ''
    returnType: bool
    signature: bool AtomicRefCountIsOne(volatile AtomicRefCount *ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomic_ref_count.h:71,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/atomic_ref_count.h:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: butil::AtomicRefCountIsZero
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    - ANNOTATE_HAPPENS_AFTER
    linkageType: ''
    returnType: bool
    signature: bool AtomicRefCountIsZero(volatile AtomicRefCount *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomic_ref_count.h:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicRefCount*
    - AtomicRefCount
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 25
    functionName: butil::AtomicRefCountIncN
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 1
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: void
    signature: "void AtomicRefCountIncN(volatile AtomicRefCount *ptr,\n                               AtomicRefCount
      increment)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/atomic_ref_count.h:33,1
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomic_ref_count.h:34,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/atomic_ref_count.h:36,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ptr
    - decrement
    argTypes:
    - AtomicRefCount*
    - AtomicRefCount
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 39
    functionName: butil::AtomicRefCountDecN
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 1
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - ANNOTATE_HAPPENS_AFTER
    - ANNOTATE_HAPPENS_BEFORE
    linkageType: ''
    returnType: bool
    signature: "bool AtomicRefCountDecN(volatile AtomicRefCount *ptr,\n                               AtomicRefCount
      decrement)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtomicRefCountIncN
      Src: /src/brpc/src/butil/atomic_ref_count.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: butil::AtomicRefCountInc
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::AtomicRefCountIncN
    linkageType: ''
    returnType: void
    signature: void AtomicRefCountInc(volatile AtomicRefCount *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtomicRefCountDecN
      Src: /src/brpc/src/butil/atomic_ref_count.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 2
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::AtomicRefCountDec
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::AtomicRefCountDecN
    linkageType: ''
    returnType: bool
    signature: bool AtomicRefCountDec(volatile AtomicRefCount *ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomic_ref_count.h:60,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/atomic_ref_count.h:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::AtomicRefCountIsOne
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    - ANNOTATE_HAPPENS_AFTER
    linkageType: ''
    returnType: bool
    signature: bool AtomicRefCountIsOne(volatile AtomicRefCount *ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomic_ref_count.h:71,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/atomic_ref_count.h:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicRefCount*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: butil::AtomicRefCountIsZero
    functionSourceFile: /src/brpc/src/butil/atomic_ref_count.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    - ANNOTATE_HAPPENS_AFTER
    linkageType: ''
    returnType: bool
    signature: bool AtomicRefCountIsZero(volatile AtomicRefCount *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:35,1
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:36,1
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - seed
    argTypes:
    - SplitMix64Seed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: butil::splitmix64_next
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t splitmix64_next(SplitMix64Seed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 50
    functionName: butil::xorshift128_next
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t xorshift128_next(FastRandSeed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/fast_rand.cpp:54,1
    - Dst: butil::splitmix64_next
      Src: /src/brpc/src/butil/fast_rand.cpp:55,1
    - Dst: butil::splitmix64_next
      Src: /src/brpc/src/butil/fast_rand.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 2
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: butil::init_fast_rand_seed
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::splitmix64_next
    linkageType: ''
    returnType: void
    signature: void init_fast_rand_seed(FastRandSeed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/fast_rand.cpp:71,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - range
    - seed
    argTypes:
    - uint64_t
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 77
    functionName: butil::fast_rand_impl
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::xorshift128_next
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand_impl(uint64_t range, FastRandSeed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' seed'
    argTypes:
    - FastRandSeed
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::need_init
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool need_init(const FastRandSeed& seed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:89,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:90,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 88
    functionDepth: 3
    functionLinenumber: 88
    functionLinenumberEnd: 93
    functionName: butil::fast_rand
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 47
    functionsReached:
    - butil::xorshift128_next
    - butil::need_init
    - butil::init_fast_rand_seed
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: butil::fast_rand
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 47
    functionsReached:
    - butil::xorshift128_next
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand(FastRandSeed* seed)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:103,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:104,1
    - Dst: butil::fast_rand_impl
      Src: /src/brpc/src/butil/fast_rand.cpp:106,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - range
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 99
    functionDepth: 3
    functionLinenumber: 99
    functionLinenumberEnd: 107
    functionName: butil::fast_rand_less_than
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 74
    functionsReached:
    - butil::need_init
    - butil::init_fast_rand_seed
    - butil::fast_rand_impl
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand_less_than(uint64_t range)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:110,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:111,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:124,1
    - Dst: butil::fast_rand_impl
      Src: /src/brpc/src/butil/fast_rand.cpp:126,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 109
    functionDepth: 3
    functionLinenumber: 109
    functionLinenumberEnd: 127
    functionName: butil::fast_rand_in_64
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 2
    functionsReached:
    - butil::xorshift128_next
    - butil::need_init
    - butil::init_fast_rand_seed
    - butil::fast_rand_impl
    linkageType: ''
    returnType: int64_t
    signature: int64_t fast_rand_in_64(int64_t min, int64_t max)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:130,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:131,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:144,1
    - Dst: butil::fast_rand_impl
      Src: /src/brpc/src/butil/fast_rand.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 129
    functionDepth: 3
    functionLinenumber: 129
    functionLinenumberEnd: 147
    functionName: butil::fast_rand_in_u64
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 2
    functionsReached:
    - butil::xorshift128_next
    - butil::need_init
    - butil::init_fast_rand_seed
    - butil::fast_rand_impl
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand_in_u64(uint64_t min, uint64_t max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/fast_rand.cpp:151,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:153,1
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:153,1
    - Dst: ldexp
      Src: /src/brpc/src/butil/fast_rand.cpp:154,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/fast_rand.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 156
    functionName: butil::fast_rand_double
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 5
    functionsReached:
    - COMPILE_ASSERT
    - UINT64_C
    - static_cast<double>
    - butil::xorshift128_next
    - ldexp
    linkageType: ''
    returnType: double
    signature: double fast_rand_double(FastRandSeed* seed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:159,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:160,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/src/butil/fast_rand.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 163
    functionName: butil::fast_rand_double
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 6
    functionsReached:
    - butil::fast_rand_double
    - butil::need_init
    - butil::init_fast_rand_seed
    linkageType: ''
    returnType: double
    signature: double fast_rand_double()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t*>
      Src: /src/brpc/src/butil/fast_rand.cpp:168,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/butil/fast_rand.cpp:168,1
    - Dst: static_cast<uint8_t*>
      Src: /src/brpc/src/butil/fast_rand.cpp:172,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/butil/fast_rand.cpp:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - output
    - output_length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 165
    functionDepth: 4
    functionLinenumber: 165
    functionLinenumberEnd: 179
    functionName: butil::fast_rand_bytes
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached:
    - static_cast<uint8_t*>
    - butil::fast_rand
    - static_cast<uint64_t*>
    linkageType: ''
    returnType: void
    signature: void fast_rand_bytes(void* output, size_t output_length)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_bytes
      Src: /src/brpc/src/butil/fast_rand.cpp:184,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/butil/fast_rand.cpp:191,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 181
    functionDepth: 5
    functionLinenumber: 181
    functionLinenumberEnd: 194
    functionName: butil::fast_rand_printable
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    - butil::fast_rand_bytes
    linkageType: ''
    returnType: std::string
    signature: std::string fast_rand_printable(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:35,1
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:36,1
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - seed
    argTypes:
    - SplitMix64Seed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: butil::splitmix64_next
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 1
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t splitmix64_next(SplitMix64Seed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 50
    functionName: butil::xorshift128_next
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t xorshift128_next(FastRandSeed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/fast_rand.cpp:54,1
    - Dst: butil::splitmix64_next
      Src: /src/brpc/src/butil/fast_rand.cpp:55,1
    - Dst: butil::splitmix64_next
      Src: /src/brpc/src/butil/fast_rand.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 2
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: butil::init_fast_rand_seed
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 5
    functionsReached:
    - butil::gettimeofday_us
    - butil::splitmix64_next
    linkageType: ''
    returnType: void
    signature: void init_fast_rand_seed(FastRandSeed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/butil/fast_rand.cpp:71,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - range
    - seed
    argTypes:
    - uint64_t
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 77
    functionName: butil::fast_rand_impl
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 3
    functionsReached:
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::xorshift128_next
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand_impl(uint64_t range, FastRandSeed* seed)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' seed'
    argTypes:
    - FastRandSeed
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::need_init
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool need_init(const FastRandSeed& seed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:89,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:90,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:92,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 88
    functionDepth: 3
    functionLinenumber: 88
    functionLinenumberEnd: 93
    functionName: butil::fast_rand
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 49
    functionsReached:
    - butil::xorshift128_next
    - butil::need_init
    - butil::init_fast_rand_seed
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: butil::fast_rand
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 49
    functionsReached:
    - butil::xorshift128_next
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand(FastRandSeed* seed)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:103,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:104,1
    - Dst: butil::fast_rand_impl
      Src: /src/brpc/src/butil/fast_rand.cpp:106,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - range
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 99
    functionDepth: 3
    functionLinenumber: 99
    functionLinenumberEnd: 107
    functionName: butil::fast_rand_less_than
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 74
    functionsReached:
    - butil::need_init
    - butil::init_fast_rand_seed
    - butil::fast_rand_impl
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand_less_than(uint64_t range)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:110,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:111,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:124,1
    - Dst: butil::fast_rand_impl
      Src: /src/brpc/src/butil/fast_rand.cpp:126,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - int64_t
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 109
    functionDepth: 3
    functionLinenumber: 109
    functionLinenumberEnd: 127
    functionName: butil::fast_rand_in_64
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 2
    functionsReached:
    - butil::xorshift128_next
    - butil::need_init
    - butil::init_fast_rand_seed
    - butil::fast_rand_impl
    linkageType: ''
    returnType: int64_t
    signature: int64_t fast_rand_in_64(int64_t min, int64_t max)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:130,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:131,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:144,1
    - Dst: butil::fast_rand_impl
      Src: /src/brpc/src/butil/fast_rand.cpp:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - min
    - max
    argTypes:
    - uint64_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 129
    functionDepth: 3
    functionLinenumber: 129
    functionLinenumberEnd: 147
    functionName: butil::fast_rand_in_u64
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 2
    functionsReached:
    - butil::xorshift128_next
    - butil::need_init
    - butil::init_fast_rand_seed
    - butil::fast_rand_impl
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fast_rand_in_u64(uint64_t min, uint64_t max)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/fast_rand.cpp:151,1
    - Dst: butil::xorshift128_next
      Src: /src/brpc/src/butil/fast_rand.cpp:153,1
    - Dst: UINT64_C
      Src: /src/brpc/src/butil/fast_rand.cpp:153,1
    - Dst: ldexp
      Src: /src/brpc/src/butil/fast_rand.cpp:154,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/fast_rand.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - seed
    argTypes:
    - FastRandSeed*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 156
    functionName: butil::fast_rand_double
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 6
    functionsReached:
    - COMPILE_ASSERT
    - UINT64_C
    - static_cast<double>
    - butil::xorshift128_next
    - ldexp
    linkageType: ''
    returnType: double
    signature: double fast_rand_double(FastRandSeed* seed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::need_init
      Src: /src/brpc/src/butil/fast_rand.cpp:159,1
    - Dst: butil::init_fast_rand_seed
      Src: /src/brpc/src/butil/fast_rand.cpp:160,1
    - Dst: butil::fast_rand_double
      Src: /src/brpc/src/butil/fast_rand.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 163
    functionName: butil::fast_rand_double
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 7
    functionsReached:
    - butil::fast_rand_double
    - butil::need_init
    - butil::init_fast_rand_seed
    linkageType: ''
    returnType: double
    signature: double fast_rand_double()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t*>
      Src: /src/brpc/src/butil/fast_rand.cpp:168,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/butil/fast_rand.cpp:168,1
    - Dst: static_cast<uint8_t*>
      Src: /src/brpc/src/butil/fast_rand.cpp:172,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/butil/fast_rand.cpp:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - output
    - output_length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 165
    functionDepth: 4
    functionLinenumber: 165
    functionLinenumberEnd: 179
    functionName: butil::fast_rand_bytes
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 1
    functionsReached:
    - static_cast<uint8_t*>
    - butil::fast_rand
    - static_cast<uint64_t*>
    linkageType: ''
    returnType: void
    signature: void fast_rand_bytes(void* output, size_t output_length)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_bytes
      Src: /src/brpc/src/butil/fast_rand.cpp:184,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/butil/fast_rand.cpp:191,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 181
    functionDepth: 5
    functionLinenumber: 181
    functionLinenumberEnd: 194
    functionName: butil::fast_rand_printable
    functionSourceFile: /src/brpc/src/butil/fast_rand.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand
    - butil::fast_rand_bytes
    linkageType: ''
    returnType: std::string
    signature: std::string fast_rand_printable(size_t length)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:48,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:49,1
    - Dst: getenv
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:54,1
    - Dst: butil::StringToInt
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:67,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 68
    functionName: butil::InitGlobalIOBufProfilerInfo
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - getenv
    - butil::StringToInt
    - strcmp
    linkageType: ''
    returnType: void
    signature: void InitGlobalIOBufProfilerInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::IsIOBufProfilerEnabled
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 4
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsIOBufProfilerEnabled()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:76,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 75
    functionDepth: 4
    functionLinenumber: 75
    functionLinenumberEnd: 81
    functionName: butil::IsIOBufProfilerSamplable
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand_less_than
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsIOBufProfilerSamplable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SuperFastHash
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:88,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 92
    functionName: butil::IOBufSample::stack_hash_code
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const char*>
    - SuperFastHash
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufSample::stack_hash_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::IOBufProfiler::GetInstance
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: IOBufProfiler
    signature: IOBufProfiler * IOBufProfiler::GetInstance()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:103,1
    - Dst: init
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:106,1
    - Dst: Start
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: butil::IOBufProfiler::IOBufProfiler
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - Start
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::IOBufProfiler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StopAndJoin
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:112,1
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:113,1
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:114,1
    - Dst: Dequeue
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:118,1
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 122
    functionName: IOBufProfiler::~IOBufProfiler()
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - StopAndJoin
    - AuthSession::Destroy
    - clear
    - Dequeue
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::~IOBufProfiler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:125,1
    - Dst: Enqueue
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 130
    functionName: butil::IOBufProfiler::Submit
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - load
    - Enqueue
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Submit(IOBufSample* s)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:134,1
    - Dst: seek
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:137,1
    - Dst: butil::IOBufSample::CopyAndSharedWithDestroyer
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:139,1
    - Dst: IOBufRefSampleSharedPtr::get
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:141,1
    - Dst: seek
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:147,1
    - Dst: seek
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:154,1
    - Dst: first::get
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:154,1
    - Dst: erase
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:158,1
    - Dst: first::get
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:158,1
    - Dst: erase
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:162,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 31
    argCount: 1
    argNames:
    - s
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 172
    functionName: butil::IOBufProfiler::Dump
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - IOBufRefSampleSharedPtr::get
    - BAIDU_SCOPED_LOCK
    - erase
    - seek
    - butil::IOBufSample::CopyAndSharedWithDestroyer
    - first::get
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Dump(IOBufSample* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:175,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 182
    functionName: butil::IOBufSample::Copy
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - New
    - butil::iobuf::cp
    linkageType: ''
    returnType: IOBufSample
    signature: IOBufSample * IOBufSample::Copy(IOBufSample* ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufSample::Copy
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:185,1
    - Dst: butil::IOBufSample::CopyAndSharedWithDestroyer
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 2
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: butil::IOBufSample::CopyAndSharedWithDestroyer
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBufSample::CopyAndSharedWithDestroyer
    - butil::IOBufSample::Copy
    linkageType: ''
    returnType: IOBufRefSampleSharedPtr
    signature: IOBufRefSampleSharedPtr IOBufSample::CopyAndSharedWithDestroyer(IOBufSample*
      ref)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:190,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:194,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:195,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:197,1
    - Dst: begin
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:198,1
    - Dst: end
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:198,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:201,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:211,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:211,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:215,1
    - Dst: open
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:216,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:219,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:224,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:228,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:233,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:238,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:240,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:240,1
    - Dst: open
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:245,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:247,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:260,1
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:261,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 55
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 188
    functionDepth: 2
    functionLinenumber: 188
    functionLinenumberEnd: 262
    functionName: butil::IOBufProfiler::Flush2Disk
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - append
    - end
    - cut_into_file_descriptor
    - butil::IOBufBuilder::buf
    - butil::CreateDirectoryAndGetError
    - open
    - butil::IOPortal::IOPortal
    - PLOG
    - BAIDU_SCOPED_LOCK
    - butil::FilePath::DirName
    - butil::FilePath::value
    - empty
    - begin
    - LOG_EVERY_SECOND
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Flush2Disk(const char* filename)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:265,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:268,1
    - Dst: Join
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 271
    functionName: butil::IOBufProfiler::StopAndJoin
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - exchange
    - Join
    - HasBeenJoined
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::StopAndJoin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:274,1
    - Dst: butil::IOBufProfiler::Consume
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:275,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 278
    functionName: butil::IOBufProfiler::Run
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::usleep
    - butil::IOBufProfiler::Consume
    - load
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Dequeue
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:283,1
    - Dst: butil::IOBufProfiler::Dump
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:284,1
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:285,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:291,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 280
    functionDepth: 2
    functionLinenumber: 280
    functionLinenumberEnd: 292
    functionName: butil::IOBufProfiler::Consume
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 1
    functionsReached:
    - std::min
    - AuthSession::Destroy
    - butil::IOBufProfiler::Dump
    - Dequeue
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Consume()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IsIOBufProfilerEnabled
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:295,1
    - Dst: butil::New
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:299,1
    - Dst: GetStackTrace
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:302,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:302,1
    - Dst: butil::IOBufProfiler::GetInstance
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - block
    - ref
    argTypes:
    - IOBuf::Block*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 304
    functionName: butil::SubmitIOBufSample
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - arraysize
    - butil::IOBufProfiler::GetInstance
    - butil::New
    - butil::IsIOBufProfilerEnabled
    - GetStackTrace
    linkageType: ''
    returnType: void
    signature: void SubmitIOBufSample(IOBuf::Block* block, int64_t ref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:308,1
    - Dst: butil::IOBufProfiler::GetInstance
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:312,1
    - Dst: auto::Flush2Disk
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:313,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 315
    functionName: butil::IOBufProfilerFlush
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 2
    functionsReached:
    - auto::Flush2Disk
    - LOG
    - butil::IOBufProfiler::GetInstance
    linkageType: ''
    returnType: bool
    signature: bool IOBufProfilerFlush(const char* filename)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:48,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:49,1
    - Dst: getenv
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:54,1
    - Dst: butil::StringToInt
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:67,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 68
    functionName: butil::InitGlobalIOBufProfilerInfo
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - getenv
    - butil::StringToInt
    - strcmp
    linkageType: ''
    returnType: void
    signature: void InitGlobalIOBufProfilerInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::IsIOBufProfilerEnabled
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 5
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsIOBufProfilerEnabled()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:76,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 75
    functionDepth: 4
    functionLinenumber: 75
    functionLinenumberEnd: 81
    functionName: butil::IsIOBufProfilerSamplable
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - butil::fast_rand_less_than
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsIOBufProfilerSamplable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SuperFastHash
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:88,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 92
    functionName: butil::IOBufSample::stack_hash_code
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const char*>
    - SuperFastHash
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufSample::stack_hash_code() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::IOBufProfiler::GetInstance
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 2
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: IOBufProfiler
    signature: IOBufProfiler * IOBufProfiler::GetInstance()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:103,1
    - Dst: init
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:106,1
    - Dst: Start
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: butil::IOBufProfiler::IOBufProfiler
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - Start
    - init
    - LOG
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::IOBufProfiler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StopAndJoin
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:112,1
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:113,1
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:114,1
    - Dst: Dequeue
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:118,1
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:119,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 122
    functionName: IOBufProfiler::~IOBufProfiler()
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - StopAndJoin
    - AuthSession::Destroy
    - clear
    - Dequeue
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::~IOBufProfiler()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:125,1
    - Dst: Enqueue
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 130
    functionName: butil::IOBufProfiler::Submit
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - load
    - Enqueue
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Submit(IOBufSample* s)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:134,1
    - Dst: seek
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:137,1
    - Dst: butil::IOBufSample::CopyAndSharedWithDestroyer
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:139,1
    - Dst: IOBufRefSampleSharedPtr::get
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:141,1
    - Dst: seek
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:147,1
    - Dst: seek
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:154,1
    - Dst: first::get
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:154,1
    - Dst: erase
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:158,1
    - Dst: first::get
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:158,1
    - Dst: erase
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:162,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 31
    argCount: 1
    argNames:
    - s
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 132
    functionDepth: 3
    functionLinenumber: 132
    functionLinenumberEnd: 172
    functionName: butil::IOBufProfiler::Dump
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 1
    functionsReached:
    - IOBufRefSampleSharedPtr::get
    - BAIDU_SCOPED_LOCK
    - erase
    - seek
    - butil::IOBufSample::CopyAndSharedWithDestroyer
    - first::get
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Dump(IOBufSample* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:175,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 182
    functionName: butil::IOBufSample::Copy
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 1
    functionsReached:
    - New
    - butil::iobuf::cp
    linkageType: ''
    returnType: IOBufSample
    signature: IOBufSample * IOBufSample::Copy(IOBufSample* ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufSample::Copy
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:185,1
    - Dst: butil::IOBufSample::CopyAndSharedWithDestroyer
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ref
    argTypes:
    - IOBufSample*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 2
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: butil::IOBufSample::CopyAndSharedWithDestroyer
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBufSample::CopyAndSharedWithDestroyer
    - butil::IOBufSample::Copy
    linkageType: ''
    returnType: IOBufRefSampleSharedPtr
    signature: IOBufRefSampleSharedPtr IOBufSample::CopyAndSharedWithDestroyer(IOBufSample*
      ref)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:190,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:194,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:195,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:197,1
    - Dst: begin
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:198,1
    - Dst: end
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:198,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:201,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:211,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:211,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:215,1
    - Dst: open
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:216,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:219,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:224,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:228,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:233,1
    - Dst: butil::FilePath::DirName
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:238,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:240,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:240,1
    - Dst: open
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:245,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:247,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:260,1
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:261,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 55
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 188
    functionDepth: 2
    functionLinenumber: 188
    functionLinenumberEnd: 262
    functionName: butil::IOBufProfiler::Flush2Disk
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - append
    - end
    - cut_into_file_descriptor
    - butil::IOBufBuilder::buf
    - butil::CreateDirectoryAndGetError
    - open
    - butil::IOPortal::IOPortal
    - PLOG
    - BAIDU_SCOPED_LOCK
    - butil::FilePath::DirName
    - butil::FilePath::value
    - empty
    - begin
    - LOG_EVERY_SECOND
    - LOG
    - butil::IOBufBuilder::IOBufBuilder
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Flush2Disk(const char* filename)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:265,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:268,1
    - Dst: Join
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 271
    functionName: butil::IOBufProfiler::StopAndJoin
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - exchange
    - Join
    - HasBeenJoined
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::StopAndJoin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:274,1
    - Dst: butil::IOBufProfiler::Consume
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:275,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 278
    functionName: butil::IOBufProfiler::Run
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::usleep
    - butil::IOBufProfiler::Consume
    - load
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Dequeue
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:283,1
    - Dst: butil::IOBufProfiler::Dump
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:284,1
    - Dst: AuthSession::Destroy
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:285,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:291,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 280
    functionDepth: 2
    functionLinenumber: 280
    functionLinenumberEnd: 292
    functionName: butil::IOBufProfiler::Consume
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 2
    functionsReached:
    - std::min
    - AuthSession::Destroy
    - butil::IOBufProfiler::Dump
    - Dequeue
    linkageType: ''
    returnType: void
    signature: void IOBufProfiler::Consume()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IsIOBufProfilerEnabled
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:295,1
    - Dst: butil::New
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:299,1
    - Dst: GetStackTrace
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:302,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:302,1
    - Dst: butil::IOBufProfiler::GetInstance
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - block
    - ref
    argTypes:
    - IOBuf::Block*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 304
    functionName: butil::SubmitIOBufSample
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 0
    functionsReached:
    - arraysize
    - butil::IOBufProfiler::GetInstance
    - butil::New
    - butil::IsIOBufProfilerEnabled
    - GetStackTrace
    linkageType: ''
    returnType: void
    signature: void SubmitIOBufSample(IOBuf::Block* block, int64_t ref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:308,1
    - Dst: butil::IOBufProfiler::GetInstance
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:312,1
    - Dst: auto::Flush2Disk
      Src: /src/brpc/src/butil/iobuf_profiler.cpp:313,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 315
    functionName: butil::IOBufProfilerFlush
    functionSourceFile: /src/brpc/src/butil/iobuf_profiler.cpp
    functionUses: 2
    functionsReached:
    - auto::Flush2Disk
    - LOG
    - butil::IOBufProfiler::GetInstance
    linkageType: ''
    returnType: bool
    signature: bool IOBufProfilerFlush(const char* filename)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: butil::SynchronousEvent::SynchronousEvent
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SynchronousEvent()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/synchronous_event.h:72,1
    - Dst: std::find
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: push_back
      Src: /src/brpc/src/butil/synchronous_event.h:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ob
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 81
    functionName: butil::SynchronousEvent::subscribe
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - push_back
    - begin
    - LOG
    linkageType: ''
    returnType: int
    signature: int subscribe(Observer* ob)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/synchronous_event.h:88,1
    - Dst: std::find
      Src: /src/brpc/src/butil/synchronous_event.h:92,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:92,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:92,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ob
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 99
    functionName: butil::SynchronousEvent::unsubscribe
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - LOG
    - begin
    linkageType: ''
    returnType: int
    signature: int unsubscribe(Observer* ob)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:104,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 108
    functionName: butil::SynchronousEvent::clear
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - end
    - begin
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: butil::SynchronousEvent::size
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: butil::SynchronousEvent::empty
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:119,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:121,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 126
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:131,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:133,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' b1'
    argTypes:
    - _B1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify(const _B1& b1)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:144,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:146,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' b1'
    - ' b2'
    argTypes:
    - _B1
    - _B2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 151
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify(const _B1& b1, const _B2& b2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:157,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:159,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' b1'
    - ' b2'
    - ' b3'
    argTypes:
    - _B1
    - _B2
    - _B3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 164
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify(const _B1& b1, const _B2& b2, const _B3& b3)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:168,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:172,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:173,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:173,1
    - Dst: resize
      Src: /src/brpc/src/butil/synchronous_event.h:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 179
    functionName: butil::SynchronousEvent::_shrink
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 4
    functionsReached:
    - butil::SynchronousEvent::size
    - end
    - resize
    - begin
    linkageType: ''
    returnType: void
    signature: void _shrink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 212
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 212
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: butil::SynchronousEvent::SynchronousEvent
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SynchronousEvent()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/synchronous_event.h:72,1
    - Dst: std::find
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:75,1
    - Dst: push_back
      Src: /src/brpc/src/butil/synchronous_event.h:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ob
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 81
    functionName: butil::SynchronousEvent::subscribe
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - push_back
    - begin
    - LOG
    linkageType: ''
    returnType: int
    signature: int subscribe(Observer* ob)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/synchronous_event.h:88,1
    - Dst: std::find
      Src: /src/brpc/src/butil/synchronous_event.h:92,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:92,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:92,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ob
    argTypes:
    - Observer*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 99
    functionName: butil::SynchronousEvent::unsubscribe
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - end
    - std::find
    - LOG
    - begin
    linkageType: ''
    returnType: int
    signature: int unsubscribe(Observer* ob)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:104,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 108
    functionName: butil::SynchronousEvent::clear
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - end
    - begin
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 111
    functionName: butil::SynchronousEvent::size
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: butil::SynchronousEvent::empty
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:119,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:121,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 117
    functionDepth: 2
    functionLinenumber: 117
    functionLinenumberEnd: 126
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:131,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:133,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' b1'
    argTypes:
    - _B1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 2
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify(const _B1& b1)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:144,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:146,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' b1'
    - ' b2'
    argTypes:
    - _B1
    - _B2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 151
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify(const _B1& b1, const _B2& b2)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:157,1
    - Dst: on_event
      Src: /src/brpc/src/butil/synchronous_event.h:159,1
    - Dst: butil::SynchronousEvent::_shrink
      Src: /src/brpc/src/butil/synchronous_event.h:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - ' b1'
    - ' b2'
    - ' b3'
    argTypes:
    - _B1
    - _B2
    - _B3
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 164
    functionName: butil::SynchronousEvent::notify
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached:
    - butil::SynchronousEvent::size
    - butil::SynchronousEvent::_shrink
    - on_event
    linkageType: ''
    returnType: void
    signature: void notify(const _B1& b1, const _B2& b2, const _B3& b3)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::SynchronousEvent::size
      Src: /src/brpc/src/butil/synchronous_event.h:168,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:172,1
    - Dst: begin
      Src: /src/brpc/src/butil/synchronous_event.h:173,1
    - Dst: end
      Src: /src/brpc/src/butil/synchronous_event.h:173,1
    - Dst: resize
      Src: /src/brpc/src/butil/synchronous_event.h:178,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 179
    functionName: butil::SynchronousEvent::_shrink
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 8
    functionsReached:
    - butil::SynchronousEvent::size
    - end
    - resize
    - begin
    linkageType: ''
    returnType: void
    signature: void _shrink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 212
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 212
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: ~EventObserver()
    functionSourceFile: /src/brpc/src/butil/synchronous_event.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EventObserver()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 27
    functionName: KEY_UNUSED
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_UNUSED(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: KEY_USABLE
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_USABLE(p)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.cpp:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: '& ThreadKey::operator=(ThreadKey&& other) noexcept'
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: ThreadKey
    signature: ThreadKey & ThreadKey::operator=(ThreadKey&& other) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: KEY_UNUSED
      Src: /src/brpc/src/butil/thread_key.cpp:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: butil::ThreadKey::Valid
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached:
    - KEY_UNUSED
    linkageType: ''
    returnType: bool
    signature: bool ThreadKey::Valid() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.cpp:64,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/butil/thread_key.cpp:65,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/thread_key.cpp:65,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_key.cpp:66,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:69,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/src/butil/thread_key.cpp:70,1
    - Dst: dtor
      Src: /src/brpc/src/butil/thread_key.cpp:71,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 76
    functionName: butil::DestroyTlsData
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached:
    - end
    - dtor
    - std::vector::end
    - BAIDU_SCOPED_LOCK
    - std::vector::insert
    - begin
    - size
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void DestroyTlsData()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.cpp:79,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:80,1
    - Dst: std::deque<size_t>::deque<size_t>
      Src: /src/brpc/src/butil/thread_key.cpp:81,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/thread_key.cpp:84,1
    - Dst: back
      Src: /src/brpc/src/butil/thread_key.cpp:85,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/thread_key.cpp:86,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:93,1
    - Dst: std::vector<ThreadKeyInfo>::vector<ThreadKeyInfo>
      Src: /src/brpc/src/butil/thread_key.cpp:94,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_key.cpp:95,1
    - Dst: resize
      Src: /src/brpc/src/butil/thread_key.cpp:97,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - ' thread_key'
    - dtor
    argTypes:
    - ThreadKey
    - DtorFunction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 106
    functionName: butil::thread_key_create
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 20
    functionsReached:
    - back
    - butil::empty
    - pop_back
    - resize
    - BAIDU_SCOPED_LOCK
    - std::vector<ThreadKeyInfo>::vector<ThreadKeyInfo>
    - BAIDU_UNLIKELY
    - reserve
    - std::deque<size_t>::deque<size_t>
    linkageType: ''
    returnType: int
    signature: int thread_key_create(ThreadKey& thread_key, DtorFunction dtor)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:109,1
    - Dst: Valid
      Src: /src/brpc/src/butil/thread_key.cpp:109,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.cpp:113,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:116,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/src/butil/thread_key.cpp:118,1
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.cpp:119,1
    - Dst: KEY_USABLE
      Src: /src/brpc/src/butil/thread_key.cpp:125,1
    - Dst: push_back
      Src: /src/brpc/src/butil/thread_key.cpp:126,1
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.cpp:128,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' thread_key'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 131
    functionName: butil::thread_key_delete
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 20
    functionsReached:
    - Reset
    - KEY_USABLE
    - Valid
    - BAIDU_SCOPED_LOCK
    - push_back
    - BAIDU_UNLIKELY
    - size
    - KEY_UNUSED
    linkageType: ''
    returnType: int
    signature: int thread_key_delete(ThreadKey& thread_key)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:134,1
    - Dst: Valid
      Src: /src/brpc/src/butil/thread_key.cpp:134,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:139,1
    - Dst: std::vector<ThreadKeyTLS>::vector<ThreadKeyTLS>
      Src: /src/brpc/src/butil/thread_key.cpp:140,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_key.cpp:141,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_key.cpp:143,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:146,1
    - Dst: resize
      Src: /src/brpc/src/butil/thread_key.cpp:147,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' thread_key'
    - data
    argTypes:
    - ThreadKey
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 133
    functionDepth: 2
    functionLinenumber: 133
    functionLinenumberEnd: 154
    functionName: butil::thread_setspecific
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 16
    functionsReached:
    - butil::thread_atexit
    - size
    - Valid
    - resize
    - std::vector<ThreadKeyTLS>::vector<ThreadKeyTLS>
    - BAIDU_UNLIKELY
    - reserve
    linkageType: ''
    returnType: int
    signature: int thread_setspecific(ThreadKey& thread_key, void* data)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:157,1
    - Dst: Valid
      Src: /src/brpc/src/butil/thread_key.cpp:157,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:162,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:163,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' thread_key'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: butil::thread_getspecific
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 16
    functionsReached:
    - BAIDU_UNLIKELY
    - size
    - Valid
    linkageType: ''
    returnType: void
    signature: void * thread_getspecific(ThreadKey& thread_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 27
    functionName: KEY_UNUSED
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_UNUSED(p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: KEY_USABLE
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: KEY_USABLE(p)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.cpp:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: '& ThreadKey::operator=(ThreadKey&& other) noexcept'
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: ThreadKey
    signature: ThreadKey & ThreadKey::operator=(ThreadKey&& other) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: KEY_UNUSED
      Src: /src/brpc/src/butil/thread_key.cpp:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: butil::ThreadKey::Valid
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached:
    - KEY_UNUSED
    linkageType: ''
    returnType: bool
    signature: bool ThreadKey::Valid() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.cpp:64,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/butil/thread_key.cpp:65,1
    - Dst: std::vector::end
      Src: /src/brpc/src/butil/thread_key.cpp:65,1
    - Dst: begin
      Src: /src/brpc/src/butil/thread_key.cpp:66,1
    - Dst: end
      Src: /src/brpc/src/butil/thread_key.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:69,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/src/butil/thread_key.cpp:70,1
    - Dst: dtor
      Src: /src/brpc/src/butil/thread_key.cpp:71,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 76
    functionName: butil::DestroyTlsData
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 0
    functionsReached:
    - end
    - dtor
    - std::vector::end
    - BAIDU_SCOPED_LOCK
    - std::vector::insert
    - begin
    - size
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void DestroyTlsData()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.cpp:79,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:80,1
    - Dst: std::deque<size_t>::deque<size_t>
      Src: /src/brpc/src/butil/thread_key.cpp:81,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/thread_key.cpp:84,1
    - Dst: back
      Src: /src/brpc/src/butil/thread_key.cpp:85,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/thread_key.cpp:86,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:93,1
    - Dst: std::vector<ThreadKeyInfo>::vector<ThreadKeyInfo>
      Src: /src/brpc/src/butil/thread_key.cpp:94,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_key.cpp:95,1
    - Dst: resize
      Src: /src/brpc/src/butil/thread_key.cpp:97,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - ' thread_key'
    - dtor
    argTypes:
    - ThreadKey
    - DtorFunction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 106
    functionName: butil::thread_key_create
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 20
    functionsReached:
    - back
    - butil::empty
    - pop_back
    - resize
    - BAIDU_SCOPED_LOCK
    - std::vector<ThreadKeyInfo>::vector<ThreadKeyInfo>
    - BAIDU_UNLIKELY
    - reserve
    - std::deque<size_t>::deque<size_t>
    linkageType: ''
    returnType: int
    signature: int thread_key_create(ThreadKey& thread_key, DtorFunction dtor)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:109,1
    - Dst: Valid
      Src: /src/brpc/src/butil/thread_key.cpp:109,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/thread_key.cpp:113,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:116,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/src/butil/thread_key.cpp:118,1
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.cpp:119,1
    - Dst: KEY_USABLE
      Src: /src/brpc/src/butil/thread_key.cpp:125,1
    - Dst: push_back
      Src: /src/brpc/src/butil/thread_key.cpp:126,1
    - Dst: Reset
      Src: /src/brpc/src/butil/thread_key.cpp:128,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' thread_key'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 131
    functionName: butil::thread_key_delete
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 20
    functionsReached:
    - Reset
    - KEY_USABLE
    - Valid
    - BAIDU_SCOPED_LOCK
    - push_back
    - BAIDU_UNLIKELY
    - size
    - KEY_UNUSED
    linkageType: ''
    returnType: int
    signature: int thread_key_delete(ThreadKey& thread_key)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:134,1
    - Dst: Valid
      Src: /src/brpc/src/butil/thread_key.cpp:134,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:139,1
    - Dst: std::vector<ThreadKeyTLS>::vector<ThreadKeyTLS>
      Src: /src/brpc/src/butil/thread_key.cpp:140,1
    - Dst: reserve
      Src: /src/brpc/src/butil/thread_key.cpp:141,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/thread_key.cpp:143,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:146,1
    - Dst: resize
      Src: /src/brpc/src/butil/thread_key.cpp:147,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' thread_key'
    - data
    argTypes:
    - ThreadKey
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 133
    functionDepth: 2
    functionLinenumber: 133
    functionLinenumberEnd: 154
    functionName: butil::thread_setspecific
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 16
    functionsReached:
    - butil::thread_atexit
    - size
    - Valid
    - resize
    - std::vector<ThreadKeyTLS>::vector<ThreadKeyTLS>
    - BAIDU_UNLIKELY
    - reserve
    linkageType: ''
    returnType: int
    signature: int thread_setspecific(ThreadKey& thread_key, void* data)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:157,1
    - Dst: Valid
      Src: /src/brpc/src/butil/thread_key.cpp:157,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/thread_key.cpp:162,1
    - Dst: size
      Src: /src/brpc/src/butil/thread_key.cpp:163,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' thread_key'
    argTypes:
    - ThreadKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: butil::thread_getspecific
    functionSourceFile: /src/brpc/src/butil/thread_key.cpp
    functionUses: 16
    functionsReached:
    - BAIDU_UNLIKELY
    - size
    - Valid
    linkageType: ''
    returnType: void
    signature: void * thread_getspecific(ThreadKey& thread_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: butil::class_name_str
    functionSourceFile: /src/brpc/src/butil/class_name.h
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & class_name_str()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/butil/class_name.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: butil::class_name
    functionSourceFile: /src/brpc/src/butil/class_name.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: char
    signature: char * class_name()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::demangle
      Src: /src/brpc/src/butil/class_name.h:53,1
    - Dst: typeid
      Src: /src/brpc/src/butil/class_name.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' obj'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: butil::class_name_str
    functionSourceFile: /src/brpc/src/butil/class_name.h
    functionUses: 31
    functionsReached:
    - typeid
    - butil::demangle
    linkageType: ''
    returnType: std::string
    signature: std::string class_name_str(T const& obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: butil::class_name_str
    functionSourceFile: /src/brpc/src/butil/class_name.h
    functionUses: 31
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & class_name_str()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::class_name_str
      Src: /src/brpc/src/butil/class_name.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: butil::class_name
    functionSourceFile: /src/brpc/src/butil/class_name.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str
    linkageType: ''
    returnType: char
    signature: char * class_name()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::demangle
      Src: /src/brpc/src/butil/class_name.h:53,1
    - Dst: typeid
      Src: /src/brpc/src/butil/class_name.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' obj'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: butil::class_name_str
    functionSourceFile: /src/brpc/src/butil/class_name.h
    functionUses: 32
    functionsReached:
    - typeid
    - butil::demangle
    linkageType: ''
    returnType: std::string
    signature: std::string class_name_str(T const& obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::UpdateDelimiterPosition
      Src: /src/brpc/src/butil/string_splitter.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - str_begin
    - str_end
    - pair_delimiter
    - key_value_delimiter
    argTypes:
    - char*
    - char*
    - char
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 2
    functionsReached:
    - butil::KeyValuePairsSplitter::UpdateDelimiterPosition
    linkageType: ''
    returnType: void
    signature: "void KeyValuePairsSplitter(const char* str_begin,\n                                 const
      char* str_end,\n                                 char pair_delimiter,\n                                 char
      key_value_delimiter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - str_begin
    - pair_delimiter
    - key_value_delimiter
    argTypes:
    - char*
    - char
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 195
    functionName: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void KeyValuePairsSplitter(const char* str_begin,\n                                 char
      pair_delimiter,\n                                 char key_value_delimiter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::begin
      Src: /src/brpc/src/butil/string_splitter.h:200,1
    - Dst: StringPiece::end
      Src: /src/brpc/src/butil/string_splitter.h:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - sp
    - pair_delimiter
    - key_value_delimiter
    argTypes:
    - StringPiece
    - char
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 201
    functionName: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 2
    functionsReached:
    - StringPiece::end
    - StringPiece::begin
    linkageType: ''
    returnType: void
    signature: "void KeyValuePairsSplitter(const StringPiece &sp,\n                                 char
      pair_delimiter,\n                                 char key_value_delimiter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/butil/string_splitter.h:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 205
    functionName: butil::KeyValuePairsSplitter::key
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 8
    functionsReached:
    - butil::KeyValuePairsSplitter::key_and_value
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece key()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/butil/string_splitter.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 209
    functionName: butil::KeyValuePairsSplitter::value
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 8
    functionsReached:
    - butil::KeyValuePairsSplitter::key_and_value
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece
      Src: /src/brpc/src/butil/string_splitter.h:214,1
    - Dst: field
      Src: /src/brpc/src/butil/string_splitter.h:214,1
    - Dst: length
      Src: /src/brpc/src/butil/string_splitter.h:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 215
    functionName: butil::KeyValuePairsSplitter::key_and_value
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 8
    functionsReached:
    - length
    - StringPiece
    - field
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece key_and_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UpdateDelimiterPosition
      Src: /src/brpc/src/butil/string_splitter.h:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: '& operator++()'
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 0
    functionsReached:
    - UpdateDelimiterPosition
    linkageType: ''
    returnType: KeyValuePairsSplitter
    signature: KeyValuePairsSplitter & operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 228
    functionName: operator++(int)
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: KeyValuePairsSplitter
    signature: KeyValuePairsSplitter operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: operator const void*() const
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::UpdateDelimiterPosition
      Src: /src/brpc/src/butil/string_splitter.h:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - str_begin
    - str_end
    - pair_delimiter
    - key_value_delimiter
    argTypes:
    - char*
    - char*
    - char
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 189
    functionName: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 2
    functionsReached:
    - butil::KeyValuePairsSplitter::UpdateDelimiterPosition
    linkageType: ''
    returnType: void
    signature: "void KeyValuePairsSplitter(const char* str_begin,\n                                 const
      char* str_end,\n                                 char pair_delimiter,\n                                 char
      key_value_delimiter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - str_begin
    - pair_delimiter
    - key_value_delimiter
    argTypes:
    - char*
    - char
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 195
    functionName: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void KeyValuePairsSplitter(const char* str_begin,\n                                 char
      pair_delimiter,\n                                 char key_value_delimiter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::begin
      Src: /src/brpc/src/butil/string_splitter.h:200,1
    - Dst: StringPiece::end
      Src: /src/brpc/src/butil/string_splitter.h:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - sp
    - pair_delimiter
    - key_value_delimiter
    argTypes:
    - StringPiece
    - char
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 201
    functionName: butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 2
    functionsReached:
    - StringPiece::end
    - StringPiece::begin
    linkageType: ''
    returnType: void
    signature: "void KeyValuePairsSplitter(const StringPiece &sp,\n                                 char
      pair_delimiter,\n                                 char key_value_delimiter)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/butil/string_splitter.h:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 205
    functionName: butil::KeyValuePairsSplitter::key
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 8
    functionsReached:
    - butil::KeyValuePairsSplitter::key_and_value
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece key()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/butil/string_splitter.h:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 209
    functionName: butil::KeyValuePairsSplitter::value
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 8
    functionsReached:
    - butil::KeyValuePairsSplitter::key_and_value
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece
      Src: /src/brpc/src/butil/string_splitter.h:214,1
    - Dst: field
      Src: /src/brpc/src/butil/string_splitter.h:214,1
    - Dst: length
      Src: /src/brpc/src/butil/string_splitter.h:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 215
    functionName: butil::KeyValuePairsSplitter::key_and_value
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 10
    functionsReached:
    - length
    - StringPiece
    - field
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece key_and_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UpdateDelimiterPosition
      Src: /src/brpc/src/butil/string_splitter.h:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: '& operator++()'
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 0
    functionsReached:
    - UpdateDelimiterPosition
    linkageType: ''
    returnType: KeyValuePairsSplitter
    signature: KeyValuePairsSplitter & operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 228
    functionName: operator++(int)
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: KeyValuePairsSplitter
    signature: KeyValuePairsSplitter operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: operator const void*() const
    functionSourceFile: /src/brpc/src/butil/string_splitter.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SuperFastHash
      Src: /src/brpc/src/butil/hash.cc:15,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 16
    functionName: butil::SuperFastHash
    functionSourceFile: /src/brpc/src/butil/hash.cc
    functionUses: 3
    functionsReached:
    - butil::SuperFastHash
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t SuperFastHash(const char* data, int len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SuperFastHash
      Src: /src/brpc/src/butil/hash.cc:15,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 16
    functionName: butil::SuperFastHash
    functionSourceFile: /src/brpc/src/butil/hash.cc
    functionUses: 4
    functionsReached:
    - butil::SuperFastHash
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t SuperFastHash(const char* data, int len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/atomic_sequence_num.h:25,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomic_sequence_num.h:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 27
    functionName: butil::StaticAtomicSequenceNumber::GetNext
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: int GetNext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/atomic_sequence_num.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::StaticAtomicSequenceNumber::Reset
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Store
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/butil/atomic_sequence_num.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: butil::AtomicSequenceNumber::AtomicSequenceNumber
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void AtomicSequenceNumber()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtomicSequenceNumber::GetNext
      Src: /src/brpc/src/butil/atomic_sequence_num.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::AtomicSequenceNumber::GetNext
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 1
    functionsReached:
    - butil::AtomicSequenceNumber::GetNext
    linkageType: ''
    returnType: int
    signature: int GetNext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/atomic_sequence_num.h:25,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomic_sequence_num.h:26,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 27
    functionName: butil::StaticAtomicSequenceNumber::GetNext
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<int>
    linkageType: ''
    returnType: int
    signature: int GetNext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/atomic_sequence_num.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: butil::StaticAtomicSequenceNumber::Reset
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Store
    linkageType: ''
    returnType: void
    signature: void Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/butil/atomic_sequence_num.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 47
    functionName: butil::AtomicSequenceNumber::AtomicSequenceNumber
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void AtomicSequenceNumber()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AtomicSequenceNumber::GetNext
      Src: /src/brpc/src/butil/atomic_sequence_num.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 51
    functionName: butil::AtomicSequenceNumber::GetNext
    functionSourceFile: /src/brpc/src/butil/atomic_sequence_num.h
    functionUses: 2
    functionsReached:
    - butil::AtomicSequenceNumber::GetNext
    linkageType: ''
    returnType: int
    signature: int GetNext()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/butil/big_endian.h:25,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - out
    argTypes:
    - char[]
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 27
    functionName: butil::ReadBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached:
    - static_cast<uint8_t>
    linkageType: ''
    returnType: void
    signature: void ReadBigEndian(const char buf[], T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/butil/big_endian.h:34,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char[]
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: butil::WriteBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached:
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian(char buf[], T val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - buf
    - out
    argTypes:
    - char[]
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: butil::ReadBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ReadBigEndian<uint8_t>(const char buf[], uint8_t* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/butil/big_endian.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char[]
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::WriteBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached:
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian<uint8_t>(char buf[], uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader
      Src: /src/brpc/src/butil/big_endian.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 74
    functionName: butil::BigEndianReader
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 1
    functionsReached:
    - butil::BigEndianReader
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT BigEndianReader
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::ptr
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ptr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: butil::remaining
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int remaining() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter
      Src: /src/brpc/src/butil/big_endian.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 98
    functionName: butil::BigEndianWriter
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 1
    functionsReached:
    - butil::BigEndianWriter
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT BigEndianWriter
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: butil::ptr
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ptr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::remaining
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int remaining() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/butil/big_endian.h:25,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - out
    argTypes:
    - char[]
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 27
    functionName: butil::ReadBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached:
    - static_cast<uint8_t>
    linkageType: ''
    returnType: void
    signature: void ReadBigEndian(const char buf[], T* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/butil/big_endian.h:34,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char[]
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: butil::WriteBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached:
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian(char buf[], T val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - buf
    - out
    argTypes:
    - char[]
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 43
    functionName: butil::ReadBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ReadBigEndian<uint8_t>(const char buf[], uint8_t* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/butil/big_endian.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - buf
    - val
    argTypes:
    - char[]
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: butil::WriteBigEndian
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached:
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteBigEndian<uint8_t>(char buf[], uint8_t val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianReader
      Src: /src/brpc/src/butil/big_endian.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 74
    functionName: butil::BigEndianReader
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 2
    functionsReached:
    - butil::BigEndianReader
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT BigEndianReader
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::ptr
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ptr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: butil::remaining
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int remaining() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BigEndianWriter
      Src: /src/brpc/src/butil/big_endian.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 98
    functionName: butil::BigEndianWriter
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 2
    functionsReached:
    - butil::BigEndianWriter
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT BigEndianWriter
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: butil::ptr
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * ptr() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: butil::remaining
    functionSourceFile: /src/brpc/src/butil/big_endian.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int remaining() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - test_case_name
    - ','
    - test_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: GTEST_FRIEND_TEST
    functionSourceFile: /src/brpc/src/butil/gtest_prod_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: GTEST_FRIEND_TEST(test_case_name, test_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - test_case_name
    - ','
    - test_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: FRIEND_TEST_ALL_PREFIXES
    functionSourceFile: /src/brpc/src/butil/gtest_prod_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FRIEND_TEST_ALL_PREFIXES(test_case_name, test_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - test_case_name
    - ','
    - test_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: FORWARD_DECLARE_TEST
    functionSourceFile: /src/brpc/src/butil/gtest_prod_util.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FORWARD_DECLARE_TEST(test_case_name, test_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 33
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 47
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 22
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:61,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:62,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:76,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 79
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:84,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 86
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 134
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 49
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 156
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 23
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:160,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:161,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:175,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:183,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 138
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 203
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 213
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 218
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 33
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 51
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:61,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:62,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:76,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 79
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:84,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 86
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 134
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 53
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 156
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 25
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:160,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:161,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:175,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:183,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 152
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 203
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 213
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 218
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 33
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 55
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 26
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:61,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:62,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:76,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 79
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:84,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 86
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 134
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 57
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 156
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 27
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:160,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:161,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:175,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:183,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 166
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 203
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 213
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 218
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 33
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 28
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:61,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:62,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 65
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:76,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 79
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:84,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 86
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 134
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 61
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 156
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 29
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:160,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:161,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 10
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:175,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 12
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:183,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 185
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 0
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 180
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 203
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 11
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 213
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 15
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 218
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_loongarch64_gcc.h
    functionUses: 3
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::init
      Src: /src/brpc/src/butil/string_splitter_inl.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - str_begin
    - str_end
    - sep
    - action
    argTypes:
    - char*
    - char*
    - char
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 36
    functionName: butil::StringSplitter::StringSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::init
    linkageType: ''
    returnType: void
    signature: "void StringSplitter::StringSplitter(const char* str_begin,\n                               const
      char* str_end,\n                               const char sep,\n                               EmptyFieldAction
      action)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - str
    - sep
    - action
    argTypes:
    - char*
    - char
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::StringSplitter::StringSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void StringSplitter::StringSplitter(const char* str, char sep,\n                               EmptyFieldAction
      action)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/butil/string_splitter_inl.h:44,1
    - Dst: data
      Src: /src/brpc/src/butil/string_splitter_inl.h:44,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' input'
    - sep
    - action
    argTypes:
    - StringPiece
    - char
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: butil::StringSplitter::StringSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - data
    linkageType: ''
    returnType: void
    signature: "void StringSplitter::StringSplitter(const StringPiece& input, char
      sep,\n                               EmptyFieldAction action)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:48,1
    - Dst: butil::StringSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:50,1
    - Dst: butil::StringSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 56
    functionName: butil::StringSplitter::init
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 1
    functionsReached:
    - __builtin_expect
    - butil::StringSplitter::not_end
    linkageType: ''
    returnType: void
    signature: void StringSplitter::init()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:59,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:60,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:63,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:67,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 70
    functionName: '& StringSplitter::operator++()'
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - not_end
    linkageType: ''
    returnType: StringSplitter
    signature: StringSplitter & StringSplitter::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: StringSplitter::operator++(int)
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StringSplitter
    signature: StringSplitter StringSplitter::operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: StringSplitter::operator const void*() const
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - not_end
    linkageType: ''
    returnType: void
    signature: void StringSplitter::operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: butil::StringSplitter::field
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 66
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * StringSplitter::field() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/string_splitter_inl.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::StringSplitter::length
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 63
    functionsReached:
    - static_cast<size_t>
    linkageType: ''
    returnType: size_t
    signature: size_t StringSplitter::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece
      Src: /src/brpc/src/butil/string_splitter_inl.h:91,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:91,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::StringSplitter::field_sp
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - StringPiece
    - butil::StringSplitter::field
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece StringSplitter::field_sp() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::StringSplitter::not_end
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool StringSplitter::not_end(const char* p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:100,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: butil::StringSplitter::to_int8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_int8(int8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:109,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 114
    functionName: butil::StringSplitter::to_uint8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_uint8(uint8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:118,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 123
    functionName: butil::StringSplitter::to_int
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_int(int* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 132
    functionName: butil::StringSplitter::to_uint
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_uint(unsigned int* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtol
      Src: /src/brpc/src/butil/string_splitter_inl.h:136,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:136,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:137,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 138
    functionName: butil::StringSplitter::to_long
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 4
    functionsReached:
    - butil::StringSplitter::length
    - strtol
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_long(long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoul
      Src: /src/brpc/src/butil/string_splitter_inl.h:142,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:142,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:143,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: butil::StringSplitter::to_ulong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 4
    functionsReached:
    - strtoul
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_ulong(unsigned long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/brpc/src/butil/string_splitter_inl.h:148,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:148,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:149,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 150
    functionName: butil::StringSplitter::to_longlong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - strtoll
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_longlong(long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoull
      Src: /src/brpc/src/butil/string_splitter_inl.h:154,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:154,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:155,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 156
    functionName: butil::StringSplitter::to_ulonglong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - strtoull
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_ulonglong(unsigned long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtof
      Src: /src/brpc/src/butil/string_splitter_inl.h:160,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:160,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:161,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - float*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 162
    functionName: butil::StringSplitter::to_float
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - strtof
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_float(float* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtod
      Src: /src/brpc/src/butil/string_splitter_inl.h:166,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:166,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:167,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 168
    functionName: butil::StringSplitter::to_double
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - strtod
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_double(double* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::init
      Src: /src/brpc/src/butil/string_splitter_inl.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - str
    - seps
    - action
    argTypes:
    - char*
    - char*
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: butil::StringMultiSplitter::StringMultiSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::init
    linkageType: ''
    returnType: void
    signature: "void StringMultiSplitter::StringMultiSplitter (\n    const char* str,
      const char* seps, EmptyFieldAction action)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::init
      Src: /src/brpc/src/butil/string_splitter_inl.h:186,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - str_begin
    - str_end
    - seps
    - action
    argTypes:
    - char*
    - char*
    - char*
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 179
    functionDepth: 1
    functionLinenumber: 179
    functionLinenumberEnd: 187
    functionName: butil::StringMultiSplitter::StringMultiSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::init
    linkageType: ''
    returnType: void
    signature: "void StringMultiSplitter::StringMultiSplitter (\n    const char* str_begin,
      const char* str_end,\n    const char* seps, EmptyFieldAction action)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:190,1
    - Dst: butil::StringMultiSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:192,1
    - Dst: butil::StringMultiSplitter::is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:192,1
    - Dst: butil::StringMultiSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:194,1
    - Dst: butil::StringMultiSplitter::is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:194,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 198
    functionName: butil::StringMultiSplitter::init
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringMultiSplitter::is_sep
    - __builtin_expect
    - butil::StringMultiSplitter::not_end
    linkageType: ''
    returnType: void
    signature: void StringMultiSplitter::init()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:201,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:202,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:205,1
    - Dst: is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:205,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:209,1
    - Dst: is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:209,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 212
    functionName: '& StringMultiSplitter::operator++()'
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - is_sep
    - __builtin_expect
    - not_end
    linkageType: ''
    returnType: StringMultiSplitter
    signature: StringMultiSplitter & StringMultiSplitter::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 218
    functionName: StringMultiSplitter::operator++(int)
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StringMultiSplitter
    signature: StringMultiSplitter StringMultiSplitter::operator++(int)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 227
    functionName: butil::StringMultiSplitter::is_sep
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool StringMultiSplitter::is_sep(char c) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: StringMultiSplitter::operator const void*() const
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - not_end
    linkageType: ''
    returnType: void
    signature: void StringMultiSplitter::operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: butil::StringMultiSplitter::field
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * StringMultiSplitter::field() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/string_splitter_inl.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: butil::StringMultiSplitter::length
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 7
    functionsReached:
    - static_cast<size_t>
    linkageType: ''
    returnType: size_t
    signature: size_t StringMultiSplitter::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece
      Src: /src/brpc/src/butil/string_splitter_inl.h:242,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:242,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: butil::StringMultiSplitter::field_sp
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    - StringPiece
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece StringMultiSplitter::field_sp() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: butil::StringMultiSplitter::not_end
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool StringMultiSplitter::not_end(const char* p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:251,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 256
    functionName: butil::StringMultiSplitter::to_int8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_int8(int8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:260,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 1
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: butil::StringMultiSplitter::to_uint8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_uint8(uint8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:269,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 274
    functionName: butil::StringMultiSplitter::to_int
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_int(int* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:278,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 283
    functionName: butil::StringMultiSplitter::to_uint
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_uint(unsigned int* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtol
      Src: /src/brpc/src/butil/string_splitter_inl.h:287,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:287,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:288,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 289
    functionName: butil::StringMultiSplitter::to_long
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtol
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_long(long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoul
      Src: /src/brpc/src/butil/string_splitter_inl.h:293,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:293,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:294,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 295
    functionName: butil::StringMultiSplitter::to_ulong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtoul
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_ulong(unsigned long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/brpc/src/butil/string_splitter_inl.h:299,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:299,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:300,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 301
    functionName: butil::StringMultiSplitter::to_longlong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 1
    functionsReached:
    - strtoll
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_longlong(long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoull
      Src: /src/brpc/src/butil/string_splitter_inl.h:305,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:305,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:306,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 307
    functionName: butil::StringMultiSplitter::to_ulonglong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtoull
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_ulonglong(unsigned long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtof
      Src: /src/brpc/src/butil/string_splitter_inl.h:311,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:311,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:312,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - float*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 313
    functionName: butil::StringMultiSplitter::to_float
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - strtof
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_float(float* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtod
      Src: /src/brpc/src/butil/string_splitter_inl.h:317,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:317,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:318,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 319
    functionName: butil::StringMultiSplitter::to_double
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtod
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_double(double* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::find
      Src: /src/brpc/src/butil/string_splitter_inl.h:323,1
    - Dst: StringPiece::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 327
    functionName: butil::KeyValuePairsSplitter::UpdateDelimiterPosition
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - StringPiece::find
    - StringPiece::length
    linkageType: ''
    returnType: void
    signature: void KeyValuePairsSplitter::UpdateDelimiterPosition()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::init
      Src: /src/brpc/src/butil/string_splitter_inl.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - str_begin
    - str_end
    - sep
    - action
    argTypes:
    - char*
    - char*
    - char
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 27
    functionDepth: 2
    functionLinenumber: 27
    functionLinenumberEnd: 36
    functionName: butil::StringSplitter::StringSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::init
    linkageType: ''
    returnType: void
    signature: "void StringSplitter::StringSplitter(const char* str_begin,\n                               const
      char* str_end,\n                               const char sep,\n                               EmptyFieldAction
      action)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - str
    - sep
    - action
    argTypes:
    - char*
    - char
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::StringSplitter::StringSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void StringSplitter::StringSplitter(const char* str, char sep,\n                               EmptyFieldAction
      action)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/butil/string_splitter_inl.h:44,1
    - Dst: data
      Src: /src/brpc/src/butil/string_splitter_inl.h:44,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' input'
    - sep
    - action
    argTypes:
    - StringPiece
    - char
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: butil::StringSplitter::StringSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - data
    linkageType: ''
    returnType: void
    signature: "void StringSplitter::StringSplitter(const StringPiece& input, char
      sep,\n                               EmptyFieldAction action)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:48,1
    - Dst: butil::StringSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:50,1
    - Dst: butil::StringSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 56
    functionName: butil::StringSplitter::init
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - __builtin_expect
    - butil::StringSplitter::not_end
    linkageType: ''
    returnType: void
    signature: void StringSplitter::init()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:59,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:60,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:63,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:67,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 70
    functionName: '& StringSplitter::operator++()'
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - __builtin_expect
    - not_end
    linkageType: ''
    returnType: StringSplitter
    signature: StringSplitter & StringSplitter::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: StringSplitter::operator++(int)
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StringSplitter
    signature: StringSplitter StringSplitter::operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: StringSplitter::operator const void*() const
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - not_end
    linkageType: ''
    returnType: void
    signature: void StringSplitter::operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 84
    functionName: butil::StringSplitter::field
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 73
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * StringSplitter::field() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/string_splitter_inl.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::StringSplitter::length
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 71
    functionsReached:
    - static_cast<size_t>
    linkageType: ''
    returnType: size_t
    signature: size_t StringSplitter::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece
      Src: /src/brpc/src/butil/string_splitter_inl.h:91,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:91,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: butil::StringSplitter::field_sp
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - StringPiece
    - butil::StringSplitter::field
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece StringSplitter::field_sp() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::StringSplitter::not_end
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool StringSplitter::not_end(const char* p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:100,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: butil::StringSplitter::to_int8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_int8(int8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:109,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 114
    functionName: butil::StringSplitter::to_uint8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_uint8(uint8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:118,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 116
    functionDepth: 2
    functionLinenumber: 116
    functionLinenumberEnd: 123
    functionName: butil::StringSplitter::to_int
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_int(int* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 125
    functionDepth: 2
    functionLinenumber: 125
    functionLinenumberEnd: 132
    functionName: butil::StringSplitter::to_uint
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_uint(unsigned int* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtol
      Src: /src/brpc/src/butil/string_splitter_inl.h:136,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:136,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:137,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 138
    functionName: butil::StringSplitter::to_long
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 6
    functionsReached:
    - butil::StringSplitter::length
    - strtol
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_long(long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoul
      Src: /src/brpc/src/butil/string_splitter_inl.h:142,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:142,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:143,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 144
    functionName: butil::StringSplitter::to_ulong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 6
    functionsReached:
    - strtoul
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_ulong(unsigned long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/brpc/src/butil/string_splitter_inl.h:148,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:148,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:149,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 150
    functionName: butil::StringSplitter::to_longlong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - strtoll
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_longlong(long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoull
      Src: /src/brpc/src/butil/string_splitter_inl.h:154,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:154,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:155,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 156
    functionName: butil::StringSplitter::to_ulonglong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - strtoull
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_ulonglong(unsigned long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtof
      Src: /src/brpc/src/butil/string_splitter_inl.h:160,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:160,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:161,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:161,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - float*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 162
    functionName: butil::StringSplitter::to_float
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - strtof
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_float(float* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtod
      Src: /src/brpc/src/butil/string_splitter_inl.h:166,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:166,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:167,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 168
    functionName: butil::StringSplitter::to_double
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - strtod
    - butil::StringSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringSplitter::to_double(double* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::init
      Src: /src/brpc/src/butil/string_splitter_inl.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - str
    - seps
    - action
    argTypes:
    - char*
    - char*
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: butil::StringMultiSplitter::StringMultiSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::init
    linkageType: ''
    returnType: void
    signature: "void StringMultiSplitter::StringMultiSplitter (\n    const char* str,
      const char* seps, EmptyFieldAction action)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::init
      Src: /src/brpc/src/butil/string_splitter_inl.h:186,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - str_begin
    - str_end
    - seps
    - action
    argTypes:
    - char*
    - char*
    - char*
    - EmptyFieldAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 179
    functionDepth: 2
    functionLinenumber: 179
    functionLinenumberEnd: 187
    functionName: butil::StringMultiSplitter::StringMultiSplitter
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::init
    linkageType: ''
    returnType: void
    signature: "void StringMultiSplitter::StringMultiSplitter (\n    const char* str_begin,
      const char* str_end,\n    const char* seps, EmptyFieldAction action)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:190,1
    - Dst: butil::StringMultiSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:192,1
    - Dst: butil::StringMultiSplitter::is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:192,1
    - Dst: butil::StringMultiSplitter::not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:194,1
    - Dst: butil::StringMultiSplitter::is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:194,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 198
    functionName: butil::StringMultiSplitter::init
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 4
    functionsReached:
    - butil::StringMultiSplitter::is_sep
    - __builtin_expect
    - butil::StringMultiSplitter::not_end
    linkageType: ''
    returnType: void
    signature: void StringMultiSplitter::init()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/string_splitter_inl.h:201,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:202,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:205,1
    - Dst: is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:205,1
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:209,1
    - Dst: is_sep
      Src: /src/brpc/src/butil/string_splitter_inl.h:209,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 212
    functionName: '& StringMultiSplitter::operator++()'
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - is_sep
    - __builtin_expect
    - not_end
    linkageType: ''
    returnType: StringMultiSplitter
    signature: StringMultiSplitter & StringMultiSplitter::operator++()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 218
    functionName: StringMultiSplitter::operator++(int)
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: StringMultiSplitter
    signature: StringMultiSplitter StringMultiSplitter::operator++(int)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 227
    functionName: butil::StringMultiSplitter::is_sep
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool StringMultiSplitter::is_sep(char c) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: not_end
      Src: /src/brpc/src/butil/string_splitter_inl.h:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: StringMultiSplitter::operator const void*() const
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - not_end
    linkageType: ''
    returnType: void
    signature: void StringMultiSplitter::operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 235
    functionName: butil::StringMultiSplitter::field
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * StringMultiSplitter::field() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/string_splitter_inl.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 239
    functionName: butil::StringMultiSplitter::length
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 14
    functionsReached:
    - static_cast<size_t>
    linkageType: ''
    returnType: size_t
    signature: size_t StringMultiSplitter::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece
      Src: /src/brpc/src/butil/string_splitter_inl.h:242,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:242,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: butil::StringMultiSplitter::field_sp
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    - StringPiece
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece StringMultiSplitter::field_sp() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 247
    functionName: butil::StringMultiSplitter::not_end
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool StringMultiSplitter::not_end(const char* p) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:251,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 249
    functionDepth: 2
    functionLinenumber: 249
    functionLinenumberEnd: 256
    functionName: butil::StringMultiSplitter::to_int8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_int8(int8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:260,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: butil::StringMultiSplitter::to_uint8
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_uint8(uint8_t* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_long
      Src: /src/brpc/src/butil/string_splitter_inl.h:269,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 267
    functionDepth: 2
    functionLinenumber: 267
    functionLinenumberEnd: 274
    functionName: butil::StringMultiSplitter::to_int
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_long
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_int(int* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringMultiSplitter::to_ulong
      Src: /src/brpc/src/butil/string_splitter_inl.h:278,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 276
    functionDepth: 2
    functionLinenumber: 276
    functionLinenumberEnd: 283
    functionName: butil::StringMultiSplitter::to_uint
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::to_ulong
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_uint(unsigned int* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtol
      Src: /src/brpc/src/butil/string_splitter_inl.h:287,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:287,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:288,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 289
    functionName: butil::StringMultiSplitter::to_long
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 4
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtol
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_long(long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoul
      Src: /src/brpc/src/butil/string_splitter_inl.h:293,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:293,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:294,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 295
    functionName: butil::StringMultiSplitter::to_ulong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 4
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtoul
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_ulong(unsigned long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/brpc/src/butil/string_splitter_inl.h:299,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:299,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:300,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 301
    functionName: butil::StringMultiSplitter::to_longlong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 1
    functionsReached:
    - strtoll
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_longlong(long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtoull
      Src: /src/brpc/src/butil/string_splitter_inl.h:305,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:305,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:306,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - unsigned long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 307
    functionName: butil::StringMultiSplitter::to_ulonglong
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtoull
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_ulonglong(unsigned long long* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtof
      Src: /src/brpc/src/butil/string_splitter_inl.h:311,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:311,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:312,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - float*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 313
    functionName: butil::StringMultiSplitter::to_float
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - strtof
    - butil::StringMultiSplitter::length
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_float(float* pv) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strtod
      Src: /src/brpc/src/butil/string_splitter_inl.h:317,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:317,1
    - Dst: butil::StringMultiSplitter::field
      Src: /src/brpc/src/butil/string_splitter_inl.h:318,1
    - Dst: butil::StringMultiSplitter::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pv
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 319
    functionName: butil::StringMultiSplitter::to_double
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 0
    functionsReached:
    - butil::StringMultiSplitter::length
    - strtod
    - butil::StringMultiSplitter::field
    linkageType: ''
    returnType: int
    signature: int StringMultiSplitter::to_double(double* pv) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StringPiece::find
      Src: /src/brpc/src/butil/string_splitter_inl.h:323,1
    - Dst: StringPiece::length
      Src: /src/brpc/src/butil/string_splitter_inl.h:325,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 327
    functionName: butil::KeyValuePairsSplitter::UpdateDelimiterPosition
    functionSourceFile: /src/brpc/src/butil/string_splitter_inl.h
    functionUses: 2
    functionsReached:
    - StringPiece::find
    - StringPiece::length
    linkageType: ''
    returnType: void
    signature: void KeyValuePairsSplitter::UpdateDelimiterPosition()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/class_name.cpp:51,1
    - Dst: free
      Src: /src/brpc/src/butil/class_name.cpp:54,1
    - Dst: std::string
      Src: /src/brpc/src/butil/class_name.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 58
    functionName: butil::demangle
    functionSourceFile: /src/brpc/src/butil/class_name.cpp
    functionUses: 4
    functionsReached:
    - std::string
    - free
    - abi::__cxa_demangle
    linkageType: ''
    returnType: std::string
    signature: std::string demangle(const char* name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/class_name.cpp:51,1
    - Dst: free
      Src: /src/brpc/src/butil/class_name.cpp:54,1
    - Dst: std::string
      Src: /src/brpc/src/butil/class_name.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 58
    functionName: butil::demangle
    functionSourceFile: /src/brpc/src/butil/class_name.cpp
    functionUses: 4
    functionsReached:
    - std::string
    - free
    - abi::__cxa_demangle
    linkageType: ''
    returnType: std::string
    signature: std::string demangle(const char* name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/single_threaded_pool.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::PtAllocator::Alloc
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * Alloc(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/single_threaded_pool.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::PtAllocator::Free
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void Free(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Allocator
      Src: /src/brpc/src/butil/single_threaded_pool.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: butil::SingleThreadedPool::SingleThreadedPool
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - Allocator
    linkageType: ''
    returnType: void
    signature: void SingleThreadedPool(const Allocator& alloc = Allocator())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/single_threaded_pool.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: ~SingleThreadedPool()
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void ~SingleThreadedPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/single_threaded_pool.h:71,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/single_threaded_pool.h:72,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/single_threaded_pool.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - SingleThreadedPool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 74
    functionName: butil::SingleThreadedPool::swap
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(SingleThreadedPool & other)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Alloc
      Src: /src/brpc/src/butil/single_threaded_pool.h:85,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 94
    functionName: butil::SingleThreadedPool::get
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - Alloc
    linkageType: ''
    returnType: void
    signature: void * get()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: butil::SingleThreadedPool::back
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void back(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Free
      Src: /src/brpc/src/butil/single_threaded_pool.h:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 115
    functionName: butil::SingleThreadedPool::reset
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - Free
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 126
    functionName: butil::SingleThreadedPool::count_allocated
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t count_allocated() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 131
    functionName: butil::SingleThreadedPool::count_free
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t count_free() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SingleThreadedPool::count_allocated
      Src: /src/brpc/src/butil/single_threaded_pool.h:133,1
    - Dst: butil::SingleThreadedPool::count_free
      Src: /src/brpc/src/butil/single_threaded_pool.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: butil::SingleThreadedPool::count_active
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - butil::SingleThreadedPool::count_allocated
    - butil::SingleThreadedPool::count_free
    linkageType: ''
    returnType: size_t
    signature: size_t count_active() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: '& get_allocator()'
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Allocator
    signature: Allocator & get_allocator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: butil::SingleThreadedPool::get_allocator
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Allocator
    signature: Allocator get_allocator() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/single_threaded_pool.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::PtAllocator::Alloc
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - malloc
    linkageType: ''
    returnType: void
    signature: void * Alloc(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/single_threaded_pool.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::PtAllocator::Free
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void Free(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Allocator
      Src: /src/brpc/src/butil/single_threaded_pool.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: butil::SingleThreadedPool::SingleThreadedPool
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - Allocator
    linkageType: ''
    returnType: void
    signature: void SingleThreadedPool(const Allocator& alloc = Allocator())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/single_threaded_pool.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: ~SingleThreadedPool()
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: void
    signature: void ~SingleThreadedPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/single_threaded_pool.h:71,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/single_threaded_pool.h:72,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/single_threaded_pool.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - SingleThreadedPool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 74
    functionName: butil::SingleThreadedPool::swap
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(SingleThreadedPool & other)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Alloc
      Src: /src/brpc/src/butil/single_threaded_pool.h:85,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 94
    functionName: butil::SingleThreadedPool::get
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - Alloc
    linkageType: ''
    returnType: void
    signature: void * get()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 104
    functionName: butil::SingleThreadedPool::back
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void back(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Free
      Src: /src/brpc/src/butil/single_threaded_pool.h:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 115
    functionName: butil::SingleThreadedPool::reset
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - Free
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 126
    functionName: butil::SingleThreadedPool::count_allocated
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t count_allocated() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 131
    functionName: butil::SingleThreadedPool::count_free
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t count_free() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SingleThreadedPool::count_allocated
      Src: /src/brpc/src/butil/single_threaded_pool.h:133,1
    - Dst: butil::SingleThreadedPool::count_free
      Src: /src/brpc/src/butil/single_threaded_pool.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: butil::SingleThreadedPool::count_active
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached:
    - butil::SingleThreadedPool::count_allocated
    - butil::SingleThreadedPool::count_free
    linkageType: ''
    returnType: size_t
    signature: size_t count_active() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: '& get_allocator()'
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Allocator
    signature: Allocator & get_allocator()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: butil::SingleThreadedPool::get_allocator
    functionSourceFile: /src/brpc/src/butil/single_threaded_pool.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Allocator
    signature: Allocator get_allocator() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:29,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 64
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_CompareAndSwap(volatile AtomicWord* ptr,\n                                           AtomicWord
      old_value,\n                                           AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:35,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 4
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicExchange(volatile AtomicWord* ptr,\n                                           AtomicWord
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:41,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 31
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                            AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:47,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 11
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Barrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                          AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:54,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 56
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 13
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:61,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 1
    functionsReached:
    - butil::subtle::Release_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:66,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 4
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile AtomicWord *ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:71,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 4
    functionsReached:
    - butil::subtle::Acquire_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:76,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 12
    functionsReached:
    - butil::subtle::Release_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:81,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 8
    functionsReached:
    - reinterpret_cast<volatile const Atomic32*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord NoBarrier_Load(volatile const AtomicWord *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:86,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 16
    functionsReached:
    - butil::subtle::Acquire_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Acquire_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:91,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 93
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 4
    functionsReached:
    - butil::subtle::Release_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Release_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:29,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 65
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_CompareAndSwap(volatile AtomicWord* ptr,\n                                           AtomicWord
      old_value,\n                                           AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:35,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 5
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicExchange(volatile AtomicWord* ptr,\n                                           AtomicWord
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:41,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 32
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                            AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:47,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 12
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Barrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                          AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:54,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 56
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:61,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 2
    functionsReached:
    - butil::subtle::Release_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:66,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 5
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile AtomicWord *ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:71,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 5
    functionsReached:
    - butil::subtle::Acquire_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:76,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 13
    functionsReached:
    - butil::subtle::Release_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:81,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 9
    functionsReached:
    - reinterpret_cast<volatile const Atomic32*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord NoBarrier_Load(volatile const AtomicWord *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:86,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 17
    functionsReached:
    - butil::subtle::Acquire_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Acquire_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:91,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 93
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 5
    functionsReached:
    - butil::subtle::Release_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Release_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:29,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 66
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_CompareAndSwap(volatile AtomicWord* ptr,\n                                           AtomicWord
      old_value,\n                                           AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:35,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 6
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicExchange(volatile AtomicWord* ptr,\n                                           AtomicWord
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:41,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 33
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                            AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:47,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 13
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Barrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                          AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:54,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 56
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 15
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:61,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 3
    functionsReached:
    - butil::subtle::Release_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:66,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 6
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile AtomicWord *ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:71,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 6
    functionsReached:
    - butil::subtle::Acquire_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:76,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Release_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:81,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 10
    functionsReached:
    - reinterpret_cast<volatile const Atomic32*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord NoBarrier_Load(volatile const AtomicWord *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:86,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 18
    functionsReached:
    - butil::subtle::Acquire_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Acquire_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:91,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 93
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 6
    functionsReached:
    - butil::subtle::Release_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Release_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:29,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 31
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 67
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_CompareAndSwap(volatile AtomicWord* ptr,\n                                           AtomicWord
      old_value,\n                                           AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:35,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 7
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicExchange(volatile AtomicWord* ptr,\n                                           AtomicWord
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:41,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 34
    functionsReached:
    - butil::subtle::NoBarrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord NoBarrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                            AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:47,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 14
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Barrier_AtomicIncrement(volatile AtomicWord* ptr,\n                                          AtomicWord
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:54,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 56
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 16
    functionsReached:
    - butil::subtle::Acquire_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:61,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - AtomicWord*
    - AtomicWord
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 63
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 4
    functionsReached:
    - butil::subtle::Release_CompareAndSwap
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: "AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr,\n                                         AtomicWord
      old_value,\n                                         AtomicWord new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:66,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 7
    functionsReached:
    - reinterpret_cast<volatile Atomic32*>
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile AtomicWord *ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:71,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 7
    functionsReached:
    - butil::subtle::Acquire_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:76,1
    - Dst: reinterpret_cast<volatile Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - AtomicWord*
    - AtomicWord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 15
    functionsReached:
    - butil::subtle::Release_Store
    - reinterpret_cast<volatile Atomic32*>
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile AtomicWord* ptr, AtomicWord value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:81,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 11
    functionsReached:
    - reinterpret_cast<volatile const Atomic32*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord NoBarrier_Load(volatile const AtomicWord *ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:86,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 19
    functionsReached:
    - butil::subtle::Acquire_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Acquire_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Release_Load
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:91,1
    - Dst: reinterpret_cast<volatile const Atomic32*>
      Src: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 93
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_atomicword_compat.h
    functionUses: 7
    functionsReached:
    - butil::subtle::Release_Load
    - reinterpret_cast<volatile const Atomic32*>
    linkageType: ''
    returnType: AtomicWord
    signature: AtomicWord Release_Load(volatile const AtomicWord* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::isfinite
      Src: /src/brpc/src/butil/float_util.h:19,1
    - Dst: _finite
      Src: /src/brpc/src/butil/float_util.h:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' number'
    argTypes:
    - Float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 23
    functionName: butil::IsFinite
    functionSourceFile: /src/brpc/src/butil/float_util.h
    functionUses: 0
    functionsReached:
    - _finite
    - std::isfinite
    linkageType: ''
    returnType: bool
    signature: bool IsFinite(const Float& number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::isnan
      Src: /src/brpc/src/butil/float_util.h:28,1
    - Dst: _isnan
      Src: /src/brpc/src/butil/float_util.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' number'
    argTypes:
    - Float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 32
    functionName: butil::IsNaN
    functionSourceFile: /src/brpc/src/butil/float_util.h
    functionUses: 0
    functionsReached:
    - _isnan
    - std::isnan
    linkageType: ''
    returnType: bool
    signature: bool IsNaN(const Float& number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::isfinite
      Src: /src/brpc/src/butil/float_util.h:19,1
    - Dst: _finite
      Src: /src/brpc/src/butil/float_util.h:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' number'
    argTypes:
    - Float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 23
    functionName: butil::IsFinite
    functionSourceFile: /src/brpc/src/butil/float_util.h
    functionUses: 0
    functionsReached:
    - _finite
    - std::isfinite
    linkageType: ''
    returnType: bool
    signature: bool IsFinite(const Float& number)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::isnan
      Src: /src/brpc/src/butil/float_util.h:28,1
    - Dst: _isnan
      Src: /src/brpc/src/butil/float_util.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' number'
    argTypes:
    - Float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 32
    functionName: butil::IsNaN
    functionSourceFile: /src/brpc/src/butil/float_util.h
    functionUses: 0
    functionsReached:
    - _isnan
    - std::isnan
    linkageType: ''
    returnType: bool
    signature: bool IsNaN(const Float& number)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: butil::fd_guard::fd_guard
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void fd_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::fd_guard::fd_guard
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void fd_guard(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/butil/fd_guard.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: ~fd_guard()
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 0
    functionsReached:
    - bvar::FileDumper::close
    linkageType: ''
    returnType: void
    signature: void ~fd_guard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/butil/fd_guard.h:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: butil::fd_guard::reset
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 2
    functionsReached:
    - bvar::FileDumper::close
    linkageType: ''
    returnType: void
    signature: void reset(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: butil::fd_guard::release
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: operator int() const
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator int() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: butil::fd_guard::fd_guard
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void fd_guard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::fd_guard::fd_guard
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void fd_guard(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/butil/fd_guard.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: ~fd_guard()
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 0
    functionsReached:
    - bvar::FileDumper::close
    linkageType: ''
    returnType: void
    signature: void ~fd_guard()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/butil/fd_guard.h:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: butil::fd_guard::reset
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 2
    functionsReached:
    - bvar::FileDumper::close
    linkageType: ''
    returnType: void
    signature: void reset(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: butil::fd_guard::release
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: operator int() const
    functionSourceFile: /src/brpc/src/butil/fd_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator int() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/src/butil/file_util.h:430,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - FILE*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 431
    functionName: operator()(FILE* x) const
    functionSourceFile: /src/brpc/src/butil/file_util.h
    functionUses: 0
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: void operator()(FILE* x) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/brpc/src/butil/file_util.h:430,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - FILE*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 431
    functionName: operator()(FILE* x) const
    functionSourceFile: /src/brpc/src/butil/file_util.h
    functionUses: 0
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: void operator()(FILE* x) const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::length
      Src: /src/brpc/src/butil/guid.cc:11,1
    - Dst: butil::length
      Src: /src/brpc/src/butil/guid.cc:15,1
    - Dst: std::string::find
      Src: /src/brpc/src/butil/guid.cc:21,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 1
    argNames:
    - ' guid'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 9
    functionDepth: 0
    functionLinenumber: 9
    functionLinenumberEnd: 27
    functionName: butil::IsValidGUID
    functionSourceFile: /src/brpc/src/butil/guid.cc
    functionUses: 1
    functionsReached:
    - butil::length
    - std::string::find
    linkageType: ''
    returnType: bool
    signature: bool IsValidGUID(const std::string& guid)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::length
      Src: /src/brpc/src/butil/guid.cc:11,1
    - Dst: butil::length
      Src: /src/brpc/src/butil/guid.cc:15,1
    - Dst: std::string::find
      Src: /src/brpc/src/butil/guid.cc:21,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 1
    argNames:
    - ' guid'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 9
    functionDepth: 0
    functionLinenumber: 9
    functionLinenumberEnd: 27
    functionName: butil::IsValidGUID
    functionSourceFile: /src/brpc/src/butil/guid.cc
    functionUses: 1
    functionsReached:
    - butil::length
    - std::string::find
    linkageType: ''
    returnType: bool
    signature: bool IsValidGUID(const std::string& guid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: std::up_detail::rv::rv
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void rv(T& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: std::up_detail::rv::rv
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void rv(T& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 83
    functionName: std::move
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 38
    functionsReached: []
    linkageType: ''
    returnType: "typename butil::enable_if<\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T&\n>::type"
    signature: "typename butil::enable_if<\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T&\n>::type move(T& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: std::move
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 38
    functionsReached: []
    linkageType: ''
    returnType: "typename butil::enable_if <\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    const T&\n>::type"
    signature: "typename butil::enable_if <\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    const T&\n>::type move(const T& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/src/butil/unique_ptr.h:102,1
    - Dst: up_detail::rv<T>
      Src: /src/brpc/src/butil/unique_ptr.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 103
    functionName: std::move
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 38
    functionsReached:
    - up_detail::rv<T>
    - T
    linkageType: ''
    returnType: "typename butil::enable_if <\n    up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T\n>::type"
    signature: "typename butil::enable_if <\n    up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T\n>::type move(T& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - typename up_detail::identity<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: std::forward
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: "typename butil::enable_if <\n    butil::is_reference<T>::value,\n
      \   T\n>::type"
    signature: "typename butil::enable_if <\n    butil::is_reference<T>::value,\n
      \   T\n>::type forward(typename up_detail::identity<T>::type t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/butil/unique_ptr.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - typename up_detail::identity<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 123
    functionName: std::forward
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type"
    signature: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type forward(typename up_detail::identity<T>::type& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/butil/unique_ptr.h:132,1
    - Dst: const_cast<T&>
      Src: /src/brpc/src/butil/unique_ptr.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - typename up_detail::identity<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: std::forward
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - const_cast<T&>
    - std::move
    linkageType: ''
    returnType: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type"
    signature: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type forward(const typename up_detail::identity<T>::type& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    - Dst: forward<T2>
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    - forward<T2>
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_reference
    signature: T2_reference second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 159
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_const_reference
    signature: T2_const_reference second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    functionName: '& second()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 180
    functionName: '& second() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - UniquePtrStorage<T1, T2, b>
    - UniquePtrStorage<T1, T2, b>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 190
    functionName: std::up_detail::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 1
    functionsReached:
    - std::up_detail::swap
    - second
    - first
    linkageType: ''
    returnType: void
    signature: void swap(UniquePtrStorage<T1, T2, b>& x, UniquePtrStorage<T1, T2,
      b>& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    - Dst: forward<T2>
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    - forward<T2>
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_reference
    signature: T2_reference second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 159
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_const_reference
    signature: T2_const_reference second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    functionName: '& second()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 180
    functionName: '& second() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - UniquePtrStorage<T1, T2, b>
    - UniquePtrStorage<T1, T2, b>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 190
    functionName: std::up_detail::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 2
    functionsReached:
    - std::up_detail::swap
    - second
    - first
    linkageType: ''
    returnType: void
    signature: void swap(UniquePtrStorage<T1, T2, b>& x, UniquePtrStorage<T1, T2,
      b>& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 196
    functionName: std::default_delete
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void default_delete()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 199
    functionName: std::default_delete
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void default_delete(const default_delete<U>&,\n            typename
      butil::enable_if<up_detail::is_convertible<U*, T*>::value>::type* = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 204
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 212
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>
      Src: /src/brpc/src/butil/unique_ptr.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 276
    functionName: operator up_detail::rv<unique_ptr>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - up_detail::rv<unique_ptr>
    linkageType: ''
    returnType: void
    signature: void operator up_detail::rv<unique_ptr>()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:278,1
    - Dst: forward<deleter_type>
      Src: /src/brpc/src/butil/unique_ptr.h:278,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 278
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached:
    - up_detail::rv<unique_ptr>::release
    - up_detail::rv<unique_ptr>::get_deleter
    - forward<deleter_type>
    linkageType: ''
    returnType: void
    signature: void unique_ptr(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:280,1
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:280,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:281,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:281,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 283
    functionName: '& operator=(up_detail::rv<unique_ptr> r)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - up_detail::rv<unique_ptr>::release
    - second
    - up_detail::rv<unique_ptr>::get_deleter
    - move
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 287
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr(pointer p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:291,1
    - Dst: forward<D>
      Src: /src/brpc/src/butil/unique_ptr.h:291,1
    - Dst: const_cast<typename butil::add_reference<D>::type>
      Src: /src/brpc/src/butil/unique_ptr.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - d
    argTypes:
    - pointer
    - "typename butil::conditional<butil::is_reference<D>::value,\n               volatile
      typename butil::remove_reference<D>::type&, D>::type"
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 291
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached:
    - move
    - forward<D>
    - const_cast<typename butil::add_reference<D>::type>
    linkageType: ''
    returnType: void
    signature: "void unique_ptr(pointer p, typename butil::conditional<butil::is_reference<D>::value,\n
      \              volatile typename butil::remove_reference<D>::type&, D>::type
      d)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unique_ptr<U, E>::release
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    - Dst: forward<D>
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    - Dst: forward<E>
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    - Dst: unique_ptr<U, E>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - u
    argTypes:
    - unique_ptr<U, E>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 304
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached:
    - forward<E>
    - forward<D>
    - unique_ptr<U, E>::release
    - unique_ptr<U, E>::get_deleter
    linkageType: ''
    returnType: void
    signature: "void unique_ptr(unique_ptr<U, E> u,\n               typename butil::enable_if
      <\n               !butil::is_array<U>::value &&\n               up_detail::is_convertible<typename
      unique_ptr<U>::pointer, pointer>::value\n&&\n               up_detail::is_convertible<E,
      deleter_type>::value &&\n               (\n                   !butil::is_reference<deleter_type>::value
      ||\n                   butil::is_same<deleter_type, E>::value)\n               >::type*
      = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:307,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:308,1
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: ~unique_ptr()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void ~unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - nat::*
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 315
    functionName: '& operator=(int nat::*)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(int nat::*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:319,1
    - Dst: unique_ptr<U, E>::release
      Src: /src/brpc/src/butil/unique_ptr.h:319,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:320,1
    - Dst: std::move
      Src: /src/brpc/src/butil/unique_ptr.h:320,1
    - Dst: unique_ptr<U, E>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - u
    argTypes:
    - unique_ptr<U, E>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: '& operator=(unique_ptr<U, E> u)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::move
    - reset
    - second
    - unique_ptr<U, E>::get_deleter
    - unique_ptr<U, E>::release
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(unique_ptr<U, E> u)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 324
    functionName: operator*() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: typename butil::add_reference<T>::type
    signature: typename butil::add_reference<T>::type operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 325
    functionName: operator->() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: pointer
    signature: pointer operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: std::unique_ptr::get
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 45
    functionsReached:
    - first
    linkageType: ''
    returnType: pointer
    signature: pointer get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 327
    functionName: std::unique_ptr::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_reference
    signature: deleter_reference get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    functionName: std::unique_ptr::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_const_reference
    signature: deleter_const_reference get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 329
    functionName: operator int nat::*() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator int nat::*() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:331,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/butil/unique_ptr.h:332,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:333,1
    - Dst: std::unique_ptr::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:334,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:335,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 336
    functionName: std::unique_ptr::reset
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 22
    functionsReached:
    - std::unique_ptr::get_deleter
    - std::unique_ptr::get
    - first
    - pointer
    linkageType: ''
    returnType: void
    signature: void reset(pointer p = pointer())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/butil/unique_ptr.h:339,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:340,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 342
    functionName: std::unique_ptr::release
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 37
    functionsReached:
    - std::unique_ptr::get
    - first
    - pointer
    linkageType: ''
    returnType: pointer
    signature: pointer release()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' u'
    argTypes:
    - unique_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 344
    functionName: std::unique_ptr::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::up_detail::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_ptr& u)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>
      Src: /src/brpc/src/butil/unique_ptr.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: operator up_detail::rv<unique_ptr>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - up_detail::rv<unique_ptr>
    linkageType: ''
    returnType: void
    signature: void operator up_detail::rv<unique_ptr>()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:368,1
    - Dst: forward<deleter_type>
      Src: /src/brpc/src/butil/unique_ptr.h:368,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 368
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - up_detail::rv<unique_ptr>::release
    - up_detail::rv<unique_ptr>::get_deleter
    - forward<deleter_type>
    linkageType: ''
    returnType: void
    signature: void unique_ptr(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:370,1
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:370,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:371,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:371,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 373
    functionName: '& operator=(up_detail::rv<unique_ptr> r)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - up_detail::rv<unique_ptr>::release
    - second
    - up_detail::rv<unique_ptr>::get_deleter
    - move
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 375
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 377
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr(pointer p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:381,1
    - Dst: forward<D>
      Src: /src/brpc/src/butil/unique_ptr.h:381,1
    - Dst: const_cast<typename butil::add_reference<D>::type>
      Src: /src/brpc/src/butil/unique_ptr.h:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - d
    argTypes:
    - pointer
    - "typename butil::conditional<butil::is_reference<D>::value,\n               volatile
      typename butil::remove_reference<D>::type&, D>::type"
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 381
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    - forward<D>
    - const_cast<typename butil::add_reference<D>::type>
    linkageType: ''
    returnType: void
    signature: "void unique_ptr(pointer p, typename butil::conditional<butil::is_reference<D>::value,\n
      \              volatile typename butil::remove_reference<D>::type&, D>::type
      d)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:384,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:385,1
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 387
    functionName: ~unique_ptr()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void ~unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 389
    functionName: '& operator[](size_t i) const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: T
    signature: T & operator[](size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 390
    functionName: std::unique_ptr<T[], D>::get
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - first
    linkageType: ''
    returnType: pointer
    signature: pointer get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 391
    functionName: std::unique_ptr<T[], D>::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_reference
    signature: deleter_reference get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 392
    functionName: std::unique_ptr<T[], D>::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_const_reference
    signature: deleter_const_reference get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 393
    functionName: operator int nat::*() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator int nat::*() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:395,1
    - Dst: std::unique_ptr<T[], D>::get
      Src: /src/brpc/src/butil/unique_ptr.h:396,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:397,1
    - Dst: std::unique_ptr<T[], D>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:398,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:399,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 400
    functionName: std::unique_ptr<T[], D>::reset
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::unique_ptr<T[], D>::get
    - std::unique_ptr<T[], D>::get_deleter
    - first
    - pointer
    linkageType: ''
    returnType: void
    signature: void reset(pointer p = pointer())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr<T[], D>::get
      Src: /src/brpc/src/butil/unique_ptr.h:403,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:404,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:404,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 406
    functionName: std::unique_ptr<T[], D>::release
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::unique_ptr<T[], D>::get
    - first
    - pointer
    linkageType: ''
    returnType: pointer
    signature: pointer release()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' u'
    argTypes:
    - unique_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 408
    functionName: std::unique_ptr<T[], D>::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::up_detail::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_ptr& u)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/unique_ptr.h:424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T, D>
    - unique_ptr<T, D>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 425
    functionName: std::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 44
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_ptr<T, D>& x, unique_ptr<T, D>& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:431,1
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 432
    functionName: operator==(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 439
    functionName: operator!=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:445,1
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 446
    functionName: operator<(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator<(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 453
    functionName: operator<=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 460
    functionName: operator>(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 467
    functionName: operator>=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: std::up_detail::rv::rv
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void rv(T& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: std::up_detail::rv::rv
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void rv(T& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 83
    functionName: std::move
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: "typename butil::enable_if<\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T&\n>::type"
    signature: "typename butil::enable_if<\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T&\n>::type move(T& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 93
    functionName: std::move
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: "typename butil::enable_if <\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    const T&\n>::type"
    signature: "typename butil::enable_if <\n    !up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    const T&\n>::type move(const T& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/brpc/src/butil/unique_ptr.h:102,1
    - Dst: up_detail::rv<T>
      Src: /src/brpc/src/butil/unique_ptr.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 103
    functionName: std::move
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 41
    functionsReached:
    - up_detail::rv<T>
    - T
    linkageType: ''
    returnType: "typename butil::enable_if <\n    up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T\n>::type"
    signature: "typename butil::enable_if <\n    up_detail::is_convertible<T, up_detail::rv<T>
      >::value,\n    T\n>::type move(T& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - typename up_detail::identity<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: std::forward
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: "typename butil::enable_if <\n    butil::is_reference<T>::value,\n
      \   T\n>::type"
    signature: "typename butil::enable_if <\n    butil::is_reference<T>::value,\n
      \   T\n>::type forward(typename up_detail::identity<T>::type t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/butil/unique_ptr.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - typename up_detail::identity<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 123
    functionName: std::forward
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type"
    signature: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type forward(typename up_detail::identity<T>::type& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/butil/unique_ptr.h:132,1
    - Dst: const_cast<T&>
      Src: /src/brpc/src/butil/unique_ptr.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' t'
    argTypes:
    - typename up_detail::identity<T>::type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 133
    functionName: std::forward
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - const_cast<T&>
    - std::move
    linkageType: ''
    returnType: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type"
    signature: "typename butil::enable_if <\n    !butil::is_reference<T>::value,\n
      \   T\n>::type forward(const typename up_detail::identity<T>::type& t)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    - Dst: forward<T2>
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    - forward<T2>
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_reference
    signature: T2_reference second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 159
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_const_reference
    signature: T2_const_reference second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    functionName: '& second()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 180
    functionName: '& second() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - UniquePtrStorage<T1, T2, b>
    - UniquePtrStorage<T1, T2, b>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 190
    functionName: std::up_detail::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 5
    functionsReached:
    - std::up_detail::swap
    - second
    - first
    linkageType: ''
    returnType: void
    signature: void swap(UniquePtrStorage<T1, T2, b>& x, UniquePtrStorage<T1, T2,
      b>& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    - Dst: forward<T2>
      Src: /src/brpc/src/butil/unique_ptr.h:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: std::up_detail::UniquePtrStorage::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    - forward<T2>
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 156
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 158
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_reference
    signature: T2_reference second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 159
    functionName: std::up_detail::UniquePtrStorage::second
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2_const_reference
    signature: T2_const_reference second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rv<UniquePtrStorage>
      Src: /src/brpc/src/butil/unique_ptr.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: operator rv<UniquePtrStorage>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - rv<UniquePtrStorage>
    linkageType: ''
    returnType: void
    signature: void operator rv<UniquePtrStorage>()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - t1
    argTypes:
    - T1
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - T1
    - T2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: std::up_detail::UniquePtrStorage<T1, T2, true>::UniquePtrStorage
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: void UniquePtrStorage(T1 t1, T2 t2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    functionName: '& first()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: '& first() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T1
    signature: T1 & first() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    functionName: '& second()'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 180
    functionName: '& second() const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T2
    signature: T2 & second() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:188,1
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - UniquePtrStorage<T1, T2, b>
    - UniquePtrStorage<T1, T2, b>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 190
    functionName: std::up_detail::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 6
    functionsReached:
    - std::up_detail::swap
    - second
    - first
    linkageType: ''
    returnType: void
    signature: void swap(UniquePtrStorage<T1, T2, b>& x, UniquePtrStorage<T1, T2,
      b>& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 196
    functionName: std::default_delete
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void default_delete()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 199
    functionName: std::default_delete
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void default_delete(const default_delete<U>&,\n            typename
      butil::enable_if<up_detail::is_convertible<U*, T*>::value>::type* = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 204
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 212
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>
      Src: /src/brpc/src/butil/unique_ptr.h:275,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 276
    functionName: operator up_detail::rv<unique_ptr>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - up_detail::rv<unique_ptr>
    linkageType: ''
    returnType: void
    signature: void operator up_detail::rv<unique_ptr>()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:278,1
    - Dst: forward<deleter_type>
      Src: /src/brpc/src/butil/unique_ptr.h:278,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 278
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached:
    - up_detail::rv<unique_ptr>::release
    - up_detail::rv<unique_ptr>::get_deleter
    - forward<deleter_type>
    linkageType: ''
    returnType: void
    signature: void unique_ptr(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:280,1
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:280,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:281,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:281,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 283
    functionName: '& operator=(up_detail::rv<unique_ptr> r)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - up_detail::rv<unique_ptr>::release
    - second
    - up_detail::rv<unique_ptr>::get_deleter
    - move
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 285
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 287
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr(pointer p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:291,1
    - Dst: forward<D>
      Src: /src/brpc/src/butil/unique_ptr.h:291,1
    - Dst: const_cast<typename butil::add_reference<D>::type>
      Src: /src/brpc/src/butil/unique_ptr.h:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - d
    argTypes:
    - pointer
    - "typename butil::conditional<butil::is_reference<D>::value,\n               volatile
      typename butil::remove_reference<D>::type&, D>::type"
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 291
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached:
    - move
    - forward<D>
    - const_cast<typename butil::add_reference<D>::type>
    linkageType: ''
    returnType: void
    signature: "void unique_ptr(pointer p, typename butil::conditional<butil::is_reference<D>::value,\n
      \              volatile typename butil::remove_reference<D>::type&, D>::type
      d)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unique_ptr<U, E>::release
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    - Dst: forward<D>
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    - Dst: forward<E>
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    - Dst: unique_ptr<U, E>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:304,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - u
    argTypes:
    - unique_ptr<U, E>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 304
    functionName: std::unique_ptr::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 16
    functionsReached:
    - forward<E>
    - forward<D>
    - unique_ptr<U, E>::release
    - unique_ptr<U, E>::get_deleter
    linkageType: ''
    returnType: void
    signature: "void unique_ptr(unique_ptr<U, E> u,\n               typename butil::enable_if
      <\n               !butil::is_array<U>::value &&\n               up_detail::is_convertible<typename
      unique_ptr<U>::pointer, pointer>::value\n&&\n               up_detail::is_convertible<E,
      deleter_type>::value &&\n               (\n                   !butil::is_reference<deleter_type>::value
      ||\n                   butil::is_same<deleter_type, E>::value)\n               >::type*
      = 0)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:307,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:308,1
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: ~unique_ptr()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void ~unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - nat::*
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 315
    functionName: '& operator=(int nat::*)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(int nat::*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:319,1
    - Dst: unique_ptr<U, E>::release
      Src: /src/brpc/src/butil/unique_ptr.h:319,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:320,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:320,1
    - Dst: unique_ptr<U, E>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - u
    argTypes:
    - unique_ptr<U, E>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: '& operator=(unique_ptr<U, E> u)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - second
    - unique_ptr<U, E>::get_deleter
    - unique_ptr<U, E>::release
    - move
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(unique_ptr<U, E> u)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 324
    functionName: operator*() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: typename butil::add_reference<T>::type
    signature: typename butil::add_reference<T>::type operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 325
    functionName: operator->() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: pointer
    signature: pointer operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 326
    functionName: std::unique_ptr::get
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 47
    functionsReached:
    - first
    linkageType: ''
    returnType: pointer
    signature: pointer get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 327
    functionName: std::unique_ptr::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 1
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_reference
    signature: deleter_reference get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    functionName: std::unique_ptr::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 1
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_const_reference
    signature: deleter_const_reference get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 329
    functionDepth: 1
    functionLinenumber: 329
    functionLinenumberEnd: 329
    functionName: operator int nat::*() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator int nat::*() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:331,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/butil/unique_ptr.h:332,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:333,1
    - Dst: std::unique_ptr::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:334,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:335,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 336
    functionName: std::unique_ptr::reset
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 22
    functionsReached:
    - std::unique_ptr::get_deleter
    - std::unique_ptr::get
    - first
    - pointer
    linkageType: ''
    returnType: void
    signature: void reset(pointer p = pointer())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/butil/unique_ptr.h:339,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:340,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 342
    functionName: std::unique_ptr::release
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 37
    functionsReached:
    - std::unique_ptr::get
    - first
    - pointer
    linkageType: ''
    returnType: pointer
    signature: pointer release()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' u'
    argTypes:
    - unique_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 344
    functionName: std::unique_ptr::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::up_detail::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_ptr& u)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>
      Src: /src/brpc/src/butil/unique_ptr.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: operator up_detail::rv<unique_ptr>()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - up_detail::rv<unique_ptr>
    linkageType: ''
    returnType: void
    signature: void operator up_detail::rv<unique_ptr>()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:368,1
    - Dst: forward<deleter_type>
      Src: /src/brpc/src/butil/unique_ptr.h:368,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 368
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - up_detail::rv<unique_ptr>::release
    - up_detail::rv<unique_ptr>::get_deleter
    - forward<deleter_type>
    linkageType: ''
    returnType: void
    signature: void unique_ptr(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:370,1
    - Dst: up_detail::rv<unique_ptr>::release
      Src: /src/brpc/src/butil/unique_ptr.h:370,1
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:371,1
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:371,1
    - Dst: up_detail::rv<unique_ptr>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - r
    argTypes:
    - up_detail::rv<unique_ptr>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 373
    functionName: '& operator=(up_detail::rv<unique_ptr> r)'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - up_detail::rv<unique_ptr>::release
    - second
    - up_detail::rv<unique_ptr>::get_deleter
    - move
    linkageType: ''
    returnType: unique_ptr
    signature: unique_ptr & operator=(up_detail::rv<unique_ptr> r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 375
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - pointer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 377
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void unique_ptr(pointer p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/brpc/src/butil/unique_ptr.h:381,1
    - Dst: forward<D>
      Src: /src/brpc/src/butil/unique_ptr.h:381,1
    - Dst: const_cast<typename butil::add_reference<D>::type>
      Src: /src/brpc/src/butil/unique_ptr.h:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - d
    argTypes:
    - pointer
    - "typename butil::conditional<butil::is_reference<D>::value,\n               volatile
      typename butil::remove_reference<D>::type&, D>::type"
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 381
    functionName: std::unique_ptr<T[], D>::unique_ptr
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - move
    - forward<D>
    - const_cast<typename butil::add_reference<D>::type>
    linkageType: ''
    returnType: void
    signature: "void unique_ptr(pointer p, typename butil::conditional<butil::is_reference<D>::value,\n
      \              volatile typename butil::remove_reference<D>::type&, D>::type
      d)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:384,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/butil/unique_ptr.h:385,1
    - Dst: reset
      Src: /src/brpc/src/butil/unique_ptr.h:386,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 387
    functionName: ~unique_ptr()
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - reset
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void ~unique_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 389
    functionName: '& operator[](size_t i) const'
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: T
    signature: T & operator[](size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 390
    functionName: std::unique_ptr<T[], D>::get
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 2
    functionsReached:
    - first
    linkageType: ''
    returnType: pointer
    signature: pointer get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 391
    functionName: std::unique_ptr<T[], D>::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 1
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_reference
    signature: deleter_reference get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: second
      Src: /src/brpc/src/butil/unique_ptr.h:392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 392
    functionName: std::unique_ptr<T[], D>::get_deleter
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 1
    functionsReached:
    - second
    linkageType: ''
    returnType: deleter_const_reference
    signature: deleter_const_reference get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 393
    functionName: operator int nat::*() const
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator int nat::*() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:395,1
    - Dst: std::unique_ptr<T[], D>::get
      Src: /src/brpc/src/butil/unique_ptr.h:396,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:397,1
    - Dst: std::unique_ptr<T[], D>::get_deleter
      Src: /src/brpc/src/butil/unique_ptr.h:398,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:399,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 400
    functionName: std::unique_ptr<T[], D>::reset
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::unique_ptr<T[], D>::get
    - std::unique_ptr<T[], D>::get_deleter
    - first
    - pointer
    linkageType: ''
    returnType: void
    signature: void reset(pointer p = pointer())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr<T[], D>::get
      Src: /src/brpc/src/butil/unique_ptr.h:403,1
    - Dst: first
      Src: /src/brpc/src/butil/unique_ptr.h:404,1
    - Dst: pointer
      Src: /src/brpc/src/butil/unique_ptr.h:404,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 406
    functionName: std::unique_ptr<T[], D>::release
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::unique_ptr<T[], D>::get
    - first
    - pointer
    linkageType: ''
    returnType: pointer
    signature: pointer release()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::up_detail::swap
      Src: /src/brpc/src/butil/unique_ptr.h:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' u'
    argTypes:
    - unique_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 408
    functionName: std::unique_ptr<T[], D>::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - std::up_detail::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_ptr& u)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/unique_ptr.h:424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T, D>
    - unique_ptr<T, D>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 425
    functionName: std::swap
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 45
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(unique_ptr<T, D>& x, unique_ptr<T, D>& y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:431,1
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 432
    functionName: operator==(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 439
    functionName: operator!=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:445,1
    - Dst: get
      Src: /src/brpc/src/butil/unique_ptr.h:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 446
    functionName: operator<(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator<(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 453
    functionName: operator<=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator<=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 460
    functionName: operator>(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - unique_ptr<T1, D1>
    - unique_ptr<T2, D2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 467
    functionName: operator>=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
    functionSourceFile: /src/brpc/src/butil/unique_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator>=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>&
      y)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::PtrContainer::PtrContainer
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PtrContainer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::PtrContainer::PtrContainer
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PtrContainer(T* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: ~PtrContainer()
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PtrContainer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/ptr_container.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PtrContainer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: butil::PtrContainer::PtrContainer
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void PtrContainer(const PtrContainer& rhs)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/ptr_container.h:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PtrContainer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 57
    functionName: operator=(const PtrContainer& rhs)
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void operator=(const PtrContainer& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: butil::PtrContainer::get
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: butil::PtrContainer::reset
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/ptr_container.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/ptr_container.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: T
    signature: T & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/ptr_container.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: butil::PtrContainer::PtrContainer
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PtrContainer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::PtrContainer::PtrContainer
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PtrContainer(T* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 37
    functionName: ~PtrContainer()
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PtrContainer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/ptr_container.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PtrContainer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: butil::PtrContainer::PtrContainer
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void PtrContainer(const PtrContainer& rhs)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/ptr_container.h:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PtrContainer
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 57
    functionName: operator=(const PtrContainer& rhs)
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: void
    signature: void operator=(const PtrContainer& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: butil::PtrContainer::get
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: butil::PtrContainer::reset
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void reset(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: operator void*() const
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/ptr_container.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: operator bool() const
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator bool() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/ptr_container.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: T
    signature: T & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/ptr_container.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/ptr_container.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: butil::value
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 78
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const T*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: butil::value
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 78
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const T*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:98,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool.h:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: butil::get_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 10
    functionsReached:
    - get_bthread_singleton
    - std::forward<Args>
    linkageType: ''
    returnType: T
    signature: T * get_resource(ResourceId<T>* id, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: butil::return_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 8
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: int
    signature: int return_resource(ResourceId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::address_resource
      Src: /src/brpc/src/butil/resource_pool.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: butil::address_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 7
    functionsReached:
    - butil::address_resource
    linkageType: ''
    returnType: T
    signature: T * address_resource(ResourceId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: butil::clear_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void clear_resources()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: butil::describe_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: ResourcePoolInfo
    signature: ResourcePoolInfo describe_resources()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:98,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool.h:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: butil::get_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 10
    functionsReached:
    - get_bthread_singleton
    - std::forward<Args>
    linkageType: ''
    returnType: T
    signature: T * get_resource(ResourceId<T>* id, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: butil::return_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 8
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: int
    signature: int return_resource(ResourceId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::address_resource
      Src: /src/brpc/src/butil/resource_pool.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: butil::address_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 8
    functionsReached:
    - butil::address_resource
    linkageType: ''
    returnType: T
    signature: T * address_resource(ResourceId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: butil::clear_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void clear_resources()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/resource_pool.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: butil::describe_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: ResourcePoolInfo
    signature: ResourcePoolInfo describe_resources()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pread
      Src: /src/brpc/src/butil/iobuf.cpp:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 68
    functionName: butil::iobuf::user_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ::pread
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_preadv(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pwrite
      Src: /src/brpc/src/butil/iobuf.cpp:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 85
    functionName: butil::iobuf::user_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ::pwrite
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_pwritev(int fd, const struct iovec* vector,\n                            int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::iobuf::sys_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_preadv(int fd, const struct iovec *vector, \n                          int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::iobuf::sys_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_pwritev(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:112,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:114,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 126
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:131,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:139,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:141,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 146
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 158
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - dest
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 165
    functionName: butil::iobuf::cp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: void * cp(void *__restrict dest, const void *__restrict src, size_t
      n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/src/butil/iobuf.cpp:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: butil::iobuf::reset_blockmem_allocate_and_deallocate
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::iobuf::remove_tls_block_chain
    linkageType: ''
    returnType: void
    signature: void reset_blockmem_allocate_and_deallocate()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pread
      Src: /src/brpc/src/butil/iobuf.cpp:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 68
    functionName: butil::iobuf::user_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ::pread
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_preadv(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pwrite
      Src: /src/brpc/src/butil/iobuf.cpp:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 85
    functionName: butil::iobuf::user_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ::pwrite
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_pwritev(int fd, const struct iovec* vector,\n                            int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::iobuf::sys_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_preadv(int fd, const struct iovec *vector, \n                          int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::iobuf::sys_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_pwritev(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:112,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:114,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 126
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:131,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:139,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:141,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 146
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 158
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - dest
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 165
    functionName: butil::iobuf::cp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: void * cp(void *__restrict dest, const void *__restrict src, size_t
      n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/src/butil/iobuf.cpp:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: butil::iobuf::reset_blockmem_allocate_and_deallocate
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::iobuf::remove_tls_block_chain
    linkageType: ''
    returnType: void
    signature: void reset_blockmem_allocate_and_deallocate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    functionName: butil::IOBuf::block_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::block_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 194
    functionName: butil::IOBuf::block_memory
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::block_memory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: butil::IOBuf::new_bigview_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::new_bigview_count()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:233,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:234,1
    - Dst: butil::is_samplable
      Src: /src/brpc/src/butil/iobuf.cpp:236,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - data_in
    - data_size
    argTypes:
    - char*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 2
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::is_samplable
    - butil::SubmitIOBufSample
    - butil::fetch_add
    linkageType: ''
    returnType: void
    signature: void Block(char* data_in, uint32_t data_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_user_data_extension
      Src: /src/brpc/src/butil/iobuf.cpp:249,1
    - Dst: UserDataExtension::UserDataExtension
      Src: /src/brpc/src/butil/iobuf.cpp:249,1
    - Dst: std::move
      Src: /src/brpc/src/butil/iobuf.cpp:250,1
    - Dst: butil::is_samplable
      Src: /src/brpc/src/butil/iobuf.cpp:251,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - data_in
    - data_size
    - deleter
    argTypes:
    - char*
    - uint32_t
    - UserDataDeleter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 241
    functionDepth: 2
    functionLinenumber: 241
    functionLinenumberEnd: 254
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - butil::is_samplable
    - butil::SubmitIOBufSample
    - UserDataExtension::UserDataExtension
    - butil::get_user_data_extension
    linkageType: ''
    returnType: void
    signature: void Block(char* data_in, uint32_t data_size, UserDataDeleter deleter)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 260
    functionName: butil::get_user_data_extension
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: UserDataExtension
    signature: UserDataExtension * get_user_data_extension()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 269
    functionName: butil::check_abi
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void check_abi()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::check_abi
      Src: /src/brpc/src/butil/iobuf.cpp:272,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:273,1
    - Dst: butil::sampled
      Src: /src/brpc/src/butil/iobuf.cpp:274,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 271
    functionDepth: 2
    functionLinenumber: 271
    functionLinenumberEnd: 277
    functionName: butil::inc_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::sampled
    - butil::SubmitIOBufSample
    - butil::fetch_add
    - butil::check_abi
    linkageType: ''
    returnType: void
    signature: void inc_ref()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::check_abi
      Src: /src/brpc/src/butil/iobuf.cpp:280,1
    - Dst: butil::sampled
      Src: /src/brpc/src/butil/iobuf.cpp:281,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:282,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/iobuf.cpp:284,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/butil/iobuf.cpp:285,1
    - Dst: butil::is_user_data
      Src: /src/brpc/src/butil/iobuf.cpp:286,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/iobuf.cpp:287,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/iobuf.cpp:288,1
    - Dst: butil::~Block
      Src: /src/brpc/src/butil/iobuf.cpp:290,1
    - Dst: iobuf::blockmem_deallocate
      Src: /src/brpc/src/butil/iobuf.cpp:291,1
    - Dst: butil::get_user_data_extension
      Src: /src/brpc/src/butil/iobuf.cpp:293,1
    - Dst: auto::deleter
      Src: /src/brpc/src/butil/iobuf.cpp:294,1
    - Dst: auto::~UserDataExtension
      Src: /src/brpc/src/butil/iobuf.cpp:295,1
    - Dst: butil::~Block
      Src: /src/brpc/src/butil/iobuf.cpp:296,1
    - Dst: free
      Src: /src/brpc/src/butil/iobuf.cpp:297,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 279
    functionDepth: 2
    functionLinenumber: 279
    functionLinenumberEnd: 300
    functionName: butil::dec_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::~Block
    - butil::sampled
    - butil::SubmitIOBufSample
    - free
    - auto::~UserDataExtension
    - std::atomic_thread_fence
    - butil::fetch_sub
    - butil::check_abi
    - iobuf::blockmem_deallocate
    - auto::deleter
    - butil::get_user_data_extension
    - butil::is_user_data
    linkageType: ''
    returnType: void
    signature: void dec_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/iobuf.cpp:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 304
    functionName: butil::ref_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::load
    linkageType: ''
    returnType: int
    signature: int ref_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 306
    functionName: butil::full
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool full() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 307
    functionName: butil::left_space
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t left_space() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IsIOBufProfilerSamplable
      Src: /src/brpc/src/butil/iobuf.cpp:311,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 310
    functionDepth: 5
    functionLinenumber: 310
    functionLinenumberEnd: 316
    functionName: butil::is_samplable
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IsIOBufProfilerSamplable
    linkageType: ''
    returnType: bool
    signature: bool is_samplable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 320
    functionName: butil::sampled
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool sampled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    functionName: butil::is_user_data
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::ref_count
      Src: /src/brpc/src/butil/iobuf.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: butil::iobuf::block_shared_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - IOBuf::Block*::ref_count
    linkageType: ''
    returnType: int
    signature: int block_shared_count(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 334
    functionName: butil::iobuf::get_portal_next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_portal_next(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 338
    functionName: butil::iobuf::block_cap
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_cap(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 342
    functionName: butil::iobuf::block_size
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_size(IOBuf::Block const* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:346,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:349,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 355
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block(const size_t block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 359
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - butil::iobuf::create_block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:363,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:366,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/iobuf.cpp:372,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - block_size
    - alignment
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 376
    functionName: butil::iobuf::create_block_aligned
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - reinterpret_cast<uintptr_t>
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block_aligned(size_t block_size, size_t alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsIOBufProfilerEnabled
      Src: /src/brpc/src/butil/iobuf.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 386
    functionName: butil::iobuf::max_blocks_per_thread
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - IsIOBufProfilerEnabled
    linkageType: ''
    returnType: int
    signature: int max_blocks_per_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: butil::iobuf::get_tls_block_head
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_tls_block_head()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: butil::iobuf::get_tls_block_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int get_tls_block_count()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:421,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/iobuf.cpp:425,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 427
    functionName: butil::iobuf::remove_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 10
    functionsReached:
    - CHECK_EQ
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void remove_tls_block_chain()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:434,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:440,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:442,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:449,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:452,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 459
    functionName: butil::iobuf::share_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IOBuf::Block*::full
    - butil::thread_atexit
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * share_tls_block()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:467,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:468,1
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:469,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:470,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:471,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:478,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 462
    functionDepth: 2
    functionLinenumber: 462
    functionLinenumberEnd: 481
    functionName: butil::iobuf::release_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block(IOBuf::Block* b)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:488,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:492,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:495,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:514,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 485
    functionDepth: 2
    functionLinenumber: 485
    functionLinenumberEnd: 516
    functionName: butil::iobuf::release_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - CHECK
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block_chain(IOBuf::Block* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:523,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:525,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:527,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 539
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 539
    functionName: butil::iobuf::acquire_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - IOBuf::Block*::full
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * acquire_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:542,1
    - Dst: IOBuf::BlockRef::BlockRef
      Src: /src/brpc/src/butil/iobuf.cpp:543,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cap
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 544
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - IOBuf::BlockRef::BlockRef
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array(size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 548
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - butil::iobuf::acquire_blockref_array
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - refs
    - cap
    argTypes:
    - IOBuf::BlockRef*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 552
    functionName: butil::iobuf::release_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void release_blockref_array(IOBuf::BlockRef* refs, size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::ref_count
      Src: /src/brpc/src/butil/iobuf.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: butil::iobuf::block_shared_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - IOBuf::Block*::ref_count
    linkageType: ''
    returnType: int
    signature: int block_shared_count(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 334
    functionName: butil::iobuf::get_portal_next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_portal_next(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 338
    functionName: butil::iobuf::block_cap
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_cap(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 342
    functionName: butil::iobuf::block_size
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_size(IOBuf::Block const* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:346,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:349,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 355
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 3
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block(const size_t block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 359
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::iobuf::create_block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:363,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:366,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/iobuf.cpp:372,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - block_size
    - alignment
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 376
    functionName: butil::iobuf::create_block_aligned
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - reinterpret_cast<uintptr_t>
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block_aligned(size_t block_size, size_t alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsIOBufProfilerEnabled
      Src: /src/brpc/src/butil/iobuf.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 386
    functionName: butil::iobuf::max_blocks_per_thread
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IsIOBufProfilerEnabled
    linkageType: ''
    returnType: int
    signature: int max_blocks_per_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: butil::iobuf::get_tls_block_head
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_tls_block_head()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: butil::iobuf::get_tls_block_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int get_tls_block_count()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:421,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/iobuf.cpp:425,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 427
    functionName: butil::iobuf::remove_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 10
    functionsReached:
    - CHECK_EQ
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void remove_tls_block_chain()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:434,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:440,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:442,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:449,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:452,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 459
    functionName: butil::iobuf::share_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IOBuf::Block*::full
    - butil::thread_atexit
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * share_tls_block()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:467,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:468,1
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:469,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:470,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:471,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:478,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 462
    functionDepth: 2
    functionLinenumber: 462
    functionLinenumberEnd: 481
    functionName: butil::iobuf::release_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block(IOBuf::Block* b)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:488,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:492,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:495,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:514,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 485
    functionDepth: 2
    functionLinenumber: 485
    functionLinenumberEnd: 516
    functionName: butil::iobuf::release_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - CHECK
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block_chain(IOBuf::Block* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:523,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:525,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:527,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 539
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 539
    functionName: butil::iobuf::acquire_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - IOBuf::Block*::full
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * acquire_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:542,1
    - Dst: IOBuf::BlockRef::BlockRef
      Src: /src/brpc/src/butil/iobuf.cpp:543,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cap
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 544
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - fetch_add
    - IOBuf::BlockRef::BlockRef
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array(size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 548
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::acquire_blockref_array
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - refs
    - cap
    argTypes:
    - IOBuf::BlockRef*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 552
    functionName: butil::iobuf::release_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void release_blockref_array(IOBuf::BlockRef* refs, size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:557,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 558
    functionName: butil::IOBuf::block_count_hit_tls_threshold
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::block_count_hit_tls_threshold()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:569,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:572,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:575,1
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:583,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:583,1
    - Dst: _bv::ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:585,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:586,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 589
    functionName: butil::IOBuf::IOBuf
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 482
    functionsReached:
    - _bv::ref_at
    - block::inc_ref
    - butil::iobuf::acquire_blockref_array
    - butil::IOBuf::_small
    - butil::IOBuf::capacity
    linkageType: ''
    returnType: void
    signature: void IOBuf::IOBuf(const IOBuf& rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf.cpp:595,1
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf.cpp:595,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:599,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:599,1
    - Dst: _bv::ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:606,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:607,1
    - Dst: IOBuf::~IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:610,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:611,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 613
    functionName: IOBuf::operator=(const IOBuf& rhs)
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _bv::ref_at
    - ref_at
    - dec_ref
    - block::inc_ref
    - IOBuf::~IOBuf
    - IOBuf::IOBuf
    - _small
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const IOBuf& rhs)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:621,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:630,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:636,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:644,1
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:649,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:655,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 41
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 663
    functionName: butil::IOBuf::_push_or_move_back_ref_to_smallview
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - block::dec_ref
    - butil::iobuf::acquire_blockref_array
    - block::inc_ref
    linkageType: ''
    returnType: void
    signature: void IOBuf::_push_or_move_back_ref_to_smallview(const BlockRef& r)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:670,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:676,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:681,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:682,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:685,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:690,1
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:691,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:693,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:699,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:699,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:704,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 706
    functionName: butil::IOBuf::_push_or_move_back_ref_to_bigview
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - ref_at
    - block::inc_ref
    - block::dec_ref
    - butil::iobuf::acquire_blockref_array
    - butil::IOBuf::capacity
    - butil::iobuf::release_blockref_array
    linkageType: ''
    returnType: void
    signature: void IOBuf::_push_or_move_back_ref_to_bigview(const BlockRef& r)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:713,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:716,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:719,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:727,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:737,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 741
    functionName: butil::IOBuf::_pop_or_moveout_front_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - block::dec_ref
    - butil::IOBuf::_small
    - butil::iobuf::release_blockref_array
    - reset_block_ref
    linkageType: ''
    returnType: int
    signature: int IOBuf::_pop_or_moveout_front_ref()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:747,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:749,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:750,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:753,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:754,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:762,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:770,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 746
    functionDepth: 1
    functionLinenumber: 746
    functionLinenumberEnd: 774
    functionName: butil::IOBuf::_pop_back_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - block::dec_ref
    - butil::IOBuf::_small
    - butil::iobuf::release_blockref_array
    - reset_block_ref
    linkageType: ''
    returnType: int
    signature: int IOBuf::_pop_back_ref()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:777,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:779,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:780,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:783,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:784,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:789,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:789,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:791,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:791,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:792,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 776
    functionDepth: 1
    functionLinenumber: 776
    functionLinenumberEnd: 794
    functionName: butil::IOBuf::clear
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 43
    functionsReached:
    - ref_at
    - reset_block_ref
    - dec_ref
    - block::dec_ref
    - IOBuf::IOBuf
    - butil::IOBuf::_small
    - butil::iobuf::release_blockref_array
    - butil::IOBuf::capacity
    linkageType: ''
    returnType: void
    signature: void IOBuf::clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:797,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/butil/iobuf.cpp:799,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:804,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:808,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:814,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 796
    functionDepth: 2
    functionLinenumber: 796
    functionLinenumberEnd: 817
    functionName: butil::IOBuf::pop_front
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::IOBuf::length
    - butil::IOBuf::_small
    - _front_ref
    - butil::IOBuf::_pop_front_ref
    - butil::IOBuf::clear
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::pop_front(size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:820,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:823,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:828,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:832,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - c
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 835
      start: 819
    functionDepth: 1
    functionLinenumber: 819
    functionLinenumberEnd: 835
    functionName: butil::IOBuf::cut1
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _front_ref
    - butil::IOBuf::_pop_front_ref
    - butil::IOBuf::empty
    - butil::IOBuf::_small
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::cut1(void* c)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:838,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/butil/iobuf.cpp:840,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:845,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:848,1
    - Dst: butil::IOBuf::_pop_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:854,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 857
      start: 837
    functionDepth: 2
    functionLinenumber: 837
    functionLinenumberEnd: 857
    functionName: butil::IOBuf::pop_back
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::IOBuf::length
    - butil::IOBuf::_pop_back_ref
    - butil::IOBuf::_small
    - _back_ref
    - butil::IOBuf::clear
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::pop_back(size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:860,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:866,1
    - Dst: IOBuf*::_move_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:869,1
    - Dst: butil::IOBuf::_moveout_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:870,1
    - Dst: IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:873,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:877,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 884
      start: 859
    functionDepth: 2
    functionLinenumber: 859
    functionLinenumberEnd: 884
    functionName: butil::IOBuf::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 18
    functionsReached:
    - butil::IOBuf::length
    - IOBuf*::_push_back_ref
    - IOBuf*::_move_back_ref
    - butil::IOBuf::_small
    - _front_ref
    - butil::IOBuf::_moveout_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::cutn(IOBuf* out, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:887,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:893,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:895,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:898,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:900,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:904,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 911
      start: 886
    functionDepth: 2
    functionLinenumber: 886
    functionLinenumberEnd: 911
    functionName: butil::IOBuf::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 18
    functionsReached:
    - butil::iobuf::cp
    - butil::IOBuf::length
    - butil::IOBuf::_small
    - _front_ref
    - butil::IOBuf::_pop_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::cutn(void* out, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:917,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf.cpp:921,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf.cpp:922,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf.cpp:922,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 913
    functionDepth: 2
    functionLinenumber: 913
    functionLinenumberEnd: 924
    functionName: butil::IOBuf::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 19
    functionsReached:
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::cutn(std::string* out, size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:927,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:931,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:936,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:937,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - out
    - d
    argTypes:
    - IOBuf*
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 926
    functionDepth: 3
    functionLinenumber: 926
    functionLinenumberEnd: 944
    functionName: butil::IOBuf::_cut_by_char
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf::pop_front
    - butil::IOBuf::_ref_num
    - butil::IOBuf::cutn
    - _ref_at
    linkageType: ''
    returnType: int
    signature: int IOBuf::_cut_by_char(IOBuf* out, char d)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:950,1
    - Dst: static_cast<SigType>
      Src: /src/brpc/src/butil/iobuf.cpp:956,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:962,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:967,1
    - Dst: static_cast<SigType>
      Src: /src/brpc/src/butil/iobuf.cpp:971,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:974,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:975,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 3
    argNames:
    - out
    - dbegin
    - ndelim
    argTypes:
    - IOBuf*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 946
    functionDepth: 3
    functionLinenumber: 946
    functionLinenumberEnd: 982
    functionName: butil::IOBuf::_cut_by_delim
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - static_cast<SigType>
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - butil::IOBuf::pop_front
    - _ref_at
    linkageType: ''
    returnType: int
    signature: int IOBuf::_cut_by_delim(IOBuf* out, char const* dbegin, size_t ndelim)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:989,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:993,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:993,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:999,1
    - Dst: butil::iobuf::get_pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1009,1
    - Dst: pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1010,1
    - Dst: butil::iobuf::user_pwritev
      Src: /src/brpc/src/butil/iobuf.cpp:1012,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1015,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - fd
    - offset
    - size_hint
    argTypes:
    - int
    - off_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 988
    functionDepth: 3
    functionLinenumber: 988
    functionLinenumberEnd: 1018
    functionName: butil::IOBuf::pcut_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - pwritev_func
    - _ref_at
    - butil::IOBuf::pop_front
    - butil::IOBuf::empty
    - butil::iobuf::user_pwritev
    - butil::iobuf::get_pwritev_func
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::pcut_into_file_descriptor(int fd, off_t offset, size_t
      size_hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1021,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1024,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1024,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1030,1
    - Dst: IWriter*::WriteV
      Src: /src/brpc/src/butil/iobuf.cpp:1037,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1039,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - writer
    - size_hint
    argTypes:
    - IWriter*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 1020
    functionDepth: 3
    functionLinenumber: 1020
    functionLinenumberEnd: 1042
    functionName: butil::IOBuf::cut_into_writer
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - IWriter*::WriteV
    - butil::IOBuf::pop_front
    - butil::IOBuf::empty
    - _ref_at
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::cut_into_writer(IWriter* writer, size_t size_hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1046,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1050,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/butil/iobuf.cpp:1051,1
    - Dst: SSL_write
      Src: /src/brpc/src/butil/iobuf.cpp:1052,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1054,1
    - Dst: SSL_get_error
      Src: /src/brpc/src/butil/iobuf.cpp:1056,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ssl
    - ssl_error
    argTypes:
    - SSL*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1044
    functionDepth: 3
    functionLinenumber: 1044
    functionLinenumberEnd: 1058
    functionName: butil::IOBuf::cut_into_SSL_channel
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ERR_clear_error
    - SSL_get_error
    - butil::IOBuf::pop_front
    - SSL_write
    - butil::IOBuf::empty
    - _ref_at
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::cut_into_SSL_channel(SSL* ssl, int* ssl_error)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1065,1
    - Dst: butil::IOBuf::cut_into_SSL_channel
      Src: /src/brpc/src/butil/iobuf.cpp:1070,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/butil/iobuf.cpp:1077,1
    - Dst: SSL_get_wbio
      Src: /src/brpc/src/butil/iobuf.cpp:1094,1
    - Dst: BIO_wpending
      Src: /src/brpc/src/butil/iobuf.cpp:1095,1
    - Dst: BIO_flush
      Src: /src/brpc/src/butil/iobuf.cpp:1096,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/butil/iobuf.cpp:1097,1
    - Dst: SSL_flush
      Src: /src/brpc/src/butil/iobuf.cpp:1104,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 4
    argNames:
    - ssl
    - pieces
    - count
    - ssl_error
    argTypes:
    - SSL*
    - IOBuf**
    - size_t
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1060
    functionDepth: 4
    functionLinenumber: 1060
    functionLinenumberEnd: 1112
    functionName: butil::IOBuf::cut_multiple_into_SSL_channel
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BIO_flush
    - SSL_flush
    - BIO_wpending
    - SSL_get_wbio
    - BIO_fd_non_fatal_error
    - butil::IOBuf::empty
    - butil::IOBuf::cut_into_SSL_channel
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::cut_multiple_into_SSL_channel(SSL* ssl, IOBuf* const*
      pieces,\n                                             size_t count, int* ssl_error)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1116,1
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf.cpp:1120,1
    - Dst: IOBuf*::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1126,1
    - Dst: IOBuf*::_ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1128,1
    - Dst: butil::iobuf::get_pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1136,1
    - Dst: pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1137,1
    - Dst: butil::iobuf::user_pwritev
      Src: /src/brpc/src/butil/iobuf.cpp:1139,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1146,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 4
    argNames:
    - fd
    - offset
    - pieces
    - count
    argTypes:
    - int
    - off_t
    - IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1114
    functionDepth: 4
    functionLinenumber: 1114
    functionLinenumberEnd: 1152
    functionName: butil::IOBuf::pcut_multiple_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IOBuf*::_ref_num
    - butil::IOBuf::pcut_into_file_descriptor
    - pwritev_func
    - butil::IOBuf::pop_front
    - IOBuf*::_ref_at
    - BAIDU_UNLIKELY
    - butil::iobuf::user_pwritev
    - butil::iobuf::get_pwritev_func
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::pcut_multiple_into_file_descriptor(\n    int fd, off_t
      offset, IOBuf* const* pieces, size_t count)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1156,1
    - Dst: butil::IOBuf::cut_into_writer
      Src: /src/brpc/src/butil/iobuf.cpp:1160,1
    - Dst: IOBuf*::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1166,1
    - Dst: IOBuf*::_ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1168,1
    - Dst: IWriter*::WriteV
      Src: /src/brpc/src/butil/iobuf.cpp:1174,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1180,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 3
    argNames:
    - writer
    - pieces
    - count
    argTypes:
    - IWriter*
    - IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1186
      start: 1154
    functionDepth: 4
    functionLinenumber: 1154
    functionLinenumberEnd: 1186
    functionName: butil::IOBuf::cut_multiple_into_writer
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - IOBuf*::_ref_num
    - IWriter*::WriteV
    - butil::IOBuf::pop_front
    - IOBuf*::_ref_at
    - BAIDU_UNLIKELY
    - butil::IOBuf::cut_into_writer
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::cut_multiple_into_writer(\n        IWriter* writer,
      IOBuf* const* pieces, size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1190,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1192,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1194
      start: 1189
    functionDepth: 2
    functionLinenumber: 1189
    functionLinenumberEnd: 1194
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 185
    functionsReached:
    - butil::IOBuf::_ref_num
    - butil::IOBuf::_push_back_ref
    - _ref_at
    linkageType: ''
    returnType: void
    signature: void IOBuf::append(const IOBuf& other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1197,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/butil/iobuf.cpp:1198,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf.cpp:1198,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf.cpp:1200,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1201,1
    - Dst: butil::IOBuf::_move_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1203,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1203,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:1205,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:1206,1
    - Dst: _bv::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:1206,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:1208,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' movable_other'
    argTypes:
    - Movable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1210
      start: 1196
    functionDepth: 2
    functionLinenumber: 1196
    functionLinenumberEnd: 1210
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 185
    functionsReached:
    - _bv::capacity
    - value
    - butil::IOBuf::_ref_num
    - IOBuf::IOBuf
    - butil::IOBuf::_small
    - butil::IOBuf::_move_back_ref
    - butil::iobuf::release_blockref_array
    - butil::IOBuf::swap
    - butil::IOBuf::empty
    - _ref_at
    linkageType: ''
    returnType: void
    signature: void IOBuf::append(const Movable& movable_other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1213,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1214,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1222
      start: 1212
    functionDepth: 3
    functionLinenumber: 1212
    functionLinenumberEnd: 1222
    functionName: butil::IOBuf::push_back
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 27
    functionsReached:
    - BAIDU_UNLIKELY
    - butil::iobuf::share_tls_block
    - butil::IOBuf::_push_back_ref
    linkageType: ''
    returnType: int
    signature: int IOBuf::push_back(char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1225,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/butil/iobuf.cpp:1226,1
    - Dst: strlen
      Src: /src/brpc/src/butil/iobuf.cpp:1226,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1229
      start: 1224
    functionDepth: 1
    functionLinenumber: 1224
    functionLinenumberEnd: 1229
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 186
    functionsReached:
    - butil::IOBuf::append
    - BAIDU_LIKELY
    - strlen
    linkageType: ''
    returnType: int
    signature: int IOBuf::append(char const* s)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1232,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/butil/iobuf.cpp:1236,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1240,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1241,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1244,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1244,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1245,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1248,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - data
    - count
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1253
      start: 1231
    functionDepth: 4
    functionLinenumber: 1231
    functionLinenumberEnd: 1253
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 186
    functionsReached:
    - butil::IOBuf::_push_back_ref
    - std::min
    - butil::iobuf::cp
    - IOBuf::Block*::left_space
    - butil::iobuf::share_tls_block
    - butil::IOBuf::push_back
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int IOBuf::append(void const* data, size_t count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1258,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1259,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1265,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1265,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1266,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1276,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - vec
    - n
    argTypes:
    - const_iovec*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1255
    functionDepth: 3
    functionLinenumber: 1255
    functionLinenumberEnd: 1279
    functionName: butil::IOBuf::appendv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_push_back_ref
    - std::min
    - butil::iobuf::cp
    - IOBuf::Block*::left_space
    - butil::iobuf::share_tls_block
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int IOBuf::appendv(const const_iovec* vec, size_t n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1286,1
    - Dst: deleter
      Src: /src/brpc/src/butil/iobuf.cpp:1293,1
    - Dst: malloc
      Src: /src/brpc/src/butil/iobuf.cpp:1296,1
    - Dst: std::move
      Src: /src/brpc/src/butil/iobuf.cpp:1300,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:1300,1
    - Dst: butil::IOBuf::_move_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1303,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 4
    argNames:
    - data
    - size
    - deleter
    - meta
    argTypes:
    - void*
    - size_t
    - std::function<void(void*)>
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1281
    functionDepth: 2
    functionLinenumber: 1281
    functionLinenumberEnd: 1305
    functionName: butil::IOBuf::append_user_data_with_meta
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - std::move
    - malloc
    - butil::IOBuf::_move_back_ref
    - deleter
    - IOBuf::Block::Block
    - LOG
    linkageType: ''
    returnType: int
    signature: "int IOBuf::append_user_data_with_meta(void* data,\n                                      size_t
      size,\n                                      std::function<void(void*)> deleter,\n
      \                                     uint64_t meta)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1308,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1311,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1316
      start: 1307
    functionDepth: 2
    functionLinenumber: 1307
    functionLinenumberEnd: 1316
    functionName: butil::IOBuf::get_first_data_meta
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_ref_num
    - _ref_at
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t IOBuf::get_first_data_meta()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1319,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/butil/iobuf.cpp:1321,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1327,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1328,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1331,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1331,1
    - Dst: memset
      Src: /src/brpc/src/butil/iobuf.cpp:1332,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1335,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - n
    - c
    argTypes:
    - size_t
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1340
      start: 1318
    functionDepth: 3
    functionLinenumber: 1318
    functionLinenumberEnd: 1340
    functionName: butil::IOBuf::resize
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 13
    functionsReached:
    - butil::IOBuf::_push_back_ref
    - std::min
    - butil::IOBuf::length
    - IOBuf::Block*::left_space
    - memset
    - butil::IOBuf::pop_back
    - butil::iobuf::share_tls_block
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int IOBuf::resize(size_t n, char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1355,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ref_index
    - ref_offset
    - size
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1361
      start: 1350
    functionDepth: 1
    functionLinenumber: 1350
    functionLinenumberEnd: 1361
    functionName: butil::make_area
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: IOBuf::Area
    signature: "IOBuf::Area make_area(uint32_t ref_index, uint32_t ref_offset,\n                             uint32_t
      size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - IOBuf::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1364
      start: 1362
    functionDepth: 0
    functionLinenumber: 1362
    functionLinenumberEnd: 1364
    functionName: butil::get_area_ref_index
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_area_ref_index(IOBuf::Area c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - IOBuf::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1367
      start: 1365
    functionDepth: 0
    functionLinenumber: 1365
    functionLinenumberEnd: 1367
    functionName: butil::get_area_ref_offset
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_area_ref_offset(IOBuf::Area c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - IOBuf::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1370
      start: 1368
    functionDepth: 0
    functionLinenumber: 1368
    functionLinenumberEnd: 1370
    functionName: butil::get_area_size
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_area_size(IOBuf::Area c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1376,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1377,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1380,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1380,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1382,1
    - Dst: make_area
      Src: /src/brpc/src/butil/iobuf.cpp:1386,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1386,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1386,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1392
      start: 1372
    functionDepth: 3
    functionLinenumber: 1372
    functionLinenumberEnd: 1392
    functionName: butil::IOBuf::reserve
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - make_area
    - butil::IOBuf::_push_back_ref
    - butil::IOBuf::_ref_num
    - std::min
    - IOBuf::Block*::left_space
    - butil::iobuf::share_tls_block
    - BAIDU_UNLIKELY
    - _back_ref
    linkageType: ''
    returnType: IOBuf::Area
    signature: IOBuf::Area IOBuf::reserve(size_t count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1396,1
    - Dst: get_area_ref_index
      Src: /src/brpc/src/butil/iobuf.cpp:1399,1
    - Dst: get_area_ref_offset
      Src: /src/brpc/src/butil/iobuf.cpp:1400,1
    - Dst: get_area_size
      Src: /src/brpc/src/butil/iobuf.cpp:1401,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1402,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1404,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1409,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1410,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:1420,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1420,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1420,1
    - Dst: get_area_ref_index
      Src: /src/brpc/src/butil/iobuf.cpp:1422,1
    - Dst: get_area_ref_offset
      Src: /src/brpc/src/butil/iobuf.cpp:1423,1
    - Dst: get_area_size
      Src: /src/brpc/src/butil/iobuf.cpp:1424,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - area
    - data
    argTypes:
    - Area
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1427
      start: 1394
    functionDepth: 2
    functionLinenumber: 1394
    functionLinenumberEnd: 1427
    functionName: butil::IOBuf::unsafe_assign
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - get_area_size
    - get_area_ref_offset
    - butil::iobuf::cp
    - butil::IOBuf::size
    - CHECK
    - get_area_ref_index
    - LOG
    - _ref_at
    linkageType: ''
    returnType: int
    signature: int IOBuf::unsafe_assign(Area area, const void* data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1430,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1435,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1443,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1444,1
    - Dst: IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1447,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 3
    argNames:
    - buf
    - n
    - pos
    argTypes:
    - IOBuf*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1453
      start: 1429
    functionDepth: 2
    functionLinenumber: 1429
    functionLinenumberEnd: 1453
    functionName: butil::IOBuf::append_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IOBuf*::_push_back_ref
    - butil::IOBuf::_ref_num
    - std::min
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::append_to(IOBuf* buf, size_t n, size_t pos) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1456,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1461,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1469,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1470,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1471,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 3
    argNames:
    - d
    - n
    - pos
    argTypes:
    - void*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1478
      start: 1455
    functionDepth: 2
    functionLinenumber: 1455
    functionLinenumberEnd: 1478
    functionName: butil::IOBuf::copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 12
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - butil::iobuf::cp
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::copy_to(void* d, size_t n, size_t pos) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1481,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf.cpp:1488,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf.cpp:1489,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - s
    - n
    - pos
    argTypes:
    - std::string*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1490
      start: 1480
    functionDepth: 2
    functionLinenumber: 1480
    functionLinenumberEnd: 1490
    functionName: butil::IOBuf::copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 13
    functionsReached:
    - butil::IOBuf::copy_to
    - std::string*::resize
    - butil::IOBuf::length
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::copy_to(std::string* s, size_t n, size_t pos) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1493,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf.cpp:1500,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf.cpp:1501,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf.cpp:1502,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - s
    - n
    - pos
    argTypes:
    - std::string*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1503
      start: 1492
    functionDepth: 3
    functionLinenumber: 1492
    functionLinenumberEnd: 1503
    functionName: butil::IOBuf::append_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::length
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::append_to(std::string* s, size_t n, size_t pos) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf.cpp:1507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - s
    - n
    - pos
    argTypes:
    - char*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1510
      start: 1506
    functionDepth: 3
    functionLinenumber: 1506
    functionLinenumberEnd: 1510
    functionName: butil::IOBuf::copy_to_cstr
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::copy_to_cstr(char* s, size_t n, size_t pos) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1513,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1514,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1519,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1521,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1523,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1525,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1529,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - d
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1512
    functionDepth: 2
    functionLinenumber: 1512
    functionLinenumberEnd: 1534
    functionName: butil::IOBuf::fetch
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::cp
    - butil::IOBuf::length
    - _ref_at
    - butil::IOBuf::_ref_num
    linkageType: ''
    returnType: void
    signature: void * IOBuf::fetch(void* d, size_t n) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1537,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1538,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1542
      start: 1536
    functionDepth: 0
    functionLinenumber: 1536
    functionLinenumberEnd: 1542
    functionName: butil::IOBuf::fetch1
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _front_ref
    - butil::IOBuf::empty
    linkageType: ''
    returnType: void
    signature: void * IOBuf::fetch1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: backing_block_num
      Src: /src/brpc/src/butil/iobuf.cpp:1545,1
    - Dst: backing_block
      Src: /src/brpc/src/butil/iobuf.cpp:1547,1
    - Dst: write
      Src: /src/brpc/src/butil/iobuf.cpp:1548,1
    - Dst: StringPiece::data
      Src: /src/brpc/src/butil/iobuf.cpp:1548,1
    - Dst: StringPiece::size
      Src: /src/brpc/src/butil/iobuf.cpp:1548,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' buf'
    argTypes:
    - std::ostream
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1551
      start: 1544
    functionDepth: 1
    functionLinenumber: 1544
    functionLinenumberEnd: 1551
    functionName: '& operator<<(std::ostream& os, const IOBuf& buf)'
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - backing_block
    - backing_block_num
    - StringPiece::size
    - StringPiece::data
    - write
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const IOBuf& buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1554,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1554,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1557,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1560,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf.cpp:1561,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf.cpp:1561,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1553
    functionDepth: 2
    functionLinenumber: 1553
    functionLinenumberEnd: 1567
    functionName: butil::IOBuf::equals
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - data
    - _ref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::equals(const butil::StringPiece& s) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1570,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1571,1
    - Dst: StringPiece
      Src: /src/brpc/src/butil/iobuf.cpp:1572,1
    - Dst: StringPiece
      Src: /src/brpc/src/butil/iobuf.cpp:1574,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1575
      start: 1569
    functionDepth: 2
    functionLinenumber: 1569
    functionLinenumberEnd: 1575
    functionName: butil::IOBuf::backing_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 12
    functionsReached:
    - butil::IOBuf::_ref_num
    - _ref_at
    - StringPiece
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece IOBuf::backing_block(size_t i) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1578,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1579,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1585,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1588,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1591,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1592,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1596,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf.cpp:1597,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1605,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1616,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1577
    functionDepth: 2
    functionLinenumber: 1577
    functionLinenumberEnd: 1624
    functionName: butil::IOBuf::equals
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - butil::IOBuf::_ref_num
    - std::min
    - butil::IOBuf::size
    - _ref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::equals(const butil::IOBuf& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1627
      start: 1627
    functionDepth: 0
    functionLinenumber: 1627
    functionLinenumberEnd: 1627
    functionName: IOPortal::~IOPortal()
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - return_cached_blocks
    linkageType: ''
    returnType: void
    signature: void IOPortal::~IOPortal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::operator=
      Src: /src/brpc/src/butil/iobuf.cpp:1630,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOPortal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1632
      start: 1629
    functionDepth: 0
    functionLinenumber: 1629
    functionLinenumberEnd: 1632
    functionName: '& IOPortal::operator=(const IOPortal& rhs)'
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - IOBuf::operator=
    linkageType: ''
    returnType: IOPortal
    signature: IOPortal & IOPortal::operator=(const IOPortal& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/butil/iobuf.cpp:1635,1
    - Dst: butil::IOPortal::return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1637
      start: 1634
    functionDepth: 2
    functionLinenumber: 1634
    functionLinenumberEnd: 1637
    functionName: butil::IOPortal::clear
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::return_cached_blocks
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void IOPortal::clear()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1651,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1652,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1663,1
    - Dst: Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1663,1
    - Dst: readv
      Src: /src/brpc/src/butil/iobuf.cpp:1675,1
    - Dst: butil::iobuf::get_preadv_func
      Src: /src/brpc/src/butil/iobuf.cpp:1677,1
    - Dst: preadv_func
      Src: /src/brpc/src/butil/iobuf.cpp:1678,1
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf.cpp:1681,1
    - Dst: butil::IOPortal::return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1682,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1689,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1689,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1692,1
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:1694,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1696,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 3
    argNames:
    - fd
    - offset
    - max_count
    argTypes:
    - int
    - off_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1701
      start: 1641
    functionDepth: 3
    functionLinenumber: 1641
    functionLinenumberEnd: 1701
    functionName: butil::IOPortal::pappend_from_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - dec_ref
    - left_space
    - std::min
    - Block*::left_space
    - butil::iobuf::get_preadv_func
    - butil::iobuf::acquire_tls_block
    - butil::IOPortal::return_cached_blocks
    - empty
    - preadv_func
    - readv
    - BAIDU_UNLIKELY
    - full
    - _push_back_ref
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOPortal::pappend_from_file_descriptor(\n    int fd, off_t
      offset, size_t max_count)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1712,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1713,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1724,1
    - Dst: Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1724,1
    - Dst: IReader*::ReadV
      Src: /src/brpc/src/butil/iobuf.cpp:1734,1
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf.cpp:1736,1
    - Dst: butil::IOPortal::return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1737,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1744,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1744,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1747,1
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:1749,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1751,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 2
    argNames:
    - reader
    - max_count
    argTypes:
    - IReader*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1756
      start: 1703
    functionDepth: 3
    functionLinenumber: 1703
    functionLinenumberEnd: 1756
    functionName: butil::IOPortal::append_from_reader
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - dec_ref
    - left_space
    - std::min
    - Block*::left_space
    - butil::iobuf::acquire_tls_block
    - butil::IOPortal::return_cached_blocks
    - empty
    - BAIDU_UNLIKELY
    - full
    - IReader*::ReadV
    - _push_back_ref
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOPortal::append_from_reader(IReader* reader, size_t max_count)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1764,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1765,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1772,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1772,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/butil/iobuf.cpp:1773,1
    - Dst: SSL_read
      Src: /src/brpc/src/butil/iobuf.cpp:1774,1
    - Dst: SSL_get_error
      Src: /src/brpc/src/butil/iobuf.cpp:1775,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1778,1
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:1780,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1782,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/butil/iobuf.cpp:1790,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 3
    argNames:
    - ssl
    - ssl_error
    - max_count
    argTypes:
    - SSL*
    - int*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1802
      start: 1759
    functionDepth: 3
    functionLinenumber: 1759
    functionLinenumberEnd: 1802
    functionName: butil::IOPortal::append_from_SSL_channel
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - dec_ref
    - left_space
    - std::min
    - ERR_clear_error
    - _push_back_ref
    - butil::iobuf::acquire_tls_block
    - SSL_get_error
    - BIO_fd_non_fatal_error
    - BAIDU_UNLIKELY
    - full
    - SSL_read
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOPortal::append_from_SSL_channel(\n    SSL* ssl, int* ssl_error,
      size_t max_count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/src/butil/iobuf.cpp:1805,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1806
      start: 1804
    functionDepth: 3
    functionLinenumber: 1804
    functionLinenumberEnd: 1806
    functionName: butil::IOPortal::return_cached_blocks_impl
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::release_tls_block_chain
    linkageType: ''
    returnType: void
    signature: void IOPortal::return_cached_blocks_impl(Block* b)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1811,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1817,1
    - Dst: std::max
      Src: /src/brpc/src/butil/iobuf.cpp:1824,1
    - Dst: butil::iobuf::create_block_aligned
      Src: /src/brpc/src/butil/iobuf.cpp:1828,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1829,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1830,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1833,1
    - Dst: auto::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1833,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1835,1
    - Dst: auto::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1837,1
    - Dst: make_area
      Src: /src/brpc/src/butil/iobuf.cpp:1841,1
    - Dst: _ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1841,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1841,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1848
      start: 1808
    functionDepth: 2
    functionLinenumber: 1808
    functionLinenumberEnd: 1848
    functionName: butil::IOReserveAlignedBuf::reserve
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - make_area
    - std::max
    - butil::iobuf::create_block_aligned
    - std::min
    - _ref_num
    - auto::dec_ref
    - BAIDU_UNLIKELY
    - _back_ref
    - auto::left_space
    - LOG
    - _push_back_ref
    linkageType: ''
    returnType: IOBuf::Area
    signature: IOBuf::Area IOReserveAlignedBuf::reserve(size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1857
      start: 1852
    functionDepth: 0
    functionLinenumber: 1852
    functionLinenumberEnd: 1857
    functionName: butil::IOBufCutter::IOBufCutter
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufCutter::IOBufCutter(butil::IOBuf* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1862,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/iobuf.cpp:1863,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1867,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1870
      start: 1859
    functionDepth: 0
    functionLinenumber: 1859
    functionLinenumberEnd: 1870
    functionName: IOBufCutter::~IOBufCutter()
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _front_ref
    - CHECK_EQ
    - _pop_front_ref
    linkageType: ''
    returnType: void
    signature: void IOBufCutter::~IOBufCutter()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1873,1
    - Dst: _ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1875,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1881,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1887
      start: 1871
    functionDepth: 0
    functionLinenumber: 1871
    functionLinenumberEnd: 1887
    functionName: butil::IOBufCutter::load_next_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - _front_ref
    - _ref_num
    - _pop_front_ref
    linkageType: ''
    returnType: bool
    signature: bool IOBufCutter::load_next_ref()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1892,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1897,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1902,1
    - Dst: _ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1905,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1907,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1908,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1909,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - dst
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1917
      start: 1889
    functionDepth: 1
    functionLinenumber: 1889
    functionLinenumberEnd: 1917
    functionName: butil::IOBufCutter::slower_copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - std::min
    - _ref_num
    - memcpy
    - butil::IOBufCutter::load_next_ref
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::slower_copy_to(void* dst, size_t n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1928,1
    - Dst: butil::IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1935,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1936,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1940,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1946,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1948,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - butil::IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1950
      start: 1919
    functionDepth: 0
    functionLinenumber: 1919
    functionLinenumberEnd: 1950
    functionName: butil::IOBufCutter::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::_push_back_ref
    - butil::IOBufCutter::cutn
    - _pop_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::cutn(butil::IOBuf* out, size_t n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1958,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1962,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1963,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1967,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1973,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1975,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1977
      start: 1952
    functionDepth: 0
    functionLinenumber: 1952
    functionLinenumberEnd: 1977
    functionName: butil::IOBufCutter::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - memcpy
    - butil::IOBufCutter::cutn
    - _pop_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::cutn(void* out, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1984
      start: 1979
    functionDepth: 0
    functionLinenumber: 1979
    functionLinenumberEnd: 1984
    functionName: butil::IOBufAsZeroCopyInputStream::IOBufAsZeroCopyInputStream
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyInputStream::IOBufAsZeroCopyInputStream(const IOBuf&
      buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1987,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - void**
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1998
      start: 1986
    functionDepth: 0
    functionLinenumber: 1986
    functionLinenumberEnd: 1998
    functionName: butil::IOBufAsZeroCopyInputStream::Next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 26
    functionsReached:
    - _pref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBufAsZeroCopyInputStream::Next(const void** data, int* size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2002,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:2003,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2008,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2010
      start: 2000
    functionDepth: 1
    functionLinenumber: 2000
    functionLinenumberEnd: 2010
    functionName: butil::IOBufAsZeroCopyInputStream::BackUp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    - LOG
    - _pref_at
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyInputStream::BackUp(int count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2017,1
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2028,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2016
    functionDepth: 0
    functionLinenumber: 2016
    functionLinenumberEnd: 2031
    functionName: butil::IOBufAsZeroCopyInputStream::Skip
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _pref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBufAsZeroCopyInputStream::Skip(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2035
      start: 2033
    functionDepth: 0
    functionLinenumber: 2033
    functionLinenumberEnd: 2035
    functionName: butil::IOBufAsZeroCopyInputStream::ByteCount
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::int64
    signature: google::protobuf::int64 IOBufAsZeroCopyInputStream::ByteCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2039
      start: 2037
    functionDepth: 0
    functionLinenumber: 2037
    functionLinenumberEnd: 2039
    functionName: butil::IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream(IOBuf*
      buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::invalid_argument
      Src: /src/brpc/src/butil/iobuf.cpp:2049,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - block_size
    argTypes:
    - IOBuf*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2051
      start: 2041
    functionDepth: 0
    functionLinenumber: 2041
    functionLinenumberEnd: 2051
    functionName: butil::IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - std::invalid_argument
    linkageType: ''
    returnType: void
    signature: "void IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream(\n    IOBuf
      *buf, uint32_t block_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _release_block
      Src: /src/brpc/src/butil/iobuf.cpp:2054,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2055
      start: 2053
    functionDepth: 0
    functionLinenumber: 2053
    functionLinenumberEnd: 2055
    functionName: IOBufAsZeroCopyOutputStream::~IOBufAsZeroCopyOutputStream()
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _release_block
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::~IOBufAsZeroCopyOutputStream()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:2058,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::_release_block
      Src: /src/brpc/src/butil/iobuf.cpp:2059,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:2061,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:2063,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:2070,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2075,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - void**
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2078
      start: 2057
    functionDepth: 3
    functionLinenumber: 2057
    functionLinenumberEnd: 2078
    functionName: butil::IOBufAsZeroCopyOutputStream::Next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 14
    functionsReached:
    - butil::iobuf::create_block
    - left_space
    - butil::IOBufAsZeroCopyOutputStream::_release_block
    - butil::iobuf::acquire_tls_block
    - full
    - _push_back_ref
    linkageType: ''
    returnType: bool
    signature: bool IOBufAsZeroCopyOutputStream::Next(void** data, int* size)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf.cpp:2081,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2082,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2087,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2092,1
    - Dst: block::ref_count
      Src: /src/brpc/src/butil/iobuf.cpp:2101,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2105,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/iobuf.cpp:2114,1
    - Dst: inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2120,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:2122,1
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf.cpp:2124,1
    - Dst: butil::iobuf::release_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:2137,1
    - Dst: _pop_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2145,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::_release_block
      Src: /src/brpc/src/butil/iobuf.cpp:2146,1
    - Dst: LOG_IF
      Src: /src/brpc/src/butil/iobuf.cpp:2151,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 48
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2152
      start: 2080
    functionDepth: 3
    functionLinenumber: 2080
    functionLinenumberEnd: 2152
    functionName: butil::IOBufAsZeroCopyOutputStream::BackUp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - BAIDU_LIKELY
    - _pop_back_ref
    - pop_back
    - butil::IOBufAsZeroCopyOutputStream::_release_block
    - block::ref_count
    - LOG_IF
    - empty
    - inc_ref
    - _back_ref
    - LOG
    - _small
    - butil::iobuf::release_tls_block
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::BackUp(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2156
      start: 2154
    functionDepth: 0
    functionLinenumber: 2154
    functionLinenumberEnd: 2156
    functionName: butil::IOBufAsZeroCopyOutputStream::ByteCount
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::int64
    signature: google::protobuf::int64 IOBufAsZeroCopyOutputStream::ByteCount() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2161,1
    - Dst: butil::iobuf::release_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:2164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2167
      start: 2158
    functionDepth: 3
    functionLinenumber: 2158
    functionLinenumberEnd: 2167
    functionName: butil::IOBufAsZeroCopyOutputStream::_release_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - dec_ref
    - butil::iobuf::release_tls_block
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::_release_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2171
      start: 2169
    functionDepth: 0
    functionLinenumber: 2169
    functionLinenumberEnd: 2171
    functionName: butil::IOBufAsSnappySink::IOBufAsSnappySink
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySink::IOBufAsSnappySink(butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:2175,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/iobuf.cpp:2175,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf.cpp:2177,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf.cpp:2180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - bytes
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2182
      start: 2173
    functionDepth: 1
    functionLinenumber: 2173
    functionLinenumberEnd: 2182
    functionName: butil::IOBufAsSnappySink::Append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - CHECK
    - append
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySink::Append(const char* bytes, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/butil/iobuf.cpp:2187,1
    - Dst: reinterpret_cast<void**>
      Src: /src/brpc/src/butil/iobuf.cpp:2187,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/iobuf.cpp:2188,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf.cpp:2191,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - length
    - scratch
    argTypes:
    - size_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2200
      start: 2184
    functionDepth: 1
    functionLinenumber: 2184
    functionLinenumberEnd: 2200
    functionName: butil::IOBufAsSnappySink::GetAppendBuffer
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - Next
    - static_cast<int>
    - LOG
    - reinterpret_cast<void**>
    linkageType: ''
    returnType: char
    signature: char * IOBufAsSnappySink::GetAppendBuffer(size_t length, char* scratch)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/src/butil/iobuf.cpp:2203,1
    - Dst: ByteCount
      Src: /src/brpc/src/butil/iobuf.cpp:2203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2204
      start: 2202
    functionDepth: 0
    functionLinenumber: 2202
    functionLinenumberEnd: 2204
    functionName: butil::IOBufAsSnappySource::Available
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - length
    - ByteCount
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufAsSnappySource::Available() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsSnappySource::Skip
      Src: /src/brpc/src/butil/iobuf.cpp:2207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2208
      start: 2206
    functionDepth: 1
    functionLinenumber: 2206
    functionLinenumberEnd: 2208
    functionName: butil::IOBufAsSnappySource::Skip
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufAsSnappySource::Skip
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySource::Skip(size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/butil/iobuf.cpp:2213,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf.cpp:2216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2222
      start: 2210
    functionDepth: 0
    functionLinenumber: 2210
    functionLinenumberEnd: 2222
    functionName: butil::IOBufAsSnappySource::Peek
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - Next
    linkageType: ''
    returnType: char
    signature: char * IOBufAsSnappySource::Peek(size_t* len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2228
      start: 2224
    functionDepth: 0
    functionLinenumber: 2224
    functionLinenumberEnd: 2228
    functionName: butil::IOBufAppender::IOBufAppender
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 28
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAppender::IOBufAppender()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2233,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:2235,1
    - Dst: butil::IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2238,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf.cpp:2243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - buf
    - n
    argTypes:
    - butil::IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2247
      start: 2230
    functionDepth: 1
    functionLinenumber: 2230
    functionLinenumberEnd: 2247
    functionName: butil::IOBufBytesIterator::append_and_forward
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf*::_push_back_ref
    - std::min
    - butil::IOBufBytesIterator::try_next_block
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::append_and_forward(butil::IOBuf* buf, size_t
      n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf.cpp:2257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - void**
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2259
      start: 2249
    functionDepth: 1
    functionLinenumber: 2249
    functionLinenumberEnd: 2259
    functionName: butil::IOBufBytesIterator::forward_one_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: bool
    signature: bool IOBufBytesIterator::forward_one_block(const void** data, size_t*
      size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pread
      Src: /src/brpc/src/butil/iobuf.cpp:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 68
    functionName: butil::iobuf::user_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ::pread
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_preadv(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pwrite
      Src: /src/brpc/src/butil/iobuf.cpp:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 85
    functionName: butil::iobuf::user_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - ::pwrite
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_pwritev(int fd, const struct iovec* vector,\n                            int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::iobuf::sys_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_preadv(int fd, const struct iovec *vector, \n                          int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::iobuf::sys_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_pwritev(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:112,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:114,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 126
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:131,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:139,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:141,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 146
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 158
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - dest
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 165
    functionName: butil::iobuf::cp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: void * cp(void *__restrict dest, const void *__restrict src, size_t
      n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/src/butil/iobuf.cpp:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: butil::iobuf::reset_blockmem_allocate_and_deallocate
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::iobuf::remove_tls_block_chain
    linkageType: ''
    returnType: void
    signature: void reset_blockmem_allocate_and_deallocate()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pread
      Src: /src/brpc/src/butil/iobuf.cpp:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 68
    functionName: butil::iobuf::user_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - ::pread
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_preadv(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ::pwrite
      Src: /src/brpc/src/butil/iobuf.cpp:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 85
    functionName: butil::iobuf::user_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - ::pwrite
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t user_pwritev(int fd, const struct iovec* vector,\n                            int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 101
    functionName: butil::iobuf::sys_preadv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_preadv(int fd, const struct iovec *vector, \n                          int
      count, off_t offset)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - fd
    - vector
    - count
    - offset
    argTypes:
    - int
    - struct iovec*
    - int
    - off_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: butil::iobuf::sys_pwritev
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - syscall
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t sys_pwritev(int fd, const struct iovec *vector, \n                           int
      count, off_t offset)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:112,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:114,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 126
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/brpc/src/butil/iobuf.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:131,1
    - Dst: syscall
      Src: /src/brpc/src/butil/iobuf.cpp:139,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/iobuf.cpp:141,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 146
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - open
    - PLOG
    - syscall
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    functionName: butil::iobuf::get_preadv_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_preadv_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 158
    functionName: butil::iobuf::get_pwritev_func
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: iov_function
    signature: iov_function get_pwritev_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - dest
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 165
    functionName: butil::iobuf::cp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: void * cp(void *__restrict dest, const void *__restrict src, size_t
      n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/src/butil/iobuf.cpp:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: butil::iobuf::reset_blockmem_allocate_and_deallocate
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::iobuf::remove_tls_block_chain
    linkageType: ''
    returnType: void
    signature: void reset_blockmem_allocate_and_deallocate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    functionName: butil::IOBuf::block_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::block_count()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 194
    functionName: butil::IOBuf::block_memory
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::block_memory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: butil::IOBuf::new_bigview_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::new_bigview_count()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:233,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:234,1
    - Dst: butil::is_samplable
      Src: /src/brpc/src/butil/iobuf.cpp:236,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - data_in
    - data_size
    argTypes:
    - char*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 6
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::is_samplable
    - butil::SubmitIOBufSample
    - butil::fetch_add
    linkageType: ''
    returnType: void
    signature: void Block(char* data_in, uint32_t data_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_user_data_extension
      Src: /src/brpc/src/butil/iobuf.cpp:249,1
    - Dst: UserDataExtension::UserDataExtension
      Src: /src/brpc/src/butil/iobuf.cpp:249,1
    - Dst: std::move
      Src: /src/brpc/src/butil/iobuf.cpp:250,1
    - Dst: butil::is_samplable
      Src: /src/brpc/src/butil/iobuf.cpp:251,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:252,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - data_in
    - data_size
    - deleter
    argTypes:
    - char*
    - uint32_t
    - UserDataDeleter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 241
    functionDepth: 6
    functionLinenumber: 241
    functionLinenumberEnd: 254
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - butil::is_samplable
    - butil::SubmitIOBufSample
    - UserDataExtension::UserDataExtension
    - butil::get_user_data_extension
    linkageType: ''
    returnType: void
    signature: void Block(char* data_in, uint32_t data_size, UserDataDeleter deleter)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 260
    functionName: butil::get_user_data_extension
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: UserDataExtension
    signature: UserDataExtension * get_user_data_extension()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 269
    functionName: butil::check_abi
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void check_abi()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::check_abi
      Src: /src/brpc/src/butil/iobuf.cpp:272,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:273,1
    - Dst: butil::sampled
      Src: /src/brpc/src/butil/iobuf.cpp:274,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 271
    functionDepth: 2
    functionLinenumber: 271
    functionLinenumberEnd: 277
    functionName: butil::inc_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::sampled
    - butil::SubmitIOBufSample
    - butil::fetch_add
    - butil::check_abi
    linkageType: ''
    returnType: void
    signature: void inc_ref()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::check_abi
      Src: /src/brpc/src/butil/iobuf.cpp:280,1
    - Dst: butil::sampled
      Src: /src/brpc/src/butil/iobuf.cpp:281,1
    - Dst: butil::SubmitIOBufSample
      Src: /src/brpc/src/butil/iobuf.cpp:282,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/iobuf.cpp:284,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/butil/iobuf.cpp:285,1
    - Dst: butil::is_user_data
      Src: /src/brpc/src/butil/iobuf.cpp:286,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/iobuf.cpp:287,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/iobuf.cpp:288,1
    - Dst: butil::~Block
      Src: /src/brpc/src/butil/iobuf.cpp:290,1
    - Dst: iobuf::blockmem_deallocate
      Src: /src/brpc/src/butil/iobuf.cpp:291,1
    - Dst: butil::get_user_data_extension
      Src: /src/brpc/src/butil/iobuf.cpp:293,1
    - Dst: auto::deleter
      Src: /src/brpc/src/butil/iobuf.cpp:294,1
    - Dst: auto::~UserDataExtension
      Src: /src/brpc/src/butil/iobuf.cpp:295,1
    - Dst: butil::~Block
      Src: /src/brpc/src/butil/iobuf.cpp:296,1
    - Dst: free
      Src: /src/brpc/src/butil/iobuf.cpp:297,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 279
    functionDepth: 2
    functionLinenumber: 279
    functionLinenumberEnd: 300
    functionName: butil::dec_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::~Block
    - butil::sampled
    - butil::SubmitIOBufSample
    - free
    - auto::~UserDataExtension
    - std::atomic_thread_fence
    - butil::fetch_sub
    - butil::check_abi
    - iobuf::blockmem_deallocate
    - auto::deleter
    - butil::get_user_data_extension
    - butil::is_user_data
    linkageType: ''
    returnType: void
    signature: void dec_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/iobuf.cpp:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 304
    functionName: butil::ref_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::load
    linkageType: ''
    returnType: int
    signature: int ref_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 306
    functionName: butil::full
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool full() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 307
    functionName: butil::left_space
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t left_space() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IsIOBufProfilerSamplable
      Src: /src/brpc/src/butil/iobuf.cpp:311,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 310
    functionDepth: 5
    functionLinenumber: 310
    functionLinenumberEnd: 316
    functionName: butil::is_samplable
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::IsIOBufProfilerSamplable
    linkageType: ''
    returnType: bool
    signature: bool is_samplable()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 320
    functionName: butil::sampled
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool sampled() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    functionName: butil::is_user_data
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_user_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::ref_count
      Src: /src/brpc/src/butil/iobuf.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: butil::iobuf::block_shared_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - IOBuf::Block*::ref_count
    linkageType: ''
    returnType: int
    signature: int block_shared_count(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 334
    functionName: butil::iobuf::get_portal_next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_portal_next(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 338
    functionName: butil::iobuf::block_cap
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_cap(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 342
    functionName: butil::iobuf::block_size
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_size(IOBuf::Block const* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:346,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:349,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 355
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 7
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block(const size_t block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 359
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - butil::iobuf::create_block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:363,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:366,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/iobuf.cpp:372,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - block_size
    - alignment
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 376
    functionName: butil::iobuf::create_block_aligned
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - reinterpret_cast<uintptr_t>
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block_aligned(size_t block_size, size_t alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsIOBufProfilerEnabled
      Src: /src/brpc/src/butil/iobuf.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 386
    functionName: butil::iobuf::max_blocks_per_thread
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - IsIOBufProfilerEnabled
    linkageType: ''
    returnType: int
    signature: int max_blocks_per_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: butil::iobuf::get_tls_block_head
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_tls_block_head()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: butil::iobuf::get_tls_block_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int get_tls_block_count()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:421,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/iobuf.cpp:425,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 427
    functionName: butil::iobuf::remove_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 12
    functionsReached:
    - CHECK_EQ
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void remove_tls_block_chain()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:434,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:440,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:442,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:449,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:452,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 459
    functionName: butil::iobuf::share_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 7
    functionsReached:
    - IOBuf::Block*::full
    - butil::thread_atexit
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * share_tls_block()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:467,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:468,1
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:469,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:470,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:471,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:478,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 462
    functionDepth: 2
    functionLinenumber: 462
    functionLinenumberEnd: 481
    functionName: butil::iobuf::release_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block(IOBuf::Block* b)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:488,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:492,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:495,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:514,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 485
    functionDepth: 2
    functionLinenumber: 485
    functionLinenumberEnd: 516
    functionName: butil::iobuf::release_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - CHECK
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block_chain(IOBuf::Block* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:523,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:525,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:527,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 539
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 539
    functionName: butil::iobuf::acquire_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - IOBuf::Block*::full
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * acquire_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:542,1
    - Dst: IOBuf::BlockRef::BlockRef
      Src: /src/brpc/src/butil/iobuf.cpp:543,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cap
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 544
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached:
    - fetch_add
    - IOBuf::BlockRef::BlockRef
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array(size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 548
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - butil::iobuf::acquire_blockref_array
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - refs
    - cap
    argTypes:
    - IOBuf::BlockRef*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 552
    functionName: butil::iobuf::release_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void release_blockref_array(IOBuf::BlockRef* refs, size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::ref_count
      Src: /src/brpc/src/butil/iobuf.cpp:330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 330
    functionName: butil::iobuf::block_shared_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - IOBuf::Block*::ref_count
    linkageType: ''
    returnType: int
    signature: int block_shared_count(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 334
    functionName: butil::iobuf::get_portal_next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_portal_next(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 338
    functionName: butil::iobuf::block_cap
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_cap(IOBuf::Block const* b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 342
    functionName: butil::iobuf::block_size
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t block_size(IOBuf::Block const* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:346,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:349,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 355
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 10
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block(const size_t block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:358,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 357
    functionDepth: 1
    functionLinenumber: 357
    functionLinenumberEnd: 359
    functionName: butil::iobuf::create_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 11
    functionsReached:
    - butil::iobuf::create_block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:363,1
    - Dst: iobuf::blockmem_allocate
      Src: /src/brpc/src/butil/iobuf.cpp:366,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/iobuf.cpp:372,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - block_size
    - alignment
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 376
      start: 361
    functionDepth: 1
    functionLinenumber: 361
    functionLinenumberEnd: 376
    functionName: butil::iobuf::create_block_aligned
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - iobuf::blockmem_allocate
    - LOG
    - reinterpret_cast<uintptr_t>
    - IOBuf::Block::Block
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * create_block_aligned(size_t block_size, size_t alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsIOBufProfilerEnabled
      Src: /src/brpc/src/butil/iobuf.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 386
    functionName: butil::iobuf::max_blocks_per_thread
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - IsIOBufProfilerEnabled
    linkageType: ''
    returnType: int
    signature: int max_blocks_per_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: butil::iobuf::get_tls_block_head
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * get_tls_block_head()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: butil::iobuf::get_tls_block_count
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int get_tls_block_count()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:421,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/iobuf.cpp:425,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 427
    functionName: butil::iobuf::remove_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 12
    functionsReached:
    - CHECK_EQ
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void remove_tls_block_chain()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:434,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:440,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:442,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:449,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:452,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 459
    functionName: butil::iobuf::share_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 7
    functionsReached:
    - IOBuf::Block*::full
    - butil::thread_atexit
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * share_tls_block()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:467,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:468,1
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:469,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:470,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:471,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:478,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 462
    functionDepth: 2
    functionLinenumber: 462
    functionLinenumberEnd: 481
    functionName: butil::iobuf::release_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block(IOBuf::Block* b)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::max_blocks_per_thread
      Src: /src/brpc/src/butil/iobuf.cpp:488,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:492,1
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:495,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:502,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/iobuf.cpp:514,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 1
    argNames:
    - b
    argTypes:
    - IOBuf::Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 485
    functionDepth: 2
    functionLinenumber: 485
    functionLinenumberEnd: 516
    functionName: butil::iobuf::release_tls_block_chain
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached:
    - butil::iobuf::max_blocks_per_thread
    - butil::thread_atexit
    - IOBuf::Block*::full
    - fetch_add
    - CHECK
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: void
    signature: void release_tls_block_chain(IOBuf::Block* b)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:523,1
    - Dst: IOBuf::Block*::full
      Src: /src/brpc/src/butil/iobuf.cpp:525,1
    - Dst: IOBuf::Block*::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:527,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 539
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 539
    functionName: butil::iobuf::acquire_tls_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - IOBuf::Block*::full
    - butil::iobuf::create_block
    - IOBuf::Block*::dec_ref
    linkageType: ''
    returnType: IOBuf::Block
    signature: IOBuf::Block * acquire_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/butil/iobuf.cpp:542,1
    - Dst: IOBuf::BlockRef::BlockRef
      Src: /src/brpc/src/butil/iobuf.cpp:543,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cap
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 544
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - fetch_add
    - IOBuf::BlockRef::BlockRef
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array(size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 548
    functionName: butil::iobuf::acquire_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 7
    functionsReached:
    - butil::iobuf::acquire_blockref_array
    linkageType: ''
    returnType: IOBuf::BlockRef
    signature: IOBuf::BlockRef * acquire_blockref_array()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - refs
    - cap
    argTypes:
    - IOBuf::BlockRef*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 552
    functionName: butil::iobuf::release_blockref_array
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void release_blockref_array(IOBuf::BlockRef* refs, size_t cap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/iobuf.cpp:557,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 558
    functionName: butil::IOBuf::block_count_hit_tls_threshold
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - load
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::block_count_hit_tls_threshold()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:569,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:572,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:575,1
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:583,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:583,1
    - Dst: _bv::ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:585,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:586,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 589
    functionName: butil::IOBuf::IOBuf
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 482
    functionsReached:
    - _bv::ref_at
    - block::inc_ref
    - butil::iobuf::acquire_blockref_array
    - butil::IOBuf::_small
    - butil::IOBuf::capacity
    linkageType: ''
    returnType: void
    signature: void IOBuf::IOBuf(const IOBuf& rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf.cpp:595,1
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf.cpp:595,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:599,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:599,1
    - Dst: _bv::ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:606,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:607,1
    - Dst: IOBuf::~IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:610,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:611,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 613
    functionName: IOBuf::operator=(const IOBuf& rhs)
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _bv::ref_at
    - ref_at
    - dec_ref
    - block::inc_ref
    - IOBuf::~IOBuf
    - IOBuf::IOBuf
    - _small
    linkageType: ''
    returnType: void
    signature: void IOBuf::operator=(const IOBuf& rhs)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:621,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:630,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:636,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:644,1
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:649,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:655,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 41
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 663
    functionName: butil::IOBuf::_push_or_move_back_ref_to_smallview
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - block::dec_ref
    - butil::iobuf::acquire_blockref_array
    - block::inc_ref
    linkageType: ''
    returnType: void
    signature: void IOBuf::_push_or_move_back_ref_to_smallview(const BlockRef& r)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:670,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:676,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:681,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:682,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:685,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:690,1
    - Dst: butil::iobuf::acquire_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:691,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:693,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:699,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:699,1
    - Dst: block::inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:704,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - BlockRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 706
    functionName: butil::IOBuf::_push_or_move_back_ref_to_bigview
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - ref_at
    - block::inc_ref
    - block::dec_ref
    - butil::iobuf::acquire_blockref_array
    - butil::IOBuf::capacity
    - butil::iobuf::release_blockref_array
    linkageType: ''
    returnType: void
    signature: void IOBuf::_push_or_move_back_ref_to_bigview(const BlockRef& r)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:713,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:716,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:719,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:727,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:737,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 712
    functionDepth: 1
    functionLinenumber: 712
    functionLinenumberEnd: 741
    functionName: butil::IOBuf::_pop_or_moveout_front_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - block::dec_ref
    - butil::IOBuf::_small
    - butil::iobuf::release_blockref_array
    - reset_block_ref
    linkageType: ''
    returnType: int
    signature: int IOBuf::_pop_or_moveout_front_ref()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:747,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:749,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:750,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:753,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:754,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:762,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:770,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 774
      start: 746
    functionDepth: 1
    functionLinenumber: 746
    functionLinenumberEnd: 774
    functionName: butil::IOBuf::_pop_back_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - block::dec_ref
    - butil::IOBuf::_small
    - butil::iobuf::release_blockref_array
    - reset_block_ref
    linkageType: ''
    returnType: int
    signature: int IOBuf::_pop_back_ref()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:777,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:779,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:780,1
    - Dst: block::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:783,1
    - Dst: reset_block_ref
      Src: /src/brpc/src/butil/iobuf.cpp:784,1
    - Dst: ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:789,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:789,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:791,1
    - Dst: butil::IOBuf::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:791,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:792,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 776
    functionDepth: 1
    functionLinenumber: 776
    functionLinenumberEnd: 794
    functionName: butil::IOBuf::clear
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 46
    functionsReached:
    - ref_at
    - reset_block_ref
    - dec_ref
    - block::dec_ref
    - IOBuf::IOBuf
    - butil::IOBuf::_small
    - butil::iobuf::release_blockref_array
    - butil::IOBuf::capacity
    linkageType: ''
    returnType: void
    signature: void IOBuf::clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:797,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/butil/iobuf.cpp:799,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:804,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:808,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:814,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 796
    functionDepth: 2
    functionLinenumber: 796
    functionLinenumberEnd: 817
    functionName: butil::IOBuf::pop_front
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 15
    functionsReached:
    - butil::IOBuf::length
    - butil::IOBuf::_small
    - _front_ref
    - butil::IOBuf::_pop_front_ref
    - butil::IOBuf::clear
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::pop_front(size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:820,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:823,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:828,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:832,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - c
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 835
      start: 819
    functionDepth: 1
    functionLinenumber: 819
    functionLinenumberEnd: 835
    functionName: butil::IOBuf::cut1
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _front_ref
    - butil::IOBuf::_pop_front_ref
    - butil::IOBuf::empty
    - butil::IOBuf::_small
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::cut1(void* c)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:838,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/butil/iobuf.cpp:840,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:845,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:848,1
    - Dst: butil::IOBuf::_pop_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:854,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 857
      start: 837
    functionDepth: 2
    functionLinenumber: 837
    functionLinenumberEnd: 857
    functionName: butil::IOBuf::pop_back
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf::length
    - butil::IOBuf::_pop_back_ref
    - butil::IOBuf::_small
    - _back_ref
    - butil::IOBuf::clear
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::pop_back(size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:860,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:866,1
    - Dst: IOBuf*::_move_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:869,1
    - Dst: butil::IOBuf::_moveout_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:870,1
    - Dst: IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:873,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:877,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 884
      start: 859
    functionDepth: 2
    functionLinenumber: 859
    functionLinenumberEnd: 884
    functionName: butil::IOBuf::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 21
    functionsReached:
    - butil::IOBuf::length
    - IOBuf*::_push_back_ref
    - IOBuf*::_move_back_ref
    - butil::IOBuf::_small
    - _front_ref
    - butil::IOBuf::_moveout_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::cutn(IOBuf* out, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:887,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:893,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:895,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:898,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:900,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:904,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 911
      start: 886
    functionDepth: 2
    functionLinenumber: 886
    functionLinenumberEnd: 911
    functionName: butil::IOBuf::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 21
    functionsReached:
    - butil::iobuf::cp
    - butil::IOBuf::length
    - butil::IOBuf::_small
    - _front_ref
    - butil::IOBuf::_pop_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::cutn(void* out, size_t n)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:917,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf.cpp:921,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf.cpp:922,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf.cpp:922,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - std::string*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 913
    functionDepth: 2
    functionLinenumber: 913
    functionLinenumberEnd: 924
    functionName: butil::IOBuf::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 22
    functionsReached:
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::cutn(std::string* out, size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:927,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:931,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:936,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:937,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - out
    - d
    argTypes:
    - IOBuf*
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 926
    functionDepth: 3
    functionLinenumber: 926
    functionLinenumberEnd: 944
    functionName: butil::IOBuf::_cut_by_char
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf::pop_front
    - butil::IOBuf::_ref_num
    - butil::IOBuf::cutn
    - _ref_at
    linkageType: ''
    returnType: int
    signature: int IOBuf::_cut_by_char(IOBuf* out, char d)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:950,1
    - Dst: static_cast<SigType>
      Src: /src/brpc/src/butil/iobuf.cpp:956,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:962,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:967,1
    - Dst: static_cast<SigType>
      Src: /src/brpc/src/butil/iobuf.cpp:971,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:974,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:975,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 3
    argNames:
    - out
    - dbegin
    - ndelim
    argTypes:
    - IOBuf*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 946
    functionDepth: 3
    functionLinenumber: 946
    functionLinenumberEnd: 982
    functionName: butil::IOBuf::_cut_by_delim
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - static_cast<SigType>
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - butil::IOBuf::cutn
    - butil::IOBuf::pop_front
    - _ref_at
    linkageType: ''
    returnType: int
    signature: int IOBuf::_cut_by_delim(IOBuf* out, char const* dbegin, size_t ndelim)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:989,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:993,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:993,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:999,1
    - Dst: butil::iobuf::get_pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1009,1
    - Dst: pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1010,1
    - Dst: butil::iobuf::user_pwritev
      Src: /src/brpc/src/butil/iobuf.cpp:1012,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1015,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - fd
    - offset
    - size_hint
    argTypes:
    - int
    - off_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 988
    functionDepth: 3
    functionLinenumber: 988
    functionLinenumberEnd: 1018
    functionName: butil::IOBuf::pcut_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - pwritev_func
    - _ref_at
    - butil::IOBuf::pop_front
    - butil::IOBuf::empty
    - butil::iobuf::user_pwritev
    - butil::iobuf::get_pwritev_func
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::pcut_into_file_descriptor(int fd, off_t offset, size_t
      size_hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1021,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1024,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1024,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1030,1
    - Dst: IWriter*::WriteV
      Src: /src/brpc/src/butil/iobuf.cpp:1037,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1039,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - writer
    - size_hint
    argTypes:
    - IWriter*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 1020
    functionDepth: 3
    functionLinenumber: 1020
    functionLinenumberEnd: 1042
    functionName: butil::IOBuf::cut_into_writer
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - IWriter*::WriteV
    - butil::IOBuf::pop_front
    - butil::IOBuf::empty
    - _ref_at
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::cut_into_writer(IWriter* writer, size_t size_hint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1046,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1050,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/butil/iobuf.cpp:1051,1
    - Dst: SSL_write
      Src: /src/brpc/src/butil/iobuf.cpp:1052,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1054,1
    - Dst: SSL_get_error
      Src: /src/brpc/src/butil/iobuf.cpp:1056,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ssl
    - ssl_error
    argTypes:
    - SSL*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1044
    functionDepth: 3
    functionLinenumber: 1044
    functionLinenumberEnd: 1058
    functionName: butil::IOBuf::cut_into_SSL_channel
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 1
    functionsReached:
    - ERR_clear_error
    - SSL_get_error
    - butil::IOBuf::pop_front
    - SSL_write
    - butil::IOBuf::empty
    - _ref_at
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOBuf::cut_into_SSL_channel(SSL* ssl, int* ssl_error)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1065,1
    - Dst: butil::IOBuf::cut_into_SSL_channel
      Src: /src/brpc/src/butil/iobuf.cpp:1070,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/butil/iobuf.cpp:1077,1
    - Dst: SSL_get_wbio
      Src: /src/brpc/src/butil/iobuf.cpp:1094,1
    - Dst: BIO_wpending
      Src: /src/brpc/src/butil/iobuf.cpp:1095,1
    - Dst: BIO_flush
      Src: /src/brpc/src/butil/iobuf.cpp:1096,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/butil/iobuf.cpp:1097,1
    - Dst: SSL_flush
      Src: /src/brpc/src/butil/iobuf.cpp:1104,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 4
    argNames:
    - ssl
    - pieces
    - count
    - ssl_error
    argTypes:
    - SSL*
    - IOBuf**
    - size_t
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1060
    functionDepth: 4
    functionLinenumber: 1060
    functionLinenumberEnd: 1112
    functionName: butil::IOBuf::cut_multiple_into_SSL_channel
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BIO_flush
    - SSL_flush
    - BIO_wpending
    - SSL_get_wbio
    - BIO_fd_non_fatal_error
    - butil::IOBuf::empty
    - butil::IOBuf::cut_into_SSL_channel
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::cut_multiple_into_SSL_channel(SSL* ssl, IOBuf* const*
      pieces,\n                                             size_t count, int* ssl_error)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1116,1
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/src/butil/iobuf.cpp:1120,1
    - Dst: IOBuf*::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1126,1
    - Dst: IOBuf*::_ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1128,1
    - Dst: butil::iobuf::get_pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1136,1
    - Dst: pwritev_func
      Src: /src/brpc/src/butil/iobuf.cpp:1137,1
    - Dst: butil::iobuf::user_pwritev
      Src: /src/brpc/src/butil/iobuf.cpp:1139,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1146,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 4
    argNames:
    - fd
    - offset
    - pieces
    - count
    argTypes:
    - int
    - off_t
    - IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1114
    functionDepth: 4
    functionLinenumber: 1114
    functionLinenumberEnd: 1152
    functionName: butil::IOBuf::pcut_multiple_into_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IOBuf*::_ref_num
    - butil::IOBuf::pcut_into_file_descriptor
    - pwritev_func
    - butil::IOBuf::pop_front
    - IOBuf*::_ref_at
    - BAIDU_UNLIKELY
    - butil::iobuf::user_pwritev
    - butil::iobuf::get_pwritev_func
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::pcut_multiple_into_file_descriptor(\n    int fd, off_t
      offset, IOBuf* const* pieces, size_t count)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1156,1
    - Dst: butil::IOBuf::cut_into_writer
      Src: /src/brpc/src/butil/iobuf.cpp:1160,1
    - Dst: IOBuf*::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1166,1
    - Dst: IOBuf*::_ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1168,1
    - Dst: IWriter*::WriteV
      Src: /src/brpc/src/butil/iobuf.cpp:1174,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/butil/iobuf.cpp:1180,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 3
    argNames:
    - writer
    - pieces
    - count
    argTypes:
    - IWriter*
    - IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1186
      start: 1154
    functionDepth: 4
    functionLinenumber: 1154
    functionLinenumberEnd: 1186
    functionName: butil::IOBuf::cut_multiple_into_writer
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - IOBuf*::_ref_num
    - IWriter*::WriteV
    - butil::IOBuf::pop_front
    - IOBuf*::_ref_at
    - BAIDU_UNLIKELY
    - butil::IOBuf::cut_into_writer
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOBuf::cut_multiple_into_writer(\n        IWriter* writer,
      IOBuf* const* pieces, size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1190,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1192,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1192,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1194
      start: 1189
    functionDepth: 2
    functionLinenumber: 1189
    functionLinenumberEnd: 1194
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 186
    functionsReached:
    - butil::IOBuf::_ref_num
    - butil::IOBuf::_push_back_ref
    - _ref_at
    linkageType: ''
    returnType: void
    signature: void IOBuf::append(const IOBuf& other)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1197,1
    - Dst: butil::IOBuf::swap
      Src: /src/brpc/src/butil/iobuf.cpp:1198,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf.cpp:1198,1
    - Dst: value
      Src: /src/brpc/src/butil/iobuf.cpp:1200,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1201,1
    - Dst: butil::IOBuf::_move_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1203,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1203,1
    - Dst: butil::IOBuf::_small
      Src: /src/brpc/src/butil/iobuf.cpp:1205,1
    - Dst: butil::iobuf::release_blockref_array
      Src: /src/brpc/src/butil/iobuf.cpp:1206,1
    - Dst: _bv::capacity
      Src: /src/brpc/src/butil/iobuf.cpp:1206,1
    - Dst: IOBuf::IOBuf
      Src: /src/brpc/src/butil/iobuf.cpp:1208,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' movable_other'
    argTypes:
    - Movable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1210
      start: 1196
    functionDepth: 2
    functionLinenumber: 1196
    functionLinenumberEnd: 1210
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 186
    functionsReached:
    - _bv::capacity
    - value
    - butil::IOBuf::_ref_num
    - IOBuf::IOBuf
    - butil::IOBuf::_small
    - butil::IOBuf::_move_back_ref
    - butil::iobuf::release_blockref_array
    - butil::IOBuf::swap
    - butil::IOBuf::empty
    - _ref_at
    linkageType: ''
    returnType: void
    signature: void IOBuf::append(const Movable& movable_other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1213,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1214,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1222
      start: 1212
    functionDepth: 3
    functionLinenumber: 1212
    functionLinenumberEnd: 1222
    functionName: butil::IOBuf::push_back
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 28
    functionsReached:
    - BAIDU_UNLIKELY
    - butil::iobuf::share_tls_block
    - butil::IOBuf::_push_back_ref
    linkageType: ''
    returnType: int
    signature: int IOBuf::push_back(char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1225,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/butil/iobuf.cpp:1226,1
    - Dst: strlen
      Src: /src/brpc/src/butil/iobuf.cpp:1226,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1229
      start: 1224
    functionDepth: 1
    functionLinenumber: 1224
    functionLinenumberEnd: 1229
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 187
    functionsReached:
    - butil::IOBuf::append
    - BAIDU_LIKELY
    - strlen
    linkageType: ''
    returnType: int
    signature: int IOBuf::append(char const* s)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1232,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/butil/iobuf.cpp:1236,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1240,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1241,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1244,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1244,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1245,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1248,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - data
    - count
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1253
      start: 1231
    functionDepth: 4
    functionLinenumber: 1231
    functionLinenumberEnd: 1253
    functionName: butil::IOBuf::append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 187
    functionsReached:
    - butil::IOBuf::_push_back_ref
    - std::min
    - butil::iobuf::cp
    - IOBuf::Block*::left_space
    - butil::iobuf::share_tls_block
    - butil::IOBuf::push_back
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int IOBuf::append(void const* data, size_t count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1258,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1259,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1265,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1265,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1266,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1276,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - vec
    - n
    argTypes:
    - const_iovec*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1255
    functionDepth: 3
    functionLinenumber: 1255
    functionLinenumberEnd: 1279
    functionName: butil::IOBuf::appendv
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_push_back_ref
    - std::min
    - butil::iobuf::cp
    - IOBuf::Block*::left_space
    - butil::iobuf::share_tls_block
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int IOBuf::appendv(const const_iovec* vec, size_t n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1286,1
    - Dst: deleter
      Src: /src/brpc/src/butil/iobuf.cpp:1293,1
    - Dst: malloc
      Src: /src/brpc/src/butil/iobuf.cpp:1296,1
    - Dst: std::move
      Src: /src/brpc/src/butil/iobuf.cpp:1300,1
    - Dst: IOBuf::Block::Block
      Src: /src/brpc/src/butil/iobuf.cpp:1300,1
    - Dst: butil::IOBuf::_move_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1303,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 4
    argNames:
    - data
    - size
    - deleter
    - meta
    argTypes:
    - void*
    - size_t
    - std::function<void(void*)>
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1305
      start: 1281
    functionDepth: 2
    functionLinenumber: 1281
    functionLinenumberEnd: 1305
    functionName: butil::IOBuf::append_user_data_with_meta
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - std::move
    - malloc
    - butil::IOBuf::_move_back_ref
    - deleter
    - IOBuf::Block::Block
    - LOG
    linkageType: ''
    returnType: int
    signature: "int IOBuf::append_user_data_with_meta(void* data,\n                                      size_t
      size,\n                                      std::function<void(void*)> deleter,\n
      \                                     uint64_t meta)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1308,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1311,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1316
      start: 1307
    functionDepth: 2
    functionLinenumber: 1307
    functionLinenumberEnd: 1316
    functionName: butil::IOBuf::get_first_data_meta
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_ref_num
    - _ref_at
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t IOBuf::get_first_data_meta()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1319,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/butil/iobuf.cpp:1321,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1327,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1328,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1331,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1331,1
    - Dst: memset
      Src: /src/brpc/src/butil/iobuf.cpp:1332,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1335,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - n
    - c
    argTypes:
    - size_t
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1340
      start: 1318
    functionDepth: 3
    functionLinenumber: 1318
    functionLinenumberEnd: 1340
    functionName: butil::IOBuf::resize
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 13
    functionsReached:
    - butil::IOBuf::_push_back_ref
    - std::min
    - butil::IOBuf::length
    - IOBuf::Block*::left_space
    - memset
    - butil::IOBuf::pop_back
    - butil::iobuf::share_tls_block
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int IOBuf::resize(size_t n, char c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1355,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - ref_index
    - ref_offset
    - size
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1361
      start: 1350
    functionDepth: 1
    functionLinenumber: 1350
    functionLinenumberEnd: 1361
    functionName: butil::make_area
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: IOBuf::Area
    signature: "IOBuf::Area make_area(uint32_t ref_index, uint32_t ref_offset,\n                             uint32_t
      size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - IOBuf::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1364
      start: 1362
    functionDepth: 0
    functionLinenumber: 1362
    functionLinenumberEnd: 1364
    functionName: butil::get_area_ref_index
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_area_ref_index(IOBuf::Area c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - IOBuf::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1367
      start: 1365
    functionDepth: 0
    functionLinenumber: 1365
    functionLinenumberEnd: 1367
    functionName: butil::get_area_ref_offset
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_area_ref_offset(IOBuf::Area c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - IOBuf::Area
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1370
      start: 1368
    functionDepth: 0
    functionLinenumber: 1368
    functionLinenumberEnd: 1370
    functionName: butil::get_area_size
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_area_size(IOBuf::Area c)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1376,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1377,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1380,1
    - Dst: IOBuf::Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1380,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1382,1
    - Dst: make_area
      Src: /src/brpc/src/butil/iobuf.cpp:1386,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1386,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1386,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1392
      start: 1372
    functionDepth: 3
    functionLinenumber: 1372
    functionLinenumberEnd: 1392
    functionName: butil::IOBuf::reserve
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - make_area
    - butil::IOBuf::_push_back_ref
    - butil::IOBuf::_ref_num
    - std::min
    - IOBuf::Block*::left_space
    - butil::iobuf::share_tls_block
    - BAIDU_UNLIKELY
    - _back_ref
    linkageType: ''
    returnType: IOBuf::Area
    signature: IOBuf::Area IOBuf::reserve(size_t count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1396,1
    - Dst: get_area_ref_index
      Src: /src/brpc/src/butil/iobuf.cpp:1399,1
    - Dst: get_area_ref_offset
      Src: /src/brpc/src/butil/iobuf.cpp:1400,1
    - Dst: get_area_size
      Src: /src/brpc/src/butil/iobuf.cpp:1401,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1402,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1404,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1409,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1410,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:1420,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1420,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1420,1
    - Dst: get_area_ref_index
      Src: /src/brpc/src/butil/iobuf.cpp:1422,1
    - Dst: get_area_ref_offset
      Src: /src/brpc/src/butil/iobuf.cpp:1423,1
    - Dst: get_area_size
      Src: /src/brpc/src/butil/iobuf.cpp:1424,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - area
    - data
    argTypes:
    - Area
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1427
      start: 1394
    functionDepth: 2
    functionLinenumber: 1394
    functionLinenumberEnd: 1427
    functionName: butil::IOBuf::unsafe_assign
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - get_area_size
    - get_area_ref_offset
    - butil::iobuf::cp
    - butil::IOBuf::size
    - CHECK
    - get_area_ref_index
    - LOG
    - _ref_at
    linkageType: ''
    returnType: int
    signature: int IOBuf::unsafe_assign(Area area, const void* data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1430,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1435,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1443,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1444,1
    - Dst: IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1447,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 3
    argNames:
    - buf
    - n
    - pos
    argTypes:
    - IOBuf*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1453
      start: 1429
    functionDepth: 2
    functionLinenumber: 1429
    functionLinenumberEnd: 1453
    functionName: butil::IOBuf::append_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - IOBuf*::_push_back_ref
    - butil::IOBuf::_ref_num
    - std::min
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::append_to(IOBuf* buf, size_t n, size_t pos) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1456,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1461,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1469,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1470,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1471,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 3
    argNames:
    - d
    - n
    - pos
    argTypes:
    - void*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1478
      start: 1455
    functionDepth: 2
    functionLinenumber: 1455
    functionLinenumberEnd: 1478
    functionName: butil::IOBuf::copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 15
    functionsReached:
    - butil::IOBuf::_ref_num
    - std::min
    - butil::iobuf::cp
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::copy_to(void* d, size_t n, size_t pos) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1481,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf.cpp:1488,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf.cpp:1489,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - s
    - n
    - pos
    argTypes:
    - std::string*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1490
      start: 1480
    functionDepth: 2
    functionLinenumber: 1480
    functionLinenumberEnd: 1490
    functionName: butil::IOBuf::copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 16
    functionsReached:
    - butil::IOBuf::copy_to
    - std::string*::resize
    - butil::IOBuf::length
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::copy_to(std::string* s, size_t n, size_t pos) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1493,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/iobuf.cpp:1500,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/butil/iobuf.cpp:1501,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf.cpp:1502,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - s
    - n
    - pos
    argTypes:
    - std::string*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1503
      start: 1492
    functionDepth: 3
    functionLinenumber: 1492
    functionLinenumberEnd: 1503
    functionName: butil::IOBuf::append_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::length
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::append_to(std::string* s, size_t n, size_t pos) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/butil/iobuf.cpp:1507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - s
    - n
    - pos
    argTypes:
    - char*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1510
      start: 1506
    functionDepth: 3
    functionLinenumber: 1506
    functionLinenumberEnd: 1510
    functionName: butil::IOBuf::copy_to_cstr
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::copy_to
    linkageType: ''
    returnType: size_t
    signature: size_t IOBuf::copy_to_cstr(char* s, size_t n, size_t pos) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.cpp:1513,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1514,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1519,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1521,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1523,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1525,1
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:1529,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - d
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1512
    functionDepth: 2
    functionLinenumber: 1512
    functionLinenumberEnd: 1534
    functionName: butil::IOBuf::fetch
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::cp
    - butil::IOBuf::length
    - _ref_at
    - butil::IOBuf::_ref_num
    linkageType: ''
    returnType: void
    signature: void * IOBuf::fetch(void* d, size_t n) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/butil/iobuf.cpp:1537,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1538,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1542
      start: 1536
    functionDepth: 0
    functionLinenumber: 1536
    functionLinenumberEnd: 1542
    functionName: butil::IOBuf::fetch1
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _front_ref
    - butil::IOBuf::empty
    linkageType: ''
    returnType: void
    signature: void * IOBuf::fetch1() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: backing_block_num
      Src: /src/brpc/src/butil/iobuf.cpp:1545,1
    - Dst: backing_block
      Src: /src/brpc/src/butil/iobuf.cpp:1547,1
    - Dst: write
      Src: /src/brpc/src/butil/iobuf.cpp:1548,1
    - Dst: StringPiece::data
      Src: /src/brpc/src/butil/iobuf.cpp:1548,1
    - Dst: StringPiece::size
      Src: /src/brpc/src/butil/iobuf.cpp:1548,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' buf'
    argTypes:
    - std::ostream
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1551
      start: 1544
    functionDepth: 1
    functionLinenumber: 1544
    functionLinenumberEnd: 1551
    functionName: '& operator<<(std::ostream& os, const IOBuf& buf)'
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - backing_block
    - backing_block_num
    - StringPiece::size
    - StringPiece::data
    - write
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const IOBuf& buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1554,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1554,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1557,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1560,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf.cpp:1561,1
    - Dst: data
      Src: /src/brpc/src/butil/iobuf.cpp:1561,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1553
    functionDepth: 2
    functionLinenumber: 1553
    functionLinenumberEnd: 1567
    functionName: butil::IOBuf::equals
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - butil::IOBuf::_ref_num
    - butil::IOBuf::size
    - data
    - _ref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::equals(const butil::StringPiece& s) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1570,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1571,1
    - Dst: StringPiece
      Src: /src/brpc/src/butil/iobuf.cpp:1572,1
    - Dst: StringPiece
      Src: /src/brpc/src/butil/iobuf.cpp:1574,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1575
      start: 1569
    functionDepth: 2
    functionLinenumber: 1569
    functionLinenumberEnd: 1575
    functionName: butil::IOBuf::backing_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 12
    functionsReached:
    - butil::IOBuf::_ref_num
    - _ref_at
    - StringPiece
    linkageType: ''
    returnType: StringPiece
    signature: StringPiece IOBuf::backing_block(size_t i) const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1578,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/butil/iobuf.cpp:1579,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1585,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1588,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1591,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1592,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1596,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/iobuf.cpp:1597,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1605,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1616,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1577
    functionDepth: 2
    functionLinenumber: 1577
    functionLinenumberEnd: 1624
    functionName: butil::IOBuf::equals
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - memcmp
    - butil::IOBuf::_ref_num
    - std::min
    - butil::IOBuf::size
    - _ref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBuf::equals(const butil::IOBuf& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1627,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1627
      start: 1627
    functionDepth: 0
    functionLinenumber: 1627
    functionLinenumberEnd: 1627
    functionName: IOPortal::~IOPortal()
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - return_cached_blocks
    linkageType: ''
    returnType: void
    signature: void IOPortal::~IOPortal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IOBuf::operator=
      Src: /src/brpc/src/butil/iobuf.cpp:1630,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOPortal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1632
      start: 1629
    functionDepth: 0
    functionLinenumber: 1629
    functionLinenumberEnd: 1632
    functionName: '& IOPortal::operator=(const IOPortal& rhs)'
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - IOBuf::operator=
    linkageType: ''
    returnType: IOPortal
    signature: IOPortal & IOPortal::operator=(const IOPortal& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/butil/iobuf.cpp:1635,1
    - Dst: butil::IOPortal::return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1637
      start: 1634
    functionDepth: 2
    functionLinenumber: 1634
    functionLinenumberEnd: 1637
    functionName: butil::IOPortal::clear
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::return_cached_blocks
    - butil::IOBuf::clear
    linkageType: ''
    returnType: void
    signature: void IOPortal::clear()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1651,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1652,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1663,1
    - Dst: Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1663,1
    - Dst: readv
      Src: /src/brpc/src/butil/iobuf.cpp:1675,1
    - Dst: butil::iobuf::get_preadv_func
      Src: /src/brpc/src/butil/iobuf.cpp:1677,1
    - Dst: preadv_func
      Src: /src/brpc/src/butil/iobuf.cpp:1678,1
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf.cpp:1681,1
    - Dst: butil::IOPortal::return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1682,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1689,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1689,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1692,1
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:1694,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1696,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 3
    argNames:
    - fd
    - offset
    - max_count
    argTypes:
    - int
    - off_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1701
      start: 1641
    functionDepth: 3
    functionLinenumber: 1641
    functionLinenumberEnd: 1701
    functionName: butil::IOPortal::pappend_from_file_descriptor
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - dec_ref
    - left_space
    - std::min
    - Block*::left_space
    - butil::iobuf::get_preadv_func
    - butil::iobuf::acquire_tls_block
    - butil::IOPortal::return_cached_blocks
    - empty
    - preadv_func
    - readv
    - BAIDU_UNLIKELY
    - full
    - _push_back_ref
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOPortal::pappend_from_file_descriptor(\n    int fd, off_t
      offset, size_t max_count)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1712,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1713,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1724,1
    - Dst: Block*::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1724,1
    - Dst: IReader*::ReadV
      Src: /src/brpc/src/butil/iobuf.cpp:1734,1
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf.cpp:1736,1
    - Dst: butil::IOPortal::return_cached_blocks
      Src: /src/brpc/src/butil/iobuf.cpp:1737,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1744,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1744,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1747,1
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:1749,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1751,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 2
    argNames:
    - reader
    - max_count
    argTypes:
    - IReader*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1756
      start: 1703
    functionDepth: 3
    functionLinenumber: 1703
    functionLinenumberEnd: 1756
    functionName: butil::IOPortal::append_from_reader
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - dec_ref
    - left_space
    - std::min
    - Block*::left_space
    - butil::iobuf::acquire_tls_block
    - butil::IOPortal::return_cached_blocks
    - empty
    - BAIDU_UNLIKELY
    - full
    - IReader*::ReadV
    - _push_back_ref
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t IOPortal::append_from_reader(IReader* reader, size_t max_count)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:1764,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1765,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1772,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1772,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/butil/iobuf.cpp:1773,1
    - Dst: SSL_read
      Src: /src/brpc/src/butil/iobuf.cpp:1774,1
    - Dst: SSL_get_error
      Src: /src/brpc/src/butil/iobuf.cpp:1775,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1778,1
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:1780,1
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1782,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/butil/iobuf.cpp:1790,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 3
    argNames:
    - ssl
    - ssl_error
    - max_count
    argTypes:
    - SSL*
    - int*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1802
      start: 1759
    functionDepth: 3
    functionLinenumber: 1759
    functionLinenumberEnd: 1802
    functionName: butil::IOPortal::append_from_SSL_channel
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - dec_ref
    - left_space
    - std::min
    - ERR_clear_error
    - _push_back_ref
    - butil::iobuf::acquire_tls_block
    - SSL_get_error
    - BIO_fd_non_fatal_error
    - BAIDU_UNLIKELY
    - full
    - SSL_read
    linkageType: ''
    returnType: ssize_t
    signature: "ssize_t IOPortal::append_from_SSL_channel(\n    SSL* ssl, int* ssl_error,
      size_t max_count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/src/butil/iobuf.cpp:1805,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - Block*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1806
      start: 1804
    functionDepth: 3
    functionLinenumber: 1804
    functionLinenumberEnd: 1806
    functionName: butil::IOPortal::return_cached_blocks_impl
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::iobuf::release_tls_block_chain
    linkageType: ''
    returnType: void
    signature: void IOPortal::return_cached_blocks_impl(Block* b)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1811,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1817,1
    - Dst: std::max
      Src: /src/brpc/src/butil/iobuf.cpp:1824,1
    - Dst: butil::iobuf::create_block_aligned
      Src: /src/brpc/src/butil/iobuf.cpp:1828,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:1829,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:1830,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1833,1
    - Dst: auto::left_space
      Src: /src/brpc/src/butil/iobuf.cpp:1833,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1835,1
    - Dst: auto::dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1837,1
    - Dst: make_area
      Src: /src/brpc/src/butil/iobuf.cpp:1841,1
    - Dst: _ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1841,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1841,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1848
      start: 1808
    functionDepth: 2
    functionLinenumber: 1808
    functionLinenumberEnd: 1848
    functionName: butil::IOReserveAlignedBuf::reserve
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - make_area
    - std::max
    - butil::iobuf::create_block_aligned
    - std::min
    - _ref_num
    - auto::dec_ref
    - BAIDU_UNLIKELY
    - _back_ref
    - auto::left_space
    - LOG
    - _push_back_ref
    linkageType: ''
    returnType: IOBuf::Area
    signature: IOBuf::Area IOReserveAlignedBuf::reserve(size_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1857
      start: 1852
    functionDepth: 0
    functionLinenumber: 1852
    functionLinenumberEnd: 1857
    functionName: butil::IOBufCutter::IOBufCutter
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufCutter::IOBufCutter(butil::IOBuf* buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1862,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/iobuf.cpp:1863,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1867,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1870
      start: 1859
    functionDepth: 0
    functionLinenumber: 1859
    functionLinenumberEnd: 1870
    functionName: IOBufCutter::~IOBufCutter()
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _front_ref
    - CHECK_EQ
    - _pop_front_ref
    linkageType: ''
    returnType: void
    signature: void IOBufCutter::~IOBufCutter()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1873,1
    - Dst: _ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1875,1
    - Dst: _front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1881,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1887
      start: 1871
    functionDepth: 0
    functionLinenumber: 1871
    functionLinenumberEnd: 1887
    functionName: butil::IOBufCutter::load_next_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 7
    functionsReached:
    - _front_ref
    - _ref_num
    - _pop_front_ref
    linkageType: ''
    returnType: bool
    signature: bool IOBufCutter::load_next_ref()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufCutter::load_next_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1892,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1897,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1902,1
    - Dst: _ref_num
      Src: /src/brpc/src/butil/iobuf.cpp:1905,1
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1907,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:1908,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1909,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - dst
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1917
      start: 1889
    functionDepth: 1
    functionLinenumber: 1889
    functionLinenumberEnd: 1917
    functionName: butil::IOBufCutter::slower_copy_to
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - std::min
    - _ref_num
    - memcpy
    - butil::IOBufCutter::load_next_ref
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::slower_copy_to(void* dst, size_t n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1928,1
    - Dst: butil::IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1935,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1936,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1940,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1946,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1948,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - butil::IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1950
      start: 1919
    functionDepth: 0
    functionLinenumber: 1919
    functionLinenumberEnd: 1950
    functionName: butil::IOBufCutter::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 5
    functionsReached:
    - butil::IOBuf*::_push_back_ref
    - butil::IOBufCutter::cutn
    - _pop_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::cutn(butil::IOBuf* out, size_t n)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1958,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/iobuf.cpp:1962,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1963,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1967,1
    - Dst: _pop_front_ref
      Src: /src/brpc/src/butil/iobuf.cpp:1973,1
    - Dst: butil::IOBufCutter::cutn
      Src: /src/brpc/src/butil/iobuf.cpp:1975,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - out
    - n
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1977
      start: 1952
    functionDepth: 0
    functionLinenumber: 1952
    functionLinenumberEnd: 1977
    functionName: butil::IOBufCutter::cutn
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 6
    functionsReached:
    - memcpy
    - butil::IOBufCutter::cutn
    - _pop_front_ref
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufCutter::cutn(void* out, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1984
      start: 1979
    functionDepth: 0
    functionLinenumber: 1979
    functionLinenumberEnd: 1984
    functionName: butil::IOBufAsZeroCopyInputStream::IOBufAsZeroCopyInputStream
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyInputStream::IOBufAsZeroCopyInputStream(const IOBuf&
      buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:1987,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - void**
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1998
      start: 1986
    functionDepth: 0
    functionLinenumber: 1986
    functionLinenumberEnd: 1998
    functionName: butil::IOBufAsZeroCopyInputStream::Next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 26
    functionsReached:
    - _pref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBufAsZeroCopyInputStream::Next(const void** data, int* size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2002,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:2003,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2008,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2010
      start: 2000
    functionDepth: 1
    functionLinenumber: 2000
    functionLinenumberEnd: 2010
    functionName: butil::IOBufAsZeroCopyInputStream::BackUp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    - LOG
    - _pref_at
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyInputStream::BackUp(int count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2017,1
    - Dst: _pref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2028,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2016
    functionDepth: 0
    functionLinenumber: 2016
    functionLinenumberEnd: 2031
    functionName: butil::IOBufAsZeroCopyInputStream::Skip
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _pref_at
    linkageType: ''
    returnType: bool
    signature: bool IOBufAsZeroCopyInputStream::Skip(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2035
      start: 2033
    functionDepth: 0
    functionLinenumber: 2033
    functionLinenumberEnd: 2035
    functionName: butil::IOBufAsZeroCopyInputStream::ByteCount
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::int64
    signature: google::protobuf::int64 IOBufAsZeroCopyInputStream::ByteCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2039
      start: 2037
    functionDepth: 0
    functionLinenumber: 2037
    functionLinenumberEnd: 2039
    functionName: butil::IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream(IOBuf*
      buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::invalid_argument
      Src: /src/brpc/src/butil/iobuf.cpp:2049,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - block_size
    argTypes:
    - IOBuf*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2051
      start: 2041
    functionDepth: 0
    functionLinenumber: 2041
    functionLinenumberEnd: 2051
    functionName: butil::IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - std::invalid_argument
    linkageType: ''
    returnType: void
    signature: "void IOBufAsZeroCopyOutputStream::IOBufAsZeroCopyOutputStream(\n    IOBuf
      *buf, uint32_t block_size)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _release_block
      Src: /src/brpc/src/butil/iobuf.cpp:2054,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2055
      start: 2053
    functionDepth: 0
    functionLinenumber: 2053
    functionLinenumberEnd: 2055
    functionName: IOBufAsZeroCopyOutputStream::~IOBufAsZeroCopyOutputStream()
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - _release_block
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::~IOBufAsZeroCopyOutputStream()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: full
      Src: /src/brpc/src/butil/iobuf.cpp:2058,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::_release_block
      Src: /src/brpc/src/butil/iobuf.cpp:2059,1
    - Dst: butil::iobuf::create_block
      Src: /src/brpc/src/butil/iobuf.cpp:2061,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:2063,1
    - Dst: left_space
      Src: /src/brpc/src/butil/iobuf.cpp:2070,1
    - Dst: _push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2075,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - void**
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2078
      start: 2057
    functionDepth: 4
    functionLinenumber: 2057
    functionLinenumberEnd: 2078
    functionName: butil::IOBufAsZeroCopyOutputStream::Next
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 14
    functionsReached:
    - butil::iobuf::create_block
    - left_space
    - butil::IOBufAsZeroCopyOutputStream::_release_block
    - butil::iobuf::acquire_tls_block
    - full
    - _push_back_ref
    linkageType: ''
    returnType: bool
    signature: bool IOBufAsZeroCopyOutputStream::Next(void** data, int* size)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/iobuf.cpp:2081,1
    - Dst: _back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2082,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2087,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2092,1
    - Dst: block::ref_count
      Src: /src/brpc/src/butil/iobuf.cpp:2101,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2105,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/iobuf.cpp:2114,1
    - Dst: inc_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2120,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/butil/iobuf.cpp:2122,1
    - Dst: _small
      Src: /src/brpc/src/butil/iobuf.cpp:2124,1
    - Dst: butil::iobuf::release_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:2137,1
    - Dst: _pop_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2145,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::_release_block
      Src: /src/brpc/src/butil/iobuf.cpp:2146,1
    - Dst: LOG_IF
      Src: /src/brpc/src/butil/iobuf.cpp:2151,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 48
    argCount: 1
    argNames:
    - count
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2152
      start: 2080
    functionDepth: 4
    functionLinenumber: 2080
    functionLinenumberEnd: 2152
    functionName: butil::IOBufAsZeroCopyOutputStream::BackUp
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 8
    functionsReached:
    - BAIDU_LIKELY
    - _pop_back_ref
    - pop_back
    - butil::IOBufAsZeroCopyOutputStream::_release_block
    - block::ref_count
    - LOG_IF
    - empty
    - inc_ref
    - _back_ref
    - LOG
    - _small
    - butil::iobuf::release_tls_block
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::BackUp(int count)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2156
      start: 2154
    functionDepth: 0
    functionLinenumber: 2154
    functionLinenumberEnd: 2156
    functionName: butil::IOBufAsZeroCopyOutputStream::ByteCount
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: google::protobuf::int64
    signature: google::protobuf::int64 IOBufAsZeroCopyOutputStream::ByteCount() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dec_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2161,1
    - Dst: butil::iobuf::release_tls_block
      Src: /src/brpc/src/butil/iobuf.cpp:2164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2167
      start: 2158
    functionDepth: 3
    functionLinenumber: 2158
    functionLinenumberEnd: 2167
    functionName: butil::IOBufAsZeroCopyOutputStream::_release_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - dec_ref
    - butil::iobuf::release_tls_block
    linkageType: ''
    returnType: void
    signature: void IOBufAsZeroCopyOutputStream::_release_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2171
      start: 2169
    functionDepth: 0
    functionLinenumber: 2169
    functionLinenumberEnd: 2171
    functionName: butil::IOBufAsSnappySink::IOBufAsSnappySink
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySink::IOBufAsSnappySink(butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/butil/iobuf.cpp:2175,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/iobuf.cpp:2175,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf.cpp:2177,1
    - Dst: append
      Src: /src/brpc/src/butil/iobuf.cpp:2180,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - bytes
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2182
      start: 2173
    functionDepth: 1
    functionLinenumber: 2173
    functionLinenumberEnd: 2182
    functionName: butil::IOBufAsSnappySink::Append
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - CHECK
    - append
    - static_cast<int>
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySink::Append(const char* bytes, size_t n)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/butil/iobuf.cpp:2187,1
    - Dst: reinterpret_cast<void**>
      Src: /src/brpc/src/butil/iobuf.cpp:2187,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/butil/iobuf.cpp:2188,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf.cpp:2191,1
    - Dst: LOG
      Src: /src/brpc/src/butil/iobuf.cpp:2194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - length
    - scratch
    argTypes:
    - size_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2200
      start: 2184
    functionDepth: 1
    functionLinenumber: 2184
    functionLinenumberEnd: 2200
    functionName: butil::IOBufAsSnappySink::GetAppendBuffer
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - Next
    - static_cast<int>
    - LOG
    - reinterpret_cast<void**>
    linkageType: ''
    returnType: char
    signature: char * IOBufAsSnappySink::GetAppendBuffer(size_t length, char* scratch)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/src/butil/iobuf.cpp:2203,1
    - Dst: ByteCount
      Src: /src/brpc/src/butil/iobuf.cpp:2203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2204
      start: 2202
    functionDepth: 0
    functionLinenumber: 2202
    functionLinenumberEnd: 2204
    functionName: butil::IOBufAsSnappySource::Available
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - length
    - ByteCount
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufAsSnappySource::Available() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsSnappySource::Skip
      Src: /src/brpc/src/butil/iobuf.cpp:2207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2208
      start: 2206
    functionDepth: 1
    functionLinenumber: 2206
    functionLinenumberEnd: 2208
    functionName: butil::IOBufAsSnappySource::Skip
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBufAsSnappySource::Skip
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySource::Skip(size_t n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Next
      Src: /src/brpc/src/butil/iobuf.cpp:2213,1
    - Dst: BackUp
      Src: /src/brpc/src/butil/iobuf.cpp:2216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2222
      start: 2210
    functionDepth: 0
    functionLinenumber: 2210
    functionLinenumberEnd: 2222
    functionName: butil::IOBufAsSnappySource::Peek
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - BackUp
    - Next
    linkageType: ''
    returnType: char
    signature: char * IOBufAsSnappySource::Peek(size_t* len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2228
      start: 2224
    functionDepth: 0
    functionLinenumber: 2224
    functionLinenumberEnd: 2228
    functionName: butil::IOBufAppender::IOBufAppender
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 28
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAppender::IOBufAppender()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _ref_at
      Src: /src/brpc/src/butil/iobuf.cpp:2233,1
    - Dst: std::min
      Src: /src/brpc/src/butil/iobuf.cpp:2235,1
    - Dst: butil::IOBuf*::_push_back_ref
      Src: /src/brpc/src/butil/iobuf.cpp:2238,1
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf.cpp:2243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - buf
    - n
    argTypes:
    - butil::IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2247
      start: 2230
    functionDepth: 1
    functionLinenumber: 2230
    functionLinenumberEnd: 2247
    functionName: butil::IOBufBytesIterator::append_and_forward
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf*::_push_back_ref
    - std::min
    - butil::IOBufBytesIterator::try_next_block
    - _ref_at
    linkageType: ''
    returnType: size_t
    signature: size_t IOBufBytesIterator::append_and_forward(butil::IOBuf* buf, size_t
      n)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufBytesIterator::try_next_block
      Src: /src/brpc/src/butil/iobuf.cpp:2257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - void**
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2259
      start: 2249
    functionDepth: 1
    functionLinenumber: 2249
    functionLinenumberEnd: 2259
    functionName: butil::IOBufBytesIterator::forward_one_block
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufBytesIterator::try_next_block
    linkageType: ''
    returnType: bool
    signature: bool IOBufBytesIterator::forward_one_block(const void** data, size_t*
      size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::iobuf::cp
      Src: /src/brpc/src/butil/iobuf.cpp:2264,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - dest
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2265
      start: 2263
    functionDepth: 1
    functionLinenumber: 2263
    functionLinenumberEnd: 2265
    functionName: fast_memcpy
    functionSourceFile: /src/brpc/src/butil/iobuf.cpp
    functionUses: 10
    functionsReached:
    - butil::iobuf::cp
    linkageType: ''
    returnType: void
    signature: void * fast_memcpy(void *__restrict dest, const void *__restrict src,
      size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/butil/crc32c.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 3
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: butil::crc32c::Value
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 17
    functionsReached:
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Value(const char* data, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::crc32c::Mask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Mask(uint32_t crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - masked_crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::crc32c::Unmask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Unmask(uint32_t masked_crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/butil/crc32c.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 3
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: butil::crc32c::Value
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 17
    functionsReached:
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Value(const char* data, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::crc32c::Mask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Mask(uint32_t crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - masked_crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::crc32c::Unmask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Unmask(uint32_t masked_crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/butil/crc32c.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 3
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: butil::crc32c::Value
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 17
    functionsReached:
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Value(const char* data, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::crc32c::Mask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Mask(uint32_t crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - masked_crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::crc32c::Unmask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Unmask(uint32_t masked_crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/butil/crc32c.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - n
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 3
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: butil::crc32c::Value
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 17
    functionsReached:
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Value(const char* data, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 41
    functionName: butil::crc32c::Mask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Mask(uint32_t crc)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - masked_crc
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 47
    functionName: butil::crc32c::Unmask
    functionSourceFile: /src/brpc/src/butil/crc32c.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t Unmask(uint32_t masked_crc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strncat
      Src: /src/brpc/src/butil/safe_strerror_posix.cc:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - (*strerror_r_ptr)(int, char *, size_t)
    - err
    - buf
    - len
    argTypes:
    - char*
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 46
    functionName: POSSIBLY_UNUSED::wrap_posix_strerror_r
    functionSourceFile: /src/brpc/src/butil/safe_strerror_posix.cc
    functionUses: 0
    functionsReached:
    - strncat
    linkageType: ''
    returnType: void
    signature: "void POSSIBLY_UNUSED wrap_posix_strerror_r(\n    char *(*strerror_r_ptr)(int,
      char *, size_t),\n    int err,\n    char *buf,\n    size_t len)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/butil/safe_strerror_posix.cc:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - err
    - buf
    - len
    argTypes:
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 97
    functionName: POSSIBLY_UNUSED::wrap_posix_strerror_r
    functionSourceFile: /src/brpc/src/butil/safe_strerror_posix.cc
    functionUses: 0
    functionsReached:
    - snprintf
    linkageType: ''
    returnType: void
    signature: "void POSSIBLY_UNUSED wrap_posix_strerror_r(\n    int (*strerror_r_ptr)(int,
      char *, size_t),\n    int err,\n    char *buf,\n    size_t len)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wrap_posix_strerror_r
      Src: /src/brpc/src/butil/safe_strerror_posix.cc:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - err
    - buf
    - len
    argTypes:
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 108
    functionName: safe_strerror_r
    functionSourceFile: /src/brpc/src/butil/safe_strerror_posix.cc
    functionUses: 0
    functionsReached:
    - wrap_posix_strerror_r
    linkageType: ''
    returnType: void
    signature: void safe_strerror_r(int err, char *buf, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: safe_strerror_r
      Src: /src/brpc/src/butil/safe_strerror_posix.cc:113,1
    - Dst: std::string
      Src: /src/brpc/src/butil/safe_strerror_posix.cc:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - err
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 115
    functionName: safe_strerror
    functionSourceFile: /src/brpc/src/butil/safe_strerror_posix.cc
    functionUses: 0
    functionsReached:
    - safe_strerror_r
    - std::string
    linkageType: ''
    returnType: std::string
    signature: std::string safe_strerror(int err)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_ushort
      Src: /src/brpc/src/butil/sys_byteorder.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - _byteswap_ushort
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_ulong
      Src: /src/brpc/src/butil/sys_byteorder.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - _byteswap_ulong
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_uint64
      Src: /src/brpc/src/butil/sys_byteorder.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - _byteswap_uint64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSwapInt16
      Src: /src/brpc/src/butil/sys_byteorder.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - OSSwapInt16
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSwapInt32
      Src: /src/brpc/src/butil/sys_byteorder.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - OSSwapInt32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSwapInt64
      Src: /src/brpc/src/butil/sys_byteorder.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - OSSwapInt64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bswap_16
      Src: /src/brpc/src/butil/sys_byteorder.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - bswap_16
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bswap_32
      Src: /src/brpc/src/butil/sys_byteorder.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - bswap_32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bswap_64
      Src: /src/brpc/src/butil/sys_byteorder.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached:
    - bswap_64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 75
    functionName: butil::ByteSwapToLE16
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwapToLE16(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: butil::ByteSwapToLE32
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwapToLE32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: butil::ByteSwapToLE64
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwapToLE64(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: butil::NetToHost16
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 10
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t NetToHost16(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 106
    functionName: butil::NetToHost32
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 36
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t NetToHost32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: butil::NetToHost64
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 8
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t NetToHost64(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 123
    functionName: butil::HostToNet16
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 22
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t HostToNet16(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 130
    functionName: butil::HostToNet32
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 50
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t HostToNet32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 137
    functionName: butil::HostToNet64
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 6
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t HostToNet64(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_ushort
      Src: /src/brpc/src/butil/sys_byteorder.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - _byteswap_ushort
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_ulong
      Src: /src/brpc/src/butil/sys_byteorder.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - _byteswap_ulong
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_uint64
      Src: /src/brpc/src/butil/sys_byteorder.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - _byteswap_uint64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSwapInt16
      Src: /src/brpc/src/butil/sys_byteorder.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - OSSwapInt16
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSwapInt32
      Src: /src/brpc/src/butil/sys_byteorder.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - OSSwapInt32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSwapInt64
      Src: /src/brpc/src/butil/sys_byteorder.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - OSSwapInt64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bswap_16
      Src: /src/brpc/src/butil/sys_byteorder.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - bswap_16
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bswap_32
      Src: /src/brpc/src/butil/sys_byteorder.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - bswap_32
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bswap_64
      Src: /src/brpc/src/butil/sys_byteorder.h:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached:
    - bswap_64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwap(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 58
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwap(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: butil::ByteSwap
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwap(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 75
    functionName: butil::ByteSwapToLE16
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t ByteSwapToLE16(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: butil::ByteSwapToLE32
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ByteSwapToLE32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: butil::ByteSwapToLE64
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 0
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t ByteSwapToLE64(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: butil::NetToHost16
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 10
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t NetToHost16(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 106
    functionName: butil::NetToHost32
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 36
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t NetToHost32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 113
    functionName: butil::NetToHost64
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 8
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t NetToHost64(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 123
    functionName: butil::HostToNet16
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 22
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t HostToNet16(uint16_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 130
    functionName: butil::HostToNet32
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 50
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t HostToNet32(uint32_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwap
      Src: /src/brpc/src/butil/sys_byteorder.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 137
    functionName: butil::HostToNet64
    functionSourceFile: /src/brpc/src/butil/sys_byteorder.h
    functionUses: 6
    functionsReached:
    - butil::ByteSwap
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t HostToNet64(uint64_t x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/guid_posix.cc:13,1
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/guid_posix.cc:13,1
    - Dst: butil::RandomDataToGUIDString
      Src: /src/brpc/src/butil/guid_posix.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 12
    functionDepth: 2
    functionLinenumber: 12
    functionLinenumberEnd: 15
    functionName: butil::GenerateGUID
    functionSourceFile: /src/brpc/src/butil/guid_posix.cc
    functionUses: 2
    functionsReached:
    - butil::RandomDataToGUIDString
    - butil::RandUint64
    linkageType: ''
    returnType: std::string
    signature: std::string GenerateGUID()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/guid_posix.cc:20,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:21,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:22,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:23,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - uint64_t[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 26
    functionName: butil::RandomDataToGUIDString
    functionSourceFile: /src/brpc/src/butil/guid_posix.cc
    functionUses: 3
    functionsReached:
    - static_cast<unsigned int>
    - butil::StringPrintf
    linkageType: ''
    returnType: std::string
    signature: std::string RandomDataToGUIDString(const uint64_t bytes[2])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/guid_posix.cc:13,1
    - Dst: butil::RandUint64
      Src: /src/brpc/src/butil/guid_posix.cc:13,1
    - Dst: butil::RandomDataToGUIDString
      Src: /src/brpc/src/butil/guid_posix.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 12
    functionDepth: 2
    functionLinenumber: 12
    functionLinenumberEnd: 15
    functionName: butil::GenerateGUID
    functionSourceFile: /src/brpc/src/butil/guid_posix.cc
    functionUses: 2
    functionsReached:
    - butil::RandomDataToGUIDString
    - butil::RandUint64
    linkageType: ''
    returnType: std::string
    signature: std::string GenerateGUID()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/guid_posix.cc:20,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:21,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:22,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:23,1
    - Dst: static_cast<unsigned int>
      Src: /src/brpc/src/butil/guid_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - uint64_t[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 26
    functionName: butil::RandomDataToGUIDString
    functionSourceFile: /src/brpc/src/butil/guid_posix.cc
    functionUses: 4
    functionsReached:
    - static_cast<unsigned int>
    - butil::StringPrintf
    linkageType: ''
    returnType: std::string
    signature: std::string RandomDataToGUIDString(const uint64_t bytes[2])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Environment
      Src: /src/brpc/src/butil/environment.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 47
    functionName: butil::Environment
    functionSourceFile: /src/brpc/src/butil/environment.h
    functionUses: 1
    functionsReached:
    - butil::Environment
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Environment
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Environment
      Src: /src/brpc/src/butil/environment.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 47
    functionName: butil::Environment
    functionSourceFile: /src/brpc/src/butil/environment.h
    functionUses: 2
    functionsReached:
    - butil::Environment
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Environment
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - tm
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: butil::timespec_normalize
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void timespec_normalize(timespec* tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/src/butil/time.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - tm
    - ' span'
    argTypes:
    - timespec*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: butil::timespec_add
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::timespec_normalize
    linkageType: ''
    returnType: void
    signature: void timespec_add(timespec *tm, const timespec& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/src/butil/time.h:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - tm
    - ' span'
    argTypes:
    - timespec*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: butil::timespec_minus
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::timespec_normalize
    linkageType: ''
    returnType: void
    signature: void timespec_minus(timespec *tm, const timespec& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/src/butil/time.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - start_time
    - nanoseconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 85
    functionName: butil::nanoseconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::timespec_normalize
    linkageType: ''
    returnType: timespec
    signature: timespec nanoseconds_from(timespec start_time, int64_t nanoseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - start_time
    - microseconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 2
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::microseconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec microseconds_from(timespec start_time, int64_t microseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - start_time
    - milliseconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 2
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: butil::milliseconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec milliseconds_from(timespec start_time, int64_t milliseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - start_time
    - seconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 2
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: butil::seconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec seconds_from(timespec start_time, int64_t seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:104,1
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - nanoseconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 106
    functionName: butil::nanoseconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - clock_gettime
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec nanoseconds_from_now(int64_t nanoseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/src/butil/time.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - microseconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 3
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: butil::microseconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 18
    functionsReached:
    - butil::nanoseconds_from_now
    linkageType: ''
    returnType: timespec
    signature: timespec microseconds_from_now(int64_t microseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/src/butil/time.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - milliseconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 3
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: butil::milliseconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 37
    functionsReached:
    - butil::nanoseconds_from_now
    linkageType: ''
    returnType: timespec
    signature: timespec milliseconds_from_now(int64_t milliseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/src/butil/time.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - seconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 3
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: butil::seconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 10
    functionsReached:
    - butil::nanoseconds_from_now
    linkageType: ''
    returnType: timespec
    signature: timespec seconds_from_now(int64_t seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:122,1
    - Dst: butil::timespec_add
      Src: /src/brpc/src/butil/time.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 125
    functionName: butil::timespec_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - clock_gettime
    - butil::timespec_add
    linkageType: ''
    returnType: timespec
    signature: timespec timespec_from_now(const timespec& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: butil::timespec_to_nanoseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_nanoseconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_nanoseconds
      Src: /src/brpc/src/butil/time.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: butil::timespec_to_microseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 15
    functionsReached:
    - butil::timespec_to_nanoseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_microseconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_nanoseconds
      Src: /src/brpc/src/butil/time.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: butil::timespec_to_milliseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 4
    functionsReached:
    - butil::timespec_to_nanoseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_milliseconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_nanoseconds
      Src: /src/brpc/src/butil/time.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::timespec_to_seconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::timespec_to_nanoseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_seconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ns
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: butil::nanoseconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: timespec
    signature: timespec nanoseconds_to_timespec(int64_t ns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_to_timespec
      Src: /src/brpc/src/butil/time.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: butil::microseconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 21
    functionsReached:
    - butil::nanoseconds_to_timespec
    linkageType: ''
    returnType: timespec
    signature: timespec microseconds_to_timespec(int64_t us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_to_timespec
      Src: /src/brpc/src/butil/time.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: butil::milliseconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_to_timespec
    linkageType: ''
    returnType: timespec
    signature: timespec milliseconds_to_timespec(int64_t ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_to_timespec
      Src: /src/brpc/src/butil/time.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: butil::seconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::nanoseconds_to_timespec
    linkageType: ''
    returnType: timespec
    signature: timespec seconds_to_timespec(int64_t s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tv'
    argTypes:
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::timeval_to_microseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeval_to_microseconds(const timeval& tv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/butil/time.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tv'
    argTypes:
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: butil::timeval_to_milliseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeval_to_milliseconds(const timeval& tv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/butil/time.h:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tv'
    argTypes:
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: butil::timeval_to_seconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeval_to_seconds(const timeval& tv)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 189
    functionName: butil::microseconds_to_timeval
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: timeval
    signature: timeval microseconds_to_timeval(int64_t us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::microseconds_to_timeval
      Src: /src/brpc/src/butil/time.h:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: butil::milliseconds_to_timeval
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::microseconds_to_timeval
    linkageType: ''
    returnType: timeval
    signature: timeval milliseconds_to_timeval(int64_t ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::microseconds_to_timeval
      Src: /src/brpc/src/butil/time.h:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 197
    functionName: butil::seconds_to_timeval
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::microseconds_to_timeval
    linkageType: ''
    returnType: timeval
    signature: timeval seconds_to_timeval(int64_t s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 2
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: butil::monotonic_time_us
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::monotonic_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 210
    functionName: butil::monotonic_time_ms
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::monotonic_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: butil::monotonic_time_s
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::monotonic_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_s()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/time.h:243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 260
    functionName: butil::detail::clock_cycles
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t clock_cycles()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/time.h:243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 260
    functionName: butil::detail::clock_cycles
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t clock_cycles()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:283,1
    - Dst: butil::detail::clock_cycles
      Src: /src/brpc/src/butil/time.h:288,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:296,1
    - Dst: butil::detail::read_invariant_cpu_frequency
      Src: /src/brpc/src/butil/time.h:300,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:301,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 274
    functionDepth: 2
    functionLinenumber: 274
    functionLinenumberEnd: 304
    functionName: butil::cpuwide_time_ns
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 49
    functionsReached:
    - butil::detail::clock_cycles
    - butil::monotonic_time_ns
    - butil::cpuwide_time_ns
    - clock_gettime
    - butil::detail::read_invariant_cpu_frequency
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_ns()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 312
    functionName: butil::cputhread_time_ns
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 4
    functionsReached:
    - clock_gettime
    linkageType: ''
    returnType: int64_t
    signature: int64_t cputhread_time_ns()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 316
    functionName: butil::cpuwide_time_us
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 166
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 318
    functionDepth: 3
    functionLinenumber: 318
    functionLinenumberEnd: 320
    functionName: butil::cpuwide_time_ms
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 19
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 324
    functionName: butil::cpuwide_time_s
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_s()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/src/butil/time.h:333,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 335
    functionName: butil::gettimeofday_us
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 190
    functionsReached:
    - gettimeofday
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/time.h:338,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 339
    functionName: butil::gettimeofday_ms
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 16
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/time.h:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: butil::gettimeofday_s
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_s()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_us
      Src: /src/brpc/src/butil/time.h:359,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - interval_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 360
    functionName: butil::EveryManyUS::EveryManyUS
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void EveryManyUS(int64_t interval_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/butil/time.h:363,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 362
    functionDepth: 4
    functionLinenumber: 362
    functionLinenumberEnd: 369
    functionName: operator bool()
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void operator bool()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 386
    functionName: butil::Timer::Timer
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 190
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Timer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::start
      Src: /src/brpc/src/butil/time.h:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: butil::Timer::Timer
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 190
    functionsReached:
    - butil::Timer::start
    linkageType: ''
    returnType: void
    signature: void Timer(const TimerType)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: butil::Timer::start
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 183
    functionsReached:
    - cpuwide_time_ns
    linkageType: ''
    returnType: void
    signature: void start()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 400
    functionName: butil::Timer::stop
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 185
    functionsReached:
    - cpuwide_time_ns
    linkageType: ''
    returnType: void
    signature: void stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: butil::Timer::n_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 98
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t n_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/butil/time.h:404,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 404
    functionDepth: 1
    functionLinenumber: 404
    functionLinenumberEnd: 404
    functionName: butil::Timer::u_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 42
    functionsReached:
    - butil::Timer::n_elapsed
    linkageType: ''
    returnType: int64_t
    signature: int64_t u_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/butil/time.h:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 2
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::Timer::m_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 47
    functionsReached:
    - butil::Timer::u_elapsed
    linkageType: ''
    returnType: int64_t
    signature: int64_t m_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/butil/time.h:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 406
    functionDepth: 3
    functionLinenumber: 406
    functionLinenumberEnd: 406
    functionName: butil::Timer::s_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::Timer::m_elapsed
    linkageType: ''
    returnType: int64_t
    signature: int64_t s_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 408
    functionName: butil::Timer::n_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 99
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double n_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/butil/time.h:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 409
    functionDepth: 1
    functionLinenumber: 409
    functionLinenumberEnd: 409
    functionName: butil::Timer::u_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 43
    functionsReached:
    - butil::Timer::n_elapsed
    linkageType: ''
    returnType: double
    signature: double u_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/butil/time.h:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 410
    functionDepth: 2
    functionLinenumber: 410
    functionLinenumberEnd: 410
    functionName: butil::Timer::m_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 48
    functionsReached:
    - butil::Timer::u_elapsed
    linkageType: ''
    returnType: double
    signature: double m_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/butil/time.h:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 411
    functionDepth: 3
    functionLinenumber: 411
    functionLinenumberEnd: 411
    functionName: butil::Timer::s_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::Timer::m_elapsed
    linkageType: ''
    returnType: double
    signature: double s_elapsed(double) const
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - tm
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 61
    functionName: butil::timespec_normalize
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void timespec_normalize(timespec* tm)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/src/butil/time.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - tm
    - ' span'
    argTypes:
    - timespec*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 68
    functionName: butil::timespec_add
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 3
    functionsReached:
    - butil::timespec_normalize
    linkageType: ''
    returnType: void
    signature: void timespec_add(timespec *tm, const timespec& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/src/butil/time.h:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - tm
    - ' span'
    argTypes:
    - timespec*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: butil::timespec_minus
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::timespec_normalize
    linkageType: ''
    returnType: void
    signature: void timespec_minus(timespec *tm, const timespec& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_normalize
      Src: /src/brpc/src/butil/time.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - start_time
    - nanoseconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 85
    functionName: butil::nanoseconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 6
    functionsReached:
    - butil::timespec_normalize
    linkageType: ''
    returnType: timespec
    signature: timespec nanoseconds_from(timespec start_time, int64_t nanoseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - start_time
    - microseconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 2
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: butil::microseconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec microseconds_from(timespec start_time, int64_t microseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - start_time
    - milliseconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 2
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: butil::milliseconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec milliseconds_from(timespec start_time, int64_t milliseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - start_time
    - seconds
    argTypes:
    - timespec
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 2
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: butil::seconds_from
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec seconds_from(timespec start_time, int64_t seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:104,1
    - Dst: butil::nanoseconds_from
      Src: /src/brpc/src/butil/time.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - nanoseconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 102
    functionDepth: 2
    functionLinenumber: 102
    functionLinenumberEnd: 106
    functionName: butil::nanoseconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 3
    functionsReached:
    - clock_gettime
    - butil::nanoseconds_from
    linkageType: ''
    returnType: timespec
    signature: timespec nanoseconds_from_now(int64_t nanoseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/src/butil/time.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - microseconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 3
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: butil::microseconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 18
    functionsReached:
    - butil::nanoseconds_from_now
    linkageType: ''
    returnType: timespec
    signature: timespec microseconds_from_now(int64_t microseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/src/butil/time.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - milliseconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 3
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: butil::milliseconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 37
    functionsReached:
    - butil::nanoseconds_from_now
    linkageType: ''
    returnType: timespec
    signature: timespec milliseconds_from_now(int64_t milliseconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/src/butil/time.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - seconds
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 3
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: butil::seconds_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 10
    functionsReached:
    - butil::nanoseconds_from_now
    linkageType: ''
    returnType: timespec
    signature: timespec seconds_from_now(int64_t seconds)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:122,1
    - Dst: butil::timespec_add
      Src: /src/brpc/src/butil/time.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 125
    functionName: butil::timespec_from_now
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - clock_gettime
    - butil::timespec_add
    linkageType: ''
    returnType: timespec
    signature: timespec timespec_from_now(const timespec& span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 134
    functionName: butil::timespec_to_nanoseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_nanoseconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_nanoseconds
      Src: /src/brpc/src/butil/time.h:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: butil::timespec_to_microseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 15
    functionsReached:
    - butil::timespec_to_nanoseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_microseconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_nanoseconds
      Src: /src/brpc/src/butil/time.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: butil::timespec_to_milliseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 4
    functionsReached:
    - butil::timespec_to_nanoseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_milliseconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timespec_to_nanoseconds
      Src: /src/brpc/src/butil/time.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ts'
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: butil::timespec_to_seconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::timespec_to_nanoseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timespec_to_seconds(const timespec& ts)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ns
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: butil::nanoseconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: timespec
    signature: timespec nanoseconds_to_timespec(int64_t ns)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_to_timespec
      Src: /src/brpc/src/butil/time.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: butil::microseconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 21
    functionsReached:
    - butil::nanoseconds_to_timespec
    linkageType: ''
    returnType: timespec
    signature: timespec microseconds_to_timespec(int64_t us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_to_timespec
      Src: /src/brpc/src/butil/time.h:160,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: butil::milliseconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::nanoseconds_to_timespec
    linkageType: ''
    returnType: timespec
    signature: timespec milliseconds_to_timespec(int64_t ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_to_timespec
      Src: /src/brpc/src/butil/time.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 165
    functionName: butil::seconds_to_timespec
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::nanoseconds_to_timespec
    linkageType: ''
    returnType: timespec
    signature: timespec seconds_to_timespec(int64_t s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tv'
    argTypes:
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::timeval_to_microseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeval_to_microseconds(const timeval& tv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/butil/time.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tv'
    argTypes:
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: butil::timeval_to_milliseconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeval_to_milliseconds(const timeval& tv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/butil/time.h:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' tv'
    argTypes:
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 182
    functionName: butil::timeval_to_seconds
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    linkageType: ''
    returnType: int64_t
    signature: int64_t timeval_to_seconds(const timeval& tv)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 189
    functionName: butil::microseconds_to_timeval
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: timeval
    signature: timeval microseconds_to_timeval(int64_t us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::microseconds_to_timeval
      Src: /src/brpc/src/butil/time.h:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: butil::milliseconds_to_timeval
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::microseconds_to_timeval
    linkageType: ''
    returnType: timeval
    signature: timeval milliseconds_to_timeval(int64_t ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::microseconds_to_timeval
      Src: /src/brpc/src/butil/time.h:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 197
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 197
    functionName: butil::seconds_to_timeval
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::microseconds_to_timeval
    linkageType: ''
    returnType: timeval
    signature: timeval seconds_to_timeval(int64_t s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 204
    functionDepth: 2
    functionLinenumber: 204
    functionLinenumberEnd: 206
    functionName: butil::monotonic_time_us
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 2
    functionsReached:
    - butil::monotonic_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 210
    functionName: butil::monotonic_time_ms
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::monotonic_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 214
    functionName: butil::monotonic_time_s
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::monotonic_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t monotonic_time_s()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/time.h:243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 260
    functionName: butil::detail::clock_cycles
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 1
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t clock_cycles()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/time.h:243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 260
    functionName: butil::detail::clock_cycles
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 1
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t clock_cycles()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:283,1
    - Dst: butil::detail::clock_cycles
      Src: /src/brpc/src/butil/time.h:288,1
    - Dst: butil::monotonic_time_ns
      Src: /src/brpc/src/butil/time.h:296,1
    - Dst: butil::detail::read_invariant_cpu_frequency
      Src: /src/brpc/src/butil/time.h:300,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:301,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 274
    functionDepth: 2
    functionLinenumber: 274
    functionLinenumberEnd: 304
    functionName: butil::cpuwide_time_ns
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 53
    functionsReached:
    - butil::detail::clock_cycles
    - butil::monotonic_time_ns
    - butil::cpuwide_time_ns
    - clock_gettime
    - butil::detail::read_invariant_cpu_frequency
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_ns()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/butil/time.h:310,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 312
    functionName: butil::cputhread_time_ns
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 4
    functionsReached:
    - clock_gettime
    linkageType: ''
    returnType: int64_t
    signature: int64_t cputhread_time_ns()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:315,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 316
    functionName: butil::cpuwide_time_us
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 167
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 318
    functionDepth: 3
    functionLinenumber: 318
    functionLinenumberEnd: 320
    functionName: butil::cpuwide_time_ms
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 19
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 322
    functionDepth: 3
    functionLinenumber: 322
    functionLinenumberEnd: 324
    functionName: butil::cpuwide_time_s
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: int64_t
    signature: int64_t cpuwide_time_s()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/brpc/src/butil/time.h:333,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 335
    functionName: butil::gettimeofday_us
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 192
    functionsReached:
    - gettimeofday
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_us()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/time.h:338,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 339
    functionName: butil::gettimeofday_ms
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 16
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_ms()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/butil/time.h:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: butil::gettimeofday_s
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    linkageType: ''
    returnType: int64_t
    signature: int64_t gettimeofday_s()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_us
      Src: /src/brpc/src/butil/time.h:359,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - interval_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 360
    functionName: butil::EveryManyUS::EveryManyUS
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void EveryManyUS(int64_t interval_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_us
      Src: /src/brpc/src/butil/time.h:363,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 362
    functionDepth: 0
    functionLinenumber: 362
    functionLinenumberEnd: 369
    functionName: operator bool()
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void operator bool()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 386
    functionName: butil::Timer::Timer
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 190
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Timer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::start
      Src: /src/brpc/src/butil/time.h:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 389
    functionName: butil::Timer::Timer
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 190
    functionsReached:
    - butil::Timer::start
    linkageType: ''
    returnType: void
    signature: void Timer(const TimerType)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: butil::Timer::start
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 184
    functionsReached:
    - cpuwide_time_ns
    linkageType: ''
    returnType: void
    signature: void start()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cpuwide_time_ns
      Src: /src/brpc/src/butil/time.h:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 400
    functionName: butil::Timer::stop
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 185
    functionsReached:
    - cpuwide_time_ns
    linkageType: ''
    returnType: void
    signature: void stop()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 403
    functionName: butil::Timer::n_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 100
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t n_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/butil/time.h:404,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 404
    functionDepth: 1
    functionLinenumber: 404
    functionLinenumberEnd: 404
    functionName: butil::Timer::u_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 44
    functionsReached:
    - butil::Timer::n_elapsed
    linkageType: ''
    returnType: int64_t
    signature: int64_t u_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/butil/time.h:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 2
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::Timer::m_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 49
    functionsReached:
    - butil::Timer::u_elapsed
    linkageType: ''
    returnType: int64_t
    signature: int64_t m_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/butil/time.h:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 406
    functionDepth: 3
    functionLinenumber: 406
    functionLinenumberEnd: 406
    functionName: butil::Timer::s_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::Timer::m_elapsed
    linkageType: ''
    returnType: int64_t
    signature: int64_t s_elapsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 408
    functionName: butil::Timer::n_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 101
    functionsReached: []
    linkageType: ''
    returnType: double
    signature: double n_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/butil/time.h:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 409
    functionDepth: 1
    functionLinenumber: 409
    functionLinenumberEnd: 409
    functionName: butil::Timer::u_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 45
    functionsReached:
    - butil::Timer::n_elapsed
    linkageType: ''
    returnType: double
    signature: double u_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/src/butil/time.h:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 410
    functionDepth: 2
    functionLinenumber: 410
    functionLinenumberEnd: 410
    functionName: butil::Timer::m_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 50
    functionsReached:
    - butil::Timer::u_elapsed
    linkageType: ''
    returnType: double
    signature: double m_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/butil/time.h:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 411
    functionDepth: 3
    functionLinenumber: 411
    functionLinenumberEnd: 411
    functionName: butil::Timer::s_elapsed
    functionSourceFile: /src/brpc/src/butil/time.h
    functionUses: 0
    functionsReached:
    - butil::Timer::m_elapsed
    linkageType: ''
    returnType: double
    signature: double s_elapsed(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - input
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: butil::SizeChecksum
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t SizeChecksum(uint32_t input)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:79,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: butil::Record::Meta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 4
    functionsReached:
    - size
    - data::get
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * Record::Meta(const char* name) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:89,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:91,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/recordio.cc:94,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:95,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/butil/recordio.cc:97,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:98,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/butil/recordio.cc:102,1
    - Dst: std::make_shared<butil::IOBuf>
      Src: /src/brpc/src/butil/recordio.cc:103,1
    - Dst: push_back
      Src: /src/brpc/src/butil/recordio.cc:104,1
    - Dst: NamedMeta::data::get
      Src: /src/brpc/src/butil/recordio.cc:105,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - name_cstr
    - null_on_found
    argTypes:
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 106
    functionName: butil::Record::MutableMeta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 10
    functionsReached:
    - NamedMeta::data::get
    - std::make_shared<butil::IOBuf>
    - data::get
    - butil::StringPiece::CopyToString
    - push_back
    - size
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * Record::MutableMeta(const char* name_cstr, bool null_on_found)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:109,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:111,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:114,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:115,1
    - Dst: empty
      Src: /src/brpc/src/butil/recordio.cc:117,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:118,1
    - Dst: std::make_shared<butil::IOBuf>
      Src: /src/brpc/src/butil/recordio.cc:123,1
    - Dst: push_back
      Src: /src/brpc/src/butil/recordio.cc:124,1
    - Dst: NamedMeta::data::get
      Src: /src/brpc/src/butil/recordio.cc:125,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - ' name'
    - null_on_found
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 126
    functionName: butil::Record::MutableMeta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 10
    functionsReached:
    - NamedMeta::data::get
    - std::make_shared<butil::IOBuf>
    - data::get
    - push_back
    - empty
    - size
    - LOG
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * Record::MutableMeta(const std::string& name, bool null_on_found)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:129,1
    - Dst: back
      Src: /src/brpc/src/butil/recordio.cc:131,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 137
    functionName: butil::Record::RemoveMeta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 4
    functionsReached:
    - size
    - pop_back
    - back
    linkageType: ''
    returnType: bool
    signature: bool Record::RemoveMeta(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/recordio.cc:140,1
    - Dst: clear
      Src: /src/brpc/src/butil/recordio.cc:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: butil::Record::Clear
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Record::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:145,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:146,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:148,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 151
    functionName: butil::Record::ByteSize
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 2
    functionsReached:
    - size
    - name::size
    - data::size
    linkageType: ''
    returnType: size_t
    signature: size_t Record::ByteSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - reader
    argTypes:
    - IReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 158
    functionName: butil::RecordReader::RecordReader
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RecordReader::RecordReader(IReader* reader)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::RecordReader::CutRecord
      Src: /src/brpc/src/butil/recordio.cc:163,1
    - Dst: butil::RecordReader::CutUntilNextRecordCandidate
      Src: /src/brpc/src/butil/recordio.cc:168,1
    - Dst: append_from_reader
      Src: /src/brpc/src/butil/recordio.cc:169,1
    - Dst: append_from_reader
      Src: /src/brpc/src/butil/recordio.cc:176,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - out
    argTypes:
    - Record*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 183
    functionName: butil::RecordReader::ReadNext
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 6
    functionsReached:
    - butil::RecordReader::CutRecord
    - append_from_reader
    - butil::RecordReader::CutUntilNextRecordCandidate
    linkageType: ''
    returnType: bool
    signature: bool RecordReader::ReadNext(Record* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: copy_to
      Src: /src/brpc/src/butil/recordio.cc:189,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:194,1
    - Dst: copy_to
      Src: /src/brpc/src/butil/recordio.cc:199,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:207,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:209,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 219
    functionName: butil::RecordReader::CutUntilNextRecordCandidate
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 1
    functionsReached:
    - copy_to
    - LOG
    - pop_front
    linkageType: ''
    returnType: bool
    signature: bool RecordReader::CutUntilNextRecordCandidate()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: copy_to
      Src: /src/brpc/src/butil/recordio.cc:223,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:228,1
    - Dst: butil::PrintedAsBinary
      Src: /src/brpc/src/butil/recordio.cc:229,1
    - Dst: std::string
      Src: /src/brpc/src/butil/recordio.cc:229,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:230,1
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/recordio.cc:233,1
    - Dst: SizeChecksum
      Src: /src/brpc/src/butil/recordio.cc:234,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:240,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:244,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:250,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:253,1
    - Dst: remaining_bytes
      Src: /src/brpc/src/butil/recordio.cc:256,1
    - Dst: Record*::Clear
      Src: /src/brpc/src/butil/recordio.cc:259,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:260,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/recordio.cc:265,1
    - Dst: cut1
      Src: /src/brpc/src/butil/recordio.cc:265,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:268,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:269,1
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/recordio.cc:270,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:275,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:277,1
    - Dst: Record*::MutableMeta
      Src: /src/brpc/src/butil/recordio.cc:280,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:282,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:283,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:286,1
    - Dst: Record*::Payload
      Src: /src/brpc/src/butil/recordio.cc:290,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:291,1
    - Dst: Record*::MutablePayload
      Src: /src/brpc/src/butil/recordio.cc:291,1
    - Dst: Record*::Payload
      Src: /src/brpc/src/butil/recordio.cc:292,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:294,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:297,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 49
    argCount: 1
    argNames:
    - rec
    argTypes:
    - Record*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 301
    functionName: butil::RecordReader::CutRecord
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 1
    functionsReached:
    - butil::RecordReader::offset
    - NetToHost32
    - copy_to
    - SizeChecksum
    - std::string
    - butil::PrintedAsBinary
    - Record*::MutablePayload
    - cut1
    - Record*::Clear
    - Record*::MutableMeta
    - pop_front
    - CHECK
    - cutn
    - Record*::Payload
    - LOG
    - remaining_bytes
    linkageType: ''
    returnType: int
    signature: int RecordReader::CutRecord(Record* rec)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - writer
    argTypes:
    - IWriter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 305
    functionName: butil::RecordWriter::RecordWriter
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RecordWriter::RecordWriter(IWriter* writer)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:308,1
    - Dst: reserve
      Src: /src/brpc/src/butil/recordio.cc:310,1
    - Dst: MetaCount
      Src: /src/brpc/src/butil/recordio.cc:311,1
    - Dst: MetaAt
      Src: /src/brpc/src/butil/recordio.cc:312,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:313,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:314,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:315,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:315,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:318,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:320,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/recordio.cc:322,1
    - Dst: name::data
      Src: /src/brpc/src/butil/recordio.cc:322,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:322,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:323,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:324,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:325,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:326,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:327,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:327,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:330,1
    - Dst: MetaCount
      Src: /src/brpc/src/butil/recordio.cc:331,1
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/recordio.cc:334,1
    - Dst: append
      Src: /src/brpc/src/butil/recordio.cc:335,1
    - Dst: append
      Src: /src/brpc/src/butil/recordio.cc:336,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:336,1
    - Dst: Payload
      Src: /src/brpc/src/butil/recordio.cc:338,1
    - Dst: append
      Src: /src/brpc/src/butil/recordio.cc:339,1
    - Dst: Payload
      Src: /src/brpc/src/butil/recordio.cc:339,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:343,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:345,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:346,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:346,1
    - Dst: MetaCount
      Src: /src/brpc/src/butil/recordio.cc:350,1
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/recordio.cc:353,1
    - Dst: SizeChecksum
      Src: /src/brpc/src/butil/recordio.cc:354,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/butil/recordio.cc:355,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 1
    argNames:
    - ' rec'
    argTypes:
    - Record
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 357
    functionName: butil::RecordWriter::WriteWithoutFlush
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached:
    - append
    - reserve
    - Payload
    - pop_back
    - SizeChecksum
    - name::data
    - MetaCount
    - data::get
    - MetaAt
    - name::size
    - data::size
    - unsafe_assign
    - memcpy
    - size
    - LOG
    - HostToNet32
    linkageType: ''
    returnType: int
    signature: int RecordWriter::WriteWithoutFlush(const Record& rec)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cut_into_writer
      Src: /src/brpc/src/butil/recordio.cc:362,1
    - Dst: empty
      Src: /src/brpc/src/butil/recordio.cc:371,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 377
    functionName: butil::RecordWriter::Flush
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 6
    functionsReached:
    - empty
    - cut_into_writer
    linkageType: ''
    returnType: int
    signature: int RecordWriter::Flush()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::RecordWriter::WriteWithoutFlush
      Src: /src/brpc/src/butil/recordio.cc:380,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/src/butil/recordio.cc:384,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' record'
    argTypes:
    - Record
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 379
    functionDepth: 2
    functionLinenumber: 379
    functionLinenumberEnd: 385
    functionName: butil::RecordWriter::Write
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 6
    functionsReached:
    - butil::RecordWriter::Flush
    - butil::RecordWriter::WriteWithoutFlush
    linkageType: ''
    returnType: int
    signature: int RecordWriter::Write(const Record& record)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - input
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 76
    functionName: butil::SizeChecksum
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t SizeChecksum(uint32_t input)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:79,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: butil::Record::Meta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 4
    functionsReached:
    - size
    - data::get
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * Record::Meta(const char* name) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:89,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:91,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/butil/recordio.cc:94,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:95,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/butil/recordio.cc:97,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:98,1
    - Dst: butil::StringPiece::CopyToString
      Src: /src/brpc/src/butil/recordio.cc:102,1
    - Dst: std::make_shared<butil::IOBuf>
      Src: /src/brpc/src/butil/recordio.cc:103,1
    - Dst: push_back
      Src: /src/brpc/src/butil/recordio.cc:104,1
    - Dst: NamedMeta::data::get
      Src: /src/brpc/src/butil/recordio.cc:105,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - name_cstr
    - null_on_found
    argTypes:
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 106
    functionName: butil::Record::MutableMeta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 10
    functionsReached:
    - NamedMeta::data::get
    - std::make_shared<butil::IOBuf>
    - data::get
    - butil::StringPiece::CopyToString
    - push_back
    - size
    - butil::StringPiece::empty
    - LOG
    - butil::StringPiece::size
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * Record::MutableMeta(const char* name_cstr, bool null_on_found)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:109,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:111,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:114,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:115,1
    - Dst: empty
      Src: /src/brpc/src/butil/recordio.cc:117,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:118,1
    - Dst: std::make_shared<butil::IOBuf>
      Src: /src/brpc/src/butil/recordio.cc:123,1
    - Dst: push_back
      Src: /src/brpc/src/butil/recordio.cc:124,1
    - Dst: NamedMeta::data::get
      Src: /src/brpc/src/butil/recordio.cc:125,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - ' name'
    - null_on_found
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 126
    functionName: butil::Record::MutableMeta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 10
    functionsReached:
    - NamedMeta::data::get
    - std::make_shared<butil::IOBuf>
    - data::get
    - push_back
    - empty
    - size
    - LOG
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf * Record::MutableMeta(const std::string& name, bool null_on_found)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:129,1
    - Dst: back
      Src: /src/brpc/src/butil/recordio.cc:131,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 137
    functionName: butil::Record::RemoveMeta
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 4
    functionsReached:
    - size
    - pop_back
    - back
    linkageType: ''
    returnType: bool
    signature: bool Record::RemoveMeta(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/recordio.cc:140,1
    - Dst: clear
      Src: /src/brpc/src/butil/recordio.cc:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 142
    functionName: butil::Record::Clear
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void Record::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:145,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:146,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:148,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 151
    functionName: butil::Record::ByteSize
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 2
    functionsReached:
    - size
    - name::size
    - data::size
    linkageType: ''
    returnType: size_t
    signature: size_t Record::ByteSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - reader
    argTypes:
    - IReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 158
    functionName: butil::RecordReader::RecordReader
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RecordReader::RecordReader(IReader* reader)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::RecordReader::CutRecord
      Src: /src/brpc/src/butil/recordio.cc:163,1
    - Dst: butil::RecordReader::CutUntilNextRecordCandidate
      Src: /src/brpc/src/butil/recordio.cc:168,1
    - Dst: append_from_reader
      Src: /src/brpc/src/butil/recordio.cc:169,1
    - Dst: append_from_reader
      Src: /src/brpc/src/butil/recordio.cc:176,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - out
    argTypes:
    - Record*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 160
    functionDepth: 2
    functionLinenumber: 160
    functionLinenumberEnd: 183
    functionName: butil::RecordReader::ReadNext
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 6
    functionsReached:
    - butil::RecordReader::CutRecord
    - append_from_reader
    - butil::RecordReader::CutUntilNextRecordCandidate
    linkageType: ''
    returnType: bool
    signature: bool RecordReader::ReadNext(Record* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: copy_to
      Src: /src/brpc/src/butil/recordio.cc:189,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:194,1
    - Dst: copy_to
      Src: /src/brpc/src/butil/recordio.cc:199,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:207,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:209,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 219
    functionName: butil::RecordReader::CutUntilNextRecordCandidate
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 2
    functionsReached:
    - copy_to
    - LOG
    - pop_front
    linkageType: ''
    returnType: bool
    signature: bool RecordReader::CutUntilNextRecordCandidate()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: copy_to
      Src: /src/brpc/src/butil/recordio.cc:223,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:228,1
    - Dst: butil::PrintedAsBinary
      Src: /src/brpc/src/butil/recordio.cc:229,1
    - Dst: std::string
      Src: /src/brpc/src/butil/recordio.cc:229,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:230,1
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/recordio.cc:233,1
    - Dst: SizeChecksum
      Src: /src/brpc/src/butil/recordio.cc:234,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:240,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:244,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:250,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:253,1
    - Dst: remaining_bytes
      Src: /src/brpc/src/butil/recordio.cc:256,1
    - Dst: Record*::Clear
      Src: /src/brpc/src/butil/recordio.cc:259,1
    - Dst: pop_front
      Src: /src/brpc/src/butil/recordio.cc:260,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/recordio.cc:265,1
    - Dst: cut1
      Src: /src/brpc/src/butil/recordio.cc:265,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:268,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:269,1
    - Dst: NetToHost32
      Src: /src/brpc/src/butil/recordio.cc:270,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:275,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:277,1
    - Dst: Record*::MutableMeta
      Src: /src/brpc/src/butil/recordio.cc:280,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:282,1
    - Dst: butil::RecordReader::offset
      Src: /src/brpc/src/butil/recordio.cc:283,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:286,1
    - Dst: Record*::Payload
      Src: /src/brpc/src/butil/recordio.cc:290,1
    - Dst: cutn
      Src: /src/brpc/src/butil/recordio.cc:291,1
    - Dst: Record*::MutablePayload
      Src: /src/brpc/src/butil/recordio.cc:291,1
    - Dst: Record*::Payload
      Src: /src/brpc/src/butil/recordio.cc:292,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:294,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:297,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 49
    argCount: 1
    argNames:
    - rec
    argTypes:
    - Record*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 301
    functionName: butil::RecordReader::CutRecord
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 2
    functionsReached:
    - butil::RecordReader::offset
    - NetToHost32
    - copy_to
    - SizeChecksum
    - std::string
    - butil::PrintedAsBinary
    - Record*::MutablePayload
    - cut1
    - Record*::Clear
    - Record*::MutableMeta
    - pop_front
    - CHECK
    - cutn
    - Record*::Payload
    - LOG
    - remaining_bytes
    linkageType: ''
    returnType: int
    signature: int RecordReader::CutRecord(Record* rec)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - writer
    argTypes:
    - IWriter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 305
    functionName: butil::RecordWriter::RecordWriter
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RecordWriter::RecordWriter(IWriter* writer)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:308,1
    - Dst: reserve
      Src: /src/brpc/src/butil/recordio.cc:310,1
    - Dst: MetaCount
      Src: /src/brpc/src/butil/recordio.cc:311,1
    - Dst: MetaAt
      Src: /src/brpc/src/butil/recordio.cc:312,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:313,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:314,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:315,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:315,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:318,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:320,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/recordio.cc:322,1
    - Dst: name::data
      Src: /src/brpc/src/butil/recordio.cc:322,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:322,1
    - Dst: name::size
      Src: /src/brpc/src/butil/recordio.cc:323,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:324,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:325,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:326,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:327,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:327,1
    - Dst: data::size
      Src: /src/brpc/src/butil/recordio.cc:330,1
    - Dst: MetaCount
      Src: /src/brpc/src/butil/recordio.cc:331,1
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/recordio.cc:334,1
    - Dst: append
      Src: /src/brpc/src/butil/recordio.cc:335,1
    - Dst: append
      Src: /src/brpc/src/butil/recordio.cc:336,1
    - Dst: data::get
      Src: /src/brpc/src/butil/recordio.cc:336,1
    - Dst: Payload
      Src: /src/brpc/src/butil/recordio.cc:338,1
    - Dst: append
      Src: /src/brpc/src/butil/recordio.cc:339,1
    - Dst: Payload
      Src: /src/brpc/src/butil/recordio.cc:339,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:343,1
    - Dst: LOG
      Src: /src/brpc/src/butil/recordio.cc:345,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/recordio.cc:346,1
    - Dst: size
      Src: /src/brpc/src/butil/recordio.cc:346,1
    - Dst: MetaCount
      Src: /src/brpc/src/butil/recordio.cc:350,1
    - Dst: HostToNet32
      Src: /src/brpc/src/butil/recordio.cc:353,1
    - Dst: SizeChecksum
      Src: /src/brpc/src/butil/recordio.cc:354,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/butil/recordio.cc:355,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 1
    argNames:
    - ' rec'
    argTypes:
    - Record
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 357
    functionName: butil::RecordWriter::WriteWithoutFlush
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 1
    functionsReached:
    - append
    - reserve
    - Payload
    - pop_back
    - SizeChecksum
    - name::data
    - MetaCount
    - data::get
    - MetaAt
    - name::size
    - data::size
    - unsafe_assign
    - memcpy
    - size
    - LOG
    - HostToNet32
    linkageType: ''
    returnType: int
    signature: int RecordWriter::WriteWithoutFlush(const Record& rec)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cut_into_writer
      Src: /src/brpc/src/butil/recordio.cc:362,1
    - Dst: empty
      Src: /src/brpc/src/butil/recordio.cc:371,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 377
    functionName: butil::RecordWriter::Flush
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 7
    functionsReached:
    - empty
    - cut_into_writer
    linkageType: ''
    returnType: int
    signature: int RecordWriter::Flush()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::RecordWriter::WriteWithoutFlush
      Src: /src/brpc/src/butil/recordio.cc:380,1
    - Dst: butil::RecordWriter::Flush
      Src: /src/brpc/src/butil/recordio.cc:384,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' record'
    argTypes:
    - Record
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 379
    functionDepth: 2
    functionLinenumber: 379
    functionLinenumberEnd: 385
    functionName: butil::RecordWriter::Write
    functionSourceFile: /src/brpc/src/butil/recordio.cc
    functionUses: 6
    functionsReached:
    - butil::RecordWriter::Flush
    - butil::RecordWriter::WriteWithoutFlush
    linkageType: ''
    returnType: int
    signature: int RecordWriter::Write(const Record& record)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: operator uint64_t() const
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator uint64_t() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: butil::cast
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ResourceId<T2>
    signature: ResourceId<T2> cast() const
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:153,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:156,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:178,1
    - Dst: butil::unsafe_address_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:183,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:191,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:192,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/resource_pool_inl.h:199,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:204,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:205,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:215,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:227,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:234,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:262,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:264,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:265,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:266,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:268,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:270,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:282,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:283,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:290,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:291,1
    - Dst: LocalPool*::return_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:292,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/resource_pool_inl.h:301,1
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/resource_pool_inl.h:307,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:314,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:315,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:318,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:321,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:325,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:333,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:344,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:348,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:349,1
    - Dst: ResourcePool::ResourcePool
      Src: /src/brpc/src/butil/resource_pool_inl.h:351,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:352,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:354,1
    - Dst: butil::ResourcePool
      Src: /src/brpc/src/butil/resource_pool_inl.h:359,1
    - Dst: reserve
      Src: /src/brpc/src/butil/resource_pool_inl.h:360,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/butil/resource_pool_inl.h:361,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/resource_pool_inl.h:365,1
    - Dst: Block::Block
      Src: /src/brpc/src/butil/resource_pool_inl.h:370,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:377,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:380,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:382,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:384,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:389,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/resource_pool_inl.h:391,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:402,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:403,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/resource_pool_inl.h:409,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:414,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:415,1
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/resource_pool_inl.h:426,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:430,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/resource_pool_inl.h:432,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:433,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:441,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:451,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:453,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:461,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/resource_pool_inl.h:464,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:466,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:473,1
    - Dst: ~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:479,1
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:486,1
    - Dst: if
      Src: /src/brpc/src/butil/resource_pool_inl.h:494,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/resource_pool_inl.h:494,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:497,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/resource_pool_inl.h:498,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:499,1
    - Dst: back
      Src: /src/brpc/src/butil/resource_pool_inl.h:502,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/resource_pool_inl.h:503,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:504,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/resource_pool_inl.h:506,1
    - Dst: free
      Src: /src/brpc/src/butil/resource_pool_inl.h:507,1
    CyclomaticComplexity: 45
    EdgeCount: 45
    ICount: 222
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 103
    functionDepth: 5
    functionLinenumber: 103
    functionLinenumberEnd: 509
    functionName: butil::ResourcePool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 1
    functionsReached:
    - std::forward<Args>
    - butil::validate
    - pthread_mutex_destroy
    - static_cast<void*>
    - T*::~T
    - pthread_mutex_lock
    - BAIDU_RESOURCE_POOL_GET
    - if
    - butil::fetch_sub
    - LocalPool::LocalPool
    - LocalPool*::return_resource
    - butil::add_block_group
    - butil::exchange
    - explicit::push_free_chunk
    - butil::thread_atexit_cancel
    - LocalPool*::get
    - butil::Summer::value
    - ~T
    - __builtin_expect
    - pthread_mutex_init
    - memcpy
    - CTOR_ARGS::CTOR_ARGS
    - butil::ResourcePool
    - Block::Block
    - free
    - auto::void_data
    - ResourcePool::ResourcePool
    - BlockGroup*::nblock::fetch_sub
    - butil::free_chunk_nitem
    - memset
    - butil::get_or_new_local_pool
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    - explicit::clear_from_destructor_of_local_pool
    - BlockGroup*::nblock::load
    - butil::fetch_add
    - BlockGroup*::nblock::fetch_add
    - back
    - butil::empty
    - pop_back
    - butil::thread_atexit
    - std::min
    - butil::load
    - butil::unsafe_address_resource
    - BlockGroup::BlockGroup
    - explicit::pop_free_chunk
    - butil::add_block
    - reserve
    - pop_free_chunk
    - butil::store
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ResourcePool
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 122
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Block
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 136
    functionName: butil::BlockGroup
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void BlockGroup()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:153,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:156,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:178,1
    - Dst: butil::unsafe_address_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:183,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:191,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:192,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/resource_pool_inl.h:199,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:204,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:205,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:215,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:227,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:234,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 248
    functionName: butil::LocalPool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - explicit::push_free_chunk
    - butil::validate
    - auto::void_data
    - T*::~T
    - butil::free_chunk_nitem
    - BAIDU_RESOURCE_POOL_GET
    - butil::unsafe_address_resource
    - explicit::clear_from_destructor_of_local_pool
    - explicit::pop_free_chunk
    - butil::add_block
    - CTOR_ARGS::CTOR_ARGS
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT LocalPool
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:153,1
    - Dst: butil::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 157
    functionName: ~LocalPool()
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - butil::clear_from_destructor_of_local_pool
    - butil::push_free_chunk
    linkageType: ''
    returnType: void
    signature: void ~LocalPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: butil::delete_local_pool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void delete_local_pool(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - CTOR_ARGS
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 177
    functionName: BAIDU_RESOURCE_POOL_GET
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_RESOURCE_POOL_GET(CTOR_ARGS)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 17
    functionsReached:
    - BAIDU_RESOURCE_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get(ResourceId<T>* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 17
    functionsReached:
    - std::forward<Args>
    - BAIDU_RESOURCE_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get(ResourceId<T>* id, Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:227,1
    - Dst: butil::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:234,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 241
    functionName: butil::return_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - butil::free_chunk_nitem
    - butil::push_free_chunk
    linkageType: ''
    returnType: int
    signature: int return_resource(ResourceId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 257
    functionName: butil::unsafe_address_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 4
    functionsReached:
    - butil::load
    linkageType: ''
    returnType: T
    signature: T * unsafe_address_resource(ResourceId<T> id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:262,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:264,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:265,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:266,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:268,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:270,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 259
    functionDepth: 1
    functionLinenumber: 259
    functionLinenumberEnd: 278
    functionName: butil::address_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - __builtin_expect
    - butil::load
    linkageType: ''
    returnType: T
    signature: T * address_resource(ResourceId<T> id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:282,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:283,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 287
    functionName: butil::get_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 10
    functionsReached:
    - std::forward<Args>
    - LocalPool*::get
    - __builtin_expect
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: T
    signature: T * get_resource(ResourceId<T>* id, Args&&... args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:290,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:291,1
    - Dst: LocalPool*::return_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 295
    functionName: butil::return_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - LocalPool*::return_resource
    - __builtin_expect
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: int
    signature: int return_resource(ResourceId<T> id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/resource_pool_inl.h:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 297
    functionDepth: 2
    functionLinenumber: 297
    functionLinenumberEnd: 304
    functionName: butil::clear_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - butil::thread_atexit_cancel
    linkageType: ''
    returnType: void
    signature: void clear_resources()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/resource_pool_inl.h:307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 309
    functionName: butil::free_chunk_nitem
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 11
    functionsReached:
    - butil::Summer::value
    linkageType: ''
    returnType: size_t
    signature: size_t free_chunk_nitem()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:314,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:315,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:318,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:321,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:325,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:333,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 341
    functionName: butil::describe_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - butil::free_chunk_nitem
    - BlockGroup*::nblock::load
    - butil::load
    linkageType: ''
    returnType: ResourcePoolInfo
    signature: ResourcePoolInfo describe_resources() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:344,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:348,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:349,1
    - Dst: ResourcePool::ResourcePool
      Src: /src/brpc/src/butil/resource_pool_inl.h:351,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:352,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:354,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 343
    functionDepth: 5
    functionLinenumber: 343
    functionLinenumberEnd: 356
    functionName: butil::singleton
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - ResourcePool::ResourcePool
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::load
    - butil::store
    linkageType: ''
    returnType: ResourcePool
    signature: ResourcePool * singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/resource_pool_inl.h:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 364
    functionDepth: 2
    functionLinenumber: 364
    functionLinenumberEnd: 366
    functionName: ~ResourcePool()
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~ResourcePool()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Block::Block
      Src: /src/brpc/src/butil/resource_pool_inl.h:370,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:377,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:380,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:382,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:384,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:389,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/resource_pool_inl.h:391,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 369
    functionDepth: 1
    functionLinenumber: 369
    functionLinenumberEnd: 396
    functionName: butil::add_block
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 6
    functionsReached:
    - butil::add_block_group
    - Block::Block
    - BlockGroup*::nblock::fetch_sub
    - butil::load
    - butil::store
    - BlockGroup*::nblock::fetch_add
    linkageType: ''
    returnType: Block
    signature: Block * add_block(size_t* index)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:402,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:403,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/resource_pool_inl.h:409,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:414,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:415,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - old_ngroup
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 400
    functionDepth: 1
    functionLinenumber: 400
    functionLinenumberEnd: 419
    functionName: butil::add_block_group
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 6
    functionsReached:
    - butil::store
    - BlockGroup::BlockGroup
    - butil::load
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool add_block_group(size_t old_ngroup)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/resource_pool_inl.h:426,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:430,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/resource_pool_inl.h:432,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:433,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 421
    functionDepth: 2
    functionLinenumber: 421
    functionLinenumberEnd: 435
    functionName: butil::get_or_new_local_pool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 11
    functionsReached:
    - butil::fetch_add
    - BAIDU_SCOPED_LOCK
    - butil::thread_atexit
    - LocalPool::LocalPool
    linkageType: ''
    returnType: LocalPool
    signature: LocalPool * get_or_new_local_pool()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:441,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:451,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:453,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:461,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/resource_pool_inl.h:464,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:466,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:473,1
    - Dst: ~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:479,1
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:486,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 488
    functionName: butil::clear_from_destructor_of_local_pool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 2
    functionsReached:
    - std::min
    - memset
    - butil::load
    - BAIDU_SCOPED_LOCK
    - ~T
    - butil::fetch_sub
    - butil::exchange
    - BlockGroup*::nblock::load
    - pop_free_chunk
    linkageType: ''
    returnType: void
    signature: void clear_from_destructor_of_local_pool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/resource_pool_inl.h:512,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/resource_pool_inl.h:518,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:519,1
    - Dst: push_back
      Src: /src/brpc/src/butil/resource_pool_inl.h:520,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:521,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - FreeChunk
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 511
    functionDepth: 5
    functionLinenumber: 511
    functionLinenumberEnd: 523
    functionName: butil::push_free_chunk
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 5
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - malloc
    - push_back
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool push_free_chunk(const FreeChunk& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: operator uint64_t() const
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator uint64_t() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: butil::cast
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ResourceId<T2>
    signature: ResourceId<T2> cast() const
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:153,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:156,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:178,1
    - Dst: butil::unsafe_address_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:183,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:191,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:192,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/resource_pool_inl.h:199,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:204,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:205,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:215,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:227,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:234,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:262,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:264,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:265,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:266,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:268,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:270,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:282,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:283,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:290,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:291,1
    - Dst: LocalPool*::return_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:292,1
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/resource_pool_inl.h:301,1
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/resource_pool_inl.h:307,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:314,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:315,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:318,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:321,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:325,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:333,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:344,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:348,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:349,1
    - Dst: ResourcePool::ResourcePool
      Src: /src/brpc/src/butil/resource_pool_inl.h:351,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:352,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:354,1
    - Dst: butil::ResourcePool
      Src: /src/brpc/src/butil/resource_pool_inl.h:359,1
    - Dst: reserve
      Src: /src/brpc/src/butil/resource_pool_inl.h:360,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/butil/resource_pool_inl.h:361,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/resource_pool_inl.h:365,1
    - Dst: Block::Block
      Src: /src/brpc/src/butil/resource_pool_inl.h:370,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:377,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:380,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:382,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:384,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:389,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/resource_pool_inl.h:391,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:402,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:403,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/resource_pool_inl.h:409,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:414,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:415,1
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/resource_pool_inl.h:426,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:430,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/resource_pool_inl.h:432,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:433,1
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:441,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:451,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:453,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:461,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/resource_pool_inl.h:464,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:466,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:473,1
    - Dst: ~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:479,1
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:486,1
    - Dst: if
      Src: /src/brpc/src/butil/resource_pool_inl.h:494,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/resource_pool_inl.h:494,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:497,1
    - Dst: butil::empty
      Src: /src/brpc/src/butil/resource_pool_inl.h:498,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:499,1
    - Dst: back
      Src: /src/brpc/src/butil/resource_pool_inl.h:502,1
    - Dst: pop_back
      Src: /src/brpc/src/butil/resource_pool_inl.h:503,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:504,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/resource_pool_inl.h:506,1
    - Dst: free
      Src: /src/brpc/src/butil/resource_pool_inl.h:507,1
    CyclomaticComplexity: 45
    EdgeCount: 45
    ICount: 222
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 103
    functionDepth: 5
    functionLinenumber: 103
    functionLinenumberEnd: 509
    functionName: butil::ResourcePool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 2
    functionsReached:
    - std::forward<Args>
    - butil::validate
    - pthread_mutex_destroy
    - static_cast<void*>
    - T*::~T
    - pthread_mutex_lock
    - BAIDU_RESOURCE_POOL_GET
    - if
    - butil::fetch_sub
    - LocalPool::LocalPool
    - LocalPool*::return_resource
    - butil::add_block_group
    - butil::exchange
    - explicit::push_free_chunk
    - butil::thread_atexit_cancel
    - LocalPool*::get
    - butil::Summer::value
    - ~T
    - __builtin_expect
    - pthread_mutex_init
    - memcpy
    - CTOR_ARGS::CTOR_ARGS
    - butil::ResourcePool
    - Block::Block
    - free
    - auto::void_data
    - ResourcePool::ResourcePool
    - BlockGroup*::nblock::fetch_sub
    - butil::free_chunk_nitem
    - memset
    - butil::get_or_new_local_pool
    - pthread_mutex_unlock
    - BAIDU_SCOPED_LOCK
    - explicit::clear_from_destructor_of_local_pool
    - BlockGroup*::nblock::load
    - butil::fetch_add
    - BlockGroup*::nblock::fetch_add
    - back
    - butil::empty
    - pop_back
    - butil::thread_atexit
    - std::min
    - butil::load
    - butil::unsafe_address_resource
    - BlockGroup::BlockGroup
    - explicit::pop_free_chunk
    - butil::add_block
    - reserve
    - pop_free_chunk
    - butil::store
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT ResourcePool
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 122
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Block
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    functionName: butil::Block
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/resource_pool_inl.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 136
    functionName: butil::BlockGroup
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - static_cast<void*>
    - memset
    linkageType: ''
    returnType: void
    signature: void BlockGroup()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:153,1
    - Dst: explicit::clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:156,1
    - Dst: explicit::pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:178,1
    - Dst: butil::unsafe_address_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:183,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:190,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:191,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:192,1
    - Dst: butil::add_block
      Src: /src/brpc/src/butil/resource_pool_inl.h:199,1
    - Dst: auto::void_data
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: CTOR_ARGS::CTOR_ARGS
      Src: /src/brpc/src/butil/resource_pool_inl.h:203,1
    - Dst: butil::validate
      Src: /src/brpc/src/butil/resource_pool_inl.h:204,1
    - Dst: T*::~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:205,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:215,1
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:227,1
    - Dst: explicit::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:234,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 141
    functionDepth: 2
    functionLinenumber: 141
    functionLinenumberEnd: 248
    functionName: butil::LocalPool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - explicit::push_free_chunk
    - butil::validate
    - auto::void_data
    - T*::~T
    - butil::free_chunk_nitem
    - BAIDU_RESOURCE_POOL_GET
    - butil::unsafe_address_resource
    - explicit::clear_from_destructor_of_local_pool
    - explicit::pop_free_chunk
    - butil::add_block
    - CTOR_ARGS::CTOR_ARGS
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT LocalPool
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:153,1
    - Dst: clear_from_destructor_of_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:156,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 157
    functionName: ~LocalPool()
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - push_free_chunk
    - clear_from_destructor_of_local_pool
    linkageType: ''
    returnType: void
    signature: void ~LocalPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: butil::delete_local_pool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void delete_local_pool(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - CTOR_ARGS
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 177
    functionName: BAIDU_RESOURCE_POOL_GET
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_RESOURCE_POOL_GET(CTOR_ARGS)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 216
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 17
    functionsReached:
    - BAIDU_RESOURCE_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get(ResourceId<T>* id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_RESOURCE_POOL_GET
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: butil::get
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 17
    functionsReached:
    - std::forward<Args>
    - BAIDU_RESOURCE_POOL_GET
    linkageType: ''
    returnType: T
    signature: T * get(ResourceId<T>* id, Args&&... args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:227,1
    - Dst: butil::push_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:234,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 241
    functionName: butil::return_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - butil::free_chunk_nitem
    - butil::push_free_chunk
    linkageType: ''
    returnType: int
    signature: int return_resource(ResourceId<T> id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 257
    functionName: butil::unsafe_address_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 6
    functionsReached:
    - butil::load
    linkageType: ''
    returnType: T
    signature: T * unsafe_address_resource(ResourceId<T> id)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:262,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:264,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:265,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:266,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:268,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:270,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 259
    functionDepth: 1
    functionLinenumber: 259
    functionLinenumberEnd: 278
    functionName: butil::address_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - __builtin_expect
    - butil::load
    linkageType: ''
    returnType: T
    signature: T * address_resource(ResourceId<T> id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:282,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:283,1
    - Dst: LocalPool*::get
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/resource_pool_inl.h:284,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 287
    functionName: butil::get_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 10
    functionsReached:
    - std::forward<Args>
    - LocalPool*::get
    - __builtin_expect
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: T
    signature: T * get_resource(ResourceId<T>* id, Args&&... args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_or_new_local_pool
      Src: /src/brpc/src/butil/resource_pool_inl.h:290,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/butil/resource_pool_inl.h:291,1
    - Dst: LocalPool*::return_resource
      Src: /src/brpc/src/butil/resource_pool_inl.h:292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 295
    functionName: butil::return_resource
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - LocalPool*::return_resource
    - __builtin_expect
    - butil::get_or_new_local_pool
    linkageType: ''
    returnType: int
    signature: int return_resource(ResourceId<T> id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::thread_atexit_cancel
      Src: /src/brpc/src/butil/resource_pool_inl.h:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 297
    functionDepth: 2
    functionLinenumber: 297
    functionLinenumberEnd: 304
    functionName: butil::clear_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - butil::thread_atexit_cancel
    linkageType: ''
    returnType: void
    signature: void clear_resources()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/butil/resource_pool_inl.h:307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 309
    functionName: butil::free_chunk_nitem
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 15
    functionsReached:
    - butil::Summer::value
    linkageType: ''
    returnType: size_t
    signature: size_t free_chunk_nitem()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:314,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:315,1
    - Dst: butil::free_chunk_nitem
      Src: /src/brpc/src/butil/resource_pool_inl.h:318,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:321,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:325,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:329,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:333,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 341
    functionName: butil::describe_resources
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - std::min
    - butil::free_chunk_nitem
    - BlockGroup*::nblock::load
    - butil::load
    linkageType: ''
    returnType: ResourcePoolInfo
    signature: ResourcePoolInfo describe_resources() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:344,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:348,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:349,1
    - Dst: ResourcePool::ResourcePool
      Src: /src/brpc/src/butil/resource_pool_inl.h:351,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:352,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:354,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 343
    functionDepth: 5
    functionLinenumber: 343
    functionLinenumberEnd: 356
    functionName: butil::singleton
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - ResourcePool::ResourcePool
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - butil::load
    - butil::store
    linkageType: ''
    returnType: ResourcePool
    signature: ResourcePool * singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/butil/resource_pool_inl.h:365,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 364
    functionDepth: 2
    functionLinenumber: 364
    functionLinenumberEnd: 366
    functionName: ~ResourcePool()
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void ~ResourcePool()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Block::Block
      Src: /src/brpc/src/butil/resource_pool_inl.h:370,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:377,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:380,1
    - Dst: BlockGroup*::nblock::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:382,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:384,1
    - Dst: BlockGroup*::nblock::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:389,1
    - Dst: butil::add_block_group
      Src: /src/brpc/src/butil/resource_pool_inl.h:391,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 369
    functionDepth: 1
    functionLinenumber: 369
    functionLinenumberEnd: 396
    functionName: butil::add_block
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - butil::add_block_group
    - Block::Block
    - BlockGroup*::nblock::fetch_sub
    - butil::load
    - butil::store
    - BlockGroup*::nblock::fetch_add
    linkageType: ''
    returnType: Block
    signature: Block * add_block(size_t* index)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:402,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:403,1
    - Dst: BlockGroup::BlockGroup
      Src: /src/brpc/src/butil/resource_pool_inl.h:409,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:414,1
    - Dst: butil::store
      Src: /src/brpc/src/butil/resource_pool_inl.h:415,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - old_ngroup
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 400
    functionDepth: 1
    functionLinenumber: 400
    functionLinenumberEnd: 419
    functionName: butil::add_block_group
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 8
    functionsReached:
    - butil::store
    - BlockGroup::BlockGroup
    - butil::load
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: bool
    signature: bool add_block_group(size_t old_ngroup)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LocalPool::LocalPool
      Src: /src/brpc/src/butil/resource_pool_inl.h:426,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:430,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/resource_pool_inl.h:432,1
    - Dst: butil::fetch_add
      Src: /src/brpc/src/butil/resource_pool_inl.h:433,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 421
    functionDepth: 2
    functionLinenumber: 421
    functionLinenumberEnd: 435
    functionName: butil::get_or_new_local_pool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 14
    functionsReached:
    - butil::fetch_add
    - BAIDU_SCOPED_LOCK
    - butil::thread_atexit
    - LocalPool::LocalPool
    linkageType: ''
    returnType: LocalPool
    signature: LocalPool * get_or_new_local_pool()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::fetch_sub
      Src: /src/brpc/src/butil/resource_pool_inl.h:441,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/butil/resource_pool_inl.h:451,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:453,1
    - Dst: pop_free_chunk
      Src: /src/brpc/src/butil/resource_pool_inl.h:461,1
    - Dst: butil::exchange
      Src: /src/brpc/src/butil/resource_pool_inl.h:464,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:466,1
    - Dst: std::min
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: BlockGroup*::nblock::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:470,1
    - Dst: butil::load
      Src: /src/brpc/src/butil/resource_pool_inl.h:473,1
    - Dst: ~T
      Src: /src/brpc/src/butil/resource_pool_inl.h:479,1
    - Dst: memset
      Src: /src/brpc/src/butil/resource_pool_inl.h:486,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 488
    functionName: butil::clear_from_destructor_of_local_pool
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 2
    functionsReached:
    - std::min
    - memset
    - butil::load
    - BAIDU_SCOPED_LOCK
    - ~T
    - butil::fetch_sub
    - butil::exchange
    - BlockGroup*::nblock::load
    - pop_free_chunk
    linkageType: ''
    returnType: void
    signature: void clear_from_destructor_of_local_pool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/butil/resource_pool_inl.h:512,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/resource_pool_inl.h:518,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/butil/resource_pool_inl.h:519,1
    - Dst: push_back
      Src: /src/brpc/src/butil/resource_pool_inl.h:520,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/butil/resource_pool_inl.h:521,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' c'
    argTypes:
    - FreeChunk
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 511
    functionDepth: 5
    functionLinenumber: 511
    functionLinenumberEnd: 523
    functionName: butil::push_free_chunk
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 6
    functionsReached:
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - malloc
    - push_back
    - memcpy
    linkageType: ''
    returnType: bool
    signature: bool push_free_chunk(const FreeChunk& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - ResourceId<T>
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 581
    functionDepth: 0
    functionLinenumber: 581
    functionLinenumberEnd: 583
    functionName: operator==(ResourceId<T> id1, ResourceId<T> id2)
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(ResourceId<T> id1, ResourceId<T> id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id1
    - id2
    argTypes:
    - ResourceId<T>
    - ResourceId<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 586
    functionDepth: 0
    functionLinenumber: 586
    functionLinenumberEnd: 588
    functionName: operator!=(ResourceId<T> id1, ResourceId<T> id2)
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(ResourceId<T> id1, ResourceId<T> id2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' info'
    argTypes:
    - std::ostream
    - ResourcePoolInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 610
    functionName: "& operator<<(std::ostream& os,\n                                ResourcePoolInfo
      const& info)"
    functionSourceFile: /src/brpc/src/butil/resource_pool_inl.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::ostream
    signature: "std::ostream & operator<<(std::ostream& os,\n                                ResourcePoolInfo
      const& info)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::~basic_string
      Src: /src/brpc/src/butil/find_cstr.h:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: butil::delete_tls
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - std::string*::~basic_string
    linkageType: ''
    returnType: void
    signature: void delete_tls(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/butil/find_cstr.h:62,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/find_cstr.h:63,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/find_cstr.h:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 70
    functionName: butil::get_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - std::string*::assign
    - std::string::string
    - butil::thread_atexit
    linkageType: ''
    returnType: std::string
    signature: std::string * get_string(const char* key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/butil/find_cstr.h:75,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/find_cstr.h:76,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/find_cstr.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - key
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 83
    functionName: butil::get_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - std::string*::assign
    - std::string::string
    - butil::thread_atexit
    linkageType: ''
    returnType: std::string
    signature: std::string * get_string(const char* key, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:86,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 3
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: butil::get_lowered_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - std::string*::end
    - std::transform
    - std::string*::begin
    - butil::get_string
    linkageType: ''
    returnType: std::string
    signature: std::string * get_lowered_string(const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:92,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 3
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::get_lowered_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - std::string*::end
    - std::transform
    - std::string*::begin
    - butil::get_string
    linkageType: ''
    returnType: std::string
    signature: std::string * get_lowered_string(const char* key, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:103,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 3
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: typename std::map<std::string, T, C, A>::const_iterator find_cstr(const
      std::map<std::string, T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:109,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 107
    functionDepth: 3
    functionLinenumber: 107
    functionLinenumberEnd: 110
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: typename std::map<std::string, T, C, A>::iterator find_cstr(std::map<std::string,
      T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:116,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 3
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: "typename std::map<std::string, T, C, A>::const_iterator find_cstr(const
      std::map<std::string, T, C, A>& m,\n          const char* key, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:123,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 3
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: "typename std::map<std::string, T, C, A>::iterator find_cstr(std::map<std::string,
      T, C, A>& m,\n          const char* key, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:129,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 127
    functionDepth: 4
    functionLinenumber: 127
    functionLinenumberEnd: 130
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: typename std::map<std::string, T, C, A>::const_iterator find_lowered_cstr(const
      std::map<std::string, T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:135,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 133
    functionDepth: 4
    functionLinenumber: 133
    functionLinenumberEnd: 136
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: typename std::map<std::string, T, C, A>::iterator find_lowered_cstr(std::map<std::string,
      T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:142,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 139
    functionDepth: 4
    functionLinenumber: 139
    functionLinenumberEnd: 143
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: "typename std::map<std::string, T, C, A>::const_iterator find_lowered_cstr(const
      std::map<std::string, T, C, A>& m,\n                  const char* key, size_t
      length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:149,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 146
    functionDepth: 4
    functionLinenumber: 146
    functionLinenumberEnd: 150
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: "typename std::map<std::string, T, C, A>::iterator find_lowered_cstr(std::map<std::string,
      T, C, A>& m,\n                  const char* key, size_t length)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::~basic_string
      Src: /src/brpc/src/butil/find_cstr.h:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 57
    functionName: butil::delete_tls
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - std::string*::~basic_string
    linkageType: ''
    returnType: void
    signature: void delete_tls(void* buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/butil/find_cstr.h:62,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/find_cstr.h:63,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/find_cstr.h:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 70
    functionName: butil::get_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - std::string*::assign
    - std::string::string
    - butil::thread_atexit
    linkageType: ''
    returnType: std::string
    signature: std::string * get_string(const char* key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/butil/find_cstr.h:75,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/butil/find_cstr.h:76,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/butil/find_cstr.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - key
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 83
    functionName: butil::get_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - std::string*::assign
    - std::string::string
    - butil::thread_atexit
    linkageType: ''
    returnType: std::string
    signature: std::string * get_string(const char* key, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:86,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 3
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: butil::get_lowered_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 4
    functionsReached:
    - std::string*::end
    - std::transform
    - std::string*::begin
    - butil::get_string
    linkageType: ''
    returnType: std::string
    signature: std::string * get_lowered_string(const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:92,1
    - Dst: std::transform
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    - Dst: std::string*::end
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    - Dst: std::string*::begin
      Src: /src/brpc/src/butil/find_cstr.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - key
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 3
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::get_lowered_string
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 4
    functionsReached:
    - std::string*::end
    - std::transform
    - std::string*::begin
    - butil::get_string
    linkageType: ''
    returnType: std::string
    signature: std::string * get_lowered_string(const char* key, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:103,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 3
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: typename std::map<std::string, T, C, A>::const_iterator find_cstr(const
      std::map<std::string, T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:109,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 107
    functionDepth: 3
    functionLinenumber: 107
    functionLinenumberEnd: 110
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: typename std::map<std::string, T, C, A>::iterator find_cstr(std::map<std::string,
      T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:116,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 3
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: "typename std::map<std::string, T, C, A>::const_iterator find_cstr(const
      std::map<std::string, T, C, A>& m,\n          const char* key, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:123,1
    - Dst: butil::get_string
      Src: /src/brpc/src/butil/find_cstr.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 3
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: butil::find_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 6
    functionsReached:
    - butil::find
    - butil::get_string
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: "typename std::map<std::string, T, C, A>::iterator find_cstr(std::map<std::string,
      T, C, A>& m,\n          const char* key, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:129,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 127
    functionDepth: 4
    functionLinenumber: 127
    functionLinenumberEnd: 130
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: typename std::map<std::string, T, C, A>::const_iterator find_lowered_cstr(const
      std::map<std::string, T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:135,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 133
    functionDepth: 4
    functionLinenumber: 133
    functionLinenumberEnd: 136
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: typename std::map<std::string, T, C, A>::iterator find_lowered_cstr(std::map<std::string,
      T, C, A>& m, const char* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:142,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 139
    functionDepth: 4
    functionLinenumber: 139
    functionLinenumberEnd: 143
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::const_iterator
    signature: "typename std::map<std::string, T, C, A>::const_iterator find_lowered_cstr(const
      std::map<std::string, T, C, A>& m,\n                  const char* key, size_t
      length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::find
      Src: /src/brpc/src/butil/find_cstr.h:149,1
    - Dst: butil::get_lowered_string
      Src: /src/brpc/src/butil/find_cstr.h:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' m'
    - key
    - length
    argTypes:
    - std::map<std::string, T, C, A>
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 146
    functionDepth: 4
    functionLinenumber: 146
    functionLinenumberEnd: 150
    functionName: butil::find_lowered_cstr
    functionSourceFile: /src/brpc/src/butil/find_cstr.h
    functionUses: 0
    functionsReached:
    - butil::get_lowered_string
    - butil::find
    linkageType: ''
    returnType: typename std::map<std::string, T, C, A>::iterator
    signature: "typename std::map<std::string, T, C, A>::iterator find_lowered_cstr(std::map<std::string,
      T, C, A>& m,\n                  const char* key, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedCompareExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:31,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:32,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:33,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:34,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 36
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 67
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedCompareExchange
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:40,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:41,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:42,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - _InterlockedExchange
    - reinterpret_cast<volatile LONG*>
    - static_cast<LONG>
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchangeAdd
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:48,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:49,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 14
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedExchangeAdd
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __faststorefence
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:64,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 69
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 185
    functionsReached:
    - butil::subtle::MemoryBarrier
    - __faststorefence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedCompareExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:120,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:121,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 124
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 69
    functionsReached:
    - reinterpret_cast<volatile PVOID*>
    - InterlockedCompareExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:128,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:129,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:130,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 132
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 8
    functionsReached:
    - InterlockedExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<volatile PVOID*>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangeAdd64
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:136,1
    - Dst: reinterpret_cast<volatile LONGLONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:137,1
    - Dst: static_cast<LONGLONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached:
    - reinterpret_cast<volatile LONGLONG*>
    - InterlockedExchangeAdd64
    - static_cast<LONGLONG>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 164
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 184
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedCompareExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:31,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:32,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:33,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:34,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 36
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 71
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedCompareExchange
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:40,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:41,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:42,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 9
    functionsReached:
    - _InterlockedExchange
    - reinterpret_cast<volatile LONG*>
    - static_cast<LONG>
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchangeAdd
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:48,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:49,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedExchangeAdd
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __faststorefence
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:64,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 69
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 188
    functionsReached:
    - butil::subtle::MemoryBarrier
    - __faststorefence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedCompareExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:120,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:121,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 124
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 73
    functionsReached:
    - reinterpret_cast<volatile PVOID*>
    - InterlockedCompareExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:128,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:129,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:130,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 132
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 10
    functionsReached:
    - InterlockedExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<volatile PVOID*>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangeAdd64
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:136,1
    - Dst: reinterpret_cast<volatile LONGLONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:137,1
    - Dst: static_cast<LONGLONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 17
    functionsReached:
    - reinterpret_cast<volatile LONGLONG*>
    - InterlockedExchangeAdd64
    - static_cast<LONGLONG>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 164
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 184
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedCompareExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:31,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:32,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:33,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:34,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 36
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 75
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedCompareExchange
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:40,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:41,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:42,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached:
    - _InterlockedExchange
    - reinterpret_cast<volatile LONG*>
    - static_cast<LONG>
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchangeAdd
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:48,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:49,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 18
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedExchangeAdd
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __faststorefence
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:64,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 69
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 191
    functionsReached:
    - butil::subtle::MemoryBarrier
    - __faststorefence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedCompareExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:120,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:121,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 124
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 77
    functionsReached:
    - reinterpret_cast<volatile PVOID*>
    - InterlockedCompareExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:128,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:129,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:130,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 132
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 12
    functionsReached:
    - InterlockedExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<volatile PVOID*>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangeAdd64
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:136,1
    - Dst: reinterpret_cast<volatile LONGLONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:137,1
    - Dst: static_cast<LONGLONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached:
    - reinterpret_cast<volatile LONGLONG*>
    - InterlockedExchangeAdd64
    - static_cast<LONGLONG>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 164
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 184
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedCompareExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:31,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:32,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:33,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:34,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 36
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 79
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedCompareExchange
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:40,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:41,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:42,1
    - Dst: static_cast<Atomic32>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 13
    functionsReached:
    - _InterlockedExchange
    - reinterpret_cast<volatile LONG*>
    - static_cast<LONG>
    - static_cast<Atomic32>
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _InterlockedExchangeAdd
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:48,1
    - Dst: reinterpret_cast<volatile LONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:49,1
    - Dst: static_cast<LONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 20
    functionsReached:
    - static_cast<LONG>
    - reinterpret_cast<volatile LONG*>
    - _InterlockedExchangeAdd
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __faststorefence
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:64,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 69
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 194
    functionsReached:
    - butil::subtle::MemoryBarrier
    - __faststorefence
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 90
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 109
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedCompareExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:120,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:121,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:122,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 124
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 81
    functionsReached:
    - reinterpret_cast<volatile PVOID*>
    - InterlockedCompareExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangePointer
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:128,1
    - Dst: reinterpret_cast<volatile PVOID*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:129,1
    - Dst: reinterpret_cast<PVOID>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:130,1
    - Dst: reinterpret_cast<Atomic64>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 132
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 14
    functionsReached:
    - InterlockedExchangePointer
    - reinterpret_cast<Atomic64>
    - reinterpret_cast<volatile PVOID*>
    - reinterpret_cast<PVOID>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InterlockedExchangeAdd64
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:136,1
    - Dst: reinterpret_cast<volatile LONGLONG*>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:137,1
    - Dst: static_cast<LONGLONG>
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 139
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 21
    functionsReached:
    - reinterpret_cast<volatile LONGLONG*>
    - InterlockedExchangeAdd64
    - static_cast<LONGLONG>
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 34
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 164
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 11
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 19
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 178
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 184
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_x86_msvc.h:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_x86_msvc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: butil::ZeroCopyStreamAsStreamBuf::ZeroCopyStreamAsStreamBuf
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamAsStreamBuf(google::protobuf::io::ZeroCopyOutputStream*
      stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stream
    argTypes:
    - google::protobuf::io::ZeroCopyOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 35
    functionName: butil::ZeroCopyStreamAsStreamBuf::ZeroCopyStreamAsStreamBuf
    functionSourceFile: /src/brpc/src/butil/zero_copy_stream_as_streambuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ZeroCopyStreamAsStreamBuf(google::protobuf::io::ZeroCopyOutputStream*
      stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/lazy_instance.h:65,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/lazy_instance.h:65,1
    - Dst: ALIGNOF
      Src: /src/brpc/src/butil/lazy_instance.h:65,1
    - Dst: Type::Type
      Src: /src/brpc/src/butil/lazy_instance.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 72
    functionName: butil::New
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 2
    functionsReached:
    - ALIGNOF
    - DCHECK_EQ
    - Type::Type
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: Type
    signature: Type * New(void* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Type*::~Type
      Src: /src/brpc/src/butil/lazy_instance.h:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: butil::Delete
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - Type*::~Type
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::New
      Src: /src/brpc/src/butil/lazy_instance.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 111
    functionName: butil::internal::New
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 1
    functionsReached:
    - butil::internal::New
    linkageType: ''
    returnType: Type
    signature: Type * New(void* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: butil::internal::Delete
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::New
      Src: /src/brpc/src/butil/lazy_instance.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 111
    functionName: butil::internal::New
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 2
    functionsReached:
    - butil::internal::New
    linkageType: ''
    returnType: Type
    signature: Type * New(void* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: butil::internal::Delete
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/lazy_instance.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: '& Get()'
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - Pointer
    linkageType: ''
    returnType: Type
    signature: Type & Get()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertSingletonAllowed
      Src: /src/brpc/src/butil/lazy_instance.h:163,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/lazy_instance.h:177,1
    - Dst: butil::internal::NeedsLazyInstance
      Src: /src/brpc/src/butil/lazy_instance.h:179,1
    - Dst: reinterpret_cast<subtle::AtomicWord>
      Src: /src/brpc/src/butil/lazy_instance.h:181,1
    - Dst: New
      Src: /src/brpc/src/butil/lazy_instance.h:182,1
    - Dst: void_data
      Src: /src/brpc/src/butil/lazy_instance.h:182,1
    - Dst: butil::internal::CompleteLazyInstance
      Src: /src/brpc/src/butil/lazy_instance.h:183,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/lazy_instance.h:192,1
    - Dst: butil::LazyInstance::instance
      Src: /src/brpc/src/butil/lazy_instance.h:193,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 159
    functionDepth: 2
    functionLinenumber: 159
    functionLinenumberEnd: 194
    functionName: butil::LazyInstance::Pointer
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<subtle::AtomicWord>
    - butil::internal::CompleteLazyInstance
    - New
    - butil::subtle::Acquire_Load
    - void_data
    - butil::ThreadRestrictions::AssertSingletonAllowed
    - butil::LazyInstance::instance
    - ANNOTATE_HAPPENS_AFTER
    - butil::internal::NeedsLazyInstance
    linkageType: ''
    returnType: Type
    signature: Type * Pointer()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/lazy_instance.h:197,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/lazy_instance.h:201,1
    - Dst: void_data
      Src: /src/brpc/src/butil/lazy_instance.h:201,1
    - Dst: instance
      Src: /src/brpc/src/butil/lazy_instance.h:203,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - p
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 205
    functionName: operator==(Type* p)
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - void_data
    - instance
    - static_cast<void*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: bool
    signature: bool operator==(Type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<Type*>
      Src: /src/brpc/src/butil/lazy_instance.h:217,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/lazy_instance.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: butil::LazyInstance::instance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 1
    functionsReached:
    - reinterpret_cast<Type*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: Type
    signature: Type * instance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<LazyInstance<Type, Traits>*>
      Src: /src/brpc/src/butil/lazy_instance.h:225,1
    - Dst: Delete
      Src: /src/brpc/src/butil/lazy_instance.h:226,1
    - Dst: LazyInstance*::instance
      Src: /src/brpc/src/butil/lazy_instance.h:226,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/lazy_instance.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - lazy_instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 228
    functionName: butil::LazyInstance::OnExit
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - LazyInstance*::instance
    - Delete
    - reinterpret_cast<LazyInstance<Type, Traits>*>
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void OnExit(void* lazy_instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/lazy_instance.h:65,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/lazy_instance.h:65,1
    - Dst: ALIGNOF
      Src: /src/brpc/src/butil/lazy_instance.h:65,1
    - Dst: Type::Type
      Src: /src/brpc/src/butil/lazy_instance.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 72
    functionName: butil::New
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 2
    functionsReached:
    - ALIGNOF
    - DCHECK_EQ
    - Type::Type
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: Type
    signature: Type * New(void* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Type*::~Type
      Src: /src/brpc/src/butil/lazy_instance.h:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: butil::Delete
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - Type*::~Type
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::New
      Src: /src/brpc/src/butil/lazy_instance.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 111
    functionName: butil::internal::New
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 3
    functionsReached:
    - butil::internal::New
    linkageType: ''
    returnType: Type
    signature: Type * New(void* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: butil::internal::Delete
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::New
      Src: /src/brpc/src/butil/lazy_instance.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 111
    functionName: butil::internal::New
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 4
    functionsReached:
    - butil::internal::New
    linkageType: ''
    returnType: Type
    signature: Type * New(void* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - instance
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 113
    functionName: butil::internal::Delete
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Delete(Type* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/lazy_instance.h:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: '& Get()'
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - Pointer
    linkageType: ''
    returnType: Type
    signature: Type & Get()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertSingletonAllowed
      Src: /src/brpc/src/butil/lazy_instance.h:163,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/lazy_instance.h:177,1
    - Dst: butil::internal::NeedsLazyInstance
      Src: /src/brpc/src/butil/lazy_instance.h:179,1
    - Dst: reinterpret_cast<subtle::AtomicWord>
      Src: /src/brpc/src/butil/lazy_instance.h:181,1
    - Dst: New
      Src: /src/brpc/src/butil/lazy_instance.h:182,1
    - Dst: void_data
      Src: /src/brpc/src/butil/lazy_instance.h:182,1
    - Dst: butil::internal::CompleteLazyInstance
      Src: /src/brpc/src/butil/lazy_instance.h:183,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/lazy_instance.h:192,1
    - Dst: butil::LazyInstance::instance
      Src: /src/brpc/src/butil/lazy_instance.h:193,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 159
    functionDepth: 2
    functionLinenumber: 159
    functionLinenumberEnd: 194
    functionName: butil::LazyInstance::Pointer
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<subtle::AtomicWord>
    - butil::internal::CompleteLazyInstance
    - New
    - butil::subtle::Acquire_Load
    - void_data
    - butil::ThreadRestrictions::AssertSingletonAllowed
    - butil::LazyInstance::instance
    - ANNOTATE_HAPPENS_AFTER
    - butil::internal::NeedsLazyInstance
    linkageType: ''
    returnType: Type
    signature: Type * Pointer()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/lazy_instance.h:197,1
    - Dst: static_cast<void*>
      Src: /src/brpc/src/butil/lazy_instance.h:201,1
    - Dst: void_data
      Src: /src/brpc/src/butil/lazy_instance.h:201,1
    - Dst: instance
      Src: /src/brpc/src/butil/lazy_instance.h:203,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - p
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 205
    functionName: operator==(Type* p)
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - void_data
    - instance
    - static_cast<void*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: bool
    signature: bool operator==(Type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<Type*>
      Src: /src/brpc/src/butil/lazy_instance.h:217,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/lazy_instance.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: butil::LazyInstance::instance
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 2
    functionsReached:
    - reinterpret_cast<Type*>
    - butil::subtle::NoBarrier_Load
    linkageType: ''
    returnType: Type
    signature: Type * instance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<LazyInstance<Type, Traits>*>
      Src: /src/brpc/src/butil/lazy_instance.h:225,1
    - Dst: Delete
      Src: /src/brpc/src/butil/lazy_instance.h:226,1
    - Dst: LazyInstance*::instance
      Src: /src/brpc/src/butil/lazy_instance.h:226,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/lazy_instance.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - lazy_instance
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 228
    functionName: butil::LazyInstance::OnExit
    functionSourceFile: /src/brpc/src/butil/lazy_instance.h
    functionUses: 0
    functionsReached:
    - LazyInstance*::instance
    - Delete
    - reinterpret_cast<LazyInstance<Type, Traits>*>
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void OnExit(void* lazy_instance)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/butil/base_paths.cc:18,1
    - Dst: FilePath*::DirName
      Src: /src/brpc/src/butil/base_paths.cc:19,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/butil/base_paths.cc:22,1
    - Dst: FilePath*::DirName
      Src: /src/brpc/src/butil/base_paths.cc:23,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/base_paths.cc:26,1
    - Dst: butil::GetHomeDir
      Src: /src/brpc/src/butil/base_paths.cc:30,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/butil/base_paths.cc:33,1
    - Dst: FilePath*::Append
      Src: /src/brpc/src/butil/base_paths.cc:35,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/base_paths.cc:35,1
    - Dst: FilePath*::Append
      Src: /src/brpc/src/butil/base_paths.cc:36,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/base_paths.cc:36,1
    - Dst: FilePath*::Append
      Src: /src/brpc/src/butil/base_paths.cc:37,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/base_paths.cc:37,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/base_paths.cc:38,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 29
    argCount: 2
    argNames:
    - key
    - result
    argTypes:
    - int
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 13
    functionDepth: 3
    functionLinenumber: 13
    functionLinenumberEnd: 44
    functionName: butil::PathProvider
    functionSourceFile: /src/brpc/src/butil/base_paths.cc
    functionUses: 0
    functionsReached:
    - butil::GetHomeDir
    - butil::GetTempDir
    - FILE_PATH_LITERAL
    - FilePath*::DirName
    - butil::PathExists
    - FilePath*::Append
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: bool
    signature: bool PathProvider(int key, FilePath* result)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/butil/base_paths.cc:18,1
    - Dst: FilePath*::DirName
      Src: /src/brpc/src/butil/base_paths.cc:19,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/butil/base_paths.cc:22,1
    - Dst: FilePath*::DirName
      Src: /src/brpc/src/butil/base_paths.cc:23,1
    - Dst: butil::GetTempDir
      Src: /src/brpc/src/butil/base_paths.cc:26,1
    - Dst: butil::GetHomeDir
      Src: /src/brpc/src/butil/base_paths.cc:30,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/butil/base_paths.cc:33,1
    - Dst: FilePath*::Append
      Src: /src/brpc/src/butil/base_paths.cc:35,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/base_paths.cc:35,1
    - Dst: FilePath*::Append
      Src: /src/brpc/src/butil/base_paths.cc:36,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/base_paths.cc:36,1
    - Dst: FilePath*::Append
      Src: /src/brpc/src/butil/base_paths.cc:37,1
    - Dst: FILE_PATH_LITERAL
      Src: /src/brpc/src/butil/base_paths.cc:37,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/butil/base_paths.cc:38,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 29
    argCount: 2
    argNames:
    - key
    - result
    argTypes:
    - int
    - FilePath*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 13
    functionDepth: 3
    functionLinenumber: 13
    functionLinenumberEnd: 44
    functionName: butil::PathProvider
    functionSourceFile: /src/brpc/src/butil/base_paths.cc
    functionUses: 0
    functionsReached:
    - butil::GetHomeDir
    - butil::GetTempDir
    - FILE_PATH_LITERAL
    - FilePath*::DirName
    - butil::PathExists
    - FilePath*::Append
    - TestRpcPBMessageFactory::Get
    linkageType: ''
    returnType: bool
    signature: bool PathProvider(int key, FilePath* result)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 96
    functionName: '& ref_at(uint32_t i) const'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BlockRef
    signature: BlockRef & ref_at(uint32_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 99
    functionName: '& ref_at(uint32_t i)'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BlockRef
    signature: BlockRef & ref_at(uint32_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: butil::IOBuf::capacity
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t capacity() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' v'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: butil::IOBuf::Movable
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Movable(IOBuf& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: '& value() const'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: IOBuf
    signature: IOBuf & value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::clear
      Src: /src/brpc/src/butil/iobuf.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: ~IOBuf()
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - butil::clear
    linkageType: ''
    returnType: void
    signature: void ~IOBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/src/butil/iobuf.h:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - vec
    - n
    argTypes:
    - iovec*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 235
    functionName: butil::IOBuf::appendv
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 3
    functionsReached:
    - butil::IOBuf::appendv
    linkageType: ''
    returnType: int
    signature: int appendv(const iovec* vec, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/src/butil/iobuf.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 268
    functionName: butil::IOBuf::resize
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::resize
    linkageType: ''
    returnType: int
    signature: int resize(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.h:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 348
    functionDepth: 2
    functionLinenumber: 348
    functionLinenumberEnd: 348
    functionName: butil::IOBuf::size
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 109
    functionsReached:
    - butil::IOBuf::length
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.h:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 361
    functionName: butil::IOBuf::backing_block_num
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_ref_num
    linkageType: ''
    returnType: size_t
    signature: size_t backing_block_num() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/butil/iobuf.h:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 367
    functionName: butil::IOBuf::movable
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 8
    functionsReached:
    - butil::IOBuf::Movable
    linkageType: ''
    returnType: Movable
    signature: Movable movable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_pop_or_moveout_front_ref
      Src: /src/brpc/src/butil/iobuf.h:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 391
    functionDepth: 2
    functionLinenumber: 391
    functionLinenumberEnd: 391
    functionName: butil::IOBuf::_pop_front_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 8
    functionsReached:
    - butil::IOBuf::_pop_or_moveout_front_ref
    linkageType: ''
    returnType: int
    signature: int _pop_front_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_pop_or_moveout_front_ref
      Src: /src/brpc/src/butil/iobuf.h:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 395
    functionDepth: 2
    functionLinenumber: 395
    functionLinenumberEnd: 395
    functionName: butil::IOBuf::_moveout_front_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_pop_or_moveout_front_ref
    linkageType: ''
    returnType: int
    signature: int _moveout_front_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b'
    - ' s'
    argTypes:
    - butil::IOBuf
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 434
    functionName: operator==(const butil::IOBuf& b, const butil::StringPiece& s)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator==(const butil::IOBuf& b, const butil::StringPiece& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s'
    - ' b'
    argTypes:
    - butil::StringPiece
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 436
    functionName: operator==(const butil::StringPiece& s, const butil::IOBuf& b)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator==(const butil::StringPiece& s, const butil::IOBuf& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b'
    - ' s'
    argTypes:
    - butil::IOBuf
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 438
    functionName: operator!=(const butil::IOBuf& b, const butil::StringPiece& s)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const butil::IOBuf& b, const butil::StringPiece& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s'
    - ' b'
    argTypes:
    - butil::StringPiece
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 440
    functionName: operator!=(const butil::StringPiece& s, const butil::IOBuf& b)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const butil::StringPiece& s, const butil::IOBuf& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b1'
    - ' b2'
    argTypes:
    - butil::IOBuf
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 442
    functionName: operator==(const butil::IOBuf& b1, const butil::IOBuf& b2)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator==(const butil::IOBuf& b1, const butil::IOBuf& b2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b1'
    - ' b2'
    argTypes:
    - butil::IOBuf
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 444
    functionName: operator!=(const butil::IOBuf& b1, const butil::IOBuf& b2)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const butil::IOBuf& b1, const butil::IOBuf& b2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 450
    functionName: butil::IOPortal::IOPortal
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOPortal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOPortal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 451
    functionName: butil::IOPortal::IOPortal
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOPortal(const IOPortal& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - alignment
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 495
    functionName: butil::IOReserveAlignedBuf::IOReserveAlignedBuf
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOReserveAlignedBuf(size_t alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 611
    functionName: butil::IOBufAsSnappySource::IOBufAsSnappySource
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySource(const butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 612
    functionName: ~IOBufAsSnappySource()
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufAsSnappySource()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 633
    functionName: ~IOBufAsSnappySink()
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufAsSnappySink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 667
    functionName: butil::IOBufBuilder::IOBufBuilder
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 74
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufBuilder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::shrink
      Src: /src/brpc/src/butil/iobuf.h:670,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 669
    functionDepth: 0
    functionLinenumber: 669
    functionLinenumberEnd: 672
    functionName: '& buf()'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - butil::shrink
    linkageType: ''
    returnType: IOBuf
    signature: IOBuf & buf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<IOBuf*>
      Src: /src/brpc/src/butil/iobuf.h:674,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 673
    functionDepth: 0
    functionLinenumber: 673
    functionLinenumberEnd: 675
    functionName: butil::IOBufBuilder::buf
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 12
    functionsReached:
    - static_cast<IOBuf*>
    linkageType: ''
    returnType: void
    signature: void buf(const IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Movable
      Src: /src/brpc/src/butil/iobuf.h:677,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/butil/iobuf.h:677,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' target'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 678
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 678
    functionName: butil::IOBufBuilder::move_to
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 60
    functionsReached:
    - butil::IOBufBuilder::buf
    - Movable
    linkageType: ''
    returnType: void
    signature: void move_to(IOBuf& target)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: shrink
      Src: /src/brpc/src/butil/iobuf.h:705,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 704
    functionDepth: 0
    functionLinenumber: 704
    functionLinenumberEnd: 707
    functionName: '& buf()'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - shrink
    linkageType: ''
    returnType: IOBuf
    signature: IOBuf & buf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/butil/iobuf.h:709,1
    - Dst: buf
      Src: /src/brpc/src/butil/iobuf.h:709,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' target'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 710
    functionName: butil::IOBufAppender::move_to
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 18
    functionsReached:
    - buf
    - butil::IOBuf::Movable
    linkageType: ''
    returnType: void
    signature: void move_to(IOBuf& target)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 735
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 735
    functionName: operator*() const
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 736
    functionName: operator const void*() const
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 738
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 738
    functionName: operator++(int)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 749
      start: 749
    functionDepth: 0
    functionLinenumber: 749
    functionLinenumberEnd: 749
    functionName: butil::IOBufBytesIterator::bytes_left
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t bytes_left() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 96
    functionName: '& ref_at(uint32_t i) const'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BlockRef
    signature: BlockRef & ref_at(uint32_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 99
    functionName: '& ref_at(uint32_t i)'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BlockRef
    signature: BlockRef & ref_at(uint32_t i)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: butil::IOBuf::capacity
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t capacity() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' v'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: butil::IOBuf::Movable
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Movable(IOBuf& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: '& value() const'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: IOBuf
    signature: IOBuf & value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/iobuf.h:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: ~IOBuf()
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~IOBuf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/src/butil/iobuf.h:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - vec
    - n
    argTypes:
    - iovec*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 235
    functionName: butil::IOBuf::appendv
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 4
    functionsReached:
    - butil::IOBuf::appendv
    linkageType: ''
    returnType: int
    signature: int appendv(const iovec* vec, size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/src/butil/iobuf.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 268
    functionName: butil::IOBuf::resize
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 15
    functionsReached:
    - butil::IOBuf::resize
    linkageType: ''
    returnType: int
    signature: int resize(size_t n)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/butil/iobuf.h:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 348
    functionDepth: 2
    functionLinenumber: 348
    functionLinenumberEnd: 348
    functionName: butil::IOBuf::size
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 109
    functionsReached:
    - butil::IOBuf::length
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/src/butil/iobuf.h:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 361
    functionName: butil::IOBuf::backing_block_num
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 14
    functionsReached:
    - butil::IOBuf::_ref_num
    linkageType: ''
    returnType: size_t
    signature: size_t backing_block_num() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/butil/iobuf.h:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 367
    functionName: butil::IOBuf::movable
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 8
    functionsReached:
    - butil::IOBuf::Movable
    linkageType: ''
    returnType: Movable
    signature: Movable movable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_pop_or_moveout_front_ref
      Src: /src/brpc/src/butil/iobuf.h:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 391
    functionDepth: 2
    functionLinenumber: 391
    functionLinenumberEnd: 391
    functionName: butil::IOBuf::_pop_front_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 8
    functionsReached:
    - butil::IOBuf::_pop_or_moveout_front_ref
    linkageType: ''
    returnType: int
    signature: int _pop_front_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::_pop_or_moveout_front_ref
      Src: /src/brpc/src/butil/iobuf.h:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 395
    functionDepth: 2
    functionLinenumber: 395
    functionLinenumberEnd: 395
    functionName: butil::IOBuf::_moveout_front_ref
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 2
    functionsReached:
    - butil::IOBuf::_pop_or_moveout_front_ref
    linkageType: ''
    returnType: int
    signature: int _moveout_front_ref()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b'
    - ' s'
    argTypes:
    - butil::IOBuf
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 434
    functionName: operator==(const butil::IOBuf& b, const butil::StringPiece& s)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator==(const butil::IOBuf& b, const butil::StringPiece& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s'
    - ' b'
    argTypes:
    - butil::StringPiece
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 436
    functionName: operator==(const butil::StringPiece& s, const butil::IOBuf& b)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator==(const butil::StringPiece& s, const butil::IOBuf& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:438,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b'
    - ' s'
    argTypes:
    - butil::IOBuf
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 438
    functionName: operator!=(const butil::IOBuf& b, const butil::StringPiece& s)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const butil::IOBuf& b, const butil::StringPiece& s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s'
    - ' b'
    argTypes:
    - butil::StringPiece
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 440
    functionName: operator!=(const butil::StringPiece& s, const butil::IOBuf& b)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const butil::StringPiece& s, const butil::IOBuf& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b1'
    - ' b2'
    argTypes:
    - butil::IOBuf
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 442
    functionName: operator==(const butil::IOBuf& b1, const butil::IOBuf& b2)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator==(const butil::IOBuf& b1, const butil::IOBuf& b2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equals
      Src: /src/brpc/src/butil/iobuf.h:444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' b1'
    - ' b2'
    argTypes:
    - butil::IOBuf
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 444
    functionName: operator!=(const butil::IOBuf& b1, const butil::IOBuf& b2)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - equals
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const butil::IOBuf& b1, const butil::IOBuf& b2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 450
    functionName: butil::IOPortal::IOPortal
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOPortal()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - IOPortal
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 451
    functionName: butil::IOPortal::IOPortal
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOPortal(const IOPortal& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - alignment
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 495
    functionName: butil::IOReserveAlignedBuf::IOReserveAlignedBuf
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOReserveAlignedBuf(size_t alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 611
    functionName: butil::IOBufAsSnappySource::IOBufAsSnappySource
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufAsSnappySource(const butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 612
    functionName: ~IOBufAsSnappySource()
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufAsSnappySource()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 633
    functionName: ~IOBufAsSnappySink()
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~IOBufAsSnappySink()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 667
    functionName: butil::IOBufBuilder::IOBufBuilder
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 74
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void IOBufBuilder()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: shrink
      Src: /src/brpc/src/butil/iobuf.h:670,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 669
    functionDepth: 0
    functionLinenumber: 669
    functionLinenumberEnd: 672
    functionName: '& buf()'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - shrink
    linkageType: ''
    returnType: IOBuf
    signature: IOBuf & buf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<IOBuf*>
      Src: /src/brpc/src/butil/iobuf.h:674,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 673
    functionDepth: 0
    functionLinenumber: 673
    functionLinenumberEnd: 675
    functionName: butil::IOBufBuilder::buf
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 13
    functionsReached:
    - static_cast<IOBuf*>
    linkageType: ''
    returnType: void
    signature: void buf(const IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Movable
      Src: /src/brpc/src/butil/iobuf.h:677,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/butil/iobuf.h:677,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' target'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 678
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 678
    functionName: butil::IOBufBuilder::move_to
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 60
    functionsReached:
    - butil::IOBufBuilder::buf
    - Movable
    linkageType: ''
    returnType: void
    signature: void move_to(IOBuf& target)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: shrink
      Src: /src/brpc/src/butil/iobuf.h:705,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 704
    functionDepth: 0
    functionLinenumber: 704
    functionLinenumberEnd: 707
    functionName: '& buf()'
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached:
    - shrink
    linkageType: ''
    returnType: IOBuf
    signature: IOBuf & buf()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/butil/iobuf.h:709,1
    - Dst: buf
      Src: /src/brpc/src/butil/iobuf.h:709,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' target'
    argTypes:
    - IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 710
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 710
    functionName: butil::IOBufAppender::move_to
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 18
    functionsReached:
    - buf
    - butil::IOBuf::Movable
    linkageType: ''
    returnType: void
    signature: void move_to(IOBuf& target)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 735
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 735
    functionName: operator*() const
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 736
    functionDepth: 0
    functionLinenumber: 736
    functionLinenumberEnd: 736
    functionName: operator const void*() const
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator const void*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 738
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 738
    functionName: operator++(int)
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator++(int)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 749
      start: 749
    functionDepth: 0
    functionLinenumber: 749
    functionLinenumberEnd: 749
    functionName: butil::IOBufBytesIterator::bytes_left
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t bytes_left() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/iobuf.h:770,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - butil::IOBuf
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 771
    functionName: std::swap
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 46
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(butil::IOBuf& a, butil::IOBuf& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/butil/iobuf.h:770,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - butil::IOBuf
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 771
    functionName: std::swap
    functionSourceFile: /src/brpc/src/butil/iobuf.h
    functionUses: 47
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void swap(butil::IOBuf& a, butil::IOBuf& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::SharedObject::SharedObject
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/shared_object.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::SharedObject::ref_count
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int ref_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/butil/shared_object.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: butil::SharedObject::AddRefManually
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int AddRefManually()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/butil/shared_object.h:50,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/butil/shared_object.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 54
    functionName: butil::SharedObject::RemoveRefManually
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void RemoveRefManually()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~SharedObject()
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SharedObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedObject*::AddRefManually
      Src: /src/brpc/src/butil/shared_object.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - SharedObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: butil::intrusive_ptr_add_ref
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - SharedObject*::AddRefManually
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr_add_ref(SharedObject* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedObject*::RemoveRefManually
      Src: /src/brpc/src/butil/shared_object.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - SharedObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: butil::intrusive_ptr_release
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - SharedObject*::RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr_release(SharedObject* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::SharedObject::SharedObject
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SharedObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/butil/shared_object.h:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::SharedObject::ref_count
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: int
    signature: int ref_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/butil/shared_object.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 45
    functionName: butil::SharedObject::AddRefManually
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: int
    signature: int AddRefManually()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/butil/shared_object.h:50,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/butil/shared_object.h:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 54
    functionName: butil::SharedObject::RemoveRefManually
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - fetch_sub
    - std::atomic_thread_fence
    linkageType: ''
    returnType: void
    signature: void RemoveRefManually()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~SharedObject()
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SharedObject()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedObject*::AddRefManually
      Src: /src/brpc/src/butil/shared_object.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - SharedObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: butil::intrusive_ptr_add_ref
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - SharedObject*::AddRefManually
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr_add_ref(SharedObject* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedObject*::RemoveRefManually
      Src: /src/brpc/src/butil/shared_object.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - SharedObject*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: butil::intrusive_ptr_release
    functionSourceFile: /src/brpc/src/butil/shared_object.h
    functionUses: 0
    functionsReached:
    - SharedObject*::RemoveRefManually
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr_release(SharedObject* obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CPU::Initialize
      Src: /src/brpc/src/butil/cpu.cc:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 49
    functionName: butil::CPU::CPU
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 1
    functionsReached:
    - butil::CPU::Initialize
    linkageType: ''
    returnType: void
    signature: void CPU::CPU()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/cpu.cc:93,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - xcr
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 94
    functionName: butil::_xgetbv
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _xgetbv(uint32_t xcr)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:112,1
    - Dst: std::getline
      Src: /src/brpc/src/butil/cpu.cc:115,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:121,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 105
    functionDepth: 2
    functionLinenumber: 105
    functionLinenumberEnd: 127
    functionName: butil::ParseCpuInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - std::string::substr
    - butil::ReadFileToString
    - std::getline
    - DCHECK
    - std::string::empty
    - butil::FilePath
    - std::string::compare
    - std::string::assign
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string ParseCpuInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseCpuInfo
      Src: /src/brpc/src/butil/cpu.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: butil::LazyCpuInfoValue::LazyCpuInfoValue
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - ParseCpuInfo
    linkageType: ''
    returnType: void
    signature: void LazyCpuInfoValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: '& value()'
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/cpu.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: butil::CpuBrandInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: std::string
    signature: std::string & CpuBrandInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/cpu.cc:93,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - xcr
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 94
    functionName: butil::_xgetbv
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _xgetbv(uint32_t xcr)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:112,1
    - Dst: std::getline
      Src: /src/brpc/src/butil/cpu.cc:115,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:121,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 105
    functionDepth: 2
    functionLinenumber: 105
    functionLinenumberEnd: 127
    functionName: butil::ParseCpuInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - std::string::substr
    - butil::ReadFileToString
    - std::getline
    - DCHECK
    - std::string::empty
    - butil::FilePath
    - std::string::compare
    - std::string::assign
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string ParseCpuInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseCpuInfo
      Src: /src/brpc/src/butil/cpu.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: butil::LazyCpuInfoValue::LazyCpuInfoValue
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - ParseCpuInfo
    linkageType: ''
    returnType: void
    signature: void LazyCpuInfoValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: '& value()'
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/cpu.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: butil::CpuBrandInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: std::string
    signature: std::string & CpuBrandInfo()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:163,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/cpu.cc:165,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/cpu.cc:166,1
    - Dst: assign
      Src: /src/brpc/src/butil/cpu.cc:167,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:171,1
    - Dst: _xgetbv
      Src: /src/brpc/src/butil/cpu.cc:202,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:207,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:216,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/cpu.cc:217,1
    - Dst: assign
      Src: /src/brpc/src/butil/cpu.cc:220,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:225,1
    - Dst: assign
      Src: /src/brpc/src/butil/cpu.cc:229,1
    - Dst: CpuBrandInfo
      Src: /src/brpc/src/butil/cpu.cc:229,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 231
    functionName: butil::CPU::Initialize
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 1
    functionsReached:
    - std::swap
    - assign
    - __cpuid
    - CpuBrandInfo
    - memcpy
    - _xgetbv
    linkageType: ''
    returnType: void
    signature: void CPU::Initialize()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: has_avx
      Src: /src/brpc/src/butil/cpu.cc:234,1
    - Dst: has_sse42
      Src: /src/brpc/src/butil/cpu.cc:235,1
    - Dst: has_sse41
      Src: /src/brpc/src/butil/cpu.cc:236,1
    - Dst: has_ssse3
      Src: /src/brpc/src/butil/cpu.cc:237,1
    - Dst: has_sse3
      Src: /src/brpc/src/butil/cpu.cc:238,1
    - Dst: has_sse2
      Src: /src/brpc/src/butil/cpu.cc:239,1
    - Dst: has_sse
      Src: /src/brpc/src/butil/cpu.cc:240,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 242
    functionName: butil::CPU::GetIntelMicroArchitecture
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - has_sse2
    - has_sse41
    - has_ssse3
    - has_sse42
    - has_sse
    - has_sse3
    - has_avx
    linkageType: ''
    returnType: CPU::IntelMicroArchitecture
    signature: CPU::IntelMicroArchitecture CPU::GetIntelMicroArchitecture() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::CPU::Initialize
      Src: /src/brpc/src/butil/cpu.cc:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 49
    functionName: butil::CPU::CPU
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 1
    functionsReached:
    - butil::CPU::Initialize
    linkageType: ''
    returnType: void
    signature: void CPU::CPU()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/cpu.cc:93,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - xcr
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 94
    functionName: butil::_xgetbv
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _xgetbv(uint32_t xcr)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:112,1
    - Dst: std::getline
      Src: /src/brpc/src/butil/cpu.cc:115,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:121,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 105
    functionDepth: 2
    functionLinenumber: 105
    functionLinenumberEnd: 127
    functionName: butil::ParseCpuInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - std::string::substr
    - butil::ReadFileToString
    - std::getline
    - DCHECK
    - std::string::empty
    - butil::FilePath
    - std::string::compare
    - std::string::assign
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string ParseCpuInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseCpuInfo
      Src: /src/brpc/src/butil/cpu.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: butil::LazyCpuInfoValue::LazyCpuInfoValue
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - ParseCpuInfo
    linkageType: ''
    returnType: void
    signature: void LazyCpuInfoValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: '& value()'
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/cpu.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: butil::CpuBrandInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: std::string
    signature: std::string & CpuBrandInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 66
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - cpu_info
    - info_type
    argTypes:
    - int[]
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: butil::__cpuid
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void __cpuid(int cpu_info[4], int info_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/butil/cpu.cc:93,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - xcr
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 94
    functionName: butil::_xgetbv
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - static_cast<uint64_t>
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t _xgetbv(uint32_t xcr)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/butil/cpu.cc:109,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:110,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/cpu.cc:112,1
    - Dst: std::getline
      Src: /src/brpc/src/butil/cpu.cc:115,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:116,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:117,1
    - Dst: std::string::compare
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:120,1
    - Dst: std::string::assign
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/cpu.cc:121,1
    - Dst: strlen
      Src: /src/brpc/src/butil/cpu.cc:121,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 105
    functionDepth: 2
    functionLinenumber: 105
    functionLinenumberEnd: 127
    functionName: butil::ParseCpuInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - std::string::substr
    - butil::ReadFileToString
    - std::getline
    - DCHECK
    - std::string::empty
    - butil::FilePath
    - std::string::compare
    - std::string::assign
    - strlen
    linkageType: ''
    returnType: std::string
    signature: std::string ParseCpuInfo()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseCpuInfo
      Src: /src/brpc/src/butil/cpu.cc:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    functionName: butil::LazyCpuInfoValue::LazyCpuInfoValue
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - ParseCpuInfo
    linkageType: ''
    returnType: void
    signature: void LazyCpuInfoValue()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: '& value()'
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/cpu.cc:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 144
    functionName: butil::CpuBrandInfo
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: std::string
    signature: std::string & CpuBrandInfo()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:163,1
    - Dst: std::swap
      Src: /src/brpc/src/butil/cpu.cc:165,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/cpu.cc:166,1
    - Dst: assign
      Src: /src/brpc/src/butil/cpu.cc:167,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:171,1
    - Dst: _xgetbv
      Src: /src/brpc/src/butil/cpu.cc:202,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:207,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:216,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/cpu.cc:217,1
    - Dst: assign
      Src: /src/brpc/src/butil/cpu.cc:220,1
    - Dst: __cpuid
      Src: /src/brpc/src/butil/cpu.cc:225,1
    - Dst: assign
      Src: /src/brpc/src/butil/cpu.cc:229,1
    - Dst: CpuBrandInfo
      Src: /src/brpc/src/butil/cpu.cc:229,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 231
    functionName: butil::CPU::Initialize
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 2
    functionsReached:
    - std::swap
    - assign
    - __cpuid
    - CpuBrandInfo
    - memcpy
    - _xgetbv
    linkageType: ''
    returnType: void
    signature: void CPU::Initialize()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: has_avx
      Src: /src/brpc/src/butil/cpu.cc:234,1
    - Dst: has_sse42
      Src: /src/brpc/src/butil/cpu.cc:235,1
    - Dst: has_sse41
      Src: /src/brpc/src/butil/cpu.cc:236,1
    - Dst: has_ssse3
      Src: /src/brpc/src/butil/cpu.cc:237,1
    - Dst: has_sse3
      Src: /src/brpc/src/butil/cpu.cc:238,1
    - Dst: has_sse2
      Src: /src/brpc/src/butil/cpu.cc:239,1
    - Dst: has_sse
      Src: /src/brpc/src/butil/cpu.cc:240,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 242
    functionName: butil::CPU::GetIntelMicroArchitecture
    functionSourceFile: /src/brpc/src/butil/cpu.cc
    functionUses: 0
    functionsReached:
    - has_sse2
    - has_sse41
    - has_ssse3
    - has_sse42
    - has_sse
    - has_sse3
    - has_avx
    linkageType: ''
    returnType: CPU::IntelMicroArchitecture
    signature: CPU::IntelMicroArchitecture CPU::GetIntelMicroArchitecture() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - type
    - ','
    - var_name
    - ','
    - default_value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 48
    functionName: BAIDU_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_VOLATILE_THREAD_LOCAL(type, var_name, default_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - var_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: BAIDU_GET_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_GET_VOLATILE_THREAD_LOCAL(var_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - var_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL(var_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var_name
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 56
    functionName: BAIDU_SET_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_SET_VOLATILE_THREAD_LOCAL(var_name, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - type
    - ','
    - var_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 61
    functionName: EXTERN_BAIDU_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXTERN_BAIDU_VOLATILE_THREAD_LOCAL(type, var_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - var_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 63
    functionName: BAIDU_GET_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_GET_VOLATILE_THREAD_LOCAL(var_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - var_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL(var_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var_name
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: BAIDU_SET_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_SET_VOLATILE_THREAD_LOCAL(var_name, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - type
    - ','
    - var_name
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: EXTERN_BAIDU_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: EXTERN_BAIDU_VOLATILE_THREAD_LOCAL(type, var_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/thread_local.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: butil::delete_object
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    linkageType: ''
    returnType: void
    signature: void delete_object(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/thread_local.h:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: butil::delete_object
    functionSourceFile: /src/brpc/src/butil/thread_local.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    linkageType: ''
    returnType: void
    signature: void delete_object(void* arg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:27,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: StringToLowerASCII
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:42,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/environment.cc:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: butil::EnvironmentImpl::GetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - std::string
    - StringToLowerASCII
    - StringToUpperASCII
    - butil::EnvironmentImpl::GetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetVar(const char* variable_name,\n                      std::string*
      result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::SetVarImpl
      Src: /src/brpc/src/butil/environment.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: butil::EnvironmentImpl::SetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::SetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool SetVar(const char* variable_name,\n                      const
      std::string& new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::UnSetVarImpl
      Src: /src/brpc/src/butil/environment.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::EnvironmentImpl::UnSetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::UnSetVarImpl
    linkageType: ''
    returnType: bool
    signature: bool UnSetVar(const char* variable_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/environment.cc:57,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:65,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:66,1
    - Dst: wchar_t::wchar_t
      Src: /src/brpc/src/butil/environment.cc:70,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: WideToUTF8
      Src: /src/brpc/src/butil/environment.cc:73,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 79
    functionName: butil::EnvironmentImpl::GetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 1
    functionsReached:
    - WideToUTF8
    - ::GetEnvironmentVariable
    - wchar_t::wchar_t
    - UTF8ToWide
    - scoped_ptr::get
    - getenv
    linkageType: ''
    returnType: bool
    signature: bool GetVarImpl(const char* variable_name, std::string* result)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: c_str
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: butil::EnvironmentImpl::SetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 1
    functionsReached:
    - SetEnvironmentVariable
    - c_str
    - UTF8ToWide
    - setenv
    linkageType: ''
    returnType: bool
    signature: bool SetVarImpl(const char* variable_name, const std::string& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unsetenv
      Src: /src/brpc/src/butil/environment.cc:95,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:98,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 100
    functionName: butil::EnvironmentImpl::UnSetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 1
    functionsReached:
    - unsetenv
    - SetEnvironmentVariable
    - UTF8ToWide
    linkageType: ''
    returnType: bool
    signature: bool UnSetVarImpl(const char* variable_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativeEnvironmentString
      Src: /src/brpc/src/butil/environment.cc:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - input
    - key
    argTypes:
    - NativeEnvironmentString::value_type*
    - NativeEnvironmentString*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::ParseEnvLine
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - NativeEnvironmentString
    linkageType: ''
    returnType: size_t
    signature: "size_t ParseEnvLine(const NativeEnvironmentString::value_type* input,\n
      \                   NativeEnvironmentString* key)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:27,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: StringToLowerASCII
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:42,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/environment.cc:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: butil::EnvironmentImpl::GetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - std::string
    - StringToLowerASCII
    - StringToUpperASCII
    - butil::EnvironmentImpl::GetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetVar(const char* variable_name,\n                      std::string*
      result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::SetVarImpl
      Src: /src/brpc/src/butil/environment.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: butil::EnvironmentImpl::SetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::SetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool SetVar(const char* variable_name,\n                      const
      std::string& new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::UnSetVarImpl
      Src: /src/brpc/src/butil/environment.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::EnvironmentImpl::UnSetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::UnSetVarImpl
    linkageType: ''
    returnType: bool
    signature: bool UnSetVar(const char* variable_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/environment.cc:57,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:65,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:66,1
    - Dst: wchar_t::wchar_t
      Src: /src/brpc/src/butil/environment.cc:70,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: WideToUTF8
      Src: /src/brpc/src/butil/environment.cc:73,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 79
    functionName: butil::EnvironmentImpl::GetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 2
    functionsReached:
    - WideToUTF8
    - ::GetEnvironmentVariable
    - wchar_t::wchar_t
    - UTF8ToWide
    - scoped_ptr::get
    - getenv
    linkageType: ''
    returnType: bool
    signature: bool GetVarImpl(const char* variable_name, std::string* result)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: c_str
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: butil::EnvironmentImpl::SetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 2
    functionsReached:
    - SetEnvironmentVariable
    - c_str
    - UTF8ToWide
    - setenv
    linkageType: ''
    returnType: bool
    signature: bool SetVarImpl(const char* variable_name, const std::string& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unsetenv
      Src: /src/brpc/src/butil/environment.cc:95,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:98,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 100
    functionName: butil::EnvironmentImpl::UnSetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 2
    functionsReached:
    - unsetenv
    - SetEnvironmentVariable
    - UTF8ToWide
    linkageType: ''
    returnType: bool
    signature: bool UnSetVarImpl(const char* variable_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativeEnvironmentString
      Src: /src/brpc/src/butil/environment.cc:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - input
    - key
    argTypes:
    - NativeEnvironmentString::value_type*
    - NativeEnvironmentString*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::ParseEnvLine
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - NativeEnvironmentString
    linkageType: ''
    returnType: size_t
    signature: "size_t ParseEnvLine(const NativeEnvironmentString::value_type* input,\n
      \                   NativeEnvironmentString* key)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: Environment::~Environment()
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Environment::~Environment()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EnvironmentImpl::EnvironmentImpl
      Src: /src/brpc/src/butil/environment.cc:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: butil::Environment::Create
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - EnvironmentImpl::EnvironmentImpl
    linkageType: ''
    returnType: Environment
    signature: Environment * Environment::Create()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetVar
      Src: /src/brpc/src/butil/environment.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: butil::Environment::HasVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - GetVar
    linkageType: ''
    returnType: bool
    signature: bool Environment::HasVar(const char* variable_name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ParseEnvLine
      Src: /src/brpc/src/butil/environment.cc:154,1
    - Dst: butil::find
      Src: /src/brpc/src/butil/environment.cc:157,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:158,1
    - Dst: string16::append
      Src: /src/brpc/src/butil/environment.cc:159,1
    - Dst: begin
      Src: /src/brpc/src/butil/environment.cc:165,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:166,1
    - Dst: EnvironmentMap::const_iterator::second::empty
      Src: /src/brpc/src/butil/environment.cc:167,1
    - Dst: string16::append
      Src: /src/brpc/src/butil/environment.cc:168,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:169,1
    - Dst: string16::append
      Src: /src/brpc/src/butil/environment.cc:170,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:171,1
    - Dst: string16::empty
      Src: /src/brpc/src/butil/environment.cc:177,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:178,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:179,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - env
    - ' changes'
    argTypes:
    - wchar_t*
    - EnvironmentMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 181
    functionName: butil::AlterEnvironment
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - end
    - string16::empty
    - butil::find
    - butil::ParseEnvLine
    - begin
    - EnvironmentMap::const_iterator::second::empty
    - string16::append
    - string16::push_back
    linkageType: ''
    returnType: string16
    signature: "string16 AlterEnvironment(const wchar_t* env,\n                          const
      EnvironmentMap& changes)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ParseEnvLine
      Src: /src/brpc/src/butil/environment.cc:194,1
    - Dst: butil::find
      Src: /src/brpc/src/butil/environment.cc:197,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:198,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/environment.cc:199,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:199,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/environment.cc:200,1
    - Dst: begin
      Src: /src/brpc/src/butil/environment.cc:205,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:206,1
    - Dst: EnvironmentMap::const_iterator::second::empty
      Src: /src/brpc/src/butil/environment.cc:207,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/environment.cc:208,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:208,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/environment.cc:209,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/butil/environment.cc:210,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/environment.cc:211,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/butil/environment.cc:212,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:217,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:218,1
    - Dst: char::char
      Src: /src/brpc/src/butil/environment.cc:219,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/butil/environment.cc:222,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:223,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:223,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/environment.cc:224,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/environment.cc:225,1
    - Dst: std::string::data
      Src: /src/brpc/src/butil/environment.cc:225,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:225,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:228,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:230,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/src/butil/environment.cc:232,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - env
    - ' changes'
    argTypes:
    - char**
    - EnvironmentMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 233
    functionName: butil::AlterEnvironment
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - end
    - std::vector::push_back
    - char::char
    - reinterpret_cast<char*>
    - memcpy
    - std::string::data
    - std::string::empty
    - scoped_ptr::get
    - std::string::append
    - scoped_ptr::Pass
    - butil::find
    - butil::ParseEnvLine
    - begin
    - EnvironmentMap::const_iterator::second::empty
    - std::vector::size
    - std::string::size
    - std::string::push_back
    linkageType: ''
    returnType: scoped_ptr<char*[]>
    signature: "scoped_ptr<char*[]> AlterEnvironment(const char* const* const env,\n
      \                                    const EnvironmentMap& changes)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:27,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: StringToLowerASCII
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:42,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/environment.cc:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: butil::EnvironmentImpl::GetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - std::string
    - StringToLowerASCII
    - StringToUpperASCII
    - butil::EnvironmentImpl::GetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetVar(const char* variable_name,\n                      std::string*
      result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::SetVarImpl
      Src: /src/brpc/src/butil/environment.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: butil::EnvironmentImpl::SetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::SetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool SetVar(const char* variable_name,\n                      const
      std::string& new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::UnSetVarImpl
      Src: /src/brpc/src/butil/environment.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::EnvironmentImpl::UnSetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::UnSetVarImpl
    linkageType: ''
    returnType: bool
    signature: bool UnSetVar(const char* variable_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/environment.cc:57,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:65,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:66,1
    - Dst: wchar_t::wchar_t
      Src: /src/brpc/src/butil/environment.cc:70,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: WideToUTF8
      Src: /src/brpc/src/butil/environment.cc:73,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 79
    functionName: butil::EnvironmentImpl::GetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 3
    functionsReached:
    - WideToUTF8
    - ::GetEnvironmentVariable
    - wchar_t::wchar_t
    - UTF8ToWide
    - scoped_ptr::get
    - getenv
    linkageType: ''
    returnType: bool
    signature: bool GetVarImpl(const char* variable_name, std::string* result)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: c_str
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: butil::EnvironmentImpl::SetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 3
    functionsReached:
    - SetEnvironmentVariable
    - c_str
    - UTF8ToWide
    - setenv
    linkageType: ''
    returnType: bool
    signature: bool SetVarImpl(const char* variable_name, const std::string& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unsetenv
      Src: /src/brpc/src/butil/environment.cc:95,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:98,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 100
    functionName: butil::EnvironmentImpl::UnSetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 3
    functionsReached:
    - unsetenv
    - SetEnvironmentVariable
    - UTF8ToWide
    linkageType: ''
    returnType: bool
    signature: bool UnSetVarImpl(const char* variable_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativeEnvironmentString
      Src: /src/brpc/src/butil/environment.cc:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - input
    - key
    argTypes:
    - NativeEnvironmentString::value_type*
    - NativeEnvironmentString*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::ParseEnvLine
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 2
    functionsReached:
    - NativeEnvironmentString
    linkageType: ''
    returnType: size_t
    signature: "size_t ParseEnvLine(const NativeEnvironmentString::value_type* input,\n
      \                   NativeEnvironmentString* key)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:27,1
    - Dst: StringToUpperASCII
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:37,1
    - Dst: StringToLowerASCII
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: std::string
      Src: /src/brpc/src/butil/environment.cc:39,1
    - Dst: butil::EnvironmentImpl::GetVarImpl
      Src: /src/brpc/src/butil/environment.cc:42,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/environment.cc:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: butil::EnvironmentImpl::GetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - std::string
    - StringToLowerASCII
    - StringToUpperASCII
    - butil::EnvironmentImpl::GetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool GetVar(const char* variable_name,\n                      std::string*
      result)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::SetVarImpl
      Src: /src/brpc/src/butil/environment.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: butil::EnvironmentImpl::SetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::SetVarImpl
    linkageType: ''
    returnType: bool
    signature: "bool SetVar(const char* variable_name,\n                      const
      std::string& new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnvironmentImpl::UnSetVarImpl
      Src: /src/brpc/src/butil/environment.cc:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::EnvironmentImpl::UnSetVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - butil::EnvironmentImpl::UnSetVarImpl
    linkageType: ''
    returnType: bool
    signature: bool UnSetVar(const char* variable_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/butil/environment.cc:57,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:65,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:66,1
    - Dst: wchar_t::wchar_t
      Src: /src/brpc/src/butil/environment.cc:70,1
    - Dst: ::GetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:71,1
    - Dst: WideToUTF8
      Src: /src/brpc/src/butil/environment.cc:73,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - variable_name
    - result
    argTypes:
    - char*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 79
    functionName: butil::EnvironmentImpl::GetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - WideToUTF8
    - ::GetEnvironmentVariable
    - wchar_t::wchar_t
    - UTF8ToWide
    - scoped_ptr::get
    - getenv
    linkageType: ''
    returnType: bool
    signature: bool GetVarImpl(const char* variable_name, std::string* result)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: c_str
      Src: /src/brpc/src/butil/environment.cc:84,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:87,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - variable_name
    - ' new_value'
    argTypes:
    - char*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 90
    functionName: butil::EnvironmentImpl::SetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - SetEnvironmentVariable
    - c_str
    - UTF8ToWide
    - setenv
    linkageType: ''
    returnType: bool
    signature: bool SetVarImpl(const char* variable_name, const std::string& new_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unsetenv
      Src: /src/brpc/src/butil/environment.cc:95,1
    - Dst: SetEnvironmentVariable
      Src: /src/brpc/src/butil/environment.cc:98,1
    - Dst: UTF8ToWide
      Src: /src/brpc/src/butil/environment.cc:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 100
    functionName: butil::EnvironmentImpl::UnSetVarImpl
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - unsetenv
    - SetEnvironmentVariable
    - UTF8ToWide
    linkageType: ''
    returnType: bool
    signature: bool UnSetVarImpl(const char* variable_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativeEnvironmentString
      Src: /src/brpc/src/butil/environment.cc:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - input
    - key
    argTypes:
    - NativeEnvironmentString::value_type*
    - NativeEnvironmentString*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: butil::ParseEnvLine
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 2
    functionsReached:
    - NativeEnvironmentString
    linkageType: ''
    returnType: size_t
    signature: "size_t ParseEnvLine(const NativeEnvironmentString::value_type* input,\n
      \                   NativeEnvironmentString* key)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: Environment::~Environment()
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Environment::~Environment()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EnvironmentImpl::EnvironmentImpl
      Src: /src/brpc/src/butil/environment.cc:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    functionName: butil::Environment::Create
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - EnvironmentImpl::EnvironmentImpl
    linkageType: ''
    returnType: Environment
    signature: Environment * Environment::Create()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetVar
      Src: /src/brpc/src/butil/environment.cc:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - variable_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 141
    functionName: butil::Environment::HasVar
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 0
    functionsReached:
    - GetVar
    linkageType: ''
    returnType: bool
    signature: bool Environment::HasVar(const char* variable_name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ParseEnvLine
      Src: /src/brpc/src/butil/environment.cc:154,1
    - Dst: butil::find
      Src: /src/brpc/src/butil/environment.cc:157,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:158,1
    - Dst: string16::append
      Src: /src/brpc/src/butil/environment.cc:159,1
    - Dst: begin
      Src: /src/brpc/src/butil/environment.cc:165,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:166,1
    - Dst: EnvironmentMap::const_iterator::second::empty
      Src: /src/brpc/src/butil/environment.cc:167,1
    - Dst: string16::append
      Src: /src/brpc/src/butil/environment.cc:168,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:169,1
    - Dst: string16::append
      Src: /src/brpc/src/butil/environment.cc:170,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:171,1
    - Dst: string16::empty
      Src: /src/brpc/src/butil/environment.cc:177,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:178,1
    - Dst: string16::push_back
      Src: /src/brpc/src/butil/environment.cc:179,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - env
    - ' changes'
    argTypes:
    - wchar_t*
    - EnvironmentMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 181
    functionName: butil::AlterEnvironment
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - end
    - string16::empty
    - butil::find
    - butil::ParseEnvLine
    - begin
    - EnvironmentMap::const_iterator::second::empty
    - string16::append
    - string16::push_back
    linkageType: ''
    returnType: string16
    signature: "string16 AlterEnvironment(const wchar_t* env,\n                          const
      EnvironmentMap& changes)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::ParseEnvLine
      Src: /src/brpc/src/butil/environment.cc:194,1
    - Dst: butil::find
      Src: /src/brpc/src/butil/environment.cc:197,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:198,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/environment.cc:199,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:199,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/environment.cc:200,1
    - Dst: begin
      Src: /src/brpc/src/butil/environment.cc:205,1
    - Dst: end
      Src: /src/brpc/src/butil/environment.cc:206,1
    - Dst: EnvironmentMap::const_iterator::second::empty
      Src: /src/brpc/src/butil/environment.cc:207,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/environment.cc:208,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:208,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/environment.cc:209,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/butil/environment.cc:210,1
    - Dst: std::string::append
      Src: /src/brpc/src/butil/environment.cc:211,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/butil/environment.cc:212,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:217,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:218,1
    - Dst: char::char
      Src: /src/brpc/src/butil/environment.cc:219,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/butil/environment.cc:222,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/environment.cc:223,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:223,1
    - Dst: std::string::empty
      Src: /src/brpc/src/butil/environment.cc:224,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/environment.cc:225,1
    - Dst: std::string::data
      Src: /src/brpc/src/butil/environment.cc:225,1
    - Dst: std::string::size
      Src: /src/brpc/src/butil/environment.cc:225,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:228,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/environment.cc:230,1
    - Dst: scoped_ptr::Pass
      Src: /src/brpc/src/butil/environment.cc:232,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - env
    - ' changes'
    argTypes:
    - char**
    - EnvironmentMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 233
    functionName: butil::AlterEnvironment
    functionSourceFile: /src/brpc/src/butil/environment.cc
    functionUses: 4
    functionsReached:
    - end
    - std::vector::push_back
    - char::char
    - reinterpret_cast<char*>
    - memcpy
    - std::string::data
    - std::string::empty
    - scoped_ptr::get
    - std::string::append
    - scoped_ptr::Pass
    - butil::find
    - butil::ParseEnvLine
    - begin
    - EnvironmentMap::const_iterator::second::empty
    - std::vector::size
    - std::string::size
    - std::string::push_back
    linkageType: ''
    returnType: scoped_ptr<char*[]>
    signature: "scoped_ptr<char*[]> AlterEnvironment(const char* const* const env,\n
      \                                    const EnvironmentMap& changes)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - error_code
    - ','
    - description
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: BAIDU_REGISTER_ERRNO
    functionSourceFile: /src/brpc/src/butil/errno.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_REGISTER_ERRNO(error_code, description)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - n
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 26
    functionName: MSVC_SUPPRESS_WARNING
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSVC_SUPPRESS_WARNING(n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - n
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: MSVC_PUSH_DISABLE_WARNING
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSVC_PUSH_DISABLE_WARNING(n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - n
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: MSVC_PUSH_WARNING_LEVEL
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSVC_PUSH_WARNING_LEVEL(n)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    functionName: MSVC_POP_WARNING
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSVC_POP_WARNING()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: MSVC_DISABLE_OPTIMIZE
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSVC_DISABLE_OPTIMIZE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    functionName: MSVC_ENABLE_OPTIMIZE
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSVC_ENABLE_OPTIMIZE()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - code
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: NON_EXPORTED_BASE
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NON_EXPORTED_BASE(code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - code
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 67
    functionName: NON_EXPORTED_BASE
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: NON_EXPORTED_BASE(code)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - byte_alignment
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 146
    functionName: ALIGNAS
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGNAS(byte_alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - byte_alignment
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 148
    functionName: ALIGNAS
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGNAS(byte_alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - type
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: ALIGNOF
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGNOF(type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - type
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 159
    functionName: ALIGNOF
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ALIGNOF(type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FEATURE
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 206
    functionName: BUTIL_HAS_FEATURE
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_HAS_FEATURE(FEATURE)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - FEATURE
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 208
    functionName: BUTIL_HAS_FEATURE
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_HAS_FEATURE(FEATURE)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - format_param
    - ','
    - dots_param
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 234
    functionName: PRINTF_FORMAT
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PRINTF_FORMAT(format_param, dots_param)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - p
    - ','
    - s
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 253
    functionName: MSAN_UNPOISON
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MSAN_UNPOISON(p, s)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 272
    functionName: BAIDU_LIKELY
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 32
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LIKELY(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 273
    functionName: BAIDU_UNLIKELY
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 106
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_UNLIKELY(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 275
    functionName: BAIDU_LIKELY
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 32
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LIKELY(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 275
    functionDepth: 0
    functionLinenumber: 275
    functionLinenumberEnd: 276
    functionName: BAIDU_UNLIKELY
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 106
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_UNLIKELY(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 279
    functionName: BAIDU_LIKELY
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 32
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_LIKELY(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 280
    functionName: BAIDU_UNLIKELY
    functionSourceFile: /src/brpc/src/butil/compiler_specific.h
    functionUses: 106
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BAIDU_UNLIKELY(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::value
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 78
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const T*)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::value
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 78
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t value()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: butil::validate
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool validate(const T*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: butil::local_pool_free_empty
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: bool
    signature: bool local_pool_free_empty()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:86,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool.h:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: butil::get_object
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 2
    functionsReached:
    - get_bthread_singleton
    - std::forward<Args>
    linkageType: ''
    returnType: T
    signature: T * get_object(Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::return_object
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 40
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: int
    signature: int return_object(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 103
    functionName: butil::clear_objects
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void clear_objects()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: butil::describe_objects
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: ObjectPoolInfo
    signature: ObjectPoolInfo describe_objects()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: butil::local_pool_free_empty
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: bool
    signature: bool local_pool_free_empty()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:86,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/object_pool.h:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 87
    functionName: butil::get_object
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 2
    functionsReached:
    - get_bthread_singleton
    - std::forward<Args>
    linkageType: ''
    returnType: T
    signature: T * get_object(Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 96
    functionName: butil::return_object
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 40
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: int
    signature: int return_object(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 103
    functionName: butil::clear_objects
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: void
    signature: void clear_objects()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_bthread_singleton
      Src: /src/brpc/src/butil/object_pool.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: butil::describe_objects
    functionSourceFile: /src/brpc/src/butil/object_pool.h
    functionUses: 0
    functionsReached:
    - get_bthread_singleton
    linkageType: ''
    returnType: ObjectPoolInfo
    signature: ObjectPoolInfo describe_objects()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:13,1
    - Dst: modp_b64_encode_len
      Src: /src/brpc/src/butil/base64.cc:13,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:13,1
    - Dst: modp_b64_encode
      Src: /src/brpc/src/butil/base64.cc:16,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/base64.cc:16,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:16,1
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:18,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/butil/base64.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' input'
    - output
    argTypes:
    - StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 20
    functionName: butil::Base64Encode
    functionSourceFile: /src/brpc/src/butil/base64.cc
    functionUses: 15
    functionsReached:
    - butil::data
    - std::string*::swap
    - modp_b64_encode
    - std::string::resize
    - modp_b64_encode_len
    - size
    linkageType: ''
    returnType: void
    signature: void Base64Encode(const StringPiece& input, std::string* output)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:24,1
    - Dst: modp_b64_decode_len
      Src: /src/brpc/src/butil/base64.cc:24,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:24,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:27,1
    - Dst: modp_b64_decode
      Src: /src/brpc/src/butil/base64.cc:28,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/base64.cc:28,1
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:32,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/butil/base64.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' input'
    - output
    argTypes:
    - StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 35
    functionName: butil::Base64Decode
    functionSourceFile: /src/brpc/src/butil/base64.cc
    functionUses: 7
    functionsReached:
    - butil::data
    - std::string*::swap
    - std::string::resize
    - modp_b64_decode_len
    - modp_b64_decode
    - size
    linkageType: ''
    returnType: bool
    signature: bool Base64Decode(const StringPiece& input, std::string* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:13,1
    - Dst: modp_b64_encode_len
      Src: /src/brpc/src/butil/base64.cc:13,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:13,1
    - Dst: modp_b64_encode
      Src: /src/brpc/src/butil/base64.cc:16,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/base64.cc:16,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:16,1
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:18,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/butil/base64.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' input'
    - output
    argTypes:
    - StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 20
    functionName: butil::Base64Encode
    functionSourceFile: /src/brpc/src/butil/base64.cc
    functionUses: 15
    functionsReached:
    - butil::data
    - std::string*::swap
    - modp_b64_encode
    - std::string::resize
    - modp_b64_encode_len
    - size
    linkageType: ''
    returnType: void
    signature: void Base64Encode(const StringPiece& input, std::string* output)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:24,1
    - Dst: modp_b64_decode_len
      Src: /src/brpc/src/butil/base64.cc:24,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:24,1
    - Dst: size
      Src: /src/brpc/src/butil/base64.cc:27,1
    - Dst: modp_b64_decode
      Src: /src/brpc/src/butil/base64.cc:28,1
    - Dst: butil::data
      Src: /src/brpc/src/butil/base64.cc:28,1
    - Dst: std::string::resize
      Src: /src/brpc/src/butil/base64.cc:32,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/butil/base64.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' input'
    - output
    argTypes:
    - StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 22
    functionDepth: 1
    functionLinenumber: 22
    functionLinenumberEnd: 35
    functionName: butil::Base64Decode
    functionSourceFile: /src/brpc/src/butil/base64.cc
    functionUses: 7
    functionsReached:
    - butil::data
    - std::string*::swap
    - std::string::resize
    - modp_b64_decode_len
    - modp_b64_decode
    - size
    linkageType: ''
    returnType: bool
    signature: bool Base64Decode(const StringPiece& input, std::string* output)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_malloc
      Src: /src/brpc/src/butil/ssl_compat.h:38,1
    - Dst: memset
      Src: /src/brpc/src/butil/ssl_compat.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - num
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 43
    functionName: OPENSSL_zalloc
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - OPENSSL_malloc
    - memset
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE *OPENSSL_zalloc(size_t num)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:55,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:59,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:63,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 4
    argNames:
    - r
    - n
    - e
    - d
    argTypes:
    - RSA*
    - BIGNUM*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 68
    functionName: RSA_set0_key
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:79,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:83,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 3
    argNames:
    - r
    - p
    - q
    argTypes:
    - RSA*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 88
    functionName: RSA_set0_factors
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:100,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:104,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:108,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 4
    argNames:
    - r
    - dmp1
    - dmq1
    - iqmp
    argTypes:
    - RSA*
    - BIGNUM*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 113
    functionName: RSA_set0_crt_params
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1,
      BIGNUM *iqmp)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 4
    argNames:
    - r
    - n
    - e
    - d
    argTypes:
    - RSA*
    - BIGNUM**
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: RSA_get0_key
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE RSA_get0_key(const RSA *r, \n        const BIGNUM **n,
      const BIGNUM **e, const BIGNUM **d)"
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - r
    - p
    - q
    argTypes:
    - RSA*
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 130
    functionName: RSA_get0_factors
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_get0_factors(const RSA *r, const BIGNUM **p, const
      BIGNUM **q)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 4
    argNames:
    - r
    - dmp1
    - dmq1
    - iqmp
    argTypes:
    - RSA*
    - BIGNUM**
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 141
    functionName: RSA_get0_crt_params
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE RSA_get0_crt_params(const RSA *r,\n        const BIGNUM
      **dmp1, const BIGNUM **dmq1,\n        const BIGNUM **iqmp)"
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 4
    argNames:
    - d
    - p
    - q
    - g
    argTypes:
    - DSA*
    - BIGNUM**
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 151
    functionName: DSA_get0_pqg
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE DSA_get0_pqg(const DSA *d,\n        const BIGNUM **p,
      const BIGNUM **q, const BIGNUM **g)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:163,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:167,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:171,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 4
    argNames:
    - d
    - p
    - q
    - g
    argTypes:
    - DSA*
    - BIGNUM*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 176
    functionName: DSA_set0_pqg
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - d
    - pub_key
    - priv_key
    argTypes:
    - DSA*
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 184
    functionName: DSA_get0_key
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE DSA_get0_key(const DSA *d,\n        const BIGNUM **pub_key,
      const BIGNUM **priv_key)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:195,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:199,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - d
    - pub_key
    - priv_key
    argTypes:
    - DSA*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 204
    functionName: DSA_set0_key
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - sig
    - pr
    - ps
    argTypes:
    - DSA_SIG*
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 211
    functionName: DSA_SIG_get0
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const
      BIGNUM **ps)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BN_clear_free
      Src: /src/brpc/src/butil/ssl_compat.h:216,1
    - Dst: BN_clear_free
      Src: /src/brpc/src/butil/ssl_compat.h:217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - sig
    - r
    - s
    argTypes:
    - DSA_SIG*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 221
    functionName: DSA_SIG_set0
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_clear_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 4
    argNames:
    - dh
    - p
    - q
    - g
    argTypes:
    - DH*
    - BIGNUM**
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 231
    functionName: DH_get0_pqg
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE DH_get0_pqg(const DH *dh,\n        const BIGNUM **p, const
      BIGNUM **q, const BIGNUM **g)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:242,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:246,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:250,1
    - Dst: BN_num_bits
      Src: /src/brpc/src/butil/ssl_compat.h:255,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 4
    argNames:
    - dh
    - p
    - q
    - g
    argTypes:
    - DH*
    - BIGNUM*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 259
    functionName: DH_set0_pqg
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 12
    functionsReached:
    - BN_num_bits
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - dh
    - pub_key
    - priv_key
    argTypes:
    - DH*
    - BIGNUM**
    - BIGNUM**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 266
    functionName: DH_get0_key
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DH_get0_key(const DH *dh, const BIGNUM **pub_key, const
      BIGNUM **priv_key)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:277,1
    - Dst: BN_free
      Src: /src/brpc/src/butil/ssl_compat.h:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - dh
    - pub_key
    - priv_key
    argTypes:
    - DH*
    - BIGNUM*
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 286
    functionName: DH_set0_key
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - dh
    - length
    argTypes:
    - DH*
    - long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 291
    functionName: DH_set_length
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE DH_set_length(DH *dh, long length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - meth
    argTypes:
    - RSA_METHOD*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 299
    functionName: RSA_meth_set_priv_enc
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE RSA_meth_set_priv_enc(RSA_METHOD *meth,\n        int (*priv_enc)
      (int flen, const unsigned char *from,\n            unsigned char *to, RSA *rsa,\n
      \           int padding))"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - meth
    argTypes:
    - RSA_METHOD*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 307
    functionName: RSA_meth_set_priv_dec
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: "BRPC_INLINE RSA_meth_set_priv_dec(RSA_METHOD *meth,\n        int (*priv_dec)
      (int flen, const unsigned char *from,\n            unsigned char *to, RSA *rsa,\n
      \           int padding))"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - meth
    argTypes:
    - RSA_METHOD*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 312
    functionName: RSA_meth_set_finish
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_meth_set_finish(RSA_METHOD *meth, int (*finish) (RSA
      *rsa))
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_free
      Src: /src/brpc/src/butil/ssl_compat.h:316,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/butil/ssl_compat.h:317,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - meth
    argTypes:
    - RSA_METHOD*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 319
    functionName: RSA_meth_free
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - OPENSSL_free
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_meth_free(RSA_METHOD *meth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BN_num_bits
      Src: /src/brpc/src/butil/ssl_compat.h:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - RSA*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 323
    functionName: RSA_bits
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 0
    functionsReached:
    - BN_num_bits
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE RSA_bits(const RSA *r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/butil/ssl_compat.h:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bn
    argTypes:
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 343
    functionName: get_rfc2409_prime_1024
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 6
    functionsReached:
    - BN_bin2bn
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE * get_rfc2409_prime_1024(BIGNUM* bn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/butil/ssl_compat.h:370,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bn
    argTypes:
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 371
    functionName: get_rfc3526_prime_2048
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 2
    functionsReached:
    - BN_bin2bn
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE * get_rfc3526_prime_2048(BIGNUM* bn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/butil/ssl_compat.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bn
    argTypes:
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 420
    functionName: get_rfc3526_prime_4096
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 2
    functionsReached:
    - BN_bin2bn
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE * get_rfc3526_prime_4096(BIGNUM* bn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/brpc/src/butil/ssl_compat.h:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bn
    argTypes:
    - BIGNUM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 513
    functionName: get_rfc3526_prime_8192
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 2
    functionsReached:
    - BN_bin2bn
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE * get_rfc3526_prime_8192(BIGNUM* bn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_type
      Src: /src/brpc/src/butil/ssl_compat.h:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - pkey
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 515
    functionDepth: 0
    functionLinenumber: 515
    functionLinenumberEnd: 517
    functionName: EVP_PKEY_base_id
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 2
    functionsReached:
    - EVP_PKEY_type
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE EVP_PKEY_base_id(const EVP_PKEY *pkey)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 1
    argNames:
    - err
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 552
    functionName: BIO_fd_non_fatal_error
    functionSourceFile: /src/brpc/src/butil/ssl_compat.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: BRPC_INLINE
    signature: BRPC_INLINE BIO_fd_non_fatal_error(int err)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: statfs
      Src: /src/brpc/src/butil/file_util_linux.cc:50,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_linux.cc:50,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 2
    argNames:
    - ' path'
    - type
    argTypes:
    - FilePath
    - FileSystemType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 94
    functionName: butil::GetFileSystemType
    functionSourceFile: /src/brpc/src/butil/file_util_linux.cc
    functionUses: 0
    functionsReached:
    - statfs
    - butil::value
    linkageType: ''
    returnType: bool
    signature: bool GetFileSystemType(const FilePath& path, FileSystemType* type)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: statfs
      Src: /src/brpc/src/butil/file_util_linux.cc:50,1
    - Dst: butil::value
      Src: /src/brpc/src/butil/file_util_linux.cc:50,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 2
    argNames:
    - ' path'
    - type
    argTypes:
    - FilePath
    - FileSystemType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 94
    functionName: butil::GetFileSystemType
    functionSourceFile: /src/brpc/src/butil/file_util_linux.cc
    functionUses: 0
    functionsReached:
    - statfs
    - butil::value
    linkageType: ''
    returnType: bool
    signature: bool GetFileSystemType(const FilePath& path, FileSystemType* type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 196
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 58
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 83
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 78
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 34
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:103,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:104,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:113,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 117
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:122,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 161
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 194
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 85
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 214
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 235
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 35
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:239,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:240,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 244
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:249,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:258,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 297
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 302
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 206
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 58
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 87
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 78
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 36
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:103,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:104,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:113,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 117
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:122,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 161
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 194
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 89
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 214
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 235
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 37
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:239,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:240,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 244
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:249,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:258,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 297
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 302
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 216
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 58
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 91
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 78
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 38
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:103,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:104,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:113,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 117
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:122,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 161
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 194
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 93
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 214
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 235
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 39
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:239,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:240,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 244
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:249,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:258,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 297
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 302
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::subtle::MemoryBarrier
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 226
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MemoryBarrier()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 58
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 95
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,\n                                         Atomic32
      old_value,\n                                         Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 78
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,\n                                         Atomic32
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 99
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 40
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,\n                                          Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:103,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:104,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 108
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,\n                                        Atomic32
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:113,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 117
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:122,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic32*
    - Atomic32
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic32
    signature: "Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,\n                                       Atomic32
      old_value,\n                                       Atomic32 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 135
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic32*
    - Atomic32
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic32* ptr, Atomic32 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 NoBarrier_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 161
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Acquire_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:164,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic32*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic32
    signature: Atomic32 Release_Load(volatile const Atomic32* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 194
    functionName: butil::subtle::NoBarrier_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 97
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,\n                                         Atomic64
      old_value,\n                                         Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 214
    functionName: butil::subtle::NoBarrier_AtomicExchange
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,\n                                         Atomic64
      new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 235
    functionName: butil::subtle::NoBarrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,\n                                          Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:239,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:240,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ptr
    - increment
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 244
    functionName: butil::subtle::Barrier_AtomicIncrement
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 22
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_AtomicIncrement
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,\n                                        Atomic64
      increment)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:249,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: butil::subtle::Acquire_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 16
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:258,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ptr
    - old_value
    - new_value
    argTypes:
    - Atomic64*
    - Atomic64
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: butil::subtle::Release_CompareAndSwap
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 4
    functionsReached:
    - butil::subtle::MemoryBarrier
    - butil::subtle::NoBarrier_CompareAndSwap
    linkageType: ''
    returnType: Atomic64
    signature: "Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,\n                                       Atomic64
      old_value,\n                                       Atomic64 new_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 266
    functionName: butil::subtle::NoBarrier_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: butil::subtle::Acquire_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: void
    signature: void Acquire_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - value
    argTypes:
    - Atomic64*
    - Atomic64
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: butil::subtle::Release_Store
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Release_Store(volatile Atomic64* ptr, Atomic64 value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 284
    functionName: butil::subtle::NoBarrier_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 15
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 NoBarrier_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 297
    functionName: butil::subtle::Acquire_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 21
    functionsReached: []
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Acquire_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Atomic64*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 302
    functionName: butil::subtle::Release_Load
    functionSourceFile: /src/brpc/src/butil/atomicops_internals_arm64_gcc.h
    functionUses: 7
    functionsReached:
    - butil::subtle::MemoryBarrier
    linkageType: ''
    returnType: Atomic64
    signature: Atomic64 Release_Load(volatile const Atomic64* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: intrusive_ptr_add_ref
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached:
    - intrusive_ptr_add_ref
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr(T * p, bool add_ref = true)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: detail::sp_empty
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:79,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:80,1
    - Dst: intrusive_ptr_add_ref
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached:
    - get
    - detail::sp_empty
    - intrusive_ptr_add_ref
    linkageType: ''
    returnType: void
    signature: "void intrusive_ptr(const intrusive_ptr<U>& rhs,\n                  typename
      detail::sp_enable_if_convertible<U,T>::type = detail::sp_empty())"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: intrusive_ptr_add_ref
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached:
    - intrusive_ptr_add_ref
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr(const intrusive_ptr& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr_release
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: ~intrusive_ptr()
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr_release
    linkageType: ''
    returnType: void
    signature: void ~intrusive_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: '& operator=(const intrusive_ptr<U>& rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(const intrusive_ptr<U>& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr(intrusive_ptr && rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:104,1
    - Dst: static_cast< intrusive_ptr && >
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:104,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: '& operator=(intrusive_ptr && rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    - static_cast< intrusive_ptr && >
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(intrusive_ptr && rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 112
    functionName: '& operator=(const intrusive_ptr& rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(const intrusive_ptr& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: '& operator=(T * rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(T * rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: butil::intrusive_ptr::BAIDU_NOEXCEPT
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: void
    signature: void BAIDU_NOEXCEPT
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 125
    functionName: butil::intrusive_ptr::reset
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 16
    functionsReached:
    - this_type
    linkageType: ''
    returnType: void
    signature: void reset(T * rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rhs
    - add_ref
    argTypes:
    - T*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 129
    functionName: butil::intrusive_ptr::reset
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 16
    functionsReached:
    - this_type
    linkageType: ''
    returnType: void
    signature: void reset(T * rhs, bool add_ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: butil::intrusive_ptr::BAIDU_NOEXCEPT
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const BAIDU_NOEXCEPT
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: butil::intrusive_ptr::BAIDU_NOEXCEPT
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * detach() BAIDU_NOEXCEPT
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: operator bool () const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool () const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: operator bool () const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool () const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 162
    functionName: operator unspecified_bool_type() const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator unspecified_bool_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: operator unspecified_bool_type() const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator unspecified_bool_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 173
    functionName: operator! () const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator! () const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 179
    functionName: butil::intrusive_ptr::swap
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void swap(intrusive_ptr & rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:187,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: operator==(const intrusive_ptr<T>& a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const intrusive_ptr<T>& a, const intrusive_ptr<U>&
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:192,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<U>&
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - b
    argTypes:
    - intrusive_ptr<T>
    - U*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: operator==(const intrusive_ptr<T>& a, U * b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const intrusive_ptr<T>& a, U * b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - b
    argTypes:
    - intrusive_ptr<T>
    - U*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: operator!=(const intrusive_ptr<T>& a, U * b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& a, U * b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - ' b'
    argTypes:
    - T*
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 208
    functionName: operator==(T * a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator==(T * a, const intrusive_ptr<U>& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - ' b'
    argTypes:
    - T*
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: operator!=(T * a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(T * a, const intrusive_ptr<U>& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:219,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<T>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<T>&
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 227
    functionName: operator==(const intrusive_ptr<T>& p, std::nullptr_t)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const intrusive_ptr<T>& p, std::nullptr_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: operator==(std::nullptr_t, const intrusive_ptr<T>& p)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(std::nullptr_t, const intrusive_ptr<T>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 236
    functionName: operator!=(const intrusive_ptr<T>& p, std::nullptr_t)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& p, std::nullptr_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 240
    functionName: operator!=(std::nullptr_t, const intrusive_ptr<T>& p)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(std::nullptr_t, const intrusive_ptr<T>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::less<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:245,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:245,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 246
    functionName: operator<(const intrusive_ptr<T>& a, const intrusive_ptr<T>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - std::less<T *>
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool operator<(const intrusive_ptr<T>& a, const intrusive_ptr<T>& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::swap
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 250
    functionName: butil::swap
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 3
    functionsReached:
    - butil::swap
    linkageType: ''
    returnType: void
    signature: void swap(intrusive_ptr<T> & lhs, intrusive_ptr<T> & rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: butil::get_pointer
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: T
    signature: T * get_pointer(const intrusive_ptr<T>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:259,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: butil::static_pointer_cast
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - static_cast<T *>
    - butil::get
    linkageType: ''
    returnType: intrusive_ptr<T>
    signature: intrusive_ptr<T> static_pointer_cast(const intrusive_ptr<U>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: const_cast<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:263,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 264
    functionName: butil::const_pointer_cast
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - const_cast<T *>
    - butil::get
    linkageType: ''
    returnType: intrusive_ptr<T>
    signature: intrusive_ptr<T> const_pointer_cast(const intrusive_ptr<U>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:267,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 268
    functionName: butil::dynamic_pointer_cast
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    - dynamic_cast<T *>
    linkageType: ''
    returnType: intrusive_ptr<T>
    signature: intrusive_ptr<T> dynamic_pointer_cast(const intrusive_ptr<U>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - intrusive_ptr<Y>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 273
    functionName: '& operator<< (std::ostream & os, const intrusive_ptr<Y>& p)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<< (std::ostream & os, const intrusive_ptr<Y>&
      p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: intrusive_ptr_add_ref
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached:
    - intrusive_ptr_add_ref
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr(T * p, bool add_ref = true)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: detail::sp_empty
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:79,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:80,1
    - Dst: intrusive_ptr_add_ref
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached:
    - get
    - detail::sp_empty
    - intrusive_ptr_add_ref
    linkageType: ''
    returnType: void
    signature: "void intrusive_ptr(const intrusive_ptr<U>& rhs,\n                  typename
      detail::sp_enable_if_convertible<U,T>::type = detail::sp_empty())"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: intrusive_ptr_add_ref
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached:
    - intrusive_ptr_add_ref
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr(const intrusive_ptr& rhs)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: intrusive_ptr_release
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: ~intrusive_ptr()
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - intrusive_ptr_release
    linkageType: ''
    returnType: void
    signature: void ~intrusive_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: '& operator=(const intrusive_ptr<U>& rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(const intrusive_ptr<U>& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 101
    functionName: butil::intrusive_ptr::intrusive_ptr
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 100
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void intrusive_ptr(intrusive_ptr && rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:104,1
    - Dst: static_cast< intrusive_ptr && >
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:104,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 106
    functionName: '& operator=(intrusive_ptr && rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    - static_cast< intrusive_ptr && >
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(intrusive_ptr && rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 112
    functionName: '& operator=(const intrusive_ptr& rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(const intrusive_ptr& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 117
    functionName: '& operator=(T * rhs)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: intrusive_ptr
    signature: intrusive_ptr & operator=(T * rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: butil::intrusive_ptr::BAIDU_NOEXCEPT
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - this_type
    linkageType: ''
    returnType: void
    signature: void BAIDU_NOEXCEPT
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 125
    functionName: butil::intrusive_ptr::reset
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 16
    functionsReached:
    - this_type
    linkageType: ''
    returnType: void
    signature: void reset(T * rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: this_type
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rhs
    - add_ref
    argTypes:
    - T*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 129
    functionName: butil::intrusive_ptr::reset
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 16
    functionsReached:
    - this_type
    linkageType: ''
    returnType: void
    signature: void reset(T * rhs, bool add_ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 133
    functionName: butil::intrusive_ptr::BAIDU_NOEXCEPT
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const BAIDU_NOEXCEPT
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: butil::intrusive_ptr::BAIDU_NOEXCEPT
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * detach() BAIDU_NOEXCEPT
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 153
    functionName: operator bool () const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool () const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: operator bool () const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator bool () const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 162
    functionName: operator unspecified_bool_type() const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator unspecified_bool_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 167
    functionName: operator unspecified_bool_type() const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator unspecified_bool_type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 173
    functionName: operator! () const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator! () const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - intrusive_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 179
    functionName: butil::intrusive_ptr::swap
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void swap(intrusive_ptr & rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:187,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: operator==(const intrusive_ptr<T>& a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const intrusive_ptr<T>& a, const intrusive_ptr<U>&
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:192,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 193
    functionName: operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<U>&
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - b
    argTypes:
    - intrusive_ptr<T>
    - U*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: operator==(const intrusive_ptr<T>& a, U * b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const intrusive_ptr<T>& a, U * b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - b
    argTypes:
    - intrusive_ptr<T>
    - U*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 203
    functionName: operator!=(const intrusive_ptr<T>& a, U * b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& a, U * b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - ' b'
    argTypes:
    - T*
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 208
    functionName: operator==(T * a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(T * a, const intrusive_ptr<U>& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - a
    - ' b'
    argTypes:
    - T*
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 213
    functionName: operator!=(T * a, const intrusive_ptr<U>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(T * a, const intrusive_ptr<U>& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:219,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 220
    functionName: operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<T>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& a, const intrusive_ptr<T>&
      b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 227
    functionName: operator==(const intrusive_ptr<T>& p, std::nullptr_t)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const intrusive_ptr<T>& p, std::nullptr_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 231
    functionName: operator==(std::nullptr_t, const intrusive_ptr<T>& p)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(std::nullptr_t, const intrusive_ptr<T>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 236
    functionName: operator!=(const intrusive_ptr<T>& p, std::nullptr_t)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const intrusive_ptr<T>& p, std::nullptr_t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 240
    functionName: operator!=(std::nullptr_t, const intrusive_ptr<T>& p)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(std::nullptr_t, const intrusive_ptr<T>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::less<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:245,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:245,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:245,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' a'
    - ' b'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 246
    functionName: operator<(const intrusive_ptr<T>& a, const intrusive_ptr<T>& b)
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    - std::less<T *>
    linkageType: ''
    returnType: bool
    signature: bool operator<(const intrusive_ptr<T>& a, const intrusive_ptr<T>& b)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::swap
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - intrusive_ptr<T>
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 250
    functionName: butil::swap
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 4
    functionsReached:
    - butil::swap
    linkageType: ''
    returnType: void
    signature: void swap(intrusive_ptr<T> & lhs, intrusive_ptr<T> & rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 256
    functionName: butil::get_pointer
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: T
    signature: T * get_pointer(const intrusive_ptr<T>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:259,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 260
    functionName: butil::static_pointer_cast
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - static_cast<T *>
    - butil::get
    linkageType: ''
    returnType: intrusive_ptr<T>
    signature: intrusive_ptr<T> static_pointer_cast(const intrusive_ptr<U>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: const_cast<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:263,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 264
    functionName: butil::const_pointer_cast
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - const_cast<T *>
    - butil::get
    linkageType: ''
    returnType: intrusive_ptr<T>
    signature: intrusive_ptr<T> const_pointer_cast(const intrusive_ptr<U>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<T *>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:267,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - intrusive_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 268
    functionName: butil::dynamic_pointer_cast
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - butil::get
    - dynamic_cast<T *>
    linkageType: ''
    returnType: intrusive_ptr<T>
    signature: intrusive_ptr<T> dynamic_pointer_cast(const intrusive_ptr<U>& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - intrusive_ptr<Y>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 273
    functionName: '& operator<< (std::ostream & os, const intrusive_ptr<Y>& p)'
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<< (std::ostream & os, const intrusive_ptr<Y>&
      p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash<T*>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:284,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 283
    functionDepth: 1
    functionLinenumber: 283
    functionLinenumberEnd: 285
    functionName: operator()(const butil::intrusive_ptr<T>& p) const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    - hash<T*>
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const butil::intrusive_ptr<T>& p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash_value
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:290,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' sp'
    argTypes:
    - butil::intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 291
    functionName: BUTIL_HASH_NAMESPACE::hash_value
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 3
    functionsReached:
    - BUTIL_HASH_NAMESPACE::hash_value
    - get
    linkageType: ''
    returnType: size_t
    signature: size_t hash_value(const butil::intrusive_ptr<T>& sp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash<T*>
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:284,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 283
    functionDepth: 1
    functionLinenumber: 283
    functionLinenumberEnd: 285
    functionName: operator()(const butil::intrusive_ptr<T>& p) const
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 0
    functionsReached:
    - get
    - hash<T*>
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const butil::intrusive_ptr<T>& p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash_value
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:290,1
    - Dst: get
      Src: /src/brpc/src/butil/intrusive_ptr.hpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' sp'
    argTypes:
    - butil::intrusive_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 289
    functionDepth: 1
    functionLinenumber: 289
    functionLinenumberEnd: 291
    functionName: BUTIL_HASH_NAMESPACE::hash_value
    functionSourceFile: /src/brpc/src/butil/intrusive_ptr.hpp
    functionUses: 4
    functionsReached:
    - BUTIL_HASH_NAMESPACE::hash_value
    - get
    linkageType: ''
    returnType: size_t
    signature: size_t hash_value(const butil::intrusive_ptr<T>& sp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:15,1
    - Dst: size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:16,1
    - Dst: size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:16,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    - Dst: size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - scoped_refptr<RefCountedMemory>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 13
    functionDepth: 1
    functionLinenumber: 13
    functionLinenumberEnd: 18
    functionName: butil::RefCountedMemory::Equals
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - size
    - front
    - get
    linkageType: ''
    returnType: bool
    signature: "bool RefCountedMemory::Equals(\n    const scoped_refptr<RefCountedMemory>&
      other) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: butil::RefCountedMemory::RefCountedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedMemory::RefCountedMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: RefCountedMemory::~RefCountedMemory()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedMemory::~RefCountedMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 26
    functionName: butil::RefCountedStaticMemory::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedStaticMemory::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::RefCountedStaticMemory::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedStaticMemory::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: RefCountedStaticMemory::~RefCountedStaticMemory()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedStaticMemory::~RefCountedStaticMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: butil::RefCountedBytes::RefCountedBytes
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::RefCountedBytes()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' initializer'
    argTypes:
    - std::vector<unsigned char>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::RefCountedBytes::RefCountedBytes
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::RefCountedBytes(const std::vector<unsigned char>&
      initializer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - size
    argTypes:
    - unsigned char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: butil::RefCountedBytes::RefCountedBytes
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::RefCountedBytes(const unsigned char* p, size_t
      size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedBytes::RefCountedBytes
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:45,1
    - Dst: RefCountedBytes*::data_::swap
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - to_destroy
    argTypes:
    - std::vector<unsigned char>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: butil::RefCountedBytes::TakeVector
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 4
    functionsReached:
    - RefCountedBytes*::data_::swap
    - RefCountedBytes::RefCountedBytes
    linkageType: ''
    returnType: RefCountedBytes
    signature: "RefCountedBytes * RefCountedBytes::TakeVector(\n    std::vector<unsigned
      char>* to_destroy)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedBytes::size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:53,1
    - Dst: butil::RefCountedBytes::front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: butil::RefCountedBytes::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 1
    functionsReached:
    - butil::RefCountedBytes::front
    - butil::RefCountedBytes::size
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedBytes::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedBytes::size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: butil::RefCountedBytes::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 2
    functionsReached:
    - butil::RefCountedBytes::size
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedBytes::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: RefCountedBytes::~RefCountedBytes()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::~RefCountedBytes()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: butil::RefCountedString::RefCountedString
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedString::RefCountedString()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: RefCountedString::~RefCountedString()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedString::~RefCountedString()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedString::RefCountedString
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:68,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - to_destroy
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: butil::RefCountedString::TakeString
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 6
    functionsReached:
    - std::string*::swap
    - RefCountedString::RefCountedString
    linkageType: ''
    returnType: RefCountedString
    signature: RefCountedString * RefCountedString::TakeString(std::string* to_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:74,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:75,1
    - Dst: data
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: butil::RefCountedString::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedString::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: butil::RefCountedString::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 1
    functionsReached:
    - butil::RefCountedString::size
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedString::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:84,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 86
    functionName: butil::RefCountedMallocedMemory::RefCountedMallocedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<unsigned char*>
    - DCHECK
    linkageType: ''
    returnType: void
    signature: "void RefCountedMallocedMemory::RefCountedMallocedMemory(\n    void*
      data, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::RefCountedMallocedMemory::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedMallocedMemory::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: butil::RefCountedMallocedMemory::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedMallocedMemory::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: RefCountedMallocedMemory::~RefCountedMallocedMemory()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void RefCountedMallocedMemory::~RefCountedMallocedMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:15,1
    - Dst: size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:16,1
    - Dst: size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:16,1
    - Dst: memcmp
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    - Dst: size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:17,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - scoped_refptr<RefCountedMemory>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 18
      start: 13
    functionDepth: 1
    functionLinenumber: 13
    functionLinenumberEnd: 18
    functionName: butil::RefCountedMemory::Equals
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - memcmp
    - size
    - front
    - get
    linkageType: ''
    returnType: bool
    signature: "bool RefCountedMemory::Equals(\n    const scoped_refptr<RefCountedMemory>&
      other) const"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 20
    functionName: butil::RefCountedMemory::RefCountedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedMemory::RefCountedMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 22
    functionName: RefCountedMemory::~RefCountedMemory()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedMemory::~RefCountedMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 26
    functionName: butil::RefCountedStaticMemory::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedStaticMemory::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: butil::RefCountedStaticMemory::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedStaticMemory::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 32
    functionName: RefCountedStaticMemory::~RefCountedStaticMemory()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedStaticMemory::~RefCountedStaticMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 34
    functionName: butil::RefCountedBytes::RefCountedBytes
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::RefCountedBytes()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' initializer'
    argTypes:
    - std::vector<unsigned char>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 38
    functionName: butil::RefCountedBytes::RefCountedBytes
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::RefCountedBytes(const std::vector<unsigned char>&
      initializer)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - size
    argTypes:
    - unsigned char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    functionName: butil::RefCountedBytes::RefCountedBytes
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::RefCountedBytes(const unsigned char* p, size_t
      size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedBytes::RefCountedBytes
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:45,1
    - Dst: RefCountedBytes*::data_::swap
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - to_destroy
    argTypes:
    - std::vector<unsigned char>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    functionName: butil::RefCountedBytes::TakeVector
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 4
    functionsReached:
    - RefCountedBytes*::data_::swap
    - RefCountedBytes::RefCountedBytes
    linkageType: ''
    returnType: RefCountedBytes
    signature: "RefCountedBytes * RefCountedBytes::TakeVector(\n    std::vector<unsigned
      char>* to_destroy)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedBytes::size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:53,1
    - Dst: butil::RefCountedBytes::front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 2
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: butil::RefCountedBytes::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 2
    functionsReached:
    - butil::RefCountedBytes::front
    - butil::RefCountedBytes::size
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedBytes::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedBytes::size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: butil::RefCountedBytes::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 4
    functionsReached:
    - butil::RefCountedBytes::size
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedBytes::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: RefCountedBytes::~RefCountedBytes()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedBytes::~RefCountedBytes()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: butil::RefCountedString::RefCountedString
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedString::RefCountedString()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: RefCountedString::~RefCountedString()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedString::~RefCountedString()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedString::RefCountedString
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:68,1
    - Dst: std::string*::swap
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - to_destroy
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: butil::RefCountedString::TakeString
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 6
    functionsReached:
    - std::string*::swap
    - RefCountedString::RefCountedString
    linkageType: ''
    returnType: RefCountedString
    signature: RefCountedString * RefCountedString::TakeString(std::string* to_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:74,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:75,1
    - Dst: data
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: butil::RefCountedString::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedString::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString::size
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: butil::RefCountedString::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 2
    functionsReached:
    - butil::RefCountedString::size
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedString::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:84,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 86
    functionName: butil::RefCountedMallocedMemory::RefCountedMallocedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - reinterpret_cast<unsigned char*>
    - DCHECK
    linkageType: ''
    returnType: void
    signature: "void RefCountedMallocedMemory::RefCountedMallocedMemory(\n    void*
      data, size_t length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::RefCountedMallocedMemory::front
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: unsigned char
    signature: unsigned char * RefCountedMallocedMemory::front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: butil::RefCountedMallocedMemory::size
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t RefCountedMallocedMemory::size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/memory/ref_counted_memory.cc:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: RefCountedMallocedMemory::~RefCountedMallocedMemory()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.cc
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void RefCountedMallocedMemory::~RefCountedMallocedMemory()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: butil::DefaultDeleter
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 134
    functionName: butil::DefaultDeleter
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - COMPILE_ASSERT
    linkageType: ''
    returnType: void
    signature: void DefaultDeleter(const DefaultDeleter<U>&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 147
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: operator()(void* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void operator()(void* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - ' d'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p, const D& d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - scoped_ptr_impl<U, V>*::release
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(scoped_ptr_impl<U, V>* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::reset
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 214
    functionName: butil::internal::scoped_ptr_impl::TakeState
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - butil::internal::scoped_ptr_impl::reset
    - scoped_ptr_impl<U, V>*::release
    - get_deleter
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void TakeState(scoped_ptr_impl<U, V>* other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 222
    functionName: ~scoped_ptr_impl()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void ~scoped_ptr_impl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:226,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 247
    functionName: butil::internal::scoped_ptr_impl::reset
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 1
    functionsReached:
    - RELEASE_ASSERT
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void reset(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: butil::internal::scoped_ptr_impl::get
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: '& get_deleter()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: '& get_deleter() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' p2'
    argTypes:
    - scoped_ptr_impl
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 261
    functionName: butil::internal::scoped_ptr_impl::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 1
    functionsReached:
    - butil::internal::scoped_ptr_impl::swap
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr_impl& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: butil::internal::scoped_ptr_impl::release
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr_in
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr_in
    - ' other'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 279
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in, const D& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - ' d'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p, const D& d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - scoped_ptr_impl<U, V>*::release
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(scoped_ptr_impl<U, V>* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::reset
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 214
    functionName: butil::internal::scoped_ptr_impl::TakeState
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - butil::internal::scoped_ptr_impl::reset
    - scoped_ptr_impl<U, V>*::release
    - get_deleter
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void TakeState(scoped_ptr_impl<U, V>* other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 222
    functionName: ~scoped_ptr_impl()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void ~scoped_ptr_impl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:226,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 247
    functionName: butil::internal::scoped_ptr_impl::reset
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 2
    functionsReached:
    - RELEASE_ASSERT
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void reset(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: butil::internal::scoped_ptr_impl::get
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: '& get_deleter()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: '& get_deleter() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' p2'
    argTypes:
    - scoped_ptr_impl
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 261
    functionName: butil::internal::scoped_ptr_impl::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 2
    functionsReached:
    - butil::internal::scoped_ptr_impl::swap
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr_impl& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: butil::internal::scoped_ptr_impl::release
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr_in
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr_in
    - ' other'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 279
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in, const D& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: butil::DefaultDeleter
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DefaultDeleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 134
    functionName: butil::DefaultDeleter
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - COMPILE_ASSERT
    linkageType: ''
    returnType: void
    signature: void DefaultDeleter(const DefaultDeleter<U>&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 147
    functionName: operator()(T* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator()(T* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: operator()(void* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void operator()(void* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - ' d'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p, const D& d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - scoped_ptr_impl<U, V>*::release
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(scoped_ptr_impl<U, V>* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::reset
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 214
    functionName: butil::internal::scoped_ptr_impl::TakeState
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - butil::internal::scoped_ptr_impl::reset
    - scoped_ptr_impl<U, V>*::release
    - get_deleter
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void TakeState(scoped_ptr_impl<U, V>* other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 222
    functionName: ~scoped_ptr_impl()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void ~scoped_ptr_impl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:226,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 247
    functionName: butil::internal::scoped_ptr_impl::reset
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 3
    functionsReached:
    - RELEASE_ASSERT
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void reset(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: butil::internal::scoped_ptr_impl::get
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: '& get_deleter()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: '& get_deleter() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' p2'
    argTypes:
    - scoped_ptr_impl
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 261
    functionName: butil::internal::scoped_ptr_impl::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 3
    functionsReached:
    - butil::internal::scoped_ptr_impl::swap
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr_impl& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: butil::internal::scoped_ptr_impl::release
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr_in
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr_in
    - ' other'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 279
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in, const D& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - ' d'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(T* p, const D& d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    functionName: butil::internal::scoped_ptr_impl::scoped_ptr_impl
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - scoped_ptr_impl<U, V>*::release
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void scoped_ptr_impl(scoped_ptr_impl<U, V>* other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::reset
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: scoped_ptr_impl<U, V>*::release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:212,1
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    - Dst: scoped_ptr_impl<U, V>*::get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr_impl<U, V>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 214
    functionName: butil::internal::scoped_ptr_impl::TakeState
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - butil::internal::scoped_ptr_impl::reset
    - scoped_ptr_impl<U, V>*::release
    - get_deleter
    - scoped_ptr_impl<U, V>*::get_deleter
    linkageType: ''
    returnType: void
    signature: void TakeState(scoped_ptr_impl<U, V>* other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:220,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 222
    functionName: ~scoped_ptr_impl()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void ~scoped_ptr_impl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RELEASE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:226,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 247
    functionName: butil::internal::scoped_ptr_impl::reset
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 4
    functionsReached:
    - RELEASE_ASSERT
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void reset(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 249
    functionName: butil::internal::scoped_ptr_impl::get
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 251
    functionName: '& get_deleter()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 252
    functionName: '& get_deleter() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: D
    signature: D & get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: static_cast<D&>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:259,1
    - Dst: butil::internal::scoped_ptr_impl::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' p2'
    argTypes:
    - scoped_ptr_impl
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 261
    functionName: butil::internal::scoped_ptr_impl::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 4
    functionsReached:
    - butil::internal::scoped_ptr_impl::swap
    - static_cast<D&>
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr_impl& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: butil::internal::scoped_ptr_impl::release
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr_in
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ptr_in
    - ' other'
    argTypes:
    - T*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 279
    functionName: butil::internal::scoped_ptr_impl::Data
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Data(T* ptr_in, const D& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 321
    functionName: scoped_ptr::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - element_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 324
    functionDepth: 0
    functionLinenumber: 324
    functionLinenumberEnd: 324
    functionName: scoped_ptr::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr(element_type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - p
    - ' d'
    argTypes:
    - element_type*
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 327
    functionName: scoped_ptr::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr(element_type* p, const D& d)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - other
    argTypes:
    - scoped_ptr<U, V>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 342
    functionName: scoped_ptr::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 17
    functionsReached:
    - COMPILE_ASSERT
    linkageType: ''
    returnType: void
    signature: void scoped_ptr(scoped_ptr<U, V> other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rvalue
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 345
    functionName: scoped_ptr::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr(RValue rvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:359,1
    - Dst: TakeState
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - scoped_ptr<U, V>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 362
    functionName: '& operator=(scoped_ptr<U, V> rhs)'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - COMPILE_ASSERT
    - TakeState
    linkageType: ''
    returnType: scoped_ptr
    signature: scoped_ptr & operator=(scoped_ptr<U, V> rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr::reset
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:366,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 366
    functionName: scoped_ptr::reset
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 43
    functionsReached:
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void reset(element_type* p = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:371,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:371,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:372,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts:
    - condition: (impl_.get() != NULL)
      pos:
        line_end: 370
        line_start: 370
        source_file: /src/brpc/src/butil/memory/scoped_ptr.h
    constantsTouched: []
    func_position:
      end: 373
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 373
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    - assert
    linkageType: ''
    returnType: element_type
    signature: element_type & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:375,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:375,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts:
    - condition: (impl_.get() != NULL)
      pos:
        line_end: 374
        line_start: 374
        source_file: /src/brpc/src/butil/memory/scoped_ptr.h
    constantsTouched: []
    func_position:
      end: 377
      start: 374
    functionDepth: 1
    functionLinenumber: 374
    functionLinenumberEnd: 377
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    - assert
    linkageType: ''
    returnType: element_type
    signature: element_type * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 378
    functionName: scoped_ptr::get
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 52
    functionsReached:
    - scoped_ptr::get
    linkageType: ''
    returnType: element_type
    signature: element_type * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:381,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 381
    functionName: '& get_deleter()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get_deleter
    linkageType: ''
    returnType: deleter_type
    signature: deleter_type & get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:382,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 382
    functionName: '& get_deleter() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get_deleter
    linkageType: ''
    returnType: deleter_type
    signature: deleter_type & get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 396
    functionDepth: 1
    functionLinenumber: 396
    functionLinenumberEnd: 396
    functionName: operator Testable() const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator Testable() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:401,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - element_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 401
    functionDepth: 1
    functionLinenumber: 401
    functionLinenumberEnd: 401
    functionName: operator==(const element_type* p) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(const element_type* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - element_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 402
    functionName: operator!=(const element_type* p) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const element_type* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p2'
    argTypes:
    - scoped_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 407
    functionName: scoped_ptr::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 4
    functionsReached:
    - scoped_ptr::swap
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 416
    functionName: scoped_ptr::WARN_UNUSED_RESULT
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - release
    linkageType: ''
    returnType: element_type
    signature: element_type * release() WARN_UNUSED_RESULT
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr::scoped_ptr
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:426,1
    - Dst: Pass
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:426,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 425
    functionDepth: 1
    functionLinenumber: 425
    functionLinenumberEnd: 427
    functionName: scoped_ptr::PassAs
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - Pass
    - scoped_ptr::scoped_ptr
    linkageType: ''
    returnType: scoped_ptr<PassAsType>
    signature: scoped_ptr<PassAsType> PassAs()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 455
    functionName: scoped_ptr<T[], D>::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - array
    argTypes:
    - element_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 473
    functionName: scoped_ptr<T[], D>::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr(element_type* array)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - rvalue
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 476
    functionName: scoped_ptr<T[], D>::scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_ptr(RValue rvalue)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TakeState
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 482
    functionName: '& operator=(RValue rhs)'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - TakeState
    linkageType: ''
    returnType: scoped_ptr
    signature: scoped_ptr & operator=(RValue rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<T[], D>::reset
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:486,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 486
    functionDepth: 1
    functionLinenumber: 486
    functionLinenumberEnd: 486
    functionName: scoped_ptr<T[], D>::reset
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 1
    functionsReached:
    - scoped_ptr<T[], D>::reset
    linkageType: ''
    returnType: void
    signature: void reset(element_type* array = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:490,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:490,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:491,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    assertStmts:
    - condition: (impl_.get() != NULL)
      pos:
        line_end: 489
        line_start: 489
        source_file: /src/brpc/src/butil/memory/scoped_ptr.h
    constantsTouched: []
    func_position:
      end: 492
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 492
    functionName: '& operator[](size_t i) const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    - assert
    linkageType: ''
    returnType: element_type
    signature: element_type & operator[](size_t i) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<T[], D>::get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 493
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 493
    functionName: scoped_ptr<T[], D>::get
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 1
    functionsReached:
    - scoped_ptr<T[], D>::get
    linkageType: ''
    returnType: element_type
    signature: element_type * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 496
      start: 496
    functionDepth: 0
    functionLinenumber: 496
    functionLinenumberEnd: 496
    functionName: '& get_deleter()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get_deleter
    linkageType: ''
    returnType: deleter_type
    signature: deleter_type & get_deleter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_deleter
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 497
    functionName: '& get_deleter() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get_deleter
    linkageType: ''
    returnType: deleter_type
    signature: deleter_type & get_deleter() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:506,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 506
      start: 506
    functionDepth: 1
    functionLinenumber: 506
    functionLinenumberEnd: 506
    functionName: operator Testable() const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator Testable() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - array
    argTypes:
    - element_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 511
    functionName: operator==(element_type* array) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(element_type* array) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - array
    argTypes:
    - element_type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 512
    functionName: operator!=(element_type* array) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(element_type* array) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<T[], D>::swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p2'
    argTypes:
    - scoped_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 515
    functionDepth: 1
    functionLinenumber: 515
    functionLinenumberEnd: 517
    functionName: scoped_ptr<T[], D>::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 1
    functionsReached:
    - scoped_ptr<T[], D>::swap
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:525,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 526
    functionName: scoped_ptr<T[], D>::WARN_UNUSED_RESULT
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - release
    linkageType: ''
    returnType: element_type
    signature: element_type * release() WARN_UNUSED_RESULT
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:559,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' p1'
    - ' p2'
    argTypes:
    - scoped_ptr<T, D>
    - scoped_ptr<T, D>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 560
      start: 558
    functionDepth: 1
    functionLinenumber: 558
    functionLinenumberEnd: 560
    functionName: swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 257
    functionsReached:
    - swap
    linkageType: ''
    returnType: void
    signature: void swap(scoped_ptr<T, D>& p1, scoped_ptr<T, D>& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:564,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - ' p2'
    argTypes:
    - T*
    - scoped_ptr<T, D>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 563
    functionDepth: 1
    functionLinenumber: 563
    functionLinenumberEnd: 565
    functionName: operator==(T* p1, const scoped_ptr<T, D>& p2)
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(T* p1, const scoped_ptr<T, D>& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:569,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - p1
    - ' p2'
    argTypes:
    - T*
    - scoped_ptr<T, D>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 570
    functionName: operator!=(T* p1, const scoped_ptr<T, D>& p2)
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(T* p1, const scoped_ptr<T, D>& p2)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_ptr<T>
      Src: /src/brpc/src/butil/memory/scoped_ptr.h:577,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 578
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 578
    functionName: make_scoped_ptr
    functionSourceFile: /src/brpc/src/butil/memory/scoped_ptr.h
    functionUses: 0
    functionsReached:
    - scoped_ptr<T>
    linkageType: ''
    returnType: scoped_ptr<T>
    signature: scoped_ptr<T> make_scoped_ptr(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AtomicRefCountIsOne
      Src: /src/brpc/src/butil/memory/ref_counted.cc:13,1
    - Dst: const_cast<RefCountedThreadSafeBase*>
      Src: /src/brpc/src/butil/memory/ref_counted.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 15
    functionName: butil::subtle::RefCountedThreadSafeBase::HasOneRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - const_cast<RefCountedThreadSafeBase*>
    - AtomicRefCountIsOne
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::HasOneRef() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 21
    functionName: butil::subtle::RefCountedThreadSafeBase::RefCountedThreadSafeBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 28
    functionName: RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:32,1
    - Dst: AtomicRefCountInc
      Src: /src/brpc/src/butil/memory/ref_counted.cc:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: butil::subtle::RefCountedThreadSafeBase::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountInc
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:39,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountIsZero
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountDec
      Src: /src/brpc/src/butil/memory/ref_counted.cc:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::subtle::RefCountedThreadSafeBase::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountDec
    - DCHECK
    - AtomicRefCountIsZero
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AtomicRefCountIsOne
      Src: /src/brpc/src/butil/memory/ref_counted.cc:13,1
    - Dst: const_cast<RefCountedThreadSafeBase*>
      Src: /src/brpc/src/butil/memory/ref_counted.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 15
    functionName: butil::subtle::RefCountedThreadSafeBase::HasOneRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - const_cast<RefCountedThreadSafeBase*>
    - AtomicRefCountIsOne
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::HasOneRef() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 21
    functionName: butil::subtle::RefCountedThreadSafeBase::RefCountedThreadSafeBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 28
    functionName: RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:32,1
    - Dst: AtomicRefCountInc
      Src: /src/brpc/src/butil/memory/ref_counted.cc:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: butil::subtle::RefCountedThreadSafeBase::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountInc
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:39,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountIsZero
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountDec
      Src: /src/brpc/src/butil/memory/ref_counted.cc:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::subtle::RefCountedThreadSafeBase::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountDec
    - DCHECK
    - AtomicRefCountIsZero
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AtomicRefCountIsOne
      Src: /src/brpc/src/butil/memory/ref_counted.cc:13,1
    - Dst: const_cast<RefCountedThreadSafeBase*>
      Src: /src/brpc/src/butil/memory/ref_counted.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 15
    functionName: butil::subtle::RefCountedThreadSafeBase::HasOneRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - const_cast<RefCountedThreadSafeBase*>
    - AtomicRefCountIsOne
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::HasOneRef() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 21
    functionName: butil::subtle::RefCountedThreadSafeBase::RefCountedThreadSafeBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 28
    functionName: RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:32,1
    - Dst: AtomicRefCountInc
      Src: /src/brpc/src/butil/memory/ref_counted.cc:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: butil::subtle::RefCountedThreadSafeBase::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountInc
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:39,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountIsZero
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountDec
      Src: /src/brpc/src/butil/memory/ref_counted.cc:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::subtle::RefCountedThreadSafeBase::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountDec
    - DCHECK
    - AtomicRefCountIsZero
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AtomicRefCountIsOne
      Src: /src/brpc/src/butil/memory/ref_counted.cc:13,1
    - Dst: const_cast<RefCountedThreadSafeBase*>
      Src: /src/brpc/src/butil/memory/ref_counted.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 12
    functionDepth: 0
    functionLinenumber: 12
    functionLinenumberEnd: 15
    functionName: butil::subtle::RefCountedThreadSafeBase::HasOneRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - const_cast<RefCountedThreadSafeBase*>
    - AtomicRefCountIsOne
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::HasOneRef() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 21
    functionName: butil::subtle::RefCountedThreadSafeBase::RefCountedThreadSafeBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 28
    functionName: RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::~RefCountedThreadSafeBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:32,1
    - Dst: AtomicRefCountInc
      Src: /src/brpc/src/butil/memory/ref_counted.cc:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 35
    functionName: butil::subtle::RefCountedThreadSafeBase::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountInc
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafeBase::AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:39,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountIsZero
      Src: /src/brpc/src/butil/memory/ref_counted.cc:40,1
    - Dst: AtomicRefCountDec
      Src: /src/brpc/src/butil/memory/ref_counted.cc:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::subtle::RefCountedThreadSafeBase::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.cc
    functionUses: 0
    functionsReached:
    - AtomicRefCountDec
    - DCHECK
    - AtomicRefCountIsZero
    linkageType: ''
    returnType: bool
    signature: bool RefCountedThreadSafeBase::Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Type::Type
      Src: /src/brpc/src/butil/memory/singleton.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 56
    functionName: New
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 54
    functionsReached:
    - Type::Type
    linkageType: ''
    returnType: Type
    signature: Type * New()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: Delete
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Delete(Type* x)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_AtomicExchange
      Src: /src/brpc/src/butil/memory/singleton.h:129,1
    - Dst: void_data
      Src: /src/brpc/src/butil/memory/singleton.h:132,1
    - Dst: Type::Type
      Src: /src/brpc/src/butil/memory/singleton.h:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: New
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 54
    functionsReached:
    - void_data
    - Type::Type
    - butil::subtle::NoBarrier_AtomicExchange
    linkageType: ''
    returnType: Type
    signature: Type * New()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Type*::Type::~Type
      Src: /src/brpc/src/butil/memory/singleton.h:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: Delete
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 41
    functionsReached:
    - Type*::Type::~Type
    linkageType: ''
    returnType: void
    signature: void Delete(Type* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/memory/singleton.h:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    functionName: Resurrect
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 1
    functionsReached:
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void Resurrect()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton.h:247,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/memory/singleton.h:250,1
    - Dst: reinterpret_cast<Type*>
      Src: /src/brpc/src/butil/memory/singleton.h:251,1
    - Dst: butil::subtle::Acquire_CompareAndSwap
      Src: /src/brpc/src/butil/memory/singleton.h:255,1
    - Dst: New
      Src: /src/brpc/src/butil/memory/singleton.h:260,1
    - Dst: ANNOTATE_HAPPENS_BEFORE
      Src: /src/brpc/src/butil/memory/singleton.h:265,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/memory/singleton.h:267,1
    - Dst: reinterpret_cast<butil::subtle::AtomicWord>
      Src: /src/brpc/src/butil/memory/singleton.h:268,1
    - Dst: butil::AtExitManager::RegisterCallback
      Src: /src/brpc/src/butil/memory/singleton.h:272,1
    - Dst: ANNOTATE_LEAKING_OBJECT_PTR
      Src: /src/brpc/src/butil/memory/singleton.h:275,1
    - Dst: butil::internal::WaitForInstance
      Src: /src/brpc/src/butil/memory/singleton.h:283,1
    - Dst: ANNOTATE_HAPPENS_AFTER
      Src: /src/brpc/src/butil/memory/singleton.h:286,1
    - Dst: reinterpret_cast<Type*>
      Src: /src/brpc/src/butil/memory/singleton.h:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 244
    functionDepth: 2
    functionLinenumber: 244
    functionLinenumberEnd: 288
    functionName: Singleton::get
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Release_Store
    - reinterpret_cast<Type*>
    - butil::AtExitManager::RegisterCallback
    - ANNOTATE_LEAKING_OBJECT_PTR
    - butil::subtle::Acquire_CompareAndSwap
    - butil::internal::WaitForInstance
    - New
    - butil::subtle::Acquire_Load
    - ANNOTATE_HAPPENS_BEFORE
    - reinterpret_cast<butil::subtle::AtomicWord>
    - ANNOTATE_HAPPENS_AFTER
    linkageType: ''
    returnType: Type
    signature: Type * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/brpc/src/butil/memory/singleton.h:296,1
    - Dst: reinterpret_cast<Type*>
      Src: /src/brpc/src/butil/memory/singleton.h:297,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/memory/singleton.h:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 299
    functionName: Singleton::OnExit
    functionSourceFile: /src/brpc/src/butil/memory/singleton.h
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_Load
    - Delete
    - reinterpret_cast<Type*>
    linkageType: ''
    returnType: void
    signature: void OnExit(void* /*unused*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: New
    functionSourceFile: /src/brpc/src/butil/memory/singleton_objc.h
    functionUses: 55
    functionsReached: []
    linkageType: ''
    returnType: Type
    signature: Type * New()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - object
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    functionName: Delete
    functionSourceFile: /src/brpc/src/butil/memory/singleton_objc.h
    functionUses: 42
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Delete(Type* object)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:16,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:17,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:18,1
    - Dst: _aligned_malloc
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:21,1
    - Dst: memalign
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:28,1
    - Dst: posix_memalign
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:30,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:37,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:39,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:42,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - size
    - alignment
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 44
    functionName: butil::AlignedAlloc
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.cc
    functionUses: 4
    functionsReached:
    - DLOG
    - memalign
    - DCHECK_GT
    - DCHECK_EQ
    - _aligned_malloc
    - CHECK
    - posix_memalign
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void * AlignedAlloc(size_t size, size_t alignment)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:16,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:17,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:18,1
    - Dst: _aligned_malloc
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:21,1
    - Dst: memalign
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:28,1
    - Dst: posix_memalign
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:30,1
    - Dst: DLOG
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:37,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:39,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:42,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/butil/memory/aligned_memory.cc:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - size
    - alignment
    argTypes:
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 44
    functionName: butil::AlignedAlloc
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.cc
    functionUses: 4
    functionsReached:
    - DLOG
    - memalign
    - DCHECK_GT
    - DCHECK_EQ
    - _aligned_malloc
    - CHECK
    - posix_memalign
    - reinterpret_cast<uintptr_t>
    linkageType: ''
    returnType: void
    signature: void * AlignedAlloc(size_t size, size_t alignment)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton.cc:24,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/memory/singleton.cc:27,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - instance
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 30
    functionName: butil::internal::WaitForInstance
    functionSourceFile: /src/brpc/src/butil/memory/singleton.cc
    functionUses: 1
    functionsReached:
    - butil::subtle::Acquire_Load
    - butil::PlatformThread::YieldCurrentThread
    linkageType: ''
    returnType: subtle::AtomicWord
    signature: subtle::AtomicWord WaitForInstance(subtle::AtomicWord* instance)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton.cc:24,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/memory/singleton.cc:27,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - instance
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 30
    functionName: butil::internal::WaitForInstance
    functionSourceFile: /src/brpc/src/butil/memory/singleton.cc
    functionUses: 1
    functionsReached:
    - butil::subtle::Acquire_Load
    - butil::PlatformThread::YieldCurrentThread
    linkageType: ''
    returnType: subtle::AtomicWord
    signature: subtle::AtomicWord WaitForInstance(subtle::AtomicWord* instance)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton.cc:24,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/memory/singleton.cc:27,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - instance
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 30
    functionName: butil::internal::WaitForInstance
    functionSourceFile: /src/brpc/src/butil/memory/singleton.cc
    functionUses: 1
    functionsReached:
    - butil::subtle::Acquire_Load
    - butil::PlatformThread::YieldCurrentThread
    linkageType: ''
    returnType: subtle::AtomicWord
    signature: subtle::AtomicWord WaitForInstance(subtle::AtomicWord* instance)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton.cc:24,1
    - Dst: butil::PlatformThread::YieldCurrentThread
      Src: /src/brpc/src/butil/memory/singleton.cc:27,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - instance
    argTypes:
    - subtle::AtomicWord*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 30
    functionName: butil::internal::WaitForInstance
    functionSourceFile: /src/brpc/src/butil/memory/singleton.cc
    functionUses: 1
    functionsReached:
    - butil::subtle::Acquire_Load
    - butil::PlatformThread::YieldCurrentThread
    linkageType: ''
    returnType: subtle::AtomicWord
    signature: subtle::AtomicWord WaitForInstance(subtle::AtomicWord* instance)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 11
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 11
    functionName: WeakReference::Flag::Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 15
    functionName: WeakReference::Flag::Invalidate()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: WeakReference::Flag::IsValid() const
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::Flag::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 22
    functionName: WeakReference::Flag::~Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::~Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - flag
    argTypes:
    - Flag*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference(const Flag* flag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: WeakReference::~WeakReference()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::~WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    - Dst: IsValid
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::internal::WeakReference::is_valid
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - IsValid
    - get
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: butil::internal::WeakReferenceOwner::WeakReferenceOwner
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::WeakReferenceOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: WeakReferenceOwner::~WeakReferenceOwner()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - Invalidate
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::~WeakReferenceOwner()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HasRefs
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:44,1
    - Dst: WeakReference::Flag::Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:45,1
    - Dst: WeakReference
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 48
    functionName: butil::internal::WeakReferenceOwner::GetRef
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - HasRefs
    - get
    - WeakReference::Flag::Flag
    - WeakReference
    linkageType: ''
    returnType: WeakReference
    signature: WeakReference WeakReferenceOwner::GetRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:51,1
    - Dst: butil::internal::WeakReferenceOwner::Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 55
    functionName: butil::internal::WeakReferenceOwner::Invalidate
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 1
    functionsReached:
    - butil::internal::WeakReferenceOwner::Invalidate
    - get
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: WeakPtrBase::~WeakPtrBase()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::~WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref'
    argTypes:
    - WeakReference
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase(const WeakReference& ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 11
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 11
    functionName: WeakReference::Flag::Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 15
    functionName: WeakReference::Flag::Invalidate()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: WeakReference::Flag::IsValid() const
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::Flag::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 22
    functionName: WeakReference::Flag::~Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::~Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - flag
    argTypes:
    - Flag*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference(const Flag* flag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: WeakReference::~WeakReference()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::~WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    - Dst: IsValid
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::internal::WeakReference::is_valid
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - IsValid
    - get
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: butil::internal::WeakReferenceOwner::WeakReferenceOwner
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::WeakReferenceOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: WeakReferenceOwner::~WeakReferenceOwner()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - Invalidate
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::~WeakReferenceOwner()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HasRefs
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:44,1
    - Dst: WeakReference::Flag::Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:45,1
    - Dst: WeakReference
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 48
    functionName: butil::internal::WeakReferenceOwner::GetRef
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - HasRefs
    - get
    - WeakReference::Flag::Flag
    - WeakReference
    linkageType: ''
    returnType: WeakReference
    signature: WeakReference WeakReferenceOwner::GetRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:51,1
    - Dst: butil::internal::WeakReferenceOwner::Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 55
    functionName: butil::internal::WeakReferenceOwner::Invalidate
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 2
    functionsReached:
    - butil::internal::WeakReferenceOwner::Invalidate
    - get
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: WeakPtrBase::~WeakPtrBase()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::~WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref'
    argTypes:
    - WeakReference
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase(const WeakReference& ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 11
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 11
    functionName: WeakReference::Flag::Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 15
    functionName: WeakReference::Flag::Invalidate()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: WeakReference::Flag::IsValid() const
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::Flag::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 22
    functionName: WeakReference::Flag::~Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::~Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - flag
    argTypes:
    - Flag*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference(const Flag* flag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: WeakReference::~WeakReference()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::~WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    - Dst: IsValid
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::internal::WeakReference::is_valid
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - IsValid
    - get
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: butil::internal::WeakReferenceOwner::WeakReferenceOwner
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::WeakReferenceOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: WeakReferenceOwner::~WeakReferenceOwner()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - Invalidate
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::~WeakReferenceOwner()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HasRefs
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:44,1
    - Dst: WeakReference::Flag::Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:45,1
    - Dst: WeakReference
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 48
    functionName: butil::internal::WeakReferenceOwner::GetRef
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - HasRefs
    - get
    - WeakReference::Flag::Flag
    - WeakReference
    linkageType: ''
    returnType: WeakReference
    signature: WeakReference WeakReferenceOwner::GetRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:51,1
    - Dst: butil::internal::WeakReferenceOwner::Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 55
    functionName: butil::internal::WeakReferenceOwner::Invalidate
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 3
    functionsReached:
    - butil::internal::WeakReferenceOwner::Invalidate
    - get
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: WeakPtrBase::~WeakPtrBase()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::~WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref'
    argTypes:
    - WeakReference
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase(const WeakReference& ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 11
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 11
    functionName: WeakReference::Flag::Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 15
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 15
    functionName: WeakReference::Flag::Invalidate()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: WeakReference::Flag::IsValid() const
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::Flag::IsValid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 22
    functionName: WeakReference::Flag::~Flag()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::Flag::~Flag()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 25
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - flag
    argTypes:
    - Flag*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 28
    functionName: butil::internal::WeakReference::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::WeakReference(const Flag* flag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 31
    functionName: WeakReference::~WeakReference()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReference::~WeakReference()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    - Dst: IsValid
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:33,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 33
    functionName: butil::internal::WeakReference::is_valid
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - IsValid
    - get
    linkageType: ''
    returnType: bool
    signature: bool WeakReference::is_valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 36
    functionName: butil::internal::WeakReferenceOwner::WeakReferenceOwner
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::WeakReferenceOwner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: WeakReferenceOwner::~WeakReferenceOwner()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - Invalidate
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::~WeakReferenceOwner()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HasRefs
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:44,1
    - Dst: WeakReference::Flag::Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:45,1
    - Dst: WeakReference
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 48
    functionName: butil::internal::WeakReferenceOwner::GetRef
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached:
    - HasRefs
    - get
    - WeakReference::Flag::Flag
    - WeakReference
    linkageType: ''
    returnType: WeakReference
    signature: WeakReference WeakReferenceOwner::GetRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:51,1
    - Dst: butil::internal::WeakReferenceOwner::Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.cc:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 55
    functionName: butil::internal::WeakReferenceOwner::Invalidate
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 4
    functionsReached:
    - butil::internal::WeakReferenceOwner::Invalidate
    - get
    linkageType: ''
    returnType: void
    signature: void WeakReferenceOwner::Invalidate()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 58
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 61
    functionName: WeakPtrBase::~WeakPtrBase()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::~WeakPtrBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' ref'
    argTypes:
    - WeakReference
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: butil::internal::WeakPtrBase::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrBase::WeakPtrBase(const WeakReference& ref)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: linked_ptr_internal::join_new
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void join_new()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - linked_ptr_internal*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 60
    functionName: linked_ptr_internal::join
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void join(linked_ptr_internal const* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: linked_ptr_internal::depart
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool depart()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr::capture
      Src: /src/brpc/src/butil/memory/linked_ptr.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 83
    functionName: linked_ptr::linked_ptr
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 1
    functionsReached:
    - linked_ptr::capture
    linkageType: ''
    returnType: void
    signature: void linked_ptr(T* ptr = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: depart
      Src: /src/brpc/src/butil/memory/linked_ptr.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: ~linked_ptr()
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - depart
    linkageType: ''
    returnType: void
    signature: void ~linked_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr::copy
      Src: /src/brpc/src/butil/memory/linked_ptr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - linked_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: linked_ptr::linked_ptr
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 1
    functionsReached:
    - linked_ptr::copy
    linkageType: ''
    returnType: void
    signature: void linked_ptr(linked_ptr<U> const& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/memory/linked_ptr.h:90,1
    - Dst: linked_ptr::copy
      Src: /src/brpc/src/butil/memory/linked_ptr.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - linked_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 92
    functionName: linked_ptr::linked_ptr
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 1
    functionsReached:
    - DCHECK_NE
    - linked_ptr::copy
    linkageType: ''
    returnType: void
    signature: void linked_ptr(linked_ptr const& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: depart
      Src: /src/brpc/src/butil/memory/linked_ptr.h:96,1
    - Dst: copy
      Src: /src/brpc/src/butil/memory/linked_ptr.h:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - linked_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: '& operator=(linked_ptr<U> const& ptr)'
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - depart
    - copy
    linkageType: ''
    returnType: linked_ptr
    signature: linked_ptr & operator=(linked_ptr<U> const& ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: depart
      Src: /src/brpc/src/butil/memory/linked_ptr.h:103,1
    - Dst: copy
      Src: /src/brpc/src/butil/memory/linked_ptr.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - linked_ptr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    functionName: '& operator=(linked_ptr const& ptr)'
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - depart
    - copy
    linkageType: ''
    returnType: linked_ptr
    signature: linked_ptr & operator=(linked_ptr const& ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr::depart
      Src: /src/brpc/src/butil/memory/linked_ptr.h:111,1
    - Dst: linked_ptr::capture
      Src: /src/brpc/src/butil/memory/linked_ptr.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 113
    functionName: linked_ptr::reset
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 1
    functionsReached:
    - linked_ptr::depart
    - linked_ptr::capture
    linkageType: ''
    returnType: void
    signature: void reset(T* ptr = NULL)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: linked_ptr::get
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 116
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr::depart
      Src: /src/brpc/src/butil/memory/linked_ptr.h:120,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/memory/linked_ptr.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 125
    functionName: linked_ptr::release
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - CHECK
    - linked_ptr::depart
    linkageType: ''
    returnType: T
    signature: T * release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: operator==(const T* p) const
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(const T* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: operator!=(const T* p) const
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator!=(const T* p) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/linked_ptr.h:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - linked_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 132
    functionName: operator==(linked_ptr<U> const& ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(linked_ptr<U> const& ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/linked_ptr.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - linked_ptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: operator!=(linked_ptr<U> const& ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(linked_ptr<U> const& ptr) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr::depart
      Src: /src/brpc/src/butil/memory/linked_ptr.h:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 147
    functionName: linked_ptr::depart
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 3
    functionsReached:
    - linked_ptr::depart
    linkageType: ''
    returnType: void
    signature: void depart()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: join_new
      Src: /src/brpc/src/butil/memory/linked_ptr.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 152
    functionName: linked_ptr::capture
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 2
    functionsReached:
    - join_new
    linkageType: ''
    returnType: void
    signature: void capture(T* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr<U>*::get
      Src: /src/brpc/src/butil/memory/linked_ptr.h:155,1
    - Dst: join
      Src: /src/brpc/src/butil/memory/linked_ptr.h:157,1
    - Dst: join_new
      Src: /src/brpc/src/butil/memory/linked_ptr.h:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - linked_ptr<U>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 160
    functionName: linked_ptr::copy
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 2
    functionsReached:
    - join_new
    - linked_ptr<U>*::get
    - join
    linkageType: ''
    returnType: void
    signature: void copy(linked_ptr<U> const* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/linked_ptr.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - ' x'
    argTypes:
    - T*
    - linked_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: operator==(T* ptr, const linked_ptr<T>& x)
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator==(T* ptr, const linked_ptr<T>& x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/linked_ptr.h:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ptr
    - ' x'
    argTypes:
    - T*
    - linked_ptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 171
    functionName: operator!=(T* ptr, const linked_ptr<T>& x)
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: bool
    signature: bool operator!=(T* ptr, const linked_ptr<T>& x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: linked_ptr<T>
      Src: /src/brpc/src/butil/memory/linked_ptr.h:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: make_linked_ptr
    functionSourceFile: /src/brpc/src/butil/memory/linked_ptr.h
    functionUses: 0
    functionsReached:
    - linked_ptr<T>
    linkageType: ''
    returnType: linked_ptr<T>
    signature: linked_ptr<T> make_linked_ptr(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const T*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    - Dst: butil::RefCountedMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 42
    functionName: butil::RefCountedThreadSafe<RefCountedMemory>
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 0
    functionsReached:
    - butil::RefCountedMemory
    - front
    - reinterpret_cast<const T*>
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT butil::RefCountedThreadSafe<RefCountedMemory>
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const T*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: butil::front_as
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 0
    functionsReached:
    - front
    - reinterpret_cast<const T*>
    linkageType: ''
    returnType: T
    signature: T * front_as() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedStaticMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:48,1
    - Dst: data_
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:49,1
    - Dst: length_
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:49,1
    - Dst: static_cast<const unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:51,1
    - Dst: butil::RefCountedStaticMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:59,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 65
    functionName: butil::RefCountedStaticMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 1
    functionsReached:
    - length_
    - static_cast<const unsigned char*>
    - butil::RefCountedStaticMemory
    - data_
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedStaticMemory
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::RefCountedStaticMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 1
    functionsReached:
    - static_cast<const unsigned char*>
    linkageType: ''
    returnType: void
    signature: void RefCountedStaticMemory(const void* data, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedBytes
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:70,1
    - Dst: RefCountedBytes
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:91,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 96
    functionName: butil::RefCountedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 1
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - RefCountedBytes
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedMemory
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 87
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: std::vector<unsigned char>
    signature: std::vector<unsigned char> & data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:102,1
    - Dst: butil::RefCountedString
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:117,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 122
    functionName: butil::RefCountedString
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 1
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - butil::RefCountedString
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedString
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedMallocedMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:129,1
    - Dst: RefCountedMallocedMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:136,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 142
    functionName: butil::butil::RefCountedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 0
    functionsReached:
    - RefCountedMallocedMemory
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT butil::RefCountedMemory
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const T*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    - Dst: butil::RefCountedMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 20
    functionDepth: 2
    functionLinenumber: 20
    functionLinenumberEnd: 42
    functionName: butil::RefCountedThreadSafe<RefCountedMemory>
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 0
    functionsReached:
    - butil::RefCountedMemory
    - front
    - reinterpret_cast<const T*>
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT butil::RefCountedThreadSafe<RefCountedMemory>
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<const T*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    - Dst: front
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: butil::front_as
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 0
    functionsReached:
    - front
    - reinterpret_cast<const T*>
    linkageType: ''
    returnType: T
    signature: T * front_as() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedStaticMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:48,1
    - Dst: data_
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:49,1
    - Dst: length_
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:49,1
    - Dst: static_cast<const unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:51,1
    - Dst: butil::RefCountedStaticMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:59,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 65
    functionName: butil::RefCountedStaticMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 2
    functionsReached:
    - length_
    - static_cast<const unsigned char*>
    - butil::RefCountedStaticMemory
    - data_
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedStaticMemory
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const unsigned char*>
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::RefCountedStaticMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 2
    functionsReached:
    - static_cast<const unsigned char*>
    linkageType: ''
    returnType: void
    signature: void RefCountedStaticMemory(const void* data, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedBytes
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:70,1
    - Dst: RefCountedBytes
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:91,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 96
    functionName: butil::RefCountedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 2
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - RefCountedBytes
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedMemory
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 87
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: std::vector<unsigned char>
    signature: std::vector<unsigned char> & data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedString
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:102,1
    - Dst: butil::RefCountedString
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:117,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 122
    functionName: butil::RefCountedString
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 2
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - butil::RefCountedString
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedString
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: butil::data
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & data()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedMallocedMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:129,1
    - Dst: RefCountedMallocedMemory
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:136,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted_memory.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 142
    functionName: butil::butil::RefCountedMemory
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted_memory.h
    functionUses: 0
    functionsReached:
    - RefCountedMallocedMemory
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT butil::RefCountedMemory
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::ScopedVector::ScopedVector
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::clear
      Src: /src/brpc/src/butil/memory/scoped_vector.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: ~ScopedVector()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - butil::clear
    linkageType: ''
    returnType: void
    signature: void ~ScopedVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - other
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ScopedVector::ScopedVector
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached:
    - butil::ScopedVector::swap
    linkageType: ''
    returnType: void
    signature: void ScopedVector(RValue other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - il
    argTypes:
    - std::initializer_list<value_type>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::ScopedVector::ScopedVector
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedVector(std::initializer_list<value_type> il)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: '& operator=(RValue rhs)'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - butil::swap
    linkageType: ''
    returnType: ScopedVector
    signature: ScopedVector & operator=(RValue rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: operator[](size_t index)
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: reference
    signature: reference operator[](size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: operator[](size_t index) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: const_reference
    signature: const_reference operator[](size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/src/butil/memory/scoped_vector.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: butil::ScopedVector::empty
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 11
    functionsReached:
    - butil::ScopedVector::empty
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/src/butil/memory/scoped_vector.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::ScopedVector::size
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - butil::ScopedVector::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rbegin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::ScopedVector::rbegin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::rbegin
    linkageType: ''
    returnType: reverse_iterator
    signature: reverse_iterator rbegin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rbegin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: butil::ScopedVector::rbegin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::rbegin
    linkageType: ''
    returnType: const_reverse_iterator
    signature: const_reverse_iterator rbegin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rend
      Src: /src/brpc/src/butil/memory/scoped_vector.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::ScopedVector::rend
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::rend
    linkageType: ''
    returnType: reverse_iterator
    signature: reverse_iterator rend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rend
      Src: /src/brpc/src/butil/memory/scoped_vector.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: butil::ScopedVector::rend
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::rend
    linkageType: ''
    returnType: const_reverse_iterator
    signature: const_reverse_iterator rend() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::begin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: butil::ScopedVector::begin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::begin
    linkageType: ''
    returnType: iterator
    signature: iterator begin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::begin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: butil::ScopedVector::begin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::begin
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator begin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/src/butil/memory/scoped_vector.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: butil::ScopedVector::end
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::end
    linkageType: ''
    returnType: iterator
    signature: iterator end()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/src/butil/memory/scoped_vector.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: butil::ScopedVector::end
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::end
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator end() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::front
      Src: /src/brpc/src/butil/memory/scoped_vector.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: butil::ScopedVector::front
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::front
    linkageType: ''
    returnType: const_reference
    signature: const_reference front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::front
      Src: /src/brpc/src/butil/memory/scoped_vector.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::ScopedVector::front
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::front
    linkageType: ''
    returnType: reference
    signature: reference front()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: butil::ScopedVector::back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 17
    functionsReached:
    - butil::ScopedVector::back
    linkageType: ''
    returnType: const_reference
    signature: const_reference back() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: butil::ScopedVector::back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 18
    functionsReached:
    - butil::ScopedVector::back
    linkageType: ''
    returnType: reference
    signature: reference back()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - elem
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: butil::ScopedVector::push_back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 19
    functionsReached:
    - butil::ScopedVector::push_back
    linkageType: ''
    returnType: void
    signature: void push_back(T* elem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/scoped_vector.h:74,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/src/butil/memory/scoped_vector.h:74,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:75,1
    - Dst: butil::ScopedVector::pop_back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 77
    functionName: butil::ScopedVector::pop_back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::empty
    - butil::ScopedVector::pop_back
    - butil::ScopedVector::back
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void pop_back()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: '& get()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<T*>
    signature: std::vector<T*> & get()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: '& get() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<T*>
    signature: std::vector<T*> & get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - std::vector<T*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: butil::ScopedVector::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::swap
    linkageType: ''
    returnType: void
    signature: void swap(std::vector<T*>& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ScopedVector<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: butil::ScopedVector::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::swap
    linkageType: ''
    returnType: void
    signature: void swap(ScopedVector<T>& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<T*>*::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:84,1
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/src/butil/memory/scoped_vector.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::vector<T*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: butil::ScopedVector::release
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - std::vector<T*>*::swap
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void release(std::vector<T*>* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::reserve
      Src: /src/brpc/src/butil/memory/scoped_vector.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: butil::ScopedVector::reserve
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::reserve
    linkageType: ''
    returnType: void
    signature: void reserve(size_t capacity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/src/butil/memory/scoped_vector.h:92,1
    - Dst: STLDeleteContainerPointers
      Src: /src/brpc/src/butil/memory/scoped_vector.h:93,1
    - Dst: butil::ScopedVector::begin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:93,1
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/src/butil/memory/scoped_vector.h:93,1
    - Dst: butil::ScopedVector::resize
      Src: /src/brpc/src/butil/memory/scoped_vector.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 2
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::ScopedVector::resize
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - butil::ScopedVector::resize
    - STLDeleteContainerPointers
    - butil::ScopedVector::size
    - butil::ScopedVector::begin
    - butil::ScopedVector::end
    linkageType: ''
    returnType: void
    signature: void resize(size_t new_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::assign
      Src: /src/brpc/src/butil/memory/scoped_vector.h:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - InputIterator
    - InputIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: butil::ScopedVector::assign
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::assign
    linkageType: ''
    returnType: void
    signature: void assign(InputIterator begin, InputIterator end)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STLDeleteElements
      Src: /src/brpc/src/butil/memory/scoped_vector.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::ScopedVector::clear
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - STLDeleteElements
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/src/butil/memory/scoped_vector.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: butil::ScopedVector::weak_clear
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void weak_clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::insert
      Src: /src/brpc/src/butil/memory/scoped_vector.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - position
    - x
    argTypes:
    - iterator
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: butil::ScopedVector::insert
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::insert
    linkageType: ''
    returnType: iterator
    signature: iterator insert(iterator position, T* x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::insert
      Src: /src/brpc/src/butil/memory/scoped_vector.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - position
    - first
    - last
    argTypes:
    - iterator
    - InputIterator
    - InputIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: butil::ScopedVector::insert
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::insert
    linkageType: ''
    returnType: void
    signature: void insert(iterator position, InputIterator first, InputIterator last)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - position
    argTypes:
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: butil::ScopedVector::erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 1
    functionsReached:
    - butil::ScopedVector::erase
    linkageType: ''
    returnType: iterator
    signature: iterator erase(iterator position)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STLDeleteContainerPointers
      Src: /src/brpc/src/butil/memory/scoped_vector.h:124,1
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - first
    - last
    argTypes:
    - iterator
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: butil::ScopedVector::erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::erase
    - STLDeleteContainerPointers
    linkageType: ''
    returnType: iterator
    signature: iterator erase(iterator first, iterator last)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - position
    argTypes:
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 2
    functionLinenumber: 129
    functionLinenumberEnd: 131
    functionName: butil::ScopedVector::weak_erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::erase
    linkageType: ''
    returnType: iterator
    signature: iterator weak_erase(iterator position)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - first
    - last
    argTypes:
    - iterator
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: butil::ScopedVector::weak_erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::erase
    linkageType: ''
    returnType: iterator
    signature: iterator weak_erase(iterator first, iterator last)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    functionName: butil::ScopedVector::ScopedVector
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/butil/memory/scoped_vector.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 39
    functionName: ~ScopedVector()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~ScopedVector()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - other
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ScopedVector::ScopedVector
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached:
    - butil::ScopedVector::swap
    linkageType: ''
    returnType: void
    signature: void ScopedVector(RValue other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - il
    argTypes:
    - std::initializer_list<value_type>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: butil::ScopedVector::ScopedVector
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedVector(std::initializer_list<value_type> il)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - RValue
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: '& operator=(RValue rhs)'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - swap
    linkageType: ''
    returnType: ScopedVector
    signature: ScopedVector & operator=(RValue rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    functionName: operator[](size_t index)
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: reference
    signature: reference operator[](size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: operator[](size_t index) const
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: const_reference
    signature: const_reference operator[](size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/src/butil/memory/scoped_vector.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: butil::ScopedVector::empty
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 13
    functionsReached:
    - butil::ScopedVector::empty
    linkageType: ''
    returnType: bool
    signature: bool empty() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/src/butil/memory/scoped_vector.h:54,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::ScopedVector::size
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 7
    functionsReached:
    - butil::ScopedVector::size
    linkageType: ''
    returnType: size_t
    signature: size_t size() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rbegin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: butil::ScopedVector::rbegin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::rbegin
    linkageType: ''
    returnType: reverse_iterator
    signature: reverse_iterator rbegin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rbegin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: butil::ScopedVector::rbegin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::rbegin
    linkageType: ''
    returnType: const_reverse_iterator
    signature: const_reverse_iterator rbegin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rend
      Src: /src/brpc/src/butil/memory/scoped_vector.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::ScopedVector::rend
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::rend
    linkageType: ''
    returnType: reverse_iterator
    signature: reverse_iterator rend()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::rend
      Src: /src/brpc/src/butil/memory/scoped_vector.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: butil::ScopedVector::rend
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::rend
    linkageType: ''
    returnType: const_reverse_iterator
    signature: const_reverse_iterator rend() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::begin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: butil::ScopedVector::begin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::begin
    linkageType: ''
    returnType: iterator
    signature: iterator begin()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::begin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 62
    functionName: butil::ScopedVector::begin
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - butil::ScopedVector::begin
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator begin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/src/butil/memory/scoped_vector.h:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: butil::ScopedVector::end
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 6
    functionsReached:
    - butil::ScopedVector::end
    linkageType: ''
    returnType: iterator
    signature: iterator end()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/src/butil/memory/scoped_vector.h:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: butil::ScopedVector::end
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 7
    functionsReached:
    - butil::ScopedVector::end
    linkageType: ''
    returnType: const_iterator
    signature: const_iterator end() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::front
      Src: /src/brpc/src/butil/memory/scoped_vector.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: butil::ScopedVector::front
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 3
    functionsReached:
    - butil::ScopedVector::front
    linkageType: ''
    returnType: const_reference
    signature: const_reference front() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::front
      Src: /src/brpc/src/butil/memory/scoped_vector.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::ScopedVector::front
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::front
    linkageType: ''
    returnType: reference
    signature: reference front()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: butil::ScopedVector::back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached:
    - butil::ScopedVector::back
    linkageType: ''
    returnType: const_reference
    signature: const_reference back() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 69
    functionName: butil::ScopedVector::back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 21
    functionsReached:
    - butil::ScopedVector::back
    linkageType: ''
    returnType: reference
    signature: reference back()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::push_back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:71,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - elem
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: butil::ScopedVector::push_back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 20
    functionsReached:
    - butil::ScopedVector::push_back
    linkageType: ''
    returnType: void
    signature: void push_back(T* elem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/scoped_vector.h:74,1
    - Dst: butil::ScopedVector::empty
      Src: /src/brpc/src/butil/memory/scoped_vector.h:74,1
    - Dst: butil::ScopedVector::back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:75,1
    - Dst: butil::ScopedVector::pop_back
      Src: /src/brpc/src/butil/memory/scoped_vector.h:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 77
    functionName: butil::ScopedVector::pop_back
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 4
    functionsReached:
    - butil::ScopedVector::empty
    - butil::ScopedVector::pop_back
    - butil::ScopedVector::back
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void pop_back()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: '& get()'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<T*>
    signature: std::vector<T*> & get()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: '& get() const'
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::vector<T*>
    signature: std::vector<T*> & get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - std::vector<T*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: butil::ScopedVector::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - butil::ScopedVector::swap
    linkageType: ''
    returnType: void
    signature: void swap(std::vector<T*>& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ScopedVector<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: butil::ScopedVector::swap
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 6
    functionsReached:
    - butil::ScopedVector::swap
    linkageType: ''
    returnType: void
    signature: void swap(ScopedVector<T>& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<T*>*::swap
      Src: /src/brpc/src/butil/memory/scoped_vector.h:84,1
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/src/butil/memory/scoped_vector.h:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::vector<T*>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: butil::ScopedVector::release
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - std::vector<T*>*::swap
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void release(std::vector<T*>* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::reserve
      Src: /src/brpc/src/butil/memory/scoped_vector.h:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: butil::ScopedVector::reserve
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::reserve
    linkageType: ''
    returnType: void
    signature: void reserve(size_t capacity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::size
      Src: /src/brpc/src/butil/memory/scoped_vector.h:92,1
    - Dst: STLDeleteContainerPointers
      Src: /src/brpc/src/butil/memory/scoped_vector.h:93,1
    - Dst: butil::ScopedVector::begin
      Src: /src/brpc/src/butil/memory/scoped_vector.h:93,1
    - Dst: butil::ScopedVector::end
      Src: /src/brpc/src/butil/memory/scoped_vector.h:93,1
    - Dst: butil::ScopedVector::resize
      Src: /src/brpc/src/butil/memory/scoped_vector.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 2
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: butil::ScopedVector::resize
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 6
    functionsReached:
    - butil::ScopedVector::resize
    - STLDeleteContainerPointers
    - butil::ScopedVector::size
    - butil::ScopedVector::begin
    - butil::ScopedVector::end
    linkageType: ''
    returnType: void
    signature: void resize(size_t new_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::assign
      Src: /src/brpc/src/butil/memory/scoped_vector.h:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - begin
    - end
    argTypes:
    - InputIterator
    - InputIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: butil::ScopedVector::assign
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::assign
    linkageType: ''
    returnType: void
    signature: void assign(InputIterator begin, InputIterator end)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STLDeleteElements
      Src: /src/brpc/src/butil/memory/scoped_vector.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::ScopedVector::clear
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 7
    functionsReached:
    - STLDeleteElements
    linkageType: ''
    returnType: void
    signature: void clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::clear
      Src: /src/brpc/src/butil/memory/scoped_vector.h:105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: butil::ScopedVector::weak_clear
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 2
    functionsReached:
    - butil::ScopedVector::clear
    linkageType: ''
    returnType: void
    signature: void weak_clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::insert
      Src: /src/brpc/src/butil/memory/scoped_vector.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - position
    - x
    argTypes:
    - iterator
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 110
    functionName: butil::ScopedVector::insert
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - butil::ScopedVector::insert
    linkageType: ''
    returnType: iterator
    signature: iterator insert(iterator position, T* x)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::insert
      Src: /src/brpc/src/butil/memory/scoped_vector.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - position
    - first
    - last
    argTypes:
    - iterator
    - InputIterator
    - InputIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: butil::ScopedVector::insert
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 6
    functionsReached:
    - butil::ScopedVector::insert
    linkageType: ''
    returnType: void
    signature: void insert(iterator position, InputIterator first, InputIterator last)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - position
    argTypes:
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: butil::ScopedVector::erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 5
    functionsReached:
    - butil::ScopedVector::erase
    linkageType: ''
    returnType: iterator
    signature: iterator erase(iterator position)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STLDeleteContainerPointers
      Src: /src/brpc/src/butil/memory/scoped_vector.h:124,1
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - first
    - last
    argTypes:
    - iterator
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: butil::ScopedVector::erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 6
    functionsReached:
    - butil::ScopedVector::erase
    - STLDeleteContainerPointers
    linkageType: ''
    returnType: iterator
    signature: iterator erase(iterator first, iterator last)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - position
    argTypes:
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 2
    functionLinenumber: 129
    functionLinenumberEnd: 131
    functionName: butil::ScopedVector::weak_erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::erase
    linkageType: ''
    returnType: iterator
    signature: iterator weak_erase(iterator position)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedVector::erase
      Src: /src/brpc/src/butil/memory/scoped_vector.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - first
    - last
    argTypes:
    - iterator
    - iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 136
    functionName: butil::ScopedVector::weak_erase
    functionSourceFile: /src/brpc/src/butil/memory/scoped_vector.h
    functionUses: 0
    functionsReached:
    - butil::ScopedVector::erase
    linkageType: ''
    returnType: iterator
    signature: iterator weak_erase(iterator first, iterator last)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - buffer_name
    - ','
    - byte_alignment
    - ','
    - size
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: DECL_ALIGNED_BUFFER
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DECL_ALIGNED_BUFFER(buffer_name, byte_alignment, size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - buffer_name
    - ','
    - byte_alignment
    - ','
    - size
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: DECL_ALIGNED_BUFFER
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DECL_ALIGNED_BUFFER(buffer_name, byte_alignment, size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - byte_alignment
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 85
    functionName: BUTIL_DECL_ALIGNED_MEMORY
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_DECL_ALIGNED_MEMORY(byte_alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _aligned_free
      Src: /src/brpc/src/butil/memory/aligned_memory.h:110,1
    - Dst: free
      Src: /src/brpc/src/butil/memory/aligned_memory.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 114
    functionName: butil::AlignedFree
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 2
    functionsReached:
    - _aligned_free
    - free
    linkageType: ''
    returnType: void
    signature: void AlignedFree(void* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlignedFree
      Src: /src/brpc/src/butil/memory/aligned_memory.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator()(void* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached:
    - butil::AlignedFree
    linkageType: ''
    returnType: void
    signature: void operator()(void* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - buffer_name
    - ','
    - byte_alignment
    - ','
    - size
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: DECL_ALIGNED_BUFFER
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DECL_ALIGNED_BUFFER(buffer_name, byte_alignment, size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - buffer_name
    - ','
    - byte_alignment
    - ','
    - size
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: DECL_ALIGNED_BUFFER
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DECL_ALIGNED_BUFFER(buffer_name, byte_alignment, size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - byte_alignment
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 85
    functionName: BUTIL_DECL_ALIGNED_MEMORY
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BUTIL_DECL_ALIGNED_MEMORY(byte_alignment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _aligned_free
      Src: /src/brpc/src/butil/memory/aligned_memory.h:110,1
    - Dst: free
      Src: /src/brpc/src/butil/memory/aligned_memory.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 114
    functionName: butil::AlignedFree
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 3
    functionsReached:
    - _aligned_free
    - free
    linkageType: ''
    returnType: void
    signature: void AlignedFree(void* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AlignedFree
      Src: /src/brpc/src/butil/memory/aligned_memory.h:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    functionName: operator()(void* ptr) const
    functionSourceFile: /src/brpc/src/butil/memory/aligned_memory.h
    functionUses: 0
    functionsReached:
    - AlignedFree
    linkageType: ''
    returnType: void
    signature: void operator()(void* ptr) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 17
    functionName: butil::ScopedOpenProcess::ScopedOpenProcess
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedOpenProcess()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Close
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: ~ScopedOpenProcess()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached:
    - Close
    linkageType: ''
    returnType: void
    signature: void ~ScopedOpenProcess()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedOpenProcess::Close
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:27,1
    - Dst: OpenProcessHandle
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pid
    argTypes:
    - ProcessId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: butil::ScopedOpenProcess::Open
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached:
    - OpenProcessHandle
    - butil::ScopedOpenProcess::Close
    linkageType: ''
    returnType: bool
    signature: bool Open(ProcessId pid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CloseProcessHandle
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:36,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: butil::ScopedOpenProcess::Close
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 1
    functionsReached:
    - CloseProcessHandle
    linkageType: ''
    returnType: void
    signature: void Close()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ScopedOpenProcess::handle
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ProcessHandle
    signature: ProcessHandle handle() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 17
    functionName: butil::ScopedOpenProcess::ScopedOpenProcess
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedOpenProcess()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Close
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:21,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 22
    functionName: ~ScopedOpenProcess()
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached:
    - Close
    linkageType: ''
    returnType: void
    signature: void ~ScopedOpenProcess()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedOpenProcess::Close
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:27,1
    - Dst: OpenProcessHandle
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:28,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pid
    argTypes:
    - ProcessId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 29
    functionName: butil::ScopedOpenProcess::Open
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached:
    - OpenProcessHandle
    - butil::ScopedOpenProcess::Close
    linkageType: ''
    returnType: bool
    signature: bool Open(ProcessId pid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CloseProcessHandle
      Src: /src/brpc/src/butil/memory/scoped_open_process.h:36,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: butil::ScopedOpenProcess::Close
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 2
    functionsReached:
    - CloseProcessHandle
    linkageType: ''
    returnType: void
    signature: void Close()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    functionName: butil::ScopedOpenProcess::handle
    functionSourceFile: /src/brpc/src/butil/memory/scoped_open_process.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ProcessHandle
    signature: ProcessHandle handle() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: butil::internal::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - Flag
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakReference
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: butil::internal::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - Flag
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakReference
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::WeakReferenceOwner
      Src: /src/brpc/src/butil/memory/weak_ptr.h:112,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    - Dst: HasOneRef
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    - Dst: scoped_refptr::scoped_refptr
      Src: /src/brpc/src/butil/memory/weak_ptr.h:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 125
    functionName: butil::WeakReferenceOwner
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 1
    functionsReached:
    - butil::WeakReferenceOwner
    - HasOneRef
    - scoped_refptr::scoped_refptr
    - butil::get
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakReferenceOwner
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    - Dst: HasOneRef
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: butil::HasRefs
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - HasOneRef
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool HasRefs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::WeakPtrBase
      Src: /src/brpc/src/butil/memory/weak_ptr.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 140
    functionName: butil::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 1
    functionsReached:
    - butil::WeakPtrBase
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakPtrBase
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/memory/weak_ptr.h:155,1
    - Dst: butil::SupportsWeakPtrBase::AsWeakPtrImpl
      Src: /src/brpc/src/butil/memory/weak_ptr.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - t
    argTypes:
    - Derived*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 158
    functionName: butil::SupportsWeakPtrBase::StaticAsWeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - COMPILE_ASSERT
    - butil::SupportsWeakPtrBase::AsWeakPtrImpl
    linkageType: ''
    returnType: WeakPtr<Derived>
    signature: WeakPtr<Derived> StaticAsWeakPtr(Derived* t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Derived*::Base::AsWeakPtr
      Src: /src/brpc/src/butil/memory/weak_ptr.h:167,1
    - Dst: WeakPtr<Derived>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:168,1
    - Dst: static_cast<Derived*>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - Derived*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 169
    functionName: butil::SupportsWeakPtrBase::AsWeakPtrImpl
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 1
    functionsReached:
    - WeakPtr<Derived>
    - static_cast<Derived*>
    - Derived*::Base::AsWeakPtr
    linkageType: ''
    returnType: WeakPtr<Derived>
    signature: "WeakPtr<Derived> AsWeakPtrImpl(\n      Derived* t, const SupportsWeakPtr<Base>&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: butil::internal::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - Flag
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakReference
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Flag
      Src: /src/brpc/src/butil/memory/weak_ptr.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 98
    functionName: butil::internal::WeakReference
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - Flag
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakReference
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::WeakReferenceOwner
      Src: /src/brpc/src/butil/memory/weak_ptr.h:112,1
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    - Dst: HasOneRef
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    - Dst: scoped_refptr::scoped_refptr
      Src: /src/brpc/src/butil/memory/weak_ptr.h:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 125
    functionName: butil::WeakReferenceOwner
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 2
    functionsReached:
    - butil::WeakReferenceOwner
    - HasOneRef
    - scoped_refptr::scoped_refptr
    - butil::get
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakReferenceOwner
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    - Dst: HasOneRef
      Src: /src/brpc/src/butil/memory/weak_ptr.h:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: butil::HasRefs
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - HasOneRef
    - butil::get
    linkageType: ''
    returnType: bool
    signature: bool HasRefs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::WeakPtrBase
      Src: /src/brpc/src/butil/memory/weak_ptr.h:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 140
    functionName: butil::WeakPtrBase
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 2
    functionsReached:
    - butil::WeakPtrBase
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT WeakPtrBase
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: COMPILE_ASSERT
      Src: /src/brpc/src/butil/memory/weak_ptr.h:155,1
    - Dst: butil::SupportsWeakPtrBase::AsWeakPtrImpl
      Src: /src/brpc/src/butil/memory/weak_ptr.h:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - t
    argTypes:
    - Derived*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 158
    functionName: butil::SupportsWeakPtrBase::StaticAsWeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - COMPILE_ASSERT
    - butil::SupportsWeakPtrBase::AsWeakPtrImpl
    linkageType: ''
    returnType: WeakPtr<Derived>
    signature: WeakPtr<Derived> StaticAsWeakPtr(Derived* t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Derived*::Base::AsWeakPtr
      Src: /src/brpc/src/butil/memory/weak_ptr.h:167,1
    - Dst: WeakPtr<Derived>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:168,1
    - Dst: static_cast<Derived*>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - Derived*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 169
    functionName: butil::SupportsWeakPtrBase::AsWeakPtrImpl
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 2
    functionsReached:
    - WeakPtr<Derived>
    - static_cast<Derived*>
    - Derived*::Base::AsWeakPtr
    linkageType: ''
    returnType: WeakPtr<Derived>
    signature: "WeakPtr<Derived> AsWeakPtrImpl(\n      Derived* t, const SupportsWeakPtr<Base>&)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 193
    functionName: WeakPtr::WeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - WeakPtr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 199
    functionName: WeakPtr::WeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtr(const WeakPtr<U>& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_valid
      Src: /src/brpc/src/butil/memory/weak_ptr.h:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    functionName: WeakPtr::get
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 20
    functionsReached:
    - is_valid
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/weak_ptr.h:204,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:204,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 206
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - get
    - DCHECK
    linkageType: ''
    returnType: T
    signature: T & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/weak_ptr.h:208,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:208,1
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 210
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - get
    - DCHECK
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/weak_ptr.h:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 223
    functionName: operator Testable() const
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: void
    signature: void operator Testable() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::WeakReference
      Src: /src/brpc/src/butil/memory/weak_ptr.h:226,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 228
    functionName: WeakPtr::reset
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - butil::internal::WeakReference
    linkageType: ''
    returnType: void
    signature: void reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' ref'
    - ptr
    argTypes:
    - internal::WeakReference
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 244
    functionName: WeakPtr::WeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtr(const internal::WeakReference& ref, T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 260
    functionName: WeakPtrFactory::WeakPtrFactory
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WeakPtrFactory(T* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 264
    functionName: ~WeakPtrFactory()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~WeakPtrFactory()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/weak_ptr.h:267,1
    - Dst: WeakPtr<T>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:268,1
    - Dst: GetRef
      Src: /src/brpc/src/butil/memory/weak_ptr.h:268,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 269
    functionName: WeakPtrFactory::GetWeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 18
    functionsReached:
    - WeakPtr<T>
    - GetRef
    - DCHECK
    linkageType: ''
    returnType: WeakPtr<T>
    signature: WeakPtr<T> GetWeakPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/weak_ptr.h:273,1
    - Dst: Invalidate
      Src: /src/brpc/src/butil/memory/weak_ptr.h:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 275
    functionName: WeakPtrFactory::InvalidateWeakPtrs
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 2
    functionsReached:
    - DCHECK
    - Invalidate
    linkageType: ''
    returnType: void
    signature: void InvalidateWeakPtrs()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/weak_ptr.h:279,1
    - Dst: HasRefs
      Src: /src/brpc/src/butil/memory/weak_ptr.h:280,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 281
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 281
    functionName: WeakPtrFactory::HasWeakPtrs
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 4
    functionsReached:
    - HasRefs
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: bool HasWeakPtrs() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 297
    functionName: SupportsWeakPtr::SupportsWeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SupportsWeakPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WeakPtr<T>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:300,1
    - Dst: GetRef
      Src: /src/brpc/src/butil/memory/weak_ptr.h:300,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 301
    functionName: SupportsWeakPtr::AsWeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached:
    - static_cast<T*>
    - GetRef
    - WeakPtr<T>
    linkageType: ''
    returnType: WeakPtr<T>
    signature: WeakPtr<T> AsWeakPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 304
    functionName: ~SupportsWeakPtr()
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SupportsWeakPtr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal::SupportsWeakPtrBase::StaticAsWeakPtr<Derived>
      Src: /src/brpc/src/butil/memory/weak_ptr.h:331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - Derived*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 332
    functionName: AsWeakPtr
    functionSourceFile: /src/brpc/src/butil/memory/weak_ptr.h
    functionUses: 7
    functionsReached:
    - internal::SupportsWeakPtrBase::StaticAsWeakPtr<Derived>
    linkageType: ''
    returnType: WeakPtr<Derived>
    signature: WeakPtr<Derived> AsWeakPtr(Derived* t)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: butil::subtle::RefCountedBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedBase
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: ~RefCountedBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void ~RefCountedBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: butil::subtle::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: bool Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: butil::subtle::RefCountedBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedBase
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: ~RefCountedBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void ~RefCountedBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: butil::subtle::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: bool Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedThreadSafeBase
      Src: /src/brpc/src/butil/memory/ref_counted.h:86,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 103
    functionName: butil::RefCountedThreadSafeBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 1
    functionsReached:
    - butil::RefCountedThreadSafeBase
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedThreadSafeBase
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: butil::subtle::RefCountedBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedBase
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: ~RefCountedBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void ~RefCountedBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: butil::subtle::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: bool Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: butil::subtle::RefCountedBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedBase
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 37
    functionName: ~RefCountedBase()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void ~RefCountedBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: butil::subtle::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/memory/ref_counted.h:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 67
    functionName: butil::subtle::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - DCHECK
    linkageType: ''
    returnType: bool
    signature: bool Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RefCountedThreadSafeBase
      Src: /src/brpc/src/butil/memory/ref_counted.h:86,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/memory/ref_counted.h:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 103
    functionName: butil::RefCountedThreadSafeBase
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 2
    functionsReached:
    - butil::RefCountedThreadSafeBase
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT RefCountedThreadSafeBase
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: RefCounted::RefCounted
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCounted()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::RefCountedThreadSafeBase::AddRef
      Src: /src/brpc/src/butil/memory/ref_counted.h:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 128
    functionName: RefCounted::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - butil::subtle::RefCountedThreadSafeBase::AddRef
    linkageType: ''
    returnType: void
    signature: void AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::GlobalRelease
      Src: /src/brpc/src/butil/memory/ref_counted.h:131,1
    - Dst: static_cast<const T*>
      Src: /src/brpc/src/butil/memory/ref_counted.h:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 130
    functionDepth: 2
    functionLinenumber: 130
    functionLinenumberEnd: 134
    functionName: RefCounted::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - static_cast<const T*>
    - brpc::rdma::RdmaEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 137
    functionName: ~RefCounted()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RefCounted()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RefCountedThreadSafe::DeleteInternal
      Src: /src/brpc/src/butil/memory/ref_counted.h:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: Destruct
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 1
    functionsReached:
    - RefCountedThreadSafe::DeleteInternal
    linkageType: ''
    returnType: void
    signature: void Destruct(const T* x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: RefCountedThreadSafe::RefCountedThreadSafe
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedThreadSafe()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::RefCountedThreadSafeBase::AddRef
      Src: /src/brpc/src/butil/memory/ref_counted.h:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 176
    functionDepth: 2
    functionLinenumber: 176
    functionLinenumberEnd: 178
    functionName: RefCountedThreadSafe::AddRef
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - butil::subtle::RefCountedThreadSafeBase::AddRef
    linkageType: ''
    returnType: void
    signature: void AddRef() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::RefCountedThreadSafeBase::Release
      Src: /src/brpc/src/butil/memory/ref_counted.h:181,1
    - Dst: ScopedRefPtrToSelf::SelfDestruct
      Src: /src/brpc/src/butil/memory/ref_counted.h:182,1
    - Dst: static_cast<const T*>
      Src: /src/brpc/src/butil/memory/ref_counted.h:182,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 180
    functionDepth: 2
    functionLinenumber: 180
    functionLinenumberEnd: 184
    functionName: RefCountedThreadSafe::Release
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - static_cast<const T*>
    - butil::subtle::RefCountedThreadSafeBase::Release
    - ScopedRefPtrToSelf::SelfDestruct
    linkageType: ''
    returnType: void
    signature: void Release() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 187
    functionName: ~RefCountedThreadSafe()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RefCountedThreadSafe()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    functionName: RefCountedThreadSafe::DeleteInternal
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DeleteInternal(const T* x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 204
    functionName: RefCountedData::RefCountedData
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' in_value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 205
    functionName: RefCountedData::RefCountedData
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RefCountedData(const T& in_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 211
    functionName: ~RefCountedData()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~RefCountedData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 270
    functionName: scoped_refptr::scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_refptr()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddRef
      Src: /src/brpc/src/butil/memory/ref_counted.h:274,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 275
    functionName: scoped_refptr::scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 5
    functionsReached:
    - AddRef
    linkageType: ''
    returnType: void
    signature: void scoped_refptr(T* p)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddRef
      Src: /src/brpc/src/butil/memory/ref_counted.h:279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 280
    functionName: scoped_refptr::scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 5
    functionsReached:
    - AddRef
    linkageType: ''
    returnType: void
    signature: void scoped_refptr(const scoped_refptr<T>& r)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: scoped_refptr::get
      Src: /src/brpc/src/butil/memory/ref_counted.h:283,1
    - Dst: AddRef
      Src: /src/brpc/src/butil/memory/ref_counted.h:285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 286
    functionName: scoped_refptr::scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 5
    functionsReached:
    - scoped_refptr::get
    - AddRef
    linkageType: ''
    returnType: void
    signature: void scoped_refptr(const scoped_refptr<U>& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 291
    functionName: scoped_refptr::scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_refptr(scoped_refptr<T>&& r) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 297
    functionName: scoped_refptr::scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void scoped_refptr(scoped_refptr<U>&& r) noexcept
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Release
      Src: /src/brpc/src/butil/memory/ref_counted.h:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 302
    functionName: ~scoped_refptr()
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - Release
    linkageType: ''
    returnType: void
    signature: void ~scoped_refptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 304
    functionName: scoped_refptr::get
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: T * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 308
    functionName: operator T*() const
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void operator T*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/brpc/src/butil/memory/ref_counted.h:311,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts:
    - condition: (ptr_ != NULL)
      pos:
        line_end: 310
        line_start: 310
        source_file: /src/brpc/src/butil/memory/ref_counted.h
    constantsTouched: []
    func_position:
      end: 313
      start: 310
    functionDepth: 0
    functionLinenumber: 310
    functionLinenumberEnd: 313
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - assert
    linkageType: ''
    returnType: T
    signature: T * operator->() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: T*::AddRef
      Src: /src/brpc/src/butil/memory/ref_counted.h:318,1
    - Dst: T*::Release
      Src: /src/brpc/src/butil/memory/ref_counted.h:322,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 324
    functionName: '& operator=(T* p)'
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - T*::Release
    - T*::AddRef
    linkageType: ''
    returnType: scoped_refptr<T>
    signature: scoped_refptr<T> & operator=(T* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 328
    functionName: '& operator=(const scoped_refptr<T>& r)'
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: scoped_refptr<T>
    signature: scoped_refptr<T> & operator=(const scoped_refptr<T>& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/ref_counted.h:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<U>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 333
    functionName: '& operator=(const scoped_refptr<U>& r)'
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: scoped_refptr<T>
    signature: scoped_refptr<T> & operator=(const scoped_refptr<U>& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pp
    argTypes:
    - T**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 339
    functionName: scoped_refptr::swap
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void swap(T** pp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_refptr::swap
      Src: /src/brpc/src/butil/memory/ref_counted.h:342,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - scoped_refptr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: scoped_refptr::swap
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 1
    functionsReached:
    - scoped_refptr::swap
    linkageType: ''
    returnType: void
    signature: void swap(scoped_refptr<T>& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_refptr::swap
      Src: /src/brpc/src/butil/memory/ref_counted.h:348,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: scoped_refptr::WARN_UNUSED_RESULT
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - scoped_refptr::swap
    linkageType: ''
    returnType: T
    signature: T * release() WARN_UNUSED_RESULT
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: scoped_refptr<T>
      Src: /src/brpc/src/butil/memory/ref_counted.h:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 361
    functionName: make_scoped_refptr
    functionSourceFile: /src/brpc/src/butil/memory/ref_counted.h
    functionUses: 0
    functionsReached:
    - scoped_refptr<T>
    linkageType: ''
    returnType: scoped_refptr<T>
    signature: scoped_refptr<T> make_scoped_refptr(T* t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/butil/memory/scope_guard.h:39,1
    - Dst: butil::ScopeGuard<Callback>::dismiss
      Src: /src/brpc/src/butil/memory/scope_guard.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ScopeGuard
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::move
    - butil::ScopeGuard<Callback>::dismiss
    linkageType: ''
    returnType: void
    signature: void ScopeGuard(ScopeGuard&& other) noexcept
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _callback
      Src: /src/brpc/src/butil/memory/scope_guard.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: ~ScopeGuard() noexcept
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - _callback
    linkageType: ''
    returnType: void
    signature: void ~ScopeGuard() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::ScopeGuard<Callback>::dismiss
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void dismiss() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopeGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopeGuard(const ScopeGuard&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: '& operator=(const ScopeGuard&)'
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ScopeGuard
    signature: ScopeGuard & operator=(const ScopeGuard&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: '& operator=(ScopeGuard&&)'
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ScopeGuard
    signature: ScopeGuard & operator=(ScopeGuard&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::forward<Callback>
    linkageType: ''
    returnType: void
    signature: void ScopeGuard(Callback&& callback) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: butil::MakeScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 3
    functionsReached:
    - std::forward<Callback>
    linkageType: ''
    returnType: ScopeGuard<Callback>
    signature: ScopeGuard<Callback> MakeScopeGuard(Callback&& callback) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeScopeGuard
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: operator+(ScopeExitHelper, Callback&& callback)
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::forward<Callback>
    - MakeScopeGuard
    linkageType: ''
    returnType: ScopeGuard<Callback>
    signature: ScopeGuard<Callback> operator+(ScopeExitHelper, Callback&& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: operator+(ScopeExitHelper, Callback&& callback)
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::forward<Callback>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: ScopeGuard<Callback>
    signature: ScopeGuard<Callback> operator+(ScopeExitHelper, Callback&& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/src/butil/memory/scope_guard.h:39,1
    - Dst: butil::ScopeGuard<Callback>::dismiss
      Src: /src/brpc/src/butil/memory/scope_guard.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - ScopeGuard
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::move
    - butil::ScopeGuard<Callback>::dismiss
    linkageType: ''
    returnType: void
    signature: void ScopeGuard(ScopeGuard&& other) noexcept
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _callback
      Src: /src/brpc/src/butil/memory/scope_guard.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: ~ScopeGuard() noexcept
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - _callback
    linkageType: ''
    returnType: void
    signature: void ~ScopeGuard() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: butil::ScopeGuard<Callback>::dismiss
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void dismiss() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopeGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopeGuard(const ScopeGuard&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: '& operator=(const ScopeGuard&)'
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ScopeGuard
    signature: ScopeGuard & operator=(const ScopeGuard&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: '& operator=(ScopeGuard&&)'
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ScopeGuard
    signature: ScopeGuard & operator=(ScopeGuard&&)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    functionName: butil::ScopeGuard<Callback>::ScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::forward<Callback>
    linkageType: ''
    returnType: void
    signature: void ScopeGuard(Callback&& callback) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: butil::MakeScopeGuard
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 4
    functionsReached:
    - std::forward<Callback>
    linkageType: ''
    returnType: ScopeGuard<Callback>
    signature: ScopeGuard<Callback> MakeScopeGuard(Callback&& callback) noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeScopeGuard
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: operator+(ScopeExitHelper, Callback&& callback)
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::forward<Callback>
    - MakeScopeGuard
    linkageType: ''
    returnType: ScopeGuard<Callback>
    signature: ScopeGuard<Callback> operator+(ScopeExitHelper, Callback&& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeScopeGuard
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    - Dst: std::forward<Callback>
      Src: /src/brpc/src/butil/memory/scope_guard.h:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' callback'
    argTypes:
    - Callback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: operator+(ScopeExitHelper, Callback&& callback)
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached:
    - std::forward<Callback>
    - MakeScopeGuard
    linkageType: ''
    returnType: ScopeGuard<Callback>
    signature: ScopeGuard<Callback> operator+(ScopeExitHelper, Callback&& callback)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - prefix
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 93
    functionName: BRPC_ANONYMOUS_VARIABLE
    functionSourceFile: /src/brpc/src/butil/memory/scope_guard.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BRPC_ANONYMOUS_VARIABLE(prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: butil::create_leaky_singleton_obj
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: T
    signature: T * create_leaky_singleton_obj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: create_leaky_singleton_obj<T>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:48,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:49,1
    - Dst: reinterpret_cast<butil::subtle::AtomicWord>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 52
    functionName: butil::GetLeakySingleton<T>::create_leaky_singleton
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<butil::subtle::AtomicWord>
    - create_leaky_singleton_obj<T>
    - butil::subtle::Release_Store
    linkageType: ''
    returnType: void
    signature: void GetLeakySingleton<T>::create_leaky_singleton()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:61,1
    - Dst: reinterpret_cast<T*>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:64,1
    - Dst: pthread_once
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:66,1
    - Dst: reinterpret_cast<T*>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: butil::get_leaky_singleton
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 6
    functionsReached:
    - pthread_once
    - butil::subtle::Acquire_Load
    - reinterpret_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * get_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<T*>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:76,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 79
    functionName: butil::has_leaky_singleton
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    - reinterpret_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * has_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T::T
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: butil::create_leaky_singleton_obj
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 0
    functionsReached:
    - T::T
    linkageType: ''
    returnType: T
    signature: T * create_leaky_singleton_obj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: create_leaky_singleton_obj<T>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:48,1
    - Dst: butil::subtle::Release_Store
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:49,1
    - Dst: reinterpret_cast<butil::subtle::AtomicWord>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 52
    functionName: butil::GetLeakySingleton<T>::create_leaky_singleton
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<butil::subtle::AtomicWord>
    - create_leaky_singleton_obj<T>
    - butil::subtle::Release_Store
    linkageType: ''
    returnType: void
    signature: void GetLeakySingleton<T>::create_leaky_singleton()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:61,1
    - Dst: reinterpret_cast<T*>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:64,1
    - Dst: pthread_once
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:66,1
    - Dst: reinterpret_cast<T*>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: butil::get_leaky_singleton
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 6
    functionsReached:
    - pthread_once
    - butil::subtle::Acquire_Load
    - reinterpret_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * get_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<T*>
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:76,1
    - Dst: butil::subtle::Acquire_Load
      Src: /src/brpc/src/butil/memory/singleton_on_pthread_once.h:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 79
    functionName: butil::has_leaky_singleton
    functionSourceFile: /src/brpc/src/butil/memory/singleton_on_pthread_once.h
    functionUses: 0
    functionsReached:
    - butil::subtle::Acquire_Load
    - reinterpret_cast<T*>
    linkageType: ''
    returnType: T
    signature: T * has_leaky_singleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/src/butil/memory/manual_constructor.h:37,1
    - Dst: butil::AlignedAlloc
      Src: /src/brpc/src/butil/memory/manual_constructor.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 41
    functionName: '* operator new[](size_t size)'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::AlignedAlloc
    linkageType: ''
    returnType: void
    signature: void * operator new[](size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::AlignedFree
      Src: /src/brpc/src/butil/memory/manual_constructor.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mem
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: operator delete[](void* mem)
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::AlignedFree
    linkageType: ''
    returnType: void
    signature: void operator delete[](void* mem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: template data_as<Type>
      Src: /src/brpc/src/butil/memory/manual_constructor.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: butil::ManualConstructor::get
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - template data_as<Type>
    linkageType: ''
    returnType: Type
    signature: Type * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: template data_as<Type>
      Src: /src/brpc/src/butil/memory/manual_constructor.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: butil::ManualConstructor::get
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - template data_as<Type>
    linkageType: ''
    returnType: Type
    signature: Type * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: Type
    signature: Type * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: Type
    signature: Type * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: Type
    signature: Type & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::get
    linkageType: ''
    returnType: Type
    signature: Type & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: void_data
      Src: /src/brpc/src/butil/memory/manual_constructor.h:63,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/memory/manual_constructor.h:63,1
    - Dst: Type::Type
      Src: /src/brpc/src/butil/memory/manual_constructor.h:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: butil::ManualConstructor::Init
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - void_data
    - Type::Type
    linkageType: ''
    returnType: void
    signature: void Init(Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ManualConstructor::get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: butil::ManualConstructor::Destroy
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::ManualConstructor::get
    linkageType: ''
    returnType: void
    signature: void Destroy()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AlignedAlloc
      Src: /src/brpc/src/butil/memory/manual_constructor.h:37,1
    - Dst: AlignedAlloc
      Src: /src/brpc/src/butil/memory/manual_constructor.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 41
    functionName: '* operator new[](size_t size)'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - AlignedAlloc
    linkageType: ''
    returnType: void
    signature: void * operator new[](size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AlignedFree
      Src: /src/brpc/src/butil/memory/manual_constructor.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mem
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: operator delete[](void* mem)
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - AlignedFree
    linkageType: ''
    returnType: void
    signature: void operator delete[](void* mem)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: template data_as<Type>
      Src: /src/brpc/src/butil/memory/manual_constructor.h:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: butil::ManualConstructor::get
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 1
    functionsReached:
    - template data_as<Type>
    linkageType: ''
    returnType: Type
    signature: Type * get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: template data_as<Type>
      Src: /src/brpc/src/butil/memory/manual_constructor.h:52,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 53
    functionName: butil::ManualConstructor::get
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 1
    functionsReached:
    - template data_as<Type>
    linkageType: ''
    returnType: Type
    signature: Type * get() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: '* operator->()'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Type
    signature: Type * operator->()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 56
    functionName: '* operator->() const'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Type
    signature: Type * operator->() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: '& operator*()'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Type
    signature: Type & operator*()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: '& operator*() const'
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - get
    linkageType: ''
    returnType: Type
    signature: Type & operator*() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: void_data
      Src: /src/brpc/src/butil/memory/manual_constructor.h:63,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/butil/memory/manual_constructor.h:63,1
    - Dst: Type::Type
      Src: /src/brpc/src/butil/memory/manual_constructor.h:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 64
    functionName: butil::ManualConstructor::Init
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - void_data
    - Type::Type
    linkageType: ''
    returnType: void
    signature: void Init(Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ManualConstructor::get
      Src: /src/brpc/src/butil/memory/manual_constructor.h:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: butil::ManualConstructor::Destroy
    functionSourceFile: /src/brpc/src/butil/memory/manual_constructor.h
    functionUses: 0
    functionsReached:
    - butil::ManualConstructor::get
    linkageType: ''
    returnType: void
    signature: void Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:55,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:55,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:62,1
    - Dst: getpid
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:62,1
    - Dst: prctl
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:70,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:73,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 75
    functionName: butil::PlatformThread::SetName
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 22
    functionsReached:
    - butil::PlatformThread::CurrentId
    - DPLOG
    - butil::ThreadIdNameManager::GetInstance
    - getpid
    - prctl
    linkageType: ''
    returnType: void
    signature: void PlatformThread::SetName(const char* name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setschedparam
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:83,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:83,1
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:93,1
    - Dst: ThreadNiceValue
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:94,1
    - Dst: setpriority
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:95,1
    - Dst: DVPLOG
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:96,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - handle
    - priority
    argTypes:
    - PlatformThreadHandle
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 100
    functionName: butil::PlatformThread::SetThreadPriority
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached:
    - DCHECK_NE
    - setpriority
    - ThreadNiceValue
    - DVPLOG
    - pthread_setschedparam
    - pthread_self
    linkageType: ''
    returnType: void
    signature: "void PlatformThread::SetThreadPriority(PlatformThreadHandle handle,\n
      \                                      ThreadPriority priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::InitThreading
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitThreading()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: butil::InitOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: butil::TerminateOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TerminateOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' attributes'
    argTypes:
    - pthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 117
    functionName: butil::GetDefaultThreadStackSize
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetDefaultThreadStackSize(const pthread_attr_t& attributes)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:55,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:55,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:62,1
    - Dst: getpid
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:62,1
    - Dst: prctl
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:70,1
    - Dst: DPLOG
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:73,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 75
    functionName: butil::PlatformThread::SetName
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 22
    functionsReached:
    - butil::PlatformThread::CurrentId
    - DPLOG
    - butil::ThreadIdNameManager::GetInstance
    - getpid
    - prctl
    linkageType: ''
    returnType: void
    signature: void PlatformThread::SetName(const char* name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setschedparam
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:83,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:83,1
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:93,1
    - Dst: ThreadNiceValue
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:94,1
    - Dst: setpriority
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:95,1
    - Dst: DVPLOG
      Src: /src/brpc/src/butil/threading/platform_thread_linux.cc:96,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - handle
    - priority
    argTypes:
    - PlatformThreadHandle
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 100
    functionName: butil::PlatformThread::SetThreadPriority
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached:
    - DCHECK_NE
    - setpriority
    - ThreadNiceValue
    - DVPLOG
    - pthread_setschedparam
    - pthread_self
    linkageType: ''
    returnType: void
    signature: "void PlatformThread::SetThreadPriority(PlatformThreadHandle handle,\n
      \                                      ThreadPriority priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::InitThreading
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitThreading()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: butil::InitOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: butil::TerminateOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TerminateOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - ' attributes'
    argTypes:
    - pthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 117
    functionName: butil::GetDefaultThreadStackSize
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_linux.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetDefaultThreadStackSize(const pthread_attr_t& attributes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.h:47,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 63
    functionName: butil::ThreadIdNameManager
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.h
    functionUses: 1
    functionsReached:
    - butil::ThreadIdNameManager
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadIdNameManager
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.h:47,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.h:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 63
    functionName: butil::ThreadIdNameManager
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.h
    functionUses: 2
    functionsReached:
    - butil::ThreadIdNameManager
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadIdNameManager
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:13,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 12
    functionDepth: 1
    functionLinenumber: 12
    functionLinenumberEnd: 14
    functionName: butil::DCheckAsserter::warn
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: void
    signature: void DCheckAsserter::warn()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:17,1
    - Dst: static_cast<subtle::Atomic32>
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 16
    functionDepth: 1
    functionLinenumber: 16
    functionLinenumberEnd: 25
    functionName: butil::CurrentThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - static_cast<subtle::Atomic32>
    linkageType: ''
    returnType: subtle::Atomic32
    signature: subtle::Atomic32 CurrentThread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CurrentThread
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:31,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:33,1
    - Dst: warn
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:39,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 43
    functionName: butil::ThreadCollisionWarner::EnterSelf
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - warn
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::subtle::NoBarrier_AtomicIncrement
    - CurrentThread
    linkageType: ''
    returnType: void
    signature: void ThreadCollisionWarner::EnterSelf()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CurrentThread
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:46,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:48,1
    - Dst: warn
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:52,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: butil::ThreadCollisionWarner::Enter
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - warn
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::subtle::NoBarrier_AtomicIncrement
    - CurrentThread
    linkageType: ''
    returnType: void
    signature: void ThreadCollisionWarner::Enter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:59,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 62
    functionName: butil::ThreadCollisionWarner::Leave
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void ThreadCollisionWarner::Leave()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:13,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 12
    functionDepth: 1
    functionLinenumber: 12
    functionLinenumberEnd: 14
    functionName: butil::DCheckAsserter::warn
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: void
    signature: void DCheckAsserter::warn()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:17,1
    - Dst: static_cast<subtle::Atomic32>
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 16
    functionDepth: 1
    functionLinenumber: 16
    functionLinenumberEnd: 25
    functionName: butil::CurrentThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - static_cast<subtle::Atomic32>
    linkageType: ''
    returnType: subtle::Atomic32
    signature: subtle::Atomic32 CurrentThread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CurrentThread
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:31,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:33,1
    - Dst: warn
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:39,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 43
    functionName: butil::ThreadCollisionWarner::EnterSelf
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - warn
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::subtle::NoBarrier_AtomicIncrement
    - CurrentThread
    linkageType: ''
    returnType: void
    signature: void ThreadCollisionWarner::EnterSelf()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CurrentThread
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:46,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:48,1
    - Dst: warn
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:52,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 56
    functionName: butil::ThreadCollisionWarner::Enter
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - warn
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::subtle::NoBarrier_AtomicIncrement
    - CurrentThread
    linkageType: ''
    returnType: void
    signature: void ThreadCollisionWarner::Enter()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::Barrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:59,1
    - Dst: butil::subtle::NoBarrier_Store
      Src: /src/brpc/src/butil/threading/thread_collision_warner.cc:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 62
    functionName: butil::ThreadCollisionWarner::Leave
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.cc
    functionUses: 0
    functionsReached:
    - butil::subtle::Barrier_AtomicIncrement
    - butil::subtle::NoBarrier_Store
    linkageType: ''
    returnType: void
    signature: void ThreadCollisionWarner::Leave()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:30,1
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - allowed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: butil::ThreadRestrictions::SetIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: bool
    signature: bool ThreadRestrictions::SetIOAllowed(bool allowed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:37,1
    - Dst: LOG
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: butil::ThreadRestrictions::AssertIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 76
    functionsReached:
    - LOG
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::AssertIOAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:49,1
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - allowed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: butil::ThreadRestrictions::SetSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: bool
    signature: bool ThreadRestrictions::SetSingletonAllowed(bool allowed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:56,1
    - Dst: LOG
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: butil::ThreadRestrictions::AssertSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 2
    functionsReached:
    - LOG
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::AssertSingletonAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: butil::ThreadRestrictions::DisallowWaiting
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::DisallowWaiting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:71,1
    - Dst: LOG
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 75
    functionName: butil::ThreadRestrictions::AssertWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - LOG
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::AssertWaitAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:78,1
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - allowed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: butil::ThreadRestrictions::SetWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: bool
    signature: bool ThreadRestrictions::SetWaitAllowed(bool allowed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:30,1
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:31,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - allowed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 33
    functionName: butil::ThreadRestrictions::SetIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: bool
    signature: bool ThreadRestrictions::SetIOAllowed(bool allowed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:37,1
    - Dst: LOG
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 45
    functionName: butil::ThreadRestrictions::AssertIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 76
    functionsReached:
    - LOG
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::AssertIOAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:49,1
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - allowed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 52
    functionName: butil::ThreadRestrictions::SetSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: bool
    signature: bool ThreadRestrictions::SetSingletonAllowed(bool allowed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:56,1
    - Dst: LOG
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 62
    functionName: butil::ThreadRestrictions::AssertSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 2
    functionsReached:
    - LOG
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::AssertSingletonAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:66,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: butil::ThreadRestrictions::DisallowWaiting
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::DisallowWaiting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:71,1
    - Dst: LOG
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 70
    functionDepth: 1
    functionLinenumber: 70
    functionLinenumberEnd: 75
    functionName: butil::ThreadRestrictions::AssertWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - LOG
    - Get
    linkageType: ''
    returnType: void
    signature: void ThreadRestrictions::AssertWaitAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:78,1
    - Dst: Get
      Src: /src/brpc/src/butil/threading/thread_restrictions.cc:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - allowed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    functionName: butil::ThreadRestrictions::SetWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.cc
    functionUses: 0
    functionsReached:
    - Get
    linkageType: ''
    returnType: bool
    signature: bool ThreadRestrictions::SetWaitAllowed(bool allowed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeImpl
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.h:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 35
    functionName: butil::NonThreadSafeImpl
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.h
    functionUses: 1
    functionsReached:
    - butil::NonThreadSafeImpl
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT NonThreadSafeImpl
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeImpl
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.h:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 35
    functionName: butil::NonThreadSafeImpl
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.h
    functionUses: 2
    functionsReached:
    - butil::NonThreadSafeImpl
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT NonThreadSafeImpl
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:48,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:48,1
    - Dst: tracked_objects::ThreadData::InitializeThreadContext
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:49,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:56,1
    - Dst: getpid
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:56,1
    - Dst: setproctitle
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 60
    functionName: butil::PlatformThread::SetName
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 22
    functionsReached:
    - setproctitle
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager::GetInstance
    - getpid
    - tracked_objects::ThreadData::InitializeThreadContext
    linkageType: ''
    returnType: void
    signature: void PlatformThread::SetName(const char* name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setschedparam
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:68,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:68,1
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:78,1
    - Dst: ThreadNiceValue
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:79,1
    - Dst: setpriority
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:80,1
    - Dst: DVPLOG
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:81,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - handle
    - priority
    argTypes:
    - PlatformThreadHandle
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 85
    functionName: butil::PlatformThread::SetThreadPriority
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached:
    - DCHECK_NE
    - setpriority
    - ThreadNiceValue
    - DVPLOG
    - pthread_setschedparam
    - pthread_self
    linkageType: ''
    returnType: void
    signature: "void PlatformThread::SetThreadPriority(PlatformThreadHandle handle,\n
      \                                      ThreadPriority priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: butil::InitThreading
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitThreading()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: butil::InitOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: butil::TerminateOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TerminateOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' attributes'
    argTypes:
    - pthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 101
    functionName: butil::GetDefaultThreadStackSize
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetDefaultThreadStackSize(const pthread_attr_t& attributes)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:40,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 43
    functionName: butil::ThreadNiceValue
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached:
    - NOTREACHED
    linkageType: ''
    returnType: int
    signature: int ThreadNiceValue(ThreadPriority priority)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:48,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:48,1
    - Dst: tracked_objects::ThreadData::InitializeThreadContext
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:49,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:56,1
    - Dst: getpid
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:56,1
    - Dst: setproctitle
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 60
    functionName: butil::PlatformThread::SetName
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 22
    functionsReached:
    - setproctitle
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager::GetInstance
    - getpid
    - tracked_objects::ThreadData::InitializeThreadContext
    linkageType: ''
    returnType: void
    signature: void PlatformThread::SetName(const char* name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setschedparam
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:68,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:68,1
    - Dst: DCHECK_NE
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:78,1
    - Dst: ThreadNiceValue
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:79,1
    - Dst: setpriority
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:80,1
    - Dst: DVPLOG
      Src: /src/brpc/src/butil/threading/platform_thread_freebsd.cc:81,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - handle
    - priority
    argTypes:
    - PlatformThreadHandle
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 85
    functionName: butil::PlatformThread::SetThreadPriority
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached:
    - DCHECK_NE
    - setpriority
    - ThreadNiceValue
    - DVPLOG
    - pthread_setschedparam
    - pthread_self
    linkageType: ''
    returnType: void
    signature: "void PlatformThread::SetThreadPriority(PlatformThreadHandle handle,\n
      \                                      ThreadPriority priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: butil::InitThreading
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitThreading()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: butil::InitOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void InitOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: butil::TerminateOnThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TerminateOnThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' attributes'
    argTypes:
    - pthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 101
    functionName: butil::GetDefaultThreadStackSize
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_freebsd.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetDefaultThreadStackSize(const pthread_attr_t& attributes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerImpl::EnsureThreadIdAssigned
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:11,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 9
    functionDepth: 1
    functionLinenumber: 9
    functionLinenumberEnd: 12
    functionName: butil::ThreadCheckerImpl::ThreadCheckerImpl
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerImpl::EnsureThreadIdAssigned
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::ThreadCheckerImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 14
    functionName: ThreadCheckerImpl::~ThreadCheckerImpl()
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::~ThreadCheckerImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerImpl::EnsureThreadIdAssigned
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:17,1
    - Dst: butil::PlatformThread::CurrentRef
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 16
    functionDepth: 1
    functionLinenumber: 16
    functionLinenumberEnd: 20
    functionName: butil::ThreadCheckerImpl::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentRef
    - butil::ThreadCheckerImpl::EnsureThreadIdAssigned
    linkageType: ''
    returnType: bool
    signature: bool ThreadCheckerImpl::CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadRef
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 25
    functionName: butil::ThreadCheckerImpl::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached:
    - PlatformThreadRef
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::DetachFromThread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:29,1
    - Dst: butil::PlatformThread::CurrentRef
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:30,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: butil::ThreadCheckerImpl::EnsureThreadIdAssigned
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 2
    functionsReached:
    - butil::PlatformThread::CurrentRef
    - is_null
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::EnsureThreadIdAssigned() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerImpl::EnsureThreadIdAssigned
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:11,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 12
      start: 9
    functionDepth: 2
    functionLinenumber: 9
    functionLinenumberEnd: 12
    functionName: butil::ThreadCheckerImpl::ThreadCheckerImpl
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached:
    - butil::ThreadCheckerImpl::EnsureThreadIdAssigned
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::ThreadCheckerImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 14
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 14
    functionName: ThreadCheckerImpl::~ThreadCheckerImpl()
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::~ThreadCheckerImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerImpl::EnsureThreadIdAssigned
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:17,1
    - Dst: butil::PlatformThread::CurrentRef
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 16
    functionDepth: 2
    functionLinenumber: 16
    functionLinenumberEnd: 20
    functionName: butil::ThreadCheckerImpl::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentRef
    - butil::ThreadCheckerImpl::EnsureThreadIdAssigned
    linkageType: ''
    returnType: bool
    signature: bool ThreadCheckerImpl::CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadRef
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 25
    functionName: butil::ThreadCheckerImpl::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 0
    functionsReached:
    - PlatformThreadRef
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::DetachFromThread()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_null
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:29,1
    - Dst: butil::PlatformThread::CurrentRef
      Src: /src/brpc/src/butil/threading/thread_checker_impl.cc:30,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 32
    functionName: butil::ThreadCheckerImpl::EnsureThreadIdAssigned
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.cc
    functionUses: 4
    functionsReached:
    - butil::PlatformThread::CurrentRef
    - is_null
    linkageType: ''
    returnType: void
    signature: void ThreadCheckerImpl::EnsureThreadIdAssigned() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 29
    functionName: butil::ThreadIdNameManager::ThreadIdNameManager
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - std::string::string
    linkageType: ''
    returnType: void
    signature: void ThreadIdNameManager::ThreadIdNameManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: ThreadIdNameManager::~ThreadIdNameManager()
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadIdNameManager::~ThreadIdNameManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::ThreadIdNameManager::GetInstance
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 8
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: ThreadIdNameManager
    signature: ThreadIdNameManager * ThreadIdNameManager::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: butil::ThreadIdNameManager::GetDefaultInternedString
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - c_str
    linkageType: ''
    returnType: char
    signature: char * ThreadIdNameManager::GetDefaultInternedString()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - handle
    - id
    argTypes:
    - PlatformThreadHandle::Handle
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: butil::ThreadIdNameManager::RegisterThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ThreadIdNameManager::RegisterThread(PlatformThreadHandle::Handle
      handle,\n                                         PlatformThreadId id)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:55,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:57,1
    - Dst: std::string::string
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:60,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:65,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:69,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - id
    - name
    argTypes:
    - PlatformThreadId
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 75
    functionName: butil::ThreadIdNameManager::SetName
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - find
    - std::string::string
    - end
    linkageType: ''
    returnType: void
    signature: void ThreadIdNameManager::SetName(PlatformThreadId id, const char*
      name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:81,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:84,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:85,1
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:86,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:89,1
    - Dst: ThreadHandleToInternedNameMap::iterator::second::c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - id
    argTypes:
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 91
    functionName: butil::ThreadIdNameManager::GetName
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - ThreadHandleToInternedNameMap::iterator::second::c_str
    - find
    - c_str
    - end
    linkageType: ''
    returnType: char
    signature: char * ThreadIdNameManager::GetName(PlatformThreadId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:97,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:99,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:99,1
    - Dst: erase
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:100,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:103,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:104,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:104,1
    - Dst: erase
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - handle
    - id
    argTypes:
    - PlatformThreadHandle::Handle
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 111
    functionName: butil::ThreadIdNameManager::RemoveName
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - find
    - erase
    - end
    - DCHECK
    linkageType: ''
    returnType: void
    signature: "void ThreadIdNameManager::RemoveName(PlatformThreadHandle::Handle
      handle,\n                                     PlatformThreadId id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::string
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 29
    functionName: butil::ThreadIdNameManager::ThreadIdNameManager
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - std::string::string
    linkageType: ''
    returnType: void
    signature: void ThreadIdNameManager::ThreadIdNameManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: ThreadIdNameManager::~ThreadIdNameManager()
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadIdNameManager::~ThreadIdNameManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::ThreadIdNameManager::GetInstance
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 8
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: ThreadIdNameManager
    signature: ThreadIdNameManager * ThreadIdNameManager::GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:40,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 41
    functionName: butil::ThreadIdNameManager::GetDefaultInternedString
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - c_str
    linkageType: ''
    returnType: char
    signature: char * ThreadIdNameManager::GetDefaultInternedString()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - handle
    - id
    argTypes:
    - PlatformThreadHandle::Handle
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: butil::ThreadIdNameManager::RegisterThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ThreadIdNameManager::RegisterThread(PlatformThreadHandle::Handle
      handle,\n                                         PlatformThreadId id)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:55,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:57,1
    - Dst: std::string::string
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:60,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:65,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:69,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - id
    - name
    argTypes:
    - PlatformThreadId
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 75
    functionName: butil::ThreadIdNameManager::SetName
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - find
    - std::string::string
    - end
    linkageType: ''
    returnType: void
    signature: void ThreadIdNameManager::SetName(PlatformThreadId id, const char*
      name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:81,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:84,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:85,1
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:86,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:89,1
    - Dst: ThreadHandleToInternedNameMap::iterator::second::c_str
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - id
    argTypes:
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 91
    functionName: butil::ThreadIdNameManager::GetName
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - ThreadHandleToInternedNameMap::iterator::second::c_str
    - find
    - c_str
    - end
    linkageType: ''
    returnType: char
    signature: char * ThreadIdNameManager::GetName(PlatformThreadId id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:97,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:99,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:99,1
    - Dst: erase
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:100,1
    - Dst: find
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:103,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:104,1
    - Dst: end
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:104,1
    - Dst: erase
      Src: /src/brpc/src/butil/threading/thread_id_name_manager.cc:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - handle
    - id
    argTypes:
    - PlatformThreadHandle::Handle
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 111
    functionName: butil::ThreadIdNameManager::RemoveName
    functionSourceFile: /src/brpc/src/butil/threading/thread_id_name_manager.cc
    functionUses: 0
    functionsReached:
    - find
    - erase
    - end
    - DCHECK
    linkageType: ''
    returnType: void
    signature: "void ThreadIdNameManager::RemoveName(PlatformThreadHandle::Handle
      handle,\n                                     PlatformThreadId id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/src/butil/threading/watchdog.cc:51,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/watchdog.cc:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' duration'
    - ' thread_watched_name'
    - enabled
    argTypes:
    - TimeDelta
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 55
    functionName: butil::Watchdog::Watchdog
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Create
    - DCHECK
    linkageType: ''
    returnType: void
    signature: "void Watchdog::Watchdog(const TimeDelta& duration,\n                   const
      std::string& thread_watched_name,\n                   bool enabled)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IsJoinable
      Src: /src/brpc/src/butil/threading/watchdog.cc:61,1
    - Dst: Cleanup
      Src: /src/brpc/src/butil/threading/watchdog.cc:62,1
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/watchdog.cc:63,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/src/butil/threading/watchdog.cc:64,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 65
    functionName: Watchdog::~Watchdog()
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - Cleanup
    - butil::PlatformThread::Join
    - IsJoinable
    - Signal
    linkageType: ''
    returnType: void
    signature: void Watchdog::~Watchdog()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/watchdog.cc:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 75
    functionName: butil::Watchdog::Cleanup
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - Signal
    linkageType: ''
    returnType: void
    signature: void Watchdog::Cleanup()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 82
    functionName: butil::Watchdog::IsJoinable
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Watchdog::IsJoinable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ArmAtStartTime
      Src: /src/brpc/src/butil/threading/watchdog.cc:85,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::Watchdog::Arm
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - butil::TimeTicks::Now
    - butil::Watchdog::ArmAtStartTime
    linkageType: ''
    returnType: void
    signature: void Watchdog::Arm()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ArmAtStartTime
      Src: /src/brpc/src/butil/threading/watchdog.cc:89,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' time_delta'
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::Watchdog::ArmSomeTimeDeltaAgo
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - butil::TimeTicks::Now
    - butil::Watchdog::ArmAtStartTime
    linkageType: ''
    returnType: void
    signature: void Watchdog::ArmSomeTimeDeltaAgo(const TimeDelta& time_delta)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/watchdog.cc:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - start_time
    argTypes:
    - TimeTicks
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 102
    functionName: butil::Watchdog::ArmAtStartTime
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 2
    functionsReached:
    - Signal
    linkageType: ''
    returnType: void
    signature: void Watchdog::ArmAtStartTime(const TimeTicks start_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 110
    functionName: butil::Watchdog::Disarm
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Watchdog::Disarm()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DVLOG
      Src: /src/brpc/src/butil/threading/watchdog.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: butil::Watchdog::Alarm
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 4
    functionsReached:
    - DVLOG
    linkageType: ''
    returnType: void
    signature: void Watchdog::Alarm()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SetThreadName
      Src: /src/brpc/src/butil/threading/watchdog.cc:120,1
    - Dst: Pointer
      Src: /src/brpc/src/butil/threading/watchdog.cc:122,1
    - Dst: condition_variable_::Wait
      Src: /src/brpc/src/butil/threading/watchdog.cc:126,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/watchdog.cc:131,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:133,1
    - Dst: TimeDelta::InMilliseconds
      Src: /src/brpc/src/butil/threading/watchdog.cc:134,1
    - Dst: condition_variable_::TimedWait
      Src: /src/brpc/src/butil/threading/watchdog.cc:136,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:154,1
    - Dst: Alarm
      Src: /src/brpc/src/butil/threading/watchdog.cc:157,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:159,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/src/butil/threading/watchdog.cc:160,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 168
    functionName: Watchdog::ThreadDelegate::ThreadMain()
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - TimeDelta::InMilliseconds
    - Alarm
    - SetThreadName
    - condition_variable_::Wait
    - butil::TimeDelta::FromMilliseconds
    - DCHECK
    - Pointer
    - condition_variable_::TimedWait
    - butil::TimeTicks::Now
    linkageType: ''
    returnType: void
    signature: void Watchdog::ThreadDelegate::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/butil/threading/watchdog.cc:172,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/threading/watchdog.cc:172,1
    - Dst: DVLOG
      Src: /src/brpc/src/butil/threading/watchdog.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 174
    functionName: Watchdog::ThreadDelegate::SetThreadName() const
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - DVLOG
    - butil::PlatformThread::SetName
    - std::string::c_str
    linkageType: ''
    returnType: void
    signature: void Watchdog::ThreadDelegate::SetThreadName() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/threading/watchdog.cc:178,1
    - Dst: TimeTicks
      Src: /src/brpc/src/butil/threading/watchdog.cc:180,1
    - Dst: TimeDelta
      Src: /src/brpc/src/butil/threading/watchdog.cc:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: butil::Watchdog::ResetStaticData
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 4
    functionsReached:
    - TimeDelta
    - TimeTicks
    - Pointer
    linkageType: ''
    returnType: void
    signature: void Watchdog::ResetStaticData()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/src/butil/threading/watchdog.cc:51,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/watchdog.cc:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' duration'
    - ' thread_watched_name'
    - enabled
    argTypes:
    - TimeDelta
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 39
    functionDepth: 1
    functionLinenumber: 39
    functionLinenumberEnd: 55
    functionName: butil::Watchdog::Watchdog
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Create
    - DCHECK
    linkageType: ''
    returnType: void
    signature: "void Watchdog::Watchdog(const TimeDelta& duration,\n                   const
      std::string& thread_watched_name,\n                   bool enabled)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IsJoinable
      Src: /src/brpc/src/butil/threading/watchdog.cc:61,1
    - Dst: Cleanup
      Src: /src/brpc/src/butil/threading/watchdog.cc:62,1
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/watchdog.cc:63,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/src/butil/threading/watchdog.cc:64,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 65
    functionName: Watchdog::~Watchdog()
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - Cleanup
    - butil::PlatformThread::Join
    - IsJoinable
    - Signal
    linkageType: ''
    returnType: void
    signature: void Watchdog::~Watchdog()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/watchdog.cc:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 75
    functionName: butil::Watchdog::Cleanup
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - Signal
    linkageType: ''
    returnType: void
    signature: void Watchdog::Cleanup()
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 82
    functionName: butil::Watchdog::IsJoinable
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool Watchdog::IsJoinable()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ArmAtStartTime
      Src: /src/brpc/src/butil/threading/watchdog.cc:85,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::Watchdog::Arm
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - butil::TimeTicks::Now
    - butil::Watchdog::ArmAtStartTime
    linkageType: ''
    returnType: void
    signature: void Watchdog::Arm()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog::ArmAtStartTime
      Src: /src/brpc/src/butil/threading/watchdog.cc:89,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' time_delta'
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::Watchdog::ArmSomeTimeDeltaAgo
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - butil::TimeTicks::Now
    - butil::Watchdog::ArmAtStartTime
    linkageType: ''
    returnType: void
    signature: void Watchdog::ArmSomeTimeDeltaAgo(const TimeDelta& time_delta)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/watchdog.cc:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - start_time
    argTypes:
    - TimeTicks
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 102
    functionName: butil::Watchdog::ArmAtStartTime
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 4
    functionsReached:
    - Signal
    linkageType: ''
    returnType: void
    signature: void Watchdog::ArmAtStartTime(const TimeTicks start_time)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 110
    functionName: butil::Watchdog::Disarm
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Watchdog::Disarm()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DVLOG
      Src: /src/brpc/src/butil/threading/watchdog.cc:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: butil::Watchdog::Alarm
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 4
    functionsReached:
    - DVLOG
    linkageType: ''
    returnType: void
    signature: void Watchdog::Alarm()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SetThreadName
      Src: /src/brpc/src/butil/threading/watchdog.cc:120,1
    - Dst: Pointer
      Src: /src/brpc/src/butil/threading/watchdog.cc:122,1
    - Dst: condition_variable_::Wait
      Src: /src/brpc/src/butil/threading/watchdog.cc:126,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/watchdog.cc:131,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:133,1
    - Dst: TimeDelta::InMilliseconds
      Src: /src/brpc/src/butil/threading/watchdog.cc:134,1
    - Dst: condition_variable_::TimedWait
      Src: /src/brpc/src/butil/threading/watchdog.cc:136,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:154,1
    - Dst: Alarm
      Src: /src/brpc/src/butil/threading/watchdog.cc:157,1
    - Dst: butil::TimeTicks::Now
      Src: /src/brpc/src/butil/threading/watchdog.cc:159,1
    - Dst: butil::TimeDelta::FromMilliseconds
      Src: /src/brpc/src/butil/threading/watchdog.cc:160,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 168
    functionName: Watchdog::ThreadDelegate::ThreadMain()
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - TimeDelta::InMilliseconds
    - Alarm
    - SetThreadName
    - condition_variable_::Wait
    - butil::TimeDelta::FromMilliseconds
    - DCHECK
    - Pointer
    - condition_variable_::TimedWait
    - butil::TimeTicks::Now
    linkageType: ''
    returnType: void
    signature: void Watchdog::ThreadDelegate::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/butil/threading/watchdog.cc:172,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/threading/watchdog.cc:172,1
    - Dst: DVLOG
      Src: /src/brpc/src/butil/threading/watchdog.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 174
    functionName: Watchdog::ThreadDelegate::SetThreadName() const
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 0
    functionsReached:
    - DVLOG
    - butil::PlatformThread::SetName
    - std::string::c_str
    linkageType: ''
    returnType: void
    signature: void Watchdog::ThreadDelegate::SetThreadName() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Pointer
      Src: /src/brpc/src/butil/threading/watchdog.cc:178,1
    - Dst: TimeTicks
      Src: /src/brpc/src/butil/threading/watchdog.cc:180,1
    - Dst: TimeDelta
      Src: /src/brpc/src/butil/threading/watchdog.cc:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: butil::Watchdog::ResetStaticData
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.cc
    functionUses: 4
    functionsReached:
    - TimeDelta
    - TimeTicks
    - Pointer
    linkageType: ''
    returnType: void
    signature: void Watchdog::ResetStaticData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' name_prefix'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 17
    functionName: butil::SimpleThread::SimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SimpleThread::SimpleThread(const std::string& name_prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name_prefix'
    - ' options'
    argTypes:
    - std::string
    - Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 23
    functionName: butil::SimpleThread::SimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SimpleThread::SimpleThread(const std::string& name_prefix,\n
      \                          const Options& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:26,1
    - Dst: HasBeenStarted
      Src: /src/brpc/src/butil/threading/simple_thread.cc:26,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:27,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/threading/simple_thread.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: SimpleThread::~SimpleThread()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    - HasBeenStarted
    - HasBeenJoined
    linkageType: ''
    returnType: void
    signature: void SimpleThread::~SimpleThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:31,1
    - Dst: butil::SimpleThread::HasBeenStarted
      Src: /src/brpc/src/butil/threading/simple_thread.cc:31,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/src/butil/threading/simple_thread.cc:32,1
    - Dst: stack_size
      Src: /src/brpc/src/butil/threading/simple_thread.cc:32,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:33,1
    - Dst: Wait
      Src: /src/brpc/src/butil/threading/simple_thread.cc:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 36
    functionName: butil::SimpleThread::Start
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - stack_size
    - DCHECK
    - butil::PlatformThread::Create
    - Wait
    - butil::SimpleThread::HasBeenStarted
    linkageType: ''
    returnType: void
    signature: void SimpleThread::Start()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:39,1
    - Dst: butil::SimpleThread::HasBeenStarted
      Src: /src/brpc/src/butil/threading/simple_thread.cc:39,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:40,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/threading/simple_thread.cc:40,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/src/butil/threading/simple_thread.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 43
    functionName: butil::SimpleThread::Join
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Join
    - butil::SimpleThread::HasBeenStarted
    - DCHECK
    - HasBeenJoined
    linkageType: ''
    returnType: void
    signature: void SimpleThread::Join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: butil::SimpleThread::HasBeenStarted
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 2
    functionsReached:
    - IsSignaled
    linkageType: ''
    returnType: bool
    signature: bool SimpleThread::HasBeenStarted()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/simple_thread.cc:51,1
    - Dst: push_back
      Src: /src/brpc/src/butil/threading/simple_thread.cc:53,1
    - Dst: append
      Src: /src/brpc/src/butil/threading/simple_thread.cc:54,1
    - Dst: IntToString
      Src: /src/brpc/src/butil/threading/simple_thread.cc:54,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/butil/threading/simple_thread.cc:55,1
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/simple_thread.cc:55,1
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/simple_thread.cc:58,1
    - Dst: Run
      Src: /src/brpc/src/butil/threading/simple_thread.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 61
    functionName: butil::SimpleThread::ThreadMain
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - append
    - IntToString
    - butil::PlatformThread::CurrentId
    - Run
    - Signal
    - push_back
    - c_str
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void SimpleThread::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - delegate
    - ' name_prefix'
    argTypes:
    - Delegate*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 67
    functionName: butil::DelegateSimpleThread::DelegateSimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DelegateSimpleThread::DelegateSimpleThread(Delegate* delegate,\n
      \                                          const std::string& name_prefix)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - delegate
    - ' name_prefix'
    - ' options'
    argTypes:
    - Delegate*
    - std::string
    - Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 74
    functionName: butil::DelegateSimpleThread::DelegateSimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DelegateSimpleThread::DelegateSimpleThread(Delegate* delegate,\n
      \                                          const std::string& name_prefix,\n
      \                                          const Options& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: DelegateSimpleThread::~DelegateSimpleThread()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThread::~DelegateSimpleThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:80,1
    - Dst: butil::DelegateSimpleThread::Run
      Src: /src/brpc/src/butil/threading/simple_thread.cc:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: butil::DelegateSimpleThread::Run
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 1
    functionsReached:
    - butil::DelegateSimpleThread::Run
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThread::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name_prefix'
    - num_threads
    argTypes:
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 91
    functionName: butil::DelegateSimpleThreadPool::DelegateSimpleThreadPool
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DelegateSimpleThreadPool::DelegateSimpleThreadPool(\n    const
      std::string& name_prefix,\n    int num_threads)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:94,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:94,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:95,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:95,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:96,1
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 97
    functionName: DelegateSimpleThreadPool::~DelegateSimpleThreadPool()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - IsSignaled
    - empty
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::~DelegateSimpleThreadPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:100,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:100,1
    - Dst: DelegateSimpleThread::DelegateSimpleThread
      Src: /src/brpc/src/butil/threading/simple_thread.cc:102,1
    - Dst: DelegateSimpleThread*::Start
      Src: /src/brpc/src/butil/threading/simple_thread.cc:103,1
    - Dst: push_back
      Src: /src/brpc/src/butil/threading/simple_thread.cc:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 106
    functionName: butil::DelegateSimpleThreadPool::Start
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 3
    functionsReached:
    - DelegateSimpleThread::DelegateSimpleThread
    - DelegateSimpleThread*::Start
    - DCHECK
    - push_back
    - empty
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::Start()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:109,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:109,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/src/butil/threading/simple_thread.cc:112,1
    - Dst: Join
      Src: /src/brpc/src/butil/threading/simple_thread.cc:116,1
    - Dst: clear
      Src: /src/brpc/src/butil/threading/simple_thread.cc:119,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:120,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 121
    functionName: butil::DelegateSimpleThreadPool::JoinAll
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 3
    functionsReached:
    - Join
    - DCHECK
    - empty
    - clear
    - butil::DelegateSimpleThreadPool::AddWork
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::JoinAll()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/src/butil/threading/simple_thread.cc:126,1
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:128,1
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/simple_thread.cc:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - delegate
    - repeat_count
    argTypes:
    - Delegate*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 130
    functionName: butil::DelegateSimpleThreadPool::AddWork
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 4
    functionsReached:
    - IsSignaled
    - Signal
    - push
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::AddWork(Delegate* delegate, int repeat_count)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Wait
      Src: /src/brpc/src/butil/threading/simple_thread.cc:136,1
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:139,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:142,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:142,1
    - Dst: front
      Src: /src/brpc/src/butil/threading/simple_thread.cc:143,1
    - Dst: pop
      Src: /src/brpc/src/butil/threading/simple_thread.cc:144,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:147,1
    - Dst: Reset
      Src: /src/brpc/src/butil/threading/simple_thread.cc:148,1
    - Dst: Delegate*::Run
      Src: /src/brpc/src/butil/threading/simple_thread.cc:155,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 157
    functionName: butil::DelegateSimpleThreadPool::Run
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - Reset
    - DCHECK
    - pop
    - empty
    - Delegate*::Run
    - Wait
    - front
    - IsSignaled
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' name_prefix'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 14
    functionDepth: 0
    functionLinenumber: 14
    functionLinenumberEnd: 17
    functionName: butil::SimpleThread::SimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SimpleThread::SimpleThread(const std::string& name_prefix)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name_prefix'
    - ' options'
    argTypes:
    - std::string
    - Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 23
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 23
    functionName: butil::SimpleThread::SimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SimpleThread::SimpleThread(const std::string& name_prefix,\n
      \                          const Options& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:26,1
    - Dst: HasBeenStarted
      Src: /src/brpc/src/butil/threading/simple_thread.cc:26,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:27,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/threading/simple_thread.cc:27,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 28
    functionName: SimpleThread::~SimpleThread()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    - HasBeenStarted
    - HasBeenJoined
    linkageType: ''
    returnType: void
    signature: void SimpleThread::~SimpleThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:31,1
    - Dst: butil::SimpleThread::HasBeenStarted
      Src: /src/brpc/src/butil/threading/simple_thread.cc:31,1
    - Dst: butil::PlatformThread::Create
      Src: /src/brpc/src/butil/threading/simple_thread.cc:32,1
    - Dst: stack_size
      Src: /src/brpc/src/butil/threading/simple_thread.cc:32,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:33,1
    - Dst: Wait
      Src: /src/brpc/src/butil/threading/simple_thread.cc:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 36
    functionName: butil::SimpleThread::Start
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - stack_size
    - DCHECK
    - butil::PlatformThread::Create
    - Wait
    - butil::SimpleThread::HasBeenStarted
    linkageType: ''
    returnType: void
    signature: void SimpleThread::Start()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:39,1
    - Dst: butil::SimpleThread::HasBeenStarted
      Src: /src/brpc/src/butil/threading/simple_thread.cc:39,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:40,1
    - Dst: HasBeenJoined
      Src: /src/brpc/src/butil/threading/simple_thread.cc:40,1
    - Dst: butil::PlatformThread::Join
      Src: /src/brpc/src/butil/threading/simple_thread.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 43
    functionName: butil::SimpleThread::Join
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::Join
    - butil::SimpleThread::HasBeenStarted
    - DCHECK
    - HasBeenJoined
    linkageType: ''
    returnType: void
    signature: void SimpleThread::Join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 48
    functionName: butil::SimpleThread::HasBeenStarted
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 4
    functionsReached:
    - IsSignaled
    linkageType: ''
    returnType: bool
    signature: bool SimpleThread::HasBeenStarted()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/simple_thread.cc:51,1
    - Dst: push_back
      Src: /src/brpc/src/butil/threading/simple_thread.cc:53,1
    - Dst: append
      Src: /src/brpc/src/butil/threading/simple_thread.cc:54,1
    - Dst: IntToString
      Src: /src/brpc/src/butil/threading/simple_thread.cc:54,1
    - Dst: butil::PlatformThread::SetName
      Src: /src/brpc/src/butil/threading/simple_thread.cc:55,1
    - Dst: c_str
      Src: /src/brpc/src/butil/threading/simple_thread.cc:55,1
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/simple_thread.cc:58,1
    - Dst: Run
      Src: /src/brpc/src/butil/threading/simple_thread.cc:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 61
    functionName: butil::SimpleThread::ThreadMain
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - append
    - IntToString
    - butil::PlatformThread::CurrentId
    - Run
    - Signal
    - push_back
    - c_str
    - butil::PlatformThread::SetName
    linkageType: ''
    returnType: void
    signature: void SimpleThread::ThreadMain()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - delegate
    - ' name_prefix'
    argTypes:
    - Delegate*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 67
    functionName: butil::DelegateSimpleThread::DelegateSimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DelegateSimpleThread::DelegateSimpleThread(Delegate* delegate,\n
      \                                          const std::string& name_prefix)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - delegate
    - ' name_prefix'
    - ' options'
    argTypes:
    - Delegate*
    - std::string
    - Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 74
    functionName: butil::DelegateSimpleThread::DelegateSimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DelegateSimpleThread::DelegateSimpleThread(Delegate* delegate,\n
      \                                          const std::string& name_prefix,\n
      \                                          const Options& options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: DelegateSimpleThread::~DelegateSimpleThread()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThread::~DelegateSimpleThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:80,1
    - Dst: butil::DelegateSimpleThread::Run
      Src: /src/brpc/src/butil/threading/simple_thread.cc:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: butil::DelegateSimpleThread::Run
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 2
    functionsReached:
    - butil::DelegateSimpleThread::Run
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThread::Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' name_prefix'
    - num_threads
    argTypes:
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 91
    functionName: butil::DelegateSimpleThreadPool::DelegateSimpleThreadPool
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void DelegateSimpleThreadPool::DelegateSimpleThreadPool(\n    const
      std::string& name_prefix,\n    int num_threads)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:94,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:94,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:95,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:95,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:96,1
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 97
    functionName: DelegateSimpleThreadPool::~DelegateSimpleThreadPool()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - IsSignaled
    - empty
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::~DelegateSimpleThreadPool()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:100,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:100,1
    - Dst: DelegateSimpleThread::DelegateSimpleThread
      Src: /src/brpc/src/butil/threading/simple_thread.cc:102,1
    - Dst: DelegateSimpleThread*::Start
      Src: /src/brpc/src/butil/threading/simple_thread.cc:103,1
    - Dst: push_back
      Src: /src/brpc/src/butil/threading/simple_thread.cc:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 106
    functionName: butil::DelegateSimpleThreadPool::Start
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 3
    functionsReached:
    - DelegateSimpleThread::DelegateSimpleThread
    - DelegateSimpleThread*::Start
    - DCHECK
    - push_back
    - empty
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::Start()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:109,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:109,1
    - Dst: butil::DelegateSimpleThreadPool::AddWork
      Src: /src/brpc/src/butil/threading/simple_thread.cc:112,1
    - Dst: Join
      Src: /src/brpc/src/butil/threading/simple_thread.cc:116,1
    - Dst: clear
      Src: /src/brpc/src/butil/threading/simple_thread.cc:119,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:120,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 121
    functionName: butil::DelegateSimpleThreadPool::JoinAll
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 3
    functionsReached:
    - Join
    - DCHECK
    - empty
    - clear
    - butil::DelegateSimpleThreadPool::AddWork
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::JoinAll()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push
      Src: /src/brpc/src/butil/threading/simple_thread.cc:126,1
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:128,1
    - Dst: Signal
      Src: /src/brpc/src/butil/threading/simple_thread.cc:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - delegate
    - repeat_count
    argTypes:
    - Delegate*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 130
    functionName: butil::DelegateSimpleThreadPool::AddWork
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 5
    functionsReached:
    - IsSignaled
    - Signal
    - push
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::AddWork(Delegate* delegate, int repeat_count)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Wait
      Src: /src/brpc/src/butil/threading/simple_thread.cc:136,1
    - Dst: IsSignaled
      Src: /src/brpc/src/butil/threading/simple_thread.cc:139,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/simple_thread.cc:142,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:142,1
    - Dst: front
      Src: /src/brpc/src/butil/threading/simple_thread.cc:143,1
    - Dst: pop
      Src: /src/brpc/src/butil/threading/simple_thread.cc:144,1
    - Dst: empty
      Src: /src/brpc/src/butil/threading/simple_thread.cc:147,1
    - Dst: Reset
      Src: /src/brpc/src/butil/threading/simple_thread.cc:148,1
    - Dst: Delegate*::Run
      Src: /src/brpc/src/butil/threading/simple_thread.cc:155,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 157
    functionName: butil::DelegateSimpleThreadPool::Run
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.cc
    functionUses: 0
    functionsReached:
    - Reset
    - DCHECK
    - pop
    - empty
    - Delegate*::Run
    - Wait
    - front
    - IsSignaled
    linkageType: ''
    returnType: void
    signature: void DelegateSimpleThreadPool::Run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:60,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:62,1
    - Dst: butil::internal::PlatformThreadLocalStorage::AllocTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:62,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:71,1
    - Dst: butil::internal::PlatformThreadLocalStorage::AllocTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:71,1
    - Dst: butil::internal::PlatformThreadLocalStorage::FreeTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:73,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:79,1
    - Dst: butil::internal::PlatformThreadLocalStorage::FreeTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:84,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:85,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:88,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:88,1
    - Dst: memset
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:99,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:101,1
    - Dst: void::void
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:104,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:105,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:106,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 108
    functionName: ConstructTlsVector
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - void::void
    - butil::internal::PlatformThreadLocalStorage::FreeTLS
    - memset
    - butil::internal::PlatformThreadLocalStorage::AllocTLS
    - CHECK
    - butil::subtle::NoBarrier_Load
    - memcpy
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::internal::PlatformThreadLocalStorage::SetTLSValue
    linkageType: ''
    returnType: void
    signature: void ** ConstructTlsVector()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:111,1
    - Dst: static_cast<void**>
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:112,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:123,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:126,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:127,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:141,1
    - Dst: destructor
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:152,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:159,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:165,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 166
    functionName: OnThreadExitInternal
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    - NOTREACHED
    - butil::subtle::NoBarrier_Load
    - memcpy
    - destructor
    - butil::internal::PlatformThreadLocalStorage::SetTLSValue
    - static_cast<void**>
    linkageType: ''
    returnType: void
    signature: void OnThreadExitInternal(void* value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:60,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:62,1
    - Dst: butil::internal::PlatformThreadLocalStorage::AllocTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:62,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:71,1
    - Dst: butil::internal::PlatformThreadLocalStorage::AllocTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:71,1
    - Dst: butil::internal::PlatformThreadLocalStorage::FreeTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:73,1
    - Dst: butil::subtle::NoBarrier_CompareAndSwap
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:79,1
    - Dst: butil::internal::PlatformThreadLocalStorage::FreeTLS
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:84,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:85,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:88,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:88,1
    - Dst: memset
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:99,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:101,1
    - Dst: void::void
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:104,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:105,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:106,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 108
    functionName: ConstructTlsVector
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - void::void
    - butil::internal::PlatformThreadLocalStorage::FreeTLS
    - memset
    - butil::internal::PlatformThreadLocalStorage::AllocTLS
    - CHECK
    - butil::subtle::NoBarrier_Load
    - memcpy
    - butil::subtle::NoBarrier_CompareAndSwap
    - butil::internal::PlatformThreadLocalStorage::SetTLSValue
    linkageType: ''
    returnType: void
    signature: void ** ConstructTlsVector()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:111,1
    - Dst: static_cast<void**>
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:112,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:123,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:126,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:127,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:141,1
    - Dst: destructor
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:152,1
    - Dst: NOTREACHED
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:159,1
    - Dst: butil::internal::PlatformThreadLocalStorage::SetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:165,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 166
    functionName: OnThreadExitInternal
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - DCHECK
    - NOTREACHED
    - butil::subtle::NoBarrier_Load
    - memcpy
    - destructor
    - butil::internal::PlatformThreadLocalStorage::SetTLSValue
    - static_cast<void**>
    linkageType: ''
    returnType: void
    signature: void OnThreadExitInternal(void* value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:177,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:180,1
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:184,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 185
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - butil::subtle::NoBarrier_Load
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit(void* value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:177,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:180,1
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:184,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 185
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - butil::subtle::NoBarrier_Load
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit(void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Initialize
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - destructor
    argTypes:
    - TLSDestructorFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor)
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - Initialize
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:202,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:204,1
    - Dst: ConstructTlsVector
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:205,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:208,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:209,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - destructor
    argTypes:
    - TLSDestructorFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 200
    functionDepth: 2
    functionLinenumber: 200
    functionLinenumberEnd: 216
    functionName: ThreadLocalStorage::StaticSlot::Initialize(TLSDestructorFunc destructor)
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - butil::subtle::NoBarrier_AtomicIncrement
    - DCHECK_GT
    - butil::subtle::NoBarrier_Load
    - ConstructTlsVector
    - CHECK_LT
    linkageType: ''
    returnType: bool
    signature: bool ThreadLocalStorage::StaticSlot::Initialize(TLSDestructorFunc destructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:221,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 226
    functionName: ThreadLocalStorage::StaticSlot::Free()
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - DCHECK_GT
    - DCHECK_LT
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorage::StaticSlot::Free()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<void**>
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:229,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:230,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:231,1
    - Dst: ConstructTlsVector
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:233,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:234,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:235,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 237
    functionName: '* ThreadLocalStorage::StaticSlot::Get() const'
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - DCHECK_LT
    - DCHECK_GT
    - butil::subtle::NoBarrier_Load
    - ConstructTlsVector
    - static_cast<void**>
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalStorage::StaticSlot::Get() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<void**>
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:240,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:241,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:242,1
    - Dst: ConstructTlsVector
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:244,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:245,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:246,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 239
    functionDepth: 2
    functionLinenumber: 239
    functionLinenumberEnd: 248
    functionName: ThreadLocalStorage::StaticSlot::Set(void* value)
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - DCHECK_LT
    - DCHECK_GT
    - butil::subtle::NoBarrier_Load
    - ConstructTlsVector
    - static_cast<void**>
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorage::StaticSlot::Set(void* value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:177,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:180,1
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:184,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 185
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - butil::subtle::NoBarrier_Load
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit(void* value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:177,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:180,1
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:184,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 185
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 185
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - butil::subtle::NoBarrier_Load
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OnThreadExitInternal
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 189
    functionName: butil::internal::PlatformThreadLocalStorage::OnThreadExit
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - OnThreadExitInternal
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::OnThreadExit(void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Initialize
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:197,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - destructor
    argTypes:
    - TLSDestructorFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 198
    functionName: ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor)
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - Initialize
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:202,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:204,1
    - Dst: ConstructTlsVector
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:205,1
    - Dst: butil::subtle::NoBarrier_AtomicIncrement
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:208,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:209,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - destructor
    argTypes:
    - TLSDestructorFunc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 200
    functionDepth: 2
    functionLinenumber: 200
    functionLinenumberEnd: 216
    functionName: ThreadLocalStorage::StaticSlot::Initialize(TLSDestructorFunc destructor)
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - butil::subtle::NoBarrier_AtomicIncrement
    - DCHECK_GT
    - butil::subtle::NoBarrier_Load
    - ConstructTlsVector
    - CHECK_LT
    linkageType: ''
    returnType: bool
    signature: bool ThreadLocalStorage::StaticSlot::Initialize(TLSDestructorFunc destructor)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:221,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 226
    functionName: ThreadLocalStorage::StaticSlot::Free()
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - DCHECK_GT
    - DCHECK_LT
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorage::StaticSlot::Free()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<void**>
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:229,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:230,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:231,1
    - Dst: ConstructTlsVector
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:233,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:234,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:235,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 237
    functionName: '* ThreadLocalStorage::StaticSlot::Get() const'
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - DCHECK_LT
    - DCHECK_GT
    - butil::subtle::NoBarrier_Load
    - ConstructTlsVector
    - static_cast<void**>
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalStorage::StaticSlot::Get() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<void**>
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:240,1
    - Dst: butil::internal::PlatformThreadLocalStorage::GetTLSValue
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:241,1
    - Dst: butil::subtle::NoBarrier_Load
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:242,1
    - Dst: ConstructTlsVector
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:244,1
    - Dst: DCHECK_GT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:245,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/threading/thread_local_storage.cc:246,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - value
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 239
    functionDepth: 2
    functionLinenumber: 239
    functionLinenumberEnd: 248
    functionName: ThreadLocalStorage::StaticSlot::Set(void* value)
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.cc
    functionUses: 0
    functionsReached:
    - butil::internal::PlatformThreadLocalStorage::GetTLSValue
    - DCHECK_LT
    - DCHECK_GT
    - butil::subtle::NoBarrier_Load
    - ConstructTlsVector
    - static_cast<void**>
    linkageType: ''
    returnType: void
    signature: void ThreadLocalStorage::StaticSlot::Set(void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: butil::ThreadCheckerDoNothing::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::ThreadCheckerDoNothing::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: butil::ThreadCheckerDoNothing::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::ThreadCheckerDoNothing::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog
      Src: /src/brpc/src/butil/threading/watchdog.h:35,1
    - Dst: ConditionVariable::ConditionVariable
      Src: /src/brpc/src/butil/threading/watchdog.h:80,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/watchdog.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 32
    functionDepth: 2
    functionLinenumber: 32
    functionLinenumberEnd: 90
    functionName: butil::Watchdog
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.h
    functionUses: 1
    functionsReached:
    - butil::Watchdog
    - DISALLOW_COPY_AND_ASSIGN
    - ConditionVariable::ConditionVariable
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Watchdog
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - watchdog
    argTypes:
    - Watchdog*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 67
    functionName: butil::ThreadDelegate::ThreadDelegate
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadDelegate(Watchdog* watchdog)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Watchdog
      Src: /src/brpc/src/butil/threading/watchdog.h:35,1
    - Dst: ConditionVariable::ConditionVariable
      Src: /src/brpc/src/butil/threading/watchdog.h:80,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/watchdog.h:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 32
    functionDepth: 2
    functionLinenumber: 32
    functionLinenumberEnd: 90
    functionName: butil::Watchdog
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.h
    functionUses: 2
    functionsReached:
    - butil::Watchdog
    - DISALLOW_COPY_AND_ASSIGN
    - ConditionVariable::ConditionVariable
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Watchdog
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - watchdog
    argTypes:
    - Watchdog*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 67
    functionName: butil::ThreadDelegate::ThreadDelegate
    functionSourceFile: /src/brpc/src/butil/threading/watchdog.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadDelegate(Watchdog* watchdog)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeImpl::CalledOnValidThread
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:12,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 13
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 13
    functionName: butil::NonThreadSafeImpl::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.cc
    functionUses: 1
    functionsReached:
    - butil::NonThreadSafeImpl::CalledOnValidThread
    linkageType: ''
    returnType: bool
    signature: bool NonThreadSafeImpl::CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:16,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:16,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 17
    functionName: NonThreadSafeImpl::~NonThreadSafeImpl()
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeImpl::~NonThreadSafeImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeImpl::DetachFromThread
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: butil::NonThreadSafeImpl::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.cc
    functionUses: 1
    functionsReached:
    - butil::NonThreadSafeImpl::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeImpl::DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeImpl::CalledOnValidThread
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:12,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 13
      start: 11
    functionDepth: 1
    functionLinenumber: 11
    functionLinenumberEnd: 13
    functionName: butil::NonThreadSafeImpl::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.cc
    functionUses: 2
    functionsReached:
    - butil::NonThreadSafeImpl::CalledOnValidThread
    linkageType: ''
    returnType: bool
    signature: bool NonThreadSafeImpl::CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:16,1
    - Dst: CalledOnValidThread
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:16,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 17
      start: 15
    functionDepth: 1
    functionLinenumber: 15
    functionLinenumberEnd: 17
    functionName: NonThreadSafeImpl::~NonThreadSafeImpl()
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.cc
    functionUses: 0
    functionsReached:
    - CalledOnValidThread
    - DCHECK
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeImpl::~NonThreadSafeImpl()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::NonThreadSafeImpl::DetachFromThread
      Src: /src/brpc/src/butil/threading/non_thread_safe_impl.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 19
    functionDepth: 1
    functionLinenumber: 19
    functionLinenumberEnd: 21
    functionName: butil::NonThreadSafeImpl::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe_impl.cc
    functionUses: 2
    functionsReached:
    - butil::NonThreadSafeImpl::DetachFromThread
    linkageType: ''
    returnType: void
    signature: void NonThreadSafeImpl::DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: butil::NonThreadSafeDoNothing::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~NonThreadSafeDoNothing()
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NonThreadSafeDoNothing()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::NonThreadSafeDoNothing::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 33
    functionName: butil::NonThreadSafeDoNothing::CalledOnValidThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CalledOnValidThread() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ~NonThreadSafeDoNothing()
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~NonThreadSafeDoNothing()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: butil::NonThreadSafeDoNothing::DetachFromThread
    functionSourceFile: /src/brpc/src/butil/threading/non_thread_safe.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DetachFromThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Options
      Src: /src/brpc/src/butil/threading/simple_thread.h:62,1
    - Dst: stack_size_
      Src: /src/brpc/src/butil/threading/simple_thread.h:62,1
    - Dst: Options
      Src: /src/brpc/src/butil/threading/simple_thread.h:63,1
    - Dst: set_stack_size
      Src: /src/brpc/src/butil/threading/simple_thread.h:68,1
    - Dst: stack_size
      Src: /src/brpc/src/butil/threading/simple_thread.h:69,1
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/simple_thread.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 121
    functionName: butil::PlatformThread::Delegate
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - Options
    - stack_size_
    - butil::PlatformThread::SetThreadPriority
    - stack_size
    - set_stack_size
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThread::Delegate
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 87
    functionName: butil::Run
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: butil::name_prefix
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string name_prefix()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    functionName: butil::name
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string name()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: butil::tid
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PlatformThreadId
    signature: PlatformThreadId tid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::HasBeenJoined
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HasBeenJoined()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/simple_thread.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: butil::SetThreadPriority
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetThreadPriority
    linkageType: ''
    returnType: void
    signature: void SetThreadPriority(ThreadPriority priority)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delegate
      Src: /src/brpc/src/butil/threading/simple_thread.h:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 130
    functionName: butil::DelegateSimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - Delegate
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT DelegateSimpleThread
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: ~Delegate()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Delegate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Options
      Src: /src/brpc/src/butil/threading/simple_thread.h:62,1
    - Dst: stack_size_
      Src: /src/brpc/src/butil/threading/simple_thread.h:62,1
    - Dst: Options
      Src: /src/brpc/src/butil/threading/simple_thread.h:63,1
    - Dst: set_stack_size
      Src: /src/brpc/src/butil/threading/simple_thread.h:68,1
    - Dst: stack_size
      Src: /src/brpc/src/butil/threading/simple_thread.h:69,1
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/simple_thread.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 121
    functionName: butil::PlatformThread::Delegate
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - Options
    - stack_size_
    - butil::PlatformThread::SetThreadPriority
    - stack_size
    - set_stack_size
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThread::Delegate
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 87
    functionName: butil::Run
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: butil::name_prefix
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string name_prefix()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    functionName: butil::name
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string name()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: butil::tid
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: PlatformThreadId
    signature: PlatformThreadId tid()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: butil::HasBeenJoined
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HasBeenJoined()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/simple_thread.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - priority
    argTypes:
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: butil::SetThreadPriority
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::SetThreadPriority
    linkageType: ''
    returnType: void
    signature: void SetThreadPriority(ThreadPriority priority)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delegate
      Src: /src/brpc/src/butil/threading/simple_thread.h:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 130
    functionName: butil::DelegateSimpleThread
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - Delegate
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT DelegateSimpleThread
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    functionName: ~Delegate()
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Delegate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddWork
      Src: /src/brpc/src/butil/threading/simple_thread.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 186
    functionName: DelegateSimpleThread::Delegate
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 0
    functionsReached:
    - AddWork
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT DelegateSimpleThread::Delegate
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddWork
      Src: /src/brpc/src/butil/threading/simple_thread.h:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - work
    argTypes:
    - Delegate*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: AddWork
    functionSourceFile: /src/brpc/src/butil/threading/simple_thread.h
    functionUses: 9
    functionsReached:
    - AddWork
    linkageType: ''
    returnType: void
    signature: void AddWork(Delegate* work)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:18,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 20
    functionName: butil::internal::ThreadLocalPlatform::AllocateSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_key_create
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::AllocateSlot(SlotType* slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:24,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 26
    functionName: butil::internal::ThreadLocalPlatform::FreeSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::FreeSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: butil::internal::ThreadLocalPlatform::GetValueFromSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPlatform::GetValueFromSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:35,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - value
    argTypes:
    - SlotType
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::internal::ThreadLocalPlatform::SetValueInSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::SetValueInSlot(SlotType slot, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:18,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 20
    functionName: butil::internal::ThreadLocalPlatform::AllocateSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_key_create
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::AllocateSlot(SlotType* slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:24,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 26
    functionName: butil::internal::ThreadLocalPlatform::FreeSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::FreeSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: butil::internal::ThreadLocalPlatform::GetValueFromSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPlatform::GetValueFromSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:35,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - value
    argTypes:
    - SlotType
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::internal::ThreadLocalPlatform::SetValueInSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::SetValueInSlot(SlotType slot, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:18,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 20
    functionName: butil::internal::ThreadLocalPlatform::AllocateSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_key_create
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::AllocateSlot(SlotType* slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:24,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 26
    functionName: butil::internal::ThreadLocalPlatform::FreeSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::FreeSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: butil::internal::ThreadLocalPlatform::GetValueFromSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPlatform::GetValueFromSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:35,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - value
    argTypes:
    - SlotType
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::internal::ThreadLocalPlatform::SetValueInSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::SetValueInSlot(SlotType slot, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:18,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:19,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 20
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 20
    functionName: butil::internal::ThreadLocalPlatform::AllocateSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_key_create
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::AllocateSlot(SlotType* slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:24,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:25,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 26
    functionName: butil::internal::ThreadLocalPlatform::FreeSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::FreeSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:30,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - SlotType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: butil::internal::ThreadLocalPlatform::GetValueFromSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalPlatform::GetValueFromSlot(SlotType slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:35,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_posix.cc:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - value
    argTypes:
    - SlotType
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: butil::internal::ThreadLocalPlatform::SetValueInSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_posix.cc
    functionUses: 0
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPlatform::SetValueInSlot(SlotType slot, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 16
    functionName: butil::internal::PlatformThreadLocalStorage::AllocTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - pthread_key_create
    linkageType: ''
    returnType: bool
    signature: bool PlatformThreadLocalStorage::AllocTLS(TLSKey* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:19,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 21
    functionName: butil::internal::PlatformThreadLocalStorage::FreeTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::FreeTLS(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::internal::PlatformThreadLocalStorage::GetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 12
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * PlatformThreadLocalStorage::GetTLSValue(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:28,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key
    - value
    argTypes:
    - TLSKey
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: butil::internal::PlatformThreadLocalStorage::SetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 4
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 16
    functionName: butil::internal::PlatformThreadLocalStorage::AllocTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - pthread_key_create
    linkageType: ''
    returnType: bool
    signature: bool PlatformThreadLocalStorage::AllocTLS(TLSKey* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:19,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 21
    functionName: butil::internal::PlatformThreadLocalStorage::FreeTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::FreeTLS(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::internal::PlatformThreadLocalStorage::GetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 12
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * PlatformThreadLocalStorage::GetTLSValue(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:28,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key
    - value
    argTypes:
    - TLSKey
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: butil::internal::PlatformThreadLocalStorage::SetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 4
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 16
    functionName: butil::internal::PlatformThreadLocalStorage::AllocTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - pthread_key_create
    linkageType: ''
    returnType: bool
    signature: bool PlatformThreadLocalStorage::AllocTLS(TLSKey* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:19,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 21
    functionName: butil::internal::PlatformThreadLocalStorage::FreeTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::FreeTLS(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::internal::PlatformThreadLocalStorage::GetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 12
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * PlatformThreadLocalStorage::GetTLSValue(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:28,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key
    - value
    argTypes:
    - TLSKey
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: butil::internal::PlatformThreadLocalStorage::SetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 4
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_create
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:14,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 16
      start: 13
    functionDepth: 0
    functionLinenumber: 13
    functionLinenumberEnd: 16
    functionName: butil::internal::PlatformThreadLocalStorage::AllocTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - pthread_key_create
    linkageType: ''
    returnType: bool
    signature: bool PlatformThreadLocalStorage::AllocTLS(TLSKey* key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_key_delete
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:19,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:20,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 21
      start: 18
    functionDepth: 1
    functionLinenumber: 18
    functionLinenumberEnd: 21
    functionName: butil::internal::PlatformThreadLocalStorage::FreeTLS
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 2
    functionsReached:
    - DCHECK_EQ
    - pthread_key_delete
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::FreeTLS(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:24,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - TLSKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 25
    functionName: butil::internal::PlatformThreadLocalStorage::GetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 12
    functionsReached:
    - pthread_getspecific
    linkageType: ''
    returnType: void
    signature: void * PlatformThreadLocalStorage::GetTLSValue(TLSKey key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_setspecific
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:28,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/threading/thread_local_storage_posix.cc:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - key
    - value
    argTypes:
    - TLSKey
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: butil::internal::PlatformThreadLocalStorage::SetTLSValue
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage_posix.cc
    functionUses: 4
    functionsReached:
    - DCHECK_EQ
    - pthread_setspecific
    linkageType: ''
    returnType: void
    signature: void PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: butil::PlatformThreadRef::PlatformThreadRef
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadRef()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - RefType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: butil::PlatformThreadRef::PlatformThreadRef
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadRef(RefType id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - other
    argTypes:
    - PlatformThreadRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: operator==(PlatformThreadRef other) const
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(PlatformThreadRef other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: butil::PlatformThreadRef::is_null
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_null() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::PlatformThreadHandle::PlatformThreadHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - handle
    argTypes:
    - Handle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: butil::PlatformThreadHandle::PlatformThreadHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadHandle(Handle handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - handle
    - id
    argTypes:
    - Handle
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: butil::PlatformThreadHandle::PlatformThreadHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PlatformThreadHandle(Handle handle,\n                       PlatformThreadId
      id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - PlatformThreadHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: butil::PlatformThreadHandle::is_equal
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_equal(const PlatformThreadHandle& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: butil::PlatformThreadHandle::is_null
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_null() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: butil::PlatformThreadHandle::platform_handle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Handle
    signature: Handle platform_handle() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadMain
      Src: /src/brpc/src/butil/threading/platform_thread.h:131,1
    - Dst: DISALLOW_IMPLICIT_CONSTRUCTORS
      Src: /src/brpc/src/butil/threading/platform_thread.h:195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 196
    functionName: butil::PlatformThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached:
    - DISALLOW_IMPLICIT_CONSTRUCTORS
    - ThreadMain
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThread
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    functionName: butil::PlatformThreadRef::PlatformThreadRef
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadRef()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - id
    argTypes:
    - RefType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: butil::PlatformThreadRef::PlatformThreadRef
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadRef(RefType id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - other
    argTypes:
    - PlatformThreadRef
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: operator==(PlatformThreadRef other) const
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator==(PlatformThreadRef other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: butil::PlatformThreadRef::is_null
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_null() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: butil::PlatformThreadHandle::PlatformThreadHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - handle
    argTypes:
    - Handle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: butil::PlatformThreadHandle::PlatformThreadHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PlatformThreadHandle(Handle handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - handle
    - id
    argTypes:
    - Handle
    - PlatformThreadId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 90
    functionName: butil::PlatformThreadHandle::PlatformThreadHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void PlatformThreadHandle(Handle handle,\n                       PlatformThreadId
      id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - PlatformThreadHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: butil::PlatformThreadHandle::is_equal
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_equal(const PlatformThreadHandle& other) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: butil::PlatformThreadHandle::is_null
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_null() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 102
    functionName: butil::PlatformThreadHandle::platform_handle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: Handle
    signature: Handle platform_handle() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadMain
      Src: /src/brpc/src/butil/threading/platform_thread.h:131,1
    - Dst: DISALLOW_IMPLICIT_CONSTRUCTORS
      Src: /src/brpc/src/butil/threading/platform_thread.h:195,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 196
    functionName: butil::PlatformThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread.h
    functionUses: 0
    functionsReached:
    - DISALLOW_IMPLICIT_CONSTRUCTORS
    - ThreadMain
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThread
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: butil::ThreadParams
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadParams()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:57,1
    - Dst: static_cast<ThreadParams*>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:58,1
    - Dst: butil::ThreadRestrictions::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:62,1
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: PlatformThreadHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:72,1
    - Dst: ThreadParams*::handle_set::Signal
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:73,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:75,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:76,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:77,1
    - Dst: PlatformThread::Delegate*::ThreadMain
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:79,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:81,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:82,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:83,1
    - Dst: butil::TerminateOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - params
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 87
    functionName: butil::ThreadFunc
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - PlatformThreadHandle
    - PlatformThread::Delegate*::ThreadMain
    - butil::InitOnThread
    - butil::PlatformThread::CurrentHandle
    - butil::PlatformThread::SetThreadPriority
    - butil::PlatformThread::CurrentId
    - butil::TerminateOnThread
    - butil::ThreadIdNameManager::GetInstance
    - butil::ThreadRestrictions::SetSingletonAllowed
    - pthread_self
    - static_cast<ThreadParams*>
    - ThreadParams*::handle_set::Signal
    linkageType: ''
    returnType: void
    signature: void * ThreadFunc(void* params)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitThreading
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:93,1
    - Dst: pthread_attr_init
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:97,1
    - Dst: pthread_attr_setdetachstate
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:102,1
    - Dst: butil::GetDefaultThreadStackSize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:107,1
    - Dst: pthread_attr_setstacksize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:110,1
    - Dst: pthread_create
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:128,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:131,1
    - Dst: ThreadParams::handle_set::Wait
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:136,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    - Dst: PlatformThreadHandle*::platform_handle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 5
    argNames:
    - stack_size
    - joinable
    - delegate
    - thread_handle
    - priority
    argTypes:
    - size_t
    - bool
    - PlatformThread::Delegate*
    - PlatformThreadHandle*
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 140
    functionName: butil::CreateThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_attr_setstacksize
    - PlatformThreadHandle*::platform_handle
    - butil::InitThreading
    - pthread_create
    - pthread_attr_destroy
    - ThreadParams::handle_set::Wait
    - pthread_attr_setdetachstate
    - CHECK_EQ
    - butil::GetDefaultThreadStackSize
    - PLOG
    - pthread_attr_init
    linkageType: ''
    returnType: bool
    signature: "bool CreateThread(size_t stack_size, bool joinable,\n                  PlatformThread::Delegate*
      delegate,\n                  PlatformThreadHandle* thread_handle,\n                  ThreadPriority
      priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: butil::ThreadParams
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadParams()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:57,1
    - Dst: static_cast<ThreadParams*>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:58,1
    - Dst: butil::ThreadRestrictions::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:62,1
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: PlatformThreadHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:72,1
    - Dst: ThreadParams*::handle_set::Signal
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:73,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:75,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:76,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:77,1
    - Dst: PlatformThread::Delegate*::ThreadMain
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:79,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:81,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:82,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:83,1
    - Dst: butil::TerminateOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - params
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 87
    functionName: butil::ThreadFunc
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - PlatformThreadHandle
    - PlatformThread::Delegate*::ThreadMain
    - butil::InitOnThread
    - butil::PlatformThread::CurrentHandle
    - butil::PlatformThread::SetThreadPriority
    - butil::PlatformThread::CurrentId
    - butil::TerminateOnThread
    - butil::ThreadIdNameManager::GetInstance
    - butil::ThreadRestrictions::SetSingletonAllowed
    - pthread_self
    - static_cast<ThreadParams*>
    - ThreadParams*::handle_set::Signal
    linkageType: ''
    returnType: void
    signature: void * ThreadFunc(void* params)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitThreading
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:93,1
    - Dst: pthread_attr_init
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:97,1
    - Dst: pthread_attr_setdetachstate
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:102,1
    - Dst: butil::GetDefaultThreadStackSize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:107,1
    - Dst: pthread_attr_setstacksize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:110,1
    - Dst: pthread_create
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:128,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:131,1
    - Dst: ThreadParams::handle_set::Wait
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:136,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    - Dst: PlatformThreadHandle*::platform_handle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 5
    argNames:
    - stack_size
    - joinable
    - delegate
    - thread_handle
    - priority
    argTypes:
    - size_t
    - bool
    - PlatformThread::Delegate*
    - PlatformThreadHandle*
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 140
    functionName: butil::CreateThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_attr_setstacksize
    - PlatformThreadHandle*::platform_handle
    - butil::InitThreading
    - pthread_create
    - pthread_attr_destroy
    - ThreadParams::handle_set::Wait
    - pthread_attr_setdetachstate
    - CHECK_EQ
    - butil::GetDefaultThreadStackSize
    - PLOG
    - pthread_attr_init
    linkageType: ''
    returnType: bool
    signature: "bool CreateThread(size_t stack_size, bool joinable,\n                  PlatformThread::Delegate*
      delegate,\n                  PlatformThreadHandle* thread_handle,\n                  ThreadPriority
      priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mach_thread_np
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:149,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:149,1
    - Dst: syscall
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:151,1
    - Dst: gettid
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:153,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:155,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:157,1
    - Dst: reinterpret_cast<int32_t>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:160,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:160,1
    - Dst: reinterpret_cast<int64_t>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:162,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 164
    functionName: butil::PlatformThread::CurrentId
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 24
    functionsReached:
    - pthread_mach_thread_np
    - reinterpret_cast<int64_t>
    - syscall
    - gettid
    - reinterpret_cast<int32_t>
    - pthread_self
    linkageType: ''
    returnType: PlatformThreadId
    signature: PlatformThreadId PlatformThread::CurrentId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadRef
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:168,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: butil::PlatformThread::CurrentRef
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 4
    functionsReached:
    - PlatformThreadRef
    - pthread_self
    linkageType: ''
    returnType: PlatformThreadRef
    signature: PlatformThreadRef PlatformThread::CurrentRef()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:173,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:173,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::PlatformThread::CurrentHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 2
    functionsReached:
    - pthread_self
    - PlatformThreadHandle
    - butil::PlatformThread::CurrentId
    linkageType: ''
    returnType: PlatformThreadHandle
    signature: PlatformThreadHandle PlatformThread::CurrentHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sched_yield
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: butil::PlatformThread::YieldCurrentThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 10
    functionsReached:
    - sched_yield
    linkageType: ''
    returnType: void
    signature: void PlatformThread::YieldCurrentThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeDelta::InSeconds
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:188,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:189,1
    - Dst: TimeDelta::InMicroseconds
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:190,1
    - Dst: nanosleep
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:192,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - duration
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 194
    functionName: butil::PlatformThread::Sleep
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 43
    functionsReached:
    - TimeDelta::InMicroseconds
    - TimeDelta::InSeconds
    - nanosleep
    - butil::TimeDelta::FromSeconds
    linkageType: ''
    returnType: void
    signature: void PlatformThread::Sleep(TimeDelta duration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:198,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 199
    functionName: butil::PlatformThread::GetName
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager::GetInstance
    linkageType: ''
    returnType: char
    signature: char * PlatformThread::GetName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - stack_size
    - delegate
    - thread_handle
    argTypes:
    - size_t
    - Delegate*
    - PlatformThreadHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 207
    functionName: butil::PlatformThread::Create
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 30
    functionsReached:
    - CreateThread
    linkageType: ''
    returnType: bool
    signature: "bool PlatformThread::Create(size_t stack_size, Delegate* delegate,\n
      \                           PlatformThreadHandle* thread_handle)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - stack_size
    - delegate
    - thread_handle
    - priority
    argTypes:
    - size_t
    - Delegate*
    - PlatformThreadHandle*
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 216
    functionName: butil::PlatformThread::CreateWithPriority
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - CreateThread
    linkageType: ''
    returnType: bool
    signature: "bool PlatformThread::CreateWithPriority(size_t stack_size, Delegate*
      delegate,\n                                        PlatformThreadHandle* thread_handle,\n
      \                                       ThreadPriority priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stack_size
    - delegate
    argTypes:
    - size_t
    - Delegate*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 226
    functionName: butil::PlatformThread::CreateNonJoinable
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - CreateThread
    linkageType: ''
    returnType: bool
    signature: bool PlatformThread::CreateNonJoinable(size_t stack_size, Delegate*
      delegate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:233,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:234,1
    - Dst: pthread_join
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - thread_handle
    argTypes:
    - PlatformThreadHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 229
    functionDepth: 2
    functionLinenumber: 229
    functionLinenumberEnd: 235
    functionName: butil::PlatformThread::Join
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 30
    functionsReached:
    - CHECK_EQ
    - butil::ThreadRestrictions::AssertIOAllowed
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void PlatformThread::Join(PlatformThreadHandle thread_handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: butil::ThreadParams
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadParams()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:57,1
    - Dst: static_cast<ThreadParams*>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:58,1
    - Dst: butil::ThreadRestrictions::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:62,1
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: PlatformThreadHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:72,1
    - Dst: ThreadParams*::handle_set::Signal
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:73,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:75,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:76,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:77,1
    - Dst: PlatformThread::Delegate*::ThreadMain
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:79,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:81,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:82,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:83,1
    - Dst: butil::TerminateOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - params
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 56
    functionDepth: 2
    functionLinenumber: 56
    functionLinenumberEnd: 87
    functionName: butil::ThreadFunc
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - PlatformThreadHandle
    - PlatformThread::Delegate*::ThreadMain
    - butil::InitOnThread
    - butil::PlatformThread::CurrentHandle
    - butil::PlatformThread::SetThreadPriority
    - butil::PlatformThread::CurrentId
    - butil::TerminateOnThread
    - butil::ThreadIdNameManager::GetInstance
    - butil::ThreadRestrictions::SetSingletonAllowed
    - pthread_self
    - static_cast<ThreadParams*>
    - ThreadParams*::handle_set::Signal
    linkageType: ''
    returnType: void
    signature: void * ThreadFunc(void* params)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitThreading
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:93,1
    - Dst: pthread_attr_init
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:97,1
    - Dst: pthread_attr_setdetachstate
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:102,1
    - Dst: butil::GetDefaultThreadStackSize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:107,1
    - Dst: pthread_attr_setstacksize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:110,1
    - Dst: pthread_create
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:128,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:131,1
    - Dst: ThreadParams::handle_set::Wait
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:136,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    - Dst: PlatformThreadHandle*::platform_handle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 5
    argNames:
    - stack_size
    - joinable
    - delegate
    - thread_handle
    - priority
    argTypes:
    - size_t
    - bool
    - PlatformThread::Delegate*
    - PlatformThreadHandle*
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 140
    functionName: butil::CreateThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_attr_setstacksize
    - PlatformThreadHandle*::platform_handle
    - butil::InitThreading
    - pthread_create
    - pthread_attr_destroy
    - ThreadParams::handle_set::Wait
    - pthread_attr_setdetachstate
    - CHECK_EQ
    - butil::GetDefaultThreadStackSize
    - PLOG
    - pthread_attr_init
    linkageType: ''
    returnType: bool
    signature: "bool CreateThread(size_t stack_size, bool joinable,\n                  PlatformThread::Delegate*
      delegate,\n                  PlatformThreadHandle* thread_handle,\n                  ThreadPriority
      priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: butil::ThreadParams
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadParams()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:57,1
    - Dst: static_cast<ThreadParams*>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:58,1
    - Dst: butil::ThreadRestrictions::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:62,1
    - Dst: butil::PlatformThread::SetThreadPriority
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:65,1
    - Dst: PlatformThreadHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:71,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:72,1
    - Dst: ThreadParams*::handle_set::Signal
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:73,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:75,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:76,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:77,1
    - Dst: PlatformThread::Delegate*::ThreadMain
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:79,1
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:81,1
    - Dst: butil::PlatformThread::CurrentHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:82,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:83,1
    - Dst: butil::TerminateOnThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:85,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - params
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 56
    functionDepth: 2
    functionLinenumber: 56
    functionLinenumberEnd: 87
    functionName: butil::ThreadFunc
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - PlatformThreadHandle
    - PlatformThread::Delegate*::ThreadMain
    - butil::InitOnThread
    - butil::PlatformThread::CurrentHandle
    - butil::PlatformThread::SetThreadPriority
    - butil::PlatformThread::CurrentId
    - butil::TerminateOnThread
    - butil::ThreadIdNameManager::GetInstance
    - butil::ThreadRestrictions::SetSingletonAllowed
    - pthread_self
    - static_cast<ThreadParams*>
    - ThreadParams*::handle_set::Signal
    linkageType: ''
    returnType: void
    signature: void * ThreadFunc(void* params)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::InitThreading
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:93,1
    - Dst: pthread_attr_init
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:97,1
    - Dst: pthread_attr_setdetachstate
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:102,1
    - Dst: butil::GetDefaultThreadStackSize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:107,1
    - Dst: pthread_attr_setstacksize
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:110,1
    - Dst: pthread_create
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:119,1
    - Dst: PLOG
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:128,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:131,1
    - Dst: ThreadParams::handle_set::Wait
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:136,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    - Dst: PlatformThreadHandle*::platform_handle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:137,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 5
    argNames:
    - stack_size
    - joinable
    - delegate
    - thread_handle
    - priority
    argTypes:
    - size_t
    - bool
    - PlatformThread::Delegate*
    - PlatformThreadHandle*
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 140
    functionName: butil::CreateThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - pthread_attr_setstacksize
    - PlatformThreadHandle*::platform_handle
    - butil::InitThreading
    - pthread_create
    - pthread_attr_destroy
    - ThreadParams::handle_set::Wait
    - pthread_attr_setdetachstate
    - CHECK_EQ
    - butil::GetDefaultThreadStackSize
    - PLOG
    - pthread_attr_init
    linkageType: ''
    returnType: bool
    signature: "bool CreateThread(size_t stack_size, bool joinable,\n                  PlatformThread::Delegate*
      delegate,\n                  PlatformThreadHandle* thread_handle,\n                  ThreadPriority
      priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mach_thread_np
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:149,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:149,1
    - Dst: syscall
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:151,1
    - Dst: gettid
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:153,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:155,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:157,1
    - Dst: reinterpret_cast<int32_t>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:160,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:160,1
    - Dst: reinterpret_cast<int64_t>
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:162,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 164
    functionName: butil::PlatformThread::CurrentId
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 28
    functionsReached:
    - pthread_mach_thread_np
    - reinterpret_cast<int64_t>
    - syscall
    - gettid
    - reinterpret_cast<int32_t>
    - pthread_self
    linkageType: ''
    returnType: PlatformThreadId
    signature: PlatformThreadId PlatformThread::CurrentId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadRef
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:168,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: butil::PlatformThread::CurrentRef
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 4
    functionsReached:
    - PlatformThreadRef
    - pthread_self
    linkageType: ''
    returnType: PlatformThreadRef
    signature: PlatformThreadRef PlatformThread::CurrentRef()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlatformThreadHandle
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:173,1
    - Dst: pthread_self
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:173,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:173,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: butil::PlatformThread::CurrentHandle
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 4
    functionsReached:
    - pthread_self
    - PlatformThreadHandle
    - butil::PlatformThread::CurrentId
    linkageType: ''
    returnType: PlatformThreadHandle
    signature: PlatformThreadHandle PlatformThread::CurrentHandle()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sched_yield
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: butil::PlatformThread::YieldCurrentThread
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 10
    functionsReached:
    - sched_yield
    linkageType: ''
    returnType: void
    signature: void PlatformThread::YieldCurrentThread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeDelta::InSeconds
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:188,1
    - Dst: butil::TimeDelta::FromSeconds
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:189,1
    - Dst: TimeDelta::InMicroseconds
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:190,1
    - Dst: nanosleep
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:192,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - duration
    argTypes:
    - TimeDelta
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 194
    functionName: butil::PlatformThread::Sleep
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 43
    functionsReached:
    - TimeDelta::InMicroseconds
    - TimeDelta::InSeconds
    - nanosleep
    - butil::TimeDelta::FromSeconds
    linkageType: ''
    returnType: void
    signature: void PlatformThread::Sleep(TimeDelta duration)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadIdNameManager::GetInstance
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:198,1
    - Dst: butil::PlatformThread::CurrentId
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 199
    functionName: butil::PlatformThread::GetName
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager::GetInstance
    linkageType: ''
    returnType: char
    signature: char * PlatformThread::GetName()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - stack_size
    - delegate
    - thread_handle
    argTypes:
    - size_t
    - Delegate*
    - PlatformThreadHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 207
    functionName: butil::PlatformThread::Create
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 30
    functionsReached:
    - CreateThread
    linkageType: ''
    returnType: bool
    signature: "bool PlatformThread::Create(size_t stack_size, Delegate* delegate,\n
      \                           PlatformThreadHandle* thread_handle)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - stack_size
    - delegate
    - thread_handle
    - priority
    argTypes:
    - size_t
    - Delegate*
    - PlatformThreadHandle*
    - ThreadPriority
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 216
    functionName: butil::PlatformThread::CreateWithPriority
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - CreateThread
    linkageType: ''
    returnType: bool
    signature: "bool PlatformThread::CreateWithPriority(size_t stack_size, Delegate*
      delegate,\n                                        PlatformThreadHandle* thread_handle,\n
      \                                       ThreadPriority priority)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - stack_size
    - delegate
    argTypes:
    - size_t
    - Delegate*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 226
    functionName: butil::PlatformThread::CreateNonJoinable
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 0
    functionsReached:
    - CreateThread
    linkageType: ''
    returnType: bool
    signature: bool PlatformThread::CreateNonJoinable(size_t stack_size, Delegate*
      delegate)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadRestrictions::AssertIOAllowed
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:233,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:234,1
    - Dst: pthread_join
      Src: /src/brpc/src/butil/threading/platform_thread_posix.cc:234,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - thread_handle
    argTypes:
    - PlatformThreadHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 229
    functionDepth: 2
    functionLinenumber: 229
    functionLinenumberEnd: 235
    functionName: butil::PlatformThread::Join
    functionSourceFile: /src/brpc/src/butil/threading/platform_thread_posix.cc
    functionUses: 30
    functionsReached:
    - CHECK_EQ
    - butil::ThreadRestrictions::AssertIOAllowed
    - pthread_join
    linkageType: ''
    returnType: void
    signature: void PlatformThread::Join(PlatformThreadHandle thread_handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: DFAKE_MUTEX
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_MUTEX(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: DFAKE_SCOPED_LOCK
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_SCOPED_LOCK(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: DFAKE_SCOPED_RECURSIVE_LOCK
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_SCOPED_RECURSIVE_LOCK(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: DFAKE_SCOPED_LOCK_THREAD_LOCKED
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_SCOPED_LOCK_THREAD_LOCKED(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 123
    functionName: DFAKE_MUTEX
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_MUTEX(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 124
    functionName: DFAKE_SCOPED_LOCK
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_SCOPED_LOCK(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 125
    functionName: DFAKE_SCOPED_RECURSIVE_LOCK
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 41
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_SCOPED_RECURSIVE_LOCK(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - obj
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 126
    functionName: DFAKE_SCOPED_LOCK_THREAD_LOCKED
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DFAKE_SCOPED_LOCK_THREAD_LOCKED(obj)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: butil::AsserterBase
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT AsserterBase
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: ~AsserterBase()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AsserterBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: butil::DCheckAsserter
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT DCheckAsserter
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: ~DCheckAsserter()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DCheckAsserter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCheckAsserter::DCheckAsserter
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:148,1
    - Dst: valid_thread_id_
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:149,1
    - Dst: counter_
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:150,1
    - Dst: asserter_
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:151,1
    - Dst: explicit::EnterSelf
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:166,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 175
    functionName: butil::ThreadCollisionWarner
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - valid_thread_id_
    - DCheckAsserter::DCheckAsserter
    - counter_
    - DISALLOW_COPY_AND_ASSIGN
    - asserter_
    - explicit::EnterSelf
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadCollisionWarner
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 155
    functionName: ~ThreadCollisionWarner()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadCollisionWarner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: explicit::EnterSelf
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 167
    functionName: butil::Check
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - explicit::EnterSelf
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Check
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: ~Check()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Check()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: explicit::Enter
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 184
    functionName: butil::ScopedCheck
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - explicit::Enter
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedCheck
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Leave
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: ~ScopedCheck()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - Leave
    linkageType: ''
    returnType: void
    signature: void ~ScopedCheck()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 138
    functionName: butil::AsserterBase
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT AsserterBase
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: ~AsserterBase()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~AsserterBase()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 143
    functionName: butil::DCheckAsserter
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT DCheckAsserter
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    functionName: ~DCheckAsserter()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~DCheckAsserter()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DCheckAsserter::DCheckAsserter
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:148,1
    - Dst: valid_thread_id_
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:149,1
    - Dst: counter_
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:150,1
    - Dst: asserter_
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:151,1
    - Dst: explicit::EnterSelf
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:166,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 175
    functionName: butil::ThreadCollisionWarner
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - valid_thread_id_
    - DCheckAsserter::DCheckAsserter
    - counter_
    - DISALLOW_COPY_AND_ASSIGN
    - asserter_
    - explicit::EnterSelf
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadCollisionWarner
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 155
    functionName: ~ThreadCollisionWarner()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadCollisionWarner()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: explicit::EnterSelf
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 167
    functionName: butil::Check
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - explicit::EnterSelf
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT Check
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: ~Check()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Check()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: explicit::Enter
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 184
    functionName: butil::ScopedCheck
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - explicit::Enter
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedCheck
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Leave
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 188
    functionName: ~ScopedCheck()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - Leave
    linkageType: ''
    returnType: void
    signature: void ~ScopedCheck()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: explicit::EnterSelf
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 203
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 203
    functionName: ScopedRecursiveCheck
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - explicit::EnterSelf
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedRecursiveCheck
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Leave
      Src: /src/brpc/src/butil/threading/thread_collision_warner.h:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 207
    functionName: ~ScopedRecursiveCheck()
    functionSourceFile: /src/brpc/src/butil/threading/thread_collision_warner.h
    functionUses: 0
    functionsReached:
    - Leave
    linkageType: ''
    returnType: void
    signature: void ~ScopedRecursiveCheck()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 72
    functionName: butil::internal::PlatformThreadLocalStorage
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThreadLocalStorage
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 72
    functionName: butil::internal::PlatformThreadLocalStorage
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThreadLocalStorage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_local_storage.h:136,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_local_storage.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 140
    functionName: butil::ThreadLocalStorage
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadLocalStorage
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 123
    functionName: butil::StaticSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT StaticSlot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 118
    functionName: butil::initialized
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_local_storage.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 137
    functionName: butil::StaticSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT StaticSlot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 72
    functionName: butil::internal::PlatformThreadLocalStorage
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThreadLocalStorage
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 72
    functionName: butil::internal::PlatformThreadLocalStorage
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT PlatformThreadLocalStorage
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_local_storage.h:136,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_local_storage.h:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 140
    functionName: butil::ThreadLocalStorage
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadLocalStorage
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 123
    functionName: butil::StaticSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT StaticSlot
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 118
    functionName: butil::initialized
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool initialized() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_local_storage.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 137
    functionName: butil::StaticSlot
    functionSourceFile: /src/brpc/src/butil/threading/thread_local_storage.h
    functionUses: 0
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT StaticSlot
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerImpl
      Src: /src/brpc/src/butil/threading/thread_checker_impl.h:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 39
    functionName: butil::ThreadCheckerImpl
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.h
    functionUses: 1
    functionsReached:
    - butil::ThreadCheckerImpl
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadCheckerImpl
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadCheckerImpl
      Src: /src/brpc/src/butil/threading/thread_checker_impl.h:22,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 20
    functionDepth: 1
    functionLinenumber: 20
    functionLinenumberEnd: 39
    functionName: butil::ThreadCheckerImpl
    functionSourceFile: /src/brpc/src/butil/threading/thread_checker_impl.h
    functionUses: 2
    functionsReached:
    - butil::ThreadCheckerImpl
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadCheckerImpl
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 79
    functionName: butil::internal::ThreadLocalPlatform
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT ThreadLocalPlatform
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 79
    functionName: butil::internal::ThreadLocalPlatform
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT ThreadLocalPlatform
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::ThreadLocalPlatform::AllocateSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::ThreadLocalPointer::ThreadLocalPointer
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 2
    functionsReached:
    - butil::internal::ThreadLocalPlatform::AllocateSlot
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPointer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::ThreadLocalPlatform::FreeSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 2
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: ~ThreadLocalPointer()
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached:
    - butil::internal::ThreadLocalPlatform::FreeSlot
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalPointer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Type*>
      Src: /src/brpc/src/butil/threading/thread_local.h:95,1
    - Dst: butil::internal::ThreadLocalPlatform::GetValueFromSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: butil::ThreadLocalPointer::Get
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached:
    - butil::internal::ThreadLocalPlatform::GetValueFromSlot
    - static_cast<Type*>
    linkageType: ''
    returnType: Type
    signature: Type * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::ThreadLocalPlatform::SetValueInSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:100,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/butil/threading/thread_local.h:101,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/butil/threading/thread_local.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: butil::ThreadLocalPointer::Set
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached:
    - butil::internal::ThreadLocalPlatform::SetValueInSlot
    - static_cast<const void*>
    - const_cast<void*>
    linkageType: ''
    returnType: void
    signature: void Set(Type* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: butil::ThreadLocalBoolean::ThreadLocalBoolean
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalBoolean()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~ThreadLocalBoolean()
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalBoolean()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/src/butil/threading/thread_local.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: butil::ThreadLocalBoolean::Get
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 3
    functionsReached:
    - butil::ThreadLocalBoolean::Get
    linkageType: ''
    returnType: bool
    signature: bool Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocalBoolean::Set
      Src: /src/brpc/src/butil/threading/thread_local.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: butil::ThreadLocalBoolean::Set
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 3
    functionsReached:
    - butil::ThreadLocalBoolean::Set
    linkageType: ''
    returnType: void
    signature: void Set(bool val)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 79
    functionName: butil::internal::ThreadLocalPlatform
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT ThreadLocalPlatform
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 79
    functionName: butil::internal::ThreadLocalPlatform
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT ThreadLocalPlatform
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::ThreadLocalPlatform::AllocateSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: butil::ThreadLocalPointer::ThreadLocalPointer
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 2
    functionsReached:
    - butil::internal::ThreadLocalPlatform::AllocateSlot
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPointer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::ThreadLocalPlatform::FreeSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 2
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: ~ThreadLocalPointer()
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached:
    - butil::internal::ThreadLocalPlatform::FreeSlot
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalPointer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Type*>
      Src: /src/brpc/src/butil/threading/thread_local.h:95,1
    - Dst: butil::internal::ThreadLocalPlatform::GetValueFromSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: butil::ThreadLocalPointer::Get
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached:
    - butil::internal::ThreadLocalPlatform::GetValueFromSlot
    - static_cast<Type*>
    linkageType: ''
    returnType: Type
    signature: Type * Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::internal::ThreadLocalPlatform::SetValueInSlot
      Src: /src/brpc/src/butil/threading/thread_local.h:100,1
    - Dst: const_cast<void*>
      Src: /src/brpc/src/butil/threading/thread_local.h:101,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/butil/threading/thread_local.h:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: butil::ThreadLocalPointer::Set
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached:
    - butil::internal::ThreadLocalPlatform::SetValueInSlot
    - static_cast<const void*>
    - const_cast<void*>
    linkageType: ''
    returnType: void
    signature: void Set(Type* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    functionName: butil::ThreadLocalBoolean::ThreadLocalBoolean
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ThreadLocalBoolean()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 115
    functionName: ~ThreadLocalBoolean()
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ThreadLocalBoolean()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocalBoolean::Get
      Src: /src/brpc/src/butil/threading/thread_local.h:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 1
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: butil::ThreadLocalBoolean::Get
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 4
    functionsReached:
    - butil::ThreadLocalBoolean::Get
    linkageType: ''
    returnType: bool
    signature: bool Get()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadLocalBoolean::Set
      Src: /src/brpc/src/butil/threading/thread_local.h:122,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 123
    functionName: butil::ThreadLocalBoolean::Set
    functionSourceFile: /src/brpc/src/butil/threading/thread_local.h
    functionUses: 4
    functionsReached:
    - butil::ThreadLocalBoolean::Set
    linkageType: ''
    returnType: void
    signature: void Set(bool val)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ScopedAllowIO
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:118,1
    - Dst: butil::SetIOAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:118,1
    - Dst: ScopedAllowIO
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:119,1
    - Dst: butil::SetIOAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:119,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:124,1
    - Dst: butil::ScopedAllowSingleton
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:132,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:138,1
    - Dst: butil::ScopedAllowWait
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:242,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:248,1
    - Dst: DISALLOW_IMPLICIT_CONSTRUCTORS
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 253
    functionName: butil::ThreadRestrictions
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached:
    - butil::ScopedAllowSingleton
    - butil::SetWaitAllowed
    - DISALLOW_COPY_AND_ASSIGN
    - butil::ScopedAllowWait
    - ScopedAllowIO
    - butil::SetSingletonAllowed
    - DISALLOW_IMPLICIT_CONSTRUCTORS
    - butil::SetIOAllowed
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadRestrictions
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedAllowSingleton
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:132,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 139
    functionName: butil::ScopedAllowSingleton
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 2
    functionsReached:
    - butil::ScopedAllowSingleton
    - DISALLOW_COPY_AND_ASSIGN
    - butil::SetSingletonAllowed
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedAllowSingleton
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: ~ScopedAllowSingleton()
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached:
    - butil::SetSingletonAllowed
    linkageType: ''
    returnType: void
    signature: void ~ScopedAllowSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: butil::SetIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SetIOAllowed(bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: butil::AssertIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertIOAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: butil::SetSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SetSingletonAllowed(bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: butil::AssertSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertSingletonAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: butil::DisallowWaiting
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DisallowWaiting()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: butil::AssertWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertWaitAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: butil::SetWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SetWaitAllowed(bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedAllowWait
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:242,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 249
    functionName: butil::ScopedAllowWait
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 2
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - butil::SetWaitAllowed
    - butil::ScopedAllowWait
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedAllowWait
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 1
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: ~ScopedAllowWait()
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached:
    - butil::SetWaitAllowed
    linkageType: ''
    returnType: void
    signature: void ~ScopedAllowWait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ScopedAllowIO
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:118,1
    - Dst: butil::SetIOAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:118,1
    - Dst: ScopedAllowIO
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:119,1
    - Dst: butil::SetIOAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:119,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:124,1
    - Dst: butil::ScopedAllowSingleton
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:132,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:138,1
    - Dst: butil::ScopedAllowWait
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:242,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:248,1
    - Dst: DISALLOW_IMPLICIT_CONSTRUCTORS
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 112
    functionDepth: 2
    functionLinenumber: 112
    functionLinenumberEnd: 253
    functionName: butil::ThreadRestrictions
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached:
    - butil::ScopedAllowSingleton
    - butil::SetWaitAllowed
    - DISALLOW_COPY_AND_ASSIGN
    - butil::ScopedAllowWait
    - ScopedAllowIO
    - butil::SetSingletonAllowed
    - DISALLOW_IMPLICIT_CONSTRUCTORS
    - butil::SetIOAllowed
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ThreadRestrictions
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedAllowSingleton
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:131,1
    - Dst: butil::SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:132,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 139
    functionName: butil::ScopedAllowSingleton
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 4
    functionsReached:
    - butil::ScopedAllowSingleton
    - DISALLOW_COPY_AND_ASSIGN
    - butil::SetSingletonAllowed
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedAllowSingleton
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetSingletonAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: ~ScopedAllowSingleton()
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached:
    - SetSingletonAllowed
    linkageType: ''
    returnType: void
    signature: void ~ScopedAllowSingleton()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    functionName: butil::SetIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SetIOAllowed(bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    functionName: butil::AssertIOAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertIOAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: butil::SetSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SetSingletonAllowed(bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    functionName: butil::AssertSingletonAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertSingletonAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    functionName: butil::DisallowWaiting
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DisallowWaiting()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    functionName: butil::AssertWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AssertWaitAllowed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: butil::SetWaitAllowed
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SetWaitAllowed(bool)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ScopedAllowWait
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:241,1
    - Dst: butil::SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:242,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 249
    functionName: butil::ScopedAllowWait
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 4
    functionsReached:
    - DISALLOW_COPY_AND_ASSIGN
    - butil::SetWaitAllowed
    - butil::ScopedAllowWait
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedAllowWait
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetWaitAllowed
      Src: /src/brpc/src/butil/threading/thread_restrictions.h:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 242
    functionName: ~ScopedAllowWait()
    functionSourceFile: /src/brpc/src/butil/threading/thread_restrictions.h
    functionUses: 0
    functionsReached:
    - SetWaitAllowed
    linkageType: ''
    returnType: void
    signature: void ~ScopedAllowWait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __lsan_disable
      Src: /src/brpc/src/butil/debug/leak_annotations.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 36
    functionName: ScopedLeakSanitizerDisabler::ScopedLeakSanitizerDisabler
    functionSourceFile: /src/brpc/src/butil/debug/leak_annotations.h
    functionUses: 0
    functionsReached:
    - __lsan_disable
    linkageType: ''
    returnType: void
    signature: void ScopedLeakSanitizerDisabler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __lsan_enable
      Src: /src/brpc/src/butil/debug/leak_annotations.h:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: ~ScopedLeakSanitizerDisabler()
    functionSourceFile: /src/brpc/src/butil/debug/leak_annotations.h
    functionUses: 0
    functionsReached:
    - __lsan_enable
    linkageType: ''
    returnType: void
    signature: void ~ScopedLeakSanitizerDisabler()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - X
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 46
    functionName: ANNOTATE_LEAKING_OBJECT_PTR
    functionSourceFile: /src/brpc/src/butil/debug/leak_annotations.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ANNOTATE_LEAKING_OBJECT_PTR(X)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - X
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: ANNOTATE_LEAKING_OBJECT_PTR
    functionSourceFile: /src/brpc/src/butil/debug/leak_annotations.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ANNOTATE_LEAKING_OBJECT_PTR(X)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:53,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 59
    functionName: butil::debug::AsanHeapOverflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapOverflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:62,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 68
    functionName: butil::debug::AsanHeapUnderflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapUnderflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:75,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:76,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: butil::debug::AsanHeapUseAfterFree
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    - scoped_ptr::get
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void AsanHeapUseAfterFree()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::debug::AsanCorruptHeapBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeapBlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::debug::AsanCorruptHeap
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeap()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 2
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 2
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:53,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 59
    functionName: butil::debug::AsanHeapOverflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapOverflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:62,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 68
    functionName: butil::debug::AsanHeapUnderflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapUnderflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:75,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:76,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: butil::debug::AsanHeapUseAfterFree
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    - scoped_ptr::get
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void AsanHeapUseAfterFree()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::debug::AsanCorruptHeapBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeapBlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::debug::AsanCorruptHeap
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeap()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 4
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 4
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:53,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 59
    functionName: butil::debug::AsanHeapOverflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapOverflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:62,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 68
    functionName: butil::debug::AsanHeapUnderflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapUnderflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:75,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:76,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: butil::debug::AsanHeapUseAfterFree
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    - scoped_ptr::get
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void AsanHeapUseAfterFree()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::debug::AsanCorruptHeapBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeapBlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::debug::AsanCorruptHeap
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeap()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 6
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:27,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:35,1
    - Dst: CHECK
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - induce_crash
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 41
    functionName: butil::debug::CorruptMemoryBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 6
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - CHECK
    - int::int
    linkageType: ''
    returnType: NOINLINE
    signature: NOINLINE CorruptMemoryBlock(bool induce_crash)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:53,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 59
    functionName: butil::debug::AsanHeapOverflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapOverflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:62,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 61
    functionDepth: 1
    functionLinenumber: 61
    functionLinenumberEnd: 68
    functionName: butil::debug::AsanHeapUnderflow
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    linkageType: ''
    returnType: void
    signature: void AsanHeapUnderflow()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: int::int
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:71,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:75,1
    - Dst: scoped_ptr::reset
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:76,1
    - Dst: butil::debug::Alias
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    - Dst: const_cast<int*>
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 79
    functionName: butil::debug::AsanHeapUseAfterFree
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::Alias
    - const_cast<int*>
    - int::int
    - scoped_ptr::get
    - scoped_ptr::reset
    linkageType: ''
    returnType: void
    signature: void AsanHeapUseAfterFree()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: butil::debug::AsanCorruptHeapBlock
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeapBlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::CorruptMemoryBlock
      Src: /src/brpc/src/butil/debug/asan_invalid_access.cc:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: butil::debug::AsanCorruptHeap
    functionSourceFile: /src/brpc/src/butil/debug/asan_invalid_access.cc
    functionUses: 0
    functionsReached:
    - butil::debug::CorruptMemoryBlock
    linkageType: ''
    returnType: void
    signature: void AsanCorruptHeap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:52,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:54,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:59,1
    - Dst: butil::debug::ChunkCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:65,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:66,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:67,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:73,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 77
    functionName: butil::debug::SetCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - butil::debug::ChunkCrashKeyValue
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - DCHECK
    - g_set_key_func_
    - data
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyValue(const butil::StringPiece& key,\n                      const
      butil::StringPiece& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:83,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:87,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:91,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 94
    functionName: butil::debug::ClearCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - data
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ClearCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Addresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:99,1
    - Dst: butil::debug::SetCrashKeyFromAddresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' trace'
    argTypes:
    - butil::StringPiece
    - StackTrace
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 101
    functionName: butil::debug::SetCrashKeyToStackTrace
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - Addresses
    - butil::debug::SetCrashKeyFromAddresses
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyToStackTrace(const butil::StringPiece& key,\n                             const
      StackTrace& trace)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:114,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:115,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:118,1
    - Dst: JoinString
      Src: /src/brpc/src/butil/debug/crash_logging.cc:121,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 3
    argNames:
    - ' key'
    - addresses
    - count
    argTypes:
    - butil::StringPiece
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 128
    functionName: butil::debug::SetCrashKeyFromAddresses
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached:
    - DCHECK_LE
    - std::vector::push_back
    - butil::debug::SetCrashKeyValue
    - std::string::length
    - butil::StringPrintf
    - JoinString
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyFromAddresses(const butil::StringPiece& key,\n                              const
      void* const* addresses,\n                              size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:132,1
    - Dst: SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 134
    functionName: butil::debug::ScopedCrashKey::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - as_string
    - SetCrashKeyValue
    linkageType: ''
    returnType: void
    signature: "void ScopedCrashKey::ScopedCrashKey(const butil::StringPiece& key,\n
      \                              const butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClearCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: ScopedCrashKey::~ScopedCrashKey()
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - ClearCrashKey
    linkageType: ''
    returnType: void
    signature: void ScopedCrashKey::~ScopedCrashKey()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:142,1
    - Dst: CrashKeyMap::CrashKeyMap
      Src: /src/brpc/src/butil/debug/crash_logging.cc:149,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/crash_logging.cc:154,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:155,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/debug/crash_logging.cc:156,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    - Dst: size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 3
    argNames:
    - keys
    - count
    - chunk_max_length
    argTypes:
    - CrashKey*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 162
    functionName: butil::debug::InitCrashKeys
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 5
    functionsReached:
    - DCHECK_LT
    - butil::debug::NumChunksForLength
    - emplace
    - DCHECK
    - DCHECK_EQ
    - size
    - CrashKeyMap::CrashKeyMap
    linkageType: ''
    returnType: size_t
    signature: "size_t InitCrashKeys(const CrashKey* const keys, size_t count,\n                     size_t
      chunk_max_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/crash_logging.cc:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: butil::debug::LookupCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 3
    functionsReached:
    - as_string
    - find
    - end
    linkageType: ''
    returnType: CrashKey
    signature: CrashKey * LookupCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - set_key_func
    - clear_key_func
    argTypes:
    - SetCrashKeyValueFuncT
    - ClearCrashKeyValueFuncT
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::debug::SetCrashKeyReportingFunctions
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyReportingFunctions(\n    SetCrashKeyValueFuncT set_key_func,\n
      \   ClearCrashKeyValueFuncT clear_key_func)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:183,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:185,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:186,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:187,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' crash_key'
    - ' value'
    - chunk_max_length
    argTypes:
    - CrashKey
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 191
    functionName: butil::debug::ChunkCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached:
    - std::string::substr
    - std::vector::push_back
    - std::string::length
    - substr
    linkageType: ''
    returnType: std::vector<std::string>
    signature: "std::vector<std::string> ChunkCrashKeyValue(const CrashKey& crash_key,\n
      \                                           const butil::StringPiece& value,\n
      \                                           size_t chunk_max_length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 199
    functionName: butil::debug::ResetCrashLoggingForTesting
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResetCrashLoggingForTesting()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 3
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 3
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:52,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:54,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:59,1
    - Dst: butil::debug::ChunkCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:65,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:66,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:67,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:73,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 77
    functionName: butil::debug::SetCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 3
    functionsReached:
    - butil::debug::ChunkCrashKeyValue
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - DCHECK
    - g_set_key_func_
    - data
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyValue(const butil::StringPiece& key,\n                      const
      butil::StringPiece& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:83,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:87,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:91,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 94
    functionName: butil::debug::ClearCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - data
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ClearCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Addresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:99,1
    - Dst: butil::debug::SetCrashKeyFromAddresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' trace'
    argTypes:
    - butil::StringPiece
    - StackTrace
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 101
    functionName: butil::debug::SetCrashKeyToStackTrace
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - Addresses
    - butil::debug::SetCrashKeyFromAddresses
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyToStackTrace(const butil::StringPiece& key,\n                             const
      StackTrace& trace)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:114,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:115,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:118,1
    - Dst: JoinString
      Src: /src/brpc/src/butil/debug/crash_logging.cc:121,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 3
    argNames:
    - ' key'
    - addresses
    - count
    argTypes:
    - butil::StringPiece
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 128
    functionName: butil::debug::SetCrashKeyFromAddresses
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - DCHECK_LE
    - std::vector::push_back
    - butil::debug::SetCrashKeyValue
    - std::string::length
    - butil::StringPrintf
    - JoinString
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyFromAddresses(const butil::StringPiece& key,\n                              const
      void* const* addresses,\n                              size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:132,1
    - Dst: SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 134
    functionName: butil::debug::ScopedCrashKey::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - as_string
    - SetCrashKeyValue
    linkageType: ''
    returnType: void
    signature: "void ScopedCrashKey::ScopedCrashKey(const butil::StringPiece& key,\n
      \                              const butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClearCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: ScopedCrashKey::~ScopedCrashKey()
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - ClearCrashKey
    linkageType: ''
    returnType: void
    signature: void ScopedCrashKey::~ScopedCrashKey()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:142,1
    - Dst: CrashKeyMap::CrashKeyMap
      Src: /src/brpc/src/butil/debug/crash_logging.cc:149,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/crash_logging.cc:154,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:155,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/debug/crash_logging.cc:156,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    - Dst: size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 3
    argNames:
    - keys
    - count
    - chunk_max_length
    argTypes:
    - CrashKey*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 162
    functionName: butil::debug::InitCrashKeys
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 5
    functionsReached:
    - DCHECK_LT
    - butil::debug::NumChunksForLength
    - emplace
    - DCHECK
    - DCHECK_EQ
    - size
    - CrashKeyMap::CrashKeyMap
    linkageType: ''
    returnType: size_t
    signature: "size_t InitCrashKeys(const CrashKey* const keys, size_t count,\n                     size_t
      chunk_max_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/crash_logging.cc:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: butil::debug::LookupCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 5
    functionsReached:
    - as_string
    - find
    - end
    linkageType: ''
    returnType: CrashKey
    signature: CrashKey * LookupCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - set_key_func
    - clear_key_func
    argTypes:
    - SetCrashKeyValueFuncT
    - ClearCrashKeyValueFuncT
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::debug::SetCrashKeyReportingFunctions
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyReportingFunctions(\n    SetCrashKeyValueFuncT set_key_func,\n
      \   ClearCrashKeyValueFuncT clear_key_func)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:183,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:185,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:186,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:187,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' crash_key'
    - ' value'
    - chunk_max_length
    argTypes:
    - CrashKey
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 191
    functionName: butil::debug::ChunkCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - std::string::substr
    - std::vector::push_back
    - std::string::length
    - substr
    linkageType: ''
    returnType: std::vector<std::string>
    signature: "std::vector<std::string> ChunkCrashKeyValue(const CrashKey& crash_key,\n
      \                                           const butil::StringPiece& value,\n
      \                                           size_t chunk_max_length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 199
    functionName: butil::debug::ResetCrashLoggingForTesting
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResetCrashLoggingForTesting()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 6
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 6
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:52,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:54,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:59,1
    - Dst: butil::debug::ChunkCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:65,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:66,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:67,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:73,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 77
    functionName: butil::debug::SetCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 4
    functionsReached:
    - butil::debug::ChunkCrashKeyValue
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - DCHECK
    - g_set_key_func_
    - data
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyValue(const butil::StringPiece& key,\n                      const
      butil::StringPiece& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:83,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:87,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:91,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 94
    functionName: butil::debug::ClearCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - data
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ClearCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Addresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:99,1
    - Dst: butil::debug::SetCrashKeyFromAddresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' trace'
    argTypes:
    - butil::StringPiece
    - StackTrace
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 101
    functionName: butil::debug::SetCrashKeyToStackTrace
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - Addresses
    - butil::debug::SetCrashKeyFromAddresses
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyToStackTrace(const butil::StringPiece& key,\n                             const
      StackTrace& trace)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:114,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:115,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:118,1
    - Dst: JoinString
      Src: /src/brpc/src/butil/debug/crash_logging.cc:121,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 3
    argNames:
    - ' key'
    - addresses
    - count
    argTypes:
    - butil::StringPiece
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 128
    functionName: butil::debug::SetCrashKeyFromAddresses
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 3
    functionsReached:
    - DCHECK_LE
    - std::vector::push_back
    - butil::debug::SetCrashKeyValue
    - std::string::length
    - butil::StringPrintf
    - JoinString
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyFromAddresses(const butil::StringPiece& key,\n                              const
      void* const* addresses,\n                              size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:132,1
    - Dst: SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 134
    functionName: butil::debug::ScopedCrashKey::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - as_string
    - SetCrashKeyValue
    linkageType: ''
    returnType: void
    signature: "void ScopedCrashKey::ScopedCrashKey(const butil::StringPiece& key,\n
      \                              const butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClearCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: ScopedCrashKey::~ScopedCrashKey()
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - ClearCrashKey
    linkageType: ''
    returnType: void
    signature: void ScopedCrashKey::~ScopedCrashKey()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:142,1
    - Dst: CrashKeyMap::CrashKeyMap
      Src: /src/brpc/src/butil/debug/crash_logging.cc:149,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/crash_logging.cc:154,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:155,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/debug/crash_logging.cc:156,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    - Dst: size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 3
    argNames:
    - keys
    - count
    - chunk_max_length
    argTypes:
    - CrashKey*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 162
    functionName: butil::debug::InitCrashKeys
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 5
    functionsReached:
    - DCHECK_LT
    - butil::debug::NumChunksForLength
    - emplace
    - DCHECK
    - DCHECK_EQ
    - size
    - CrashKeyMap::CrashKeyMap
    linkageType: ''
    returnType: size_t
    signature: "size_t InitCrashKeys(const CrashKey* const keys, size_t count,\n                     size_t
      chunk_max_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/crash_logging.cc:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: butil::debug::LookupCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 7
    functionsReached:
    - as_string
    - find
    - end
    linkageType: ''
    returnType: CrashKey
    signature: CrashKey * LookupCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - set_key_func
    - clear_key_func
    argTypes:
    - SetCrashKeyValueFuncT
    - ClearCrashKeyValueFuncT
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::debug::SetCrashKeyReportingFunctions
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyReportingFunctions(\n    SetCrashKeyValueFuncT set_key_func,\n
      \   ClearCrashKeyValueFuncT clear_key_func)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:183,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:185,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:186,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:187,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' crash_key'
    - ' value'
    - chunk_max_length
    argTypes:
    - CrashKey
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 191
    functionName: butil::debug::ChunkCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 3
    functionsReached:
    - std::string::substr
    - std::vector::push_back
    - std::string::length
    - substr
    linkageType: ''
    returnType: std::vector<std::string>
    signature: "std::vector<std::string> ChunkCrashKeyValue(const CrashKey& crash_key,\n
      \                                           const butil::StringPiece& value,\n
      \                                           size_t chunk_max_length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 199
    functionName: butil::debug::ResetCrashLoggingForTesting
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResetCrashLoggingForTesting()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 9
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ceil
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/butil/debug/crash_logging.cc:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - length
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: butil::debug::NumChunksForLength
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 9
    functionsReached:
    - std::ceil
    - static_cast<double>
    linkageType: ''
    returnType: size_t
    signature: size_t NumChunksForLength(size_t length)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:52,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:54,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:59,1
    - Dst: butil::debug::ChunkCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:65,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:66,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:67,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:69,1
    - Dst: std::vector::size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:73,1
    - Dst: g_set_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:74,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 77
    functionName: butil::debug::SetCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 5
    functionsReached:
    - butil::debug::ChunkCrashKeyValue
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - DCHECK
    - g_set_key_func_
    - data
    - butil::StringPrintf
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyValue(const butil::StringPiece& key,\n                      const
      butil::StringPiece& value)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LookupCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:83,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:87,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:91,1
    - Dst: g_clear_key_func_
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    - Dst: data
      Src: /src/brpc/src/butil/debug/crash_logging.cc:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 94
    functionName: butil::debug::ClearCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 2
    functionsReached:
    - butil::debug::LookupCrashKey
    - butil::debug::NumChunksForLength
    - g_clear_key_func_
    - data
    - butil::StringPrintf
    linkageType: ''
    returnType: void
    signature: void ClearCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Addresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:99,1
    - Dst: butil::debug::SetCrashKeyFromAddresses
      Src: /src/brpc/src/butil/debug/crash_logging.cc:100,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' trace'
    argTypes:
    - butil::StringPiece
    - StackTrace
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 96
    functionDepth: 3
    functionLinenumber: 96
    functionLinenumberEnd: 101
    functionName: butil::debug::SetCrashKeyToStackTrace
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - Addresses
    - butil::debug::SetCrashKeyFromAddresses
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyToStackTrace(const butil::StringPiece& key,\n                             const
      StackTrace& trace)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::StringPrintf
      Src: /src/brpc/src/butil/debug/crash_logging.cc:114,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:115,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:118,1
    - Dst: JoinString
      Src: /src/brpc/src/butil/debug/crash_logging.cc:121,1
    - Dst: DCHECK_LE
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:124,1
    - Dst: butil::debug::SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 3
    argNames:
    - ' key'
    - addresses
    - count
    argTypes:
    - butil::StringPiece
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 103
    functionDepth: 2
    functionLinenumber: 103
    functionLinenumberEnd: 128
    functionName: butil::debug::SetCrashKeyFromAddresses
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 4
    functionsReached:
    - DCHECK_LE
    - std::vector::push_back
    - butil::debug::SetCrashKeyValue
    - std::string::length
    - butil::StringPrintf
    - JoinString
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyFromAddresses(const butil::StringPiece& key,\n                              const
      void* const* addresses,\n                              size_t count)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:132,1
    - Dst: SetCrashKeyValue
      Src: /src/brpc/src/butil/debug/crash_logging.cc:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - ' value'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 134
    functionName: butil::debug::ScopedCrashKey::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - as_string
    - SetCrashKeyValue
    linkageType: ''
    returnType: void
    signature: "void ScopedCrashKey::ScopedCrashKey(const butil::StringPiece& key,\n
      \                              const butil::StringPiece& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ClearCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.cc:137,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 138
    functionName: ScopedCrashKey::~ScopedCrashKey()
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 0
    functionsReached:
    - ClearCrashKey
    linkageType: ''
    returnType: void
    signature: void ScopedCrashKey::~ScopedCrashKey()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/crash_logging.cc:142,1
    - Dst: CrashKeyMap::CrashKeyMap
      Src: /src/brpc/src/butil/debug/crash_logging.cc:149,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/crash_logging.cc:154,1
    - Dst: butil::debug::NumChunksForLength
      Src: /src/brpc/src/butil/debug/crash_logging.cc:155,1
    - Dst: DCHECK_LT
      Src: /src/brpc/src/butil/debug/crash_logging.cc:156,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    - Dst: size
      Src: /src/brpc/src/butil/debug/crash_logging.cc:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 3
    argNames:
    - keys
    - count
    - chunk_max_length
    argTypes:
    - CrashKey*
    - size_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 162
    functionName: butil::debug::InitCrashKeys
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 5
    functionsReached:
    - DCHECK_LT
    - butil::debug::NumChunksForLength
    - emplace
    - DCHECK
    - DCHECK_EQ
    - size
    - CrashKeyMap::CrashKeyMap
    linkageType: ''
    returnType: size_t
    signature: "size_t InitCrashKeys(const CrashKey* const keys, size_t count,\n                     size_t
      chunk_max_length)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: as_string
      Src: /src/brpc/src/butil/debug/crash_logging.cc:167,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/crash_logging.cc:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: butil::debug::LookupCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 9
    functionsReached:
    - as_string
    - find
    - end
    linkageType: ''
    returnType: CrashKey
    signature: CrashKey * LookupCrashKey(const butil::StringPiece& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - set_key_func
    - clear_key_func
    argTypes:
    - SetCrashKeyValueFuncT
    - ClearCrashKeyValueFuncT
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 178
    functionName: butil::debug::SetCrashKeyReportingFunctions
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void SetCrashKeyReportingFunctions(\n    SetCrashKeyValueFuncT set_key_func,\n
      \   ClearCrashKeyValueFuncT clear_key_func)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:183,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:185,1
    - Dst: std::string::substr
      Src: /src/brpc/src/butil/debug/crash_logging.cc:186,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/butil/debug/crash_logging.cc:187,1
    - Dst: std::string::length
      Src: /src/brpc/src/butil/debug/crash_logging.cc:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' crash_key'
    - ' value'
    - chunk_max_length
    argTypes:
    - CrashKey
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 191
    functionName: butil::debug::ChunkCrashKeyValue
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 4
    functionsReached:
    - std::string::substr
    - std::vector::push_back
    - std::string::length
    - substr
    linkageType: ''
    returnType: std::vector<std::string>
    signature: "std::vector<std::string> ChunkCrashKeyValue(const CrashKey& crash_key,\n
      \                                           const butil::StringPiece& value,\n
      \                                           size_t chunk_max_length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 199
    functionName: butil::debug::ResetCrashLoggingForTesting
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResetCrashLoggingForTesting()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:20,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - trace
    - count
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 22
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 8
    functionsReached:
    - memcpy
    - std::min
    - arraysize
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(const void* const* trace, size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 29
    functionName: butil::debug::StackTrace::Addresses
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void *const *StackTrace::Addresses(size_t* count) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:32,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buffer
    - max_nframes
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::debug::StackTrace::CopyAddressTo
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached:
    - memcpy
    - std::min
    linkageType: ''
    returnType: size_t
    signature: size_t StackTrace::CopyAddressTo(void** buffer, size_t max_nframes)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/butil/debug/stack_trace.cc:39,1
    - Dst: butil::debug::StackTrace::OutputToString
      Src: /src/brpc/src/butil/debug/stack_trace.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 44
    functionName: butil::debug::StackTrace::ToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 5
    functionsReached:
    - butil::debug::StackTrace::OutputToString
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string StackTrace::ToString() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:20,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - trace
    - count
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 22
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 8
    functionsReached:
    - memcpy
    - std::min
    - arraysize
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(const void* const* trace, size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 29
    functionName: butil::debug::StackTrace::Addresses
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void *const *StackTrace::Addresses(size_t* count) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:32,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buffer
    - max_nframes
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::debug::StackTrace::CopyAddressTo
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached:
    - memcpy
    - std::min
    linkageType: ''
    returnType: size_t
    signature: size_t StackTrace::CopyAddressTo(void** buffer, size_t max_nframes)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/butil/debug/stack_trace.cc:39,1
    - Dst: butil::debug::StackTrace::OutputToString
      Src: /src/brpc/src/butil/debug/stack_trace.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 44
    functionName: butil::debug::StackTrace::ToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 5
    functionsReached:
    - butil::debug::StackTrace::OutputToString
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string StackTrace::ToString() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:20,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - trace
    - count
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 22
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 8
    functionsReached:
    - memcpy
    - std::min
    - arraysize
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(const void* const* trace, size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 29
    functionName: butil::debug::StackTrace::Addresses
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void *const *StackTrace::Addresses(size_t* count) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:32,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buffer
    - max_nframes
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::debug::StackTrace::CopyAddressTo
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached:
    - memcpy
    - std::min
    linkageType: ''
    returnType: size_t
    signature: size_t StackTrace::CopyAddressTo(void** buffer, size_t max_nframes)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/butil/debug/stack_trace.cc:39,1
    - Dst: butil::debug::StackTrace::OutputToString
      Src: /src/brpc/src/butil/debug/stack_trace.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 44
    functionName: butil::debug::StackTrace::ToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 5
    functionsReached:
    - butil::debug::StackTrace::OutputToString
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string StackTrace::ToString() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace.cc:18,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:20,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - trace
    - count
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 22
      start: 17
    functionDepth: 1
    functionLinenumber: 17
    functionLinenumberEnd: 22
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 8
    functionsReached:
    - memcpy
    - std::min
    - arraysize
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(const void* const* trace, size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 29
    functionName: butil::debug::StackTrace::Addresses
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void *const *StackTrace::Addresses(size_t* count) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace.cc:32,1
    - Dst: memcpy
      Src: /src/brpc/src/butil/debug/stack_trace.cc:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buffer
    - max_nframes
    argTypes:
    - void**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: butil::debug::StackTrace::CopyAddressTo
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 2
    functionsReached:
    - memcpy
    - std::min
    linkageType: ''
    returnType: size_t
    signature: size_t StackTrace::CopyAddressTo(void** buffer, size_t max_nframes)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/butil/debug/stack_trace.cc:39,1
    - Dst: butil::debug::StackTrace::OutputToString
      Src: /src/brpc/src/butil/debug/stack_trace.cc:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 44
    functionName: butil::debug::StackTrace::ToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.cc
    functionUses: 5
    functionsReached:
    - butil::debug::StackTrace::OutputToString
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string StackTrace::ToString() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 498
    functionDepth: 1
    functionLinenumber: 498
    functionLinenumberEnd: 500
    functionName: butil::debug::SandboxSymbolizeHelper::GetInstance
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: SandboxSymbolizeHelper
    signature: SandboxSymbolizeHelper * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::Init
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 505
    functionDepth: 1
    functionLinenumber: 505
    functionLinenumberEnd: 508
    functionName: butil::debug::SandboxSymbolizeHelper::SandboxSymbolizeHelper
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::Init
    linkageType: ''
    returnType: void
    signature: void SandboxSymbolizeHelper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnregisterCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:511,1
    - Dst: CloseObjectFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 513
    functionName: ~SandboxSymbolizeHelper()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - CloseObjectFiles
    - UnregisterCallback
    linkageType: ''
    returnType: void
    signature: void ~SandboxSymbolizeHelper()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: dup
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:533,1
    - Dst: lseek
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:539,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - file_path
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 547
    functionName: butil::debug::SandboxSymbolizeHelper::GetFileDescriptor
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - lseek
    - strcmp
    - dup
    - c_str
    - begin
    linkageType: ''
    returnType: int
    signature: int GetFileDescriptor(const char* file_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:571,1
    - Dst: SandboxSymbolizeHelper*::regions_::begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: SandboxSymbolizeHelper*::regions_::end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: strncpy
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: SandboxSymbolizeHelper*::GetFileDescriptor
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 5
    argNames:
    - pc
    - ' start_address'
    - ' base_address'
    - file_path
    - file_path_size
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 604
    functionName: butil::debug::SandboxSymbolizeHelper::OpenObjectFileContainingPc
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - SandboxSymbolizeHelper*::GetFileDescriptor
    - path::c_str
    - strncpy
    - SandboxSymbolizeHelper*::regions_::begin
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - SandboxSymbolizeHelper*::regions_::end
    linkageType: ''
    returnType: int
    signature: "int OpenObjectFileContainingPc(uint64_t pc, uint64_t& start_address,\n
      \                                       uint64_t& base_address, char* file_path,\n
      \                                       int file_path_size)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:612,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:613,1
    - Dst: ParseProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:618,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:619,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 625
    functionName: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - LOG
    - ReadProcMaps
    - ParseProcMaps
    linkageType: ''
    returnType: bool
    signature: bool CacheMemoryRegions()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: path::empty
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:654,1
    - Dst: find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: open
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:666,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:668,1
    - Dst: strerror
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:669,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 675
    functionName: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - path::c_str
    - path::empty
    - find
    - open
    - emplace
    - strerror
    - begin
    - LOG
    linkageType: ''
    returnType: void
    signature: void OpenSymbolFiles()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:679,1
    - Dst: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:680,1
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 678
    functionDepth: 2
    functionLinenumber: 678
    functionLinenumberEnd: 684
    functionName: butil::debug::SandboxSymbolizeHelper::Init
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    - butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    - butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    linkageType: ''
    returnType: void
    signature: void Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:689,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 692
    functionName: butil::debug::SandboxSymbolizeHelper::UnregisterCallback
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    linkageType: ''
    returnType: void
    signature: void UnregisterCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: close
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:700,1
    - Dst: clear
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:703,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 695
    functionDepth: 1
    functionLinenumber: 695
    functionLinenumberEnd: 705
    functionName: butil::debug::SandboxSymbolizeHelper::CloseObjectFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - IGNORE_EINTR
    - DCHECK
    - clear
    - begin
    - close
    linkageType: ''
    returnType: void
    signature: void CloseObjectFiles()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:728,1
    - Dst: butil::debug::EnableInProcessStackDumping
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:731,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 732
    functionName: butil::debug::EnableInProcessStackDumpingForSandbox
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - butil::debug::EnableInProcessStackDumping
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumpingForSandbox()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:739,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:741,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:742,1
    - Dst: butil::debug::WarmUpBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:745,1
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:748,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:751,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:753,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:754,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:755,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:756,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:757,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:760,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 734
    functionDepth: 1
    functionLinenumber: 734
    functionLinenumberEnd: 764
    functionName: butil::debug::EnableInProcessStackDumping
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - sigaction
    - sigemptyset
    - memset
    - butil::debug::WarmUpBacktrace
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumping()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetStackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: butil::saturated_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: backtrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: memmove
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:779,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 786
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 8
    functionsReached:
    - backtrace
    - arraysize
    - butil::saturated_cast<size_t>
    - memmove
    - GetStackTrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(bool exclude_self)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:794,1
    - Dst: SymbolizeAddress
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:795,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - symbol
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 804
    functionName: butil::debug::StackTrace::FindSymbol
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - SymbolizeAddress
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool StackTrace::FindSymbol(void* symbol) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 806
    functionDepth: 0
    functionLinenumber: 806
    functionLinenumberEnd: 814
    functionName: butil::debug::StackTrace::Print
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::Print() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:819,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 820
    functionName: butil::debug::StackTrace::OutputToStream
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToStream(std::ostream* os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:824,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 825
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 825
    functionName: butil::debug::StackTrace::OutputToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToString(std::string& str) const
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 18
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 498
    functionDepth: 1
    functionLinenumber: 498
    functionLinenumberEnd: 500
    functionName: butil::debug::SandboxSymbolizeHelper::GetInstance
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: SandboxSymbolizeHelper
    signature: SandboxSymbolizeHelper * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::Init
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 505
    functionDepth: 3
    functionLinenumber: 505
    functionLinenumberEnd: 508
    functionName: butil::debug::SandboxSymbolizeHelper::SandboxSymbolizeHelper
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::Init
    linkageType: ''
    returnType: void
    signature: void SandboxSymbolizeHelper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnregisterCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:511,1
    - Dst: CloseObjectFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 513
    functionName: ~SandboxSymbolizeHelper()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - CloseObjectFiles
    - UnregisterCallback
    linkageType: ''
    returnType: void
    signature: void ~SandboxSymbolizeHelper()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: dup
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:533,1
    - Dst: lseek
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:539,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - file_path
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 547
    functionName: butil::debug::SandboxSymbolizeHelper::GetFileDescriptor
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - lseek
    - strcmp
    - dup
    - c_str
    - begin
    linkageType: ''
    returnType: int
    signature: int GetFileDescriptor(const char* file_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:571,1
    - Dst: SandboxSymbolizeHelper*::regions_::begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: SandboxSymbolizeHelper*::regions_::end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: strncpy
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: SandboxSymbolizeHelper*::GetFileDescriptor
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 5
    argNames:
    - pc
    - ' start_address'
    - ' base_address'
    - file_path
    - file_path_size
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 604
    functionName: butil::debug::SandboxSymbolizeHelper::OpenObjectFileContainingPc
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - SandboxSymbolizeHelper*::GetFileDescriptor
    - path::c_str
    - strncpy
    - SandboxSymbolizeHelper*::regions_::begin
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - SandboxSymbolizeHelper*::regions_::end
    linkageType: ''
    returnType: int
    signature: "int OpenObjectFileContainingPc(uint64_t pc, uint64_t& start_address,\n
      \                                       uint64_t& base_address, char* file_path,\n
      \                                       int file_path_size)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:612,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:613,1
    - Dst: ParseProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:618,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:619,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 625
    functionName: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - LOG
    - ReadProcMaps
    - ParseProcMaps
    linkageType: ''
    returnType: bool
    signature: bool CacheMemoryRegions()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: path::empty
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:654,1
    - Dst: find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: open
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:666,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:668,1
    - Dst: strerror
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:669,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 675
    functionName: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 1
    functionsReached:
    - end
    - path::c_str
    - path::empty
    - find
    - open
    - emplace
    - strerror
    - begin
    - LOG
    linkageType: ''
    returnType: void
    signature: void OpenSymbolFiles()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:679,1
    - Dst: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:680,1
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 678
    functionDepth: 2
    functionLinenumber: 678
    functionLinenumberEnd: 684
    functionName: butil::debug::SandboxSymbolizeHelper::Init
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    - butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    - butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    linkageType: ''
    returnType: void
    signature: void Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:689,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 692
    functionName: butil::debug::SandboxSymbolizeHelper::UnregisterCallback
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    linkageType: ''
    returnType: void
    signature: void UnregisterCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: close
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:700,1
    - Dst: clear
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:703,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 695
    functionDepth: 1
    functionLinenumber: 695
    functionLinenumberEnd: 705
    functionName: butil::debug::SandboxSymbolizeHelper::CloseObjectFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - IGNORE_EINTR
    - DCHECK
    - clear
    - begin
    - close
    linkageType: ''
    returnType: void
    signature: void CloseObjectFiles()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:728,1
    - Dst: butil::debug::EnableInProcessStackDumping
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:731,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 732
    functionName: butil::debug::EnableInProcessStackDumpingForSandbox
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - butil::debug::EnableInProcessStackDumping
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumpingForSandbox()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:739,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:741,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:742,1
    - Dst: butil::debug::WarmUpBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:745,1
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:748,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:751,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:753,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:754,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:755,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:756,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:757,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:760,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 734
    functionDepth: 1
    functionLinenumber: 734
    functionLinenumberEnd: 764
    functionName: butil::debug::EnableInProcessStackDumping
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - sigaction
    - sigemptyset
    - memset
    - butil::debug::WarmUpBacktrace
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumping()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetStackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: butil::saturated_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: backtrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: memmove
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:779,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 786
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 8
    functionsReached:
    - backtrace
    - arraysize
    - butil::saturated_cast<size_t>
    - memmove
    - GetStackTrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(bool exclude_self)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:794,1
    - Dst: SymbolizeAddress
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:795,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - symbol
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 804
    functionName: butil::debug::StackTrace::FindSymbol
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - SymbolizeAddress
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool StackTrace::FindSymbol(void* symbol) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 806
    functionDepth: 0
    functionLinenumber: 806
    functionLinenumberEnd: 814
    functionName: butil::debug::StackTrace::Print
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::Print() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:819,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 820
    functionName: butil::debug::StackTrace::OutputToStream
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToStream(std::ostream* os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:824,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 825
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 825
    functionName: butil::debug::StackTrace::OutputToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToString(std::string& str) const
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 5
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 5
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 5
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 5
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 498
    functionDepth: 1
    functionLinenumber: 498
    functionLinenumberEnd: 500
    functionName: butil::debug::SandboxSymbolizeHelper::GetInstance
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: SandboxSymbolizeHelper
    signature: SandboxSymbolizeHelper * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::Init
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 505
    functionDepth: 3
    functionLinenumber: 505
    functionLinenumberEnd: 508
    functionName: butil::debug::SandboxSymbolizeHelper::SandboxSymbolizeHelper
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::Init
    linkageType: ''
    returnType: void
    signature: void SandboxSymbolizeHelper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnregisterCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:511,1
    - Dst: CloseObjectFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 513
    functionName: ~SandboxSymbolizeHelper()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - CloseObjectFiles
    - UnregisterCallback
    linkageType: ''
    returnType: void
    signature: void ~SandboxSymbolizeHelper()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: dup
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:533,1
    - Dst: lseek
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:539,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - file_path
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 547
    functionName: butil::debug::SandboxSymbolizeHelper::GetFileDescriptor
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - lseek
    - strcmp
    - dup
    - c_str
    - begin
    linkageType: ''
    returnType: int
    signature: int GetFileDescriptor(const char* file_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:571,1
    - Dst: SandboxSymbolizeHelper*::regions_::begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: SandboxSymbolizeHelper*::regions_::end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: strncpy
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: SandboxSymbolizeHelper*::GetFileDescriptor
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 5
    argNames:
    - pc
    - ' start_address'
    - ' base_address'
    - file_path
    - file_path_size
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 604
    functionName: butil::debug::SandboxSymbolizeHelper::OpenObjectFileContainingPc
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - SandboxSymbolizeHelper*::GetFileDescriptor
    - path::c_str
    - strncpy
    - SandboxSymbolizeHelper*::regions_::begin
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - SandboxSymbolizeHelper*::regions_::end
    linkageType: ''
    returnType: int
    signature: "int OpenObjectFileContainingPc(uint64_t pc, uint64_t& start_address,\n
      \                                       uint64_t& base_address, char* file_path,\n
      \                                       int file_path_size)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:612,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:613,1
    - Dst: ParseProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:618,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:619,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 625
    functionName: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - LOG
    - ReadProcMaps
    - ParseProcMaps
    linkageType: ''
    returnType: bool
    signature: bool CacheMemoryRegions()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: path::empty
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:654,1
    - Dst: find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: open
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:666,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:668,1
    - Dst: strerror
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:669,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 675
    functionName: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - end
    - path::c_str
    - path::empty
    - find
    - open
    - emplace
    - strerror
    - begin
    - LOG
    linkageType: ''
    returnType: void
    signature: void OpenSymbolFiles()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:679,1
    - Dst: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:680,1
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 678
    functionDepth: 2
    functionLinenumber: 678
    functionLinenumberEnd: 684
    functionName: butil::debug::SandboxSymbolizeHelper::Init
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    - butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    - butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    linkageType: ''
    returnType: void
    signature: void Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:689,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 692
    functionName: butil::debug::SandboxSymbolizeHelper::UnregisterCallback
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    linkageType: ''
    returnType: void
    signature: void UnregisterCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: close
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:700,1
    - Dst: clear
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:703,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 695
    functionDepth: 1
    functionLinenumber: 695
    functionLinenumberEnd: 705
    functionName: butil::debug::SandboxSymbolizeHelper::CloseObjectFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - IGNORE_EINTR
    - DCHECK
    - clear
    - begin
    - close
    linkageType: ''
    returnType: void
    signature: void CloseObjectFiles()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:728,1
    - Dst: butil::debug::EnableInProcessStackDumping
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:731,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 732
    functionName: butil::debug::EnableInProcessStackDumpingForSandbox
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - butil::debug::EnableInProcessStackDumping
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumpingForSandbox()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:739,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:741,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:742,1
    - Dst: butil::debug::WarmUpBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:745,1
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:748,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:751,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:753,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:754,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:755,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:756,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:757,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:760,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 734
    functionDepth: 1
    functionLinenumber: 734
    functionLinenumberEnd: 764
    functionName: butil::debug::EnableInProcessStackDumping
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - sigaction
    - sigemptyset
    - memset
    - butil::debug::WarmUpBacktrace
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumping()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetStackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: butil::saturated_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: backtrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: memmove
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:779,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 786
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 8
    functionsReached:
    - backtrace
    - arraysize
    - butil::saturated_cast<size_t>
    - memmove
    - GetStackTrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(bool exclude_self)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:794,1
    - Dst: SymbolizeAddress
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:795,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - symbol
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 804
    functionName: butil::debug::StackTrace::FindSymbol
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - SymbolizeAddress
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool StackTrace::FindSymbol(void* symbol) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 806
    functionDepth: 0
    functionLinenumber: 806
    functionLinenumberEnd: 814
    functionName: butil::debug::StackTrace::Print
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::Print() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:819,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 820
    functionName: butil::debug::StackTrace::OutputToStream
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToStream(std::ostream* os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:824,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 825
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 825
    functionName: butil::debug::StackTrace::OutputToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToString(std::string& str) const
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 6
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 6
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 6
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 6
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:81,1
    - Dst: std::string*::find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:84,1
    - Dst: std::string*::find_first_not_of
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:91,1
    - Dst: std::string*::size
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:93,1
    - Dst: std::string*::substr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:96,1
    - Dst: abi::__cxa_demangle
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:101,1
    - Dst: std::string*::erase
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:104,1
    - Dst: std::string*::insert
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:106,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:108,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - text
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: butil::debug::DemangleSymbols
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - std::string*::find
    - std::string*::size
    - std::string*::find_first_not_of
    - std::string::c_str
    - std::string*::erase
    - strlen
    - std::string*::insert
    - scoped_ptr::get
    - std::string*::substr
    - abi::__cxa_demangle
    linkageType: ''
    returnType: void
    signature: void DemangleSymbols(std::string* text)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: ~BacktraceOutputHandler()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~BacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:131,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:132,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - handler
    argTypes:
    - void*
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 135
    functionName: butil::debug::OutputPointer
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    linkageType: ''
    returnType: void
    signature: void OutputPointer(void* pointer, BacktraceOutputHandler* handler)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:143,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:144,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - frame_id
    - handler
    argTypes:
    - intptr_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 146
    functionName: butil::debug::OutputFrameId
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - BacktraceOutputHandler*::HandleOutput
    - butil::debug::internal::itoa_r
    linkageType: ''
    returnType: void
    signature: void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::OutputFrameId
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:157,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:158,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:159,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:160,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:166,1
    - Dst: Symbolize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:167,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:168,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:170,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:172,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:182,1
    - Dst: scoped_ptr::get
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:184,1
    - Dst: butil::debug::DemangleSymbols
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:185,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:186,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:187,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:196,1
    - Dst: butil::debug::OutputPointer
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:197,1
    - Dst: BacktraceOutputHandler*::HandleOutput
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 3
    argNames:
    - trace
    - size
    - handler
    argTypes:
    - void**
    - size_t
    - BacktraceOutputHandler*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 202
    functionName: butil::debug::ProcessBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::OutputPointer
    - std::string::c_str
    - BacktraceOutputHandler*::HandleOutput
    - static_cast<char*>
    - scoped_ptr::get
    - Symbolize
    - butil::debug::OutputFrameId
    - butil::debug::DemangleSymbols
    linkageType: ''
    returnType: void
    signature: "void ProcessBacktrace(void *const *trace,\n                      size_t
      size,\n                      BacktraceOutputHandler* handler)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ignore_result
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: HANDLE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    - Dst: strlen
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 208
    functionName: butil::debug::PrintToStderr
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - write
    - strlen
    - ignore_result
    - HANDLE_EINTR
    linkageType: ''
    returnType: void
    signature: void PrintToStderr(const char* output)
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::BeingDebugged
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:218,1
    - Dst: butil::debug::BreakDebugger
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:219,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:221,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:223,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:224,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:227,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:229,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:231,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:233,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:236,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:238,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:240,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:242,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:244,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:246,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:248,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:250,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:252,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:255,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:257,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:259,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:261,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:263,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:265,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:267,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:269,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:272,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:274,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:276,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: reinterpret_cast<intptr_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:280,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:282,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:284,1
    - Dst: butil::debug::StackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:286,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:290,1
    - Dst: ARRAYSIZE_UNSAFE
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:348,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:349,1
    - Dst: butil::debug::internal::itoa_r
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:350,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:352,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:355,1
    - Dst: butil::debug::PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:357,1
    - Dst: reinterpret_cast<ucontext_t*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:362,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:368,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:369,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:375,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:377,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:378,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:386,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:388,1
    - Dst: snprintf
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:389,1
    - Dst: write
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: std::min
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:397,1
    - Dst: _exit
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:400,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 80
    argCount: 3
    argNames:
    - signal
    - info
    - void_context
    argTypes:
    - int
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 401
    functionName: butil::debug::StackDumpSignalHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::BreakDebugger
    - ARRAYSIZE_UNSAFE
    - butil::debug::internal::itoa_r
    - reinterpret_cast<intptr_t>
    - butil::debug::StackTrace
    - butil::debug::BeingDebugged
    - static_cast<size_t>
    - reinterpret_cast<ucontext_t*>
    - std::min
    - snprintf
    - _exit
    - butil::debug::PrintToStderr
    - write
    linkageType: ''
    returnType: void
    signature: void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 405
    functionName: butil::debug::PrintBacktraceOutputHandler::PrintBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PrintBacktraceOutputHandler()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToStderr
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 411
    functionName: butil::debug::PrintBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - PrintToStderr
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: butil::debug::StreamBacktraceOutputHandler::StreamBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StreamBacktraceOutputHandler(std::ostream* os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: butil::debug::StreamBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 434
    functionName: butil::debug::StringBacktraceOutputHandler::StringBacktraceOutputHandler
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void StringBacktraceOutputHandler(std::string& str)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 443
    functionName: butil::debug::StringBacktraceOutputHandler::HandleOutput
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: void
    signature: void HandleOutput(const char* output)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 480
    functionName: butil::debug::WarmUpBacktrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void WarmUpBacktrace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move_first_n_to_target
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 498
    functionDepth: 1
    functionLinenumber: 498
    functionLinenumberEnd: 500
    functionName: butil::debug::SandboxSymbolizeHelper::GetInstance
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 6
    functionsReached:
    - move_first_n_to_target
    linkageType: ''
    returnType: SandboxSymbolizeHelper
    signature: SandboxSymbolizeHelper * GetInstance()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::Init
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 505
    functionDepth: 3
    functionLinenumber: 505
    functionLinenumberEnd: 508
    functionName: butil::debug::SandboxSymbolizeHelper::SandboxSymbolizeHelper
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::Init
    linkageType: ''
    returnType: void
    signature: void SandboxSymbolizeHelper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnregisterCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:511,1
    - Dst: CloseObjectFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 513
    functionName: ~SandboxSymbolizeHelper()
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - CloseObjectFiles
    - UnregisterCallback
    linkageType: ''
    returnType: void
    signature: void ~SandboxSymbolizeHelper()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:529,1
    - Dst: strcmp
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:530,1
    - Dst: dup
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:533,1
    - Dst: lseek
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:539,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - file_path
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 547
    functionName: butil::debug::SandboxSymbolizeHelper::GetFileDescriptor
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - lseek
    - strcmp
    - dup
    - c_str
    - begin
    linkageType: ''
    returnType: int
    signature: int GetFileDescriptor(const char* file_path)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:571,1
    - Dst: SandboxSymbolizeHelper*::regions_::begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: SandboxSymbolizeHelper*::regions_::end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:578,1
    - Dst: strncpy
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:596,1
    - Dst: SandboxSymbolizeHelper*::GetFileDescriptor
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:600,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 5
    argNames:
    - pc
    - ' start_address'
    - ' base_address'
    - file_path
    - file_path_size
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 604
    functionName: butil::debug::SandboxSymbolizeHelper::OpenObjectFileContainingPc
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - SandboxSymbolizeHelper*::GetFileDescriptor
    - path::c_str
    - strncpy
    - SandboxSymbolizeHelper*::regions_::begin
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - SandboxSymbolizeHelper*::regions_::end
    linkageType: ''
    returnType: int
    signature: "int OpenObjectFileContainingPc(uint64_t pc, uint64_t& start_address,\n
      \                                       uint64_t& base_address, char* file_path,\n
      \                                       int file_path_size)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:612,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:613,1
    - Dst: ParseProcMaps
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:618,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:619,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 625
    functionName: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - LOG
    - ReadProcMaps
    - ParseProcMaps
    linkageType: ''
    returnType: bool
    signature: bool CacheMemoryRegions()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:646,1
    - Dst: path::empty
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:654,1
    - Dst: find
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:663,1
    - Dst: open
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: path::c_str
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:664,1
    - Dst: emplace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:666,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:668,1
    - Dst: strerror
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:669,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 675
    functionName: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 3
    functionsReached:
    - end
    - path::c_str
    - path::empty
    - find
    - open
    - emplace
    - strerror
    - begin
    - LOG
    linkageType: ''
    returnType: void
    signature: void OpenSymbolFiles()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:679,1
    - Dst: butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:680,1
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:681,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 678
    functionDepth: 2
    functionLinenumber: 678
    functionLinenumberEnd: 684
    functionName: butil::debug::SandboxSymbolizeHelper::Init
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    - butil::debug::SandboxSymbolizeHelper::OpenSymbolFiles
    - butil::debug::SandboxSymbolizeHelper::CacheMemoryRegions
    linkageType: ''
    returnType: void
    signature: void Init()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InstallSymbolizeOpenObjectFileCallback
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:689,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 692
    functionName: butil::debug::SandboxSymbolizeHelper::UnregisterCallback
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - InstallSymbolizeOpenObjectFileCallback
    linkageType: ''
    returnType: void
    signature: void UnregisterCallback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: end
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:698,1
    - Dst: IGNORE_EINTR
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: close
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:699,1
    - Dst: DCHECK
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:700,1
    - Dst: clear
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:703,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 695
    functionDepth: 1
    functionLinenumber: 695
    functionLinenumberEnd: 705
    functionName: butil::debug::SandboxSymbolizeHelper::CloseObjectFiles
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - end
    - IGNORE_EINTR
    - DCHECK
    - clear
    - begin
    - close
    linkageType: ''
    returnType: void
    signature: void CloseObjectFiles()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::SandboxSymbolizeHelper::GetInstance
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:728,1
    - Dst: butil::debug::EnableInProcessStackDumping
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:731,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 726
    functionDepth: 2
    functionLinenumber: 726
    functionLinenumberEnd: 732
    functionName: butil::debug::EnableInProcessStackDumpingForSandbox
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - butil::debug::SandboxSymbolizeHelper::GetInstance
    - butil::debug::EnableInProcessStackDumping
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumpingForSandbox()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:739,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:741,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:742,1
    - Dst: butil::debug::WarmUpBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:745,1
    - Dst: memset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:748,1
    - Dst: sigemptyset
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:751,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:753,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:754,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:755,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:756,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:757,1
    - Dst: sigaction
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:760,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 734
    functionDepth: 1
    functionLinenumber: 734
    functionLinenumberEnd: 764
    functionName: butil::debug::EnableInProcessStackDumping
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - sigaction
    - sigemptyset
    - memset
    - butil::debug::WarmUpBacktrace
    linkageType: ''
    returnType: bool
    signature: bool EnableInProcessStackDumping()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetStackTrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:771,1
    - Dst: butil::saturated_cast<size_t>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: backtrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: arraysize
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:776,1
    - Dst: memmove
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:779,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - exclude_self
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 786
    functionName: butil::debug::StackTrace::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 8
    functionsReached:
    - backtrace
    - arraysize
    - butil::saturated_cast<size_t>
    - memmove
    - GetStackTrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::StackTrace(bool exclude_self)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:794,1
    - Dst: SymbolizeAddress
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:795,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - symbol
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 804
    functionName: butil::debug::StackTrace::FindSymbol
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 7
    functionsReached:
    - SymbolizeAddress
    - static_cast<char*>
    linkageType: ''
    returnType: bool
    signature: bool StackTrace::FindSymbol(void* symbol) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 806
    functionDepth: 0
    functionLinenumber: 806
    functionLinenumberEnd: 814
    functionName: butil::debug::StackTrace::Print
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 0
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::Print() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:819,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 820
    functionName: butil::debug::StackTrace::OutputToStream
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 2
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToStream(std::ostream* os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ProcessBacktrace
      Src: /src/brpc/src/butil/debug/stack_trace_posix.cc:824,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 825
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 825
    functionName: butil::debug::StackTrace::OutputToString
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 4
    functionsReached:
    - ProcessBacktrace
    linkageType: ''
    returnType: void
    signature: void StackTrace::OutputToString(std::string& str) const
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 36
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 5
    argNames:
    - i
    - buf
    - sz
    - base
    - padding
    argTypes:
    - intptr_t
    - char*
    - size_t
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 889
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 889
    functionName: butil::debug::internal::itoa_r
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace_posix.cc
    functionUses: 36
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 99
    functionName: butil::debug::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT StackTrace
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::debug::FrameCount
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t FrameCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 99
    functionName: butil::debug::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT StackTrace
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::debug::FrameCount
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t FrameCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 99
    functionName: butil::debug::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT StackTrace
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::debug::FrameCount
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t FrameCount() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 99
    functionName: butil::debug::StackTrace
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT StackTrace
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: butil::debug::FrameCount
    functionSourceFile: /src/brpc/src/butil/debug/stack_trace.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t FrameCount() const
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: butil::debug::DumpWithoutCrashing
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DumpWithoutCrashing()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::debug::SetDumpWithoutCrashingFunction
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetDumpWithoutCrashingFunction(void (CDECL *function)())
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: butil::debug::DumpWithoutCrashing
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DumpWithoutCrashing()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::debug::SetDumpWithoutCrashingFunction
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetDumpWithoutCrashingFunction(void (CDECL *function)())
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: butil::debug::DumpWithoutCrashing
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DumpWithoutCrashing()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::debug::SetDumpWithoutCrashingFunction
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetDumpWithoutCrashingFunction(void (CDECL *function)())
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 24
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 24
    functionName: butil::debug::DumpWithoutCrashing
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DumpWithoutCrashing()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: butil::debug::SetDumpWithoutCrashingFunction
    functionSourceFile: /src/brpc/src/butil/debug/dump_without_crashing.cc
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetDumpWithoutCrashingFunction(void (CDECL *function)())
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::ScopedCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.h:47,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/debug/crash_logging.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: butil::debug::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 1
    functionsReached:
    - butil::debug::ScopedCrashKey
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedCrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: butil::debug::CrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT CrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::ScopedCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.h:47,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/debug/crash_logging.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: butil::debug::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 2
    functionsReached:
    - butil::debug::ScopedCrashKey
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedCrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: butil::debug::CrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT CrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::ScopedCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.h:47,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/debug/crash_logging.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: butil::debug::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 3
    functionsReached:
    - butil::debug::ScopedCrashKey
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedCrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: butil::debug::CrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT CrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::ScopedCrashKey
      Src: /src/brpc/src/butil/debug/crash_logging.h:47,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/butil/debug/crash_logging.h:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: butil::debug::ScopedCrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 4
    functionsReached:
    - butil::debug::ScopedCrashKey
    - DISALLOW_COPY_AND_ASSIGN
    linkageType: ''
    returnType: class BUTIL_EXPORT
    signature: class BUTIL_EXPORT ScopedCrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 66
    functionName: butil::debug::CrashKey
    functionSourceFile: /src/brpc/src/butil/debug/crash_logging.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BUTIL_EXPORT
    signature: struct BUTIL_EXPORT CrashKey
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~LeakTracker()
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LeakTracker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::debug::LeakTracker::CheckForLeaks
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckForLeaks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: butil::debug::LeakTracker::NumLiveInstances
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int NumLiveInstances()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: butil::debug::LeakTracker::LeakTracker
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::instances
    linkageType: ''
    returnType: void
    signature: void LeakTracker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::RemoveFromList
      Src: /src/brpc/src/butil/debug/leak_tracker.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: ~LeakTracker()
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 0
    functionsReached:
    - butil::debug::RemoveFromList
    linkageType: ''
    returnType: void
    signature: void ~LeakTracker()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:87,1
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:88,1
    - Dst: LinkNode*::next
      Src: /src/brpc/src/butil/debug/leak_tracker.h:89,1
    - Dst: LinkNode*::value
      Src: /src/brpc/src/butil/debug/leak_tracker.h:90,1
    - Dst: OutputToStream
      Src: /src/brpc/src/butil/debug/leak_tracker.h:98,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/leak_tracker.h:99,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/debug/leak_tracker.h:99,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/debug/leak_tracker.h:102,1
    - Dst: Print
      Src: /src/brpc/src/butil/debug/leak_tracker.h:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 110
    functionName: butil::debug::LeakTracker::CheckForLeaks
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 8
    functionsReached:
    - std::ostringstream::str
    - Print
    - butil::debug::LeakTracker::instances
    - OutputToStream
    - LinkNode*::next
    - CHECK_EQ
    - LinkNode*::value
    - LOG
    linkageType: ''
    returnType: void
    signature: void CheckForLeaks()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:115,1
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:116,1
    - Dst: LinkNode*::next
      Src: /src/brpc/src/butil/debug/leak_tracker.h:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 121
    functionName: butil::debug::LeakTracker::NumLiveInstances
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 24
    functionsReached:
    - butil::debug::LeakTracker::instances
    - LinkNode*::next
    linkageType: ''
    returnType: int
    signature: int NumLiveInstances()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 128
    functionName: butil::debug::LeakTracker::instances
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: LinkedList<LeakTracker<T> >
    signature: LinkedList<LeakTracker<T> > * instances()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: ~LeakTracker()
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~LeakTracker()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: butil::debug::LeakTracker::CheckForLeaks
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckForLeaks()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: butil::debug::LeakTracker::NumLiveInstances
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int NumLiveInstances()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: butil::debug::LeakTracker::LeakTracker
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 0
    functionsReached:
    - butil::debug::LeakTracker::instances
    linkageType: ''
    returnType: void
    signature: void LeakTracker()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::RemoveFromList
      Src: /src/brpc/src/butil/debug/leak_tracker.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: ~LeakTracker()
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 0
    functionsReached:
    - butil::RemoveFromList
    linkageType: ''
    returnType: void
    signature: void ~LeakTracker()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:87,1
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:88,1
    - Dst: LinkNode*::next
      Src: /src/brpc/src/butil/debug/leak_tracker.h:89,1
    - Dst: LinkNode*::value
      Src: /src/brpc/src/butil/debug/leak_tracker.h:90,1
    - Dst: OutputToStream
      Src: /src/brpc/src/butil/debug/leak_tracker.h:98,1
    - Dst: LOG
      Src: /src/brpc/src/butil/debug/leak_tracker.h:99,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/butil/debug/leak_tracker.h:99,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/butil/debug/leak_tracker.h:102,1
    - Dst: Print
      Src: /src/brpc/src/butil/debug/leak_tracker.h:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 110
    functionName: butil::debug::LeakTracker::CheckForLeaks
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 8
    functionsReached:
    - std::ostringstream::str
    - Print
    - butil::debug::LeakTracker::instances
    - OutputToStream
    - LinkNode*::next
    - CHECK_EQ
    - LinkNode*::value
    - LOG
    linkageType: ''
    returnType: void
    signature: void CheckForLeaks()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:115,1
    - Dst: butil::debug::LeakTracker::instances
      Src: /src/brpc/src/butil/debug/leak_tracker.h:116,1
    - Dst: LinkNode*::next
      Src: /src/brpc/src/butil/debug/leak_tracker.h:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 121
    functionName: butil::debug::LeakTracker::NumLiveInstances
    functionSourceFile: /src/brpc/src/butil/debug/leak_tracker.h
    functionUses: 24
    functionsReached:
    - butil::debug::LeakTracker::instances
    - LinkNode*::next
    linkageType: ''
    returnType: int
   